{"version":3,"sources":["vendor/ember-cli/vendor-prefix.js","vendor/loader/loader.js","vendor/regenerator-runtime/runtime.js","vendor/ember/jquery/jquery.js","license.js","loader.js","@glimmer/encoder.js","@glimmer/low-level.js","@glimmer/node.js","@glimmer/opcode-compiler.js","@glimmer/program.js","@glimmer/reference.js","@glimmer/runtime.js","@glimmer/util.js","@glimmer/vm.js","@glimmer/wire-format.js","backburner.js","container.js","dag-map.js","ember-application/index.js","ember-application/initializers/dom-templates.js","ember-application/system/application-instance.js","ember-application/system/application.js","ember-application/system/engine-instance.js","ember-application/system/engine-parent.js","ember-application/system/engine.js","ember-application/system/resolver.js","ember-application/utils/validate-type.js","ember-babel.js","ember-console.js","ember-debug/deprecate.js","ember-debug/error.js","ember-debug/features.js","ember-debug/handlers.js","ember-debug/index.js","ember-debug/testing.js","ember-debug/warn.js","ember-environment.js","ember-extension-support/container_debug_adapter.js","ember-extension-support/data_adapter.js","ember-extension-support/index.js","ember-glimmer.js","ember-metal.js","ember-routing/ext/controller.js","ember-routing/index.js","ember-routing/location/api.js","ember-routing/location/auto_location.js","ember-routing/location/hash_location.js","ember-routing/location/history_location.js","ember-routing/location/none_location.js","ember-routing/location/util.js","ember-routing/services/router.js","ember-routing/services/routing.js","ember-routing/system/cache.js","ember-routing/system/controller_for.js","ember-routing/system/dsl.js","ember-routing/system/generate_controller.js","ember-routing/system/query_params.js","ember-routing/system/route.js","ember-routing/system/router.js","ember-routing/system/router_state.js","ember-routing/system/transition.js","ember-routing/utils.js","ember-runtime/compare.js","ember-runtime/computed/computed_macros.js","ember-runtime/computed/reduce_computed_macros.js","ember-runtime/controllers/controller.js","ember-runtime/copy.js","ember-runtime/ext/function.js","ember-runtime/ext/rsvp.js","ember-runtime/ext/string.js","ember-runtime/index.js","ember-runtime/inject.js","ember-runtime/is-equal.js","ember-runtime/mixins/-proxy.js","ember-runtime/mixins/action_handler.js","ember-runtime/mixins/array.js","ember-runtime/mixins/comparable.js","ember-runtime/mixins/container_proxy.js","ember-runtime/mixins/controller.js","ember-runtime/mixins/copyable.js","ember-runtime/mixins/enumerable.js","ember-runtime/mixins/evented.js","ember-runtime/mixins/mutable_enumerable.js","ember-runtime/mixins/observable.js","ember-runtime/mixins/promise_proxy.js","ember-runtime/mixins/registry_proxy.js","ember-runtime/mixins/target_action_support.js","ember-runtime/string_registry.js","ember-runtime/system/application.js","ember-runtime/system/array_proxy.js","ember-runtime/system/core_object.js","ember-runtime/system/lazy_load.js","ember-runtime/system/namespace.js","ember-runtime/system/object.js","ember-runtime/system/object_proxy.js","ember-runtime/system/service.js","ember-runtime/system/string.js","ember-runtime/utils.js","ember-template-compiler/compat.js","ember-template-compiler/index.js","ember-template-compiler/plugins/assert-if-helper-without-arguments.js","ember-template-compiler/plugins/assert-input-helper-without-block.js","ember-template-compiler/plugins/assert-reserved-named-arguments.js","ember-template-compiler/plugins/deprecate-render-model.js","ember-template-compiler/plugins/deprecate-render.js","ember-template-compiler/plugins/extract-pragma-tag.js","ember-template-compiler/plugins/index.js","ember-template-compiler/plugins/transform-action-syntax.js","ember-template-compiler/plugins/transform-angle-bracket-components.js","ember-template-compiler/plugins/transform-attrs-into-args.js","ember-template-compiler/plugins/transform-dot-component-invocation.js","ember-template-compiler/plugins/transform-each-in-into-each.js","ember-template-compiler/plugins/transform-has-block-syntax.js","ember-template-compiler/plugins/transform-in-element.js","ember-template-compiler/plugins/transform-inline-link-to.js","ember-template-compiler/plugins/transform-input-type-syntax.js","ember-template-compiler/plugins/transform-old-binding-syntax.js","ember-template-compiler/plugins/transform-old-class-binding-syntax.js","ember-template-compiler/plugins/transform-quoted-bindings-into-just-bindings.js","ember-template-compiler/plugins/transform-top-level-components.js","ember-template-compiler/system/bootstrap.js","ember-template-compiler/system/calculate-location-display.js","ember-template-compiler/system/compile-options.js","ember-template-compiler/system/compile.js","ember-template-compiler/system/precompile.js","ember-testing/adapters/adapter.js","ember-testing/adapters/qunit.js","ember-testing/events.js","ember-testing/ext/application.js","ember-testing/ext/rsvp.js","ember-testing/helpers.js","ember-testing/helpers/-is-form-control.js","ember-testing/helpers/and_then.js","ember-testing/helpers/click.js","ember-testing/helpers/current_path.js","ember-testing/helpers/current_route_name.js","ember-testing/helpers/current_url.js","ember-testing/helpers/fill_in.js","ember-testing/helpers/find.js","ember-testing/helpers/find_with_assert.js","ember-testing/helpers/key_event.js","ember-testing/helpers/pause_test.js","ember-testing/helpers/trigger_event.js","ember-testing/helpers/visit.js","ember-testing/helpers/wait.js","ember-testing/index.js","ember-testing/initializers.js","ember-testing/setup_for_testing.js","ember-testing/support.js","ember-testing/test.js","ember-testing/test/adapter.js","ember-testing/test/helpers.js","ember-testing/test/on_inject_helpers.js","ember-testing/test/pending_requests.js","ember-testing/test/promise.js","ember-testing/test/run.js","ember-testing/test/waiters.js","ember-utils.js","ember-views/compat/attrs.js","ember-views/compat/fallback-view-registry.js","ember-views/component_lookup.js","ember-views/index.js","ember-views/mixins/action_support.js","ember-views/mixins/child_views_support.js","ember-views/mixins/class_names_support.js","ember-views/mixins/text_support.js","ember-views/mixins/view_state_support.js","ember-views/mixins/view_support.js","ember-views/system/action_manager.js","ember-views/system/event_dispatcher.js","ember-views/system/jquery.js","ember-views/system/lookup_partial.js","ember-views/system/utils.js","ember-views/utils/lookup-component.js","ember-views/views/core_view.js","ember-views/views/states.js","ember-views/views/states/default.js","ember-views/views/states/destroying.js","ember-views/views/states/has_element.js","ember-views/views/states/in_dom.js","ember-views/views/states/pre_render.js","ember/features.js","ember/index.js","ember/version.js","handlebars.js","node-module.js","route-recognizer.js","router.js","rsvp.js","bootstrap","vendor/ember-cli-shims/deprecations.js","vendor/ember-cli-shims/app-shims.js","vendor/ember-resolver/legacy-shims.js","vendor/lodash/lodash.core.min.js","vendor/a24Core/a24Core.js","vendor/MDBootstrap/js/jquery-3.2.1.min.js","vendor/MDBootstrap/js/popper.min.js","vendor/MDBootstrap/js/bootstrap.min.js","vendor/MDBootstrap/js/modules (optional)/jquery.easing.js","vendor/MDBootstrap/js/modules (optional)/velocity.min.js","vendor/MDBootstrap/js/modules (optional)/wow.js","vendor/MDBootstrap/js/modules (optional)/scrolling-navbar.js","vendor/MDBootstrap/js/modules (optional)/waves.js","vendor/MDBootstrap/js/modules (optional)/preloading.js","vendor/MDBootstrap/js/modules (optional)/card-reveal.js","vendor/MDBootstrapCustom/js/modules(optional)/character-counter.js","vendor/MDBootstrap/js/modules (optional)/toastr.js","vendor/MDBootstrap/js/modules (optional)/smooth-scroll.js","vendor/MDBootstrap/js/modules (optional)/dropdown.js","vendor/MDBootstrapCustom/js/modules(optional)/buttons.js","vendor/MDBootstrap/js/modules (optional)/hammer.js","vendor/MDBootstrap/js/modules (optional)/jquery.hammer.js","vendor/MDBootstrapCustom/js/modules(optional)/sidenav.js","vendor/MDBootstrap/js/modules (optional)/collapsible.js","vendor/MDBootstrapCustom/js/modules(optional)/forms-free.js","vendor/MDBootstrap/js/modules (optional)/picker.js","vendor/MDBootstrapCustom/js/modules(optional)/picker-date.js","vendor/MDBootstrapCustom/js/modules(optional)/picker-time.js","vendor/MDBootstrap/js/modules (optional)/jquery.sticky.js","vendor/MDBootstrap/js/modules (optional)/scrollbar.js","vendor/MDBootstrapCustom/js/modules(optional)/animations.js","vendor/MDBootstrapCustom/js/modules(optional)/material-select.js","vendor/MDBootstrapCustom/js/modules(optional)/chips.js","vendor/MDBootstrap/js/modules (optional)/enhanced-modals.js","vendor/MDBootstrap/js/modules (optional)/chart.js","vendor/Polyfill/MouseEvent.js","vendor/moment/moment.min.js","vendor/moment/moment-timezone-with-data.min.js","vendor/moment/moment-timezone-utils.min.js","vendor/tinymce/tinymce.min.js","vendor/FileSaver/FileSaver.js","vendor/a24Lib/a24Constants.js","vendor/a24Lib/a24ConstantsExtend.js","vendor/a24Lib/a24.js","vendor/a24Lib/a24Extend.js","vendor/a24Lib/a24DateHelper.js","vendor/a24Lib/a24DateHelperExtend.js","vendor/a24Lib/a24RestUtils.js","vendor/a24Lib/a24RestUtilsExtend.js","vendor/a24Lib/a24Validation.js","vendor/a24Lib/a24ValidationExtend.js","vendor/a24Lib/a24ComponentEvent.js","vendor/a24Lib/a24ComponentEventExtend.js","vendor/a24LibCalander/a24Constants.js","vendor/a24SSCore/a24.js","index.js","vendor/a24LibSSEL/a24Constants.js","vendor/a24LibSSEL/a24DateHelper.js","vendor/a24PolicyLibraryLib/a24Constants.js","vendor/a24SSCandidateProfileLib/a24.js","vendor/a24SSCandidateProfileLib/a24Constants.js","node_modules/spark-md5/spark-md5.js","vendor/a24LibAgencySubdomain/a24RestUtils.js","vendor/a24LibAgencySubdomain/a24Constants.js","addon-tree-output/@ember/ordered-set/index.js","addon-tree-output/a24-calendar/components/calendar-day.js","addon-tree-output/a24-calendar/components/calendar-month.js","addon-tree-output/a24-calendar/components/calendar-navigation.js","addon-tree-output/a24-calendar/templates/components/calendar-day.js","addon-tree-output/a24-calendar/templates/components/calendar-month.js","addon-tree-output/a24-calendar/templates/components/calendar-navigation.js","addon-tree-output/a24-ember-candidate-profile/components/candidate-activities.js","addon-tree-output/a24-ember-candidate-profile/components/candidate-compliance-exemptions.js","addon-tree-output/a24-ember-candidate-profile/components/candidate-dismissals.js","addon-tree-output/a24-ember-candidate-profile/components/candidate-equality-monitoring-section-component.js","addon-tree-output/a24-ember-candidate-profile/components/candidate-exclusions.js","addon-tree-output/a24-ember-candidate-profile/components/candidate-external-days-to-expiry.js","addon-tree-output/a24-ember-candidate-profile/components/candidate-external-documents.js","addon-tree-output/a24-ember-candidate-profile/components/candidate-external-general.js","addon-tree-output/a24-ember-candidate-profile/components/candidate-external-verification.js","addon-tree-output/a24-ember-candidate-profile/components/candidate-info-section-component.js","addon-tree-output/a24-ember-candidate-profile/components/candidate-languages.js","addon-tree-output/a24-ember-candidate-profile/components/candidate-misc-details.js","addon-tree-output/a24-ember-candidate-profile/components/candidate-next-of-kin.js","addon-tree-output/a24-ember-candidate-profile/components/candidate-other-names.js","addon-tree-output/a24-ember-candidate-profile/components/candidate-plugins-overview.js","addon-tree-output/a24-ember-candidate-profile/components/candidate-position-held.js","addon-tree-output/a24-ember-candidate-profile/components/candidate-qualifications.js","addon-tree-output/a24-ember-candidate-profile/components/candidate-skills.js","addon-tree-output/a24-ember-candidate-profile/components/card-datagrid-custom-filter-candidate-distance.js","addon-tree-output/a24-ember-candidate-profile/components/card-datagrid-custom-filter-candidate-external-days-to-expiry.js","addon-tree-output/a24-ember-candidate-profile/components/card-datagrid-custom-filter-candidate-external-portfolios.js","addon-tree-output/a24-ember-candidate-profile/components/card-datagrid-custom-filter-candidate-position-held.js","addon-tree-output/a24-ember-candidate-profile/components/card-datagrid-custom-filter-candidate-professional-registration.js","addon-tree-output/a24-ember-candidate-profile/components/card-datagrid-custom-filter-consultant-role.js","addon-tree-output/a24-ember-candidate-profile/components/compliance-rules-condition-query-builder.js","addon-tree-output/a24-ember-candidate-profile/components/email-preview.js","addon-tree-output/a24-ember-candidate-profile/components/page-agency-group-candidate-view.js","addon-tree-output/a24-ember-candidate-profile/components/page-compliance-rule-view.js","addon-tree-output/a24-ember-candidate-profile/components/page-compliance-rules.js","addon-tree-output/a24-ember-candidate-profile/components/right-panel-agency-candidate-calendar.js","addon-tree-output/a24-ember-candidate-profile/components/right-panel-candidate-profile.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-position-held.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-professional-registration-react.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-profile-calendar.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-profile-compliance-exemptions.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-profile-compliance-passport.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-profile-crb-check.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-profile-dismissals.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-profile-documents-react.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-profile-equality-monitoring.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-profile-exclusions.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-profile-external-info.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-profile-general-react.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-profile-health-info.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-profile-languages.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-profile-misc-details.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-profile-next-of-kin.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-profile-notifications-preferences.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-profile-occupational-health.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-profile-other-names.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-profile-payroll-number.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-profile-references-react.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-profile-right-to-work.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-profile-tags.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-qualifications.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-skills.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-social-links-react.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-candidate-work-history-react.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-position-held.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-professional-registration-react.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-compliance-exemptions.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-compliance-passport.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-crb-check.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-dismissals.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-documents-react.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-equality.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-external-info.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-general-react.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-health-info.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-languages.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-misc-details.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-next-of-kin.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-notifications-preferences.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-occupational-health.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-other-names.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-payroll-number.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-plugins.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-policy.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-references-react.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-right-to-work.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-tags.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-qualifications.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-skills.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-social-links-react.js","addon-tree-output/a24-ember-candidate-profile/components/tab-agency-group-candidate-work-history-react.js","addon-tree-output/a24-ember-candidate-profile/services/a24-constants-candidate-profile.js","addon-tree-output/a24-ember-candidate-profile/services/a24-enums-candidate-profile.js","addon-tree-output/a24-ember-candidate-profile/services/a24-strings-candidate-profile.js","addon-tree-output/a24-ember-candidate-profile/services/candidate-document-generation-service.js","addon-tree-output/a24-ember-candidate-profile/services/card-datagrid-custom-filter-candidate-distance.js","addon-tree-output/a24-ember-candidate-profile/services/card-datagrid-custom-filter-candidate-external-days-to-expiry.js","addon-tree-output/a24-ember-candidate-profile/services/card-datagrid-custom-filter-candidate-external-portfolios.js","addon-tree-output/a24-ember-candidate-profile/services/card-datagrid-custom-filter-candidate-position-held.js","addon-tree-output/a24-ember-candidate-profile/services/card-datagrid-custom-filter-candidate-professional-registration.js","addon-tree-output/a24-ember-candidate-profile/services/card-datagrid-custom-filter-consultant-role.js","addon-tree-output/a24-ember-candidate-profile/services/rest-advanced-search-activity-type.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-activity-conversation.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-activity-email-communication-message.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-activity-notification.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-autocomplete.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-candidate-activity.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-candidate-address-details.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-candidate-basic-info.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-candidate-contact-numbers.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-candidate-emails.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-candidate-employment-dismissals.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-candidate-equality.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-candidate-languages.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-candidate-meta.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-candidate-misc-details.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-candidate-next-of-kin.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-candidate-notifications.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-candidate-other-names.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-candidate-qualifications.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-candidate-settings.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-candidate-skills.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-candidate-status.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-candidate-type.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-consultant-role.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-global-search.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-activity-conversation.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-activity-email-communication-message.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-activity-notification.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-autocomplete.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-candidate-activity.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-candidate-advanced-search.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-candidate-basic-info.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-candidate-consultant.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-candidate-employment-dismissals.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-candidate-languages.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-candidate-misc-details.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-candidate-next-of-kin.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-candidate-notification.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-candidate-other-names.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-candidate-plugin.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-candidate-position-held.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-candidate-qualifications.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-candidate-report-interview-profile.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-candidate-settings.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-candidate-skills.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-candidate-stated-skills.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-candidate-type.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-consultant-role.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-equality-monitoring.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-job-title.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-lookup.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-notification-type-templates.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-notification-types.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-status-details.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-group-status-reason.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-job-title.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-lookup.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-notification-type-templates.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-notification-types.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-status-details.js","addon-tree-output/a24-ember-candidate-profile/services/rest-agency-user-avatar.js","addon-tree-output/a24-ember-candidate-profile/services/rest-candidate-basic-info.js","addon-tree-output/a24-ember-candidate-profile/services/rest-candidate-employment-dismissals.js","addon-tree-output/a24-ember-candidate-profile/services/rest-candidate-languages.js","addon-tree-output/a24-ember-candidate-profile/services/rest-candidate-misc-details.js","addon-tree-output/a24-ember-candidate-profile/services/rest-candidate-next-of-kin.js","addon-tree-output/a24-ember-candidate-profile/services/rest-candidate-other-names.js","addon-tree-output/a24-ember-candidate-profile/services/rest-candidate-plugin.js","addon-tree-output/a24-ember-candidate-profile/services/rest-candidate-profile-equality.js","addon-tree-output/a24-ember-candidate-profile/services/rest-candidate-qualifications.js","addon-tree-output/a24-ember-candidate-profile/services/rest-candidate-settings.js","addon-tree-output/a24-ember-candidate-profile/services/rest-candidate-skills.js","addon-tree-output/a24-ember-candidate-profile/services/rest-candidate-stated-skills.js","addon-tree-output/a24-ember-candidate-profile/services/rest-entity-action-compliance-rule.js","addon-tree-output/a24-ember-candidate-profile/services/rest-entity-action-section.js","addon-tree-output/a24-ember-candidate-profile/services/rest-entity-action.js","addon-tree-output/a24-ember-candidate-profile/services/rest-invitation-verification.js","addon-tree-output/a24-ember-candidate-profile/services/rest-user-avatar.js","addon-tree-output/a24-ember-candidate-profile/templates/components/candidate-activities.js","addon-tree-output/a24-ember-candidate-profile/templates/components/candidate-compliance-exemptions.js","addon-tree-output/a24-ember-candidate-profile/templates/components/candidate-dismissals.js","addon-tree-output/a24-ember-candidate-profile/templates/components/candidate-equality-monitoring-section-component.js","addon-tree-output/a24-ember-candidate-profile/templates/components/candidate-exclusions.js","addon-tree-output/a24-ember-candidate-profile/templates/components/candidate-external-days-to-expiry.js","addon-tree-output/a24-ember-candidate-profile/templates/components/candidate-external-documents.js","addon-tree-output/a24-ember-candidate-profile/templates/components/candidate-external-general.js","addon-tree-output/a24-ember-candidate-profile/templates/components/candidate-external-verification.js","addon-tree-output/a24-ember-candidate-profile/templates/components/candidate-info-section-component.js","addon-tree-output/a24-ember-candidate-profile/templates/components/candidate-languages.js","addon-tree-output/a24-ember-candidate-profile/templates/components/candidate-misc-details.js","addon-tree-output/a24-ember-candidate-profile/templates/components/candidate-next-of-kin.js","addon-tree-output/a24-ember-candidate-profile/templates/components/candidate-other-names.js","addon-tree-output/a24-ember-candidate-profile/templates/components/candidate-plugins-overview.js","addon-tree-output/a24-ember-candidate-profile/templates/components/candidate-position-held.js","addon-tree-output/a24-ember-candidate-profile/templates/components/candidate-qualifications.js","addon-tree-output/a24-ember-candidate-profile/templates/components/candidate-skills.js","addon-tree-output/a24-ember-candidate-profile/templates/components/card-datagrid-custom-filter-candidate-distance.js","addon-tree-output/a24-ember-candidate-profile/templates/components/card-datagrid-custom-filter-candidate-external-days-to-expiry.js","addon-tree-output/a24-ember-candidate-profile/templates/components/card-datagrid-custom-filter-candidate-external-portfolios.js","addon-tree-output/a24-ember-candidate-profile/templates/components/card-datagrid-custom-filter-candidate-position-held.js","addon-tree-output/a24-ember-candidate-profile/templates/components/card-datagrid-custom-filter-candidate-professional-registration.js","addon-tree-output/a24-ember-candidate-profile/templates/components/card-datagrid-custom-filter-consultant-role.js","addon-tree-output/a24-ember-candidate-profile/templates/components/compliance-rules-condition-query-builder.js","addon-tree-output/a24-ember-candidate-profile/templates/components/email-preview.js","addon-tree-output/a24-ember-candidate-profile/templates/components/page-agency-group-candidate-view.js","addon-tree-output/a24-ember-candidate-profile/templates/components/page-compliance-rule-view.js","addon-tree-output/a24-ember-candidate-profile/templates/components/page-compliance-rules.js","addon-tree-output/a24-ember-candidate-profile/templates/components/right-panel-agency-candidate-calendar.js","addon-tree-output/a24-ember-candidate-profile/templates/components/right-panel-candidate-profile.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-position-held.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-professional-registration-react.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-calendar.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-compliance-exemptions.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-compliance-passport.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-crb-check.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-dismissals.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-documents-react.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-equality-monitoring.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-exclusions.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-external-info.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-general-react.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-health-info.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-languages.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-misc-details.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-next-of-kin.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-notifications-preferences.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-occupational-health.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-other-names.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-payroll-number.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-references-react.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-right-to-work.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-tags.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-qualifications.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-skills.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-social-links-react.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-candidate-work-history-react.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-position-held.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-professional-registration-react.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-compliance-exemptions.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-compliance-passport.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-crb-check.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-dismissals.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-documents-react.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-equality.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-external-info.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-general-react.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-health-info.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-languages.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-misc-details.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-next-of-kin.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-notifications-preferences.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-occupational-health.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-other-names.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-payroll-number.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-plugins.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-policy.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-references-react.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-right-to-work.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-tags.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-qualifications.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-skills.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-social-links-react.js","addon-tree-output/a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-work-history-react.js","addon-tree-output/a24-ember-form-inputs/components/input-form-address-suggest.js","addon-tree-output/a24-ember-form-inputs/components/input-form-email.js","addon-tree-output/a24-ember-form-inputs/components/input-form-number.js","addon-tree-output/a24-ember-form-inputs/components/input-form-shift.js","addon-tree-output/a24-ember-form-inputs/components/input-form-tel-number.js","addon-tree-output/a24-ember-form-inputs/components/input-form-time-slot.js","addon-tree-output/a24-ember-form-inputs/services/a24-constants-form-inputs.js","addon-tree-output/a24-ember-form-inputs/services/a24-strings-form-inputs.js","addon-tree-output/a24-ember-form-inputs/services/input-form-address-suggest-service.js","addon-tree-output/a24-ember-form-inputs/services/input-form-tel-input-service.js","addon-tree-output/a24-ember-form-inputs/templates/components/input-form-address-suggest.js","addon-tree-output/a24-ember-form-inputs/templates/components/input-form-email.js","addon-tree-output/a24-ember-form-inputs/templates/components/input-form-number.js","addon-tree-output/a24-ember-form-inputs/templates/components/input-form-shift.js","addon-tree-output/a24-ember-form-inputs/templates/components/input-form-tel-number.js","addon-tree-output/a24-ember-form-inputs/templates/components/input-form-time-slot.js","addon-tree-output/a24-ember-lib/components/accordion-item-component.js","addon-tree-output/a24-ember-lib/components/alert-component.js","addon-tree-output/a24-ember-lib/components/bread-crumb-bar-component.js","addon-tree-output/a24-ember-lib/components/card-actions-component.js","addon-tree-output/a24-ember-lib/components/card-datagrid-column-toggle.js","addon-tree-output/a24-ember-lib/components/card-datagrid-container.js","addon-tree-output/a24-ember-lib/components/card-datagrid-filter.js","addon-tree-output/a24-ember-lib/components/card-datagrid-pager.js","addon-tree-output/a24-ember-lib/components/card-datagrid-selected-item.js","addon-tree-output/a24-ember-lib/components/card-datagrid-table.js","addon-tree-output/a24-ember-lib/components/card-heading-and-content-component.js","addon-tree-output/a24-ember-lib/components/card-style-component.js","addon-tree-output/a24-ember-lib/components/chart-component.js","addon-tree-output/a24-ember-lib/components/collapse-section-component.js","addon-tree-output/a24-ember-lib/components/collapse-trigger-component.js","addon-tree-output/a24-ember-lib/components/component-sort.js","addon-tree-output/a24-ember-lib/components/default-image-component.js","addon-tree-output/a24-ember-lib/components/dropdown-content.js","addon-tree-output/a24-ember-lib/components/dropdown-trigger.js","addon-tree-output/a24-ember-lib/components/export-popup-component.js","addon-tree-output/a24-ember-lib/components/fab-button.js","addon-tree-output/a24-ember-lib/components/horizontal-line-component.js","addon-tree-output/a24-ember-lib/components/icon-label-value-row-component.js","addon-tree-output/a24-ember-lib/components/icon-label-value-table-component.js","addon-tree-output/a24-ember-lib/components/iframe-component.js","addon-tree-output/a24-ember-lib/components/iframe-sourceless.js","addon-tree-output/a24-ember-lib/components/image-cropper-modal.js","addon-tree-output/a24-ember-lib/components/input-checkbox.js","addon-tree-output/a24-ember-lib/components/input-date-picker.js","addon-tree-output/a24-ember-lib/components/input-dropdown.js","addon-tree-output/a24-ember-lib/components/input-form-address.js","addon-tree-output/a24-ember-lib/components/input-form-checkbox.js","addon-tree-output/a24-ember-lib/components/input-form-date-picker.js","addon-tree-output/a24-ember-lib/components/input-form-dropdown.js","addon-tree-output/a24-ember-lib/components/input-form-file.js","addon-tree-output/a24-ember-lib/components/input-form-header.js","addon-tree-output/a24-ember-lib/components/input-form-html.js","addon-tree-output/a24-ember-lib/components/input-form-password.js","addon-tree-output/a24-ember-lib/components/input-form-radio-group.js","addon-tree-output/a24-ember-lib/components/input-form-search.js","addon-tree-output/a24-ember-lib/components/input-form-suggest.js","addon-tree-output/a24-ember-lib/components/input-form-tag.js","addon-tree-output/a24-ember-lib/components/input-form-text-area.js","addon-tree-output/a24-ember-lib/components/input-form-text.js","addon-tree-output/a24-ember-lib/components/input-form-time-picker.js","addon-tree-output/a24-ember-lib/components/input-form-week.js","addon-tree-output/a24-ember-lib/components/input-number.js","addon-tree-output/a24-ember-lib/components/input-text.js","addon-tree-output/a24-ember-lib/components/line-item-component.js","addon-tree-output/a24-ember-lib/components/loader-blackout.js","addon-tree-output/a24-ember-lib/components/loading-component.js","addon-tree-output/a24-ember-lib/components/popup-modal.js","addon-tree-output/a24-ember-lib/components/popup-responsive-modal.js","addon-tree-output/a24-ember-lib/components/popup-trigger.js","addon-tree-output/a24-ember-lib/components/progress-loader-component.js","addon-tree-output/a24-ember-lib/components/react-page-component.js","addon-tree-output/a24-ember-lib/components/react-page-datagrid-component.js","addon-tree-output/a24-ember-lib/components/react-popup.js","addon-tree-output/a24-ember-lib/components/react-widget.js","addon-tree-output/a24-ember-lib/components/round-icon-component.js","addon-tree-output/a24-ember-lib/components/round-icon-header-component.js","addon-tree-output/a24-ember-lib/components/saved-search-component.js","addon-tree-output/a24-ember-lib/components/shadow-scroller.js","addon-tree-output/a24-ember-lib/components/shareable-link.js","addon-tree-output/a24-ember-lib/components/size-limit-component.js","addon-tree-output/a24-ember-lib/components/snackbar-component.js","addon-tree-output/a24-ember-lib/components/stepper-item.js","addon-tree-output/a24-ember-lib/components/stepper-wrapper.js","addon-tree-output/a24-ember-lib/components/tag-component-shrink.js","addon-tree-output/a24-ember-lib/components/tag-component.js","addon-tree-output/a24-ember-lib/components/timeline-component.js","addon-tree-output/a24-ember-lib/components/view-edit-section-content.js","addon-tree-output/a24-ember-lib/components/view-more-component.js","addon-tree-output/a24-ember-lib/components/waves-inception-component.js","addon-tree-output/a24-ember-lib/config/environment.js","addon-tree-output/a24-ember-lib/helpers/array-filter.js","addon-tree-output/a24-ember-lib/helpers/card-datagrid-table-get-custom-val.js","addon-tree-output/a24-ember-lib/helpers/card-datagrid-table-get-key.js","addon-tree-output/a24-ember-lib/helpers/equals.js","addon-tree-output/a24-ember-lib/helpers/equalsOr.js","addon-tree-output/a24-ember-lib/helpers/format-date.js","addon-tree-output/a24-ember-lib/mixins/input-form-element.js","addon-tree-output/a24-ember-lib/mixins/outside-click-handler-mixin.js","addon-tree-output/a24-ember-lib/mixins/query-param-object-builder.js","addon-tree-output/a24-ember-lib/mixins/react-datagrid-query-param-builder.js","addon-tree-output/a24-ember-lib/mixins/react-query-param-builder.js","addon-tree-output/a24-ember-lib/mixins/template-left-column-resize.js","addon-tree-output/a24-ember-lib/services/a24-constants-ember-lib.js","addon-tree-output/a24-ember-lib/services/a24-enums-ember-lib.js","addon-tree-output/a24-ember-lib/services/a24-strings-ember-lib.js","addon-tree-output/a24-ember-lib/services/bread-crumb.js","addon-tree-output/a24-ember-lib/services/card-datagrid-filter-custom-base.js","addon-tree-output/a24-ember-lib/services/card-datagrid-filter.js","addon-tree-output/a24-ember-lib/services/card-datagrid-temporal-variable.js","addon-tree-output/a24-ember-lib/services/chatter-iframe-com-base.js","addon-tree-output/a24-ember-lib/services/component-sort.js","addon-tree-output/a24-ember-lib/services/fab-button.js","addon-tree-output/a24-ember-lib/services/google-analytics.js","addon-tree-output/a24-ember-lib/services/input-form-file-service.js","addon-tree-output/a24-ember-lib/services/post-code-validator.js","addon-tree-output/a24-ember-lib/services/query-param-object-builder.js","addon-tree-output/a24-ember-lib/services/snackbar.js","addon-tree-output/a24-ember-lib/services/ss-utils.js","addon-tree-output/a24-ember-lib/services/tooltip.js","addon-tree-output/a24-ember-lib/services/url-trickery.js","addon-tree-output/a24-ember-lib/templates/components/accordion-item-component.js","addon-tree-output/a24-ember-lib/templates/components/alert-component.js","addon-tree-output/a24-ember-lib/templates/components/bread-crumb-bar-component.js","addon-tree-output/a24-ember-lib/templates/components/card-actions-component.js","addon-tree-output/a24-ember-lib/templates/components/card-datagrid-column-toggle.js","addon-tree-output/a24-ember-lib/templates/components/card-datagrid-container.js","addon-tree-output/a24-ember-lib/templates/components/card-datagrid-filter.js","addon-tree-output/a24-ember-lib/templates/components/card-datagrid-pager.js","addon-tree-output/a24-ember-lib/templates/components/card-datagrid-selected-item.js","addon-tree-output/a24-ember-lib/templates/components/card-datagrid-table.js","addon-tree-output/a24-ember-lib/templates/components/card-heading-and-content-component.js","addon-tree-output/a24-ember-lib/templates/components/card-style-component.js","addon-tree-output/a24-ember-lib/templates/components/chart-component.js","addon-tree-output/a24-ember-lib/templates/components/collapse-section-component.js","addon-tree-output/a24-ember-lib/templates/components/collapse-trigger-component.js","addon-tree-output/a24-ember-lib/templates/components/component-sort.js","addon-tree-output/a24-ember-lib/templates/components/default-image-component.js","addon-tree-output/a24-ember-lib/templates/components/dropdown-content.js","addon-tree-output/a24-ember-lib/templates/components/dropdown-trigger.js","addon-tree-output/a24-ember-lib/templates/components/export-popup-component.js","addon-tree-output/a24-ember-lib/templates/components/fab-button.js","addon-tree-output/a24-ember-lib/templates/components/horizontal-line-component.js","addon-tree-output/a24-ember-lib/templates/components/icon-label-value-row-component.js","addon-tree-output/a24-ember-lib/templates/components/icon-label-value-table-component.js","addon-tree-output/a24-ember-lib/templates/components/iframe-component.js","addon-tree-output/a24-ember-lib/templates/components/iframe-sourceless.js","addon-tree-output/a24-ember-lib/templates/components/image-cropper-modal.js","addon-tree-output/a24-ember-lib/templates/components/input-checkbox.js","addon-tree-output/a24-ember-lib/templates/components/input-date-picker.js","addon-tree-output/a24-ember-lib/templates/components/input-dropdown.js","addon-tree-output/a24-ember-lib/templates/components/input-form-address.js","addon-tree-output/a24-ember-lib/templates/components/input-form-checkbox.js","addon-tree-output/a24-ember-lib/templates/components/input-form-date-picker.js","addon-tree-output/a24-ember-lib/templates/components/input-form-dropdown.js","addon-tree-output/a24-ember-lib/templates/components/input-form-file.js","addon-tree-output/a24-ember-lib/templates/components/input-form-header.js","addon-tree-output/a24-ember-lib/templates/components/input-form-html.js","addon-tree-output/a24-ember-lib/templates/components/input-form-password.js","addon-tree-output/a24-ember-lib/templates/components/input-form-radio-group.js","addon-tree-output/a24-ember-lib/templates/components/input-form-search.js","addon-tree-output/a24-ember-lib/templates/components/input-form-suggest.js","addon-tree-output/a24-ember-lib/templates/components/input-form-tag.js","addon-tree-output/a24-ember-lib/templates/components/input-form-text-area.js","addon-tree-output/a24-ember-lib/templates/components/input-form-text.js","addon-tree-output/a24-ember-lib/templates/components/input-form-time-picker.js","addon-tree-output/a24-ember-lib/templates/components/input-form-week.js","addon-tree-output/a24-ember-lib/templates/components/input-number.js","addon-tree-output/a24-ember-lib/templates/components/input-text.js","addon-tree-output/a24-ember-lib/templates/components/line-item-component.js","addon-tree-output/a24-ember-lib/templates/components/loader-blackout.js","addon-tree-output/a24-ember-lib/templates/components/loading-component.js","addon-tree-output/a24-ember-lib/templates/components/popup-modal.js","addon-tree-output/a24-ember-lib/templates/components/popup-responsive-modal.js","addon-tree-output/a24-ember-lib/templates/components/popup-trigger.js","addon-tree-output/a24-ember-lib/templates/components/progress-loader-component.js","addon-tree-output/a24-ember-lib/templates/components/react-page-component.js","addon-tree-output/a24-ember-lib/templates/components/react-page-datagrid-component.js","addon-tree-output/a24-ember-lib/templates/components/react-popup.js","addon-tree-output/a24-ember-lib/templates/components/react-widget.js","addon-tree-output/a24-ember-lib/templates/components/round-icon-component.js","addon-tree-output/a24-ember-lib/templates/components/round-icon-header-component.js","addon-tree-output/a24-ember-lib/templates/components/saved-search-component.js","addon-tree-output/a24-ember-lib/templates/components/shadow-scroller.js","addon-tree-output/a24-ember-lib/templates/components/shareable-link.js","addon-tree-output/a24-ember-lib/templates/components/size-limit-component.js","addon-tree-output/a24-ember-lib/templates/components/snackbar-component.js","addon-tree-output/a24-ember-lib/templates/components/stepper-item.js","addon-tree-output/a24-ember-lib/templates/components/stepper-wrapper.js","addon-tree-output/a24-ember-lib/templates/components/tag-component-shrink.js","addon-tree-output/a24-ember-lib/templates/components/tag-component.js","addon-tree-output/a24-ember-lib/templates/components/timeline-component.js","addon-tree-output/a24-ember-lib/templates/components/view-edit-section-content.js","addon-tree-output/a24-ember-lib/templates/components/view-more-component.js","addon-tree-output/a24-ember-lib/templates/components/waves-inception-component.js","addon-tree-output/a24-ember-lookup/helpers/lookup-constant.js","addon-tree-output/a24-ember-lookup/helpers/lookup-enum-list.js","addon-tree-output/a24-ember-lookup/helpers/lookup-localised-string.js","addon-tree-output/a24-ember-lookup/helpers/lookup-string-html.js","addon-tree-output/a24-ember-lookup/helpers/lookup-string-token.js","addon-tree-output/a24-ember-lookup/helpers/lookup-string.js","addon-tree-output/a24-ember-lookup/services/a24-constants-base.js","addon-tree-output/a24-ember-lookup/services/a24-constants.js","addon-tree-output/a24-ember-lookup/services/a24-enums-base.js","addon-tree-output/a24-ember-lookup/services/a24-enums.js","addon-tree-output/a24-ember-lookup/services/a24-strings-base.js","addon-tree-output/a24-ember-lookup/services/a24-strings.js","addon-tree-output/a24-ember-menu/components/collapsible-left-menu-item.js","addon-tree-output/a24-ember-menu/components/left-menu-item.js","addon-tree-output/a24-ember-menu/components/left-menu-with-title-bar-wrapper.js","addon-tree-output/a24-ember-menu/components/left-menu.js","addon-tree-output/a24-ember-menu/components/navigation-bar.js","addon-tree-output/a24-ember-menu/components/sticky-header-component.js","addon-tree-output/a24-ember-menu/services/left-menu-service.js","addon-tree-output/a24-ember-menu/services/sticky-header-service.js","addon-tree-output/a24-ember-menu/templates/components/collapsible-left-menu-item.js","addon-tree-output/a24-ember-menu/templates/components/left-menu-item.js","addon-tree-output/a24-ember-menu/templates/components/left-menu-with-title-bar-wrapper.js","addon-tree-output/a24-ember-menu/templates/components/left-menu.js","addon-tree-output/a24-ember-menu/templates/components/navigation-bar.js","addon-tree-output/a24-ember-menu/templates/components/sticky-header-component.js","addon-tree-output/a24-ember-policy-library/components/candidate-policy.js","addon-tree-output/a24-ember-policy-library/components/page-candidate-policy-group-list.js","addon-tree-output/a24-ember-policy-library/components/page-candidate-policy-view.js","addon-tree-output/a24-ember-policy-library/components/page-policy-add-edit.js","addon-tree-output/a24-ember-policy-library/components/page-policy-type-list.js","addon-tree-output/a24-ember-policy-library/components/page-policy-type-view.js","addon-tree-output/a24-ember-policy-library/components/policy-details.js","addon-tree-output/a24-ember-policy-library/components/policy-versions.js","addon-tree-output/a24-ember-policy-library/services/a24-enums-policy-library.js","addon-tree-output/a24-ember-policy-library/services/a24-strings-policy-library.js","addon-tree-output/a24-ember-policy-library/services/rest-agency-group-candidate-policy-group.js","addon-tree-output/a24-ember-policy-library/services/rest-agency-group-candidate-policy-type.js","addon-tree-output/a24-ember-policy-library/services/rest-agency-group-policy-type.js","addon-tree-output/a24-ember-policy-library/services/rest-agency-group-policy.js","addon-tree-output/a24-ember-policy-library/services/rest-candidate-policy-group.js","addon-tree-output/a24-ember-policy-library/services/rest-candidate-policy.js","addon-tree-output/a24-ember-policy-library/services/rest-system-admin-policy-type.js","addon-tree-output/a24-ember-policy-library/services/rest-system-admin-policy.js","addon-tree-output/a24-ember-policy-library/services/rest-user-policy-group.js","addon-tree-output/a24-ember-policy-library/services/rest-user-policy.js","addon-tree-output/a24-ember-policy-library/templates/components/candidate-policy.js","addon-tree-output/a24-ember-policy-library/templates/components/page-candidate-policy-group-list.js","addon-tree-output/a24-ember-policy-library/templates/components/page-candidate-policy-view.js","addon-tree-output/a24-ember-policy-library/templates/components/page-policy-add-edit.js","addon-tree-output/a24-ember-policy-library/templates/components/page-policy-type-list.js","addon-tree-output/a24-ember-policy-library/templates/components/page-policy-type-view.js","addon-tree-output/a24-ember-policy-library/templates/components/policy-details.js","addon-tree-output/a24-ember-policy-library/templates/components/policy-versions.js","addon-tree-output/a24-ember-staffshift-candidate-availability/components/agency-day-view.js","addon-tree-output/a24-ember-staffshift-candidate-availability/components/availability-card.js","addon-tree-output/a24-ember-staffshift-candidate-availability/components/availability-shift-editor.js","addon-tree-output/a24-ember-staffshift-candidate-availability/components/booked-shift-card-agency.js","addon-tree-output/a24-ember-staffshift-candidate-availability/components/bulk-availability-update-popup.js","addon-tree-output/a24-ember-staffshift-candidate-availability/components/calendar-card.js","addon-tree-output/a24-ember-staffshift-candidate-availability/components/day-availability.js","addon-tree-output/a24-ember-staffshift-candidate-availability/components/day-overview.js","addon-tree-output/a24-ember-staffshift-candidate-availability/components/day-view.js","addon-tree-output/a24-ember-staffshift-candidate-availability/components/icon-label.js","addon-tree-output/a24-ember-staffshift-candidate-availability/components/main-availability-page.js","addon-tree-output/a24-ember-staffshift-candidate-availability/components/month-view.js","addon-tree-output/a24-ember-staffshift-candidate-availability/components/shift-confirmation-popup.js","addon-tree-output/a24-ember-staffshift-candidate-availability/components/time-range-selector.js","addon-tree-output/a24-ember-staffshift-candidate-availability/helpers/availability-class.js","addon-tree-output/a24-ember-staffshift-candidate-availability/helpers/availability-icon.js","addon-tree-output/a24-ember-staffshift-candidate-availability/helpers/availability-state.js","addon-tree-output/a24-ember-staffshift-candidate-availability/services/a24-strings-staffshift-availability.js","addon-tree-output/a24-ember-staffshift-candidate-availability/services/agency-availability.js","addon-tree-output/a24-ember-staffshift-candidate-availability/services/availability.js","addon-tree-output/a24-ember-staffshift-candidate-availability/services/booked-shifts.js","addon-tree-output/a24-ember-staffshift-candidate-availability/services/rest-agency-advanced-search-agency-shift.js","addon-tree-output/a24-ember-staffshift-candidate-availability/services/rest-agency-candidate-notification.js","addon-tree-output/a24-ember-staffshift-candidate-availability/services/rest-agency-staffing-order.js","addon-tree-output/a24-ember-staffshift-candidate-availability/services/rest-staffing-shift-details.js","addon-tree-output/a24-ember-staffshift-candidate-availability/services/retrieve-shift-pdf.js","addon-tree-output/a24-ember-staffshift-candidate-availability/services/shift-email.js","addon-tree-output/a24-ember-staffshift-candidate-availability/templates/components/agency-day-view.js","addon-tree-output/a24-ember-staffshift-candidate-availability/templates/components/availability-card.js","addon-tree-output/a24-ember-staffshift-candidate-availability/templates/components/availability-shift-editor.js","addon-tree-output/a24-ember-staffshift-candidate-availability/templates/components/booked-shift-card-agency.js","addon-tree-output/a24-ember-staffshift-candidate-availability/templates/components/bulk-availability-update-popup.js","addon-tree-output/a24-ember-staffshift-candidate-availability/templates/components/calendar-card.js","addon-tree-output/a24-ember-staffshift-candidate-availability/templates/components/day-availability.js","addon-tree-output/a24-ember-staffshift-candidate-availability/templates/components/day-overview.js","addon-tree-output/a24-ember-staffshift-candidate-availability/templates/components/day-view.js","addon-tree-output/a24-ember-staffshift-candidate-availability/templates/components/icon-label.js","addon-tree-output/a24-ember-staffshift-candidate-availability/templates/components/main-availability-page.js","addon-tree-output/a24-ember-staffshift-candidate-availability/templates/components/month-view.js","addon-tree-output/a24-ember-staffshift-candidate-availability/templates/components/shift-confirmation-popup.js","addon-tree-output/a24-ember-staffshift-candidate-availability/templates/components/time-range-selector.js","addon-tree-output/a24-ember-staffshift-core/components/card-datagrid-custom-filter-ward.js","addon-tree-output/a24-ember-staffshift-core/components/chatter-box.js","addon-tree-output/a24-ember-staffshift-core/components/chatter-right-container.js","addon-tree-output/a24-ember-staffshift-core/components/chatter-right-conversation-component.js","addon-tree-output/a24-ember-staffshift-core/components/chatter-right-header.js","addon-tree-output/a24-ember-staffshift-core/components/chatter-right-session-data.js","addon-tree-output/a24-ember-staffshift-core/components/coming-soon-card.js","addon-tree-output/a24-ember-staffshift-core/components/context-switcher-component.js","addon-tree-output/a24-ember-staffshift-core/components/conversation-list.js","addon-tree-output/a24-ember-staffshift-core/components/conversation-preview-popup.js","addon-tree-output/a24-ember-staffshift-core/components/conversation-preview.js","addon-tree-output/a24-ember-staffshift-core/components/email-preview-popup.js","addon-tree-output/a24-ember-staffshift-core/components/email-preview.js","addon-tree-output/a24-ember-staffshift-core/components/help-box.js","addon-tree-output/a24-ember-staffshift-core/components/login-component.js","addon-tree-output/a24-ember-staffshift-core/components/logout-component.js","addon-tree-output/a24-ember-staffshift-core/components/navigation-bar-component.js","addon-tree-output/a24-ember-staffshift-core/components/notification-preview-popup.js","addon-tree-output/a24-ember-staffshift-core/components/notification-preview.js","addon-tree-output/a24-ember-staffshift-core/components/notification-sent-popup.js","addon-tree-output/a24-ember-staffshift-core/components/page-access-denied.js","addon-tree-output/a24-ember-staffshift-core/components/page-react-easter-egg-item.js","addon-tree-output/a24-ember-staffshift-core/components/page-react-easter-egg.js","addon-tree-output/a24-ember-staffshift-core/components/page-welcome.js","addon-tree-output/a24-ember-staffshift-core/components/react-ember-utils.js","addon-tree-output/a24-ember-staffshift-core/components/react-main-content-component.js","addon-tree-output/a24-ember-staffshift-core/components/reset-password-popup-component.js","addon-tree-output/a24-ember-staffshift-core/components/right-panel-client-view.js","addon-tree-output/a24-ember-staffshift-core/components/status-error-page.js","addon-tree-output/a24-ember-staffshift-core/helpers/inline-service-loader.js","addon-tree-output/a24-ember-staffshift-core/mixins/chat-boxes-component-base.js","addon-tree-output/a24-ember-staffshift-core/routes/abstractReactRoute.js","addon-tree-output/a24-ember-staffshift-core/routes/abstractRoute.js","addon-tree-output/a24-ember-staffshift-core/services/a24-constants-staffshift-core.js","addon-tree-output/a24-ember-staffshift-core/services/a24-enums-staffshift-core.js","addon-tree-output/a24-ember-staffshift-core/services/a24-strings-staffshift-core.js","addon-tree-output/a24-ember-staffshift-core/services/candidate-type-tabs.js","addon-tree-output/a24-ember-staffshift-core/services/card-datagrid-custom-filter-ward.js","addon-tree-output/a24-ember-staffshift-core/services/chat-boxes-service-base.js","addon-tree-output/a24-ember-staffshift-core/services/chatter-box-service.js","addon-tree-output/a24-ember-staffshift-core/services/chatter-iframe-com.js","addon-tree-output/a24-ember-staffshift-core/services/conversation-preview-generator.js","addon-tree-output/a24-ember-staffshift-core/services/email-preview-generator.js","addon-tree-output/a24-ember-staffshift-core/services/firebase.js","addon-tree-output/a24-ember-staffshift-core/services/help-box-service.js","addon-tree-output/a24-ember-staffshift-core/services/intercom.js","addon-tree-output/a24-ember-staffshift-core/services/navigation-bar-component-service.js","addon-tree-output/a24-ember-staffshift-core/services/navigation.js","addon-tree-output/a24-ember-staffshift-core/services/notification-preview-generator.js","addon-tree-output/a24-ember-staffshift-core/services/react-ember-navigation.js","addon-tree-output/a24-ember-staffshift-core/services/react-ember-utils.js","addon-tree-output/a24-ember-staffshift-core/services/rest-chat-conversations.js","addon-tree-output/a24-ember-staffshift-core/services/rest-chat-teams.js","addon-tree-output/a24-ember-staffshift-core/services/rest-checkauth.js","addon-tree-output/a24-ember-staffshift-core/services/rest-country.js","addon-tree-output/a24-ember-staffshift-core/services/rest-entity-action-shift.js","addon-tree-output/a24-ember-staffshift-core/services/rest-firebase-custom-token.js","addon-tree-output/a24-ember-staffshift-core/services/rest-login.js","addon-tree-output/a24-ember-staffshift-core/services/rest-logout.js","addon-tree-output/a24-ember-staffshift-core/services/rest-menu.js","addon-tree-output/a24-ember-staffshift-core/services/rest-permissioned-actions.js","addon-tree-output/a24-ember-staffshift-core/services/rest-social-link-types.js","addon-tree-output/a24-ember-staffshift-core/services/rest-system.js","addon-tree-output/a24-ember-staffshift-core/services/rest-user-context.js","addon-tree-output/a24-ember-staffshift-core/services/rest-user.js","addon-tree-output/a24-ember-staffshift-core/services/status-error-page.js","addon-tree-output/a24-ember-staffshift-core/services/title-bar-service.js","addon-tree-output/a24-ember-staffshift-core/services/triage-menu.js","addon-tree-output/a24-ember-staffshift-core/services/user-session.js","addon-tree-output/a24-ember-staffshift-core/templates/components/card-datagrid-custom-filter-ward.js","addon-tree-output/a24-ember-staffshift-core/templates/components/chatter-box.js","addon-tree-output/a24-ember-staffshift-core/templates/components/chatter-right-container.js","addon-tree-output/a24-ember-staffshift-core/templates/components/chatter-right-conversation-component.js","addon-tree-output/a24-ember-staffshift-core/templates/components/chatter-right-header.js","addon-tree-output/a24-ember-staffshift-core/templates/components/chatter-right-session-data.js","addon-tree-output/a24-ember-staffshift-core/templates/components/coming-soon-card.js","addon-tree-output/a24-ember-staffshift-core/templates/components/context-switcher-component.js","addon-tree-output/a24-ember-staffshift-core/templates/components/conversation-list.js","addon-tree-output/a24-ember-staffshift-core/templates/components/conversation-preview-popup.js","addon-tree-output/a24-ember-staffshift-core/templates/components/conversation-preview.js","addon-tree-output/a24-ember-staffshift-core/templates/components/email-preview-popup.js","addon-tree-output/a24-ember-staffshift-core/templates/components/email-preview.js","addon-tree-output/a24-ember-staffshift-core/templates/components/help-box.js","addon-tree-output/a24-ember-staffshift-core/templates/components/login-component.js","addon-tree-output/a24-ember-staffshift-core/templates/components/logout-component.js","addon-tree-output/a24-ember-staffshift-core/templates/components/navigation-bar-component.js","addon-tree-output/a24-ember-staffshift-core/templates/components/notification-preview-popup.js","addon-tree-output/a24-ember-staffshift-core/templates/components/notification-preview.js","addon-tree-output/a24-ember-staffshift-core/templates/components/notification-sent-popup.js","addon-tree-output/a24-ember-staffshift-core/templates/components/page-access-denied.js","addon-tree-output/a24-ember-staffshift-core/templates/components/page-react-easter-egg-item.js","addon-tree-output/a24-ember-staffshift-core/templates/components/page-react-easter-egg.js","addon-tree-output/a24-ember-staffshift-core/templates/components/page-welcome.js","addon-tree-output/a24-ember-staffshift-core/templates/components/react-ember-utils.js","addon-tree-output/a24-ember-staffshift-core/templates/components/react-main-content-component.js","addon-tree-output/a24-ember-staffshift-core/templates/components/reset-password-popup-component.js","addon-tree-output/a24-ember-staffshift-core/templates/components/right-panel-client-view.js","addon-tree-output/a24-ember-staffshift-core/templates/components/status-error-page.js","addon-tree-output/a24-ember-staffshift-users/components/agency-group-add-edit-popup.js","addon-tree-output/a24-ember-staffshift-users/components/agency-group-list-page.js","addon-tree-output/a24-ember-staffshift-users/components/agency-group-view-add-user-card.js","addon-tree-output/a24-ember-staffshift-users/components/agency-group-view-edit-card.js","addon-tree-output/a24-ember-staffshift-users/components/agency-group-view-page.js","addon-tree-output/a24-ember-staffshift-users/components/page-agency-group-user-list.js","addon-tree-output/a24-ember-staffshift-users/components/whitelisted-ip-addresses.js","addon-tree-output/a24-ember-staffshift-users/components/whitelisted-users.js","addon-tree-output/a24-ember-staffshift-users/services/a24-enums-staffshift-users.js","addon-tree-output/a24-ember-staffshift-users/services/a24-strings-staffshift-users.js","addon-tree-output/a24-ember-staffshift-users/services/ipify-ip-address-check.js","addon-tree-output/a24-ember-staffshift-users/services/rest-acl-group-resource-tree.js","addon-tree-output/a24-ember-staffshift-users/services/rest-acl-group-users.js","addon-tree-output/a24-ember-staffshift-users/services/rest-acl-group.js","addon-tree-output/a24-ember-staffshift-users/services/rest-agency-group-ip-whitelist.js","addon-tree-output/a24-ember-staffshift-users/services/rest-agency-group-user-whitelist.js","addon-tree-output/a24-ember-staffshift-users/services/rest-agency-group-users.js","addon-tree-output/a24-ember-staffshift-users/services/rest-agency-group.js","addon-tree-output/a24-ember-staffshift-users/services/rest-agency-ip-whitelist.js","addon-tree-output/a24-ember-staffshift-users/services/rest-agency-user-whitelist.js","addon-tree-output/a24-ember-staffshift-users/services/rest-agency-users.js","addon-tree-output/a24-ember-staffshift-users/templates/components/agency-group-add-edit-popup.js","addon-tree-output/a24-ember-staffshift-users/templates/components/agency-group-list-page.js","addon-tree-output/a24-ember-staffshift-users/templates/components/agency-group-view-add-user-card.js","addon-tree-output/a24-ember-staffshift-users/templates/components/agency-group-view-edit-card.js","addon-tree-output/a24-ember-staffshift-users/templates/components/agency-group-view-page.js","addon-tree-output/a24-ember-staffshift-users/templates/components/page-agency-group-user-list.js","addon-tree-output/a24-ember-staffshift-users/templates/components/whitelisted-ip-addresses.js","addon-tree-output/a24-ember-staffshift-users/templates/components/whitelisted-users.js","addon-tree-output/a24-ember-title-bar/components/title-bar.js","addon-tree-output/a24-ember-title-bar/services/title-bar.js","addon-tree-output/a24-ember-title-bar/templates/components/title-bar.js","addon-tree-output/a24-ember-window/breakpoints.js","addon-tree-output/a24-ember-window/initializers/responsive.js","addon-tree-output/a24-ember-window/mixins/a24responsive.js","addon-tree-output/a24-ember-window/mixins/did-render-changes-mixin.js","addon-tree-output/a24-ember-window/services/a24-constants-window.js","addon-tree-output/a24-ember-window/services/component-did-render.js","addon-tree-output/a24-ember-window/services/dom-event.js","addon-tree-output/ember-ajax/-private/promise.js","addon-tree-output/ember-ajax/-private/utils/get-header.js","addon-tree-output/ember-ajax/-private/utils/is-fastboot.js","addon-tree-output/ember-ajax/-private/utils/is-string.js","addon-tree-output/ember-ajax/-private/utils/parse-response-headers.js","addon-tree-output/ember-ajax/-private/utils/url-helpers.js","addon-tree-output/ember-ajax/ajax-request.js","addon-tree-output/ember-ajax/errors.js","addon-tree-output/ember-ajax/index.js","addon-tree-output/ember-ajax/mixins/ajax-request.js","addon-tree-output/ember-ajax/mixins/ajax-support.js","addon-tree-output/ember-ajax/mixins/legacy/normalize-error-response.js","addon-tree-output/ember-ajax/raw.js","addon-tree-output/ember-ajax/request.js","addon-tree-output/ember-ajax/services/ajax.js","addon-tree-output/ember-ajax/utils/ajax.js","addon-tree-output/ember-cli-app-version/initializer-factory.js","addon-tree-output/ember-cli-app-version/utils/regexp.js","addon-tree-output/ember-inflector/index.js","addon-tree-output/ember-inflector/lib/ext/string.js","addon-tree-output/ember-inflector/lib/helpers/pluralize.js","addon-tree-output/ember-inflector/lib/helpers/singularize.js","addon-tree-output/ember-inflector/lib/system.js","addon-tree-output/ember-inflector/lib/system/inflections.js","addon-tree-output/ember-inflector/lib/system/inflector.js","addon-tree-output/ember-inflector/lib/system/string.js","addon-tree-output/ember-inflector/lib/utils/make-helper.js","addon-tree-output/ember-load-initializers/index.js","addon-tree-output/ember-resolver/features.js","addon-tree-output/ember-resolver/index.js","addon-tree-output/ember-resolver/resolver.js","addon-tree-output/ember-resolver/resolvers/classic/container-debug-adapter.js","addon-tree-output/ember-resolver/resolvers/classic/index.js","addon-tree-output/ember-resolver/utils/class-factory.js","addon-tree-output/ember-resolver/utils/make-dictionary.js","addon-tree-output/ember-responsive/initializers/responsive.js","addon-tree-output/ember-responsive/media.js","addon-tree-output/ember-responsive/null-match-media.js","addon-tree-output/ember-truth-helpers/helpers/and.js","addon-tree-output/ember-truth-helpers/helpers/equal.js","addon-tree-output/ember-truth-helpers/helpers/gt.js","addon-tree-output/ember-truth-helpers/helpers/gte.js","addon-tree-output/ember-truth-helpers/helpers/is-array.js","addon-tree-output/ember-truth-helpers/helpers/is-equal.js","addon-tree-output/ember-truth-helpers/helpers/lt.js","addon-tree-output/ember-truth-helpers/helpers/lte.js","addon-tree-output/ember-truth-helpers/helpers/not-equal.js","addon-tree-output/ember-truth-helpers/helpers/not.js","addon-tree-output/ember-truth-helpers/helpers/or.js","addon-tree-output/ember-truth-helpers/helpers/xor.js","addon-tree-output/ember-truth-helpers/utils/truth-convert.js","addon-tree-output/modules/ember-data/-debug/index.js","addon-tree-output/modules/ember-data/-private.js","addon-tree-output/modules/ember-data/adapter.js","addon-tree-output/modules/ember-data/adapters/errors.js","addon-tree-output/modules/ember-data/adapters/json-api.js","addon-tree-output/modules/ember-data/adapters/rest.js","addon-tree-output/modules/ember-data/attr.js","addon-tree-output/modules/ember-data/index.js","addon-tree-output/modules/ember-data/initialize-store-service.js","addon-tree-output/modules/ember-data/model.js","addon-tree-output/modules/ember-data/relationships.js","addon-tree-output/modules/ember-data/serializer.js","addon-tree-output/modules/ember-data/serializers/embedded-records-mixin.js","addon-tree-output/modules/ember-data/serializers/json-api.js","addon-tree-output/modules/ember-data/serializers/json.js","addon-tree-output/modules/ember-data/serializers/rest.js","addon-tree-output/modules/ember-data/setup-container.js","addon-tree-output/modules/ember-data/store.js","addon-tree-output/modules/ember-data/transform.js","addon-tree-output/modules/ember-data/transforms/boolean.js","addon-tree-output/modules/ember-data/transforms/date.js","addon-tree-output/modules/ember-data/transforms/number.js","addon-tree-output/modules/ember-data/transforms/string.js","addon-tree-output/modules/ember-data/transforms/transform.js","addon-tree-output/modules/ember-data/version.js","vendor/ember-cli/vendor-suffix.js"],"sourcesContent":["window.EmberENV = {\"FEATURES\":{}};\nvar runningTests = false;\n\n\n","var loader, define, requireModule, require, requirejs;\n\n(function (global) {\n  'use strict';\n\n  function dict() {\n    var obj = Object.create(null);\n    obj['__'] = undefined;\n    delete obj['__'];\n    return obj;\n  }\n\n  // Save off the original values of these globals, so we can restore them if someone asks us to\n  var oldGlobals = {\n    loader: loader,\n    define: define,\n    requireModule: requireModule,\n    require: require,\n    requirejs: requirejs\n  };\n\n  requirejs = require = requireModule = function (id) {\n    var pending = [];\n    var mod = findModule(id, '(require)', pending);\n\n    for (var i = pending.length - 1; i >= 0; i--) {\n      pending[i].exports();\n    }\n\n    return mod.module.exports;\n  };\n\n  loader = {\n    noConflict: function (aliases) {\n      var oldName, newName;\n\n      for (oldName in aliases) {\n        if (aliases.hasOwnProperty(oldName)) {\n          if (oldGlobals.hasOwnProperty(oldName)) {\n            newName = aliases[oldName];\n\n            global[newName] = global[oldName];\n            global[oldName] = oldGlobals[oldName];\n          }\n        }\n      }\n    },\n    // Option to enable or disable the generation of default exports\n    makeDefaultExport: true\n  };\n\n  var registry = dict();\n  var seen = dict();\n\n  var uuid = 0;\n\n  function unsupportedModule(length) {\n    throw new Error('an unsupported module was defined, expected `define(id, deps, module)` instead got: `' + length + '` arguments to define`');\n  }\n\n  var defaultDeps = ['require', 'exports', 'module'];\n\n  function Module(id, deps, callback, alias) {\n    this.uuid = uuid++;\n    this.id = id;\n    this.deps = !deps.length && callback.length ? defaultDeps : deps;\n    this.module = { exports: {} };\n    this.callback = callback;\n    this.hasExportsAsDep = false;\n    this.isAlias = alias;\n    this.reified = new Array(deps.length);\n\n    /*\n       Each module normally passes through these states, in order:\n         new       : initial state\n         pending   : this module is scheduled to be executed\n         reifying  : this module's dependencies are being executed\n         reified   : this module's dependencies finished executing successfully\n         errored   : this module's dependencies failed to execute\n         finalized : this module executed successfully\n     */\n    this.state = 'new';\n  }\n\n  Module.prototype.makeDefaultExport = function () {\n    var exports = this.module.exports;\n    if (exports !== null && (typeof exports === 'object' || typeof exports === 'function') && exports['default'] === undefined && Object.isExtensible(exports)) {\n      exports['default'] = exports;\n    }\n  };\n\n  Module.prototype.exports = function () {\n    // if finalized, there is no work to do. If reifying, there is a\n    // circular dependency so we must return our (partial) exports.\n    if (this.state === 'finalized' || this.state === 'reifying') {\n      return this.module.exports;\n    }\n\n\n    if (loader.wrapModules) {\n      this.callback = loader.wrapModules(this.id, this.callback);\n    }\n\n    this.reify();\n\n    var result = this.callback.apply(this, this.reified);\n    this.reified.length = 0;\n    this.state = 'finalized';\n\n    if (!(this.hasExportsAsDep && result === undefined)) {\n      this.module.exports = result;\n    }\n    if (loader.makeDefaultExport) {\n      this.makeDefaultExport();\n    }\n    return this.module.exports;\n  };\n\n  Module.prototype.unsee = function () {\n    this.state = 'new';\n    this.module = { exports: {} };\n  };\n\n  Module.prototype.reify = function () {\n    if (this.state === 'reified') {\n      return;\n    }\n    this.state = 'reifying';\n    try {\n      this.reified = this._reify();\n      this.state = 'reified';\n    } finally {\n      if (this.state === 'reifying') {\n        this.state = 'errored';\n      }\n    }\n  };\n\n  Module.prototype._reify = function () {\n    var reified = this.reified.slice();\n    for (var i = 0; i < reified.length; i++) {\n      var mod = reified[i];\n      reified[i] = mod.exports ? mod.exports : mod.module.exports();\n    }\n    return reified;\n  };\n\n  Module.prototype.findDeps = function (pending) {\n    if (this.state !== 'new') {\n      return;\n    }\n\n    this.state = 'pending';\n\n    var deps = this.deps;\n\n    for (var i = 0; i < deps.length; i++) {\n      var dep = deps[i];\n      var entry = this.reified[i] = { exports: undefined, module: undefined };\n      if (dep === 'exports') {\n        this.hasExportsAsDep = true;\n        entry.exports = this.module.exports;\n      } else if (dep === 'require') {\n        entry.exports = this.makeRequire();\n      } else if (dep === 'module') {\n        entry.exports = this.module;\n      } else {\n        entry.module = findModule(resolve(dep, this.id), this.id, pending);\n      }\n    }\n  };\n\n  Module.prototype.makeRequire = function () {\n    var id = this.id;\n    var r = function (dep) {\n      return require(resolve(dep, id));\n    };\n    r['default'] = r;\n    r.moduleId = id;\n    r.has = function (dep) {\n      return has(resolve(dep, id));\n    };\n    return r;\n  };\n\n  define = function (id, deps, callback) {\n    var module = registry[id];\n\n    // If a module for this id has already been defined and is in any state\n    // other than `new` (meaning it has been or is currently being required),\n    // then we return early to avoid redefinition.\n    if (module && module.state !== 'new') {\n      return;\n    }\n\n    if (arguments.length < 2) {\n      unsupportedModule(arguments.length);\n    }\n\n    if (!Array.isArray(deps)) {\n      callback = deps;\n      deps = [];\n    }\n\n    if (callback instanceof Alias) {\n      registry[id] = new Module(callback.id, deps, callback, true);\n    } else {\n      registry[id] = new Module(id, deps, callback, false);\n    }\n  };\n\n  define.exports = function (name, defaultExport) {\n    var module = registry[name];\n\n    // If a module for this name has already been defined and is in any state\n    // other than `new` (meaning it has been or is currently being required),\n    // then we return early to avoid redefinition.\n    if (module && module.state !== 'new') {\n      return;\n    }\n\n    module = new Module(name, [], noop, null);\n    module.module.exports = defaultExport;\n    module.state = 'finalized';\n    registry[name] = module;\n\n    return module;\n  };\n\n  function noop() {}\n  // we don't support all of AMD\n  // define.amd = {};\n\n  function Alias(id) {\n    this.id = id;\n  }\n\n  define.alias = function (id, target) {\n    if (arguments.length === 2) {\n      return define(target, new Alias(id));\n    }\n\n    return new Alias(id);\n  };\n\n  function missingModule(id, referrer) {\n    throw new Error('Could not find module `' + id + '` imported from `' + referrer + '`');\n  }\n\n  function findModule(id, referrer, pending) {\n    var mod = registry[id] || registry[id + '/index'];\n\n    while (mod && mod.isAlias) {\n      mod = registry[mod.id] || registry[mod.id + '/index'];\n    }\n\n    if (!mod) {\n      missingModule(id, referrer);\n    }\n\n    if (pending && mod.state !== 'pending' && mod.state !== 'finalized') {\n      mod.findDeps(pending);\n      pending.push(mod);\n    }\n    return mod;\n  }\n\n  function resolve(child, id) {\n    if (child.charAt(0) !== '.') {\n      return child;\n    }\n\n\n    var parts = child.split('/');\n    var nameParts = id.split('/');\n    var parentBase = nameParts.slice(0, -1);\n\n    for (var i = 0, l = parts.length; i < l; i++) {\n      var part = parts[i];\n\n      if (part === '..') {\n        if (parentBase.length === 0) {\n          throw new Error('Cannot access parent module of root');\n        }\n        parentBase.pop();\n      } else if (part === '.') {\n        continue;\n      } else {\n        parentBase.push(part);\n      }\n    }\n\n    return parentBase.join('/');\n  }\n\n  function has(id) {\n    return !!(registry[id] || registry[id + '/index']);\n  }\n\n  requirejs.entries = requirejs._eak_seen = registry;\n  requirejs.has = has;\n  requirejs.unsee = function (id) {\n    findModule(id, '(unsee)', false).unsee();\n  };\n\n  requirejs.clear = function () {\n    requirejs.entries = requirejs._eak_seen = registry = dict();\n    seen = dict();\n  };\n\n  // This code primes the JS engine for good performance by warming the\n  // JIT compiler for these functions.\n  define('foo', function () {});\n  define('foo/bar', [], function () {});\n  define('foo/asdf', ['module', 'exports', 'require'], function (module, exports, require) {\n    if (require.has('foo/bar')) {\n      require('foo/bar');\n    }\n  });\n  define('foo/baz', [], define.alias('foo'));\n  define('foo/quz', define.alias('foo'));\n  define.alias('foo', 'foo/qux');\n  define('foo/bar', ['foo', './quz', './baz', './asdf', './bar', '../foo'], function () {});\n  define('foo/main', ['foo/bar'], function () {});\n  define.exports('foo/exports', {});\n\n  require('foo/exports');\n  require('foo/main');\n  require.unsee('foo/bar');\n\n  requirejs.clear();\n\n  if (typeof exports === 'object' && typeof module === 'object' && module.exports) {\n    module.exports = { require: require, define: define };\n  }\n})(this);","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n  \"use strict\";\n\n  var hasOwn = Object.prototype.hasOwnProperty;\n  var undefined; // More compressible than void 0.\n  var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n  var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n  var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n  var inModule = typeof module === \"object\";\n  var runtime = global.regeneratorRuntime;\n  if (runtime) {\n    if (inModule) {\n      // If regeneratorRuntime is defined globally and we're in a module,\n      // make the exports object identical to regeneratorRuntime.\n      module.exports = runtime;\n    }\n    // Don't bother evaluating the rest of this file if the runtime was\n    // already defined globally.\n    return;\n  }\n\n  // Define the runtime globally (as expected by generated code) as either\n  // module.exports (if we're in a module) or a new, empty object.\n  runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n  function wrap(innerFn, outerFn, self, tryLocsList) {\n    // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n    var generator = Object.create(protoGenerator.prototype);\n    var context = new Context(tryLocsList || []);\n\n    // The ._invoke method unifies the implementations of the .next,\n    // .throw, and .return methods.\n    generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n    return generator;\n  }\n  runtime.wrap = wrap;\n\n  // Try/catch helper to minimize deoptimizations. Returns a completion\n  // record like context.tryEntries[i].completion. This interface could\n  // have been (and was previously) designed to take a closure to be\n  // invoked without arguments, but in all the cases we care about we\n  // already have an existing method we want to call, so there's no need\n  // to create a new function object. We can even get away with assuming\n  // the method takes exactly one argument, since that happens to be true\n  // in every case, so we don't have to touch the arguments object. The\n  // only additional allocation required is the completion record, which\n  // has a stable shape and so hopefully should be cheap to allocate.\n  function tryCatch(fn, obj, arg) {\n    try {\n      return { type: \"normal\", arg: fn.call(obj, arg) };\n    } catch (err) {\n      return { type: \"throw\", arg: err };\n    }\n  }\n\n  var GenStateSuspendedStart = \"suspendedStart\";\n  var GenStateSuspendedYield = \"suspendedYield\";\n  var GenStateExecuting = \"executing\";\n  var GenStateCompleted = \"completed\";\n\n  // Returning this object from the innerFn has the same effect as\n  // breaking out of the dispatch switch statement.\n  var ContinueSentinel = {};\n\n  // Dummy constructor functions that we use as the .constructor and\n  // .constructor.prototype properties for functions that return Generator\n  // objects. For full spec compliance, you may wish to configure your\n  // minifier not to mangle the names of these two functions.\n  function Generator() {}\n  function GeneratorFunction() {}\n  function GeneratorFunctionPrototype() {}\n\n  var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype;\n  GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n  GeneratorFunctionPrototype.constructor = GeneratorFunction;\n  GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = \"GeneratorFunction\";\n\n  // Helper for defining the .next, .throw, and .return methods of the\n  // Iterator interface in terms of a single ._invoke method.\n  function defineIteratorMethods(prototype) {\n    [\"next\", \"throw\", \"return\"].forEach(function(method) {\n      prototype[method] = function(arg) {\n        return this._invoke(method, arg);\n      };\n    });\n  }\n\n  runtime.isGeneratorFunction = function(genFun) {\n    var ctor = typeof genFun === \"function\" && genFun.constructor;\n    return ctor\n      ? ctor === GeneratorFunction ||\n        // For the native GeneratorFunction constructor, the best we can\n        // do is to check its .name property.\n        (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n      : false;\n  };\n\n  runtime.mark = function(genFun) {\n    if (Object.setPrototypeOf) {\n      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n    } else {\n      genFun.__proto__ = GeneratorFunctionPrototype;\n      if (!(toStringTagSymbol in genFun)) {\n        genFun[toStringTagSymbol] = \"GeneratorFunction\";\n      }\n    }\n    genFun.prototype = Object.create(Gp);\n    return genFun;\n  };\n\n  // Within the body of any async function, `await x` is transformed to\n  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n  // `value instanceof AwaitArgument` to determine if the yielded value is\n  // meant to be awaited. Some may consider the name of this method too\n  // cutesy, but they are curmudgeons.\n  runtime.awrap = function(arg) {\n    return new AwaitArgument(arg);\n  };\n\n  function AwaitArgument(arg) {\n    this.arg = arg;\n  }\n\n  function AsyncIterator(generator) {\n    function invoke(method, arg, resolve, reject) {\n      var record = tryCatch(generator[method], generator, arg);\n      if (record.type === \"throw\") {\n        reject(record.arg);\n      } else {\n        var result = record.arg;\n        var value = result.value;\n        if (value instanceof AwaitArgument) {\n          return Promise.resolve(value.arg).then(function(value) {\n            invoke(\"next\", value, resolve, reject);\n          }, function(err) {\n            invoke(\"throw\", err, resolve, reject);\n          });\n        }\n\n        return Promise.resolve(value).then(function(unwrapped) {\n          // When a yielded Promise is resolved, its final value becomes\n          // the .value of the Promise<{value,done}> result for the\n          // current iteration. If the Promise is rejected, however, the\n          // result for this iteration will be rejected with the same\n          // reason. Note that rejections of yielded Promises are not\n          // thrown back into the generator function, as is the case\n          // when an awaited Promise is rejected. This difference in\n          // behavior between yield and await is important, because it\n          // allows the consumer to decide what to do with the yielded\n          // rejection (swallow it and continue, manually .throw it back\n          // into the generator, abandon iteration, whatever). With\n          // await, by contrast, there is no opportunity to examine the\n          // rejection reason outside the generator function, so the\n          // only option is to throw it from the await expression, and\n          // let the generator function handle the exception.\n          result.value = unwrapped;\n          resolve(result);\n        }, reject);\n      }\n    }\n\n    if (typeof process === \"object\" && process.domain) {\n      invoke = process.domain.bind(invoke);\n    }\n\n    var previousPromise;\n\n    function enqueue(method, arg) {\n      function callInvokeWithMethodAndArg() {\n        return new Promise(function(resolve, reject) {\n          invoke(method, arg, resolve, reject);\n        });\n      }\n\n      return previousPromise =\n        // If enqueue has been called before, then we want to wait until\n        // all previous Promises have been resolved before calling invoke,\n        // so that results are always delivered in the correct order. If\n        // enqueue has not been called before, then it is important to\n        // call invoke immediately, without waiting on a callback to fire,\n        // so that the async generator function has the opportunity to do\n        // any necessary setup in a predictable way. This predictability\n        // is why the Promise constructor synchronously invokes its\n        // executor callback, and why async functions synchronously\n        // execute code before the first await. Since we implement simple\n        // async functions in terms of async generators, it is especially\n        // important to get this right, even though it requires care.\n        previousPromise ? previousPromise.then(\n          callInvokeWithMethodAndArg,\n          // Avoid propagating failures to Promises returned by later\n          // invocations of the iterator.\n          callInvokeWithMethodAndArg\n        ) : callInvokeWithMethodAndArg();\n    }\n\n    // Define the unified helper method that is used to implement .next,\n    // .throw, and .return (see defineIteratorMethods).\n    this._invoke = enqueue;\n  }\n\n  defineIteratorMethods(AsyncIterator.prototype);\n\n  // Note that simple async functions are implemented on top of\n  // AsyncIterator objects; they just return a Promise for the value of\n  // the final result produced by the iterator.\n  runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n    var iter = new AsyncIterator(\n      wrap(innerFn, outerFn, self, tryLocsList)\n    );\n\n    return runtime.isGeneratorFunction(outerFn)\n      ? iter // If outerFn is a generator, return the full iterator.\n      : iter.next().then(function(result) {\n          return result.done ? result.value : iter.next();\n        });\n  };\n\n  function makeInvokeMethod(innerFn, self, context) {\n    var state = GenStateSuspendedStart;\n\n    return function invoke(method, arg) {\n      if (state === GenStateExecuting) {\n        throw new Error(\"Generator is already running\");\n      }\n\n      if (state === GenStateCompleted) {\n        if (method === \"throw\") {\n          throw arg;\n        }\n\n        // Be forgiving, per 25.3.3.3.3 of the spec:\n        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n        return doneResult();\n      }\n\n      while (true) {\n        var delegate = context.delegate;\n        if (delegate) {\n          if (method === \"return\" ||\n              (method === \"throw\" && delegate.iterator[method] === undefined)) {\n            // A return or throw (when the delegate iterator has no throw\n            // method) always terminates the yield* loop.\n            context.delegate = null;\n\n            // If the delegate iterator has a return method, give it a\n            // chance to clean up.\n            var returnMethod = delegate.iterator[\"return\"];\n            if (returnMethod) {\n              var record = tryCatch(returnMethod, delegate.iterator, arg);\n              if (record.type === \"throw\") {\n                // If the return method threw an exception, let that\n                // exception prevail over the original return or throw.\n                method = \"throw\";\n                arg = record.arg;\n                continue;\n              }\n            }\n\n            if (method === \"return\") {\n              // Continue with the outer return, now that the delegate\n              // iterator has been terminated.\n              continue;\n            }\n          }\n\n          var record = tryCatch(\n            delegate.iterator[method],\n            delegate.iterator,\n            arg\n          );\n\n          if (record.type === \"throw\") {\n            context.delegate = null;\n\n            // Like returning generator.throw(uncaught), but without the\n            // overhead of an extra function call.\n            method = \"throw\";\n            arg = record.arg;\n            continue;\n          }\n\n          // Delegate generator ran and handled its own exceptions so\n          // regardless of what the method was, we continue as if it is\n          // \"next\" with an undefined arg.\n          method = \"next\";\n          arg = undefined;\n\n          var info = record.arg;\n          if (info.done) {\n            context[delegate.resultName] = info.value;\n            context.next = delegate.nextLoc;\n          } else {\n            state = GenStateSuspendedYield;\n            return info;\n          }\n\n          context.delegate = null;\n        }\n\n        if (method === \"next\") {\n          // Setting context._sent for legacy support of Babel's\n          // function.sent implementation.\n          context.sent = context._sent = arg;\n\n        } else if (method === \"throw\") {\n          if (state === GenStateSuspendedStart) {\n            state = GenStateCompleted;\n            throw arg;\n          }\n\n          if (context.dispatchException(arg)) {\n            // If the dispatched exception was caught by a catch block,\n            // then let that catch block handle the exception normally.\n            method = \"next\";\n            arg = undefined;\n          }\n\n        } else if (method === \"return\") {\n          context.abrupt(\"return\", arg);\n        }\n\n        state = GenStateExecuting;\n\n        var record = tryCatch(innerFn, self, context);\n        if (record.type === \"normal\") {\n          // If an exception is thrown from innerFn, we leave state ===\n          // GenStateExecuting and loop back for another invocation.\n          state = context.done\n            ? GenStateCompleted\n            : GenStateSuspendedYield;\n\n          var info = {\n            value: record.arg,\n            done: context.done\n          };\n\n          if (record.arg === ContinueSentinel) {\n            if (context.delegate && method === \"next\") {\n              // Deliberately forget the last sent value so that we don't\n              // accidentally pass it on to the delegate.\n              arg = undefined;\n            }\n          } else {\n            return info;\n          }\n\n        } else if (record.type === \"throw\") {\n          state = GenStateCompleted;\n          // Dispatch the exception by looping back around to the\n          // context.dispatchException(arg) call above.\n          method = \"throw\";\n          arg = record.arg;\n        }\n      }\n    };\n  }\n\n  // Define Generator.prototype.{next,throw,return} in terms of the\n  // unified ._invoke helper method.\n  defineIteratorMethods(Gp);\n\n  Gp[iteratorSymbol] = function() {\n    return this;\n  };\n\n  Gp[toStringTagSymbol] = \"Generator\";\n\n  Gp.toString = function() {\n    return \"[object Generator]\";\n  };\n\n  function pushTryEntry(locs) {\n    var entry = { tryLoc: locs[0] };\n\n    if (1 in locs) {\n      entry.catchLoc = locs[1];\n    }\n\n    if (2 in locs) {\n      entry.finallyLoc = locs[2];\n      entry.afterLoc = locs[3];\n    }\n\n    this.tryEntries.push(entry);\n  }\n\n  function resetTryEntry(entry) {\n    var record = entry.completion || {};\n    record.type = \"normal\";\n    delete record.arg;\n    entry.completion = record;\n  }\n\n  function Context(tryLocsList) {\n    // The root entry object (effectively a try statement without a catch\n    // or a finally block) gives us a place to store values thrown from\n    // locations where there is no enclosing try statement.\n    this.tryEntries = [{ tryLoc: \"root\" }];\n    tryLocsList.forEach(pushTryEntry, this);\n    this.reset(true);\n  }\n\n  runtime.keys = function(object) {\n    var keys = [];\n    for (var key in object) {\n      keys.push(key);\n    }\n    keys.reverse();\n\n    // Rather than returning an object with a next method, we keep\n    // things simple and return the next function itself.\n    return function next() {\n      while (keys.length) {\n        var key = keys.pop();\n        if (key in object) {\n          next.value = key;\n          next.done = false;\n          return next;\n        }\n      }\n\n      // To avoid creating an additional object, we just hang the .value\n      // and .done properties off the next function object itself. This\n      // also ensures that the minifier will not anonymize the function.\n      next.done = true;\n      return next;\n    };\n  };\n\n  function values(iterable) {\n    if (iterable) {\n      var iteratorMethod = iterable[iteratorSymbol];\n      if (iteratorMethod) {\n        return iteratorMethod.call(iterable);\n      }\n\n      if (typeof iterable.next === \"function\") {\n        return iterable;\n      }\n\n      if (!isNaN(iterable.length)) {\n        var i = -1, next = function next() {\n          while (++i < iterable.length) {\n            if (hasOwn.call(iterable, i)) {\n              next.value = iterable[i];\n              next.done = false;\n              return next;\n            }\n          }\n\n          next.value = undefined;\n          next.done = true;\n\n          return next;\n        };\n\n        return next.next = next;\n      }\n    }\n\n    // Return an iterator with no values.\n    return { next: doneResult };\n  }\n  runtime.values = values;\n\n  function doneResult() {\n    return { value: undefined, done: true };\n  }\n\n  Context.prototype = {\n    constructor: Context,\n\n    reset: function(skipTempReset) {\n      this.prev = 0;\n      this.next = 0;\n      // Resetting context._sent for legacy support of Babel's\n      // function.sent implementation.\n      this.sent = this._sent = undefined;\n      this.done = false;\n      this.delegate = null;\n\n      this.tryEntries.forEach(resetTryEntry);\n\n      if (!skipTempReset) {\n        for (var name in this) {\n          // Not sure about the optimal order of these conditions:\n          if (name.charAt(0) === \"t\" &&\n              hasOwn.call(this, name) &&\n              !isNaN(+name.slice(1))) {\n            this[name] = undefined;\n          }\n        }\n      }\n    },\n\n    stop: function() {\n      this.done = true;\n\n      var rootEntry = this.tryEntries[0];\n      var rootRecord = rootEntry.completion;\n      if (rootRecord.type === \"throw\") {\n        throw rootRecord.arg;\n      }\n\n      return this.rval;\n    },\n\n    dispatchException: function(exception) {\n      if (this.done) {\n        throw exception;\n      }\n\n      var context = this;\n      function handle(loc, caught) {\n        record.type = \"throw\";\n        record.arg = exception;\n        context.next = loc;\n        return !!caught;\n      }\n\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        var record = entry.completion;\n\n        if (entry.tryLoc === \"root\") {\n          // Exception thrown outside of any try block that could handle\n          // it, so set the completion value of the entire function to\n          // throw the exception.\n          return handle(\"end\");\n        }\n\n        if (entry.tryLoc <= this.prev) {\n          var hasCatch = hasOwn.call(entry, \"catchLoc\");\n          var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n          if (hasCatch && hasFinally) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            } else if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else if (hasCatch) {\n            if (this.prev < entry.catchLoc) {\n              return handle(entry.catchLoc, true);\n            }\n\n          } else if (hasFinally) {\n            if (this.prev < entry.finallyLoc) {\n              return handle(entry.finallyLoc);\n            }\n\n          } else {\n            throw new Error(\"try statement without catch or finally\");\n          }\n        }\n      }\n    },\n\n    abrupt: function(type, arg) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc <= this.prev &&\n            hasOwn.call(entry, \"finallyLoc\") &&\n            this.prev < entry.finallyLoc) {\n          var finallyEntry = entry;\n          break;\n        }\n      }\n\n      if (finallyEntry &&\n          (type === \"break\" ||\n           type === \"continue\") &&\n          finallyEntry.tryLoc <= arg &&\n          arg <= finallyEntry.finallyLoc) {\n        // Ignore the finally entry if control is not jumping to a\n        // location outside the try/catch block.\n        finallyEntry = null;\n      }\n\n      var record = finallyEntry ? finallyEntry.completion : {};\n      record.type = type;\n      record.arg = arg;\n\n      if (finallyEntry) {\n        this.next = finallyEntry.finallyLoc;\n      } else {\n        this.complete(record);\n      }\n\n      return ContinueSentinel;\n    },\n\n    complete: function(record, afterLoc) {\n      if (record.type === \"throw\") {\n        throw record.arg;\n      }\n\n      if (record.type === \"break\" ||\n          record.type === \"continue\") {\n        this.next = record.arg;\n      } else if (record.type === \"return\") {\n        this.rval = record.arg;\n        this.next = \"end\";\n      } else if (record.type === \"normal\" && afterLoc) {\n        this.next = afterLoc;\n      }\n    },\n\n    finish: function(finallyLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.finallyLoc === finallyLoc) {\n          this.complete(entry.completion, entry.afterLoc);\n          resetTryEntry(entry);\n          return ContinueSentinel;\n        }\n      }\n    },\n\n    \"catch\": function(tryLoc) {\n      for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n        var entry = this.tryEntries[i];\n        if (entry.tryLoc === tryLoc) {\n          var record = entry.completion;\n          if (record.type === \"throw\") {\n            var thrown = record.arg;\n            resetTryEntry(entry);\n          }\n          return thrown;\n        }\n      }\n\n      // The context.catch method must only be called with a location\n      // argument that corresponds to a known catch block.\n      throw new Error(\"illegal catch attempt\");\n    },\n\n    delegateYield: function(iterable, resultName, nextLoc) {\n      this.delegate = {\n        iterator: values(iterable),\n        resultName: resultName,\n        nextLoc: nextLoc\n      };\n\n      return ContinueSentinel;\n    }\n  };\n})(\n  // Among the various tricks for obtaining a reference to the global\n  // object, this seems to be the most reliable technique that does not\n  // use indirect eval (which violates Content Security Policy).\n  typeof global === \"object\" ? global :\n  typeof window === \"object\" ? window :\n  typeof self === \"object\" ? self : this\n);\n","/*!\n * jQuery JavaScript Library v3.3.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2018-01-20T17:24Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n      // Support: Chrome <=57, Firefox <=52\n      // In some browsers, typeof returns \"function\" for HTML <object> elements\n      // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n      // We don't want to classify *any* DOM node as a function.\n      return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n  };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, doc, node ) {\n\t\tdoc = doc || document;\n\n\t\tvar i,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\t\t\t\tif ( node[ i ] ) {\n\t\t\t\t\tscript[ i ] = node[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.3.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && Array.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\n\t\t/* eslint-disable no-unused-vars */\n\t\t// See https://github.com/eslint/eslint/issues/6125\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tDOMEval( code );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tdisabledAncestor = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && (\"form\" in elem || \"label\" in elem);\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tdisabledAncestor( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\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\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\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\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\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\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n        if ( nodeName( elem, \"iframe\" ) ) {\n            return elem.contentDocument;\n        }\n\n        // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n        // Treat the template element as a regular one in browsers that\n        // don't support it.\n        if ( nodeName( elem, \"template\" ) ) {\n            elem = elem.content || elem;\n        }\n\n        return jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\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\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\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};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t//  - Node\n\t//    - Node.ELEMENT_NODE\n\t//    - Node.DOCUMENT_NODE\n\t//  - Object\n\t//    - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t//   1. No key was specified\n\t\t//   2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t//   1. The entire cache object\n\t\t//   2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t//   1. An object of properties\n\t\t//   2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\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\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tjQuery.contains( elem.ownerDocument, elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\nvar documentElement = document.documentElement;\n\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 only\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), doc, node );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = div.offsetWidth === 36 || \"absolute\";\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a property mapped along what jQuery.cssProps suggests or to\n// a vendor prefixed property.\nfunction finalPropName( name ) {\n\tvar ret = jQuery.cssProps[ name ];\n\tif ( !ret ) {\n\t\tret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;\n\t}\n\treturn ret;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\t\t) );\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\t\tval = curCSS( elem, dimension, styles ),\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox;\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\t// Check for style in case a browser which returns unreliable values\n\t// for getComputedStyle silently falls back to the reliable elem.style\n\tvalueIsBorderBox = valueIsBorderBox &&\n\t\t( support.boxSizingReliable() || val === elem.style[ dimension ] );\n\n\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\t// Support: Android <=4.1 - 4.3 only\n\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\tif ( val === \"auto\" ||\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) {\n\n\t\tval = elem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ];\n\n\t\t// offsetWidth/offsetHeight provide border-box values\n\t\tvalueIsBorderBox = true;\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\t\t\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra && boxModelAdjustment(\n\t\t\t\t\telem,\n\t\t\t\t\tdimension,\n\t\t\t\t\textra,\n\t\t\t\t\tisBorderBox,\n\t\t\t\t\tstyles\n\t\t\t\t);\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && support.scrollboxSize() === styles.position ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = Date.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\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\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\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\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\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\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\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};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\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}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" ).prop( {\n\t\t\t\t\tcharset: s.scriptCharset,\n\t\t\t\t\tsrc: s.url\n\t\t\t\t} ).on(\n\t\t\t\t\t\"load error\",\n\t\t\t\t\tcallback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\t\tfunction( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( ( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","/*!\n * @overview  Ember - JavaScript Application Framework\n * @copyright Copyright 2011-2018 Tilde Inc. and contributors\n *            Portions Copyright 2006-2011 Strobe Inc.\n *            Portions Copyright 2008-2011 Apple Inc. All rights reserved.\n * @license   Licensed under MIT license\n *            See https://raw.github.com/emberjs/ember.js/master/LICENSE\n * @version   3.1.4-release-3-1+bc8d50e2\n */\n","/*globals process */\nvar enifed, requireModule, Ember;\n\n// Used in ember-environment/lib/global.js\nmainContext = this; // eslint-disable-line no-undef\n\n(function() {\n    function missingModule(name, referrerName) {\n      if (referrerName) {\n        throw new Error('Could not find module ' + name + ' required by: ' + referrerName);\n      } else {\n        throw new Error('Could not find module ' + name);\n      }\n    }\n\n    function internalRequire(_name, referrerName) {\n      var name = _name;\n      var mod = registry[name];\n\n      if (!mod) {\n        name = name + '/index';\n        mod = registry[name];\n      }\n\n      var exports = seen[name];\n\n      if (exports !== undefined) {\n        return exports;\n      }\n\n      exports = seen[name] = {};\n\n      if (!mod) {\n        missingModule(_name, referrerName);\n      }\n\n      var deps = mod.deps;\n      var callback = mod.callback;\n      var reified = new Array(deps.length);\n\n      for (var i = 0; i < deps.length; i++) {\n        if (deps[i] === 'exports') {\n          reified[i] = exports;\n        } else if (deps[i] === 'require') {\n          reified[i] = requireModule;\n        } else {\n          reified[i] = internalRequire(deps[i], name);\n        }\n      }\n\n      callback.apply(this, reified);\n\n      return exports;\n    }\n\n  var isNode = typeof window === 'undefined' &&\n    typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n  if (!isNode) {\n    Ember = this.Ember = this.Ember || {};\n  }\n\n  if (typeof Ember === 'undefined') { Ember = {}; }\n\n  if (typeof Ember.__loader === 'undefined') {\n    var registry = {};\n    var seen = {};\n\n    enifed = function(name, deps, callback) {\n      var value = { };\n\n      if (!callback) {\n        value.deps = [];\n        value.callback = deps;\n      } else {\n        value.deps = deps;\n        value.callback = callback;\n      }\n\n      registry[name] = value;\n    };\n\n    requireModule = function(name) {\n      return internalRequire(name, null);\n    };\n\n    // setup `require` module\n    requireModule['default'] = requireModule;\n\n    requireModule.has = function registryHas(moduleName) {\n      return !!registry[moduleName] || !!registry[moduleName + '/index'];\n    };\n\n    requireModule._eak_seen = registry;\n\n    Ember.__loader = {\n      define: enifed,\n      require: requireModule,\n      registry: registry\n    };\n  } else {\n    enifed = Ember.__loader.define;\n    requireModule = Ember.__loader.require;\n  }\n})();\n","enifed('@glimmer/encoder', ['exports', 'ember-babel'], function (exports, _emberBabel) {\n    'use strict';\n\n    exports.InstructionEncoder = undefined;\n\n    var InstructionEncoder = function () {\n        function InstructionEncoder(buffer) {\n            (0, _emberBabel.classCallCheck)(this, InstructionEncoder);\n\n            this.buffer = buffer;\n            this.typePos = 0;\n            this.size = 0;\n        }\n\n        InstructionEncoder.prototype.encode = function encode(type, machine) {\n            if (type > 255 /* TYPE_SIZE */) {\n                    throw new Error('Opcode type over 8-bits. Got ' + type + '.');\n                }\n            this.buffer.push(type | machine | arguments.length - 2 << 8 /* ARG_SHIFT */);\n            this.typePos = this.buffer.length - 1;\n            for (var i = 2; i < arguments.length; i++) {\n                var op = arguments[i];\n                if (typeof op === 'number' && op > 65535 /* MAX_SIZE */) {\n                        throw new Error('Operand over 16-bits. Got ' + op + '.');\n                    }\n                this.buffer.push(op);\n            }\n\n            this.size = this.buffer.length;\n        };\n\n        InstructionEncoder.prototype.patch = function patch(position, operand) {\n            if (this.buffer[position + 1] === -1) {\n                this.buffer[position + 1] = operand;\n            } else {\n                throw new Error('Trying to patch operand in populated slot instead of a reserved slot.');\n            }\n        };\n\n        return InstructionEncoder;\n    }();\n\n    exports.InstructionEncoder = InstructionEncoder;\n});","enifed('@glimmer/low-level', ['exports', 'ember-babel'], function (exports, _emberBabel) {\n    'use strict';\n\n    exports.Stack = exports.Storage = undefined;\n\n    var Storage = function () {\n        function Storage() {\n            (0, _emberBabel.classCallCheck)(this, Storage);\n\n            this.array = [];\n            this.next = 0;\n        }\n\n        Storage.prototype.add = function add(element) {\n            var slot = this.next,\n                array = this.array;\n\n            if (slot === array.length) {\n                this.next++;\n            } else {\n                var prev = array[slot];\n                this.next = prev;\n            }\n            this.array[slot] = element;\n            return slot;\n        };\n\n        Storage.prototype.deref = function deref(pointer) {\n            return this.array[pointer];\n        };\n\n        Storage.prototype.drop = function drop(pointer) {\n            this.array[pointer] = this.next;\n            this.next = pointer;\n        };\n\n        return Storage;\n    }();\n\n    var Stack = function () {\n        function Stack() {\n            var vec = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n            (0, _emberBabel.classCallCheck)(this, Stack);\n\n            this.vec = vec;\n        }\n\n        Stack.prototype.clone = function clone() {\n            return new Stack(this.vec.slice());\n        };\n\n        Stack.prototype.sliceFrom = function sliceFrom(start) {\n            return new Stack(this.vec.slice(start));\n        };\n\n        Stack.prototype.slice = function slice(start, end) {\n            return new Stack(this.vec.slice(start, end));\n        };\n\n        Stack.prototype.copy = function copy(from, to) {\n            this.vec[to] = this.vec[from];\n        };\n\n        Stack.prototype.writeRaw = function writeRaw(pos, value) {\n            // TODO: Grow?\n            this.vec[pos] = value;\n        };\n\n        Stack.prototype.writeSmi = function writeSmi(pos, value) {\n            this.vec[pos] = encodeSmi(value);\n        };\n\n        Stack.prototype.getRaw = function getRaw(pos) {\n            return this.vec[pos];\n        };\n\n        Stack.prototype.getSmi = function getSmi(pos) {\n            return decodeSmi(this.vec[pos]);\n        };\n\n        Stack.prototype.reset = function reset() {\n            this.vec.length = 0;\n        };\n\n        Stack.prototype.len = function len() {\n            return this.vec.length;\n        };\n\n        return Stack;\n    }();\n\n    function decodeSmi(smi) {\n        switch (smi & 7) {\n            case 0 /* NUMBER */:\n                return smi >> 3;\n            case 4 /* NEGATIVE */:\n                return -(smi >> 3);\n            default:\n                throw new Error('unreachable');\n        }\n    }\n    function encodeSmi(primitive) {\n        if (primitive < 0) {\n            return Math.abs(primitive) << 3 | 4 /* NEGATIVE */;\n        } else {\n            return primitive << 3 | 0 /* NUMBER */;\n        }\n    }\n\n    exports.Storage = Storage;\n    exports.Stack = Stack;\n});","enifed('@glimmer/node', ['exports', 'ember-babel', '@glimmer/runtime'], function (exports, _emberBabel, _runtime) {\n    'use strict';\n\n    exports.serializeBuilder = exports.NodeDOMTreeConstruction = undefined;\n\n    var NodeDOMTreeConstruction = function (_DOMTreeConstruction) {\n        (0, _emberBabel.inherits)(NodeDOMTreeConstruction, _DOMTreeConstruction);\n\n        function NodeDOMTreeConstruction(doc) {\n            (0, _emberBabel.classCallCheck)(this, NodeDOMTreeConstruction);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _DOMTreeConstruction.call(this, doc));\n        }\n        // override to prevent usage of `this.document` until after the constructor\n\n\n        NodeDOMTreeConstruction.prototype.setupUselessElement = function setupUselessElement() {};\n\n        NodeDOMTreeConstruction.prototype.insertHTMLBefore = function insertHTMLBefore(parent, reference, html) {\n            var prev = reference ? reference.previousSibling : parent.lastChild;\n            var raw = this.document.createRawHTMLSection(html);\n            parent.insertBefore(raw, reference);\n            var first = prev ? prev.nextSibling : parent.firstChild;\n            var last = reference ? reference.previousSibling : parent.lastChild;\n            return new _runtime.ConcreteBounds(parent, first, last);\n        };\n\n        NodeDOMTreeConstruction.prototype.createElement = function createElement(tag) {\n            return this.document.createElement(tag);\n        };\n\n        NodeDOMTreeConstruction.prototype.setAttribute = function setAttribute(element, name, value) {\n            element.setAttribute(name, value);\n        };\n\n        return NodeDOMTreeConstruction;\n    }(_runtime.DOMTreeConstruction);\n\n    var TEXT_NODE = 3;\n    function currentNode(cursor) {\n        var element = cursor.element,\n            nextSibling = cursor.nextSibling;\n\n        if (nextSibling === null) {\n            return element.lastChild;\n        } else {\n            return nextSibling.previousSibling;\n        }\n    }\n\n    var SerializeBuilder = function (_NewElementBuilder) {\n        (0, _emberBabel.inherits)(SerializeBuilder, _NewElementBuilder);\n\n        function SerializeBuilder() {\n            (0, _emberBabel.classCallCheck)(this, SerializeBuilder);\n\n            var _this2 = (0, _emberBabel.possibleConstructorReturn)(this, _NewElementBuilder.apply(this, arguments));\n\n            _this2.serializeBlockDepth = 0;\n            _this2.inTable = false;\n            return _this2;\n        }\n\n        SerializeBuilder.prototype.__openBlock = function __openBlock() {\n            var depth = this.serializeBlockDepth++;\n            this.__appendComment('%+b:' + depth + '%');\n            _NewElementBuilder.prototype.__openBlock.call(this);\n        };\n\n        SerializeBuilder.prototype.__closeBlock = function __closeBlock() {\n            _NewElementBuilder.prototype.__closeBlock.call(this);\n            this.__appendComment('%-b:' + --this.serializeBlockDepth + '%');\n        };\n\n        SerializeBuilder.prototype.__appendHTML = function __appendHTML(html) {\n            // Do we need to run the html tokenizer here?\n            var first = this.__appendComment('%glmr%');\n            if (this.element.tagName === 'TABLE') {\n                var openIndex = html.indexOf('<');\n                if (openIndex > -1) {\n                    var tr = html.slice(openIndex + 1, openIndex + 3);\n                    if (tr === 'tr') {\n                        html = '<tbody>' + html + '</tbody>';\n                    }\n                }\n            }\n            _NewElementBuilder.prototype.__appendHTML.call(this, html);\n            var last = this.__appendComment('%glmr%');\n            return new _runtime.ConcreteBounds(this.element, first, last);\n        };\n\n        SerializeBuilder.prototype.__appendText = function __appendText(string) {\n            var current = currentNode(this);\n            if (string === '') {\n                return this.__appendComment('% %');\n            } else if (current && current.nodeType === TEXT_NODE) {\n                this.__appendComment('%|%');\n            }\n            return _NewElementBuilder.prototype.__appendText.call(this, string);\n        };\n\n        SerializeBuilder.prototype.closeElement = function closeElement() {\n            if (this.element['needsExtraClose'] === true) {\n                this.element['needsExtraClose'] = false;\n                _NewElementBuilder.prototype.closeElement.call(this);\n            }\n            _NewElementBuilder.prototype.closeElement.call(this);\n        };\n\n        SerializeBuilder.prototype.openElement = function openElement(tag) {\n            if (tag === 'tr') {\n                if (this.element.tagName !== 'TBODY') {\n                    this.openElement('tbody');\n                    // This prevents the closeBlock comment from being re-parented\n                    // under the auto inserted tbody. Rehydration builder needs to\n                    // account for the insertion since it is injected here and not\n                    // really in the template.\n                    this.constructing['needsExtraClose'] = true;\n                    this.flushElement();\n                }\n                this.inTable = false;\n            }\n            return _NewElementBuilder.prototype.openElement.call(this, tag);\n        };\n\n        SerializeBuilder.prototype.pushRemoteElement = function pushRemoteElement(element, cursorId) {\n            var nextSibling = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n            var dom = this.dom;\n\n            var script = dom.createElement('script');\n            script.setAttribute('glmr', cursorId);\n            dom.insertBefore(element, script, nextSibling);\n            _NewElementBuilder.prototype.pushRemoteElement.call(this, element, cursorId, nextSibling);\n        };\n\n        return SerializeBuilder;\n    }(_runtime.NewElementBuilder);\n\n    function serializeBuilder(env, cursor) {\n        return SerializeBuilder.forInitialRender(env, cursor);\n    }\n\n    exports.NodeDOMTreeConstruction = NodeDOMTreeConstruction;\n    exports.serializeBuilder = serializeBuilder;\n});","enifed('@glimmer/opcode-compiler', ['exports', 'ember-babel', '@glimmer/util', '@glimmer/vm', '@glimmer/wire-format', '@glimmer/encoder'], function (exports, _emberBabel, _util, _vm, _wireFormat, _encoder) {\n    'use strict';\n\n    exports.PLACEHOLDER_HANDLE = exports.WrappedBuilder = exports.logOpcode = exports.debugSlice = exports.debug = exports.CompilableTemplate = exports.templateFactory = exports.PartialDefinition = exports.SimpleOpcodeBuilder = exports.OpcodeBuilder = exports.EagerOpcodeBuilder = exports.LazyOpcodeBuilder = exports.Macros = exports.ATTRS_BLOCK = undefined;\n\n\n    var PLACEHOLDER_HANDLE = -1;\n\n    var Ops$2;\n    (function (Ops$$1) {\n        Ops$$1[Ops$$1[\"OpenComponentElement\"] = 0] = \"OpenComponentElement\";\n        Ops$$1[Ops$$1[\"DidCreateElement\"] = 1] = \"DidCreateElement\";\n        Ops$$1[Ops$$1[\"SetComponentAttrs\"] = 2] = \"SetComponentAttrs\";\n        Ops$$1[Ops$$1[\"DidRenderLayout\"] = 3] = \"DidRenderLayout\";\n        Ops$$1[Ops$$1[\"Debugger\"] = 4] = \"Debugger\";\n    })(Ops$2 || (Ops$2 = {}));\n\n    var Ops$1 = _wireFormat.Ops;\n    var ATTRS_BLOCK = '&attrs';\n\n    var Compilers = function () {\n        function Compilers() {\n            var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n            (0, _emberBabel.classCallCheck)(this, Compilers);\n\n            this.offset = offset;\n            this.names = (0, _util.dict)();\n            this.funcs = [];\n        }\n\n        Compilers.prototype.add = function add(name, func) {\n            this.funcs.push(func);\n            this.names[name] = this.funcs.length - 1;\n        };\n\n        Compilers.prototype.compile = function compile(sexp, builder) {\n            var name = sexp[this.offset];\n            var index = this.names[name];\n            var func = this.funcs[index];\n            func(sexp, builder);\n        };\n\n        return Compilers;\n    }();\n\n    var _statementCompiler = void 0;\n    function statementCompiler() {\n        if (_statementCompiler) {\n            return _statementCompiler;\n        }\n        var STATEMENTS = _statementCompiler = new Compilers();\n        STATEMENTS.add(Ops$1.Text, function (sexp, builder) {\n            builder.text(sexp[1]);\n        });\n        STATEMENTS.add(Ops$1.Comment, function (sexp, builder) {\n            builder.comment(sexp[1]);\n        });\n        STATEMENTS.add(Ops$1.CloseElement, function (_sexp, builder) {\n            builder.closeElement();\n        });\n        STATEMENTS.add(Ops$1.FlushElement, function (_sexp, builder) {\n            builder.flushElement();\n        });\n        STATEMENTS.add(Ops$1.Modifier, function (sexp, builder) {\n            var resolver = builder.resolver,\n                referrer = builder.referrer;\n            var name = sexp[1],\n                params = sexp[2],\n                hash = sexp[3];\n\n            var handle = resolver.lookupModifier(name, referrer);\n            if (handle) {\n                builder.modifier(handle, params, hash);\n            } else {\n                throw new Error('Compile Error ' + name + ' is not a modifier: Helpers may not be used in the element form.');\n            }\n        });\n        STATEMENTS.add(Ops$1.StaticAttr, function (sexp, builder) {\n            var name = sexp[1],\n                value = sexp[2],\n                namespace = sexp[3];\n\n            builder.staticAttr(name, namespace, value);\n        });\n        STATEMENTS.add(Ops$1.DynamicAttr, function (sexp, builder) {\n            dynamicAttr(sexp, false, builder);\n        });\n        STATEMENTS.add(Ops$1.TrustingAttr, function (sexp, builder) {\n            dynamicAttr(sexp, true, builder);\n        });\n        STATEMENTS.add(Ops$1.OpenElement, function (sexp, builder) {\n            builder.openPrimitiveElement(sexp[1]);\n        });\n        STATEMENTS.add(Ops$1.OpenSplattedElement, function (sexp, builder) {\n            builder.setComponentAttrs(true);\n            builder.putComponentOperations();\n            builder.openPrimitiveElement(sexp[1]);\n        });\n        STATEMENTS.add(Ops$1.Component, function (sexp, builder) {\n            var tag = sexp[1],\n                _attrs = sexp[2],\n                args = sexp[3],\n                block = sexp[4];\n            var resolver = builder.resolver,\n                referrer = builder.referrer;\n\n            var handle = resolver.lookupComponentDefinition(tag, referrer);\n            if (handle !== null) {\n                var capabilities = resolver.getCapabilities(handle);\n                var attrs = [[Ops$1.ClientSideStatement, Ops$2.SetComponentAttrs, true]].concat(_attrs, [[Ops$1.ClientSideStatement, Ops$2.SetComponentAttrs, false]]);\n                var attrsBlock = builder.inlineBlock({ statements: attrs, parameters: _util.EMPTY_ARRAY });\n                var child = builder.template(block);\n                if (capabilities.dynamicLayout === false) {\n                    var layout = resolver.getLayout(handle);\n                    builder.pushComponentDefinition(handle);\n                    builder.invokeStaticComponent(capabilities, layout, attrsBlock, null, args, false, child && child);\n                } else {\n                    builder.pushComponentDefinition(handle);\n                    builder.invokeComponent(attrsBlock, null, args, false, child && child);\n                }\n            } else {\n                throw new Error('Compile Error: Cannot find component ' + tag);\n            }\n        });\n        STATEMENTS.add(Ops$1.Partial, function (sexp, builder) {\n            var name = sexp[1],\n                evalInfo = sexp[2];\n            var referrer = builder.referrer;\n\n            builder.startLabels();\n            builder.pushFrame();\n            builder.returnTo('END');\n            builder.expr(name);\n            builder.dup();\n            builder.enter(2);\n            builder.jumpUnless('ELSE');\n            builder.invokePartial(referrer, builder.evalSymbols(), evalInfo);\n            builder.popScope();\n            builder.popFrame();\n            builder.label('ELSE');\n            builder.exit();\n            builder.return();\n            builder.label('END');\n            builder.popFrame();\n            builder.stopLabels();\n        });\n        STATEMENTS.add(Ops$1.Yield, function (sexp, builder) {\n            var to = sexp[1],\n                params = sexp[2];\n\n            builder.yield(to, params);\n        });\n        STATEMENTS.add(Ops$1.AttrSplat, function (sexp, builder) {\n            var to = sexp[1];\n\n            builder.yield(to, []);\n            builder.didCreateElement(_vm.Register.s0);\n            builder.setComponentAttrs(false);\n        });\n        STATEMENTS.add(Ops$1.Debugger, function (sexp, builder) {\n            var evalInfo = sexp[1];\n\n            builder.debugger(builder.evalSymbols(), evalInfo);\n        });\n        STATEMENTS.add(Ops$1.ClientSideStatement, function (sexp, builder) {\n            CLIENT_SIDE.compile(sexp, builder);\n        });\n        STATEMENTS.add(Ops$1.Append, function (sexp, builder) {\n            var value = sexp[1],\n                trusting = sexp[2];\n            var inlines = builder.macros.inlines;\n\n            var returned = inlines.compile(sexp, builder) || value;\n            if (returned === true) return;\n            var isGet$$1 = (0, _wireFormat.isGet)(value);\n            var isMaybeLocal$$1 = (0, _wireFormat.isMaybeLocal)(value);\n            if (trusting) {\n                builder.guardedAppend(value, true);\n            } else {\n                if (isGet$$1 || isMaybeLocal$$1) {\n                    builder.guardedAppend(value, false);\n                } else {\n                    builder.expr(value);\n                    builder.primitive(false);\n                    builder.load(_vm.Register.t0);\n                    builder.dynamicContent();\n                }\n            }\n        });\n        STATEMENTS.add(Ops$1.Block, function (sexp, builder) {\n            var name = sexp[1],\n                params = sexp[2],\n                hash = sexp[3],\n                _template = sexp[4],\n                _inverse = sexp[5];\n\n            var template = builder.template(_template);\n            var inverse = builder.template(_inverse);\n            var templateBlock = template && template;\n            var inverseBlock = inverse && inverse;\n            var blocks = builder.macros.blocks;\n\n            blocks.compile(name, params, hash, templateBlock, inverseBlock, builder);\n        });\n        var CLIENT_SIDE = new Compilers(1);\n        CLIENT_SIDE.add(Ops$2.OpenComponentElement, function (sexp, builder) {\n            builder.putComponentOperations();\n            builder.openPrimitiveElement(sexp[2]);\n        });\n        CLIENT_SIDE.add(Ops$2.DidCreateElement, function (_sexp, builder) {\n            builder.didCreateElement(_vm.Register.s0);\n        });\n        CLIENT_SIDE.add(Ops$2.SetComponentAttrs, function (sexp, builder) {\n            builder.setComponentAttrs(sexp[2]);\n        });\n        CLIENT_SIDE.add(Ops$2.Debugger, function () {\n            // tslint:disable-next-line:no-debugger\n            debugger;\n        });\n        CLIENT_SIDE.add(Ops$2.DidRenderLayout, function (_sexp, builder) {\n            builder.didRenderLayout(_vm.Register.s0);\n        });\n        return STATEMENTS;\n    }\n    function dynamicAttr(sexp, trusting, builder) {\n        var name = sexp[1],\n            value = sexp[2],\n            namespace = sexp[3];\n\n        builder.expr(value);\n        if (namespace) {\n            builder.dynamicAttr(name, namespace, trusting);\n        } else {\n            builder.dynamicAttr(name, null, trusting);\n        }\n    }\n    var _expressionCompiler = void 0;\n    function expressionCompiler() {\n        if (_expressionCompiler) {\n            return _expressionCompiler;\n        }\n        var EXPRESSIONS = _expressionCompiler = new Compilers();\n        EXPRESSIONS.add(Ops$1.Unknown, function (sexp, builder) {\n            var resolver = builder.resolver,\n                asPartial = builder.asPartial,\n                referrer = builder.referrer;\n\n            var name = sexp[1];\n            var handle = resolver.lookupHelper(name, referrer);\n            if (handle !== null) {\n                builder.helper(handle, null, null);\n            } else if (asPartial) {\n                builder.resolveMaybeLocal(name);\n            } else {\n                builder.getVariable(0);\n                builder.getProperty(name);\n            }\n        });\n        EXPRESSIONS.add(Ops$1.Concat, function (sexp, builder) {\n            var parts = sexp[1];\n            for (var i = 0; i < parts.length; i++) {\n                builder.expr(parts[i]);\n            }\n            builder.concat(parts.length);\n        });\n        EXPRESSIONS.add(Ops$1.Helper, function (sexp, builder) {\n            var resolver = builder.resolver,\n                referrer = builder.referrer;\n            var name = sexp[1],\n                params = sexp[2],\n                hash = sexp[3];\n\n            // TODO: triage this in the WF compiler\n            if (name === 'component') {\n                var definition = params[0],\n                    restArgs = params.slice(1);\n\n                builder.curryComponent(definition, restArgs, hash, true);\n                return;\n            }\n            var handle = resolver.lookupHelper(name, referrer);\n            if (handle !== null) {\n                builder.helper(handle, params, hash);\n            } else {\n                throw new Error('Compile Error: ' + name + ' is not a helper');\n            }\n        });\n        EXPRESSIONS.add(Ops$1.Get, function (sexp, builder) {\n            var head = sexp[1],\n                path = sexp[2];\n\n            builder.getVariable(head);\n            for (var i = 0; i < path.length; i++) {\n                builder.getProperty(path[i]);\n            }\n        });\n        EXPRESSIONS.add(Ops$1.MaybeLocal, function (sexp, builder) {\n            var path = sexp[1];\n\n            if (builder.asPartial) {\n                var head = path[0];\n                path = path.slice(1);\n                builder.resolveMaybeLocal(head);\n            } else {\n                builder.getVariable(0);\n            }\n            for (var i = 0; i < path.length; i++) {\n                builder.getProperty(path[i]);\n            }\n        });\n        EXPRESSIONS.add(Ops$1.Undefined, function (_sexp, builder) {\n            return builder.pushPrimitiveReference(undefined);\n        });\n        EXPRESSIONS.add(Ops$1.HasBlock, function (sexp, builder) {\n            builder.hasBlock(sexp[1]);\n        });\n        EXPRESSIONS.add(Ops$1.HasBlockParams, function (sexp, builder) {\n            builder.hasBlockParams(sexp[1]);\n        });\n        return EXPRESSIONS;\n    }\n\n    var Macros = function Macros() {\n        (0, _emberBabel.classCallCheck)(this, Macros);\n\n        var _populateBuiltins = populateBuiltins(),\n            blocks = _populateBuiltins.blocks,\n            inlines = _populateBuiltins.inlines;\n\n        this.blocks = blocks;\n        this.inlines = inlines;\n    };\n\n    var Blocks = function () {\n        function Blocks() {\n            (0, _emberBabel.classCallCheck)(this, Blocks);\n\n            this.names = (0, _util.dict)();\n            this.funcs = [];\n        }\n\n        Blocks.prototype.add = function add(name, func) {\n            this.funcs.push(func);\n            this.names[name] = this.funcs.length - 1;\n        };\n\n        Blocks.prototype.addMissing = function addMissing(func) {\n            this.missing = func;\n        };\n\n        Blocks.prototype.compile = function compile(name, params, hash, template, inverse, builder) {\n            var index = this.names[name];\n            if (index === undefined) {\n                var func = this.missing;\n                var handled = func(name, params, hash, template, inverse, builder);\n            } else {\n                var _func = this.funcs[index];\n                _func(params, hash, template, inverse, builder);\n            }\n        };\n\n        return Blocks;\n    }();\n\n    var Inlines = function () {\n        function Inlines() {\n            (0, _emberBabel.classCallCheck)(this, Inlines);\n\n            this.names = (0, _util.dict)();\n            this.funcs = [];\n        }\n\n        Inlines.prototype.add = function add(name, func) {\n            this.funcs.push(func);\n            this.names[name] = this.funcs.length - 1;\n        };\n\n        Inlines.prototype.addMissing = function addMissing(func) {\n            this.missing = func;\n        };\n\n        Inlines.prototype.compile = function compile(sexp, builder) {\n            var value = sexp[1];\n            // TODO: Fix this so that expression macros can return\n            // things like components, so that {{component foo}}\n            // is the same as {{(component foo)}}\n            if (!Array.isArray(value)) return ['expr', value];\n            var name = void 0;\n            var params = void 0;\n            var hash = void 0;\n            if (value[0] === Ops$1.Helper) {\n                name = value[1];\n                params = value[2];\n                hash = value[3];\n            } else if (value[0] === Ops$1.Unknown) {\n                name = value[1];\n                params = hash = null;\n            } else {\n                return ['expr', value];\n            }\n            var index = this.names[name];\n            if (index === undefined && this.missing) {\n                var func = this.missing;\n                var returned = func(name, params, hash, builder);\n                return returned === false ? ['expr', value] : returned;\n            } else if (index !== undefined) {\n                var _func2 = this.funcs[index];\n                var _returned = _func2(name, params, hash, builder);\n                return _returned === false ? ['expr', value] : _returned;\n            } else {\n                return ['expr', value];\n            }\n        };\n\n        return Inlines;\n    }();\n\n    function populateBuiltins() {\n        var blocks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Blocks();\n        var inlines = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Inlines();\n\n        blocks.add('if', function (params, _hash, template, inverse, builder) {\n            //        PutArgs\n            //        Test(Environment)\n            //        Enter(BEGIN, END)\n            // BEGIN: Noop\n            //        JumpUnless(ELSE)\n            //        Evaluate(default)\n            //        Jump(END)\n            // ELSE:  Noop\n            //        Evalulate(inverse)\n            // END:   Noop\n            //        Exit\n            if (!params || params.length !== 1) {\n                throw new Error('SYNTAX ERROR: #if requires a single argument');\n            }\n            builder.startLabels();\n            builder.pushFrame();\n            builder.returnTo('END');\n            builder.expr(params[0]);\n            builder.toBoolean();\n            builder.enter(1);\n            builder.jumpUnless('ELSE');\n            builder.invokeStaticBlock(template);\n            if (inverse) {\n                builder.jump('EXIT');\n                builder.label('ELSE');\n                builder.invokeStaticBlock(inverse);\n                builder.label('EXIT');\n                builder.exit();\n                builder.return();\n            } else {\n                builder.label('ELSE');\n                builder.exit();\n                builder.return();\n            }\n            builder.label('END');\n            builder.popFrame();\n            builder.stopLabels();\n        });\n        blocks.add('unless', function (params, _hash, template, inverse, builder) {\n            //        PutArgs\n            //        Test(Environment)\n            //        Enter(BEGIN, END)\n            // BEGIN: Noop\n            //        JumpUnless(ELSE)\n            //        Evaluate(default)\n            //        Jump(END)\n            // ELSE:  Noop\n            //        Evalulate(inverse)\n            // END:   Noop\n            //        Exit\n            if (!params || params.length !== 1) {\n                throw new Error('SYNTAX ERROR: #unless requires a single argument');\n            }\n            builder.startLabels();\n            builder.pushFrame();\n            builder.returnTo('END');\n            builder.expr(params[0]);\n            builder.toBoolean();\n            builder.enter(1);\n            builder.jumpIf('ELSE');\n            builder.invokeStaticBlock(template);\n            if (inverse) {\n                builder.jump('EXIT');\n                builder.label('ELSE');\n                builder.invokeStaticBlock(inverse);\n                builder.label('EXIT');\n                builder.exit();\n                builder.return();\n            } else {\n                builder.label('ELSE');\n                builder.exit();\n                builder.return();\n            }\n            builder.label('END');\n            builder.popFrame();\n            builder.stopLabels();\n        });\n        blocks.add('with', function (params, _hash, template, inverse, builder) {\n            //        PutArgs\n            //        Test(Environment)\n            //        Enter(BEGIN, END)\n            // BEGIN: Noop\n            //        JumpUnless(ELSE)\n            //        Evaluate(default)\n            //        Jump(END)\n            // ELSE:  Noop\n            //        Evalulate(inverse)\n            // END:   Noop\n            //        Exit\n            if (!params || params.length !== 1) {\n                throw new Error('SYNTAX ERROR: #with requires a single argument');\n            }\n            builder.startLabels();\n            builder.pushFrame();\n            builder.returnTo('END');\n            builder.expr(params[0]);\n            builder.dup();\n            builder.toBoolean();\n            builder.enter(2);\n            builder.jumpUnless('ELSE');\n            builder.invokeStaticBlock(template, 1);\n            if (inverse) {\n                builder.jump('EXIT');\n                builder.label('ELSE');\n                builder.invokeStaticBlock(inverse);\n                builder.label('EXIT');\n                builder.exit();\n                builder.return();\n            } else {\n                builder.label('ELSE');\n                builder.exit();\n                builder.return();\n            }\n            builder.label('END');\n            builder.popFrame();\n            builder.stopLabels();\n        });\n        blocks.add('each', function (params, hash, template, inverse, builder) {\n            //         Enter(BEGIN, END)\n            // BEGIN:  Noop\n            //         PutArgs\n            //         PutIterable\n            //         JumpUnless(ELSE)\n            //         EnterList(BEGIN2, END2)\n            // ITER:   Noop\n            //         NextIter(BREAK)\n            // BEGIN2: Noop\n            //         PushChildScope\n            //         Evaluate(default)\n            //         PopScope\n            // END2:   Noop\n            //         Exit\n            //         Jump(ITER)\n            // BREAK:  Noop\n            //         ExitList\n            //         Jump(END)\n            // ELSE:   Noop\n            //         Evalulate(inverse)\n            // END:    Noop\n            //         Exit\n            builder.startLabels();\n            builder.pushFrame();\n            builder.returnTo('END');\n            if (hash && hash[0][0] === 'key') {\n                builder.expr(hash[1][0]);\n            } else {\n                builder.pushPrimitiveReference(null);\n            }\n            builder.expr(params[0]);\n            builder.enter(2);\n            builder.putIterator();\n            builder.jumpUnless('ELSE');\n            builder.pushFrame();\n            builder.returnTo('ITER');\n            builder.dup(_vm.Register.fp, 1);\n            builder.enterList('BODY');\n            builder.label('ITER');\n            builder.iterate('BREAK');\n            builder.label('BODY');\n            builder.invokeStaticBlock(template, 2);\n            builder.pop(2);\n            builder.exit();\n            builder.return();\n            builder.label('BREAK');\n            builder.exitList();\n            builder.popFrame();\n            if (inverse) {\n                builder.jump('EXIT');\n                builder.label('ELSE');\n                builder.invokeStaticBlock(inverse);\n                builder.label('EXIT');\n                builder.exit();\n                builder.return();\n            } else {\n                builder.label('ELSE');\n                builder.exit();\n                builder.return();\n            }\n            builder.label('END');\n            builder.popFrame();\n            builder.stopLabels();\n        });\n        blocks.add('in-element', function (params, hash, template, _inverse, builder) {\n            if (!params || params.length !== 1) {\n                throw new Error('SYNTAX ERROR: #in-element requires a single argument');\n            }\n            builder.startLabels();\n            builder.pushFrame();\n            builder.returnTo('END');\n            var keys = hash[0],\n                values = hash[1];\n\n            for (var i = 0; i < keys.length; i++) {\n                var key = keys[i];\n                if (key === 'nextSibling' || key === 'guid') {\n                    builder.expr(values[i]);\n                } else {\n                    throw new Error('SYNTAX ERROR: #in-element does not take a `' + keys[0] + '` option');\n                }\n            }\n            builder.expr(params[0]);\n            builder.dup();\n            builder.enter(4);\n            builder.jumpUnless('ELSE');\n            builder.pushRemoteElement();\n            builder.invokeStaticBlock(template);\n            builder.popRemoteElement();\n            builder.label('ELSE');\n            builder.exit();\n            builder.return();\n            builder.label('END');\n            builder.popFrame();\n            builder.stopLabels();\n        });\n        blocks.add('-with-dynamic-vars', function (_params, hash, template, _inverse, builder) {\n            if (hash) {\n                var names = hash[0],\n                    expressions = hash[1];\n\n                builder.compileParams(expressions);\n                builder.pushDynamicScope();\n                builder.bindDynamicScope(names);\n                builder.invokeStaticBlock(template);\n                builder.popDynamicScope();\n            } else {\n                builder.invokeStaticBlock(template);\n            }\n        });\n        blocks.add('component', function (_params, hash, template, inverse, builder) {\n            var tag = _params[0];\n            if (typeof tag === 'string') {\n                var returned = builder.staticComponentHelper(_params[0], hash, template);\n                if (returned) return;\n            }\n\n            var definition = _params[0],\n                params = _params.slice(1);\n\n            builder.dynamicComponent(definition, params, hash, true, template, inverse);\n        });\n        inlines.add('component', function (_name, _params, hash, builder) {\n            var tag = _params && _params[0];\n            if (typeof tag === 'string') {\n                var returned = builder.staticComponentHelper(tag, hash, null);\n                if (returned) return true;\n            }\n\n            var definition = _params[0],\n                params = _params.slice(1);\n\n            builder.dynamicComponent(definition, params, hash, true, null, null);\n            return true;\n        });\n        return { blocks: blocks, inlines: inlines };\n    }\n\n    function debugSlice(program, start, end) {}\n    function logOpcode(type, params) {\n        var out = type;\n        if (params) {\n            var args = Object.keys(params).map(function (p) {\n                return ' ' + p + '=' + json(params[p]);\n            }).join('');\n            out += args;\n        }\n        return '(' + out + ')';\n    }\n    function json(param) {}\n    function debug(c, op) {\n        for (var _len = arguments.length, operands = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n            operands[_key - 2] = arguments[_key];\n        }\n\n        var metadata = null;\n        if (!metadata) {\n            throw (0, _util.unreachable)('Missing Opcode Metadata for ' + op);\n        }\n        var out = (0, _util.dict)();\n        metadata.ops.forEach(function (operand, index) {\n            var op = operands[index];\n            switch (operand.type) {\n                case 'i32':\n                case 'symbol':\n                case 'block':\n                    out[operand.name] = op;\n                    break;\n                case 'handle':\n                    out[operand.name] = c.resolveHandle(op);\n                    break;\n                case 'str':\n                    out[operand.name] = c.getString(op);\n                    break;\n                case 'option-str':\n                    out[operand.name] = op ? c.getString(op) : null;\n                    break;\n                case 'str-array':\n                    out[operand.name] = c.getStringArray(op);\n                    break;\n                case 'array':\n                    out[operand.name] = c.getArray(op);\n                    break;\n                case 'bool':\n                    out[operand.name] = !!op;\n                    break;\n                case 'primitive':\n                    out[operand.name] = decodePrimitive(op, c);\n                    break;\n                case 'register':\n                    out[operand.name] = _vm.Register[op];\n                    break;\n                case 'serializable':\n                    out[operand.name] = c.getSerializable(op);\n                    break;\n                case 'lazy-constant':\n                    out[operand.name] = c.getOther(op);\n                    break;\n            }\n        });\n        return [metadata.name, out];\n    }\n    function decodePrimitive(primitive, constants) {\n        var flag = primitive & 7; // 111\n        var value = primitive >> 3;\n        switch (flag) {\n            case 0 /* NUMBER */:\n                return value;\n            case 1 /* FLOAT */:\n                return constants.getNumber(value);\n            case 2 /* STRING */:\n                return constants.getString(value);\n            case 3 /* BOOLEAN_OR_VOID */:\n                switch (value) {\n                    case 0:\n                        return false;\n                    case 1:\n                        return true;\n                    case 2:\n                        return null;\n                    case 3:\n                        return undefined;\n                }\n            case 4 /* NEGATIVE */:\n                return constants.getNumber(value);\n            default:\n                throw (0, _util.unreachable)();\n        }\n    }\n\n    var PLACEHOLDER_HANDLE$1 = -1;\n\n    var CompilableTemplateImpl = function () {\n        function CompilableTemplateImpl(statements, containingLayout, options, symbolTable) {\n            (0, _emberBabel.classCallCheck)(this, CompilableTemplateImpl);\n\n            this.statements = statements;\n            this.containingLayout = containingLayout;\n            this.options = options;\n            this.symbolTable = symbolTable;\n            this.compiled = null;\n            this.statementCompiler = statementCompiler();\n        }\n\n        CompilableTemplateImpl.topLevel = function topLevel(block, options) {\n            return new CompilableTemplateImpl(block.statements, { block: block, referrer: options.referrer }, options, { hasEval: block.hasEval, symbols: block.symbols });\n        };\n\n        CompilableTemplateImpl.prototype.compile = function compile(stdLib) {\n            var compiled = this.compiled;\n\n            if (compiled !== null) return compiled;\n            // Track that compilation has started but not yet finished by temporarily\n            // using a placeholder handle. In eager compilation mode, where compile()\n            // may be called recursively, we use this as a signal that the handle cannot\n            // be known synchronously and must be linked lazily.\n            this.compiled = PLACEHOLDER_HANDLE$1;\n            var options = this.options,\n                statements = this.statements,\n                containingLayout = this.containingLayout;\n            var referrer = containingLayout.referrer;\n            var program = options.program,\n                resolver = options.resolver,\n                macros = options.macros,\n                asPartial = options.asPartial,\n                Builder = options.Builder;\n\n            var builder = new Builder(program, resolver, referrer, macros, containingLayout, asPartial, stdLib);\n            for (var i = 0; i < statements.length; i++) {\n                this.statementCompiler.compile(statements[i], builder);\n            }\n            var handle = builder.commit(program.heap, containingLayout.block.symbols.length);\n            return this.compiled = handle;\n        };\n\n        return CompilableTemplateImpl;\n    }();\n\n    var WrappedBuilder = function () {\n        function WrappedBuilder(options, layout) {\n            (0, _emberBabel.classCallCheck)(this, WrappedBuilder);\n\n            this.options = options;\n            this.layout = layout;\n            this.compiled = null;\n            var block = layout.block;\n\n            this.symbolTable = {\n                hasEval: block.hasEval,\n                symbols: block.symbols.concat([ATTRS_BLOCK])\n            };\n        }\n\n        WrappedBuilder.prototype.compile = function compile() {\n            if (this.compiled !== null) return this.compiled;\n            //========DYNAMIC\n            //        PutValue(TagExpr)\n            //        Test\n            //        JumpUnless(BODY)\n            //        OpenDynamicPrimitiveElement\n            //        DidCreateElement\n            //        ...attr statements...\n            //        FlushElement\n            // BODY:  Noop\n            //        ...body statements...\n            //        PutValue(TagExpr)\n            //        Test\n            //        JumpUnless(END)\n            //        CloseElement\n            // END:   Noop\n            //        DidRenderLayout\n            //        Exit\n            //\n            //========STATIC\n            //        OpenPrimitiveElementOpcode\n            //        DidCreateElement\n            //        ...attr statements...\n            //        FlushElement\n            //        ...body statements...\n            //        CloseElement\n            //        DidRenderLayout\n            //        Exit\n            var options = this.options,\n                layout = this.layout,\n                referrer = this.referrer;\n            var program = options.program,\n                resolver = options.resolver,\n                macros = options.macros,\n                asPartial = options.asPartial;\n            var Builder = options.Builder;\n\n            var b = new Builder(program, resolver, referrer, macros, layout, asPartial);\n            b.startLabels();\n            b.fetch(_vm.Register.s1);\n            b.getComponentTagName(_vm.Register.s0);\n            b.primitiveReference();\n            b.dup();\n            b.load(_vm.Register.s1);\n            b.jumpUnless('BODY');\n            b.fetch(_vm.Register.s1);\n            b.putComponentOperations();\n            b.openDynamicElement();\n            b.didCreateElement(_vm.Register.s0);\n            b.flushElement();\n            b.label('BODY');\n            b.invokeStaticBlock(blockFor(layout, this.options));\n            b.fetch(_vm.Register.s1);\n            b.jumpUnless('END');\n            b.closeElement();\n            b.label('END');\n            b.load(_vm.Register.s1);\n            b.stopLabels();\n            var handle = b.commit(options.program.heap, layout.block.symbols.length);\n            return this.compiled = handle;\n        };\n\n        return WrappedBuilder;\n    }();\n\n    function blockFor(layout, options) {\n        var block = layout.block,\n            referrer = layout.referrer;\n\n        return new CompilableTemplateImpl(block.statements, layout, options, { referrer: referrer, parameters: _util.EMPTY_ARRAY });\n    }\n\n    var ComponentBuilder = function () {\n        function ComponentBuilder(builder) {\n            (0, _emberBabel.classCallCheck)(this, ComponentBuilder);\n\n            this.builder = builder;\n        }\n\n        ComponentBuilder.prototype.static = function _static(handle, args) {\n            var params = args[0],\n                hash = args[1],\n                _default = args[2],\n                inverse = args[3];\n            var builder = this.builder;\n            var resolver = builder.resolver;\n\n            if (handle !== null) {\n                var capabilities = resolver.getCapabilities(handle);\n                if (capabilities.dynamicLayout === false) {\n                    var layout = resolver.getLayout(handle);\n                    builder.pushComponentDefinition(handle);\n                    builder.invokeStaticComponent(capabilities, layout, null, params, hash, false, _default, inverse);\n                } else {\n                    builder.pushComponentDefinition(handle);\n                    builder.invokeComponent(null, params, hash, false, _default, inverse);\n                }\n            }\n        };\n\n        return ComponentBuilder;\n    }();\n\n    var Labels = function () {\n        function Labels() {\n            (0, _emberBabel.classCallCheck)(this, Labels);\n\n            this.labels = (0, _util.dict)();\n            this.targets = [];\n        }\n\n        Labels.prototype.label = function label(name, index) {\n            this.labels[name] = index;\n        };\n\n        Labels.prototype.target = function target(at, _target) {\n            this.targets.push({ at: at, target: _target });\n        };\n\n        Labels.prototype.patch = function patch(encoder$$1) {\n            var targets = this.targets,\n                labels = this.labels;\n\n            for (var i = 0; i < targets.length; i++) {\n                var _targets$i = targets[i],\n                    at = _targets$i.at,\n                    target = _targets$i.target;\n\n                var address = labels[target] - at;\n                encoder$$1.patch(at, address);\n            }\n        };\n\n        return Labels;\n    }();\n\n    var SimpleOpcodeBuilder = function () {\n        function SimpleOpcodeBuilder() {\n            (0, _emberBabel.classCallCheck)(this, SimpleOpcodeBuilder);\n\n            this.encoder = new _encoder.InstructionEncoder([]);\n        }\n\n        SimpleOpcodeBuilder.prototype.push = function push(name) {\n            switch (arguments.length) {\n                case 1:\n                    return this.encoder.encode(name, 0);\n                case 2:\n                    return this.encoder.encode(name, 0, arguments[1]);\n                case 3:\n                    return this.encoder.encode(name, 0, arguments[1], arguments[2]);\n                default:\n                    return this.encoder.encode(name, 0, arguments[1], arguments[2], arguments[3]);\n            }\n        };\n\n        SimpleOpcodeBuilder.prototype.pushMachine = function pushMachine(name) {\n            switch (arguments.length) {\n                case 1:\n                    return this.encoder.encode(name, 1024 /* MACHINE_MASK */);\n                case 2:\n                    return this.encoder.encode(name, 1024 /* MACHINE_MASK */, arguments[1]);\n                case 3:\n                    return this.encoder.encode(name, 1024 /* MACHINE_MASK */, arguments[1], arguments[2]);\n                default:\n                    return this.encoder.encode(name, 1024 /* MACHINE_MASK */, arguments[1], arguments[2], arguments[3]);\n            }\n        };\n\n        SimpleOpcodeBuilder.prototype.commit = function commit(heap, scopeSize) {\n            this.pushMachine(20 /* Return */);\n            var buffer = this.encoder.buffer;\n\n            // TODO: change the whole malloc API and do something more efficient\n            var handle = heap.malloc();\n            for (var i = 0; i < buffer.length; i++) {\n                var value = buffer[i];\n                typeof value === 'function' ? heap.pushPlaceholder(value) : heap.push(value);\n            }\n            heap.finishMalloc(handle, scopeSize);\n            return handle;\n        };\n\n        SimpleOpcodeBuilder.prototype.reserve = function reserve(name) {\n            this.encoder.encode(name, 0, -1);\n        };\n\n        SimpleOpcodeBuilder.prototype.reserveMachine = function reserveMachine(name) {\n            this.encoder.encode(name, 1024 /* MACHINE_MASK */, -1);\n        };\n\n        SimpleOpcodeBuilder.prototype.main = function main() {\n            this.push(56 /* Main */, _vm.Register.s0);\n            this.invokePreparedComponent(false);\n        };\n\n        SimpleOpcodeBuilder.prototype.dynamicContent = function dynamicContent() {\n            this.push(24 /* DynamicContent */);\n        };\n\n        SimpleOpcodeBuilder.prototype.beginComponentTransaction = function beginComponentTransaction() {\n            this.push(75 /* BeginComponentTransaction */);\n        };\n\n        SimpleOpcodeBuilder.prototype.commitComponentTransaction = function commitComponentTransaction() {\n            this.push(76 /* CommitComponentTransaction */);\n        };\n\n        SimpleOpcodeBuilder.prototype.pushDynamicScope = function pushDynamicScope() {\n            this.push(36 /* PushDynamicScope */);\n        };\n\n        SimpleOpcodeBuilder.prototype.popDynamicScope = function popDynamicScope() {\n            this.push(37 /* PopDynamicScope */);\n        };\n\n        SimpleOpcodeBuilder.prototype.pushRemoteElement = function pushRemoteElement() {\n            this.push(33 /* PushRemoteElement */);\n        };\n\n        SimpleOpcodeBuilder.prototype.popRemoteElement = function popRemoteElement() {\n            this.push(34 /* PopRemoteElement */);\n        };\n\n        SimpleOpcodeBuilder.prototype.pushRootScope = function pushRootScope(symbols, bindCallerScope) {\n            this.push(17 /* RootScope */, symbols, bindCallerScope ? 1 : 0);\n        };\n\n        SimpleOpcodeBuilder.prototype.pushChildScope = function pushChildScope() {\n            this.push(18 /* ChildScope */);\n        };\n\n        SimpleOpcodeBuilder.prototype.popScope = function popScope() {\n            this.push(19 /* PopScope */);\n        };\n\n        SimpleOpcodeBuilder.prototype.prepareArgs = function prepareArgs(state) {\n            this.push(65 /* PrepareArgs */, state);\n        };\n\n        SimpleOpcodeBuilder.prototype.createComponent = function createComponent(state, hasDefault) {\n            var flag = hasDefault | 0;\n            this.push(67 /* CreateComponent */, flag, state);\n        };\n\n        SimpleOpcodeBuilder.prototype.registerComponentDestructor = function registerComponentDestructor(state) {\n            this.push(68 /* RegisterComponentDestructor */, state);\n        };\n\n        SimpleOpcodeBuilder.prototype.putComponentOperations = function putComponentOperations() {\n            this.push(69 /* PutComponentOperations */);\n        };\n\n        SimpleOpcodeBuilder.prototype.getComponentSelf = function getComponentSelf(state) {\n            this.push(70 /* GetComponentSelf */, state);\n        };\n\n        SimpleOpcodeBuilder.prototype.getComponentTagName = function getComponentTagName(state) {\n            this.push(71 /* GetComponentTagName */, state);\n        };\n\n        SimpleOpcodeBuilder.prototype.getComponentLayout = function getComponentLayout(state) {\n            this.push(72 /* GetComponentLayout */, state);\n        };\n\n        SimpleOpcodeBuilder.prototype.invokeComponentLayout = function invokeComponentLayout(state) {\n            this.push(74 /* InvokeComponentLayout */, state);\n        };\n\n        SimpleOpcodeBuilder.prototype.didCreateElement = function didCreateElement(state) {\n            this.push(77 /* DidCreateElement */, state);\n        };\n\n        SimpleOpcodeBuilder.prototype.didRenderLayout = function didRenderLayout(state) {\n            this.push(78 /* DidRenderLayout */, state);\n        };\n\n        SimpleOpcodeBuilder.prototype.pushFrame = function pushFrame() {\n            this.pushMachine(47 /* PushFrame */);\n        };\n\n        SimpleOpcodeBuilder.prototype.popFrame = function popFrame() {\n            this.pushMachine(48 /* PopFrame */);\n        };\n\n        SimpleOpcodeBuilder.prototype.invokeVirtual = function invokeVirtual() {\n            this.pushMachine(41 /* InvokeVirtual */);\n        };\n\n        SimpleOpcodeBuilder.prototype.invokeYield = function invokeYield() {\n            this.push(43 /* InvokeYield */);\n        };\n\n        SimpleOpcodeBuilder.prototype.toBoolean = function toBoolean() {\n            this.push(51 /* ToBoolean */);\n        };\n\n        SimpleOpcodeBuilder.prototype.invokePreparedComponent = function invokePreparedComponent(hasBlock) {\n            var populateLayout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n            this.beginComponentTransaction();\n            this.pushDynamicScope();\n            this.createComponent(_vm.Register.s0, hasBlock);\n            // this has to run after createComponent to allow\n            // for late-bound layouts, but a caller is free\n            // to populate the layout earlier if it wants to\n            // and do nothing here.\n            if (populateLayout) populateLayout();\n            this.registerComponentDestructor(_vm.Register.s0);\n            this.getComponentSelf(_vm.Register.s0);\n            this.invokeComponentLayout(_vm.Register.s0);\n            this.didRenderLayout(_vm.Register.s0);\n            this.popFrame();\n            this.popScope();\n            this.popDynamicScope();\n            this.commitComponentTransaction();\n        };\n\n        (0, _emberBabel.createClass)(SimpleOpcodeBuilder, [{\n            key: 'pos',\n            get: function () {\n                return this.encoder.typePos;\n            }\n        }, {\n            key: 'nextPos',\n            get: function () {\n                return this.encoder.size;\n            }\n        }]);\n        return SimpleOpcodeBuilder;\n    }();\n\n    var OpcodeBuilder = function (_SimpleOpcodeBuilder) {\n        (0, _emberBabel.inherits)(OpcodeBuilder, _SimpleOpcodeBuilder);\n\n        function OpcodeBuilder(program, resolver, referrer, macros, containingLayout, asPartial, stdLib) {\n            (0, _emberBabel.classCallCheck)(this, OpcodeBuilder);\n\n            var _this = (0, _emberBabel.possibleConstructorReturn)(this, _SimpleOpcodeBuilder.call(this));\n\n            _this.program = program;\n            _this.resolver = resolver;\n            _this.referrer = referrer;\n            _this.macros = macros;\n            _this.containingLayout = containingLayout;\n            _this.asPartial = asPartial;\n            _this.stdLib = stdLib;\n            _this.component = new ComponentBuilder(_this);\n            _this.expressionCompiler = expressionCompiler();\n            _this.labelsStack = new _util.Stack();\n            _this.isComponentAttrs = false;\n            _this.constants = program.constants;\n            return _this;\n        }\n\n        OpcodeBuilder.prototype.label = function label(name) {\n            this.labels.label(name, this.nextPos);\n        };\n\n        OpcodeBuilder.prototype.setComponentAttrs = function setComponentAttrs(enabled) {\n            this.isComponentAttrs = enabled;\n        };\n\n        OpcodeBuilder.prototype.expr = function expr(expression) {\n            if (Array.isArray(expression)) {\n                this.expressionCompiler.compile(expression, this);\n            } else {\n                this.pushPrimitiveReference(expression);\n            }\n        };\n\n        OpcodeBuilder.prototype.pushArgs = function pushArgs(names, flags) {\n            var serialized = this.constants.stringArray(names);\n            this.push(63 /* PushArgs */, serialized, flags);\n        };\n\n        OpcodeBuilder.prototype.startLabels = function startLabels() {\n            this.labelsStack.push(new Labels());\n        };\n\n        OpcodeBuilder.prototype.stopLabels = function stopLabels() {\n            var label = this.labelsStack.pop();\n            label.patch(this.encoder);\n        };\n\n        OpcodeBuilder.prototype.pushComponentDefinition = function pushComponentDefinition(handle) {\n            this.push(59 /* PushComponentDefinition */, this.constants.handle(handle));\n        };\n\n        OpcodeBuilder.prototype.pushCurriedComponent = function pushCurriedComponent() {\n            this.push(61 /* PushCurriedComponent */);\n        };\n\n        OpcodeBuilder.prototype.pushDynamicComponentInstance = function pushDynamicComponentInstance() {\n            this.push(60 /* PushDynamicComponentInstance */);\n        };\n\n        OpcodeBuilder.prototype.resolveDynamicComponent = function resolveDynamicComponent(referrer) {\n            this.push(62 /* ResolveDynamicComponent */, this.constants.serializable(referrer));\n        };\n\n        OpcodeBuilder.prototype.staticComponentHelper = function staticComponentHelper(tag, hash, template) {\n            var handle = this.resolver.lookupComponentDefinition(tag, this.referrer);\n            if (handle) {\n                var capabilities = this.resolver.getCapabilities(handle);\n                if (capabilities.dynamicLayout === false) {\n                    if (hash) {\n                        for (var i = 0; i < hash.length; i = i + 2) {\n                            hash[i][0] = '@' + hash[i][0];\n                        }\n                    }\n                    var layout = this.resolver.getLayout(handle);\n                    this.pushComponentDefinition(handle);\n                    this.invokeStaticComponent(capabilities, layout, null, null, hash, false, template && template);\n                    return true;\n                }\n            }\n            return false;\n        };\n\n        OpcodeBuilder.prototype.invokePartial = function invokePartial(referrer, symbols, evalInfo) {\n            var _meta = this.constants.serializable(referrer);\n            var _symbols = this.constants.stringArray(symbols);\n            var _evalInfo = this.constants.array(evalInfo);\n            this.push(79 /* InvokePartial */, _meta, _symbols, _evalInfo);\n        };\n\n        OpcodeBuilder.prototype.resolveMaybeLocal = function resolveMaybeLocal(name) {\n            this.push(80 /* ResolveMaybeLocal */, this.string(name));\n        };\n\n        OpcodeBuilder.prototype.debugger = function _debugger(symbols, evalInfo) {\n            this.push(81 /* Debugger */, this.constants.stringArray(symbols), this.constants.array(evalInfo));\n        };\n\n        OpcodeBuilder.prototype.text = function text(_text) {\n            this.push(22 /* Text */, this.constants.string(_text));\n        };\n\n        OpcodeBuilder.prototype.openPrimitiveElement = function openPrimitiveElement(tag) {\n            this.push(25 /* OpenElement */, this.constants.string(tag));\n        };\n\n        OpcodeBuilder.prototype.openDynamicElement = function openDynamicElement() {\n            this.push(26 /* OpenDynamicElement */);\n        };\n\n        OpcodeBuilder.prototype.flushElement = function flushElement() {\n            this.push(30 /* FlushElement */);\n        };\n\n        OpcodeBuilder.prototype.closeElement = function closeElement() {\n            this.push(31 /* CloseElement */);\n        };\n\n        OpcodeBuilder.prototype.staticAttr = function staticAttr(_name, _namespace, _value) {\n            var name = this.constants.string(_name);\n            var namespace = _namespace ? this.constants.string(_namespace) : 0;\n            if (this.isComponentAttrs) {\n                this.pushPrimitiveReference(_value);\n                this.push(29 /* ComponentAttr */, name, 1, namespace);\n            } else {\n                var value = this.constants.string(_value);\n                this.push(27 /* StaticAttr */, name, value, namespace);\n            }\n        };\n\n        OpcodeBuilder.prototype.dynamicAttr = function dynamicAttr(_name, _namespace, trusting) {\n            var name = this.constants.string(_name);\n            var namespace = _namespace ? this.constants.string(_namespace) : 0;\n            if (this.isComponentAttrs) {\n                this.push(29 /* ComponentAttr */, name, trusting === true ? 1 : 0, namespace);\n            } else {\n                this.push(28 /* DynamicAttr */, name, trusting === true ? 1 : 0, namespace);\n            }\n        };\n\n        OpcodeBuilder.prototype.comment = function comment(_comment) {\n            var comment = this.constants.string(_comment);\n            this.push(23 /* Comment */, comment);\n        };\n\n        OpcodeBuilder.prototype.modifier = function modifier(locator, params, hash) {\n            this.pushFrame();\n            this.compileArgs(params, hash, null, true);\n            this.push(32 /* Modifier */, this.constants.handle(locator));\n            this.popFrame();\n        };\n\n        OpcodeBuilder.prototype.putIterator = function putIterator() {\n            this.push(54 /* PutIterator */);\n        };\n\n        OpcodeBuilder.prototype.enterList = function enterList(start) {\n            this.reserve(52 /* EnterList */);\n            this.labels.target(this.pos, start);\n        };\n\n        OpcodeBuilder.prototype.exitList = function exitList() {\n            this.push(53 /* ExitList */);\n        };\n\n        OpcodeBuilder.prototype.iterate = function iterate(breaks) {\n            this.reserve(55 /* Iterate */);\n            this.labels.target(this.pos, breaks);\n        };\n\n        OpcodeBuilder.prototype.setVariable = function setVariable(symbol) {\n            this.push(2 /* SetVariable */, symbol);\n        };\n\n        OpcodeBuilder.prototype.setBlock = function setBlock(symbol) {\n            this.push(3 /* SetBlock */, symbol);\n        };\n\n        OpcodeBuilder.prototype.getVariable = function getVariable(symbol) {\n            this.push(4 /* GetVariable */, symbol);\n        };\n\n        OpcodeBuilder.prototype.getProperty = function getProperty(key) {\n            this.push(5 /* GetProperty */, this.string(key));\n        };\n\n        OpcodeBuilder.prototype.getBlock = function getBlock(symbol) {\n            this.push(6 /* GetBlock */, symbol);\n        };\n\n        OpcodeBuilder.prototype.hasBlock = function hasBlock(symbol) {\n            this.push(7 /* HasBlock */, symbol);\n        };\n\n        OpcodeBuilder.prototype.hasBlockParams = function hasBlockParams(to) {\n            this.getBlock(to);\n            this.resolveBlock();\n            this.push(8 /* HasBlockParams */);\n        };\n\n        OpcodeBuilder.prototype.concat = function concat(size) {\n            this.push(9 /* Concat */, size);\n        };\n\n        OpcodeBuilder.prototype.load = function load(register) {\n            this.push(15 /* Load */, register);\n        };\n\n        OpcodeBuilder.prototype.fetch = function fetch(register) {\n            this.push(16 /* Fetch */, register);\n        };\n\n        OpcodeBuilder.prototype.dup = function dup() {\n            var register = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _vm.Register.sp;\n            var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n            return this.push(13 /* Dup */, register, offset);\n        };\n\n        OpcodeBuilder.prototype.pop = function pop() {\n            var count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n\n            return this.push(14 /* Pop */, count);\n        };\n\n        OpcodeBuilder.prototype.returnTo = function returnTo(label) {\n            this.reserveMachine(21 /* ReturnTo */);\n            this.labels.target(this.pos, label);\n        };\n\n        OpcodeBuilder.prototype.primitive = function primitive(_primitive) {\n            var type = 0;\n            var primitive = void 0;\n            switch (typeof _primitive) {\n                case 'number':\n                    if (_primitive % 1 === 0) {\n                        if (_primitive > -1) {\n                            primitive = _primitive;\n                        } else {\n                            primitive = this.constants.number(_primitive);\n                            type = 4 /* NEGATIVE */;\n                        }\n                    } else {\n                        primitive = this.constants.number(_primitive);\n                        type = 1 /* FLOAT */;\n                    }\n                    break;\n                case 'string':\n                    primitive = this.string(_primitive);\n                    type = 2 /* STRING */;\n                    break;\n                case 'boolean':\n                    primitive = _primitive | 0;\n                    type = 3 /* BOOLEAN_OR_VOID */;\n                    break;\n                case 'object':\n                    // assume null\n                    primitive = 2;\n                    type = 3 /* BOOLEAN_OR_VOID */;\n                    break;\n                case 'undefined':\n                    primitive = 3;\n                    type = 3 /* BOOLEAN_OR_VOID */;\n                    break;\n                default:\n                    throw new Error('Invalid primitive passed to pushPrimitive');\n            }\n            var immediate = this.sizeImmediate(primitive << 3 | type, primitive);\n            this.push(11 /* Primitive */, immediate);\n        };\n\n        OpcodeBuilder.prototype.sizeImmediate = function sizeImmediate(shifted, primitive) {\n            if (shifted >= 65535 /* MAX_SIZE */ || shifted < 0) {\n                return this.constants.number(primitive) << 3 | 5 /* BIG_NUM */;\n            }\n            return shifted;\n        };\n\n        OpcodeBuilder.prototype.pushPrimitiveReference = function pushPrimitiveReference(primitive) {\n            this.primitive(primitive);\n            this.primitiveReference();\n        };\n\n        OpcodeBuilder.prototype.primitiveReference = function primitiveReference() {\n            this.push(12 /* PrimitiveReference */);\n        };\n\n        OpcodeBuilder.prototype.helper = function helper(_helper, params, hash) {\n            this.pushFrame();\n            this.compileArgs(params, hash, null, true);\n            this.push(1 /* Helper */, this.constants.handle(_helper));\n            this.popFrame();\n            this.fetch(_vm.Register.v0);\n        };\n\n        OpcodeBuilder.prototype.bindDynamicScope = function bindDynamicScope(_names) {\n            this.push(35 /* BindDynamicScope */, this.names(_names));\n        };\n\n        OpcodeBuilder.prototype.enter = function enter(args) {\n            this.push(49 /* Enter */, args);\n        };\n\n        OpcodeBuilder.prototype.exit = function exit() {\n            this.push(50 /* Exit */);\n        };\n\n        OpcodeBuilder.prototype.return = function _return() {\n            this.pushMachine(20 /* Return */);\n        };\n\n        OpcodeBuilder.prototype.jump = function jump(target) {\n            this.reserveMachine(44 /* Jump */);\n            this.labels.target(this.pos, target);\n        };\n\n        OpcodeBuilder.prototype.jumpIf = function jumpIf(target) {\n            this.reserve(45 /* JumpIf */);\n            this.labels.target(this.pos, target);\n        };\n\n        OpcodeBuilder.prototype.jumpUnless = function jumpUnless(target) {\n            this.reserve(46 /* JumpUnless */);\n            this.labels.target(this.pos, target);\n        };\n\n        OpcodeBuilder.prototype.string = function string(_string) {\n            return this.constants.string(_string);\n        };\n\n        OpcodeBuilder.prototype.names = function names(_names) {\n            var names = [];\n            for (var i = 0; i < _names.length; i++) {\n                var n = _names[i];\n                names[i] = this.constants.string(n);\n            }\n            return this.constants.array(names);\n        };\n\n        OpcodeBuilder.prototype.symbols = function symbols(_symbols2) {\n            return this.constants.array(_symbols2);\n        };\n\n        OpcodeBuilder.prototype.inlineBlock = function inlineBlock(block) {\n            var parameters = block.parameters,\n                statements = block.statements;\n\n            var symbolTable = { parameters: parameters, referrer: this.containingLayout.referrer };\n            var options = {\n                program: this.program,\n                macros: this.macros,\n                Builder: this.constructor,\n                resolver: this.resolver,\n                asPartial: this.asPartial,\n                referrer: this.referrer\n            };\n            return new CompilableTemplateImpl(statements, this.containingLayout, options, symbolTable);\n        };\n\n        OpcodeBuilder.prototype.evalSymbols = function evalSymbols() {\n            var block = this.containingLayout.block;\n\n            return block.hasEval ? block.symbols : null;\n        };\n\n        OpcodeBuilder.prototype.compileParams = function compileParams(params) {\n            if (!params) return 0;\n            for (var i = 0; i < params.length; i++) {\n                this.expr(params[i]);\n            }\n            return params.length;\n        };\n\n        OpcodeBuilder.prototype.compileArgs = function compileArgs(params, hash, blocks, synthetic) {\n            if (blocks) {\n                this.pushYieldableBlock(blocks.main);\n                this.pushYieldableBlock(blocks.else);\n                this.pushYieldableBlock(blocks.attrs);\n            }\n            var count = this.compileParams(params);\n            var flags = count << 4;\n            if (synthetic) flags |= 8;\n            if (blocks) {\n                flags |= 7;\n            }\n            var names = _util.EMPTY_ARRAY;\n            if (hash) {\n                names = hash[0];\n                var val = hash[1];\n                for (var i = 0; i < val.length; i++) {\n                    this.expr(val[i]);\n                }\n            }\n            this.pushArgs(names, flags);\n        };\n\n        OpcodeBuilder.prototype.invokeStaticBlock = function invokeStaticBlock(block) {\n            var callerCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n            var parameters = block.symbolTable.parameters;\n\n            var calleeCount = parameters.length;\n            var count = Math.min(callerCount, calleeCount);\n            this.pushFrame();\n            if (count) {\n                this.pushChildScope();\n                for (var i = 0; i < count; i++) {\n                    this.dup(_vm.Register.fp, callerCount - i);\n                    this.setVariable(parameters[i]);\n                }\n            }\n            this.pushBlock(block);\n            this.resolveBlock();\n            this.invokeVirtual();\n            if (count) {\n                this.popScope();\n            }\n            this.popFrame();\n        };\n\n        OpcodeBuilder.prototype.builtInGuardedAppend = function builtInGuardedAppend() {\n            this.dup();\n            this.startLabels();\n            this.isComponent();\n            this.enter(2);\n            this.jumpUnless('ELSE');\n            this.pushCurriedComponent();\n            this.pushDynamicComponentInstance();\n            this.invokeComponent(null, null, null, false, null, null);\n            this.exit();\n            this.return();\n            this.label('ELSE');\n            this.dynamicContent();\n            this.exit();\n            this.return();\n            this.stopLabels();\n        };\n\n        OpcodeBuilder.prototype.guardedAppend = function guardedAppend(expression, trusting) {\n            this.startLabels();\n            this.pushFrame();\n            this.returnTo('END');\n            if (this.stdLib) {\n                this.primitive(!!trusting);\n                this.load(_vm.Register.t0);\n                this.expr(expression);\n                this.primitive(this.stdLib.guardedAppend);\n                this.invokeVirtual();\n            } else {\n                this.expr(expression);\n                this.dup();\n                this.isComponent();\n                this.enter(2);\n                this.jumpUnless('ELSE');\n                this.pushCurriedComponent();\n                this.pushDynamicComponentInstance();\n                this.invokeComponent(null, null, null, false, null, null);\n                this.exit();\n                this.return();\n                this.label('ELSE');\n                this.primitive(!!trusting);\n                this.load(_vm.Register.t0);\n                this.dynamicContent();\n                this.exit();\n                this.return();\n            }\n            this.label('END');\n            this.popFrame();\n            this.stopLabels();\n        };\n\n        OpcodeBuilder.prototype.yield = function _yield(to, params) {\n            this.compileArgs(params, null, null, false);\n            this.getBlock(to);\n            this.resolveBlock();\n            this.invokeYield();\n            this.popScope();\n            this.popFrame();\n        };\n\n        OpcodeBuilder.prototype.populateLayout = function populateLayout(state) {\n            this.push(73 /* PopulateLayout */, state);\n        };\n\n        OpcodeBuilder.prototype.invokeComponent = function invokeComponent(attrs, params, hash, synthetic, block) {\n            var _this2 = this;\n\n            var inverse = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null;\n            var layout = arguments[6];\n\n            this.fetch(_vm.Register.s0);\n            this.dup(_vm.Register.sp, 1);\n            this.load(_vm.Register.s0);\n            this.pushFrame();\n            var blocks = { main: block, else: inverse, attrs: attrs };\n            this.compileArgs(params, hash, blocks, synthetic);\n            this.prepareArgs(_vm.Register.s0);\n            this.invokePreparedComponent(block !== null, function () {\n                if (layout) {\n                    _this2.pushSymbolTable(layout.symbolTable);\n                    _this2.pushLayout(layout);\n                    _this2.resolveLayout();\n                } else {\n                    _this2.getComponentLayout(_vm.Register.s0);\n                }\n                _this2.populateLayout(_vm.Register.s0);\n            });\n            this.load(_vm.Register.s0);\n        };\n\n        OpcodeBuilder.prototype.invokeStaticComponent = function invokeStaticComponent(capabilities, layout, attrs, params, hash, synthetic, block) {\n            var inverse = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null;\n            var symbolTable = layout.symbolTable;\n\n            var bailOut = symbolTable.hasEval || capabilities.prepareArgs;\n            if (bailOut) {\n                this.invokeComponent(attrs, params, hash, synthetic, block, inverse, layout);\n                return;\n            }\n            this.fetch(_vm.Register.s0);\n            this.dup(_vm.Register.sp, 1);\n            this.load(_vm.Register.s0);\n            var symbols = symbolTable.symbols;\n\n            if (capabilities.createArgs) {\n                this.pushFrame();\n                this.compileArgs(null, hash, null, synthetic);\n            }\n            this.beginComponentTransaction();\n            this.pushDynamicScope();\n            this.createComponent(_vm.Register.s0, block !== null);\n            if (capabilities.createArgs) {\n                this.popFrame();\n            }\n            this.registerComponentDestructor(_vm.Register.s0);\n            var bindings = [];\n            this.getComponentSelf(_vm.Register.s0);\n            bindings.push({ symbol: 0, isBlock: false });\n            for (var i = 0; i < symbols.length; i++) {\n                var symbol = symbols[i];\n                switch (symbol.charAt(0)) {\n                    case '&':\n                        var callerBlock = null;\n                        if (symbol === '&default') {\n                            callerBlock = block;\n                        } else if (symbol === '&inverse') {\n                            callerBlock = inverse;\n                        } else if (symbol === ATTRS_BLOCK) {\n                            callerBlock = attrs;\n                        } else {\n                            throw (0, _util.unreachable)();\n                        }\n                        if (callerBlock) {\n                            this.pushYieldableBlock(callerBlock);\n                            bindings.push({ symbol: i + 1, isBlock: true });\n                        } else {\n                            this.pushYieldableBlock(null);\n                            bindings.push({ symbol: i + 1, isBlock: true });\n                        }\n                        break;\n                    case '@':\n                        if (!hash) {\n                            break;\n                        }\n                        var keys = hash[0],\n                            values = hash[1];\n\n                        var lookupName = symbol;\n                        if (synthetic) {\n                            lookupName = symbol.slice(1);\n                        }\n                        var index = keys.indexOf(lookupName);\n                        if (index !== -1) {\n                            this.expr(values[index]);\n                            bindings.push({ symbol: i + 1, isBlock: false });\n                        }\n                        break;\n                }\n            }\n            this.pushRootScope(symbols.length + 1, !!(block || inverse || attrs));\n            for (var _i = bindings.length - 1; _i >= 0; _i--) {\n                var _bindings$_i = bindings[_i],\n                    _symbol = _bindings$_i.symbol,\n                    isBlock = _bindings$_i.isBlock;\n\n                if (isBlock) {\n                    this.setBlock(_symbol);\n                } else {\n                    this.setVariable(_symbol);\n                }\n            }\n            this.pushFrame();\n            this.invokeStatic(layout);\n            this.didRenderLayout(_vm.Register.s0);\n            this.popFrame();\n            this.popScope();\n            this.popDynamicScope();\n            this.commitComponentTransaction();\n            this.load(_vm.Register.s0);\n        };\n\n        OpcodeBuilder.prototype.dynamicComponent = function dynamicComponent(definition, /* TODO: attrs: Option<RawInlineBlock>, */params, hash, synthetic, block) {\n            var inverse = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null;\n\n            this.startLabels();\n            this.pushFrame();\n            this.returnTo('END');\n            this.expr(definition);\n            this.dup();\n            this.enter(2);\n            this.jumpUnless('ELSE');\n            this.resolveDynamicComponent(this.referrer);\n            this.pushDynamicComponentInstance();\n            this.invokeComponent(null, params, hash, synthetic, block, inverse);\n            this.label('ELSE');\n            this.exit();\n            this.return();\n            this.label('END');\n            this.popFrame();\n            this.stopLabels();\n        };\n\n        OpcodeBuilder.prototype.isComponent = function isComponent() {\n            this.push(57 /* IsComponent */);\n        };\n\n        OpcodeBuilder.prototype.curryComponent = function curryComponent(definition, /* TODO: attrs: Option<RawInlineBlock>, */params, hash, synthetic) {\n            var referrer = this.referrer;\n            this.pushFrame();\n            this.compileArgs(params, hash, null, synthetic);\n            this.push(66 /* CaptureArgs */);\n            this.expr(definition);\n            this.push(58 /* CurryComponent */, this.constants.serializable(referrer));\n            this.popFrame();\n            this.fetch(_vm.Register.v0);\n        };\n\n        OpcodeBuilder.prototype.pushSymbolTable = function pushSymbolTable(table) {\n            if (table) {\n                var constant = this.constants.serializable(table);\n                this.push(40 /* PushSymbolTable */, constant);\n            } else {\n                this.primitive(null);\n            }\n        };\n\n        OpcodeBuilder.prototype.pushBlockScope = function pushBlockScope() {\n            this.push(39 /* PushBlockScope */);\n        };\n\n        OpcodeBuilder.prototype.pushYieldableBlock = function pushYieldableBlock(block) {\n            this.pushSymbolTable(block && block.symbolTable);\n            this.pushBlockScope();\n            this.pushBlock(block);\n        };\n\n        OpcodeBuilder.prototype.template = function template(block) {\n            if (!block) return null;\n            return this.inlineBlock(block);\n        };\n\n        (0, _emberBabel.createClass)(OpcodeBuilder, [{\n            key: 'labels',\n            get: function () {\n                return this.labelsStack.current;\n            }\n        }]);\n        return OpcodeBuilder;\n    }(SimpleOpcodeBuilder);\n\n    var LazyOpcodeBuilder = function (_OpcodeBuilder) {\n        (0, _emberBabel.inherits)(LazyOpcodeBuilder, _OpcodeBuilder);\n\n        function LazyOpcodeBuilder() {\n            (0, _emberBabel.classCallCheck)(this, LazyOpcodeBuilder);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _OpcodeBuilder.apply(this, arguments));\n        }\n\n        LazyOpcodeBuilder.prototype.pushBlock = function pushBlock(block) {\n            if (block) {\n                this.pushOther(block);\n            } else {\n                this.primitive(null);\n            }\n        };\n\n        LazyOpcodeBuilder.prototype.resolveBlock = function resolveBlock() {\n            this.push(38 /* CompileBlock */);\n        };\n\n        LazyOpcodeBuilder.prototype.pushLayout = function pushLayout(layout) {\n            if (layout) {\n                this.pushOther(layout);\n            } else {\n                this.primitive(null);\n            }\n        };\n\n        LazyOpcodeBuilder.prototype.resolveLayout = function resolveLayout() {\n            this.push(38 /* CompileBlock */);\n        };\n\n        LazyOpcodeBuilder.prototype.invokeStatic = function invokeStatic(compilable) {\n            this.pushOther(compilable);\n            this.push(38 /* CompileBlock */);\n            this.pushMachine(41 /* InvokeVirtual */);\n        };\n\n        LazyOpcodeBuilder.prototype.pushOther = function pushOther(value) {\n            this.push(10 /* Constant */, this.other(value));\n        };\n\n        LazyOpcodeBuilder.prototype.other = function other(value) {\n            return this.constants.other(value);\n        };\n\n        return LazyOpcodeBuilder;\n    }(OpcodeBuilder);\n\n    var EagerOpcodeBuilder = function (_OpcodeBuilder2) {\n        (0, _emberBabel.inherits)(EagerOpcodeBuilder, _OpcodeBuilder2);\n\n        function EagerOpcodeBuilder() {\n            (0, _emberBabel.classCallCheck)(this, EagerOpcodeBuilder);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _OpcodeBuilder2.apply(this, arguments));\n        }\n\n        EagerOpcodeBuilder.prototype.pushBlock = function pushBlock(block) {\n            var handle = block ? block.compile(this.stdLib) : null;\n            this.primitive(handle);\n        };\n\n        EagerOpcodeBuilder.prototype.resolveBlock = function resolveBlock() {\n            return;\n        };\n\n        EagerOpcodeBuilder.prototype.pushLayout = function pushLayout(layout) {\n            if (layout) {\n                this.primitive(layout.compile(this.stdLib));\n            } else {\n                this.primitive(null);\n            }\n        };\n\n        EagerOpcodeBuilder.prototype.resolveLayout = function resolveLayout() {};\n\n        EagerOpcodeBuilder.prototype.invokeStatic = function invokeStatic(compilable) {\n            var _this5 = this;\n\n            var handle = compilable.compile();\n            // If the handle for the invoked component is not yet known (for example,\n            // because this is a recursive invocation and we're still compiling), push a\n            // function that will produce the correct handle when the heap is\n            // serialized.\n            if (handle === PLACEHOLDER_HANDLE$1) {\n                this.pushMachine(42 /* InvokeStatic */, function () {\n                    return compilable.compile(_this5.stdLib);\n                });\n            } else {\n                this.pushMachine(42 /* InvokeStatic */, handle);\n            }\n        };\n\n        return EagerOpcodeBuilder;\n    }(OpcodeBuilder);\n\n    var PartialDefinition = function () {\n        function PartialDefinition(name, // for debugging\n        template) {\n            (0, _emberBabel.classCallCheck)(this, PartialDefinition);\n\n            this.name = name;\n            this.template = template;\n        }\n\n        PartialDefinition.prototype.getPartial = function getPartial() {\n            var partial = this.template.asPartial();\n            var handle = partial.compile();\n            return { symbolTable: partial.symbolTable, handle: handle };\n        };\n\n        return PartialDefinition;\n    }();\n\n    var clientId = 0;\n    function templateFactory(_ref) {\n        var templateId = _ref.id,\n            meta = _ref.meta,\n            block = _ref.block;\n\n        var parsedBlock = void 0;\n        var id = templateId || 'client-' + clientId++;\n        var create = function (options, envMeta) {\n            var newMeta = envMeta ? (0, _util.assign)({}, envMeta, meta) : meta;\n            if (!parsedBlock) {\n                parsedBlock = JSON.parse(block);\n            }\n            return new TemplateImpl(options, { id: id, block: parsedBlock, referrer: newMeta });\n        };\n        return { id: id, meta: meta, create: create };\n    }\n\n    var TemplateImpl = function () {\n        function TemplateImpl(options, parsedLayout) {\n            (0, _emberBabel.classCallCheck)(this, TemplateImpl);\n\n            this.options = options;\n            this.parsedLayout = parsedLayout;\n            this.layout = null;\n            this.partial = null;\n            this.wrappedLayout = null;\n            var block = parsedLayout.block;\n\n            this.symbols = block.symbols;\n            this.hasEval = block.hasEval;\n            this.statements = block.statements;\n            this.referrer = parsedLayout.referrer;\n            this.id = parsedLayout.id || 'client-' + clientId++;\n        }\n\n        TemplateImpl.prototype.asLayout = function asLayout() {\n            if (this.layout) return this.layout;\n            return this.layout = compilable(this.parsedLayout, this.options, false);\n        };\n\n        TemplateImpl.prototype.asPartial = function asPartial() {\n            if (this.partial) return this.partial;\n            return this.partial = compilable(this.parsedLayout, this.options, true);\n        };\n\n        TemplateImpl.prototype.asWrappedLayout = function asWrappedLayout() {\n            if (this.wrappedLayout) return this.wrappedLayout;\n            var compileOptions = (0, _util.assign)({}, this.options, {\n                asPartial: false,\n                referrer: this.referrer\n            });\n            return this.wrappedLayout = new WrappedBuilder(compileOptions, this.parsedLayout);\n        };\n\n        return TemplateImpl;\n    }();\n\n    function compilable(layout, options, asPartial) {\n        var block = layout.block,\n            referrer = layout.referrer;\n        var hasEval = block.hasEval,\n            symbols = block.symbols;\n\n        var compileOptions = (0, _util.assign)({}, options, { asPartial: asPartial, referrer: referrer });\n        return new CompilableTemplateImpl(block.statements, layout, compileOptions, { referrer: referrer, hasEval: hasEval, symbols: symbols });\n    }\n\n    exports.ATTRS_BLOCK = ATTRS_BLOCK;\n    exports.Macros = Macros;\n    exports.LazyOpcodeBuilder = LazyOpcodeBuilder;\n    exports.EagerOpcodeBuilder = EagerOpcodeBuilder;\n    exports.OpcodeBuilder = OpcodeBuilder;\n    exports.SimpleOpcodeBuilder = SimpleOpcodeBuilder;\n    exports.PartialDefinition = PartialDefinition;\n    exports.templateFactory = templateFactory;\n    exports.CompilableTemplate = CompilableTemplateImpl;\n    exports.debug = debug;\n    exports.debugSlice = debugSlice;\n    exports.logOpcode = logOpcode;\n    exports.WrappedBuilder = WrappedBuilder;\n    exports.PLACEHOLDER_HANDLE = PLACEHOLDER_HANDLE;\n});","enifed('@glimmer/program', ['exports', 'ember-babel', '@glimmer/util'], function (exports, _emberBabel) {\n    'use strict';\n\n    exports.Opcode = exports.Program = exports.RuntimeProgram = exports.WriteOnlyProgram = exports.Heap = exports.LazyConstants = exports.Constants = exports.RuntimeConstants = exports.WriteOnlyConstants = undefined;\n\n\n    var UNRESOLVED = {};\n    var WELL_KNOWN_EMPTY_ARRAY_POSITION = 0;\n    var WELL_KNOW_EMPTY_ARRAY = Object.freeze([]);\n\n    var WriteOnlyConstants = function () {\n        function WriteOnlyConstants() {\n            (0, _emberBabel.classCallCheck)(this, WriteOnlyConstants);\n\n            // `0` means NULL\n            this.strings = [];\n            this.arrays = [WELL_KNOW_EMPTY_ARRAY];\n            this.tables = [];\n            this.handles = [];\n            this.resolved = [];\n            this.numbers = [];\n        }\n\n        WriteOnlyConstants.prototype.string = function string(value) {\n            var index = this.strings.indexOf(value);\n            if (index > -1) {\n                return index;\n            }\n            return this.strings.push(value) - 1;\n        };\n\n        WriteOnlyConstants.prototype.stringArray = function stringArray(strings) {\n            var _strings = new Array(strings.length);\n            for (var i = 0; i < strings.length; i++) {\n                _strings[i] = this.string(strings[i]);\n            }\n            return this.array(_strings);\n        };\n\n        WriteOnlyConstants.prototype.array = function array(values) {\n            if (values.length === 0) {\n                return WELL_KNOWN_EMPTY_ARRAY_POSITION;\n            }\n            var index = this.arrays.indexOf(values);\n            if (index > -1) {\n                return index;\n            }\n            return this.arrays.push(values) - 1;\n        };\n\n        WriteOnlyConstants.prototype.handle = function handle(_handle) {\n            var index = this.handles.indexOf(_handle);\n            if (index > -1) {\n                return index;\n            }\n            this.resolved.push(UNRESOLVED);\n            return this.handles.push(_handle) - 1;\n        };\n\n        WriteOnlyConstants.prototype.serializable = function serializable(value) {\n            var str = JSON.stringify(value);\n            var index = this.strings.indexOf(str);\n            if (index > -1) {\n                return index;\n            }\n            return this.strings.push(str) - 1;\n        };\n\n        WriteOnlyConstants.prototype.number = function number(_number) {\n            var index = this.numbers.indexOf(_number);\n            if (index > -1) {\n                return index;\n            }\n            return this.numbers.push(_number) - 1;\n        };\n\n        WriteOnlyConstants.prototype.toPool = function toPool() {\n            return {\n                strings: this.strings,\n                arrays: this.arrays,\n                handles: this.handles,\n                numbers: this.numbers\n            };\n        };\n\n        return WriteOnlyConstants;\n    }();\n\n    var RuntimeConstants = function () {\n        function RuntimeConstants(resolver, pool) {\n            (0, _emberBabel.classCallCheck)(this, RuntimeConstants);\n\n            this.resolver = resolver;\n            this.strings = pool.strings;\n            this.arrays = pool.arrays;\n            this.handles = pool.handles;\n            this.resolved = this.handles.map(function () {\n                return UNRESOLVED;\n            });\n            this.numbers = pool.numbers;\n        }\n\n        RuntimeConstants.prototype.getString = function getString(value) {\n            return this.strings[value];\n        };\n\n        RuntimeConstants.prototype.getNumber = function getNumber(value) {\n            return this.numbers[value];\n        };\n\n        RuntimeConstants.prototype.getStringArray = function getStringArray(value) {\n            var names = this.getArray(value);\n            var _names = new Array(names.length);\n            for (var i = 0; i < names.length; i++) {\n                var n = names[i];\n                _names[i] = this.getString(n);\n            }\n            return _names;\n        };\n\n        RuntimeConstants.prototype.getArray = function getArray(value) {\n            return this.arrays[value];\n        };\n\n        RuntimeConstants.prototype.resolveHandle = function resolveHandle(index) {\n            var resolved = this.resolved[index];\n            if (resolved === UNRESOLVED) {\n                var handle = this.handles[index];\n                resolved = this.resolved[index] = this.resolver.resolve(handle);\n            }\n            return resolved;\n        };\n\n        RuntimeConstants.prototype.getSerializable = function getSerializable(s) {\n            return JSON.parse(this.strings[s]);\n        };\n\n        return RuntimeConstants;\n    }();\n\n    var Constants = function (_WriteOnlyConstants) {\n        (0, _emberBabel.inherits)(Constants, _WriteOnlyConstants);\n\n        function Constants(resolver, pool) {\n            (0, _emberBabel.classCallCheck)(this, Constants);\n\n            var _this = (0, _emberBabel.possibleConstructorReturn)(this, _WriteOnlyConstants.call(this));\n\n            _this.resolver = resolver;\n            if (pool) {\n                _this.strings = pool.strings;\n                _this.arrays = pool.arrays;\n                _this.handles = pool.handles;\n                _this.resolved = _this.handles.map(function () {\n                    return UNRESOLVED;\n                });\n                _this.numbers = pool.numbers;\n            }\n            return _this;\n        }\n\n        Constants.prototype.getNumber = function getNumber(value) {\n            return this.numbers[value];\n        };\n\n        Constants.prototype.getString = function getString(value) {\n            return this.strings[value];\n        };\n\n        Constants.prototype.getStringArray = function getStringArray(value) {\n            var names = this.getArray(value);\n            var _names = new Array(names.length);\n            for (var i = 0; i < names.length; i++) {\n                var n = names[i];\n                _names[i] = this.getString(n);\n            }\n            return _names;\n        };\n\n        Constants.prototype.getArray = function getArray(value) {\n            return this.arrays[value];\n        };\n\n        Constants.prototype.resolveHandle = function resolveHandle(index) {\n            var resolved = this.resolved[index];\n            if (resolved === UNRESOLVED) {\n                var handle = this.handles[index];\n                resolved = this.resolved[index] = this.resolver.resolve(handle);\n            }\n            return resolved;\n        };\n\n        Constants.prototype.getSerializable = function getSerializable(s) {\n            return JSON.parse(this.strings[s]);\n        };\n\n        return Constants;\n    }(WriteOnlyConstants);\n\n    var LazyConstants = function (_Constants) {\n        (0, _emberBabel.inherits)(LazyConstants, _Constants);\n\n        function LazyConstants() {\n            (0, _emberBabel.classCallCheck)(this, LazyConstants);\n\n            var _this2 = (0, _emberBabel.possibleConstructorReturn)(this, _Constants.apply(this, arguments));\n\n            _this2.others = [];\n            _this2.serializables = [];\n            return _this2;\n        }\n\n        LazyConstants.prototype.serializable = function serializable(value) {\n            var index = this.serializables.indexOf(value);\n            if (index > -1) {\n                return index;\n            }\n            return this.serializables.push(value) - 1;\n        };\n\n        LazyConstants.prototype.getSerializable = function getSerializable(s) {\n            return this.serializables[s];\n        };\n\n        LazyConstants.prototype.getOther = function getOther(value) {\n            return this.others[value - 1];\n        };\n\n        LazyConstants.prototype.other = function other(_other) {\n            return this.others.push(_other);\n        };\n\n        return LazyConstants;\n    }(Constants);\n\n    var Opcode = function () {\n        function Opcode(heap) {\n            (0, _emberBabel.classCallCheck)(this, Opcode);\n\n            this.heap = heap;\n            this.offset = 0;\n        }\n\n        (0, _emberBabel.createClass)(Opcode, [{\n            key: 'size',\n            get: function () {\n                var rawType = this.heap.getbyaddr(this.offset);\n                return ((rawType & 768 /* OPERAND_LEN_MASK */) >> 8 /* ARG_SHIFT */) + 1;\n            }\n        }, {\n            key: 'isMachine',\n            get: function () {\n                var rawType = this.heap.getbyaddr(this.offset);\n                return rawType & 1024 /* MACHINE_MASK */;\n            }\n        }, {\n            key: 'type',\n            get: function () {\n                return this.heap.getbyaddr(this.offset) & 255 /* TYPE_MASK */;\n            }\n        }, {\n            key: 'op1',\n            get: function () {\n                return this.heap.getbyaddr(this.offset + 1);\n            }\n        }, {\n            key: 'op2',\n            get: function () {\n                return this.heap.getbyaddr(this.offset + 2);\n            }\n        }, {\n            key: 'op3',\n            get: function () {\n                return this.heap.getbyaddr(this.offset + 3);\n            }\n        }]);\n        return Opcode;\n    }();\n\n    function encodeTableInfo(size, scopeSize, state) {\n        return size | scopeSize << 16 | state << 30;\n    }\n    function changeState(info, newState) {\n        return info | newState << 30;\n    }\n    var PAGE_SIZE = 0x100000;\n    /**\n     * The Heap is responsible for dynamically allocating\n     * memory in which we read/write the VM's instructions\n     * from/to. When we malloc we pass out a VMHandle, which\n     * is used as an indirect way of accessing the memory during\n     * execution of the VM. Internally we track the different\n     * regions of the memory in an int array known as the table.\n     *\n     * The table 32-bit aligned and has the following layout:\n     *\n     * | ... | hp (u32) |       info (u32)          |\n     * | ... |  Handle  | Size | Scope Size | State |\n     * | ... | 32-bits  | 16b  |    14b     |  2b   |\n     *\n     * With this information we effectively have the ability to\n     * control when we want to free memory. That being said you\n     * can not free during execution as raw address are only\n     * valid during the execution. This means you cannot close\n     * over them as you will have a bad memory access exception.\n     */\n\n    var Heap = function () {\n        function Heap(serializedHeap) {\n            (0, _emberBabel.classCallCheck)(this, Heap);\n\n            this.placeholders = [];\n            this.offset = 0;\n            this.handle = 0;\n            this.capacity = PAGE_SIZE;\n            if (serializedHeap) {\n                var buffer = serializedHeap.buffer,\n                    table = serializedHeap.table,\n                    handle = serializedHeap.handle;\n\n                this.heap = new Uint16Array(buffer);\n                this.table = table;\n                this.offset = this.heap.length;\n                this.handle = handle;\n                this.capacity = 0;\n            } else {\n                this.heap = new Uint16Array(PAGE_SIZE);\n                this.table = [];\n            }\n        }\n\n        Heap.prototype.push = function push(item) {\n            this.sizeCheck();\n            this.heap[this.offset++] = item;\n        };\n\n        Heap.prototype.sizeCheck = function sizeCheck() {\n            if (this.capacity === 0) {\n                var heap = slice(this.heap, 0, this.offset);\n                this.heap = new Uint16Array(heap.length + PAGE_SIZE);\n                this.heap.set(heap, 0);\n                this.capacity = PAGE_SIZE;\n            }\n            this.capacity--;\n        };\n\n        Heap.prototype.getbyaddr = function getbyaddr(address) {\n            return this.heap[address];\n        };\n\n        Heap.prototype.setbyaddr = function setbyaddr(address, value) {\n            this.heap[address] = value;\n        };\n\n        Heap.prototype.malloc = function malloc() {\n            this.table.push(this.offset, 0);\n            var handle = this.handle;\n            this.handle += 2 /* ENTRY_SIZE */;\n            return handle;\n        };\n\n        Heap.prototype.finishMalloc = function finishMalloc(handle, scopeSize) {\n            var start = this.table[handle];\n            var finish = this.offset;\n            var instructionSize = finish - start;\n            var info = encodeTableInfo(instructionSize, scopeSize, 0 /* Allocated */);\n            this.table[handle + 1 /* INFO_OFFSET */] = info;\n        };\n\n        Heap.prototype.size = function size() {\n            return this.offset;\n        };\n\n        Heap.prototype.getaddr = function getaddr(handle) {\n            return this.table[handle];\n        };\n\n        Heap.prototype.gethandle = function gethandle(address) {\n            this.table.push(address, encodeTableInfo(0, 0, 3 /* Pointer */));\n            var handle = this.handle;\n            this.handle += 2 /* ENTRY_SIZE */;\n            return handle;\n        };\n\n        Heap.prototype.sizeof = function sizeof(handle) {\n            return -1;\n        };\n\n        Heap.prototype.scopesizeof = function scopesizeof(handle) {\n            var info = this.table[handle + 1 /* INFO_OFFSET */];\n            return (info & 1073676288 /* SCOPE_MASK */) >> 16;\n        };\n\n        Heap.prototype.free = function free(handle) {\n            var info = this.table[handle + 1 /* INFO_OFFSET */];\n            this.table[handle + 1 /* INFO_OFFSET */] = changeState(info, 1 /* Freed */);\n        };\n\n        Heap.prototype.compact = function compact() {\n            var compactedSize = 0;\n            var table = this.table,\n                length = this.table.length,\n                heap = this.heap;\n\n            for (var i = 0; i < length; i += 2 /* ENTRY_SIZE */) {\n                var offset = table[i];\n                var info = table[i + 1 /* INFO_OFFSET */];\n                var size = info & 65535;\n                var state = info & 3221225472 /* STATE_MASK */ >> 30;\n                if (state === 2 /* Purged */) {\n                        continue;\n                    } else if (state === 1 /* Freed */) {\n                        // transition to \"already freed\" aka \"purged\"\n                        // a good improvement would be to reuse\n                        // these slots\n                        table[i + 1 /* INFO_OFFSET */] = changeState(info, 2 /* Purged */);\n                        compactedSize += size;\n                    } else if (state === 0 /* Allocated */) {\n                        for (var j = offset; j <= i + size; j++) {\n                            heap[j - compactedSize] = heap[j];\n                        }\n                        table[i] = offset - compactedSize;\n                    } else if (state === 3 /* Pointer */) {\n                        table[i] = offset - compactedSize;\n                    }\n            }\n            this.offset = this.offset - compactedSize;\n        };\n\n        Heap.prototype.pushPlaceholder = function pushPlaceholder(valueFunc) {\n            this.sizeCheck();\n            var address = this.offset++;\n            this.heap[address] = 65535 /* MAX_SIZE */;\n            this.placeholders.push([address, valueFunc]);\n        };\n\n        Heap.prototype.patchPlaceholders = function patchPlaceholders() {\n            var placeholders = this.placeholders;\n\n            for (var i = 0; i < placeholders.length; i++) {\n                var _placeholders$i = placeholders[i],\n                    address = _placeholders$i[0],\n                    getValue = _placeholders$i[1];\n\n                this.setbyaddr(address, getValue());\n            }\n        };\n\n        Heap.prototype.capture = function capture() {\n            var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.offset;\n\n            this.patchPlaceholders();\n            // Only called in eager mode\n            var buffer = slice(this.heap, 0, offset).buffer;\n            return {\n                handle: this.handle,\n                table: this.table,\n                buffer: buffer\n            };\n        };\n\n        return Heap;\n    }();\n\n    var WriteOnlyProgram = function () {\n        function WriteOnlyProgram() {\n            var constants = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new WriteOnlyConstants();\n            var heap = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Heap();\n            (0, _emberBabel.classCallCheck)(this, WriteOnlyProgram);\n\n            this.constants = constants;\n            this.heap = heap;\n            this._opcode = new Opcode(this.heap);\n        }\n\n        WriteOnlyProgram.prototype.opcode = function opcode(offset) {\n            this._opcode.offset = offset;\n            return this._opcode;\n        };\n\n        return WriteOnlyProgram;\n    }();\n\n    var RuntimeProgram = function () {\n        function RuntimeProgram(constants, heap) {\n            (0, _emberBabel.classCallCheck)(this, RuntimeProgram);\n\n            this.constants = constants;\n            this.heap = heap;\n            this._opcode = new Opcode(this.heap);\n        }\n\n        RuntimeProgram.hydrate = function hydrate(rawHeap, pool, resolver) {\n            var heap = new Heap(rawHeap);\n            var constants = new RuntimeConstants(resolver, pool);\n            return new RuntimeProgram(constants, heap);\n        };\n\n        RuntimeProgram.prototype.opcode = function opcode(offset) {\n            this._opcode.offset = offset;\n            return this._opcode;\n        };\n\n        return RuntimeProgram;\n    }();\n\n    var Program = function (_WriteOnlyProgram) {\n        (0, _emberBabel.inherits)(Program, _WriteOnlyProgram);\n\n        function Program() {\n            (0, _emberBabel.classCallCheck)(this, Program);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _WriteOnlyProgram.apply(this, arguments));\n        }\n\n        return Program;\n    }(WriteOnlyProgram);\n\n    function slice(arr, start, end) {\n        if (arr.slice !== undefined) {\n            return arr.slice(start, end);\n        }\n        var ret = new Uint16Array(end);\n        for (; start < end; start++) {\n            ret[start] = arr[start];\n        }\n        return ret;\n    }\n\n    exports.WriteOnlyConstants = WriteOnlyConstants;\n    exports.RuntimeConstants = RuntimeConstants;\n    exports.Constants = Constants;\n    exports.LazyConstants = LazyConstants;\n    exports.Heap = Heap;\n    exports.WriteOnlyProgram = WriteOnlyProgram;\n    exports.RuntimeProgram = RuntimeProgram;\n    exports.Program = Program;\n    exports.Opcode = Opcode;\n});","enifed(\"@glimmer/reference\", [\"exports\", \"ember-babel\", \"@glimmer/util\"], function (exports, _emberBabel, _util) {\n    \"use strict\";\n\n    exports.isModified = exports.ReferenceCache = exports.map = exports.CachedReference = exports.UpdatableTag = exports.CachedTag = exports.combine = exports.combineSlice = exports.combineTagged = exports.DirtyableTag = exports.bump = exports.isConstTag = exports.isConst = exports.CURRENT_TAG = exports.VOLATILE_TAG = exports.CONSTANT_TAG = exports.TagWrapper = exports.RevisionTag = exports.VOLATILE = exports.INITIAL = exports.CONSTANT = exports.IteratorSynchronizer = exports.ReferenceIterator = exports.IterationArtifacts = exports.ListItem = exports.ConstReference = undefined;\n\n\n    var CONSTANT = 0;\n    var INITIAL = 1;\n    var VOLATILE = NaN;\n\n    var RevisionTag = function () {\n        function RevisionTag() {\n            (0, _emberBabel.classCallCheck)(this, RevisionTag);\n        }\n\n        RevisionTag.prototype.validate = function validate(snapshot) {\n            return this.value() === snapshot;\n        };\n\n        return RevisionTag;\n    }();\n\n    RevisionTag.id = 0;\n    var VALUE = [];\n    var VALIDATE = [];\n\n    var TagWrapper = function () {\n        function TagWrapper(type, inner) {\n            (0, _emberBabel.classCallCheck)(this, TagWrapper);\n\n            this.type = type;\n            this.inner = inner;\n        }\n\n        TagWrapper.prototype.value = function value() {\n            var func = VALUE[this.type];\n            return func(this.inner);\n        };\n\n        TagWrapper.prototype.validate = function validate(snapshot) {\n            var func = VALIDATE[this.type];\n            return func(this.inner, snapshot);\n        };\n\n        return TagWrapper;\n    }();\n\n    function register(Type) {\n        var type = VALUE.length;\n        VALUE.push(function (tag) {\n            return tag.value();\n        });\n        VALIDATE.push(function (tag, snapshot) {\n            return tag.validate(snapshot);\n        });\n        Type.id = type;\n    }\n    ///\n    // CONSTANT: 0\n    VALUE.push(function () {\n        return CONSTANT;\n    });\n    VALIDATE.push(function (_tag, snapshot) {\n        return snapshot === CONSTANT;\n    });\n    var CONSTANT_TAG = new TagWrapper(0, null);\n    // VOLATILE: 1\n    VALUE.push(function () {\n        return VOLATILE;\n    });\n    VALIDATE.push(function (_tag, snapshot) {\n        return snapshot === VOLATILE;\n    });\n    var VOLATILE_TAG = new TagWrapper(1, null);\n    // CURRENT: 2\n    VALUE.push(function () {\n        return $REVISION;\n    });\n    VALIDATE.push(function (_tag, snapshot) {\n        return snapshot === $REVISION;\n    });\n    var CURRENT_TAG = new TagWrapper(2, null);\n    function isConst(_ref) {\n        var tag = _ref.tag;\n\n        return tag === CONSTANT_TAG;\n    }\n    function isConstTag(tag) {\n        return tag === CONSTANT_TAG;\n    }\n    ///\n    var $REVISION = INITIAL;\n    function bump() {\n        $REVISION++;\n    }\n\n    var DirtyableTag = function (_RevisionTag) {\n        (0, _emberBabel.inherits)(DirtyableTag, _RevisionTag);\n\n        DirtyableTag.create = function create() {\n            var revision = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : $REVISION;\n\n            return new TagWrapper(this.id, new DirtyableTag(revision));\n        };\n\n        function DirtyableTag() {\n            var revision = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : $REVISION;\n            (0, _emberBabel.classCallCheck)(this, DirtyableTag);\n\n            var _this = (0, _emberBabel.possibleConstructorReturn)(this, _RevisionTag.call(this));\n\n            _this.revision = revision;\n            return _this;\n        }\n\n        DirtyableTag.prototype.value = function value() {\n            return this.revision;\n        };\n\n        DirtyableTag.prototype.dirty = function dirty() {\n            this.revision = ++$REVISION;\n        };\n\n        return DirtyableTag;\n    }(RevisionTag);\n\n    register(DirtyableTag);\n    function combineTagged(tagged) {\n        var optimized = [];\n        for (var i = 0, l = tagged.length; i < l; i++) {\n            var tag = tagged[i].tag;\n            if (tag === VOLATILE_TAG) return VOLATILE_TAG;\n            if (tag === CONSTANT_TAG) continue;\n            optimized.push(tag);\n        }\n        return _combine(optimized);\n    }\n    function combineSlice(slice) {\n        var optimized = [];\n        var node = slice.head();\n        while (node !== null) {\n            var tag = node.tag;\n            if (tag === VOLATILE_TAG) return VOLATILE_TAG;\n            if (tag !== CONSTANT_TAG) optimized.push(tag);\n            node = slice.nextNode(node);\n        }\n        return _combine(optimized);\n    }\n    function combine(tags) {\n        var optimized = [];\n        for (var i = 0, l = tags.length; i < l; i++) {\n            var tag = tags[i];\n            if (tag === VOLATILE_TAG) return VOLATILE_TAG;\n            if (tag === CONSTANT_TAG) continue;\n            optimized.push(tag);\n        }\n        return _combine(optimized);\n    }\n    function _combine(tags) {\n        switch (tags.length) {\n            case 0:\n                return CONSTANT_TAG;\n            case 1:\n                return tags[0];\n            case 2:\n                return TagsPair.create(tags[0], tags[1]);\n            default:\n                return TagsCombinator.create(tags);\n        }\n    }\n\n    var CachedTag = function (_RevisionTag2) {\n        (0, _emberBabel.inherits)(CachedTag, _RevisionTag2);\n\n        function CachedTag() {\n            (0, _emberBabel.classCallCheck)(this, CachedTag);\n\n            var _this2 = (0, _emberBabel.possibleConstructorReturn)(this, _RevisionTag2.apply(this, arguments));\n\n            _this2.lastChecked = null;\n            _this2.lastValue = null;\n            return _this2;\n        }\n\n        CachedTag.prototype.value = function value() {\n            var lastChecked = this.lastChecked,\n                lastValue = this.lastValue;\n\n            if (lastChecked !== $REVISION) {\n                this.lastChecked = $REVISION;\n                this.lastValue = lastValue = this.compute();\n            }\n            return this.lastValue;\n        };\n\n        CachedTag.prototype.invalidate = function invalidate() {\n            this.lastChecked = null;\n        };\n\n        return CachedTag;\n    }(RevisionTag);\n\n    var TagsPair = function (_CachedTag) {\n        (0, _emberBabel.inherits)(TagsPair, _CachedTag);\n\n        TagsPair.create = function create(first, second) {\n            return new TagWrapper(this.id, new TagsPair(first, second));\n        };\n\n        function TagsPair(first, second) {\n            (0, _emberBabel.classCallCheck)(this, TagsPair);\n\n            var _this3 = (0, _emberBabel.possibleConstructorReturn)(this, _CachedTag.call(this));\n\n            _this3.first = first;\n            _this3.second = second;\n            return _this3;\n        }\n\n        TagsPair.prototype.compute = function compute() {\n            return Math.max(this.first.value(), this.second.value());\n        };\n\n        return TagsPair;\n    }(CachedTag);\n\n    register(TagsPair);\n\n    var TagsCombinator = function (_CachedTag2) {\n        (0, _emberBabel.inherits)(TagsCombinator, _CachedTag2);\n\n        TagsCombinator.create = function create(tags) {\n            return new TagWrapper(this.id, new TagsCombinator(tags));\n        };\n\n        function TagsCombinator(tags) {\n            (0, _emberBabel.classCallCheck)(this, TagsCombinator);\n\n            var _this4 = (0, _emberBabel.possibleConstructorReturn)(this, _CachedTag2.call(this));\n\n            _this4.tags = tags;\n            return _this4;\n        }\n\n        TagsCombinator.prototype.compute = function compute() {\n            var tags = this.tags;\n\n            var max = -1;\n            for (var i = 0; i < tags.length; i++) {\n                var value = tags[i].value();\n                max = Math.max(value, max);\n            }\n            return max;\n        };\n\n        return TagsCombinator;\n    }(CachedTag);\n\n    register(TagsCombinator);\n\n    var UpdatableTag = function (_CachedTag3) {\n        (0, _emberBabel.inherits)(UpdatableTag, _CachedTag3);\n\n        UpdatableTag.create = function create(tag) {\n            return new TagWrapper(this.id, new UpdatableTag(tag));\n        };\n\n        function UpdatableTag(tag) {\n            (0, _emberBabel.classCallCheck)(this, UpdatableTag);\n\n            var _this5 = (0, _emberBabel.possibleConstructorReturn)(this, _CachedTag3.call(this));\n\n            _this5.tag = tag;\n            _this5.lastUpdated = INITIAL;\n            return _this5;\n        }\n\n        UpdatableTag.prototype.compute = function compute() {\n            return Math.max(this.lastUpdated, this.tag.value());\n        };\n\n        UpdatableTag.prototype.update = function update(tag) {\n            if (tag !== this.tag) {\n                this.tag = tag;\n                this.lastUpdated = $REVISION;\n                this.invalidate();\n            }\n        };\n\n        return UpdatableTag;\n    }(CachedTag);\n\n    register(UpdatableTag);\n\n    var CachedReference = function () {\n        function CachedReference() {\n            (0, _emberBabel.classCallCheck)(this, CachedReference);\n\n            this.lastRevision = null;\n            this.lastValue = null;\n        }\n\n        CachedReference.prototype.value = function value() {\n            var tag = this.tag,\n                lastRevision = this.lastRevision,\n                lastValue = this.lastValue;\n\n            if (lastRevision === null || !tag.validate(lastRevision)) {\n                lastValue = this.lastValue = this.compute();\n                this.lastRevision = tag.value();\n            }\n            return lastValue;\n        };\n\n        CachedReference.prototype.invalidate = function invalidate() {\n            this.lastRevision = null;\n        };\n\n        return CachedReference;\n    }();\n\n    var MapperReference = function (_CachedReference) {\n        (0, _emberBabel.inherits)(MapperReference, _CachedReference);\n\n        function MapperReference(reference, mapper) {\n            (0, _emberBabel.classCallCheck)(this, MapperReference);\n\n            var _this6 = (0, _emberBabel.possibleConstructorReturn)(this, _CachedReference.call(this));\n\n            _this6.tag = reference.tag;\n            _this6.reference = reference;\n            _this6.mapper = mapper;\n            return _this6;\n        }\n\n        MapperReference.prototype.compute = function compute() {\n            var reference = this.reference,\n                mapper = this.mapper;\n\n            return mapper(reference.value());\n        };\n\n        return MapperReference;\n    }(CachedReference);\n\n    function map(reference, mapper) {\n        return new MapperReference(reference, mapper);\n    }\n    //////////\n\n    var ReferenceCache = function () {\n        function ReferenceCache(reference) {\n            (0, _emberBabel.classCallCheck)(this, ReferenceCache);\n\n            this.lastValue = null;\n            this.lastRevision = null;\n            this.initialized = false;\n            this.tag = reference.tag;\n            this.reference = reference;\n        }\n\n        ReferenceCache.prototype.peek = function peek() {\n            if (!this.initialized) {\n                return this.initialize();\n            }\n            return this.lastValue;\n        };\n\n        ReferenceCache.prototype.revalidate = function revalidate() {\n            if (!this.initialized) {\n                return this.initialize();\n            }\n            var reference = this.reference,\n                lastRevision = this.lastRevision;\n\n            var tag = reference.tag;\n            if (tag.validate(lastRevision)) return NOT_MODIFIED;\n            this.lastRevision = tag.value();\n            var lastValue = this.lastValue;\n\n            var value = reference.value();\n            if (value === lastValue) return NOT_MODIFIED;\n            this.lastValue = value;\n            return value;\n        };\n\n        ReferenceCache.prototype.initialize = function initialize() {\n            var reference = this.reference;\n\n            var value = this.lastValue = reference.value();\n            this.lastRevision = reference.tag.value();\n            this.initialized = true;\n            return value;\n        };\n\n        return ReferenceCache;\n    }();\n\n    var NOT_MODIFIED = \"adb3b78e-3d22-4e4b-877a-6317c2c5c145\";\n    function isModified(value) {\n        return value !== NOT_MODIFIED;\n    }\n\n    var ConstReference = function () {\n        function ConstReference(inner) {\n            (0, _emberBabel.classCallCheck)(this, ConstReference);\n\n            this.inner = inner;\n            this.tag = CONSTANT_TAG;\n        }\n\n        ConstReference.prototype.value = function value() {\n            return this.inner;\n        };\n\n        return ConstReference;\n    }();\n\n    var ListItem = function (_ListNode) {\n        (0, _emberBabel.inherits)(ListItem, _ListNode);\n\n        function ListItem(iterable, result) {\n            (0, _emberBabel.classCallCheck)(this, ListItem);\n\n            var _this7 = (0, _emberBabel.possibleConstructorReturn)(this, _ListNode.call(this, iterable.valueReferenceFor(result)));\n\n            _this7.retained = false;\n            _this7.seen = false;\n            _this7.key = result.key;\n            _this7.iterable = iterable;\n            _this7.memo = iterable.memoReferenceFor(result);\n            return _this7;\n        }\n\n        ListItem.prototype.update = function update(item) {\n            this.retained = true;\n            this.iterable.updateValueReference(this.value, item);\n            this.iterable.updateMemoReference(this.memo, item);\n        };\n\n        ListItem.prototype.shouldRemove = function shouldRemove() {\n            return !this.retained;\n        };\n\n        ListItem.prototype.reset = function reset() {\n            this.retained = false;\n            this.seen = false;\n        };\n\n        return ListItem;\n    }(_util.ListNode);\n\n    var IterationArtifacts = function () {\n        function IterationArtifacts(iterable) {\n            (0, _emberBabel.classCallCheck)(this, IterationArtifacts);\n\n            this.iterator = null;\n            this.map = (0, _util.dict)();\n            this.list = new _util.LinkedList();\n            this.tag = iterable.tag;\n            this.iterable = iterable;\n        }\n\n        IterationArtifacts.prototype.isEmpty = function isEmpty() {\n            var iterator = this.iterator = this.iterable.iterate();\n            return iterator.isEmpty();\n        };\n\n        IterationArtifacts.prototype.iterate = function iterate() {\n            var iterator = void 0;\n            if (this.iterator === null) {\n                iterator = this.iterable.iterate();\n            } else {\n                iterator = this.iterator;\n            }\n            this.iterator = null;\n            return iterator;\n        };\n\n        IterationArtifacts.prototype.has = function has(key) {\n            return !!this.map[key];\n        };\n\n        IterationArtifacts.prototype.get = function get(key) {\n            return this.map[key];\n        };\n\n        IterationArtifacts.prototype.wasSeen = function wasSeen(key) {\n            var node = this.map[key];\n            return node !== undefined && node.seen;\n        };\n\n        IterationArtifacts.prototype.append = function append(item) {\n            var map = this.map,\n                list = this.list,\n                iterable = this.iterable;\n\n            var node = map[item.key] = new ListItem(iterable, item);\n            list.append(node);\n            return node;\n        };\n\n        IterationArtifacts.prototype.insertBefore = function insertBefore(item, reference) {\n            var map = this.map,\n                list = this.list,\n                iterable = this.iterable;\n\n            var node = map[item.key] = new ListItem(iterable, item);\n            node.retained = true;\n            list.insertBefore(node, reference);\n            return node;\n        };\n\n        IterationArtifacts.prototype.move = function move(item, reference) {\n            var list = this.list;\n\n            item.retained = true;\n            list.remove(item);\n            list.insertBefore(item, reference);\n        };\n\n        IterationArtifacts.prototype.remove = function remove(item) {\n            var list = this.list;\n\n            list.remove(item);\n            delete this.map[item.key];\n        };\n\n        IterationArtifacts.prototype.nextNode = function nextNode(item) {\n            return this.list.nextNode(item);\n        };\n\n        IterationArtifacts.prototype.head = function head() {\n            return this.list.head();\n        };\n\n        return IterationArtifacts;\n    }();\n\n    var ReferenceIterator = function () {\n        // if anyone needs to construct this object with something other than\n        // an iterable, let @wycats know.\n        function ReferenceIterator(iterable) {\n            (0, _emberBabel.classCallCheck)(this, ReferenceIterator);\n\n            this.iterator = null;\n            var artifacts = new IterationArtifacts(iterable);\n            this.artifacts = artifacts;\n        }\n\n        ReferenceIterator.prototype.next = function next() {\n            var artifacts = this.artifacts;\n\n            var iterator = this.iterator = this.iterator || artifacts.iterate();\n            var item = iterator.next();\n            if (item === null) return null;\n            return artifacts.append(item);\n        };\n\n        return ReferenceIterator;\n    }();\n\n    var Phase;\n    (function (Phase) {\n        Phase[Phase[\"Append\"] = 0] = \"Append\";\n        Phase[Phase[\"Prune\"] = 1] = \"Prune\";\n        Phase[Phase[\"Done\"] = 2] = \"Done\";\n    })(Phase || (Phase = {}));\n\n    var IteratorSynchronizer = function () {\n        function IteratorSynchronizer(_ref2) {\n            var target = _ref2.target,\n                artifacts = _ref2.artifacts;\n            (0, _emberBabel.classCallCheck)(this, IteratorSynchronizer);\n\n            this.target = target;\n            this.artifacts = artifacts;\n            this.iterator = artifacts.iterate();\n            this.current = artifacts.head();\n        }\n\n        IteratorSynchronizer.prototype.sync = function sync() {\n            var phase = Phase.Append;\n            while (true) {\n                switch (phase) {\n                    case Phase.Append:\n                        phase = this.nextAppend();\n                        break;\n                    case Phase.Prune:\n                        phase = this.nextPrune();\n                        break;\n                    case Phase.Done:\n                        this.nextDone();\n                        return;\n                }\n            }\n        };\n\n        IteratorSynchronizer.prototype.advanceToKey = function advanceToKey(key) {\n            var current = this.current,\n                artifacts = this.artifacts;\n\n            var seek = current;\n            while (seek !== null && seek.key !== key) {\n                seek.seen = true;\n                seek = artifacts.nextNode(seek);\n            }\n            if (seek !== null) {\n                this.current = artifacts.nextNode(seek);\n            }\n        };\n\n        IteratorSynchronizer.prototype.nextAppend = function nextAppend() {\n            var iterator = this.iterator,\n                current = this.current,\n                artifacts = this.artifacts;\n\n            var item = iterator.next();\n            if (item === null) {\n                return this.startPrune();\n            }\n            var key = item.key;\n\n            if (current !== null && current.key === key) {\n                this.nextRetain(item);\n            } else if (artifacts.has(key)) {\n                this.nextMove(item);\n            } else {\n                this.nextInsert(item);\n            }\n            return Phase.Append;\n        };\n\n        IteratorSynchronizer.prototype.nextRetain = function nextRetain(item) {\n            var artifacts = this.artifacts,\n                current = this.current;\n\n            current = current;\n            current.update(item);\n            this.current = artifacts.nextNode(current);\n            this.target.retain(item.key, current.value, current.memo);\n        };\n\n        IteratorSynchronizer.prototype.nextMove = function nextMove(item) {\n            var current = this.current,\n                artifacts = this.artifacts,\n                target = this.target;\n            var key = item.key;\n\n            var found = artifacts.get(item.key);\n            found.update(item);\n            if (artifacts.wasSeen(item.key)) {\n                artifacts.move(found, current);\n                target.move(found.key, found.value, found.memo, current ? current.key : null);\n            } else {\n                this.advanceToKey(key);\n            }\n        };\n\n        IteratorSynchronizer.prototype.nextInsert = function nextInsert(item) {\n            var artifacts = this.artifacts,\n                target = this.target,\n                current = this.current;\n\n            var node = artifacts.insertBefore(item, current);\n            target.insert(node.key, node.value, node.memo, current ? current.key : null);\n        };\n\n        IteratorSynchronizer.prototype.startPrune = function startPrune() {\n            this.current = this.artifacts.head();\n            return Phase.Prune;\n        };\n\n        IteratorSynchronizer.prototype.nextPrune = function nextPrune() {\n            var artifacts = this.artifacts,\n                target = this.target,\n                current = this.current;\n\n            if (current === null) {\n                return Phase.Done;\n            }\n            var node = current;\n            this.current = artifacts.nextNode(node);\n            if (node.shouldRemove()) {\n                artifacts.remove(node);\n                target.delete(node.key);\n            } else {\n                node.reset();\n            }\n            return Phase.Prune;\n        };\n\n        IteratorSynchronizer.prototype.nextDone = function nextDone() {\n            this.target.done();\n        };\n\n        return IteratorSynchronizer;\n    }();\n\n    exports.ConstReference = ConstReference;\n    exports.ListItem = ListItem;\n    exports.IterationArtifacts = IterationArtifacts;\n    exports.ReferenceIterator = ReferenceIterator;\n    exports.IteratorSynchronizer = IteratorSynchronizer;\n    exports.CONSTANT = CONSTANT;\n    exports.INITIAL = INITIAL;\n    exports.VOLATILE = VOLATILE;\n    exports.RevisionTag = RevisionTag;\n    exports.TagWrapper = TagWrapper;\n    exports.CONSTANT_TAG = CONSTANT_TAG;\n    exports.VOLATILE_TAG = VOLATILE_TAG;\n    exports.CURRENT_TAG = CURRENT_TAG;\n    exports.isConst = isConst;\n    exports.isConstTag = isConstTag;\n    exports.bump = bump;\n    exports.DirtyableTag = DirtyableTag;\n    exports.combineTagged = combineTagged;\n    exports.combineSlice = combineSlice;\n    exports.combine = combine;\n    exports.CachedTag = CachedTag;\n    exports.UpdatableTag = UpdatableTag;\n    exports.CachedReference = CachedReference;\n    exports.map = map;\n    exports.ReferenceCache = ReferenceCache;\n    exports.isModified = isModified;\n});","enifed('@glimmer/runtime', ['exports', 'ember-babel', '@glimmer/util', '@glimmer/vm', '@glimmer/reference', '@glimmer/low-level'], function (exports, _emberBabel, _util, _vm2, _reference, _lowLevel) {\n    'use strict';\n\n    exports.hasCapability = exports.capabilityFlagsFrom = exports.Cursor = exports.ConcreteBounds = exports.RehydrateBuilder = exports.rehydrationBuilder = exports.clientBuilder = exports.NewElementBuilder = exports.normalizeProperty = exports.insertHTMLBefore = exports.isWhitespace = exports.DOMTreeConstruction = exports.IDOMChanges = exports.SVG_NAMESPACE = exports.DOMChanges = exports.curry = exports.isCurriedComponentDefinition = exports.CurriedComponentDefinition = exports.MINIMAL_CAPABILITIES = exports.DEFAULT_CAPABILITIES = exports.DefaultEnvironment = exports.Environment = exports.Scope = exports.EMPTY_ARGS = exports.DynamicAttribute = exports.SimpleDynamicAttribute = exports.RenderResult = exports.UpdatingVM = exports.LowLevelVM = exports.getDynamicVar = exports.resetDebuggerCallback = exports.setDebuggerCallback = exports.ConditionalReference = exports.PrimitiveReference = exports.UNDEFINED_REFERENCE = exports.NULL_REFERENCE = exports.renderMain = undefined;\n\n    var AppendOpcodes = function () {\n        function AppendOpcodes() {\n            (0, _emberBabel.classCallCheck)(this, AppendOpcodes);\n\n            this.evaluateOpcode = (0, _util.fillNulls)(82 /* Size */).slice();\n        }\n\n        AppendOpcodes.prototype.add = function add(name, evaluate) {\n            var kind = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'syscall';\n\n            this.evaluateOpcode[name] = { syscall: kind === 'syscall', evaluate: evaluate };\n        };\n\n        AppendOpcodes.prototype.debugBefore = function debugBefore(vm$$1, opcode, type) {\n            var sp = void 0;\n            var state = void 0;\n            return { sp: sp, state: state };\n        };\n\n        AppendOpcodes.prototype.debugAfter = function debugAfter(vm$$1, opcode, type, pre) {\n            var expectedChange = void 0;\n            var sp = pre.sp,\n                state = pre.state;\n\n            var metadata = null;\n            if (metadata !== null) {\n                if (typeof metadata.stackChange === 'number') {\n                    expectedChange = metadata.stackChange;\n                } else {\n                    expectedChange = metadata.stackChange({ opcode: opcode, constants: vm$$1.constants, state: state });\n                    if (isNaN(expectedChange)) throw (0, _util.unreachable)();\n                }\n            }\n        };\n\n        AppendOpcodes.prototype.evaluate = function evaluate(vm$$1, opcode, type) {\n            var operation = this.evaluateOpcode[type];\n            if (operation.syscall) {\n                operation.evaluate(vm$$1, opcode);\n            } else {\n                operation.evaluate(vm$$1.inner, opcode);\n            }\n        };\n\n        return AppendOpcodes;\n    }();\n\n    var APPEND_OPCODES = new AppendOpcodes();\n\n    var AbstractOpcode = function AbstractOpcode() {\n        (0, _emberBabel.classCallCheck)(this, AbstractOpcode);\n\n        (0, _util.initializeGuid)(this);\n    };\n\n    var UpdatingOpcode = function (_AbstractOpcode) {\n        (0, _emberBabel.inherits)(UpdatingOpcode, _AbstractOpcode);\n\n        function UpdatingOpcode() {\n            (0, _emberBabel.classCallCheck)(this, UpdatingOpcode);\n\n            var _this = (0, _emberBabel.possibleConstructorReturn)(this, _AbstractOpcode.apply(this, arguments));\n\n            _this.next = null;\n            _this.prev = null;\n            return _this;\n        }\n\n        return UpdatingOpcode;\n    }(AbstractOpcode);\n\n    var PrimitiveReference = function (_ConstReference) {\n        (0, _emberBabel.inherits)(PrimitiveReference, _ConstReference);\n\n        function PrimitiveReference(value) {\n            (0, _emberBabel.classCallCheck)(this, PrimitiveReference);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _ConstReference.call(this, value));\n        }\n\n        PrimitiveReference.create = function create(value) {\n            if (value === undefined) {\n                return UNDEFINED_REFERENCE;\n            } else if (value === null) {\n                return NULL_REFERENCE;\n            } else if (value === true) {\n                return TRUE_REFERENCE;\n            } else if (value === false) {\n                return FALSE_REFERENCE;\n            } else if (typeof value === 'number') {\n                return new ValueReference(value);\n            } else {\n                return new StringReference(value);\n            }\n        };\n\n        PrimitiveReference.prototype.get = function get(_key) {\n            return UNDEFINED_REFERENCE;\n        };\n\n        return PrimitiveReference;\n    }(_reference.ConstReference);\n\n    var StringReference = function (_PrimitiveReference) {\n        (0, _emberBabel.inherits)(StringReference, _PrimitiveReference);\n\n        function StringReference() {\n            (0, _emberBabel.classCallCheck)(this, StringReference);\n\n            var _this3 = (0, _emberBabel.possibleConstructorReturn)(this, _PrimitiveReference.apply(this, arguments));\n\n            _this3.lengthReference = null;\n            return _this3;\n        }\n\n        StringReference.prototype.get = function get(key) {\n            if (key === 'length') {\n                var lengthReference = this.lengthReference;\n\n                if (lengthReference === null) {\n                    lengthReference = this.lengthReference = new ValueReference(this.inner.length);\n                }\n                return lengthReference;\n            } else {\n                return _PrimitiveReference.prototype.get.call(this, key);\n            }\n        };\n\n        return StringReference;\n    }(PrimitiveReference);\n\n    var ValueReference = function (_PrimitiveReference2) {\n        (0, _emberBabel.inherits)(ValueReference, _PrimitiveReference2);\n\n        function ValueReference(value) {\n            (0, _emberBabel.classCallCheck)(this, ValueReference);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _PrimitiveReference2.call(this, value));\n        }\n\n        return ValueReference;\n    }(PrimitiveReference);\n\n    var UNDEFINED_REFERENCE = new ValueReference(undefined);\n    var NULL_REFERENCE = new ValueReference(null);\n    var TRUE_REFERENCE = new ValueReference(true);\n    var FALSE_REFERENCE = new ValueReference(false);\n\n    var ConditionalReference = function () {\n        function ConditionalReference(inner) {\n            (0, _emberBabel.classCallCheck)(this, ConditionalReference);\n\n            this.inner = inner;\n            this.tag = inner.tag;\n        }\n\n        ConditionalReference.prototype.value = function value() {\n            return this.toBool(this.inner.value());\n        };\n\n        ConditionalReference.prototype.toBool = function toBool(value) {\n            return !!value;\n        };\n\n        return ConditionalReference;\n    }();\n\n    var ConcatReference = function (_CachedReference) {\n        (0, _emberBabel.inherits)(ConcatReference, _CachedReference);\n\n        function ConcatReference(parts) {\n            (0, _emberBabel.classCallCheck)(this, ConcatReference);\n\n            var _this5 = (0, _emberBabel.possibleConstructorReturn)(this, _CachedReference.call(this));\n\n            _this5.parts = parts;\n            _this5.tag = (0, _reference.combineTagged)(parts);\n            return _this5;\n        }\n\n        ConcatReference.prototype.compute = function compute() {\n            var parts = new Array();\n            for (var i = 0; i < this.parts.length; i++) {\n                var value = this.parts[i].value();\n                if (value !== null && value !== undefined) {\n                    parts[i] = castToString(value);\n                }\n            }\n            if (parts.length > 0) {\n                return parts.join('');\n            }\n            return null;\n        };\n\n        return ConcatReference;\n    }(_reference.CachedReference);\n\n    function castToString(value) {\n        if (typeof value.toString !== 'function') {\n            return '';\n        }\n        return String(value);\n    }\n\n    APPEND_OPCODES.add(1 /* Helper */, function (vm$$1, _ref) {\n        var handle = _ref.op1;\n\n        var stack = vm$$1.stack;\n        var helper = vm$$1.constants.resolveHandle(handle);\n        var args = stack.pop();\n        var value = helper(vm$$1, args);\n        vm$$1.loadValue(_vm2.Register.v0, value);\n    });\n    APPEND_OPCODES.add(4 /* GetVariable */, function (vm$$1, _ref2) {\n        var symbol = _ref2.op1;\n\n        var expr = vm$$1.referenceForSymbol(symbol);\n        vm$$1.stack.push(expr);\n    });\n    APPEND_OPCODES.add(2 /* SetVariable */, function (vm$$1, _ref3) {\n        var symbol = _ref3.op1;\n\n        var expr = vm$$1.stack.pop();\n        vm$$1.scope().bindSymbol(symbol, expr);\n    });\n    APPEND_OPCODES.add(3 /* SetBlock */, function (vm$$1, _ref4) {\n        var symbol = _ref4.op1;\n\n        var handle = vm$$1.stack.pop();\n        var scope = vm$$1.stack.pop(); // FIXME(mmun): shouldn't need to cast this\n        var table = vm$$1.stack.pop();\n        var block = table ? [handle, scope, table] : null;\n        vm$$1.scope().bindBlock(symbol, block);\n    });\n    APPEND_OPCODES.add(80 /* ResolveMaybeLocal */, function (vm$$1, _ref5) {\n        var _name = _ref5.op1;\n\n        var name = vm$$1.constants.getString(_name);\n        var locals = vm$$1.scope().getPartialMap();\n        var ref = locals[name];\n        if (ref === undefined) {\n            ref = vm$$1.getSelf().get(name);\n        }\n        vm$$1.stack.push(ref);\n    });\n    APPEND_OPCODES.add(17 /* RootScope */, function (vm$$1, _ref6) {\n        var symbols = _ref6.op1,\n            bindCallerScope = _ref6.op2;\n\n        vm$$1.pushRootScope(symbols, !!bindCallerScope);\n    });\n    APPEND_OPCODES.add(5 /* GetProperty */, function (vm$$1, _ref7) {\n        var _key = _ref7.op1;\n\n        var key = vm$$1.constants.getString(_key);\n        var expr = vm$$1.stack.pop();\n        vm$$1.stack.push(expr.get(key));\n    });\n    APPEND_OPCODES.add(6 /* GetBlock */, function (vm$$1, _ref8) {\n        var _block = _ref8.op1;\n        var stack = vm$$1.stack;\n\n        var block = vm$$1.scope().getBlock(_block);\n        if (block) {\n            stack.push(block[2]);\n            stack.push(block[1]);\n            stack.push(block[0]);\n        } else {\n            stack.push(null);\n            stack.push(null);\n            stack.push(null);\n        }\n    });\n    APPEND_OPCODES.add(7 /* HasBlock */, function (vm$$1, _ref9) {\n        var _block = _ref9.op1;\n\n        var hasBlock = !!vm$$1.scope().getBlock(_block);\n        vm$$1.stack.push(hasBlock ? TRUE_REFERENCE : FALSE_REFERENCE);\n    });\n    APPEND_OPCODES.add(8 /* HasBlockParams */, function (vm$$1) {\n        // FIXME(mmun): should only need to push the symbol table\n        var block = vm$$1.stack.pop();\n        var scope = vm$$1.stack.pop();\n\n        var table = vm$$1.stack.pop();\n        var hasBlockParams = table && table.parameters.length;\n        vm$$1.stack.push(hasBlockParams ? TRUE_REFERENCE : FALSE_REFERENCE);\n    });\n    APPEND_OPCODES.add(9 /* Concat */, function (vm$$1, _ref10) {\n        var count = _ref10.op1;\n\n        var out = new Array(count);\n        for (var i = count; i > 0; i--) {\n            var offset = i - 1;\n            out[offset] = vm$$1.stack.pop();\n        }\n        vm$$1.stack.push(new ConcatReference(out));\n    });\n\n    var CURRIED_COMPONENT_DEFINITION_BRAND = 'CURRIED COMPONENT DEFINITION [id=6f00feb9-a0ef-4547-99ea-ac328f80acea]';\n    function isCurriedComponentDefinition(definition) {\n        return !!(definition && definition[CURRIED_COMPONENT_DEFINITION_BRAND]);\n    }\n\n    var CurriedComponentDefinition = function () {\n        /** @internal */\n        function CurriedComponentDefinition(inner, args) {\n            (0, _emberBabel.classCallCheck)(this, CurriedComponentDefinition);\n\n            this.inner = inner;\n            this.args = args;\n            this[CURRIED_COMPONENT_DEFINITION_BRAND] = true;\n        }\n\n        CurriedComponentDefinition.prototype.unwrap = function unwrap(args) {\n            args.realloc(this.offset);\n            var definition = this;\n            while (true) {\n                var _definition = definition,\n                    curriedArgs = _definition.args,\n                    inner = _definition.inner;\n\n                if (curriedArgs) {\n                    args.positional.prepend(curriedArgs.positional);\n                    args.named.merge(curriedArgs.named);\n                }\n                if (!isCurriedComponentDefinition(inner)) {\n                    return inner;\n                }\n                definition = inner;\n            }\n        };\n\n        (0, _emberBabel.createClass)(CurriedComponentDefinition, [{\n            key: 'offset',\n            get: function () {\n                var inner = this.inner,\n                    args = this.args;\n\n                var length = args ? args.positional.length : 0;\n                return isCurriedComponentDefinition(inner) ? length + inner.offset : length;\n            }\n        }]);\n        return CurriedComponentDefinition;\n    }();\n\n    function curry(spec) {\n        var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n        return new CurriedComponentDefinition(spec, args);\n    }\n\n    var IsCurriedComponentDefinitionReference = function (_ConditionalReference) {\n        (0, _emberBabel.inherits)(IsCurriedComponentDefinitionReference, _ConditionalReference);\n\n        function IsCurriedComponentDefinitionReference() {\n            (0, _emberBabel.classCallCheck)(this, IsCurriedComponentDefinitionReference);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _ConditionalReference.apply(this, arguments));\n        }\n\n        IsCurriedComponentDefinitionReference.create = function create(inner) {\n            return new IsCurriedComponentDefinitionReference(inner);\n        };\n\n        IsCurriedComponentDefinitionReference.prototype.toBool = function toBool(value) {\n            return isCurriedComponentDefinition(value);\n        };\n\n        return IsCurriedComponentDefinitionReference;\n    }(ConditionalReference);\n\n    APPEND_OPCODES.add(24 /* DynamicContent */, function (vm$$1) {\n        var reference$$1 = vm$$1.stack.pop();\n        var isTrusting = vm$$1.fetchValue(_vm2.Register.t0);\n        var value = reference$$1.value();\n        var content = void 0;\n        if (isTrusting) {\n            content = vm$$1.elements().appendTrustingDynamicContent(value);\n        } else {\n            content = vm$$1.elements().appendCautiousDynamicContent(value);\n        }\n        if (!(0, _reference.isConst)(reference$$1)) {\n            vm$$1.updateWith(new UpdateDynamicContentOpcode(reference$$1, content));\n        }\n        vm$$1.loadValue(_vm2.Register.t0, null);\n    });\n\n    var UpdateDynamicContentOpcode = function (_UpdatingOpcode) {\n        (0, _emberBabel.inherits)(UpdateDynamicContentOpcode, _UpdatingOpcode);\n\n        function UpdateDynamicContentOpcode(reference$$1, content) {\n            (0, _emberBabel.classCallCheck)(this, UpdateDynamicContentOpcode);\n\n            var _this7 = (0, _emberBabel.possibleConstructorReturn)(this, _UpdatingOpcode.call(this));\n\n            _this7.reference = reference$$1;\n            _this7.content = content;\n            _this7.tag = reference$$1.tag;\n            return _this7;\n        }\n\n        UpdateDynamicContentOpcode.prototype.evaluate = function evaluate(vm$$1) {\n            var content = this.content,\n                reference$$1 = this.reference;\n\n            content.update(vm$$1.env, reference$$1.value());\n        };\n\n        return UpdateDynamicContentOpcode;\n    }(UpdatingOpcode);\n\n    APPEND_OPCODES.add(18 /* ChildScope */, function (vm$$1) {\n        return vm$$1.pushChildScope();\n    });\n    APPEND_OPCODES.add(19 /* PopScope */, function (vm$$1) {\n        return vm$$1.popScope();\n    });\n    APPEND_OPCODES.add(36 /* PushDynamicScope */, function (vm$$1) {\n        return vm$$1.pushDynamicScope();\n    });\n    APPEND_OPCODES.add(37 /* PopDynamicScope */, function (vm$$1) {\n        return vm$$1.popDynamicScope();\n    });\n    APPEND_OPCODES.add(10 /* Constant */, function (vm$$1, _ref11) {\n        var other = _ref11.op1;\n\n        vm$$1.stack.push(vm$$1.constants.getOther(other));\n    });\n    APPEND_OPCODES.add(11 /* Primitive */, function (vm$$1, _ref12) {\n        var primitive = _ref12.op1;\n\n        var stack = vm$$1.stack;\n        var flag = primitive & 7; // 111\n        var value = primitive >> 3;\n        switch (flag) {\n            case 0 /* NUMBER */:\n                stack.push(value);\n                break;\n            case 1 /* FLOAT */:\n                stack.push(vm$$1.constants.getNumber(value));\n                break;\n            case 2 /* STRING */:\n                stack.push(vm$$1.constants.getString(value));\n                break;\n            case 3 /* BOOLEAN_OR_VOID */:\n                stack.pushEncodedImmediate(primitive);\n                break;\n            case 4 /* NEGATIVE */:\n                stack.push(vm$$1.constants.getNumber(value));\n                break;\n            case 5 /* BIG_NUM */:\n                stack.push(vm$$1.constants.getNumber(value));\n                break;\n        }\n    });\n    APPEND_OPCODES.add(12 /* PrimitiveReference */, function (vm$$1) {\n        var stack = vm$$1.stack;\n        stack.push(PrimitiveReference.create(stack.pop()));\n    });\n    APPEND_OPCODES.add(13 /* Dup */, function (vm$$1, _ref13) {\n        var register = _ref13.op1,\n            offset = _ref13.op2;\n\n        var position = vm$$1.fetchValue(register) - offset;\n        vm$$1.stack.dup(position);\n    });\n    APPEND_OPCODES.add(14 /* Pop */, function (vm$$1, _ref14) {\n        var count = _ref14.op1;\n\n        vm$$1.stack.pop(count);\n    });\n    APPEND_OPCODES.add(15 /* Load */, function (vm$$1, _ref15) {\n        var register = _ref15.op1;\n\n        vm$$1.load(register);\n    });\n    APPEND_OPCODES.add(16 /* Fetch */, function (vm$$1, _ref16) {\n        var register = _ref16.op1;\n\n        vm$$1.fetch(register);\n    });\n    APPEND_OPCODES.add(35 /* BindDynamicScope */, function (vm$$1, _ref17) {\n        var _names = _ref17.op1;\n\n        var names = vm$$1.constants.getArray(_names);\n        vm$$1.bindDynamicScope(names);\n    });\n    APPEND_OPCODES.add(49 /* Enter */, function (vm$$1, _ref18) {\n        var args = _ref18.op1;\n\n        vm$$1.enter(args);\n    });\n    APPEND_OPCODES.add(50 /* Exit */, function (vm$$1) {\n        vm$$1.exit();\n    });\n    APPEND_OPCODES.add(40 /* PushSymbolTable */, function (vm$$1, _ref19) {\n        var _table = _ref19.op1;\n\n        var stack = vm$$1.stack;\n        stack.push(vm$$1.constants.getSerializable(_table));\n    });\n    APPEND_OPCODES.add(39 /* PushBlockScope */, function (vm$$1) {\n        var stack = vm$$1.stack;\n        stack.push(vm$$1.scope());\n    });\n    APPEND_OPCODES.add(38 /* CompileBlock */, function (vm$$1) {\n        var stack = vm$$1.stack;\n        var block = stack.pop();\n        if (block) {\n            stack.pushSmi(block.compile());\n        } else {\n            stack.pushNull();\n        }\n    });\n    APPEND_OPCODES.add(43 /* InvokeYield */, function (vm$$1) {\n        var stack = vm$$1.stack;\n\n        var handle = stack.pop();\n        var scope = stack.pop(); // FIXME(mmun): shouldn't need to cast this\n        var table = stack.pop();\n        var args = stack.pop();\n        if (table === null) {\n            // To balance the pop{Frame,Scope}\n            vm$$1.pushFrame();\n            vm$$1.pushScope(scope); // Could be null but it doesnt matter as it is immediatelly popped.\n            return;\n        }\n        var invokingScope = scope;\n        // If necessary, create a child scope\n        {\n            var locals = table.parameters;\n            var localsCount = locals.length;\n            if (localsCount > 0) {\n                invokingScope = invokingScope.child();\n                for (var i = 0; i < localsCount; i++) {\n                    invokingScope.bindSymbol(locals[i], args.at(i));\n                }\n            }\n        }\n        vm$$1.pushFrame();\n        vm$$1.pushScope(invokingScope);\n        vm$$1.call(handle);\n    });\n    APPEND_OPCODES.add(45 /* JumpIf */, function (vm$$1, _ref20) {\n        var target = _ref20.op1;\n\n        var reference$$1 = vm$$1.stack.pop();\n        if ((0, _reference.isConst)(reference$$1)) {\n            if (reference$$1.value()) {\n                vm$$1.goto(target);\n            }\n        } else {\n            var cache = new _reference.ReferenceCache(reference$$1);\n            if (cache.peek()) {\n                vm$$1.goto(target);\n            }\n            vm$$1.updateWith(new Assert(cache));\n        }\n    });\n    APPEND_OPCODES.add(46 /* JumpUnless */, function (vm$$1, _ref21) {\n        var target = _ref21.op1;\n\n        var reference$$1 = vm$$1.stack.pop();\n        if ((0, _reference.isConst)(reference$$1)) {\n            if (!reference$$1.value()) {\n                vm$$1.goto(target);\n            }\n        } else {\n            var cache = new _reference.ReferenceCache(reference$$1);\n            if (!cache.peek()) {\n                vm$$1.goto(target);\n            }\n            vm$$1.updateWith(new Assert(cache));\n        }\n    });\n    APPEND_OPCODES.add(51 /* ToBoolean */, function (vm$$1) {\n        var env = vm$$1.env,\n            stack = vm$$1.stack;\n\n        stack.push(env.toConditionalReference(stack.pop()));\n    });\n\n    var Assert = function (_UpdatingOpcode2) {\n        (0, _emberBabel.inherits)(Assert, _UpdatingOpcode2);\n\n        function Assert(cache) {\n            (0, _emberBabel.classCallCheck)(this, Assert);\n\n            var _this8 = (0, _emberBabel.possibleConstructorReturn)(this, _UpdatingOpcode2.call(this));\n\n            _this8.type = 'assert';\n            _this8.tag = cache.tag;\n            _this8.cache = cache;\n            return _this8;\n        }\n\n        Assert.prototype.evaluate = function evaluate(vm$$1) {\n            var cache = this.cache;\n\n            if ((0, _reference.isModified)(cache.revalidate())) {\n                vm$$1.throw();\n            }\n        };\n\n        return Assert;\n    }(UpdatingOpcode);\n\n    var JumpIfNotModifiedOpcode = function (_UpdatingOpcode3) {\n        (0, _emberBabel.inherits)(JumpIfNotModifiedOpcode, _UpdatingOpcode3);\n\n        function JumpIfNotModifiedOpcode(tag, target) {\n            (0, _emberBabel.classCallCheck)(this, JumpIfNotModifiedOpcode);\n\n            var _this9 = (0, _emberBabel.possibleConstructorReturn)(this, _UpdatingOpcode3.call(this));\n\n            _this9.target = target;\n            _this9.type = 'jump-if-not-modified';\n            _this9.tag = tag;\n            _this9.lastRevision = tag.value();\n            return _this9;\n        }\n\n        JumpIfNotModifiedOpcode.prototype.evaluate = function evaluate(vm$$1) {\n            var tag = this.tag,\n                target = this.target,\n                lastRevision = this.lastRevision;\n\n            if (!vm$$1.alwaysRevalidate && tag.validate(lastRevision)) {\n                vm$$1.goto(target);\n            }\n        };\n\n        JumpIfNotModifiedOpcode.prototype.didModify = function didModify() {\n            this.lastRevision = this.tag.value();\n        };\n\n        return JumpIfNotModifiedOpcode;\n    }(UpdatingOpcode);\n\n    var DidModifyOpcode = function (_UpdatingOpcode4) {\n        (0, _emberBabel.inherits)(DidModifyOpcode, _UpdatingOpcode4);\n\n        function DidModifyOpcode(target) {\n            (0, _emberBabel.classCallCheck)(this, DidModifyOpcode);\n\n            var _this10 = (0, _emberBabel.possibleConstructorReturn)(this, _UpdatingOpcode4.call(this));\n\n            _this10.target = target;\n            _this10.type = 'did-modify';\n            _this10.tag = _reference.CONSTANT_TAG;\n            return _this10;\n        }\n\n        DidModifyOpcode.prototype.evaluate = function evaluate() {\n            this.target.didModify();\n        };\n\n        return DidModifyOpcode;\n    }(UpdatingOpcode);\n\n    var LabelOpcode = function () {\n        function LabelOpcode(label) {\n            (0, _emberBabel.classCallCheck)(this, LabelOpcode);\n\n            this.tag = _reference.CONSTANT_TAG;\n            this.type = 'label';\n            this.label = null;\n            this.prev = null;\n            this.next = null;\n            (0, _util.initializeGuid)(this);\n            this.label = label;\n        }\n\n        LabelOpcode.prototype.evaluate = function evaluate() {};\n\n        LabelOpcode.prototype.inspect = function inspect() {\n            return this.label + ' [' + this._guid + ']';\n        };\n\n        return LabelOpcode;\n    }();\n\n    APPEND_OPCODES.add(22 /* Text */, function (vm$$1, _ref22) {\n        var text = _ref22.op1;\n\n        vm$$1.elements().appendText(vm$$1.constants.getString(text));\n    });\n    APPEND_OPCODES.add(23 /* Comment */, function (vm$$1, _ref23) {\n        var text = _ref23.op1;\n\n        vm$$1.elements().appendComment(vm$$1.constants.getString(text));\n    });\n    APPEND_OPCODES.add(25 /* OpenElement */, function (vm$$1, _ref24) {\n        var tag = _ref24.op1;\n\n        vm$$1.elements().openElement(vm$$1.constants.getString(tag));\n    });\n    APPEND_OPCODES.add(26 /* OpenDynamicElement */, function (vm$$1) {\n        var tagName = vm$$1.stack.pop().value();\n        vm$$1.elements().openElement(tagName);\n    });\n    APPEND_OPCODES.add(33 /* PushRemoteElement */, function (vm$$1) {\n        var elementRef = vm$$1.stack.pop();\n        var nextSiblingRef = vm$$1.stack.pop();\n        var guidRef = vm$$1.stack.pop();\n        var element = void 0;\n        var nextSibling = void 0;\n        var guid = guidRef.value();\n        if ((0, _reference.isConst)(elementRef)) {\n            element = elementRef.value();\n        } else {\n            var cache = new _reference.ReferenceCache(elementRef);\n            element = cache.peek();\n            vm$$1.updateWith(new Assert(cache));\n        }\n        if ((0, _reference.isConst)(nextSiblingRef)) {\n            nextSibling = nextSiblingRef.value();\n        } else {\n            var _cache = new _reference.ReferenceCache(nextSiblingRef);\n            nextSibling = _cache.peek();\n            vm$$1.updateWith(new Assert(_cache));\n        }\n        vm$$1.elements().pushRemoteElement(element, guid, nextSibling);\n    });\n    APPEND_OPCODES.add(34 /* PopRemoteElement */, function (vm$$1) {\n        vm$$1.elements().popRemoteElement();\n    });\n    APPEND_OPCODES.add(30 /* FlushElement */, function (vm$$1) {\n        var operations = vm$$1.fetchValue(_vm2.Register.t0);\n        if (operations) {\n            operations.flush(vm$$1);\n            vm$$1.loadValue(_vm2.Register.t0, null);\n        }\n        vm$$1.elements().flushElement();\n    });\n    APPEND_OPCODES.add(31 /* CloseElement */, function (vm$$1) {\n        vm$$1.elements().closeElement();\n    });\n    APPEND_OPCODES.add(32 /* Modifier */, function (vm$$1, _ref25) {\n        var handle = _ref25.op1;\n\n        var manager = vm$$1.constants.resolveHandle(handle);\n        var stack = vm$$1.stack;\n        var args = stack.pop();\n\n        var _vm$$1$elements = vm$$1.elements(),\n            element = _vm$$1$elements.constructing,\n            updateOperations = _vm$$1$elements.updateOperations;\n\n        var dynamicScope = vm$$1.dynamicScope();\n        var modifier = manager.create(element, args, dynamicScope, updateOperations);\n        vm$$1.env.scheduleInstallModifier(modifier, manager);\n        var destructor = manager.getDestructor(modifier);\n        if (destructor) {\n            vm$$1.newDestroyable(destructor);\n        }\n        var tag = manager.getTag(modifier);\n        if (!(0, _reference.isConstTag)(tag)) {\n            vm$$1.updateWith(new UpdateModifierOpcode(tag, manager, modifier));\n        }\n    });\n\n    var UpdateModifierOpcode = function (_UpdatingOpcode5) {\n        (0, _emberBabel.inherits)(UpdateModifierOpcode, _UpdatingOpcode5);\n\n        function UpdateModifierOpcode(tag, manager, modifier) {\n            (0, _emberBabel.classCallCheck)(this, UpdateModifierOpcode);\n\n            var _this11 = (0, _emberBabel.possibleConstructorReturn)(this, _UpdatingOpcode5.call(this));\n\n            _this11.tag = tag;\n            _this11.manager = manager;\n            _this11.modifier = modifier;\n            _this11.type = 'update-modifier';\n            _this11.lastUpdated = tag.value();\n            return _this11;\n        }\n\n        UpdateModifierOpcode.prototype.evaluate = function evaluate(vm$$1) {\n            var manager = this.manager,\n                modifier = this.modifier,\n                tag = this.tag,\n                lastUpdated = this.lastUpdated;\n\n            if (!tag.validate(lastUpdated)) {\n                vm$$1.env.scheduleUpdateModifier(modifier, manager);\n                this.lastUpdated = tag.value();\n            }\n        };\n\n        return UpdateModifierOpcode;\n    }(UpdatingOpcode);\n\n    APPEND_OPCODES.add(27 /* StaticAttr */, function (vm$$1, _ref26) {\n        var _name = _ref26.op1,\n            _value = _ref26.op2,\n            _namespace = _ref26.op3;\n\n        var name = vm$$1.constants.getString(_name);\n        var value = vm$$1.constants.getString(_value);\n        var namespace = _namespace ? vm$$1.constants.getString(_namespace) : null;\n        vm$$1.elements().setStaticAttribute(name, value, namespace);\n    });\n    APPEND_OPCODES.add(28 /* DynamicAttr */, function (vm$$1, _ref27) {\n        var _name = _ref27.op1,\n            trusting = _ref27.op2,\n            _namespace = _ref27.op3;\n\n        var name = vm$$1.constants.getString(_name);\n        var reference$$1 = vm$$1.stack.pop();\n        var value = reference$$1.value();\n        var namespace = _namespace ? vm$$1.constants.getString(_namespace) : null;\n        var attribute = vm$$1.elements().setDynamicAttribute(name, value, !!trusting, namespace);\n        if (!(0, _reference.isConst)(reference$$1)) {\n            vm$$1.updateWith(new UpdateDynamicAttributeOpcode(reference$$1, attribute));\n        }\n    });\n\n    var UpdateDynamicAttributeOpcode = function (_UpdatingOpcode6) {\n        (0, _emberBabel.inherits)(UpdateDynamicAttributeOpcode, _UpdatingOpcode6);\n\n        function UpdateDynamicAttributeOpcode(reference$$1, attribute) {\n            (0, _emberBabel.classCallCheck)(this, UpdateDynamicAttributeOpcode);\n\n            var _this12 = (0, _emberBabel.possibleConstructorReturn)(this, _UpdatingOpcode6.call(this));\n\n            _this12.reference = reference$$1;\n            _this12.attribute = attribute;\n            _this12.type = 'patch-element';\n            _this12.tag = reference$$1.tag;\n            _this12.lastRevision = _this12.tag.value();\n            return _this12;\n        }\n\n        UpdateDynamicAttributeOpcode.prototype.evaluate = function evaluate(vm$$1) {\n            var attribute = this.attribute,\n                reference$$1 = this.reference,\n                tag = this.tag;\n\n            if (!tag.validate(this.lastRevision)) {\n                this.lastRevision = tag.value();\n                attribute.update(reference$$1.value(), vm$$1.env);\n            }\n        };\n\n        return UpdateDynamicAttributeOpcode;\n    }(UpdatingOpcode);\n\n    function resolveComponent(resolver, name, meta) {\n        var definition = resolver.lookupComponent(name, meta);\n        return definition;\n    }\n\n    var CurryComponentReference = function () {\n        function CurryComponentReference(inner, resolver, meta, args) {\n            (0, _emberBabel.classCallCheck)(this, CurryComponentReference);\n\n            this.inner = inner;\n            this.resolver = resolver;\n            this.meta = meta;\n            this.args = args;\n            this.tag = inner.tag;\n            this.lastValue = null;\n            this.lastDefinition = null;\n        }\n\n        CurryComponentReference.prototype.value = function value() {\n            var inner = this.inner,\n                lastValue = this.lastValue;\n\n            var value = inner.value();\n            if (value === lastValue) {\n                return this.lastDefinition;\n            }\n            var definition = null;\n            if (isCurriedComponentDefinition(value)) {\n                definition = value;\n            } else if (typeof value === 'string' && value) {\n                var resolver = this.resolver,\n                    meta = this.meta;\n\n                definition = resolveComponent(resolver, value, meta);\n            }\n            definition = this.curry(definition);\n            this.lastValue = value;\n            this.lastDefinition = definition;\n            return definition;\n        };\n\n        CurryComponentReference.prototype.get = function get() {\n            return UNDEFINED_REFERENCE;\n        };\n\n        CurryComponentReference.prototype.curry = function curry(definition) {\n            var args = this.args;\n\n            if (!args && isCurriedComponentDefinition(definition)) {\n                return definition;\n            } else if (!definition) {\n                return null;\n            } else {\n                return new CurriedComponentDefinition(definition, args);\n            }\n        };\n\n        return CurryComponentReference;\n    }();\n\n    function normalizeStringValue(value) {\n        if (isEmpty(value)) {\n            return '';\n        }\n        return String(value);\n    }\n    function normalizeTrustedValue(value) {\n        if (isEmpty(value)) {\n            return '';\n        }\n        if (isString(value)) {\n            return value;\n        }\n        if (isSafeString(value)) {\n            return value.toHTML();\n        }\n        if (isNode(value)) {\n            return value;\n        }\n        return String(value);\n    }\n    function isEmpty(value) {\n        return value === null || value === undefined || typeof value.toString !== 'function';\n    }\n    function isSafeString(value) {\n        return typeof value === 'object' && value !== null && typeof value.toHTML === 'function';\n    }\n    function isNode(value) {\n        return typeof value === 'object' && value !== null && typeof value.nodeType === 'number';\n    }\n    function isFragment(value) {\n        return isNode(value) && value.nodeType === 11;\n    }\n    function isString(value) {\n        return typeof value === 'string';\n    }\n\n    var ClassListReference = function () {\n        function ClassListReference(list) {\n            (0, _emberBabel.classCallCheck)(this, ClassListReference);\n\n            this.list = list;\n            this.tag = (0, _reference.combineTagged)(list);\n            this.list = list;\n        }\n\n        ClassListReference.prototype.value = function value() {\n            var ret = [];\n            var list = this.list;\n\n            for (var i = 0; i < list.length; i++) {\n                var value = normalizeStringValue(list[i].value());\n                if (value) ret.push(value);\n            }\n            return ret.length === 0 ? null : ret.join(' ');\n        };\n\n        return ClassListReference;\n    }();\n\n    /**\n     * Converts a ComponentCapabilities object into a 32-bit integer representation.\n     */\n    function capabilityFlagsFrom(capabilities) {\n        return 0 | (capabilities.dynamicLayout ? 1 /* DynamicLayout */ : 0) | (capabilities.dynamicTag ? 2 /* DynamicTag */ : 0) | (capabilities.prepareArgs ? 4 /* PrepareArgs */ : 0) | (capabilities.createArgs ? 8 /* CreateArgs */ : 0) | (capabilities.attributeHook ? 16 /* AttributeHook */ : 0) | (capabilities.elementHook ? 32 /* ElementHook */ : 0);\n    }\n    function hasCapability(capabilities, capability) {\n        return !!(capabilities & capability);\n    }\n\n    APPEND_OPCODES.add(57 /* IsComponent */, function (vm$$1) {\n        var stack = vm$$1.stack;\n        var ref = stack.pop();\n        stack.push(IsCurriedComponentDefinitionReference.create(ref));\n    });\n    APPEND_OPCODES.add(58 /* CurryComponent */, function (vm$$1, _ref28) {\n        var _meta = _ref28.op1;\n\n        var stack = vm$$1.stack;\n        var definition = stack.pop();\n        var capturedArgs = stack.pop();\n        var meta = vm$$1.constants.getSerializable(_meta);\n        var resolver = vm$$1.constants.resolver;\n        vm$$1.loadValue(_vm2.Register.v0, new CurryComponentReference(definition, resolver, meta, capturedArgs));\n        // expectStackChange(vm.stack, -args.length - 1, 'CurryComponent');\n    });\n    APPEND_OPCODES.add(59 /* PushComponentDefinition */, function (vm$$1, _ref29) {\n        var handle = _ref29.op1;\n\n        var definition = vm$$1.constants.resolveHandle(handle);\n        var manager = definition.manager;\n\n        var capabilities = capabilityFlagsFrom(manager.getCapabilities(definition.state));\n        var instance = {\n            definition: definition,\n            manager: manager,\n            capabilities: capabilities,\n            state: null,\n            handle: null,\n            table: null\n        };\n        vm$$1.stack.push(instance);\n    });\n    APPEND_OPCODES.add(62 /* ResolveDynamicComponent */, function (vm$$1, _ref30) {\n        var _meta = _ref30.op1;\n\n        var stack = vm$$1.stack;\n        var component = stack.pop().value();\n        var meta = vm$$1.constants.getSerializable(_meta);\n        vm$$1.loadValue(_vm2.Register.t1, null); // Clear the temp register\n        var definition = void 0;\n        if (typeof component === 'string') {\n            var resolver = vm$$1.constants.resolver;\n\n            var resolvedDefinition = resolveComponent(resolver, component, meta);\n            definition = resolvedDefinition;\n        } else if (isCurriedComponentDefinition(component)) {\n            definition = component;\n        } else {\n            throw (0, _util.unreachable)();\n        }\n        stack.push(definition);\n    });\n    APPEND_OPCODES.add(60 /* PushDynamicComponentInstance */, function (vm$$1) {\n        var stack = vm$$1.stack;\n\n        var definition = stack.pop();\n        var capabilities = void 0,\n            manager = void 0;\n        if (isCurriedComponentDefinition(definition)) {\n            manager = capabilities = null;\n        } else {\n            manager = definition.manager;\n            capabilities = capabilityFlagsFrom(manager.getCapabilities(definition.state));\n        }\n        stack.push({ definition: definition, capabilities: capabilities, manager: manager, state: null, handle: null, table: null });\n    });\n    APPEND_OPCODES.add(61 /* PushCurriedComponent */, function (vm$$1, _ref31) {\n        var _meta = _ref31.op1;\n\n        var stack = vm$$1.stack;\n        var component = stack.pop().value();\n        var definition = void 0;\n        if (isCurriedComponentDefinition(component)) {\n            definition = component;\n        } else {\n            throw (0, _util.unreachable)();\n        }\n        stack.push(definition);\n    });\n    APPEND_OPCODES.add(63 /* PushArgs */, function (vm$$1, _ref32) {\n        var _names = _ref32.op1,\n            flags = _ref32.op2;\n\n        var stack = vm$$1.stack;\n        var names = vm$$1.constants.getStringArray(_names);\n        var positionalCount = flags >> 4;\n        var synthetic = flags & 8;\n        var blockNames = [];\n        if (flags & 4) blockNames.push('main');\n        if (flags & 2) blockNames.push('else');\n        if (flags & 1) blockNames.push('attrs');\n        vm$$1.args.setup(stack, names, blockNames, positionalCount, !!synthetic);\n        stack.push(vm$$1.args);\n    });\n    APPEND_OPCODES.add(66 /* CaptureArgs */, function (vm$$1) {\n        var stack = vm$$1.stack;\n        var args = stack.pop();\n        var capturedArgs = args.capture();\n        stack.push(capturedArgs);\n    });\n    APPEND_OPCODES.add(65 /* PrepareArgs */, function (vm$$1, _ref33) {\n        var _state = _ref33.op1;\n\n        var stack = vm$$1.stack;\n        var instance = vm$$1.fetchValue(_state);\n        var args = stack.pop();\n        var definition = instance.definition;\n\n        if (isCurriedComponentDefinition(definition)) {\n            definition = resolveCurriedComponentDefinition(instance, definition, args);\n        }\n        var _definition2 = definition,\n            manager = _definition2.manager,\n            state = _definition2.state;\n\n        var capabilities = instance.capabilities;\n        if (hasCapability(capabilities, 4 /* PrepareArgs */) !== true) {\n            stack.push(args);\n            return;\n        }\n        var blocks = args.blocks.values;\n        var blockNames = args.blocks.names;\n        var preparedArgs = manager.prepareArgs(state, args);\n        if (preparedArgs) {\n            args.clear();\n            for (var i = 0; i < blocks.length; i++) {\n                stack.push(blocks[i]);\n            }\n            var positional = preparedArgs.positional,\n                named = preparedArgs.named;\n\n            var positionalCount = positional.length;\n            for (var _i = 0; _i < positionalCount; _i++) {\n                stack.push(positional[_i]);\n            }\n            var names = Object.keys(named);\n            for (var _i2 = 0; _i2 < names.length; _i2++) {\n                stack.push(named[names[_i2]]);\n            }\n            args.setup(stack, names, blockNames, positionalCount, true);\n        }\n        stack.push(args);\n    });\n    function resolveCurriedComponentDefinition(instance, definition, args) {\n        var unwrappedDefinition = instance.definition = definition.unwrap(args);\n        var manager = unwrappedDefinition.manager,\n            state = unwrappedDefinition.state;\n\n        instance.manager = manager;\n        instance.capabilities = capabilityFlagsFrom(manager.getCapabilities(state));\n        return unwrappedDefinition;\n    }\n    APPEND_OPCODES.add(67 /* CreateComponent */, function (vm$$1, _ref34) {\n        var flags = _ref34.op1,\n            _state = _ref34.op2;\n\n        var dynamicScope = vm$$1.dynamicScope();\n        var instance = vm$$1.fetchValue(_state);\n        var definition = instance.definition,\n            manager = instance.manager;\n\n        var capabilities = instance.capabilities = capabilityFlagsFrom(manager.getCapabilities(definition.state));\n        var hasDefaultBlock = flags & 1;\n        var args = null;\n        if (hasCapability(capabilities, 8 /* CreateArgs */)) {\n            args = vm$$1.stack.peek();\n        }\n        var state = manager.create(vm$$1.env, definition.state, args, dynamicScope, vm$$1.getSelf(), !!hasDefaultBlock);\n        // We want to reuse the `state` POJO here, because we know that the opcodes\n        // only transition at exactly one place.\n        instance.state = state;\n        var tag = manager.getTag(state);\n        if (!(0, _reference.isConstTag)(tag)) {\n            vm$$1.updateWith(new UpdateComponentOpcode(tag, state, manager, dynamicScope));\n        }\n    });\n    APPEND_OPCODES.add(68 /* RegisterComponentDestructor */, function (vm$$1, _ref35) {\n        var _state = _ref35.op1;\n\n        var _vm$$1$fetchValue = vm$$1.fetchValue(_state),\n            manager = _vm$$1$fetchValue.manager,\n            state = _vm$$1$fetchValue.state;\n\n        var destructor = manager.getDestructor(state);\n        if (destructor) vm$$1.newDestroyable(destructor);\n    });\n    APPEND_OPCODES.add(75 /* BeginComponentTransaction */, function (vm$$1) {\n        vm$$1.beginCacheGroup();\n        vm$$1.elements().pushSimpleBlock();\n    });\n    APPEND_OPCODES.add(69 /* PutComponentOperations */, function (vm$$1) {\n        vm$$1.loadValue(_vm2.Register.t0, new ComponentElementOperations());\n    });\n    APPEND_OPCODES.add(29 /* ComponentAttr */, function (vm$$1, _ref36) {\n        var _name = _ref36.op1,\n            trusting = _ref36.op2,\n            _namespace = _ref36.op3;\n\n        var name = vm$$1.constants.getString(_name);\n        var reference$$1 = vm$$1.stack.pop();\n        var namespace = _namespace ? vm$$1.constants.getString(_namespace) : null;\n        vm$$1.fetchValue(_vm2.Register.t0).setAttribute(name, reference$$1, !!trusting, namespace);\n    });\n\n    var ComponentElementOperations = function () {\n        function ComponentElementOperations() {\n            (0, _emberBabel.classCallCheck)(this, ComponentElementOperations);\n\n            this.attributes = (0, _util.dict)();\n            this.classes = [];\n        }\n\n        ComponentElementOperations.prototype.setAttribute = function setAttribute(name, value, trusting, namespace) {\n            var deferred = { value: value, namespace: namespace, trusting: trusting };\n            if (name === 'class') {\n                this.classes.push(value);\n            }\n            this.attributes[name] = deferred;\n        };\n\n        ComponentElementOperations.prototype.flush = function flush(vm$$1) {\n            for (var name in this.attributes) {\n                var attr = this.attributes[name];\n                var reference$$1 = attr.value,\n                    namespace = attr.namespace,\n                    trusting = attr.trusting;\n\n                if (name === 'class') {\n                    reference$$1 = new ClassListReference(this.classes);\n                }\n                if (name === 'type') {\n                    continue;\n                }\n                var attribute = vm$$1.elements().setDynamicAttribute(name, reference$$1.value(), trusting, namespace);\n                if (!(0, _reference.isConst)(reference$$1)) {\n                    vm$$1.updateWith(new UpdateDynamicAttributeOpcode(reference$$1, attribute));\n                }\n            }\n            if ('type' in this.attributes) {\n                var type = this.attributes.type;\n                var reference$$1 = type.value,\n                    namespace = type.namespace,\n                    trusting = type.trusting;\n\n                var _attribute = vm$$1.elements().setDynamicAttribute('type', reference$$1.value(), trusting, namespace);\n                if (!(0, _reference.isConst)(reference$$1)) {\n                    vm$$1.updateWith(new UpdateDynamicAttributeOpcode(reference$$1, _attribute));\n                }\n            }\n        };\n\n        return ComponentElementOperations;\n    }();\n\n    APPEND_OPCODES.add(77 /* DidCreateElement */, function (vm$$1, _ref37) {\n        var _state = _ref37.op1;\n\n        var _vm$$1$fetchValue2 = vm$$1.fetchValue(_state),\n            definition = _vm$$1$fetchValue2.definition,\n            state = _vm$$1$fetchValue2.state;\n\n        var manager = definition.manager;\n\n        var operations = vm$$1.fetchValue(_vm2.Register.t0);\n        var action = 'DidCreateElementOpcode#evaluate';\n        manager.didCreateElement(state, vm$$1.elements().expectConstructing(action), operations);\n    });\n    APPEND_OPCODES.add(70 /* GetComponentSelf */, function (vm$$1, _ref38) {\n        var _state = _ref38.op1;\n\n        var _vm$$1$fetchValue3 = vm$$1.fetchValue(_state),\n            definition = _vm$$1$fetchValue3.definition,\n            state = _vm$$1$fetchValue3.state;\n\n        var manager = definition.manager;\n\n        vm$$1.stack.push(manager.getSelf(state));\n    });\n    APPEND_OPCODES.add(71 /* GetComponentTagName */, function (vm$$1, _ref39) {\n        var _state = _ref39.op1;\n\n        var _vm$$1$fetchValue4 = vm$$1.fetchValue(_state),\n            definition = _vm$$1$fetchValue4.definition,\n            state = _vm$$1$fetchValue4.state;\n\n        var manager = definition.manager;\n\n        vm$$1.stack.push(manager.getTagName(state));\n    });\n    // Dynamic Invocation Only\n    APPEND_OPCODES.add(72 /* GetComponentLayout */, function (vm$$1, _ref40) {\n        var _state = _ref40.op1;\n\n        var instance = vm$$1.fetchValue(_state);\n        var manager = instance.manager,\n            definition = instance.definition;\n        var resolver = vm$$1.constants.resolver,\n            stack = vm$$1.stack;\n        var instanceState = instance.state,\n            capabilities = instance.capabilities;\n        var definitionState = definition.state;\n\n        var invoke = void 0;\n        if (hasStaticLayout(capabilities, manager)) {\n            invoke = manager.getLayout(definitionState, resolver);\n        } else if (hasDynamicLayout(capabilities, manager)) {\n            invoke = manager.getDynamicLayout(instanceState, resolver);\n        } else {\n            throw (0, _util.unreachable)();\n        }\n        stack.push(invoke.symbolTable);\n        stack.push(invoke.handle);\n    });\n    function hasStaticLayout(capabilities, _manager) {\n        return hasCapability(capabilities, 1 /* DynamicLayout */) === false;\n    }\n    function hasDynamicLayout(capabilities, _manager) {\n        return hasCapability(capabilities, 1 /* DynamicLayout */) === true;\n    }\n    APPEND_OPCODES.add(56 /* Main */, function (vm$$1, _ref41) {\n        var register = _ref41.op1;\n\n        var definition = vm$$1.stack.pop();\n        var invocation = vm$$1.stack.pop();\n        var manager = definition.manager;\n\n        var capabilities = capabilityFlagsFrom(manager.getCapabilities(definition.state));\n        var state = {\n            definition: definition,\n            manager: manager,\n            capabilities: capabilities,\n            state: null,\n            handle: invocation.handle,\n            table: invocation.symbolTable\n        };\n        vm$$1.loadValue(register, state);\n    });\n    APPEND_OPCODES.add(73 /* PopulateLayout */, function (vm$$1, _ref42) {\n        var _state = _ref42.op1;\n        var stack = vm$$1.stack;\n\n        var handle = stack.pop();\n        var table = stack.pop();\n        var state = vm$$1.fetchValue(_state);\n        state.handle = handle;\n        state.table = table;\n    });\n    // Dynamic Invocation Only\n    APPEND_OPCODES.add(74 /* InvokeComponentLayout */, function (vm$$1, _ref43) {\n        var _state = _ref43.op1;\n        var stack = vm$$1.stack;\n\n        var _vm$$1$fetchValue5 = vm$$1.fetchValue(_state),\n            handle = _vm$$1$fetchValue5.handle,\n            _vm$$1$fetchValue5$ta = _vm$$1$fetchValue5.table,\n            symbols = _vm$$1$fetchValue5$ta.symbols,\n            hasEval = _vm$$1$fetchValue5$ta.hasEval;\n\n        {\n            var self = stack.pop();\n            var scope = vm$$1.pushRootScope(symbols.length + 1, true);\n            scope.bindSelf(self);\n            var args = vm$$1.stack.pop();\n            var lookup = null;\n            if (hasEval) {\n                lookup = (0, _util.dict)();\n            }\n            var callerNames = args.named.atNames;\n            for (var i = callerNames.length - 1; i >= 0; i--) {\n                var atName = callerNames[i];\n                var symbol = symbols.indexOf(callerNames[i]);\n                var value = args.named.get(atName, false);\n                if (symbol !== -1) scope.bindSymbol(symbol + 1, value);\n                if (hasEval) lookup[atName] = value;\n            }\n            var bindBlock = function (symbolName, blockName) {\n                var symbol = symbols.indexOf(symbolName);\n                var block = blocks.get(blockName);\n                if (symbol !== -1) {\n                    scope.bindBlock(symbol + 1, block);\n                }\n                if (lookup) lookup[symbolName] = block;\n            };\n            var blocks = args.blocks;\n            bindBlock('&attrs', 'attrs');\n            bindBlock('&inverse', 'else');\n            bindBlock('&default', 'main');\n            if (lookup) scope.bindEvalScope(lookup);\n            vm$$1.call(handle);\n        }\n    });\n    APPEND_OPCODES.add(78 /* DidRenderLayout */, function (vm$$1, _ref44) {\n        var _state = _ref44.op1;\n\n        var _vm$$1$fetchValue6 = vm$$1.fetchValue(_state),\n            manager = _vm$$1$fetchValue6.manager,\n            state = _vm$$1$fetchValue6.state;\n\n        var bounds = vm$$1.elements().popBlock();\n        var mgr = manager;\n        mgr.didRenderLayout(state, bounds);\n        vm$$1.env.didCreate(state, manager);\n        vm$$1.updateWith(new DidUpdateLayoutOpcode(manager, state, bounds));\n    });\n    APPEND_OPCODES.add(76 /* CommitComponentTransaction */, function (vm$$1) {\n        vm$$1.commitCacheGroup();\n    });\n\n    var UpdateComponentOpcode = function (_UpdatingOpcode7) {\n        (0, _emberBabel.inherits)(UpdateComponentOpcode, _UpdatingOpcode7);\n\n        function UpdateComponentOpcode(tag, component, manager, dynamicScope) {\n            (0, _emberBabel.classCallCheck)(this, UpdateComponentOpcode);\n\n            var _this13 = (0, _emberBabel.possibleConstructorReturn)(this, _UpdatingOpcode7.call(this));\n\n            _this13.tag = tag;\n            _this13.component = component;\n            _this13.manager = manager;\n            _this13.dynamicScope = dynamicScope;\n            _this13.type = 'update-component';\n            return _this13;\n        }\n\n        UpdateComponentOpcode.prototype.evaluate = function evaluate(_vm) {\n            var component = this.component,\n                manager = this.manager,\n                dynamicScope = this.dynamicScope;\n\n            manager.update(component, dynamicScope);\n        };\n\n        return UpdateComponentOpcode;\n    }(UpdatingOpcode);\n\n    var DidUpdateLayoutOpcode = function (_UpdatingOpcode8) {\n        (0, _emberBabel.inherits)(DidUpdateLayoutOpcode, _UpdatingOpcode8);\n\n        function DidUpdateLayoutOpcode(manager, component, bounds) {\n            (0, _emberBabel.classCallCheck)(this, DidUpdateLayoutOpcode);\n\n            var _this14 = (0, _emberBabel.possibleConstructorReturn)(this, _UpdatingOpcode8.call(this));\n\n            _this14.manager = manager;\n            _this14.component = component;\n            _this14.bounds = bounds;\n            _this14.type = 'did-update-layout';\n            _this14.tag = _reference.CONSTANT_TAG;\n            return _this14;\n        }\n\n        DidUpdateLayoutOpcode.prototype.evaluate = function evaluate(vm$$1) {\n            var manager = this.manager,\n                component = this.component,\n                bounds = this.bounds;\n\n            manager.didUpdateLayout(component, bounds);\n            vm$$1.env.didUpdate(component, manager);\n        };\n\n        return DidUpdateLayoutOpcode;\n    }(UpdatingOpcode);\n\n    /* tslint:disable */\n    function debugCallback(context, get) {\n        console.info('Use `context`, and `get(<path>)` to debug this template.');\n        // for example...\n        context === get('this');\n        debugger;\n    }\n    /* tslint:enable */\n    var callback = debugCallback;\n    // For testing purposes\n    function setDebuggerCallback(cb) {\n        callback = cb;\n    }\n    function resetDebuggerCallback() {\n        callback = debugCallback;\n    }\n\n    var ScopeInspector = function () {\n        function ScopeInspector(scope, symbols, evalInfo) {\n            (0, _emberBabel.classCallCheck)(this, ScopeInspector);\n\n            this.scope = scope;\n            this.locals = (0, _util.dict)();\n            for (var i = 0; i < evalInfo.length; i++) {\n                var slot = evalInfo[i];\n                var name = symbols[slot - 1];\n                var ref = scope.getSymbol(slot);\n                this.locals[name] = ref;\n            }\n        }\n\n        ScopeInspector.prototype.get = function get(path) {\n            var scope = this.scope,\n                locals = this.locals;\n\n            var parts = path.split('.');\n\n            var _path$split = path.split('.'),\n                head = _path$split[0],\n                tail = _path$split.slice(1);\n\n            var evalScope = scope.getEvalScope();\n            var ref = void 0;\n            if (head === 'this') {\n                ref = scope.getSelf();\n            } else if (locals[head]) {\n                ref = locals[head];\n            } else if (head.indexOf('@') === 0 && evalScope[head]) {\n                ref = evalScope[head];\n            } else {\n                ref = this.scope.getSelf();\n                tail = parts;\n            }\n            return tail.reduce(function (r, part) {\n                return r.get(part);\n            }, ref);\n        };\n\n        return ScopeInspector;\n    }();\n\n    APPEND_OPCODES.add(81 /* Debugger */, function (vm$$1, _ref45) {\n        var _symbols = _ref45.op1,\n            _evalInfo = _ref45.op2;\n\n        var symbols = vm$$1.constants.getStringArray(_symbols);\n        var evalInfo = vm$$1.constants.getArray(_evalInfo);\n        var inspector = new ScopeInspector(vm$$1.scope(), symbols, evalInfo);\n        callback(vm$$1.getSelf().value(), function (path) {\n            return inspector.get(path).value();\n        });\n    });\n\n    APPEND_OPCODES.add(79 /* InvokePartial */, function (vm$$1, _ref46) {\n        var _meta = _ref46.op1,\n            _symbols = _ref46.op2,\n            _evalInfo = _ref46.op3;\n        var constants = vm$$1.constants,\n            resolver = vm$$1.constants.resolver,\n            stack = vm$$1.stack;\n\n        var name = stack.pop().value();\n        var meta = constants.getSerializable(_meta);\n        var outerSymbols = constants.getStringArray(_symbols);\n        var evalInfo = constants.getArray(_evalInfo);\n        var handle = resolver.lookupPartial(name, meta);\n        var definition = resolver.resolve(handle);\n\n        var _definition$getPartia = definition.getPartial(),\n            symbolTable = _definition$getPartia.symbolTable,\n            vmHandle = _definition$getPartia.handle;\n\n        {\n            var partialSymbols = symbolTable.symbols;\n            var outerScope = vm$$1.scope();\n            var partialScope = vm$$1.pushRootScope(partialSymbols.length, false);\n            var evalScope = outerScope.getEvalScope();\n            partialScope.bindCallerScope(outerScope.getCallerScope());\n            partialScope.bindEvalScope(evalScope);\n            partialScope.bindSelf(outerScope.getSelf());\n            var locals = Object.create(outerScope.getPartialMap());\n            for (var i = 0; i < evalInfo.length; i++) {\n                var slot = evalInfo[i];\n                var _name2 = outerSymbols[slot - 1];\n                var ref = outerScope.getSymbol(slot);\n                locals[_name2] = ref;\n            }\n            if (evalScope) {\n                for (var _i3 = 0; _i3 < partialSymbols.length; _i3++) {\n                    var _name3 = partialSymbols[_i3];\n                    var symbol = _i3 + 1;\n                    var value = evalScope[_name3];\n                    if (value !== undefined) partialScope.bind(symbol, value);\n                }\n            }\n            partialScope.bindPartialMap(locals);\n            vm$$1.pushFrame(); // sp += 2\n            vm$$1.call(vmHandle);\n        }\n    });\n\n    var IterablePresenceReference = function () {\n        function IterablePresenceReference(artifacts) {\n            (0, _emberBabel.classCallCheck)(this, IterablePresenceReference);\n\n            this.tag = artifacts.tag;\n            this.artifacts = artifacts;\n        }\n\n        IterablePresenceReference.prototype.value = function value() {\n            return !this.artifacts.isEmpty();\n        };\n\n        return IterablePresenceReference;\n    }();\n\n    APPEND_OPCODES.add(54 /* PutIterator */, function (vm$$1) {\n        var stack = vm$$1.stack;\n        var listRef = stack.pop();\n        var key = stack.pop();\n        var iterable = vm$$1.env.iterableFor(listRef, key.value());\n        var iterator = new _reference.ReferenceIterator(iterable);\n        stack.push(iterator);\n        stack.push(new IterablePresenceReference(iterator.artifacts));\n    });\n    APPEND_OPCODES.add(52 /* EnterList */, function (vm$$1, _ref47) {\n        var relativeStart = _ref47.op1;\n\n        vm$$1.enterList(relativeStart);\n    });\n    APPEND_OPCODES.add(53 /* ExitList */, function (vm$$1) {\n        vm$$1.exitList();\n    });\n    APPEND_OPCODES.add(55 /* Iterate */, function (vm$$1, _ref48) {\n        var breaks = _ref48.op1;\n\n        var stack = vm$$1.stack;\n        var item = stack.peek().next();\n        if (item) {\n            var tryOpcode = vm$$1.iterate(item.memo, item.value);\n            vm$$1.enterItem(item.key, tryOpcode);\n        } else {\n            vm$$1.goto(breaks);\n        }\n    });\n\n    var Cursor = function Cursor(element, nextSibling) {\n        (0, _emberBabel.classCallCheck)(this, Cursor);\n\n        this.element = element;\n        this.nextSibling = nextSibling;\n    };\n\n    var ConcreteBounds = function () {\n        function ConcreteBounds(parentNode, first, last) {\n            (0, _emberBabel.classCallCheck)(this, ConcreteBounds);\n\n            this.parentNode = parentNode;\n            this.first = first;\n            this.last = last;\n        }\n\n        ConcreteBounds.prototype.parentElement = function parentElement() {\n            return this.parentNode;\n        };\n\n        ConcreteBounds.prototype.firstNode = function firstNode() {\n            return this.first;\n        };\n\n        ConcreteBounds.prototype.lastNode = function lastNode() {\n            return this.last;\n        };\n\n        return ConcreteBounds;\n    }();\n\n    var SingleNodeBounds = function () {\n        function SingleNodeBounds(parentNode, node) {\n            (0, _emberBabel.classCallCheck)(this, SingleNodeBounds);\n\n            this.parentNode = parentNode;\n            this.node = node;\n        }\n\n        SingleNodeBounds.prototype.parentElement = function parentElement() {\n            return this.parentNode;\n        };\n\n        SingleNodeBounds.prototype.firstNode = function firstNode() {\n            return this.node;\n        };\n\n        SingleNodeBounds.prototype.lastNode = function lastNode() {\n            return this.node;\n        };\n\n        return SingleNodeBounds;\n    }();\n\n    function bounds(parent, first, last) {\n        return new ConcreteBounds(parent, first, last);\n    }\n    function single(parent, node) {\n        return new SingleNodeBounds(parent, node);\n    }\n    function _move(bounds, reference$$1) {\n        var parent = bounds.parentElement();\n        var first = bounds.firstNode();\n        var last = bounds.lastNode();\n        var node = first;\n        while (node) {\n            var next = node.nextSibling;\n            parent.insertBefore(node, reference$$1);\n            if (node === last) return next;\n            node = next;\n        }\n        return null;\n    }\n    function clear(bounds) {\n        var parent = bounds.parentElement();\n        var first = bounds.firstNode();\n        var last = bounds.lastNode();\n        var node = first;\n        while (node) {\n            var next = node.nextSibling;\n            parent.removeChild(node);\n            if (node === last) return next;\n            node = next;\n        }\n        return null;\n    }\n\n    var SVG_NAMESPACE$1 = 'http://www.w3.org/2000/svg';\n    // Patch:    insertAdjacentHTML on SVG Fix\n    // Browsers: Safari, IE, Edge, Firefox ~33-34\n    // Reason:   insertAdjacentHTML does not exist on SVG elements in Safari. It is\n    //           present but throws an exception on IE and Edge. Old versions of\n    //           Firefox create nodes in the incorrect namespace.\n    // Fix:      Since IE and Edge silently fail to create SVG nodes using\n    //           innerHTML, and because Firefox may create nodes in the incorrect\n    //           namespace using innerHTML on SVG elements, an HTML-string wrapping\n    //           approach is used. A pre/post SVG tag is added to the string, then\n    //           that whole string is added to a div. The created nodes are plucked\n    //           out and applied to the target location on DOM.\n    function applySVGInnerHTMLFix(document, DOMClass, svgNamespace) {\n        if (!document) return DOMClass;\n        if (!shouldApplyFix(document, svgNamespace)) {\n            return DOMClass;\n        }\n        var div = document.createElement('div');\n        return function (_DOMClass) {\n            (0, _emberBabel.inherits)(DOMChangesWithSVGInnerHTMLFix, _DOMClass);\n\n            function DOMChangesWithSVGInnerHTMLFix() {\n                (0, _emberBabel.classCallCheck)(this, DOMChangesWithSVGInnerHTMLFix);\n                return (0, _emberBabel.possibleConstructorReturn)(this, _DOMClass.apply(this, arguments));\n            }\n\n            DOMChangesWithSVGInnerHTMLFix.prototype.insertHTMLBefore = function insertHTMLBefore(parent, nextSibling, html) {\n                if (html === null || html === '') {\n                    return _DOMClass.prototype.insertHTMLBefore.call(this, parent, nextSibling, html);\n                }\n                if (parent.namespaceURI !== svgNamespace) {\n                    return _DOMClass.prototype.insertHTMLBefore.call(this, parent, nextSibling, html);\n                }\n                return fixSVG(parent, div, html, nextSibling);\n            };\n\n            return DOMChangesWithSVGInnerHTMLFix;\n        }(DOMClass);\n    }\n    function fixSVG(parent, div, html, reference$$1) {\n        // IE, Edge: also do not correctly support using `innerHTML` on SVG\n        // namespaced elements. So here a wrapper is used.\n        var wrappedHtml = '<svg>' + html + '</svg>';\n        div.innerHTML = wrappedHtml;\n\n        var _moveNodesBefore = moveNodesBefore(div.firstChild, parent, reference$$1),\n            first = _moveNodesBefore[0],\n            last = _moveNodesBefore[1];\n\n        return new ConcreteBounds(parent, first, last);\n    }\n    function shouldApplyFix(document, svgNamespace) {\n        var svg = document.createElementNS(svgNamespace, 'svg');\n        try {\n            svg['insertAdjacentHTML']('beforeend', '<circle></circle>');\n        } catch (e) {\n            // IE, Edge: Will throw, insertAdjacentHTML is unsupported on SVG\n            // Safari: Will throw, insertAdjacentHTML is not present on SVG\n        } finally {\n            // FF: Old versions will create a node in the wrong namespace\n            if (svg.childNodes.length === 1 && svg.firstChild.namespaceURI === SVG_NAMESPACE$1) {\n                // The test worked as expected, no fix required\n                return false;\n            }\n            return true;\n        }\n    }\n\n    // Patch:    Adjacent text node merging fix\n    // Browsers: IE, Edge, Firefox w/o inspector open\n    // Reason:   These browsers will merge adjacent text nodes. For exmaple given\n    //           <div>Hello</div> with div.insertAdjacentHTML(' world') browsers\n    //           with proper behavior will populate div.childNodes with two items.\n    //           These browsers will populate it with one merged node instead.\n    // Fix:      Add these nodes to a wrapper element, then iterate the childNodes\n    //           of that wrapper and move the nodes to their target location. Note\n    //           that potential SVG bugs will have been handled before this fix.\n    //           Note that this fix must only apply to the previous text node, as\n    //           the base implementation of `insertHTMLBefore` already handles\n    //           following text nodes correctly.\n    function applyTextNodeMergingFix(document, DOMClass) {\n        if (!document) return DOMClass;\n        if (!shouldApplyFix$1(document)) {\n            return DOMClass;\n        }\n        return function (_DOMClass2) {\n            (0, _emberBabel.inherits)(DOMChangesWithTextNodeMergingFix, _DOMClass2);\n\n            function DOMChangesWithTextNodeMergingFix(document) {\n                (0, _emberBabel.classCallCheck)(this, DOMChangesWithTextNodeMergingFix);\n\n                var _this16 = (0, _emberBabel.possibleConstructorReturn)(this, _DOMClass2.call(this, document));\n\n                _this16.uselessComment = document.createComment('');\n                return _this16;\n            }\n\n            DOMChangesWithTextNodeMergingFix.prototype.insertHTMLBefore = function insertHTMLBefore(parent, nextSibling, html) {\n                if (html === null) {\n                    return _DOMClass2.prototype.insertHTMLBefore.call(this, parent, nextSibling, html);\n                }\n                var didSetUselessComment = false;\n                var nextPrevious = nextSibling ? nextSibling.previousSibling : parent.lastChild;\n                if (nextPrevious && nextPrevious instanceof Text) {\n                    didSetUselessComment = true;\n                    parent.insertBefore(this.uselessComment, nextSibling);\n                }\n                var bounds = _DOMClass2.prototype.insertHTMLBefore.call(this, parent, nextSibling, html);\n                if (didSetUselessComment) {\n                    parent.removeChild(this.uselessComment);\n                }\n                return bounds;\n            };\n\n            return DOMChangesWithTextNodeMergingFix;\n        }(DOMClass);\n    }\n    function shouldApplyFix$1(document) {\n        var mergingTextDiv = document.createElement('div');\n        mergingTextDiv.innerHTML = 'first';\n        mergingTextDiv.insertAdjacentHTML('beforeend', 'second');\n        if (mergingTextDiv.childNodes.length === 2) {\n            // It worked as expected, no fix required\n            return false;\n        }\n        return true;\n    }\n\n    var SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n    // http://www.w3.org/TR/html/syntax.html#html-integration-point\n    var SVG_INTEGRATION_POINTS = { foreignObject: 1, desc: 1, title: 1 };\n    // http://www.w3.org/TR/html/syntax.html#adjust-svg-attributes\n    // TODO: Adjust SVG attributes\n    // http://www.w3.org/TR/html/syntax.html#parsing-main-inforeign\n    // TODO: Adjust SVG elements\n    // http://www.w3.org/TR/html/syntax.html#parsing-main-inforeign\n    var BLACKLIST_TABLE = Object.create(null);\n    [\"b\", \"big\", \"blockquote\", \"body\", \"br\", \"center\", \"code\", \"dd\", \"div\", \"dl\", \"dt\", \"em\", \"embed\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"head\", \"hr\", \"i\", \"img\", \"li\", \"listing\", \"main\", \"meta\", \"nobr\", \"ol\", \"p\", \"pre\", \"ruby\", \"s\", \"small\", \"span\", \"strong\", \"strike\", \"sub\", \"sup\", \"table\", \"tt\", \"u\", \"ul\", \"var\"].forEach(function (tag) {\n        return BLACKLIST_TABLE[tag] = 1;\n    });\n    var WHITESPACE = /[\\t-\\r \\xA0\\u1680\\u180E\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000\\uFEFF]/;\n    var doc = typeof document === 'undefined' ? null : document;\n    function isWhitespace(string) {\n        return WHITESPACE.test(string);\n    }\n    function moveNodesBefore(source, target, nextSibling) {\n        var first = source.firstChild;\n        var last = null;\n        var current = first;\n        while (current) {\n            last = current;\n            current = current.nextSibling;\n            target.insertBefore(last, nextSibling);\n        }\n        return [first, last];\n    }\n\n    var DOMOperations = function () {\n        function DOMOperations(document) {\n            (0, _emberBabel.classCallCheck)(this, DOMOperations);\n\n            this.document = document;\n            this.setupUselessElement();\n        }\n        // split into seperate method so that NodeDOMTreeConstruction\n        // can override it.\n\n\n        DOMOperations.prototype.setupUselessElement = function setupUselessElement() {\n            this.uselessElement = this.document.createElement('div');\n        };\n\n        DOMOperations.prototype.createElement = function createElement(tag, context) {\n            var isElementInSVGNamespace = void 0,\n                isHTMLIntegrationPoint = void 0;\n            if (context) {\n                isElementInSVGNamespace = context.namespaceURI === SVG_NAMESPACE || tag === 'svg';\n                isHTMLIntegrationPoint = SVG_INTEGRATION_POINTS[context.tagName];\n            } else {\n                isElementInSVGNamespace = tag === 'svg';\n                isHTMLIntegrationPoint = false;\n            }\n            if (isElementInSVGNamespace && !isHTMLIntegrationPoint) {\n                // FIXME: This does not properly handle <font> with color, face, or\n                // size attributes, which is also disallowed by the spec. We should fix\n                // this.\n                if (BLACKLIST_TABLE[tag]) {\n                    throw new Error('Cannot create a ' + tag + ' inside an SVG context');\n                }\n                return this.document.createElementNS(SVG_NAMESPACE, tag);\n            } else {\n                return this.document.createElement(tag);\n            }\n        };\n\n        DOMOperations.prototype.insertBefore = function insertBefore(parent, node, reference$$1) {\n            parent.insertBefore(node, reference$$1);\n        };\n\n        DOMOperations.prototype.insertHTMLBefore = function insertHTMLBefore(_parent, nextSibling, html) {\n            return _insertHTMLBefore(this.uselessElement, _parent, nextSibling, html);\n        };\n\n        DOMOperations.prototype.createTextNode = function createTextNode(text) {\n            return this.document.createTextNode(text);\n        };\n\n        DOMOperations.prototype.createComment = function createComment(data) {\n            return this.document.createComment(data);\n        };\n\n        return DOMOperations;\n    }();\n\n    var DOM;\n    (function (DOM) {\n        var TreeConstruction = function (_DOMOperations) {\n            (0, _emberBabel.inherits)(TreeConstruction, _DOMOperations);\n\n            function TreeConstruction() {\n                (0, _emberBabel.classCallCheck)(this, TreeConstruction);\n                return (0, _emberBabel.possibleConstructorReturn)(this, _DOMOperations.apply(this, arguments));\n            }\n\n            TreeConstruction.prototype.createElementNS = function createElementNS(namespace, tag) {\n                return this.document.createElementNS(namespace, tag);\n            };\n\n            TreeConstruction.prototype.setAttribute = function setAttribute(element, name, value) {\n                var namespace = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n                if (namespace) {\n                    element.setAttributeNS(namespace, name, value);\n                } else {\n                    element.setAttribute(name, value);\n                }\n            };\n\n            return TreeConstruction;\n        }(DOMOperations);\n\n        DOM.TreeConstruction = TreeConstruction;\n        var appliedTreeContruction = TreeConstruction;\n        appliedTreeContruction = applyTextNodeMergingFix(doc, appliedTreeContruction);\n        appliedTreeContruction = applySVGInnerHTMLFix(doc, appliedTreeContruction, SVG_NAMESPACE);\n        DOM.DOMTreeConstruction = appliedTreeContruction;\n    })(DOM || (DOM = {}));\n\n    var DOMChanges = function (_DOMOperations2) {\n        (0, _emberBabel.inherits)(DOMChanges, _DOMOperations2);\n\n        function DOMChanges(document) {\n            (0, _emberBabel.classCallCheck)(this, DOMChanges);\n\n            var _this18 = (0, _emberBabel.possibleConstructorReturn)(this, _DOMOperations2.call(this, document));\n\n            _this18.document = document;\n            _this18.namespace = null;\n            return _this18;\n        }\n\n        DOMChanges.prototype.setAttribute = function setAttribute(element, name, value) {\n            element.setAttribute(name, value);\n        };\n\n        DOMChanges.prototype.removeAttribute = function removeAttribute(element, name) {\n            element.removeAttribute(name);\n        };\n\n        DOMChanges.prototype.insertAfter = function insertAfter(element, node, reference$$1) {\n            this.insertBefore(element, node, reference$$1.nextSibling);\n        };\n\n        return DOMChanges;\n    }(DOMOperations);\n\n    function _insertHTMLBefore(useless, _parent, _nextSibling, html) {\n        // TypeScript vendored an old version of the DOM spec where `insertAdjacentHTML`\n        // only exists on `HTMLElement` but not on `Element`. We actually work with the\n        // newer version of the DOM API here (and monkey-patch this method in `./compat`\n        // when we detect older browsers). This is a hack to work around this limitation.\n        var parent = _parent;\n        var nextSibling = _nextSibling;\n        var prev = nextSibling ? nextSibling.previousSibling : parent.lastChild;\n        var last = void 0;\n        if (html === null || html === '') {\n            return new ConcreteBounds(parent, null, null);\n        }\n        if (nextSibling === null) {\n            parent.insertAdjacentHTML('beforeend', html);\n            last = parent.lastChild;\n        } else if (nextSibling instanceof HTMLElement) {\n            nextSibling.insertAdjacentHTML('beforebegin', html);\n            last = nextSibling.previousSibling;\n        } else {\n            // Non-element nodes do not support insertAdjacentHTML, so add an\n            // element and call it on that element. Then remove the element.\n            //\n            // This also protects Edge, IE and Firefox w/o the inspector open\n            // from merging adjacent text nodes. See ./compat/text-node-merging-fix.ts\n            parent.insertBefore(useless, nextSibling);\n            useless.insertAdjacentHTML('beforebegin', html);\n            last = useless.previousSibling;\n            parent.removeChild(useless);\n        }\n        var first = prev ? prev.nextSibling : parent.firstChild;\n        return new ConcreteBounds(parent, first, last);\n    }\n    var helper = DOMChanges;\n    helper = applyTextNodeMergingFix(doc, helper);\n    helper = applySVGInnerHTMLFix(doc, helper, SVG_NAMESPACE);\n    var helper$1 = helper;\n    var DOMTreeConstruction = DOM.DOMTreeConstruction;\n\n    var badProtocols = ['javascript:', 'vbscript:'];\n    var badTags = ['A', 'BODY', 'LINK', 'IMG', 'IFRAME', 'BASE', 'FORM'];\n    var badTagsForDataURI = ['EMBED'];\n    var badAttributes = ['href', 'src', 'background', 'action'];\n    var badAttributesForDataURI = ['src'];\n    function has(array, item) {\n        return array.indexOf(item) !== -1;\n    }\n    function checkURI(tagName, attribute) {\n        return (tagName === null || has(badTags, tagName)) && has(badAttributes, attribute);\n    }\n    function checkDataURI(tagName, attribute) {\n        if (tagName === null) return false;\n        return has(badTagsForDataURI, tagName) && has(badAttributesForDataURI, attribute);\n    }\n    function requiresSanitization(tagName, attribute) {\n        return checkURI(tagName, attribute) || checkDataURI(tagName, attribute);\n    }\n    function sanitizeAttributeValue(env, element, attribute, value) {\n        var tagName = null;\n        if (value === null || value === undefined) {\n            return value;\n        }\n        if (isSafeString(value)) {\n            return value.toHTML();\n        }\n        if (!element) {\n            tagName = null;\n        } else {\n            tagName = element.tagName.toUpperCase();\n        }\n        var str = normalizeStringValue(value);\n        if (checkURI(tagName, attribute)) {\n            var protocol = env.protocolForURL(str);\n            if (has(badProtocols, protocol)) {\n                return 'unsafe:' + str;\n            }\n        }\n        if (checkDataURI(tagName, attribute)) {\n            return 'unsafe:' + str;\n        }\n        return str;\n    }\n\n    /*\n     * @method normalizeProperty\n     * @param element {HTMLElement}\n     * @param slotName {String}\n     * @returns {Object} { name, type }\n     */\n    function normalizeProperty(element, slotName) {\n        var type = void 0,\n            normalized = void 0;\n        if (slotName in element) {\n            normalized = slotName;\n            type = 'prop';\n        } else {\n            var lower = slotName.toLowerCase();\n            if (lower in element) {\n                type = 'prop';\n                normalized = lower;\n            } else {\n                type = 'attr';\n                normalized = slotName;\n            }\n        }\n        if (type === 'prop' && (normalized.toLowerCase() === 'style' || preferAttr(element.tagName, normalized))) {\n            type = 'attr';\n        }\n        return { normalized: normalized, type: type };\n    }\n\n    // properties that MUST be set as attributes, due to:\n    // * browser bug\n    // * strange spec outlier\n    var ATTR_OVERRIDES = {\n        INPUT: {\n            form: true,\n            // Chrome 46.0.2464.0: 'autocorrect' in document.createElement('input') === false\n            // Safari 8.0.7: 'autocorrect' in document.createElement('input') === false\n            // Mobile Safari (iOS 8.4 simulator): 'autocorrect' in document.createElement('input') === true\n            autocorrect: true,\n            // Chrome 54.0.2840.98: 'list' in document.createElement('input') === true\n            // Safari 9.1.3: 'list' in document.createElement('input') === false\n            list: true\n        },\n        // element.form is actually a legitimate readOnly property, that is to be\n        // mutated, but must be mutated by setAttribute...\n        SELECT: { form: true },\n        OPTION: { form: true },\n        TEXTAREA: { form: true },\n        LABEL: { form: true },\n        FIELDSET: { form: true },\n        LEGEND: { form: true },\n        OBJECT: { form: true },\n        BUTTON: { form: true }\n    };\n    function preferAttr(tagName, propName) {\n        var tag = ATTR_OVERRIDES[tagName.toUpperCase()];\n        return tag && tag[propName.toLowerCase()] || false;\n    }\n\n    function dynamicAttribute(element, attr, namespace) {\n        var tagName = element.tagName,\n            namespaceURI = element.namespaceURI;\n\n        var attribute = { element: element, name: attr, namespace: namespace };\n        if (namespaceURI === SVG_NAMESPACE) {\n            return buildDynamicAttribute(tagName, attr, attribute);\n        }\n\n        var _normalizeProperty = normalizeProperty(element, attr),\n            type = _normalizeProperty.type,\n            normalized = _normalizeProperty.normalized;\n\n        if (type === 'attr') {\n            return buildDynamicAttribute(tagName, normalized, attribute);\n        } else {\n            return buildDynamicProperty(tagName, normalized, attribute);\n        }\n    }\n    function buildDynamicAttribute(tagName, name, attribute) {\n        if (requiresSanitization(tagName, name)) {\n            return new SafeDynamicAttribute(attribute);\n        } else {\n            return new SimpleDynamicAttribute(attribute);\n        }\n    }\n    function buildDynamicProperty(tagName, name, attribute) {\n        if (requiresSanitization(tagName, name)) {\n            return new SafeDynamicProperty(name, attribute);\n        }\n        if (isUserInputValue(tagName, name)) {\n            return new InputValueDynamicAttribute(name, attribute);\n        }\n        if (isOptionSelected(tagName, name)) {\n            return new OptionSelectedDynamicAttribute(name, attribute);\n        }\n        return new DefaultDynamicProperty(name, attribute);\n    }\n\n    var DynamicAttribute = function DynamicAttribute(attribute) {\n        (0, _emberBabel.classCallCheck)(this, DynamicAttribute);\n\n        this.attribute = attribute;\n    };\n\n    var SimpleDynamicAttribute = function (_DynamicAttribute) {\n        (0, _emberBabel.inherits)(SimpleDynamicAttribute, _DynamicAttribute);\n\n        function SimpleDynamicAttribute() {\n            (0, _emberBabel.classCallCheck)(this, SimpleDynamicAttribute);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _DynamicAttribute.apply(this, arguments));\n        }\n\n        SimpleDynamicAttribute.prototype.set = function set(dom, value, _env) {\n            var normalizedValue = normalizeValue(value);\n            if (normalizedValue !== null) {\n                var _attribute2 = this.attribute,\n                    name = _attribute2.name,\n                    namespace = _attribute2.namespace;\n\n                dom.__setAttribute(name, normalizedValue, namespace);\n            }\n        };\n\n        SimpleDynamicAttribute.prototype.update = function update(value, _env) {\n            var normalizedValue = normalizeValue(value);\n            var _attribute3 = this.attribute,\n                element = _attribute3.element,\n                name = _attribute3.name;\n\n            if (normalizedValue === null) {\n                element.removeAttribute(name);\n            } else {\n                element.setAttribute(name, normalizedValue);\n            }\n        };\n\n        return SimpleDynamicAttribute;\n    }(DynamicAttribute);\n\n    var DefaultDynamicProperty = function (_DynamicAttribute2) {\n        (0, _emberBabel.inherits)(DefaultDynamicProperty, _DynamicAttribute2);\n\n        function DefaultDynamicProperty(normalizedName, attribute) {\n            (0, _emberBabel.classCallCheck)(this, DefaultDynamicProperty);\n\n            var _this20 = (0, _emberBabel.possibleConstructorReturn)(this, _DynamicAttribute2.call(this, attribute));\n\n            _this20.normalizedName = normalizedName;\n            return _this20;\n        }\n\n        DefaultDynamicProperty.prototype.set = function set(dom, value, _env) {\n            if (value !== null && value !== undefined) {\n                this.value = value;\n                dom.__setProperty(this.normalizedName, value);\n            }\n        };\n\n        DefaultDynamicProperty.prototype.update = function update(value, _env) {\n            var element = this.attribute.element;\n\n            if (this.value !== value) {\n                element[this.normalizedName] = this.value = value;\n                if (value === null || value === undefined) {\n                    this.removeAttribute();\n                }\n            }\n        };\n\n        DefaultDynamicProperty.prototype.removeAttribute = function removeAttribute() {\n            var _attribute4 = this.attribute,\n                element = _attribute4.element,\n                namespace = _attribute4.namespace;\n\n            if (namespace) {\n                element.removeAttributeNS(namespace, this.normalizedName);\n            } else {\n                element.removeAttribute(this.normalizedName);\n            }\n        };\n\n        return DefaultDynamicProperty;\n    }(DynamicAttribute);\n\n    var SafeDynamicProperty = function (_DefaultDynamicProper) {\n        (0, _emberBabel.inherits)(SafeDynamicProperty, _DefaultDynamicProper);\n\n        function SafeDynamicProperty() {\n            (0, _emberBabel.classCallCheck)(this, SafeDynamicProperty);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _DefaultDynamicProper.apply(this, arguments));\n        }\n\n        SafeDynamicProperty.prototype.set = function set(dom, value, env) {\n            var _attribute5 = this.attribute,\n                element = _attribute5.element,\n                name = _attribute5.name;\n\n            var sanitized = sanitizeAttributeValue(env, element, name, value);\n            _DefaultDynamicProper.prototype.set.call(this, dom, sanitized, env);\n        };\n\n        SafeDynamicProperty.prototype.update = function update(value, env) {\n            var _attribute6 = this.attribute,\n                element = _attribute6.element,\n                name = _attribute6.name;\n\n            var sanitized = sanitizeAttributeValue(env, element, name, value);\n            _DefaultDynamicProper.prototype.update.call(this, sanitized, env);\n        };\n\n        return SafeDynamicProperty;\n    }(DefaultDynamicProperty);\n\n    var SafeDynamicAttribute = function (_SimpleDynamicAttribu) {\n        (0, _emberBabel.inherits)(SafeDynamicAttribute, _SimpleDynamicAttribu);\n\n        function SafeDynamicAttribute() {\n            (0, _emberBabel.classCallCheck)(this, SafeDynamicAttribute);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _SimpleDynamicAttribu.apply(this, arguments));\n        }\n\n        SafeDynamicAttribute.prototype.set = function set(dom, value, env) {\n            var _attribute7 = this.attribute,\n                element = _attribute7.element,\n                name = _attribute7.name;\n\n            var sanitized = sanitizeAttributeValue(env, element, name, value);\n            _SimpleDynamicAttribu.prototype.set.call(this, dom, sanitized, env);\n        };\n\n        SafeDynamicAttribute.prototype.update = function update(value, env) {\n            var _attribute8 = this.attribute,\n                element = _attribute8.element,\n                name = _attribute8.name;\n\n            var sanitized = sanitizeAttributeValue(env, element, name, value);\n            _SimpleDynamicAttribu.prototype.update.call(this, sanitized, env);\n        };\n\n        return SafeDynamicAttribute;\n    }(SimpleDynamicAttribute);\n\n    var InputValueDynamicAttribute = function (_DefaultDynamicProper2) {\n        (0, _emberBabel.inherits)(InputValueDynamicAttribute, _DefaultDynamicProper2);\n\n        function InputValueDynamicAttribute() {\n            (0, _emberBabel.classCallCheck)(this, InputValueDynamicAttribute);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _DefaultDynamicProper2.apply(this, arguments));\n        }\n\n        InputValueDynamicAttribute.prototype.set = function set(dom, value) {\n            dom.__setProperty('value', normalizeStringValue(value));\n        };\n\n        InputValueDynamicAttribute.prototype.update = function update(value) {\n            var input = this.attribute.element;\n            var currentValue = input.value;\n            var normalizedValue = normalizeStringValue(value);\n            if (currentValue !== normalizedValue) {\n                input.value = normalizedValue;\n            }\n        };\n\n        return InputValueDynamicAttribute;\n    }(DefaultDynamicProperty);\n\n    var OptionSelectedDynamicAttribute = function (_DefaultDynamicProper3) {\n        (0, _emberBabel.inherits)(OptionSelectedDynamicAttribute, _DefaultDynamicProper3);\n\n        function OptionSelectedDynamicAttribute() {\n            (0, _emberBabel.classCallCheck)(this, OptionSelectedDynamicAttribute);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _DefaultDynamicProper3.apply(this, arguments));\n        }\n\n        OptionSelectedDynamicAttribute.prototype.set = function set(dom, value) {\n            if (value !== null && value !== undefined && value !== false) {\n                dom.__setProperty('selected', true);\n            }\n        };\n\n        OptionSelectedDynamicAttribute.prototype.update = function update(value) {\n            var option = this.attribute.element;\n            if (value) {\n                option.selected = true;\n            } else {\n                option.selected = false;\n            }\n        };\n\n        return OptionSelectedDynamicAttribute;\n    }(DefaultDynamicProperty);\n\n    function isOptionSelected(tagName, attribute) {\n        return tagName === 'OPTION' && attribute === 'selected';\n    }\n    function isUserInputValue(tagName, attribute) {\n        return (tagName === 'INPUT' || tagName === 'TEXTAREA') && attribute === 'value';\n    }\n    function normalizeValue(value) {\n        if (value === false || value === undefined || value === null || typeof value.toString === 'undefined') {\n            return null;\n        }\n        if (value === true) {\n            return '';\n        }\n        // onclick function etc in SSR\n        if (typeof value === 'function') {\n            return null;\n        }\n        return String(value);\n    }\n\n    var Scope = function () {\n        function Scope(\n        // the 0th slot is `self`\n        slots, callerScope,\n        // named arguments and blocks passed to a layout that uses eval\n        evalScope,\n        // locals in scope when the partial was invoked\n        partialMap) {\n            (0, _emberBabel.classCallCheck)(this, Scope);\n\n            this.slots = slots;\n            this.callerScope = callerScope;\n            this.evalScope = evalScope;\n            this.partialMap = partialMap;\n        }\n\n        Scope.root = function root(self) {\n            var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n            var refs = new Array(size + 1);\n            for (var i = 0; i <= size; i++) {\n                refs[i] = UNDEFINED_REFERENCE;\n            }\n            return new Scope(refs, null, null, null).init({ self: self });\n        };\n\n        Scope.sized = function sized() {\n            var size = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n            var refs = new Array(size + 1);\n            for (var i = 0; i <= size; i++) {\n                refs[i] = UNDEFINED_REFERENCE;\n            }\n            return new Scope(refs, null, null, null);\n        };\n\n        Scope.prototype.init = function init(_ref49) {\n            var self = _ref49.self;\n\n            this.slots[0] = self;\n            return this;\n        };\n\n        Scope.prototype.getSelf = function getSelf() {\n            return this.get(0);\n        };\n\n        Scope.prototype.getSymbol = function getSymbol(symbol) {\n            return this.get(symbol);\n        };\n\n        Scope.prototype.getBlock = function getBlock(symbol) {\n            return this.get(symbol);\n        };\n\n        Scope.prototype.getEvalScope = function getEvalScope() {\n            return this.evalScope;\n        };\n\n        Scope.prototype.getPartialMap = function getPartialMap() {\n            return this.partialMap;\n        };\n\n        Scope.prototype.bind = function bind(symbol, value) {\n            this.set(symbol, value);\n        };\n\n        Scope.prototype.bindSelf = function bindSelf(self) {\n            this.set(0, self);\n        };\n\n        Scope.prototype.bindSymbol = function bindSymbol(symbol, value) {\n            this.set(symbol, value);\n        };\n\n        Scope.prototype.bindBlock = function bindBlock(symbol, value) {\n            this.set(symbol, value);\n        };\n\n        Scope.prototype.bindEvalScope = function bindEvalScope(map) {\n            this.evalScope = map;\n        };\n\n        Scope.prototype.bindPartialMap = function bindPartialMap(map) {\n            this.partialMap = map;\n        };\n\n        Scope.prototype.bindCallerScope = function bindCallerScope(scope) {\n            this.callerScope = scope;\n        };\n\n        Scope.prototype.getCallerScope = function getCallerScope() {\n            return this.callerScope;\n        };\n\n        Scope.prototype.child = function child() {\n            return new Scope(this.slots.slice(), this.callerScope, this.evalScope, this.partialMap);\n        };\n\n        Scope.prototype.get = function get(index) {\n            if (index >= this.slots.length) {\n                throw new RangeError('BUG: cannot get $' + index + ' from scope; length=' + this.slots.length);\n            }\n            return this.slots[index];\n        };\n\n        Scope.prototype.set = function set(index, value) {\n            if (index >= this.slots.length) {\n                throw new RangeError('BUG: cannot get $' + index + ' from scope; length=' + this.slots.length);\n            }\n            this.slots[index] = value;\n        };\n\n        return Scope;\n    }();\n\n    var Transaction = function () {\n        function Transaction() {\n            (0, _emberBabel.classCallCheck)(this, Transaction);\n\n            this.scheduledInstallManagers = [];\n            this.scheduledInstallModifiers = [];\n            this.scheduledUpdateModifierManagers = [];\n            this.scheduledUpdateModifiers = [];\n            this.createdComponents = [];\n            this.createdManagers = [];\n            this.updatedComponents = [];\n            this.updatedManagers = [];\n            this.destructors = [];\n        }\n\n        Transaction.prototype.didCreate = function didCreate(component, manager) {\n            this.createdComponents.push(component);\n            this.createdManagers.push(manager);\n        };\n\n        Transaction.prototype.didUpdate = function didUpdate(component, manager) {\n            this.updatedComponents.push(component);\n            this.updatedManagers.push(manager);\n        };\n\n        Transaction.prototype.scheduleInstallModifier = function scheduleInstallModifier(modifier, manager) {\n            this.scheduledInstallManagers.push(manager);\n            this.scheduledInstallModifiers.push(modifier);\n        };\n\n        Transaction.prototype.scheduleUpdateModifier = function scheduleUpdateModifier(modifier, manager) {\n            this.scheduledUpdateModifierManagers.push(manager);\n            this.scheduledUpdateModifiers.push(modifier);\n        };\n\n        Transaction.prototype.didDestroy = function didDestroy(d) {\n            this.destructors.push(d);\n        };\n\n        Transaction.prototype.commit = function commit() {\n            var createdComponents = this.createdComponents,\n                createdManagers = this.createdManagers;\n\n            for (var i = 0; i < createdComponents.length; i++) {\n                var component = createdComponents[i];\n                var manager = createdManagers[i];\n                manager.didCreate(component);\n            }\n            var updatedComponents = this.updatedComponents,\n                updatedManagers = this.updatedManagers;\n\n            for (var _i4 = 0; _i4 < updatedComponents.length; _i4++) {\n                var _component = updatedComponents[_i4];\n                var _manager2 = updatedManagers[_i4];\n                _manager2.didUpdate(_component);\n            }\n            var destructors = this.destructors;\n\n            for (var _i5 = 0; _i5 < destructors.length; _i5++) {\n                destructors[_i5].destroy();\n            }\n            var scheduledInstallManagers = this.scheduledInstallManagers,\n                scheduledInstallModifiers = this.scheduledInstallModifiers;\n\n            for (var _i6 = 0; _i6 < scheduledInstallManagers.length; _i6++) {\n                var _manager3 = scheduledInstallManagers[_i6];\n                var modifier = scheduledInstallModifiers[_i6];\n                _manager3.install(modifier);\n            }\n            var scheduledUpdateModifierManagers = this.scheduledUpdateModifierManagers,\n                scheduledUpdateModifiers = this.scheduledUpdateModifiers;\n\n            for (var _i7 = 0; _i7 < scheduledUpdateModifierManagers.length; _i7++) {\n                var _manager4 = scheduledUpdateModifierManagers[_i7];\n                var _modifier = scheduledUpdateModifiers[_i7];\n                _manager4.update(_modifier);\n            }\n        };\n\n        return Transaction;\n    }();\n\n    var Environment = function () {\n        function Environment(_ref50) {\n            var appendOperations = _ref50.appendOperations,\n                updateOperations = _ref50.updateOperations;\n            (0, _emberBabel.classCallCheck)(this, Environment);\n\n            this._transaction = null;\n            this.appendOperations = appendOperations;\n            this.updateOperations = updateOperations;\n        }\n\n        Environment.prototype.toConditionalReference = function toConditionalReference(reference$$1) {\n            return new ConditionalReference(reference$$1);\n        };\n\n        Environment.prototype.getAppendOperations = function getAppendOperations() {\n            return this.appendOperations;\n        };\n\n        Environment.prototype.getDOM = function getDOM() {\n            return this.updateOperations;\n        };\n\n        Environment.prototype.begin = function begin() {\n            this._transaction = new Transaction();\n        };\n\n        Environment.prototype.didCreate = function didCreate(component, manager) {\n            this.transaction.didCreate(component, manager);\n        };\n\n        Environment.prototype.didUpdate = function didUpdate(component, manager) {\n            this.transaction.didUpdate(component, manager);\n        };\n\n        Environment.prototype.scheduleInstallModifier = function scheduleInstallModifier(modifier, manager) {\n            this.transaction.scheduleInstallModifier(modifier, manager);\n        };\n\n        Environment.prototype.scheduleUpdateModifier = function scheduleUpdateModifier(modifier, manager) {\n            this.transaction.scheduleUpdateModifier(modifier, manager);\n        };\n\n        Environment.prototype.didDestroy = function didDestroy(d) {\n            this.transaction.didDestroy(d);\n        };\n\n        Environment.prototype.commit = function commit() {\n            var transaction = this.transaction;\n            this._transaction = null;\n            transaction.commit();\n        };\n\n        Environment.prototype.attributeFor = function attributeFor(element, attr, _isTrusting) {\n            var namespace = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n            return dynamicAttribute(element, attr, namespace);\n        };\n\n        (0, _emberBabel.createClass)(Environment, [{\n            key: 'transaction',\n            get: function () {\n                return this._transaction;\n            }\n        }]);\n        return Environment;\n    }();\n\n    var DefaultEnvironment = function (_Environment) {\n        (0, _emberBabel.inherits)(DefaultEnvironment, _Environment);\n\n        function DefaultEnvironment(options) {\n            (0, _emberBabel.classCallCheck)(this, DefaultEnvironment);\n\n            if (!options) {\n                var _document = window.document;\n                var appendOperations = new DOMTreeConstruction(_document);\n                var updateOperations = new DOMChanges(_document);\n                options = { appendOperations: appendOperations, updateOperations: updateOperations };\n            }\n            return (0, _emberBabel.possibleConstructorReturn)(this, _Environment.call(this, options));\n        }\n\n        return DefaultEnvironment;\n    }(Environment);\n\n    var LowLevelVM = function () {\n        function LowLevelVM(stack, heap, program, externs) {\n            var pc = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : -1;\n            var ra = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : -1;\n            (0, _emberBabel.classCallCheck)(this, LowLevelVM);\n\n            this.stack = stack;\n            this.heap = heap;\n            this.program = program;\n            this.externs = externs;\n            this.pc = pc;\n            this.ra = ra;\n            this.currentOpSize = 0;\n        }\n        // Start a new frame and save $ra and $fp on the stack\n\n\n        LowLevelVM.prototype.pushFrame = function pushFrame() {\n            this.stack.pushSmi(this.ra);\n            this.stack.pushSmi(this.stack.fp);\n            this.stack.fp = this.stack.sp - 1;\n        };\n\n        LowLevelVM.prototype.popFrame = function popFrame() {\n            this.stack.sp = this.stack.fp - 1;\n            this.ra = this.stack.getSmi(0);\n            this.stack.fp = this.stack.getSmi(1);\n        };\n\n        LowLevelVM.prototype.goto = function goto(offset) {\n            var addr = this.pc + offset - this.currentOpSize;\n            this.pc = addr;\n        };\n\n        LowLevelVM.prototype.call = function call(handle) {\n            this.ra = this.pc;\n            this.pc = this.heap.getaddr(handle);\n        };\n\n        LowLevelVM.prototype.returnTo = function returnTo(offset) {\n            var addr = this.pc + offset - this.currentOpSize;\n            this.ra = addr;\n        };\n\n        LowLevelVM.prototype.return = function _return() {\n            this.pc = this.ra;\n        };\n\n        LowLevelVM.prototype.nextStatement = function nextStatement() {\n            var pc = this.pc,\n                program = this.program;\n\n            if (pc === -1) {\n                return null;\n            }\n            // We have to save off the current operations size so that\n            // when we do a jump we can calculate the correct offset\n            // to where we are going. We can't simply ask for the size\n            // in a jump because we have have already incremented the\n            // program counter to the next instruction prior to executing.\n\n            var _program$opcode = this.program.opcode(pc),\n                size = _program$opcode.size;\n\n            var operationSize = this.currentOpSize = size;\n            this.pc += operationSize;\n            return program.opcode(pc);\n        };\n\n        LowLevelVM.prototype.evaluateOuter = function evaluateOuter(opcode, vm$$1) {\n            {\n                this.evaluateInner(opcode, vm$$1);\n            }\n        };\n\n        LowLevelVM.prototype.evaluateInner = function evaluateInner(opcode, vm$$1) {\n            if (opcode.isMachine) {\n                this.evaluateMachine(opcode);\n            } else {\n                this.evaluateSyscall(opcode, vm$$1);\n            }\n        };\n\n        LowLevelVM.prototype.evaluateMachine = function evaluateMachine(opcode) {\n            switch (opcode.type) {\n                case 47 /* PushFrame */:\n                    return this.pushFrame();\n                case 48 /* PopFrame */:\n                    return this.popFrame();\n                case 42 /* InvokeStatic */:\n                    return this.call(opcode.op1);\n                case 41 /* InvokeVirtual */:\n                    return this.call(this.stack.popSmi());\n                case 44 /* Jump */:\n                    return this.goto(opcode.op1);\n                case 20 /* Return */:\n                    return this.return();\n                case 21 /* ReturnTo */:\n                    return this.returnTo(opcode.op1);\n            }\n        };\n\n        LowLevelVM.prototype.evaluateSyscall = function evaluateSyscall(opcode, vm$$1) {\n            APPEND_OPCODES.evaluate(vm$$1, opcode, opcode.type);\n        };\n\n        return LowLevelVM;\n    }();\n\n    var DynamicContentBase = function () {\n        function DynamicContentBase(trusting) {\n            (0, _emberBabel.classCallCheck)(this, DynamicContentBase);\n\n            this.trusting = trusting;\n        }\n\n        DynamicContentBase.prototype.retry = function retry(env, value) {\n            var bounds$$1 = this.bounds;\n\n            var parentElement = bounds$$1.parentElement();\n            var nextSibling = clear(bounds$$1);\n            var stack = NewElementBuilder.forInitialRender(env, { element: parentElement, nextSibling: nextSibling });\n            if (this.trusting) {\n                return stack.__appendTrustingDynamicContent(value);\n            } else {\n                return stack.__appendCautiousDynamicContent(value);\n            }\n        };\n\n        return DynamicContentBase;\n    }();\n\n    var DynamicContentWrapper = function () {\n        function DynamicContentWrapper(inner) {\n            (0, _emberBabel.classCallCheck)(this, DynamicContentWrapper);\n\n            this.inner = inner;\n            this.bounds = inner.bounds;\n        }\n\n        DynamicContentWrapper.prototype.parentElement = function parentElement() {\n            return this.bounds.parentElement();\n        };\n\n        DynamicContentWrapper.prototype.firstNode = function firstNode() {\n            return this.bounds.firstNode();\n        };\n\n        DynamicContentWrapper.prototype.lastNode = function lastNode() {\n            return this.bounds.lastNode();\n        };\n\n        DynamicContentWrapper.prototype.update = function update(env, value) {\n            var inner = this.inner = this.inner.update(env, value);\n            this.bounds = inner.bounds;\n            return this;\n        };\n\n        return DynamicContentWrapper;\n    }();\n\n    var DynamicTextContent = function (_DynamicContentBase) {\n        (0, _emberBabel.inherits)(DynamicTextContent, _DynamicContentBase);\n\n        function DynamicTextContent(bounds, lastValue, trusted) {\n            (0, _emberBabel.classCallCheck)(this, DynamicTextContent);\n\n            var _this26 = (0, _emberBabel.possibleConstructorReturn)(this, _DynamicContentBase.call(this, trusted));\n\n            _this26.bounds = bounds;\n            _this26.lastValue = lastValue;\n            return _this26;\n        }\n\n        DynamicTextContent.prototype.update = function update(env, value) {\n            var lastValue = this.lastValue;\n\n            if (value === lastValue) return this;\n            if (isNode(value) || isSafeString(value)) return this.retry(env, value);\n            var normalized = void 0;\n            if (isEmpty(value)) {\n                normalized = '';\n            } else if (isString(value)) {\n                normalized = value;\n            } else {\n                normalized = String(value);\n            }\n            if (normalized !== lastValue) {\n                var textNode = this.bounds.firstNode();\n                textNode.nodeValue = this.lastValue = normalized;\n            }\n            return this;\n        };\n\n        return DynamicTextContent;\n    }(DynamicContentBase);\n\n    var DynamicNodeContent = function (_DynamicContentBase2) {\n        (0, _emberBabel.inherits)(DynamicNodeContent, _DynamicContentBase2);\n\n        function DynamicNodeContent(bounds, lastValue, trusting) {\n            (0, _emberBabel.classCallCheck)(this, DynamicNodeContent);\n\n            var _this27 = (0, _emberBabel.possibleConstructorReturn)(this, _DynamicContentBase2.call(this, trusting));\n\n            _this27.bounds = bounds;\n            _this27.lastValue = lastValue;\n            return _this27;\n        }\n\n        DynamicNodeContent.prototype.update = function update(env, value) {\n            var lastValue = this.lastValue;\n\n            if (value === lastValue) return this;\n            return this.retry(env, value);\n        };\n\n        return DynamicNodeContent;\n    }(DynamicContentBase);\n\n    var DynamicHTMLContent = function (_DynamicContentBase3) {\n        (0, _emberBabel.inherits)(DynamicHTMLContent, _DynamicContentBase3);\n\n        function DynamicHTMLContent(bounds, lastValue, trusted) {\n            (0, _emberBabel.classCallCheck)(this, DynamicHTMLContent);\n\n            var _this28 = (0, _emberBabel.possibleConstructorReturn)(this, _DynamicContentBase3.call(this, trusted));\n\n            _this28.bounds = bounds;\n            _this28.lastValue = lastValue;\n            return _this28;\n        }\n\n        DynamicHTMLContent.prototype.update = function update(env, value) {\n            var lastValue = this.lastValue;\n\n            if (value === lastValue) return this;\n            if (isSafeString(value) && value.toHTML() === lastValue.toHTML()) {\n                this.lastValue = value;\n                return this;\n            }\n            return this.retry(env, value);\n        };\n\n        return DynamicHTMLContent;\n    }(DynamicContentBase);\n\n    var DynamicTrustedHTMLContent = function (_DynamicContentBase4) {\n        (0, _emberBabel.inherits)(DynamicTrustedHTMLContent, _DynamicContentBase4);\n\n        function DynamicTrustedHTMLContent(bounds, lastValue, trusted) {\n            (0, _emberBabel.classCallCheck)(this, DynamicTrustedHTMLContent);\n\n            var _this29 = (0, _emberBabel.possibleConstructorReturn)(this, _DynamicContentBase4.call(this, trusted));\n\n            _this29.bounds = bounds;\n            _this29.lastValue = lastValue;\n            return _this29;\n        }\n\n        DynamicTrustedHTMLContent.prototype.update = function update(env, value) {\n            var lastValue = this.lastValue;\n\n            if (value === lastValue) return this;\n            var newValue = normalizeTrustedValue(value);\n            if (newValue === lastValue) return this;\n            return this.retry(env, value);\n        };\n\n        return DynamicTrustedHTMLContent;\n    }(DynamicContentBase);\n\n    var First = function () {\n        function First(node) {\n            (0, _emberBabel.classCallCheck)(this, First);\n\n            this.node = node;\n        }\n\n        First.prototype.firstNode = function firstNode() {\n            return this.node;\n        };\n\n        return First;\n    }();\n\n    var Last = function () {\n        function Last(node) {\n            (0, _emberBabel.classCallCheck)(this, Last);\n\n            this.node = node;\n        }\n\n        Last.prototype.lastNode = function lastNode() {\n            return this.node;\n        };\n\n        return Last;\n    }();\n\n    var NewElementBuilder = function () {\n        function NewElementBuilder(env, parentNode, nextSibling) {\n            (0, _emberBabel.classCallCheck)(this, NewElementBuilder);\n\n            this.constructing = null;\n            this.operations = null;\n            this.cursorStack = new _util.Stack();\n            this.blockStack = new _util.Stack();\n            this.pushElement(parentNode, nextSibling);\n            this.env = env;\n            this.dom = env.getAppendOperations();\n            this.updateOperations = env.getDOM();\n        }\n\n        NewElementBuilder.forInitialRender = function forInitialRender(env, cursor) {\n            var builder = new this(env, cursor.element, cursor.nextSibling);\n            builder.pushSimpleBlock();\n            return builder;\n        };\n\n        NewElementBuilder.resume = function resume(env, tracker, nextSibling) {\n            var parentNode = tracker.parentElement();\n            var stack = new this(env, parentNode, nextSibling);\n            stack.pushSimpleBlock();\n            stack.pushBlockTracker(tracker);\n            return stack;\n        };\n\n        NewElementBuilder.prototype.expectConstructing = function expectConstructing(method) {\n            return this.constructing;\n        };\n\n        NewElementBuilder.prototype.block = function block() {\n            return this.blockStack.current;\n        };\n\n        NewElementBuilder.prototype.popElement = function popElement() {\n            this.cursorStack.pop();\n            this.cursorStack.current;\n        };\n\n        NewElementBuilder.prototype.pushSimpleBlock = function pushSimpleBlock() {\n            return this.pushBlockTracker(new SimpleBlockTracker(this.element));\n        };\n\n        NewElementBuilder.prototype.pushUpdatableBlock = function pushUpdatableBlock() {\n            return this.pushBlockTracker(new UpdatableBlockTracker(this.element));\n        };\n\n        NewElementBuilder.prototype.pushBlockList = function pushBlockList(list) {\n            return this.pushBlockTracker(new BlockListTracker(this.element, list));\n        };\n\n        NewElementBuilder.prototype.pushBlockTracker = function pushBlockTracker(tracker) {\n            var isRemote = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n            var current = this.blockStack.current;\n            if (current !== null) {\n                current.newDestroyable(tracker);\n                if (!isRemote) {\n                    current.didAppendBounds(tracker);\n                }\n            }\n            this.__openBlock();\n            this.blockStack.push(tracker);\n            return tracker;\n        };\n\n        NewElementBuilder.prototype.popBlock = function popBlock() {\n            this.block().finalize(this);\n            this.__closeBlock();\n            return this.blockStack.pop();\n        };\n\n        NewElementBuilder.prototype.__openBlock = function __openBlock() {};\n\n        NewElementBuilder.prototype.__closeBlock = function __closeBlock() {};\n\n        NewElementBuilder.prototype.openElement = function openElement(tag) {\n            var element = this.__openElement(tag);\n            this.constructing = element;\n            return element;\n        };\n\n        NewElementBuilder.prototype.__openElement = function __openElement(tag) {\n            return this.dom.createElement(tag, this.element);\n        };\n\n        NewElementBuilder.prototype.flushElement = function flushElement() {\n            var parent = this.element;\n            var element = this.constructing;\n            this.__flushElement(parent, element);\n            this.constructing = null;\n            this.operations = null;\n            this.pushElement(element, null);\n            this.didOpenElement(element);\n        };\n\n        NewElementBuilder.prototype.__flushElement = function __flushElement(parent, constructing) {\n            this.dom.insertBefore(parent, constructing, this.nextSibling);\n        };\n\n        NewElementBuilder.prototype.closeElement = function closeElement() {\n            this.willCloseElement();\n            this.popElement();\n        };\n\n        NewElementBuilder.prototype.pushRemoteElement = function pushRemoteElement(element, guid) {\n            var nextSibling = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n            this.__pushRemoteElement(element, guid, nextSibling);\n        };\n\n        NewElementBuilder.prototype.__pushRemoteElement = function __pushRemoteElement(element, _guid, nextSibling) {\n            this.pushElement(element, nextSibling);\n            var tracker = new RemoteBlockTracker(element);\n            this.pushBlockTracker(tracker, true);\n        };\n\n        NewElementBuilder.prototype.popRemoteElement = function popRemoteElement() {\n            this.popBlock();\n            this.popElement();\n        };\n\n        NewElementBuilder.prototype.pushElement = function pushElement(element, nextSibling) {\n            this.cursorStack.push(new Cursor(element, nextSibling));\n        };\n\n        NewElementBuilder.prototype.didAddDestroyable = function didAddDestroyable(d) {\n            this.block().newDestroyable(d);\n        };\n\n        NewElementBuilder.prototype.didAppendBounds = function didAppendBounds(bounds$$1) {\n            this.block().didAppendBounds(bounds$$1);\n            return bounds$$1;\n        };\n\n        NewElementBuilder.prototype.didAppendNode = function didAppendNode(node) {\n            this.block().didAppendNode(node);\n            return node;\n        };\n\n        NewElementBuilder.prototype.didOpenElement = function didOpenElement(element) {\n            this.block().openElement(element);\n            return element;\n        };\n\n        NewElementBuilder.prototype.willCloseElement = function willCloseElement() {\n            this.block().closeElement();\n        };\n\n        NewElementBuilder.prototype.appendText = function appendText(string) {\n            return this.didAppendNode(this.__appendText(string));\n        };\n\n        NewElementBuilder.prototype.__appendText = function __appendText(text) {\n            var dom = this.dom,\n                element = this.element,\n                nextSibling = this.nextSibling;\n\n            var node = dom.createTextNode(text);\n            dom.insertBefore(element, node, nextSibling);\n            return node;\n        };\n\n        NewElementBuilder.prototype.__appendNode = function __appendNode(node) {\n            this.dom.insertBefore(this.element, node, this.nextSibling);\n            return node;\n        };\n\n        NewElementBuilder.prototype.__appendFragment = function __appendFragment(fragment) {\n            var first = fragment.firstChild;\n            if (first) {\n                var ret = bounds(this.element, first, fragment.lastChild);\n                this.dom.insertBefore(this.element, fragment, this.nextSibling);\n                return ret;\n            } else {\n                return single(this.element, this.__appendComment(''));\n            }\n        };\n\n        NewElementBuilder.prototype.__appendHTML = function __appendHTML(html) {\n            return this.dom.insertHTMLBefore(this.element, this.nextSibling, html);\n        };\n\n        NewElementBuilder.prototype.appendTrustingDynamicContent = function appendTrustingDynamicContent(value) {\n            var wrapper = new DynamicContentWrapper(this.__appendTrustingDynamicContent(value));\n            this.didAppendBounds(wrapper);\n            return wrapper;\n        };\n\n        NewElementBuilder.prototype.__appendTrustingDynamicContent = function __appendTrustingDynamicContent(value) {\n            if (isString(value)) {\n                return this.trustedContent(value);\n            } else if (isEmpty(value)) {\n                return this.trustedContent('');\n            } else if (isSafeString(value)) {\n                return this.trustedContent(value.toHTML());\n            }\n            if (isFragment(value)) {\n                var bounds$$1 = this.__appendFragment(value);\n                return new DynamicNodeContent(bounds$$1, value, true);\n            } else if (isNode(value)) {\n                var node = this.__appendNode(value);\n                return new DynamicNodeContent(single(this.element, node), node, true);\n            }\n            return this.trustedContent(String(value));\n        };\n\n        NewElementBuilder.prototype.appendCautiousDynamicContent = function appendCautiousDynamicContent(value) {\n            var wrapper = new DynamicContentWrapper(this.__appendCautiousDynamicContent(value));\n            this.didAppendBounds(wrapper.bounds);\n            return wrapper;\n        };\n\n        NewElementBuilder.prototype.__appendCautiousDynamicContent = function __appendCautiousDynamicContent(value) {\n            if (isString(value)) {\n                return this.untrustedContent(value);\n            } else if (isEmpty(value)) {\n                return this.untrustedContent('');\n            } else if (isFragment(value)) {\n                var bounds$$1 = this.__appendFragment(value);\n                return new DynamicNodeContent(bounds$$1, value, false);\n            } else if (isNode(value)) {\n                var node = this.__appendNode(value);\n                return new DynamicNodeContent(single(this.element, node), node, false);\n            } else if (isSafeString(value)) {\n                var normalized = value.toHTML();\n                var _bounds$$ = this.__appendHTML(normalized);\n                // let bounds = this.dom.insertHTMLBefore(this.element, this.nextSibling, normalized);\n                return new DynamicHTMLContent(_bounds$$, value, false);\n            }\n            return this.untrustedContent(String(value));\n        };\n\n        NewElementBuilder.prototype.trustedContent = function trustedContent(value) {\n            var bounds$$1 = this.__appendHTML(value);\n            return new DynamicTrustedHTMLContent(bounds$$1, value, true);\n        };\n\n        NewElementBuilder.prototype.untrustedContent = function untrustedContent(value) {\n            var textNode = this.__appendText(value);\n            var bounds$$1 = single(this.element, textNode);\n            return new DynamicTextContent(bounds$$1, value, false);\n        };\n\n        NewElementBuilder.prototype.appendComment = function appendComment(string) {\n            return this.didAppendNode(this.__appendComment(string));\n        };\n\n        NewElementBuilder.prototype.__appendComment = function __appendComment(string) {\n            var dom = this.dom,\n                element = this.element,\n                nextSibling = this.nextSibling;\n\n            var node = dom.createComment(string);\n            dom.insertBefore(element, node, nextSibling);\n            return node;\n        };\n\n        NewElementBuilder.prototype.__setAttribute = function __setAttribute(name, value, namespace) {\n            this.dom.setAttribute(this.constructing, name, value, namespace);\n        };\n\n        NewElementBuilder.prototype.__setProperty = function __setProperty(name, value) {\n            this.constructing[name] = value;\n        };\n\n        NewElementBuilder.prototype.setStaticAttribute = function setStaticAttribute(name, value, namespace) {\n            this.__setAttribute(name, value, namespace);\n        };\n\n        NewElementBuilder.prototype.setDynamicAttribute = function setDynamicAttribute(name, value, trusting, namespace) {\n            var element = this.constructing;\n            var attribute = this.env.attributeFor(element, name, trusting, namespace);\n            attribute.set(this, value, this.env);\n            return attribute;\n        };\n\n        (0, _emberBabel.createClass)(NewElementBuilder, [{\n            key: 'element',\n            get: function () {\n                return this.cursorStack.current.element;\n            }\n        }, {\n            key: 'nextSibling',\n            get: function () {\n                return this.cursorStack.current.nextSibling;\n            }\n        }]);\n        return NewElementBuilder;\n    }();\n\n    var SimpleBlockTracker = function () {\n        function SimpleBlockTracker(parent) {\n            (0, _emberBabel.classCallCheck)(this, SimpleBlockTracker);\n\n            this.parent = parent;\n            this.first = null;\n            this.last = null;\n            this.destroyables = null;\n            this.nesting = 0;\n        }\n\n        SimpleBlockTracker.prototype.destroy = function destroy() {\n            var destroyables = this.destroyables;\n\n            if (destroyables && destroyables.length) {\n                for (var i = 0; i < destroyables.length; i++) {\n                    destroyables[i].destroy();\n                }\n            }\n        };\n\n        SimpleBlockTracker.prototype.parentElement = function parentElement() {\n            return this.parent;\n        };\n\n        SimpleBlockTracker.prototype.firstNode = function firstNode() {\n            return this.first && this.first.firstNode();\n        };\n\n        SimpleBlockTracker.prototype.lastNode = function lastNode() {\n            return this.last && this.last.lastNode();\n        };\n\n        SimpleBlockTracker.prototype.openElement = function openElement(element) {\n            this.didAppendNode(element);\n            this.nesting++;\n        };\n\n        SimpleBlockTracker.prototype.closeElement = function closeElement() {\n            this.nesting--;\n        };\n\n        SimpleBlockTracker.prototype.didAppendNode = function didAppendNode(node) {\n            if (this.nesting !== 0) return;\n            if (!this.first) {\n                this.first = new First(node);\n            }\n            this.last = new Last(node);\n        };\n\n        SimpleBlockTracker.prototype.didAppendBounds = function didAppendBounds(bounds$$1) {\n            if (this.nesting !== 0) return;\n            if (!this.first) {\n                this.first = bounds$$1;\n            }\n            this.last = bounds$$1;\n        };\n\n        SimpleBlockTracker.prototype.newDestroyable = function newDestroyable(d) {\n            this.destroyables = this.destroyables || [];\n            this.destroyables.push(d);\n        };\n\n        SimpleBlockTracker.prototype.finalize = function finalize(stack) {\n            if (!this.first) {\n                stack.appendComment('');\n            }\n        };\n\n        return SimpleBlockTracker;\n    }();\n\n    var RemoteBlockTracker = function (_SimpleBlockTracker) {\n        (0, _emberBabel.inherits)(RemoteBlockTracker, _SimpleBlockTracker);\n\n        function RemoteBlockTracker() {\n            (0, _emberBabel.classCallCheck)(this, RemoteBlockTracker);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _SimpleBlockTracker.apply(this, arguments));\n        }\n\n        RemoteBlockTracker.prototype.destroy = function destroy() {\n            _SimpleBlockTracker.prototype.destroy.call(this);\n            clear(this);\n        };\n\n        return RemoteBlockTracker;\n    }(SimpleBlockTracker);\n\n    var UpdatableBlockTracker = function (_SimpleBlockTracker2) {\n        (0, _emberBabel.inherits)(UpdatableBlockTracker, _SimpleBlockTracker2);\n\n        function UpdatableBlockTracker() {\n            (0, _emberBabel.classCallCheck)(this, UpdatableBlockTracker);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _SimpleBlockTracker2.apply(this, arguments));\n        }\n\n        UpdatableBlockTracker.prototype.reset = function reset(env) {\n            var destroyables = this.destroyables;\n\n            if (destroyables && destroyables.length) {\n                for (var i = 0; i < destroyables.length; i++) {\n                    env.didDestroy(destroyables[i]);\n                }\n            }\n            var nextSibling = clear(this);\n            this.first = null;\n            this.last = null;\n            this.destroyables = null;\n            this.nesting = 0;\n            return nextSibling;\n        };\n\n        return UpdatableBlockTracker;\n    }(SimpleBlockTracker);\n\n    var BlockListTracker = function () {\n        function BlockListTracker(parent, boundList) {\n            (0, _emberBabel.classCallCheck)(this, BlockListTracker);\n\n            this.parent = parent;\n            this.boundList = boundList;\n            this.parent = parent;\n            this.boundList = boundList;\n        }\n\n        BlockListTracker.prototype.destroy = function destroy() {\n            this.boundList.forEachNode(function (node) {\n                return node.destroy();\n            });\n        };\n\n        BlockListTracker.prototype.parentElement = function parentElement() {\n            return this.parent;\n        };\n\n        BlockListTracker.prototype.firstNode = function firstNode() {\n            var head = this.boundList.head();\n            return head && head.firstNode();\n        };\n\n        BlockListTracker.prototype.lastNode = function lastNode() {\n            var tail = this.boundList.tail();\n            return tail && tail.lastNode();\n        };\n\n        BlockListTracker.prototype.openElement = function openElement(_element) {};\n\n        BlockListTracker.prototype.closeElement = function closeElement() {};\n\n        BlockListTracker.prototype.didAppendNode = function didAppendNode(_node) {};\n\n        BlockListTracker.prototype.didAppendBounds = function didAppendBounds(_bounds) {};\n\n        BlockListTracker.prototype.newDestroyable = function newDestroyable(_d) {};\n\n        BlockListTracker.prototype.finalize = function finalize(_stack) {};\n\n        return BlockListTracker;\n    }();\n\n    function clientBuilder(env, cursor) {\n        return NewElementBuilder.forInitialRender(env, cursor);\n    }\n\n    var HI = 0x80000000;\n    var MASK = 0x7FFFFFFF;\n\n    var InnerStack = function () {\n        function InnerStack() {\n            var inner = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new _lowLevel.Stack();\n            var js = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n            (0, _emberBabel.classCallCheck)(this, InnerStack);\n\n            this.inner = inner;\n            this.js = js;\n        }\n\n        InnerStack.prototype.slice = function slice(start, end) {\n            var inner = void 0;\n            if (typeof start === 'number' && typeof end === 'number') {\n                inner = this.inner.slice(start, end);\n            } else if (typeof start === 'number' && end === undefined) {\n                inner = this.inner.sliceFrom(start);\n            } else {\n                inner = this.inner.clone();\n            }\n            return new InnerStack(inner, this.js.slice(start, end));\n        };\n\n        InnerStack.prototype.sliceInner = function sliceInner(start, end) {\n            var out = [];\n            for (var i = start; i < end; i++) {\n                out.push(this.get(i));\n            }\n            return out;\n        };\n\n        InnerStack.prototype.copy = function copy(from, to) {\n            this.inner.copy(from, to);\n        };\n\n        InnerStack.prototype.write = function write(pos, value) {\n            if (isImmediate(value)) {\n                this.inner.writeRaw(pos, encodeImmediate(value));\n            } else {\n                var idx = this.js.length;\n                this.js.push(value);\n                this.inner.writeRaw(pos, idx | HI);\n            }\n        };\n\n        InnerStack.prototype.writeSmi = function writeSmi(pos, value) {\n            this.inner.writeSmi(pos, value);\n        };\n\n        InnerStack.prototype.writeImmediate = function writeImmediate(pos, value) {\n            this.inner.writeRaw(pos, value);\n        };\n\n        InnerStack.prototype.get = function get(pos) {\n            var value = this.inner.getRaw(pos);\n            if (value & HI) {\n                return this.js[value & MASK];\n            } else {\n                return decodeImmediate(value);\n            }\n        };\n\n        InnerStack.prototype.getSmi = function getSmi(pos) {\n            return this.inner.getSmi(pos);\n        };\n\n        InnerStack.prototype.reset = function reset() {\n            this.inner.reset();\n            this.js.length = 0;\n        };\n\n        (0, _emberBabel.createClass)(InnerStack, [{\n            key: 'length',\n            get: function () {\n                return this.inner.len();\n            }\n        }]);\n        return InnerStack;\n    }();\n\n    var EvaluationStack = function () {\n        function EvaluationStack(stack, fp, sp) {\n            (0, _emberBabel.classCallCheck)(this, EvaluationStack);\n\n            this.stack = stack;\n            this.fp = fp;\n            this.sp = sp;\n        }\n\n        EvaluationStack.empty = function empty() {\n            return new this(new InnerStack(), 0, -1);\n        };\n\n        EvaluationStack.restore = function restore(snapshot) {\n            var stack = new InnerStack();\n            for (var i = 0; i < snapshot.length; i++) {\n                stack.write(i, snapshot[i]);\n            }\n            return new this(stack, 0, snapshot.length - 1);\n        };\n\n        EvaluationStack.prototype.push = function push(value) {\n            this.stack.write(++this.sp, value);\n        };\n\n        EvaluationStack.prototype.pushSmi = function pushSmi(value) {\n            this.stack.writeSmi(++this.sp, value);\n        };\n\n        EvaluationStack.prototype.pushImmediate = function pushImmediate(value) {\n            this.stack.writeImmediate(++this.sp, encodeImmediate(value));\n        };\n\n        EvaluationStack.prototype.pushEncodedImmediate = function pushEncodedImmediate(value) {\n            this.stack.writeImmediate(++this.sp, value);\n        };\n\n        EvaluationStack.prototype.pushNull = function pushNull() {\n            this.stack.writeImmediate(++this.sp, 19 /* Null */);\n        };\n\n        EvaluationStack.prototype.dup = function dup() {\n            var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.sp;\n\n            this.stack.copy(position, ++this.sp);\n        };\n\n        EvaluationStack.prototype.copy = function copy(from, to) {\n            this.stack.copy(from, to);\n        };\n\n        EvaluationStack.prototype.pop = function pop() {\n            var n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n\n            var top = this.stack.get(this.sp);\n            this.sp -= n;\n            return top;\n        };\n\n        EvaluationStack.prototype.popSmi = function popSmi() {\n            return this.stack.getSmi(this.sp--);\n        };\n\n        EvaluationStack.prototype.peek = function peek() {\n            var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n            return this.stack.get(this.sp - offset);\n        };\n\n        EvaluationStack.prototype.peekSmi = function peekSmi() {\n            var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n            return this.stack.getSmi(this.sp - offset);\n        };\n\n        EvaluationStack.prototype.get = function get(offset) {\n            var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.fp;\n\n            return this.stack.get(base + offset);\n        };\n\n        EvaluationStack.prototype.getSmi = function getSmi(offset) {\n            var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.fp;\n\n            return this.stack.getSmi(base + offset);\n        };\n\n        EvaluationStack.prototype.set = function set(value, offset) {\n            var base = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.fp;\n\n            this.stack.write(base + offset, value);\n        };\n\n        EvaluationStack.prototype.slice = function slice(start, end) {\n            return this.stack.slice(start, end);\n        };\n\n        EvaluationStack.prototype.sliceArray = function sliceArray(start, end) {\n            return this.stack.sliceInner(start, end);\n        };\n\n        EvaluationStack.prototype.capture = function capture(items) {\n            var end = this.sp + 1;\n            var start = end - items;\n            return this.stack.sliceInner(start, end);\n        };\n\n        EvaluationStack.prototype.reset = function reset() {\n            this.stack.reset();\n        };\n\n        EvaluationStack.prototype.toArray = function toArray() {\n            return this.stack.sliceInner(this.fp, this.sp + 1);\n        };\n\n        return EvaluationStack;\n    }();\n\n    function isImmediate(value) {\n        var type = typeof value;\n        if (value === null || value === undefined) return true;\n        switch (type) {\n            case 'boolean':\n            case 'undefined':\n                return true;\n            case 'number':\n                // not an integer\n                if (value % 1 !== 0) return false;\n                var abs = Math.abs(value);\n                // too big\n                if (abs > HI) return false;\n                return true;\n            default:\n                return false;\n        }\n    }\n    function encodeSmi(primitive) {\n        if (primitive < 0) {\n            return Math.abs(primitive) << 3 | 4 /* NEGATIVE */;\n        } else {\n            return primitive << 3 | 0 /* NUMBER */;\n        }\n    }\n    function encodeImmediate(primitive) {\n        switch (typeof primitive) {\n            case 'number':\n                return encodeSmi(primitive);\n            case 'boolean':\n                return primitive ? 11 /* True */ : 3 /* False */;\n            case 'object':\n                // assume null\n                return 19 /* Null */;\n            case 'undefined':\n                return 27 /* Undef */;\n            default:\n                throw (0, _util.unreachable)();\n        }\n    }\n    function decodeSmi(smi) {\n        switch (smi & 7) {\n            case 0 /* NUMBER */:\n                return smi >> 3;\n            case 4 /* NEGATIVE */:\n                return -(smi >> 3);\n            default:\n                throw (0, _util.unreachable)();\n        }\n    }\n    function decodeImmediate(immediate) {\n        switch (immediate) {\n            case 3 /* False */:\n                return false;\n            case 11 /* True */:\n                return true;\n            case 19 /* Null */:\n                return null;\n            case 27 /* Undef */:\n                return undefined;\n            default:\n                return decodeSmi(immediate);\n        }\n    }\n\n    var UpdatingVM = function () {\n        function UpdatingVM(env, program, _ref51) {\n            var _ref51$alwaysRevalida = _ref51.alwaysRevalidate,\n                alwaysRevalidate = _ref51$alwaysRevalida === undefined ? false : _ref51$alwaysRevalida;\n            (0, _emberBabel.classCallCheck)(this, UpdatingVM);\n\n            this.frameStack = new _util.Stack();\n            this.env = env;\n            this.constants = program.constants;\n            this.dom = env.getDOM();\n            this.alwaysRevalidate = alwaysRevalidate;\n        }\n\n        UpdatingVM.prototype.execute = function execute(opcodes, handler) {\n            var frameStack = this.frameStack;\n\n            this.try(opcodes, handler);\n            while (true) {\n                if (frameStack.isEmpty()) break;\n                var opcode = this.frame.nextStatement();\n                if (opcode === null) {\n                    this.frameStack.pop();\n                    continue;\n                }\n                opcode.evaluate(this);\n            }\n        };\n\n        UpdatingVM.prototype.goto = function goto(op) {\n            this.frame.goto(op);\n        };\n\n        UpdatingVM.prototype.try = function _try(ops, handler) {\n            this.frameStack.push(new UpdatingVMFrame(ops, handler));\n        };\n\n        UpdatingVM.prototype.throw = function _throw() {\n            this.frame.handleException();\n            this.frameStack.pop();\n        };\n\n        (0, _emberBabel.createClass)(UpdatingVM, [{\n            key: 'frame',\n            get: function () {\n                return this.frameStack.current;\n            }\n        }]);\n        return UpdatingVM;\n    }();\n\n    var BlockOpcode = function (_UpdatingOpcode9) {\n        (0, _emberBabel.inherits)(BlockOpcode, _UpdatingOpcode9);\n\n        function BlockOpcode(start, state, bounds$$1, children) {\n            (0, _emberBabel.classCallCheck)(this, BlockOpcode);\n\n            var _this32 = (0, _emberBabel.possibleConstructorReturn)(this, _UpdatingOpcode9.call(this));\n\n            _this32.start = start;\n            _this32.state = state;\n            _this32.type = \"block\";\n            _this32.next = null;\n            _this32.prev = null;\n            _this32.children = children;\n            _this32.bounds = bounds$$1;\n            return _this32;\n        }\n\n        BlockOpcode.prototype.parentElement = function parentElement() {\n            return this.bounds.parentElement();\n        };\n\n        BlockOpcode.prototype.firstNode = function firstNode() {\n            return this.bounds.firstNode();\n        };\n\n        BlockOpcode.prototype.lastNode = function lastNode() {\n            return this.bounds.lastNode();\n        };\n\n        BlockOpcode.prototype.evaluate = function evaluate(vm$$1) {\n            vm$$1.try(this.children, null);\n        };\n\n        BlockOpcode.prototype.destroy = function destroy() {\n            this.bounds.destroy();\n        };\n\n        BlockOpcode.prototype.didDestroy = function didDestroy() {\n            this.state.env.didDestroy(this.bounds);\n        };\n\n        return BlockOpcode;\n    }(UpdatingOpcode);\n\n    var TryOpcode = function (_BlockOpcode) {\n        (0, _emberBabel.inherits)(TryOpcode, _BlockOpcode);\n\n        function TryOpcode(start, state, bounds$$1, children) {\n            (0, _emberBabel.classCallCheck)(this, TryOpcode);\n\n            var _this33 = (0, _emberBabel.possibleConstructorReturn)(this, _BlockOpcode.call(this, start, state, bounds$$1, children));\n\n            _this33.type = \"try\";\n            _this33.tag = _this33._tag = _reference.UpdatableTag.create(_reference.CONSTANT_TAG);\n            return _this33;\n        }\n\n        TryOpcode.prototype.didInitializeChildren = function didInitializeChildren() {\n            this._tag.inner.update((0, _reference.combineSlice)(this.children));\n        };\n\n        TryOpcode.prototype.evaluate = function evaluate(vm$$1) {\n            vm$$1.try(this.children, this);\n        };\n\n        TryOpcode.prototype.handleException = function handleException() {\n            var _this34 = this;\n\n            var state = this.state,\n                bounds$$1 = this.bounds,\n                children = this.children,\n                start = this.start,\n                prev = this.prev,\n                next = this.next;\n\n            children.clear();\n            var elementStack = NewElementBuilder.resume(state.env, bounds$$1, bounds$$1.reset(state.env));\n            var vm$$1 = VM.resume(state, elementStack);\n            var updating = new _util.LinkedList();\n            vm$$1.execute(start, function (vm$$1) {\n                vm$$1.stack = EvaluationStack.restore(state.stack);\n                vm$$1.updatingOpcodeStack.push(updating);\n                vm$$1.updateWith(_this34);\n                vm$$1.updatingOpcodeStack.push(children);\n            });\n            this.prev = prev;\n            this.next = next;\n        };\n\n        return TryOpcode;\n    }(BlockOpcode);\n\n    var ListRevalidationDelegate = function () {\n        function ListRevalidationDelegate(opcode, marker) {\n            (0, _emberBabel.classCallCheck)(this, ListRevalidationDelegate);\n\n            this.opcode = opcode;\n            this.marker = marker;\n            this.didInsert = false;\n            this.didDelete = false;\n            this.map = opcode.map;\n            this.updating = opcode['children'];\n        }\n\n        ListRevalidationDelegate.prototype.insert = function insert(key, item, memo, before) {\n            var map = this.map,\n                opcode = this.opcode,\n                updating = this.updating;\n\n            var nextSibling = null;\n            var reference$$1 = null;\n            if (before) {\n                reference$$1 = map[before];\n                nextSibling = reference$$1['bounds'].firstNode();\n            } else {\n                nextSibling = this.marker;\n            }\n            var vm$$1 = opcode.vmForInsertion(nextSibling);\n            var tryOpcode = null;\n            var start = opcode.start;\n\n            vm$$1.execute(start, function (vm$$1) {\n                map[key] = tryOpcode = vm$$1.iterate(memo, item);\n                vm$$1.updatingOpcodeStack.push(new _util.LinkedList());\n                vm$$1.updateWith(tryOpcode);\n                vm$$1.updatingOpcodeStack.push(tryOpcode.children);\n            });\n            updating.insertBefore(tryOpcode, reference$$1);\n            this.didInsert = true;\n        };\n\n        ListRevalidationDelegate.prototype.retain = function retain(_key, _item, _memo) {};\n\n        ListRevalidationDelegate.prototype.move = function move(key, _item, _memo, before) {\n            var map = this.map,\n                updating = this.updating;\n\n            var entry = map[key];\n            var reference$$1 = map[before] || null;\n            if (before) {\n                _move(entry, reference$$1.firstNode());\n            } else {\n                _move(entry, this.marker);\n            }\n            updating.remove(entry);\n            updating.insertBefore(entry, reference$$1);\n        };\n\n        ListRevalidationDelegate.prototype.delete = function _delete(key) {\n            var map = this.map;\n\n            var opcode = map[key];\n            opcode.didDestroy();\n            clear(opcode);\n            this.updating.remove(opcode);\n            delete map[key];\n            this.didDelete = true;\n        };\n\n        ListRevalidationDelegate.prototype.done = function done() {\n            this.opcode.didInitializeChildren(this.didInsert || this.didDelete);\n        };\n\n        return ListRevalidationDelegate;\n    }();\n\n    var ListBlockOpcode = function (_BlockOpcode2) {\n        (0, _emberBabel.inherits)(ListBlockOpcode, _BlockOpcode2);\n\n        function ListBlockOpcode(start, state, bounds$$1, children, artifacts) {\n            (0, _emberBabel.classCallCheck)(this, ListBlockOpcode);\n\n            var _this35 = (0, _emberBabel.possibleConstructorReturn)(this, _BlockOpcode2.call(this, start, state, bounds$$1, children));\n\n            _this35.type = \"list-block\";\n            _this35.map = (0, _util.dict)();\n            _this35.lastIterated = _reference.INITIAL;\n            _this35.artifacts = artifacts;\n            var _tag = _this35._tag = _reference.UpdatableTag.create(_reference.CONSTANT_TAG);\n            _this35.tag = (0, _reference.combine)([artifacts.tag, _tag]);\n            return _this35;\n        }\n\n        ListBlockOpcode.prototype.didInitializeChildren = function didInitializeChildren() {\n            var listDidChange = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n            this.lastIterated = this.artifacts.tag.value();\n            if (listDidChange) {\n                this._tag.inner.update((0, _reference.combineSlice)(this.children));\n            }\n        };\n\n        ListBlockOpcode.prototype.evaluate = function evaluate(vm$$1) {\n            var artifacts = this.artifacts,\n                lastIterated = this.lastIterated;\n\n            if (!artifacts.tag.validate(lastIterated)) {\n                var bounds$$1 = this.bounds;\n                var dom = vm$$1.dom;\n\n                var marker = dom.createComment('');\n                dom.insertAfter(bounds$$1.parentElement(), marker, bounds$$1.lastNode());\n                var target = new ListRevalidationDelegate(this, marker);\n                var synchronizer = new _reference.IteratorSynchronizer({ target: target, artifacts: artifacts });\n                synchronizer.sync();\n                this.parentElement().removeChild(marker);\n            }\n            // Run now-updated updating opcodes\n            _BlockOpcode2.prototype.evaluate.call(this, vm$$1);\n        };\n\n        ListBlockOpcode.prototype.vmForInsertion = function vmForInsertion(nextSibling) {\n            var bounds$$1 = this.bounds,\n                state = this.state;\n\n            var elementStack = NewElementBuilder.forInitialRender(state.env, { element: bounds$$1.parentElement(), nextSibling: nextSibling });\n            return VM.resume(state, elementStack);\n        };\n\n        return ListBlockOpcode;\n    }(BlockOpcode);\n\n    var UpdatingVMFrame = function () {\n        function UpdatingVMFrame(ops, exceptionHandler) {\n            (0, _emberBabel.classCallCheck)(this, UpdatingVMFrame);\n\n            this.ops = ops;\n            this.exceptionHandler = exceptionHandler;\n            this.current = ops.head();\n        }\n\n        UpdatingVMFrame.prototype.goto = function goto(op) {\n            this.current = op;\n        };\n\n        UpdatingVMFrame.prototype.nextStatement = function nextStatement() {\n            var current = this.current,\n                ops = this.ops;\n\n            if (current) this.current = ops.nextNode(current);\n            return current;\n        };\n\n        UpdatingVMFrame.prototype.handleException = function handleException() {\n            if (this.exceptionHandler) {\n                this.exceptionHandler.handleException();\n            }\n        };\n\n        return UpdatingVMFrame;\n    }();\n\n    var RenderResult = function () {\n        function RenderResult(env, program, updating, bounds$$1) {\n            (0, _emberBabel.classCallCheck)(this, RenderResult);\n\n            this.env = env;\n            this.program = program;\n            this.updating = updating;\n            this.bounds = bounds$$1;\n        }\n\n        RenderResult.prototype.rerender = function rerender() {\n            var _ref52 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { alwaysRevalidate: false },\n                _ref52$alwaysRevalida = _ref52.alwaysRevalidate,\n                alwaysRevalidate = _ref52$alwaysRevalida === undefined ? false : _ref52$alwaysRevalida;\n\n            var env = this.env,\n                program = this.program,\n                updating = this.updating;\n\n            var vm$$1 = new UpdatingVM(env, program, { alwaysRevalidate: alwaysRevalidate });\n            vm$$1.execute(updating, this);\n        };\n\n        RenderResult.prototype.parentElement = function parentElement() {\n            return this.bounds.parentElement();\n        };\n\n        RenderResult.prototype.firstNode = function firstNode() {\n            return this.bounds.firstNode();\n        };\n\n        RenderResult.prototype.lastNode = function lastNode() {\n            return this.bounds.lastNode();\n        };\n\n        RenderResult.prototype.handleException = function handleException() {\n            throw \"this should never happen\";\n        };\n\n        RenderResult.prototype.destroy = function destroy() {\n            this.bounds.destroy();\n            clear(this.bounds);\n        };\n\n        return RenderResult;\n    }();\n\n    var Arguments = function () {\n        function Arguments() {\n            (0, _emberBabel.classCallCheck)(this, Arguments);\n\n            this.stack = null;\n            this.positional = new PositionalArguments();\n            this.named = new NamedArguments();\n            this.blocks = new BlockArguments();\n        }\n\n        Arguments.prototype.setup = function setup(stack, names, blockNames, positionalCount, synthetic) {\n            this.stack = stack;\n            /*\n                   | ... | blocks      | positional  | named |\n                   | ... | b0    b1    | p0 p1 p2 p3 | n0 n1 |\n             index | ... | 4/5/6 7/8/9 | 10 11 12 13 | 14 15 |\n                           ^             ^             ^  ^\n                         bbase         pbase       nbase  sp\n            */\n            var named = this.named;\n            var namedCount = names.length;\n            var namedBase = stack.sp - namedCount + 1;\n            named.setup(stack, namedBase, namedCount, names, synthetic);\n            var positional = this.positional;\n            var positionalBase = namedBase - positionalCount;\n            positional.setup(stack, positionalBase, positionalCount);\n            var blocks = this.blocks;\n            var blocksCount = blockNames.length;\n            var blocksBase = positionalBase - blocksCount * 3;\n            blocks.setup(stack, blocksBase, blocksCount, blockNames);\n        };\n\n        Arguments.prototype.at = function at(pos) {\n            return this.positional.at(pos);\n        };\n\n        Arguments.prototype.realloc = function realloc(offset) {\n            var stack = this.stack;\n\n            if (offset > 0 && stack !== null) {\n                var positional = this.positional,\n                    named = this.named;\n\n                var newBase = positional.base + offset;\n                var length = positional.length + named.length;\n                for (var i = length - 1; i >= 0; i--) {\n                    stack.copy(i + positional.base, i + newBase);\n                }\n                positional.base += offset;\n                named.base += offset;\n                stack.sp += offset;\n            }\n        };\n\n        Arguments.prototype.capture = function capture() {\n            var positional = this.positional.length === 0 ? EMPTY_POSITIONAL : this.positional.capture();\n            var named = this.named.length === 0 ? EMPTY_NAMED : this.named.capture();\n            return {\n                tag: this.tag,\n                length: this.length,\n                positional: positional,\n                named: named\n            };\n        };\n\n        Arguments.prototype.clear = function clear() {\n            var stack = this.stack,\n                length = this.length;\n\n            if (length > 0 && stack !== null) stack.pop(length);\n        };\n\n        (0, _emberBabel.createClass)(Arguments, [{\n            key: 'tag',\n            get: function () {\n                return (0, _reference.combineTagged)([this.positional, this.named]);\n            }\n        }, {\n            key: 'base',\n            get: function () {\n                return this.blocks.base;\n            }\n        }, {\n            key: 'length',\n            get: function () {\n                return this.positional.length + this.named.length + this.blocks.length * 3;\n            }\n        }]);\n        return Arguments;\n    }();\n\n    var PositionalArguments = function () {\n        function PositionalArguments() {\n            (0, _emberBabel.classCallCheck)(this, PositionalArguments);\n\n            this.base = 0;\n            this.length = 0;\n            this.stack = null;\n            this._tag = null;\n            this._references = null;\n        }\n\n        PositionalArguments.prototype.setup = function setup(stack, base, length) {\n            this.stack = stack;\n            this.base = base;\n            this.length = length;\n            if (length === 0) {\n                this._tag = _reference.CONSTANT_TAG;\n                this._references = _util.EMPTY_ARRAY;\n            } else {\n                this._tag = null;\n                this._references = null;\n            }\n        };\n\n        PositionalArguments.prototype.at = function at(position) {\n            var base = this.base,\n                length = this.length,\n                stack = this.stack;\n\n            if (position < 0 || position >= length) {\n                return UNDEFINED_REFERENCE;\n            }\n            return stack.get(position, base);\n        };\n\n        PositionalArguments.prototype.capture = function capture() {\n            return new CapturedPositionalArguments(this.tag, this.references);\n        };\n\n        PositionalArguments.prototype.prepend = function prepend(other) {\n            var additions = other.length;\n            if (additions > 0) {\n                var base = this.base,\n                    length = this.length,\n                    stack = this.stack;\n\n                this.base = base = base - additions;\n                this.length = length + additions;\n                for (var i = 0; i < additions; i++) {\n                    stack.set(other.at(i), i, base);\n                }\n                this._tag = null;\n                this._references = null;\n            }\n        };\n\n        (0, _emberBabel.createClass)(PositionalArguments, [{\n            key: 'tag',\n            get: function () {\n                var tag = this._tag;\n                if (!tag) {\n                    tag = this._tag = (0, _reference.combineTagged)(this.references);\n                }\n                return tag;\n            }\n        }, {\n            key: 'references',\n            get: function () {\n                var references = this._references;\n                if (!references) {\n                    var stack = this.stack,\n                        base = this.base,\n                        length = this.length;\n\n                    references = this._references = stack.sliceArray(base, base + length);\n                }\n                return references;\n            }\n        }]);\n        return PositionalArguments;\n    }();\n\n    var CapturedPositionalArguments = function () {\n        function CapturedPositionalArguments(tag, references) {\n            var length = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : references.length;\n            (0, _emberBabel.classCallCheck)(this, CapturedPositionalArguments);\n\n            this.tag = tag;\n            this.references = references;\n            this.length = length;\n        }\n\n        CapturedPositionalArguments.empty = function empty() {\n            return new CapturedPositionalArguments(_reference.CONSTANT_TAG, _util.EMPTY_ARRAY, 0);\n        };\n\n        CapturedPositionalArguments.prototype.at = function at(position) {\n            return this.references[position];\n        };\n\n        CapturedPositionalArguments.prototype.value = function value() {\n            return this.references.map(this.valueOf);\n        };\n\n        CapturedPositionalArguments.prototype.get = function get(name) {\n            var references = this.references,\n                length = this.length;\n\n            if (name === 'length') {\n                return PrimitiveReference.create(length);\n            } else {\n                var idx = parseInt(name, 10);\n                if (idx < 0 || idx >= length) {\n                    return UNDEFINED_REFERENCE;\n                } else {\n                    return references[idx];\n                }\n            }\n        };\n\n        CapturedPositionalArguments.prototype.valueOf = function valueOf(reference$$1) {\n            return reference$$1.value();\n        };\n\n        return CapturedPositionalArguments;\n    }();\n\n    var NamedArguments = function () {\n        function NamedArguments() {\n            (0, _emberBabel.classCallCheck)(this, NamedArguments);\n\n            this.base = 0;\n            this.length = 0;\n            this._references = null;\n            this._names = _util.EMPTY_ARRAY;\n            this._atNames = _util.EMPTY_ARRAY;\n        }\n\n        NamedArguments.prototype.setup = function setup(stack, base, length, names, synthetic) {\n            this.stack = stack;\n            this.base = base;\n            this.length = length;\n            if (length === 0) {\n                this._references = _util.EMPTY_ARRAY;\n                this._names = _util.EMPTY_ARRAY;\n                this._atNames = _util.EMPTY_ARRAY;\n            } else {\n                this._references = null;\n                if (synthetic) {\n                    this._names = names;\n                    this._atNames = null;\n                } else {\n                    this._names = null;\n                    this._atNames = names;\n                }\n            }\n        };\n\n        NamedArguments.prototype.has = function has(name) {\n            return this.names.indexOf(name) !== -1;\n        };\n\n        NamedArguments.prototype.get = function get(name) {\n            var synthetic = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n            var base = this.base,\n                stack = this.stack;\n\n            var names = synthetic ? this.names : this.atNames;\n            var idx = names.indexOf(name);\n            if (idx === -1) {\n                return UNDEFINED_REFERENCE;\n            }\n            return stack.get(idx, base);\n        };\n\n        NamedArguments.prototype.capture = function capture() {\n            return new CapturedNamedArguments(this.tag, this.names, this.references);\n        };\n\n        NamedArguments.prototype.merge = function merge(other) {\n            var extras = other.length;\n\n            if (extras > 0) {\n                var names = this.names,\n                    length = this.length,\n                    stack = this.stack;\n                var extraNames = other.names;\n\n                if (Object.isFrozen(names) && names.length === 0) {\n                    names = [];\n                }\n                for (var i = 0; i < extras; i++) {\n                    var name = extraNames[i];\n                    var idx = names.indexOf(name);\n                    if (idx === -1) {\n                        length = names.push(name);\n                        stack.push(other.references[i]);\n                    }\n                }\n                this.length = length;\n                this._references = null;\n                this._names = names;\n                this._atNames = null;\n            }\n        };\n\n        NamedArguments.prototype.toSyntheticName = function toSyntheticName(name) {\n            return name.slice(1);\n        };\n\n        NamedArguments.prototype.toAtName = function toAtName(name) {\n            return '@' + name;\n        };\n\n        (0, _emberBabel.createClass)(NamedArguments, [{\n            key: 'tag',\n            get: function () {\n                return (0, _reference.combineTagged)(this.references);\n            }\n        }, {\n            key: 'names',\n            get: function () {\n                var names = this._names;\n                if (!names) {\n                    names = this._names = this._atNames.map(this.toSyntheticName);\n                }\n                return names;\n            }\n        }, {\n            key: 'atNames',\n            get: function () {\n                var atNames = this._atNames;\n                if (!atNames) {\n                    atNames = this._atNames = this._names.map(this.toAtName);\n                }\n                return atNames;\n            }\n        }, {\n            key: 'references',\n            get: function () {\n                var references = this._references;\n                if (!references) {\n                    var base = this.base,\n                        length = this.length,\n                        stack = this.stack;\n\n                    references = this._references = stack.sliceArray(base, base + length);\n                }\n                return references;\n            }\n        }]);\n        return NamedArguments;\n    }();\n\n    var CapturedNamedArguments = function () {\n        function CapturedNamedArguments(tag, names, references) {\n            (0, _emberBabel.classCallCheck)(this, CapturedNamedArguments);\n\n            this.tag = tag;\n            this.names = names;\n            this.references = references;\n            this.length = names.length;\n            this._map = null;\n        }\n\n        CapturedNamedArguments.prototype.has = function has(name) {\n            return this.names.indexOf(name) !== -1;\n        };\n\n        CapturedNamedArguments.prototype.get = function get(name) {\n            var names = this.names,\n                references = this.references;\n\n            var idx = names.indexOf(name);\n            if (idx === -1) {\n                return UNDEFINED_REFERENCE;\n            } else {\n                return references[idx];\n            }\n        };\n\n        CapturedNamedArguments.prototype.value = function value() {\n            var names = this.names,\n                references = this.references;\n\n            var out = (0, _util.dict)();\n            for (var i = 0; i < names.length; i++) {\n                var name = names[i];\n                out[name] = references[i].value();\n            }\n            return out;\n        };\n\n        (0, _emberBabel.createClass)(CapturedNamedArguments, [{\n            key: 'map',\n            get: function () {\n                var map = this._map;\n                if (!map) {\n                    var names = this.names,\n                        references = this.references;\n\n                    map = this._map = (0, _util.dict)();\n                    for (var i = 0; i < names.length; i++) {\n                        var name = names[i];\n                        map[name] = references[i];\n                    }\n                }\n                return map;\n            }\n        }]);\n        return CapturedNamedArguments;\n    }();\n\n    var BlockArguments = function () {\n        function BlockArguments() {\n            (0, _emberBabel.classCallCheck)(this, BlockArguments);\n\n            this.internalValues = null;\n            this.internalTag = null;\n            this.names = _util.EMPTY_ARRAY;\n            this.length = 0;\n            this.base = 0;\n        }\n\n        BlockArguments.prototype.setup = function setup(stack, base, length, names) {\n            this.stack = stack;\n            this.names = names;\n            this.base = base;\n            this.length = length;\n            if (length === 0) {\n                this.internalTag = _reference.CONSTANT_TAG;\n                this.internalValues = _util.EMPTY_ARRAY;\n            } else {\n                this.internalTag = null;\n                this.internalValues = null;\n            }\n        };\n\n        BlockArguments.prototype.has = function has(name) {\n            return this.names.indexOf(name) !== -1;\n        };\n\n        BlockArguments.prototype.get = function get(name) {\n            var base = this.base,\n                stack = this.stack,\n                names = this.names;\n\n            var idx = names.indexOf(name);\n            if (names.indexOf(name) === -1) {\n                return null;\n            }\n            var table = stack.get(idx * 3, base);\n            var scope = stack.get(idx * 3 + 1, base); // FIXME(mmun): shouldn't need to cast this\n            var handle = stack.get(idx * 3 + 2, base);\n            return handle === null ? null : [handle, scope, table];\n        };\n\n        BlockArguments.prototype.capture = function capture() {\n            return new CapturedBlockArguments(this.names, this.values);\n        };\n\n        (0, _emberBabel.createClass)(BlockArguments, [{\n            key: 'values',\n            get: function () {\n                var values = this.internalValues;\n                if (!values) {\n                    var base = this.base,\n                        length = this.length,\n                        stack = this.stack;\n\n                    values = this.internalValues = stack.sliceArray(base, base + length * 3);\n                }\n                return values;\n            }\n        }]);\n        return BlockArguments;\n    }();\n\n    var CapturedBlockArguments = function () {\n        function CapturedBlockArguments(names, values) {\n            (0, _emberBabel.classCallCheck)(this, CapturedBlockArguments);\n\n            this.names = names;\n            this.values = values;\n            this.length = names.length;\n        }\n\n        CapturedBlockArguments.prototype.has = function has(name) {\n            return this.names.indexOf(name) !== -1;\n        };\n\n        CapturedBlockArguments.prototype.get = function get(name) {\n            var idx = this.names.indexOf(name);\n            if (idx === -1) return null;\n            return [this.values[idx * 3 + 2], this.values[idx * 3 + 1], this.values[idx * 3]];\n        };\n\n        return CapturedBlockArguments;\n    }();\n\n    var EMPTY_NAMED = new CapturedNamedArguments(_reference.CONSTANT_TAG, _util.EMPTY_ARRAY, _util.EMPTY_ARRAY);\n    var EMPTY_POSITIONAL = new CapturedPositionalArguments(_reference.CONSTANT_TAG, _util.EMPTY_ARRAY);\n    var EMPTY_ARGS = { tag: _reference.CONSTANT_TAG, length: 0, positional: EMPTY_POSITIONAL, named: EMPTY_NAMED };\n\n    var VM = function () {\n        function VM(program, env, scope, dynamicScope, elementStack) {\n            var _this36 = this;\n\n            (0, _emberBabel.classCallCheck)(this, VM);\n\n            this.program = program;\n            this.env = env;\n            this.elementStack = elementStack;\n            this.dynamicScopeStack = new _util.Stack();\n            this.scopeStack = new _util.Stack();\n            this.updatingOpcodeStack = new _util.Stack();\n            this.cacheGroups = new _util.Stack();\n            this.listBlockStack = new _util.Stack();\n            this.s0 = null;\n            this.s1 = null;\n            this.t0 = null;\n            this.t1 = null;\n            this.v0 = null;\n            this.env = env;\n            this.heap = program.heap;\n            this.constants = program.constants;\n            this.elementStack = elementStack;\n            this.scopeStack.push(scope);\n            this.dynamicScopeStack.push(dynamicScope);\n            this.args = new Arguments();\n            this.inner = new LowLevelVM(EvaluationStack.empty(), this.heap, program, {\n                debugBefore: function (opcode) {\n                    return APPEND_OPCODES.debugBefore(_this36, opcode, opcode.type);\n                },\n                debugAfter: function (opcode, state) {\n                    APPEND_OPCODES.debugAfter(_this36, opcode, opcode.type, state);\n                }\n            });\n        }\n\n        VM.prototype.fetch = function fetch(register) {\n            this.stack.push(this[_vm2.Register[register]]);\n        };\n\n        VM.prototype.load = function load(register) {\n            this[_vm2.Register[register]] = this.stack.pop();\n        };\n\n        VM.prototype.fetchValue = function fetchValue(register) {\n            return this[_vm2.Register[register]];\n        };\n\n        VM.prototype.loadValue = function loadValue(register, value) {\n            this[_vm2.Register[register]] = value;\n        };\n\n        VM.prototype.pushFrame = function pushFrame() {\n            this.inner.pushFrame();\n        };\n\n        VM.prototype.popFrame = function popFrame() {\n            this.inner.popFrame();\n        };\n\n        VM.prototype.goto = function goto(offset) {\n            this.inner.goto(offset);\n        };\n\n        VM.prototype.call = function call(handle) {\n            this.inner.call(handle);\n        };\n\n        VM.prototype.returnTo = function returnTo(offset) {\n            this.inner.returnTo(offset);\n        };\n\n        VM.prototype.return = function _return() {\n            this.inner.return();\n        };\n\n        VM.initial = function initial(program, env, self, dynamicScope, elementStack, handle) {\n            var scopeSize = program.heap.scopesizeof(handle);\n            var scope = Scope.root(self, scopeSize);\n            var vm$$1 = new VM(program, env, scope, dynamicScope, elementStack);\n            vm$$1.pc = vm$$1.heap.getaddr(handle);\n            vm$$1.updatingOpcodeStack.push(new _util.LinkedList());\n            return vm$$1;\n        };\n\n        VM.empty = function empty(program, env, elementStack) {\n            var dynamicScope = {\n                get: function () {\n                    return UNDEFINED_REFERENCE;\n                },\n                set: function () {\n                    return UNDEFINED_REFERENCE;\n                },\n                child: function () {\n                    return dynamicScope;\n                }\n            };\n            var vm$$1 = new VM(program, env, Scope.root(UNDEFINED_REFERENCE, 0), dynamicScope, elementStack);\n            vm$$1.updatingOpcodeStack.push(new _util.LinkedList());\n            return vm$$1;\n        };\n\n        VM.resume = function resume(_ref53, stack) {\n            var program = _ref53.program,\n                env = _ref53.env,\n                scope = _ref53.scope,\n                dynamicScope = _ref53.dynamicScope;\n\n            return new VM(program, env, scope, dynamicScope, stack);\n        };\n\n        VM.prototype.capture = function capture(args) {\n            return {\n                env: this.env,\n                program: this.program,\n                dynamicScope: this.dynamicScope(),\n                scope: this.scope(),\n                stack: this.stack.capture(args)\n            };\n        };\n\n        VM.prototype.beginCacheGroup = function beginCacheGroup() {\n            this.cacheGroups.push(this.updating().tail());\n        };\n\n        VM.prototype.commitCacheGroup = function commitCacheGroup() {\n            //        JumpIfNotModified(END)\n            //        (head)\n            //        (....)\n            //        (tail)\n            //        DidModify\n            // END:   Noop\n            var END = new LabelOpcode(\"END\");\n            var opcodes = this.updating();\n            var marker = this.cacheGroups.pop();\n            var head = marker ? opcodes.nextNode(marker) : opcodes.head();\n            var tail = opcodes.tail();\n            var tag = (0, _reference.combineSlice)(new _util.ListSlice(head, tail));\n            var guard = new JumpIfNotModifiedOpcode(tag, END);\n            opcodes.insertBefore(guard, head);\n            opcodes.append(new DidModifyOpcode(guard));\n            opcodes.append(END);\n        };\n\n        VM.prototype.enter = function enter(args) {\n            var updating = new _util.LinkedList();\n            var state = this.capture(args);\n            var tracker = this.elements().pushUpdatableBlock();\n            var tryOpcode = new TryOpcode(this.heap.gethandle(this.pc), state, tracker, updating);\n            this.didEnter(tryOpcode);\n        };\n\n        VM.prototype.iterate = function iterate(memo, value) {\n            var stack = this.stack;\n            stack.push(value);\n            stack.push(memo);\n            var state = this.capture(2);\n            var tracker = this.elements().pushUpdatableBlock();\n            // let ip = this.ip;\n            // this.ip = end + 4;\n            // this.frames.push(ip);\n            return new TryOpcode(this.heap.gethandle(this.pc), state, tracker, new _util.LinkedList());\n        };\n\n        VM.prototype.enterItem = function enterItem(key, opcode) {\n            this.listBlock().map[key] = opcode;\n            this.didEnter(opcode);\n        };\n\n        VM.prototype.enterList = function enterList(relativeStart) {\n            var updating = new _util.LinkedList();\n            var state = this.capture(0);\n            var tracker = this.elements().pushBlockList(updating);\n            var artifacts = this.stack.peek().artifacts;\n            var addr = this.pc + relativeStart - this.currentOpSize;\n            var start = this.heap.gethandle(addr);\n            var opcode = new ListBlockOpcode(start, state, tracker, updating, artifacts);\n            this.listBlockStack.push(opcode);\n            this.didEnter(opcode);\n        };\n\n        VM.prototype.didEnter = function didEnter(opcode) {\n            this.updateWith(opcode);\n            this.updatingOpcodeStack.push(opcode.children);\n        };\n\n        VM.prototype.exit = function exit() {\n            this.elements().popBlock();\n            this.updatingOpcodeStack.pop();\n            var parent = this.updating().tail();\n            parent.didInitializeChildren();\n        };\n\n        VM.prototype.exitList = function exitList() {\n            this.exit();\n            this.listBlockStack.pop();\n        };\n\n        VM.prototype.updateWith = function updateWith(opcode) {\n            this.updating().append(opcode);\n        };\n\n        VM.prototype.listBlock = function listBlock() {\n            return this.listBlockStack.current;\n        };\n\n        VM.prototype.updating = function updating() {\n            return this.updatingOpcodeStack.current;\n        };\n\n        VM.prototype.elements = function elements() {\n            return this.elementStack;\n        };\n\n        VM.prototype.scope = function scope() {\n            return this.scopeStack.current;\n        };\n\n        VM.prototype.dynamicScope = function dynamicScope() {\n            return this.dynamicScopeStack.current;\n        };\n\n        VM.prototype.pushChildScope = function pushChildScope() {\n            this.scopeStack.push(this.scope().child());\n        };\n\n        VM.prototype.pushDynamicScope = function pushDynamicScope() {\n            var child = this.dynamicScope().child();\n            this.dynamicScopeStack.push(child);\n            return child;\n        };\n\n        VM.prototype.pushRootScope = function pushRootScope(size, bindCaller) {\n            var scope = Scope.sized(size);\n            if (bindCaller) scope.bindCallerScope(this.scope());\n            this.scopeStack.push(scope);\n            return scope;\n        };\n\n        VM.prototype.pushScope = function pushScope(scope) {\n            this.scopeStack.push(scope);\n        };\n\n        VM.prototype.popScope = function popScope() {\n            this.scopeStack.pop();\n        };\n\n        VM.prototype.popDynamicScope = function popDynamicScope() {\n            this.dynamicScopeStack.pop();\n        };\n\n        VM.prototype.newDestroyable = function newDestroyable(d) {\n            this.elements().didAddDestroyable(d);\n        };\n\n        VM.prototype.getSelf = function getSelf() {\n            return this.scope().getSelf();\n        };\n\n        VM.prototype.referenceForSymbol = function referenceForSymbol(symbol) {\n            return this.scope().getSymbol(symbol);\n        };\n\n        VM.prototype.execute = function execute(start, initialize) {\n            this.pc = this.heap.getaddr(start);\n            if (initialize) initialize(this);\n            var result = void 0;\n            while (true) {\n                result = this.next();\n                if (result.done) break;\n            }\n            return result.value;\n        };\n\n        VM.prototype.next = function next() {\n            var env = this.env,\n                program = this.program,\n                updatingOpcodeStack = this.updatingOpcodeStack,\n                elementStack = this.elementStack;\n\n            var opcode = this.inner.nextStatement();\n            var result = void 0;\n            if (opcode !== null) {\n                this.inner.evaluateOuter(opcode, this);\n                result = { done: false, value: null };\n            } else {\n                // Unload the stack\n                this.stack.reset();\n                result = {\n                    done: true,\n                    value: new RenderResult(env, program, updatingOpcodeStack.pop(), elementStack.popBlock())\n                };\n            }\n            return result;\n        };\n\n        VM.prototype.bindDynamicScope = function bindDynamicScope(names) {\n            var scope = this.dynamicScope();\n            for (var i = names.length - 1; i >= 0; i--) {\n                var name = this.constants.getString(names[i]);\n                scope.set(name, this.stack.pop());\n            }\n        };\n\n        (0, _emberBabel.createClass)(VM, [{\n            key: 'stack',\n            get: function () {\n                return this.inner.stack;\n            },\n            set: function (value) {\n                this.inner.stack = value;\n            }\n        }, {\n            key: 'currentOpSize',\n            set: function (value) {\n                this.inner.currentOpSize = value;\n            },\n            get: function () {\n                return this.inner.currentOpSize;\n            }\n        }, {\n            key: 'pc',\n            get: function () {\n                return this.inner.pc;\n            },\n            set: function (value) {\n                this.inner.pc = value;\n            }\n        }, {\n            key: 'ra',\n            get: function () {\n                return this.inner.ra;\n            },\n            set: function (value) {\n                this.inner.ra = value;\n            }\n        }, {\n            key: 'fp',\n            get: function () {\n                return this.stack.fp;\n            },\n            set: function (fp) {\n                this.stack.fp = fp;\n            }\n        }, {\n            key: 'sp',\n            get: function () {\n                return this.stack.sp;\n            },\n            set: function (sp) {\n                this.stack.sp = sp;\n            }\n        }]);\n        return VM;\n    }();\n\n    var TemplateIteratorImpl = function () {\n        function TemplateIteratorImpl(vm$$1) {\n            (0, _emberBabel.classCallCheck)(this, TemplateIteratorImpl);\n\n            this.vm = vm$$1;\n        }\n\n        TemplateIteratorImpl.prototype.next = function next() {\n            return this.vm.next();\n        };\n\n        return TemplateIteratorImpl;\n    }();\n\n    function render(program, env, self, dynamicScope, builder, handle) {\n        var vm$$1 = VM.initial(program, env, self, dynamicScope, builder, handle);\n        return new TemplateIteratorImpl(vm$$1);\n    }\n\n    var DynamicVarReference = function () {\n        function DynamicVarReference(scope, nameRef) {\n            (0, _emberBabel.classCallCheck)(this, DynamicVarReference);\n\n            this.scope = scope;\n            this.nameRef = nameRef;\n            var varTag = this.varTag = _reference.UpdatableTag.create(_reference.CONSTANT_TAG);\n            this.tag = (0, _reference.combine)([nameRef.tag, varTag]);\n        }\n\n        DynamicVarReference.prototype.value = function value() {\n            return this.getVar().value();\n        };\n\n        DynamicVarReference.prototype.get = function get(key) {\n            return this.getVar().get(key);\n        };\n\n        DynamicVarReference.prototype.getVar = function getVar() {\n            var name = String(this.nameRef.value());\n            var ref = this.scope.get(name);\n            this.varTag.inner.update(ref.tag);\n            return ref;\n        };\n\n        return DynamicVarReference;\n    }();\n\n    function getDynamicVar(vm$$1, args) {\n        var scope = vm$$1.dynamicScope();\n        var nameRef = args.positional.at(0);\n        return new DynamicVarReference(scope, nameRef);\n    }\n\n    /** @internal */\n\n    /** @internal */\n\n    var DEFAULT_CAPABILITIES = {\n        dynamicLayout: true,\n        dynamicTag: true,\n        prepareArgs: true,\n        createArgs: true,\n        attributeHook: false,\n        elementHook: false\n    };\n    var MINIMAL_CAPABILITIES = {\n        dynamicLayout: false,\n        dynamicTag: false,\n        prepareArgs: false,\n        createArgs: false,\n        attributeHook: false,\n        elementHook: false\n    };\n\n    var RehydratingCursor = function (_Cursor) {\n        (0, _emberBabel.inherits)(RehydratingCursor, _Cursor);\n\n        function RehydratingCursor(element, nextSibling, startingBlockDepth) {\n            (0, _emberBabel.classCallCheck)(this, RehydratingCursor);\n\n            var _this37 = (0, _emberBabel.possibleConstructorReturn)(this, _Cursor.call(this, element, nextSibling));\n\n            _this37.startingBlockDepth = startingBlockDepth;\n            _this37.candidate = null;\n            _this37.injectedOmittedNode = false;\n            _this37.openBlockDepth = startingBlockDepth - 1;\n            return _this37;\n        }\n\n        return RehydratingCursor;\n    }(Cursor);\n\n    var RehydrateBuilder = function (_NewElementBuilder) {\n        (0, _emberBabel.inherits)(RehydrateBuilder, _NewElementBuilder);\n\n        // private candidate: Option<Simple.Node> = null;\n        function RehydrateBuilder(env, parentNode, nextSibling) {\n            (0, _emberBabel.classCallCheck)(this, RehydrateBuilder);\n\n            var _this38 = (0, _emberBabel.possibleConstructorReturn)(this, _NewElementBuilder.call(this, env, parentNode, nextSibling));\n\n            _this38.unmatchedAttributes = null;\n            _this38.blockDepth = 0;\n            if (nextSibling) throw new Error(\"Rehydration with nextSibling not supported\");\n            var node = _this38.currentCursor.element.firstChild;\n            while (node !== null) {\n                if (isComment(node) && (0, _util.isSerializationFirstNode)(node)) {\n                    break;\n                }\n                node = node.nextSibling;\n            }\n            _this38.candidate = node;\n            return _this38;\n        }\n\n        RehydrateBuilder.prototype.pushElement = function pushElement(element, nextSibling) {\n            var _blockDepth = this.blockDepth,\n                blockDepth = _blockDepth === undefined ? 0 : _blockDepth;\n\n            var cursor = new RehydratingCursor(element, nextSibling, blockDepth);\n            var currentCursor = this.currentCursor;\n            if (currentCursor) {\n                if (currentCursor.candidate) {\n                    /**\n                     * <div>   <---------------  currentCursor.element\n                     *   <!--%+b:1%-->\n                     *   <div> <---------------  currentCursor.candidate -> cursor.element\n                     *     <!--%+b:2%--> <-  currentCursor.candidate.firstChild -> cursor.candidate\n                     *     Foo\n                     *     <!--%-b:2%-->\n                     *   </div>\n                     *   <!--%-b:1%-->  <--  becomes currentCursor.candidate\n                     */\n                    // where to rehydrate from if we are in rehydration mode\n                    cursor.candidate = element.firstChild;\n                    // where to continue when we pop\n                    currentCursor.candidate = element.nextSibling;\n                }\n            }\n            this.cursorStack.push(cursor);\n        };\n\n        RehydrateBuilder.prototype.clearMismatch = function clearMismatch(candidate) {\n            var current = candidate;\n            var currentCursor = this.currentCursor;\n            if (currentCursor !== null) {\n                var openBlockDepth = currentCursor.openBlockDepth;\n                if (openBlockDepth >= currentCursor.startingBlockDepth) {\n                    while (current && !(isComment(current) && getCloseBlockDepth(current) === openBlockDepth)) {\n                        current = this.remove(current);\n                    }\n                } else {\n                    while (current !== null) {\n                        current = this.remove(current);\n                    }\n                }\n                // current cursor parentNode should be openCandidate if element\n                // or openCandidate.parentNode if comment\n                currentCursor.nextSibling = current;\n                // disable rehydration until we popElement or closeBlock for openBlockDepth\n                currentCursor.candidate = null;\n            }\n        };\n\n        RehydrateBuilder.prototype.__openBlock = function __openBlock() {\n            var currentCursor = this.currentCursor;\n\n            if (currentCursor === null) return;\n            var blockDepth = this.blockDepth;\n            this.blockDepth++;\n            var candidate = currentCursor.candidate;\n\n            if (candidate === null) return;\n            if (isComment(candidate) && getOpenBlockDepth(candidate) === blockDepth) {\n                currentCursor.candidate = this.remove(candidate);\n                currentCursor.openBlockDepth = blockDepth;\n            } else {\n                this.clearMismatch(candidate);\n            }\n        };\n\n        RehydrateBuilder.prototype.__closeBlock = function __closeBlock() {\n            var currentCursor = this.currentCursor;\n\n            if (currentCursor === null) return;\n            // openBlock is the last rehydrated open block\n            var openBlockDepth = currentCursor.openBlockDepth;\n            // this currently is the expected next open block depth\n            this.blockDepth--;\n            var candidate = currentCursor.candidate;\n\n            // rehydrating\n            if (candidate !== null) {\n                if (isComment(candidate) && getCloseBlockDepth(candidate) === openBlockDepth) {\n                    currentCursor.candidate = this.remove(candidate);\n                    currentCursor.openBlockDepth--;\n                } else {\n                    this.clearMismatch(candidate);\n                }\n                // if the openBlockDepth matches the blockDepth we just closed to\n                // then restore rehydration\n            }\n            if (currentCursor.openBlockDepth === this.blockDepth) {\n                currentCursor.candidate = this.remove(currentCursor.nextSibling);\n                currentCursor.openBlockDepth--;\n            }\n        };\n\n        RehydrateBuilder.prototype.__appendNode = function __appendNode(node) {\n            var candidate = this.candidate;\n\n            // This code path is only used when inserting precisely one node. It needs more\n            // comparison logic, but we can probably lean on the cases where this code path\n            // is actually used.\n            if (candidate) {\n                return candidate;\n            } else {\n                return _NewElementBuilder.prototype.__appendNode.call(this, node);\n            }\n        };\n\n        RehydrateBuilder.prototype.__appendHTML = function __appendHTML(html) {\n            var candidateBounds = this.markerBounds();\n            if (candidateBounds) {\n                var first = candidateBounds.firstNode();\n                var last = candidateBounds.lastNode();\n                var newBounds = bounds(this.element, first.nextSibling, last.previousSibling);\n                this.remove(first);\n                this.remove(last);\n                return newBounds;\n            } else {\n                return _NewElementBuilder.prototype.__appendHTML.call(this, html);\n            }\n        };\n\n        RehydrateBuilder.prototype.remove = function remove(node) {\n            var element = node.parentNode;\n            var next = node.nextSibling;\n            element.removeChild(node);\n            return next;\n        };\n\n        RehydrateBuilder.prototype.markerBounds = function markerBounds() {\n            var _candidate = this.candidate;\n            if (_candidate && isMarker(_candidate)) {\n                var first = _candidate;\n                var last = first.nextSibling;\n                while (last && !isMarker(last)) {\n                    last = last.nextSibling;\n                }\n                return bounds(this.element, first, last);\n            } else {\n                return null;\n            }\n        };\n\n        RehydrateBuilder.prototype.__appendText = function __appendText(string) {\n            var candidate = this.candidate;\n\n            if (candidate) {\n                if (isTextNode(candidate)) {\n                    if (candidate.nodeValue !== string) {\n                        candidate.nodeValue = string;\n                    }\n                    this.candidate = candidate.nextSibling;\n                    return candidate;\n                } else if (candidate && (isSeparator(candidate) || isEmpty$1(candidate))) {\n                    this.candidate = candidate.nextSibling;\n                    this.remove(candidate);\n                    return this.__appendText(string);\n                } else if (isEmpty$1(candidate)) {\n                    var next = this.remove(candidate);\n                    this.candidate = next;\n                    var text = this.dom.createTextNode(string);\n                    this.dom.insertBefore(this.element, text, next);\n                    return text;\n                } else {\n                    this.clearMismatch(candidate);\n                    return _NewElementBuilder.prototype.__appendText.call(this, string);\n                }\n            } else {\n                return _NewElementBuilder.prototype.__appendText.call(this, string);\n            }\n        };\n\n        RehydrateBuilder.prototype.__appendComment = function __appendComment(string) {\n            var _candidate = this.candidate;\n            if (_candidate && isComment(_candidate)) {\n                if (_candidate.nodeValue !== string) {\n                    _candidate.nodeValue = string;\n                }\n                this.candidate = _candidate.nextSibling;\n                return _candidate;\n            } else if (_candidate) {\n                this.clearMismatch(_candidate);\n            }\n            return _NewElementBuilder.prototype.__appendComment.call(this, string);\n        };\n\n        RehydrateBuilder.prototype.__openElement = function __openElement(tag) {\n            var _candidate = this.candidate;\n            if (_candidate && isElement(_candidate) && isSameNodeType(_candidate, tag)) {\n                this.unmatchedAttributes = [].slice.call(_candidate.attributes);\n                return _candidate;\n            } else if (_candidate) {\n                if (isElement(_candidate) && _candidate.tagName === 'TBODY') {\n                    this.pushElement(_candidate, null);\n                    this.currentCursor.injectedOmittedNode = true;\n                    return this.__openElement(tag);\n                }\n                this.clearMismatch(_candidate);\n            }\n            return _NewElementBuilder.prototype.__openElement.call(this, tag);\n        };\n\n        RehydrateBuilder.prototype.__setAttribute = function __setAttribute(name, value, namespace) {\n            var unmatched = this.unmatchedAttributes;\n            if (unmatched) {\n                var attr = findByName(unmatched, name);\n                if (attr) {\n                    if (attr.value !== value) {\n                        attr.value = value;\n                    }\n                    unmatched.splice(unmatched.indexOf(attr), 1);\n                    return;\n                }\n            }\n            return _NewElementBuilder.prototype.__setAttribute.call(this, name, value, namespace);\n        };\n\n        RehydrateBuilder.prototype.__setProperty = function __setProperty(name, value) {\n            var unmatched = this.unmatchedAttributes;\n            if (unmatched) {\n                var attr = findByName(unmatched, name);\n                if (attr) {\n                    if (attr.value !== value) {\n                        attr.value = value;\n                    }\n                    unmatched.splice(unmatched.indexOf(attr), 1);\n                    return;\n                }\n            }\n            return _NewElementBuilder.prototype.__setProperty.call(this, name, value);\n        };\n\n        RehydrateBuilder.prototype.__flushElement = function __flushElement(parent, constructing) {\n            var unmatched = this.unmatchedAttributes;\n\n            if (unmatched) {\n                for (var i = 0; i < unmatched.length; i++) {\n                    this.constructing.removeAttribute(unmatched[i].name);\n                }\n                this.unmatchedAttributes = null;\n            } else {\n                _NewElementBuilder.prototype.__flushElement.call(this, parent, constructing);\n            }\n        };\n\n        RehydrateBuilder.prototype.appendCautiousDynamicContent = function appendCautiousDynamicContent(value) {\n            var content = _NewElementBuilder.prototype.appendCautiousDynamicContent.call(this, value);\n            content.update(this.env, value);\n            return content;\n        };\n\n        RehydrateBuilder.prototype.willCloseElement = function willCloseElement() {\n            var candidate = this.candidate,\n                currentCursor = this.currentCursor;\n\n            if (candidate !== null) {\n                this.clearMismatch(candidate);\n            }\n            if (currentCursor && currentCursor.injectedOmittedNode) {\n                this.popElement();\n            }\n            _NewElementBuilder.prototype.willCloseElement.call(this);\n        };\n\n        RehydrateBuilder.prototype.getMarker = function getMarker(element, guid) {\n            var marker = element.querySelector('script[glmr=\"' + guid + '\"]');\n            if (marker) {\n                return marker;\n            }\n            throw new Error('Cannot find serialized cursor for `in-element`');\n        };\n\n        RehydrateBuilder.prototype.__pushRemoteElement = function __pushRemoteElement(element, cursorId) {\n            var nextSibling = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n            var marker = this.getMarker(element, cursorId);\n            if (marker.parentNode === element) {\n                var currentCursor = this.currentCursor;\n                var candidate = currentCursor.candidate;\n                this.pushElement(element, nextSibling);\n                currentCursor.candidate = candidate;\n                this.candidate = this.remove(marker);\n                var tracker = new RemoteBlockTracker(element);\n                this.pushBlockTracker(tracker, true);\n            }\n        };\n\n        RehydrateBuilder.prototype.didAppendBounds = function didAppendBounds(bounds$$1) {\n            _NewElementBuilder.prototype.didAppendBounds.call(this, bounds$$1);\n            if (this.candidate) {\n                var last = bounds$$1.lastNode();\n                this.candidate = last && last.nextSibling;\n            }\n            return bounds$$1;\n        };\n\n        (0, _emberBabel.createClass)(RehydrateBuilder, [{\n            key: 'currentCursor',\n            get: function () {\n                return this.cursorStack.current;\n            }\n        }, {\n            key: 'candidate',\n            get: function () {\n                if (this.currentCursor) {\n                    return this.currentCursor.candidate;\n                }\n                return null;\n            },\n            set: function (node) {\n                this.currentCursor.candidate = node;\n            }\n        }]);\n        return RehydrateBuilder;\n    }(NewElementBuilder);\n\n    function isTextNode(node) {\n        return node.nodeType === 3;\n    }\n    function isComment(node) {\n        return node.nodeType === 8;\n    }\n    function getOpenBlockDepth(node) {\n        var boundsDepth = node.nodeValue.match(/^%\\+b:(\\d+)%$/);\n        if (boundsDepth && boundsDepth[1]) {\n            return Number(boundsDepth[1]);\n        } else {\n            return null;\n        }\n    }\n    function getCloseBlockDepth(node) {\n        var boundsDepth = node.nodeValue.match(/^%\\-b:(\\d+)%$/);\n        if (boundsDepth && boundsDepth[1]) {\n            return Number(boundsDepth[1]);\n        } else {\n            return null;\n        }\n    }\n    function isElement(node) {\n        return node.nodeType === 1;\n    }\n    function isMarker(node) {\n        return node.nodeType === 8 && node.nodeValue === '%glmr%';\n    }\n    function isSeparator(node) {\n        return node.nodeType === 8 && node.nodeValue === '%|%';\n    }\n    function isEmpty$1(node) {\n        return node.nodeType === 8 && node.nodeValue === '% %';\n    }\n    function isSameNodeType(candidate, tag) {\n        if (candidate.namespaceURI === SVG_NAMESPACE) {\n            return candidate.tagName === tag;\n        }\n        return candidate.tagName === tag.toUpperCase();\n    }\n    function findByName(array, name) {\n        for (var i = 0; i < array.length; i++) {\n            var attr = array[i];\n            if (attr.name === name) return attr;\n        }\n        return undefined;\n    }\n    function rehydrationBuilder(env, cursor) {\n        return RehydrateBuilder.forInitialRender(env, cursor);\n    }\n\n    exports.renderMain = render;\n    exports.NULL_REFERENCE = NULL_REFERENCE;\n    exports.UNDEFINED_REFERENCE = UNDEFINED_REFERENCE;\n    exports.PrimitiveReference = PrimitiveReference;\n    exports.ConditionalReference = ConditionalReference;\n    exports.setDebuggerCallback = setDebuggerCallback;\n    exports.resetDebuggerCallback = resetDebuggerCallback;\n    exports.getDynamicVar = getDynamicVar;\n    exports.LowLevelVM = VM;\n    exports.UpdatingVM = UpdatingVM;\n    exports.RenderResult = RenderResult;\n    exports.SimpleDynamicAttribute = SimpleDynamicAttribute;\n    exports.DynamicAttribute = DynamicAttribute;\n    exports.EMPTY_ARGS = EMPTY_ARGS;\n    exports.Scope = Scope;\n    exports.Environment = Environment;\n    exports.DefaultEnvironment = DefaultEnvironment;\n    exports.DEFAULT_CAPABILITIES = DEFAULT_CAPABILITIES;\n    exports.MINIMAL_CAPABILITIES = MINIMAL_CAPABILITIES;\n    exports.CurriedComponentDefinition = CurriedComponentDefinition;\n    exports.isCurriedComponentDefinition = isCurriedComponentDefinition;\n    exports.curry = curry;\n    exports.DOMChanges = helper$1;\n    exports.SVG_NAMESPACE = SVG_NAMESPACE;\n    exports.IDOMChanges = DOMChanges;\n    exports.DOMTreeConstruction = DOMTreeConstruction;\n    exports.isWhitespace = isWhitespace;\n    exports.insertHTMLBefore = _insertHTMLBefore;\n    exports.normalizeProperty = normalizeProperty;\n    exports.NewElementBuilder = NewElementBuilder;\n    exports.clientBuilder = clientBuilder;\n    exports.rehydrationBuilder = rehydrationBuilder;\n    exports.RehydrateBuilder = RehydrateBuilder;\n    exports.ConcreteBounds = ConcreteBounds;\n    exports.Cursor = Cursor;\n    exports.capabilityFlagsFrom = capabilityFlagsFrom;\n    exports.hasCapability = hasCapability;\n});","enifed(\"@glimmer/util\", [\"exports\", \"ember-babel\"], function (exports, _emberBabel) {\n    \"use strict\";\n\n    exports.unreachable = exports.expect = exports.unwrap = exports.EMPTY_ARRAY = exports.ListSlice = exports.ListNode = exports.LinkedList = exports.EMPTY_SLICE = exports.dict = exports.DictSet = exports.Stack = exports.SERIALIZATION_FIRST_NODE_STRING = exports.isSerializationFirstNode = exports.initializeGuid = exports.ensureGuid = exports.fillNulls = exports.assign = exports.assert = undefined;\n    function unwrap(val) {\n        if (val === null || val === undefined) throw new Error(\"Expected value to be present\");\n        return val;\n    }\n    function expect(val, message) {\n        if (val === null || val === undefined) throw new Error(message);\n        return val;\n    }\n    function unreachable() {\n        var message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"unreachable\";\n\n        return new Error(message);\n    }\n\n    // import Logger from './logger';\n    // let alreadyWarned = false;\n    function debugAssert(test, msg) {\n        // if (!alreadyWarned) {\n        //   alreadyWarned = true;\n        //   Logger.warn(\"Don't leave debug assertions on in public builds\");\n        // }\n        if (!test) {\n            throw new Error(msg || \"assertion failure\");\n        }\n    }\n\n    var objKeys = Object.keys;\n\n    function assign(obj) {\n        for (var i = 1; i < arguments.length; i++) {\n            var assignment = arguments[i];\n            if (assignment === null || typeof assignment !== 'object') continue;\n            var keys = objKeys(assignment);\n            for (var j = 0; j < keys.length; j++) {\n                var key = keys[j];\n                obj[key] = assignment[key];\n            }\n        }\n        return obj;\n    }\n    function fillNulls(count) {\n        var arr = new Array(count);\n        for (var i = 0; i < count; i++) {\n            arr[i] = null;\n        }\n        return arr;\n    }\n\n    var GUID = 0;\n    function initializeGuid(object) {\n        return object._guid = ++GUID;\n    }\n    function ensureGuid(object) {\n        return object._guid || initializeGuid(object);\n    }\n\n    var SERIALIZATION_FIRST_NODE_STRING = '%+b:0%';\n    function isSerializationFirstNode(node) {\n        return node.nodeValue === SERIALIZATION_FIRST_NODE_STRING;\n    }\n\n    function dict() {\n        return Object.create(null);\n    }\n\n    var DictSet = function () {\n        function DictSet() {\n            (0, _emberBabel.classCallCheck)(this, DictSet);\n\n            this.dict = dict();\n        }\n\n        DictSet.prototype.add = function add(obj) {\n            if (typeof obj === 'string') this.dict[obj] = obj;else this.dict[ensureGuid(obj)] = obj;\n            return this;\n        };\n\n        DictSet.prototype.delete = function _delete(obj) {\n            if (typeof obj === 'string') delete this.dict[obj];else if (obj._guid) delete this.dict[obj._guid];\n        };\n\n        return DictSet;\n    }();\n\n    var Stack = function () {\n        function Stack() {\n            (0, _emberBabel.classCallCheck)(this, Stack);\n\n            this.stack = [];\n            this.current = null;\n        }\n\n        Stack.prototype.push = function push(item) {\n            this.current = item;\n            this.stack.push(item);\n        };\n\n        Stack.prototype.pop = function pop() {\n            var item = this.stack.pop();\n            var len = this.stack.length;\n            this.current = len === 0 ? null : this.stack[len - 1];\n            return item === undefined ? null : item;\n        };\n\n        Stack.prototype.isEmpty = function isEmpty() {\n            return this.stack.length === 0;\n        };\n\n        (0, _emberBabel.createClass)(Stack, [{\n            key: \"size\",\n            get: function () {\n                return this.stack.length;\n            }\n        }]);\n        return Stack;\n    }();\n\n    var ListNode = function ListNode(value) {\n        (0, _emberBabel.classCallCheck)(this, ListNode);\n\n        this.next = null;\n        this.prev = null;\n        this.value = value;\n    };\n\n    var LinkedList = function () {\n        function LinkedList() {\n            (0, _emberBabel.classCallCheck)(this, LinkedList);\n\n            this.clear();\n        }\n\n        LinkedList.prototype.head = function head() {\n            return this._head;\n        };\n\n        LinkedList.prototype.tail = function tail() {\n            return this._tail;\n        };\n\n        LinkedList.prototype.clear = function clear() {\n            this._head = this._tail = null;\n        };\n\n        LinkedList.prototype.toArray = function toArray() {\n            var out = [];\n            this.forEachNode(function (n) {\n                return out.push(n);\n            });\n            return out;\n        };\n\n        LinkedList.prototype.nextNode = function nextNode(node) {\n            return node.next;\n        };\n\n        LinkedList.prototype.forEachNode = function forEachNode(callback) {\n            var node = this._head;\n            while (node !== null) {\n                callback(node);\n                node = node.next;\n            }\n        };\n\n        LinkedList.prototype.insertBefore = function insertBefore(node) {\n            var reference = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n            if (reference === null) return this.append(node);\n            if (reference.prev) reference.prev.next = node;else this._head = node;\n            node.prev = reference.prev;\n            node.next = reference;\n            reference.prev = node;\n            return node;\n        };\n\n        LinkedList.prototype.append = function append(node) {\n            var tail = this._tail;\n            if (tail) {\n                tail.next = node;\n                node.prev = tail;\n                node.next = null;\n            } else {\n                this._head = node;\n            }\n            return this._tail = node;\n        };\n\n        LinkedList.prototype.remove = function remove(node) {\n            if (node.prev) node.prev.next = node.next;else this._head = node.next;\n            if (node.next) node.next.prev = node.prev;else this._tail = node.prev;\n            return node;\n        };\n\n        return LinkedList;\n    }();\n\n    var ListSlice = function () {\n        function ListSlice(head, tail) {\n            (0, _emberBabel.classCallCheck)(this, ListSlice);\n\n            this._head = head;\n            this._tail = tail;\n        }\n\n        ListSlice.prototype.forEachNode = function forEachNode(callback) {\n            var node = this._head;\n            while (node !== null) {\n                callback(node);\n                node = this.nextNode(node);\n            }\n        };\n\n        ListSlice.prototype.head = function head() {\n            return this._head;\n        };\n\n        ListSlice.prototype.tail = function tail() {\n            return this._tail;\n        };\n\n        ListSlice.prototype.toArray = function toArray() {\n            var out = [];\n            this.forEachNode(function (n) {\n                return out.push(n);\n            });\n            return out;\n        };\n\n        ListSlice.prototype.nextNode = function nextNode(node) {\n            if (node === this._tail) return null;\n            return node.next;\n        };\n\n        return ListSlice;\n    }();\n\n    var EMPTY_SLICE = new ListSlice(null, null);\n\n    var EMPTY_ARRAY = Object.freeze([]);\n\n    exports.assert = debugAssert;\n    exports.assign = assign;\n    exports.fillNulls = fillNulls;\n    exports.ensureGuid = ensureGuid;\n    exports.initializeGuid = initializeGuid;\n    exports.isSerializationFirstNode = isSerializationFirstNode;\n    exports.SERIALIZATION_FIRST_NODE_STRING = SERIALIZATION_FIRST_NODE_STRING;\n    exports.Stack = Stack;\n    exports.DictSet = DictSet;\n    exports.dict = dict;\n    exports.EMPTY_SLICE = EMPTY_SLICE;\n    exports.LinkedList = LinkedList;\n    exports.ListNode = ListNode;\n    exports.ListSlice = ListSlice;\n    exports.EMPTY_ARRAY = EMPTY_ARRAY;\n    exports.unwrap = unwrap;\n    exports.expect = expect;\n    exports.unreachable = unreachable;\n});","enifed(\"@glimmer/vm\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    /**\n     * Registers\n     *\n     * For the most part, these follows MIPS naming conventions, however the\n     * register numbers are different.\n     */\n    var Register;\n    (function (Register) {\n        // $0 or $pc (program counter): pointer into `program` for the next insturction; -1 means exit\n        Register[Register[\"pc\"] = 0] = \"pc\";\n        // $1 or $ra (return address): pointer into `program` for the return\n        Register[Register[\"ra\"] = 1] = \"ra\";\n        // $2 or $fp (frame pointer): pointer into the `evalStack` for the base of the stack\n        Register[Register[\"fp\"] = 2] = \"fp\";\n        // $3 or $sp (stack pointer): pointer into the `evalStack` for the top of the stack\n        Register[Register[\"sp\"] = 3] = \"sp\";\n        // $4-$5 or $s0-$s1 (saved): callee saved general-purpose registers\n        Register[Register[\"s0\"] = 4] = \"s0\";\n        Register[Register[\"s1\"] = 5] = \"s1\";\n        // $6-$7 or $t0-$t1 (temporaries): caller saved general-purpose registers\n        Register[Register[\"t0\"] = 6] = \"t0\";\n        Register[Register[\"t1\"] = 7] = \"t1\";\n        // $8 or $v0 (return value)\n        Register[Register[\"v0\"] = 8] = \"v0\";\n    })(Register || (exports.Register = Register = {}));\n\n    exports.Register = Register;\n});","enifed(\"@glimmer/wire-format\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    var Opcodes;\n    (function (Opcodes) {\n        // Statements\n        Opcodes[Opcodes[\"Text\"] = 0] = \"Text\";\n        Opcodes[Opcodes[\"Append\"] = 1] = \"Append\";\n        Opcodes[Opcodes[\"Comment\"] = 2] = \"Comment\";\n        Opcodes[Opcodes[\"Modifier\"] = 3] = \"Modifier\";\n        Opcodes[Opcodes[\"Block\"] = 4] = \"Block\";\n        Opcodes[Opcodes[\"Component\"] = 5] = \"Component\";\n        Opcodes[Opcodes[\"OpenElement\"] = 6] = \"OpenElement\";\n        Opcodes[Opcodes[\"OpenSplattedElement\"] = 7] = \"OpenSplattedElement\";\n        Opcodes[Opcodes[\"FlushElement\"] = 8] = \"FlushElement\";\n        Opcodes[Opcodes[\"CloseElement\"] = 9] = \"CloseElement\";\n        Opcodes[Opcodes[\"StaticAttr\"] = 10] = \"StaticAttr\";\n        Opcodes[Opcodes[\"DynamicAttr\"] = 11] = \"DynamicAttr\";\n        Opcodes[Opcodes[\"AttrSplat\"] = 12] = \"AttrSplat\";\n        Opcodes[Opcodes[\"Yield\"] = 13] = \"Yield\";\n        Opcodes[Opcodes[\"Partial\"] = 14] = \"Partial\";\n        Opcodes[Opcodes[\"DynamicArg\"] = 15] = \"DynamicArg\";\n        Opcodes[Opcodes[\"StaticArg\"] = 16] = \"StaticArg\";\n        Opcodes[Opcodes[\"TrustingAttr\"] = 17] = \"TrustingAttr\";\n        Opcodes[Opcodes[\"Debugger\"] = 18] = \"Debugger\";\n        Opcodes[Opcodes[\"ClientSideStatement\"] = 19] = \"ClientSideStatement\";\n        // Expressions\n        Opcodes[Opcodes[\"Unknown\"] = 20] = \"Unknown\";\n        Opcodes[Opcodes[\"Get\"] = 21] = \"Get\";\n        Opcodes[Opcodes[\"MaybeLocal\"] = 22] = \"MaybeLocal\";\n        Opcodes[Opcodes[\"HasBlock\"] = 23] = \"HasBlock\";\n        Opcodes[Opcodes[\"HasBlockParams\"] = 24] = \"HasBlockParams\";\n        Opcodes[Opcodes[\"Undefined\"] = 25] = \"Undefined\";\n        Opcodes[Opcodes[\"Helper\"] = 26] = \"Helper\";\n        Opcodes[Opcodes[\"Concat\"] = 27] = \"Concat\";\n        Opcodes[Opcodes[\"ClientSideExpression\"] = 28] = \"ClientSideExpression\";\n    })(Opcodes || (exports.Ops = Opcodes = {}));\n\n    function is(variant) {\n        return function (value) {\n            return Array.isArray(value) && value[0] === variant;\n        };\n    }\n    // Statements\n    var isModifier = is(Opcodes.Modifier);\n    var isFlushElement = is(Opcodes.FlushElement);\n    function isAttribute(val) {\n        return val[0] === Opcodes.StaticAttr || val[0] === Opcodes.DynamicAttr || val[0] === Opcodes.TrustingAttr;\n    }\n    function isArgument(val) {\n        return val[0] === Opcodes.StaticArg || val[0] === Opcodes.DynamicArg;\n    }\n    // Expressions\n    var isGet = is(Opcodes.Get);\n    var isMaybeLocal = is(Opcodes.MaybeLocal);\n\n    exports.is = is;\n    exports.isModifier = isModifier;\n    exports.isFlushElement = isFlushElement;\n    exports.isAttribute = isAttribute;\n    exports.isArgument = isArgument;\n    exports.isGet = isGet;\n    exports.isMaybeLocal = isMaybeLocal;\n    exports.Ops = Opcodes;\n});","enifed('backburner', ['exports', 'ember-babel'], function (exports, _emberBabel) {\n    'use strict';\n\n    var NUMBER = /\\d+/;\n    function isCoercableNumber(suspect) {\n        var type = typeof suspect;\n        return type === 'number' && suspect === suspect || type === 'string' && NUMBER.test(suspect);\n    }\n    function getOnError(options) {\n        return options.onError || options.onErrorTarget && options.onErrorTarget[options.onErrorMethod];\n    }\n    function findItem(target, method, collection) {\n        var index = -1;\n        for (var i = 0, l = collection.length; i < l; i += 4) {\n            if (collection[i] === target && collection[i + 1] === method) {\n                index = i;\n                break;\n            }\n        }\n        return index;\n    }\n    function findTimer(timer, collection) {\n        var index = -1;\n        for (var i = 3; i < collection.length; i += 4) {\n            if (collection[i] === timer) {\n                index = i - 3;\n                break;\n            }\n        }\n        return index;\n    }\n\n    function binarySearch(time, timers) {\n        var start = 0;\n        var end = timers.length - 6;\n        var middle = void 0;\n        var l = void 0;\n        while (start < end) {\n            // since timers is an array of pairs 'l' will always\n            // be an integer\n            l = (end - start) / 6;\n            // compensate for the index in case even number\n            // of pairs inside timers\n            middle = start + l - l % 6;\n            if (time >= timers[middle]) {\n                start = middle + 6;\n            } else {\n                end = middle;\n            }\n        }\n        return time >= timers[start] ? start + 6 : start;\n    }\n\n    var Queue = function () {\n        function Queue(name) {\n            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n            var globalOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n            (0, _emberBabel.classCallCheck)(this, Queue);\n\n            this._queueBeingFlushed = [];\n            this.targetQueues = new Map();\n            this.index = 0;\n            this._queue = [];\n            this.name = name;\n            this.options = options;\n            this.globalOptions = globalOptions;\n        }\n\n        Queue.prototype.stackFor = function stackFor(index) {\n            if (index < this._queue.length) {\n                var entry = this._queue[index * 3 + 4];\n                if (entry) {\n                    return entry.stack;\n                } else {\n                    return null;\n                }\n            }\n        };\n\n        Queue.prototype.flush = function flush(sync) {\n            var _options = this.options,\n                before = _options.before,\n                after = _options.after;\n\n            var target = void 0;\n            var method = void 0;\n            var args = void 0;\n            var errorRecordedForStack = void 0;\n            this.targetQueues.clear();\n            if (this._queueBeingFlushed.length === 0) {\n                this._queueBeingFlushed = this._queue;\n                this._queue = [];\n            }\n            if (before !== undefined) {\n                before();\n            }\n            var invoke = void 0;\n            var queueItems = this._queueBeingFlushed;\n            if (queueItems.length > 0) {\n                var onError = getOnError(this.globalOptions);\n                invoke = onError ? this.invokeWithOnError : this.invoke;\n                for (var i = this.index; i < queueItems.length; i += 4) {\n                    this.index += 4;\n                    method = queueItems[i + 1];\n                    // method could have been nullified / canceled during flush\n                    if (method !== null) {\n                        //\n                        //    ** Attention intrepid developer **\n                        //\n                        //    To find out the stack of this task when it was scheduled onto\n                        //    the run loop, add the following to your app.js:\n                        //\n                        //    Ember.run.backburner.DEBUG = true; // NOTE: This slows your app, don't leave it on in production.\n                        //\n                        //    Once that is in place, when you are at a breakpoint and navigate\n                        //    here in the stack explorer, you can look at `errorRecordedForStack.stack`,\n                        //    which will be the captured stack when this job was scheduled.\n                        //\n                        //    One possible long-term solution is the following Chrome issue:\n                        //       https://bugs.chromium.org/p/chromium/issues/detail?id=332624\n                        //\n                        target = queueItems[i];\n                        args = queueItems[i + 2];\n                        errorRecordedForStack = queueItems[i + 3]; // Debugging assistance\n                        invoke(target, method, args, onError, errorRecordedForStack);\n                    }\n                    if (this.index !== this._queueBeingFlushed.length && this.globalOptions.mustYield && this.globalOptions.mustYield()) {\n                        return 1 /* Pause */;\n                    }\n                }\n            }\n            if (after !== undefined) {\n                after();\n            }\n            this._queueBeingFlushed.length = 0;\n            this.index = 0;\n            if (sync !== false && this._queue.length > 0) {\n                // check if new items have been added\n                this.flush(true);\n            }\n        };\n\n        Queue.prototype.hasWork = function hasWork() {\n            return this._queueBeingFlushed.length > 0 || this._queue.length > 0;\n        };\n\n        Queue.prototype.cancel = function cancel(_ref) {\n            var target = _ref.target,\n                method = _ref.method;\n\n            var queue = this._queue;\n            var targetQueueMap = this.targetQueues.get(target);\n            if (targetQueueMap !== undefined) {\n                targetQueueMap.delete(method);\n            }\n            var index = findItem(target, method, queue);\n            if (index > -1) {\n                queue.splice(index, 4);\n                return true;\n            }\n            // if not found in current queue\n            // could be in the queue that is being flushed\n            queue = this._queueBeingFlushed;\n            index = findItem(target, method, queue);\n            if (index > -1) {\n                queue[index + 1] = null;\n                return true;\n            }\n            return false;\n        };\n\n        Queue.prototype.push = function push(target, method, args, stack) {\n            this._queue.push(target, method, args, stack);\n            return {\n                queue: this,\n                target: target,\n                method: method\n            };\n        };\n\n        Queue.prototype.pushUnique = function pushUnique(target, method, args, stack) {\n            var localQueueMap = this.targetQueues.get(target);\n            if (localQueueMap === undefined) {\n                localQueueMap = new Map();\n                this.targetQueues.set(target, localQueueMap);\n            }\n            var index = localQueueMap.get(method);\n            if (index === undefined) {\n                var queueIndex = this._queue.push(target, method, args, stack) - 4;\n                localQueueMap.set(method, queueIndex);\n            } else {\n                var queue = this._queue;\n                queue[index + 2] = args; // replace args\n                queue[index + 3] = stack; // replace stack\n            }\n            return {\n                queue: this,\n                target: target,\n                method: method\n            };\n        };\n\n        Queue.prototype.invoke = function invoke(target, method, args /*, onError, errorRecordedForStack */) {\n            if (args === undefined) {\n                method.call(target);\n            } else {\n                method.apply(target, args);\n            }\n        };\n\n        Queue.prototype.invokeWithOnError = function invokeWithOnError(target, method, args, onError, errorRecordedForStack) {\n            try {\n                if (args === undefined) {\n                    method.call(target);\n                } else {\n                    method.apply(target, args);\n                }\n            } catch (error) {\n                onError(error, errorRecordedForStack);\n            }\n        };\n\n        return Queue;\n    }();\n\n    var DeferredActionQueues = function () {\n        function DeferredActionQueues() {\n            var queueNames = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n            var options = arguments[1];\n            (0, _emberBabel.classCallCheck)(this, DeferredActionQueues);\n\n            this.queues = {};\n            this.queueNameIndex = 0;\n            this.queueNames = queueNames;\n            queueNames.reduce(function (queues, queueName) {\n                queues[queueName] = new Queue(queueName, options[queueName], options);\n                return queues;\n            }, this.queues);\n        }\n        /*\n          @method schedule\n          @param {String} queueName\n          @param {Any} target\n          @param {Any} method\n          @param {Any} args\n          @param {Boolean} onceFlag\n          @param {Any} stack\n          @return queue\n        */\n\n\n        DeferredActionQueues.prototype.schedule = function schedule(queueName, target, method, args, onceFlag, stack) {\n            var queues = this.queues;\n            var queue = queues[queueName];\n            if (queue === undefined) {\n                throw new Error('You attempted to schedule an action in a queue (' + queueName + ') that doesn\\'t exist');\n            }\n            if (method === undefined || method === null) {\n                throw new Error('You attempted to schedule an action in a queue (' + queueName + ') for a method that doesn\\'t exist');\n            }\n            if (onceFlag) {\n                return queue.pushUnique(target, method, args, stack);\n            } else {\n                return queue.push(target, method, args, stack);\n            }\n        };\n\n        DeferredActionQueues.prototype.flush = function flush() {\n            var queue = void 0;\n            var queueName = void 0;\n            var numberOfQueues = this.queueNames.length;\n            while (this.queueNameIndex < numberOfQueues) {\n                queueName = this.queueNames[this.queueNameIndex];\n                queue = this.queues[queueName];\n                if (queue.hasWork() === false) {\n                    this.queueNameIndex++;\n                } else {\n                    if (queue.flush(false /* async */) === 1 /* Pause */) {\n                            return 1 /* Pause */;\n                        }\n                    this.queueNameIndex = 0; // only reset to first queue if non-pause break\n                }\n            }\n        };\n\n        return DeferredActionQueues;\n    }();\n\n    var iteratorDrain = function (fn) {\n        var iterator = fn();\n        var result = iterator.next();\n        while (result.done === false) {\n            result.value();\n            result = iterator.next();\n        }\n    };\n\n    var noop = function () {};\n    var SET_TIMEOUT = setTimeout;\n    function parseArgs() {\n        var length = arguments.length;\n        var method = void 0;\n        var target = void 0;\n        var args = void 0;\n        if (length === 1) {\n            method = arguments[0];\n            target = null;\n        } else {\n            target = arguments[0];\n            method = arguments[1];\n            if (typeof method === 'string') {\n                method = target[method];\n            }\n            if (length > 2) {\n                args = new Array(length - 2);\n                for (var i = 0, l = length - 2; i < l; i++) {\n                    args[i] = arguments[i + 2];\n                }\n            }\n        }\n        return [target, method, args];\n    }\n    var UUID = 0;\n\n    var Backburner = function () {\n        function Backburner(queueNames) {\n            var _this = this;\n\n            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n            (0, _emberBabel.classCallCheck)(this, Backburner);\n\n            this.DEBUG = false;\n            this.currentInstance = null;\n            this.instanceStack = [];\n            this._debouncees = [];\n            this._throttlers = [];\n            this._eventCallbacks = {\n                end: [],\n                begin: []\n            };\n            this._timerTimeoutId = null;\n            this._timers = [];\n            this._autorun = null;\n            this.queueNames = queueNames;\n            this.options = options;\n            if (!this.options.defaultQueue) {\n                this.options.defaultQueue = queueNames[0];\n            }\n            this._onBegin = this.options.onBegin || noop;\n            this._onEnd = this.options.onEnd || noop;\n            var _platform = this.options._platform || {};\n            var platform = Object.create(null);\n            platform.setTimeout = _platform.setTimeout || function (fn, ms) {\n                return setTimeout(fn, ms);\n            };\n            platform.clearTimeout = _platform.clearTimeout || function (id) {\n                return clearTimeout(id);\n            };\n            platform.next = _platform.next || function (fn) {\n                return SET_TIMEOUT(fn, 0);\n            };\n            platform.clearNext = _platform.clearNext || platform.clearTimeout;\n            platform.now = _platform.now || function () {\n                return Date.now();\n            };\n            this._platform = platform;\n            this._boundRunExpiredTimers = function () {\n                _this._runExpiredTimers();\n            };\n            this._boundAutorunEnd = function () {\n                _this._autorun = null;\n                _this.end();\n            };\n        }\n        /*\n          @method begin\n          @return instantiated class DeferredActionQueues\n        */\n\n\n        Backburner.prototype.begin = function begin() {\n            var options = this.options;\n            var previousInstance = this.currentInstance;\n            var current = void 0;\n            if (this._autorun !== null) {\n                current = previousInstance;\n                this._cancelAutorun();\n            } else {\n                if (previousInstance !== null) {\n                    this.instanceStack.push(previousInstance);\n                }\n                current = this.currentInstance = new DeferredActionQueues(this.queueNames, options);\n                this._trigger('begin', current, previousInstance);\n            }\n            this._onBegin(current, previousInstance);\n            return current;\n        };\n\n        Backburner.prototype.end = function end() {\n            var currentInstance = this.currentInstance;\n            var nextInstance = null;\n            if (currentInstance === null) {\n                throw new Error('end called without begin');\n            }\n            // Prevent double-finally bug in Safari 6.0.2 and iOS 6\n            // This bug appears to be resolved in Safari 6.0.5 and iOS 7\n            var finallyAlreadyCalled = false;\n            var result = void 0;\n            try {\n                result = currentInstance.flush();\n            } finally {\n                if (!finallyAlreadyCalled) {\n                    finallyAlreadyCalled = true;\n                    if (result === 1 /* Pause */) {\n                            var next = this._platform.next;\n                            this._autorun = next(this._boundAutorunEnd);\n                        } else {\n                        this.currentInstance = null;\n                        if (this.instanceStack.length > 0) {\n                            nextInstance = this.instanceStack.pop();\n                            this.currentInstance = nextInstance;\n                        }\n                        this._trigger('end', currentInstance, nextInstance);\n                        this._onEnd(currentInstance, nextInstance);\n                    }\n                }\n            }\n        };\n\n        Backburner.prototype.on = function on(eventName, callback) {\n            if (typeof callback !== 'function') {\n                throw new TypeError('Callback must be a function');\n            }\n            var callbacks = this._eventCallbacks[eventName];\n            if (callbacks !== undefined) {\n                callbacks.push(callback);\n            } else {\n                throw new TypeError('Cannot on() event ' + eventName + ' because it does not exist');\n            }\n        };\n\n        Backburner.prototype.off = function off(eventName, callback) {\n            var callbacks = this._eventCallbacks[eventName];\n            if (!eventName || callbacks === undefined) {\n                throw new TypeError('Cannot off() event ' + eventName + ' because it does not exist');\n            }\n            var callbackFound = false;\n            if (callback) {\n                for (var i = 0; i < callbacks.length; i++) {\n                    if (callbacks[i] === callback) {\n                        callbackFound = true;\n                        callbacks.splice(i, 1);\n                        i--;\n                    }\n                }\n            }\n            if (!callbackFound) {\n                throw new TypeError('Cannot off() callback that does not exist');\n            }\n        };\n\n        Backburner.prototype.run = function run() {\n            var _parseArgs = parseArgs.apply(undefined, arguments),\n                target = _parseArgs[0],\n                method = _parseArgs[1],\n                args = _parseArgs[2];\n\n            return this._run(target, method, args);\n        };\n\n        Backburner.prototype.join = function join() {\n            var _parseArgs2 = parseArgs.apply(undefined, arguments),\n                target = _parseArgs2[0],\n                method = _parseArgs2[1],\n                args = _parseArgs2[2];\n\n            return this._join(target, method, args);\n        };\n\n        Backburner.prototype.defer = function defer(queueName, targetOrMethod) {\n            for (var _len = arguments.length, _args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n                _args[_key - 2] = arguments[_key];\n            }\n\n            return this.schedule.apply(this, [queueName, targetOrMethod].concat(_args));\n        };\n\n        Backburner.prototype.schedule = function schedule(queueName) {\n            for (var _len2 = arguments.length, _args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n                _args[_key2 - 1] = arguments[_key2];\n            }\n\n            var _parseArgs3 = parseArgs.apply(undefined, _args),\n                target = _parseArgs3[0],\n                method = _parseArgs3[1],\n                args = _parseArgs3[2];\n\n            var stack = this.DEBUG ? new Error() : undefined;\n            return this._ensureInstance().schedule(queueName, target, method, args, false, stack);\n        };\n\n        Backburner.prototype.scheduleIterable = function scheduleIterable(queueName, iterable) {\n            var stack = this.DEBUG ? new Error() : undefined;\n            return this._ensureInstance().schedule(queueName, null, iteratorDrain, [iterable], false, stack);\n        };\n\n        Backburner.prototype.deferOnce = function deferOnce(queueName, targetOrMethod) {\n            for (var _len3 = arguments.length, args = Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n                args[_key3 - 2] = arguments[_key3];\n            }\n\n            return this.scheduleOnce.apply(this, [queueName, targetOrMethod].concat(args));\n        };\n\n        Backburner.prototype.scheduleOnce = function scheduleOnce(queueName) {\n            for (var _len4 = arguments.length, _args = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n                _args[_key4 - 1] = arguments[_key4];\n            }\n\n            var _parseArgs4 = parseArgs.apply(undefined, _args),\n                target = _parseArgs4[0],\n                method = _parseArgs4[1],\n                args = _parseArgs4[2];\n\n            var stack = this.DEBUG ? new Error() : undefined;\n            return this._ensureInstance().schedule(queueName, target, method, args, true, stack);\n        };\n\n        Backburner.prototype.setTimeout = function setTimeout() {\n            return this.later.apply(this, arguments);\n        };\n\n        Backburner.prototype.later = function later() {\n            for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n                args[_key5] = arguments[_key5];\n            }\n\n            var length = args.length;\n            var wait = 0;\n            var method = void 0;\n            var target = void 0;\n            var methodOrTarget = void 0;\n            var methodOrArgs = void 0;\n            if (length === 0) {\n                return;\n            } else if (length === 1) {\n                method = args.shift();\n            } else {\n                var last = args[args.length - 1];\n                if (isCoercableNumber(last)) {\n                    wait = parseInt(args.pop(), 10);\n                }\n                methodOrTarget = args[0];\n                methodOrArgs = args[1];\n                var type = typeof methodOrArgs;\n                if (type === 'function') {\n                    target = args.shift();\n                    method = args.shift();\n                } else if (methodOrTarget !== null && type === 'string' && methodOrArgs in methodOrTarget) {\n                    target = args.shift();\n                    method = target[args.shift()];\n                } else {\n                    method = args.shift();\n                }\n            }\n            return this._setTimeout(target, method, args, wait);\n        };\n\n        Backburner.prototype.throttle = function throttle(targetOrThisArgOrMethod) {\n            var _this2 = this;\n\n            var target = void 0;\n            var method = void 0;\n            var immediate = void 0;\n            var isImmediate = void 0;\n            var wait = void 0;\n\n            for (var _len6 = arguments.length, args = Array(_len6 > 1 ? _len6 - 1 : 0), _key6 = 1; _key6 < _len6; _key6++) {\n                args[_key6 - 1] = arguments[_key6];\n            }\n\n            if (args.length === 1) {\n                method = targetOrThisArgOrMethod;\n                wait = args.pop();\n                target = null;\n                isImmediate = true;\n            } else {\n                target = targetOrThisArgOrMethod;\n                method = args.shift();\n                immediate = args.pop();\n                var type = typeof method;\n                if (type === 'string') {\n                    method = target[method];\n                } else if (type !== 'function') {\n                    args.unshift(method);\n                    method = target;\n                    target = null;\n                }\n                if (isCoercableNumber(immediate)) {\n                    wait = immediate;\n                    isImmediate = true;\n                } else {\n                    wait = args.pop();\n                    isImmediate = immediate === true;\n                }\n            }\n            var index = findItem(target, method, this._throttlers);\n            if (index > -1) {\n                this._throttlers[index + 2] = args;\n                return this._throttlers[index + 3];\n            } // throttled\n            wait = parseInt(wait, 10);\n            var timer = this._platform.setTimeout(function () {\n                var i = findTimer(timer, _this2._throttlers);\n\n                var _throttlers$splice = _this2._throttlers.splice(i, 4),\n                    context = _throttlers$splice[0],\n                    func = _throttlers$splice[1],\n                    params = _throttlers$splice[2];\n\n                if (isImmediate === false) {\n                    _this2._run(context, func, params);\n                }\n            }, wait);\n            if (isImmediate) {\n                this._join(target, method, args);\n            }\n            this._throttlers.push(target, method, args, timer);\n            return timer;\n        };\n\n        Backburner.prototype.debounce = function debounce(targetOrThisArgOrMethod) {\n            var _this3 = this;\n\n            var target = void 0;\n            var method = void 0;\n            var immediate = void 0;\n            var isImmediate = void 0;\n            var wait = void 0;\n\n            for (var _len7 = arguments.length, args = Array(_len7 > 1 ? _len7 - 1 : 0), _key7 = 1; _key7 < _len7; _key7++) {\n                args[_key7 - 1] = arguments[_key7];\n            }\n\n            if (args.length === 1) {\n                method = targetOrThisArgOrMethod;\n                wait = args.pop();\n                target = null;\n                isImmediate = false;\n            } else {\n                target = targetOrThisArgOrMethod;\n                method = args.shift();\n                immediate = args.pop();\n                var type = typeof method;\n                if (type === 'string') {\n                    method = target[method];\n                } else if (type !== 'function') {\n                    args.unshift(method);\n                    method = target;\n                    target = null;\n                }\n                if (isCoercableNumber(immediate)) {\n                    wait = immediate;\n                    isImmediate = false;\n                } else {\n                    wait = args.pop();\n                    isImmediate = immediate === true;\n                }\n            }\n            wait = parseInt(wait, 10);\n            // Remove debouncee\n            var index = findItem(target, method, this._debouncees);\n            if (index > -1) {\n                var timerId = this._debouncees[index + 3];\n                this._platform.clearTimeout(timerId);\n                this._debouncees.splice(index, 4);\n            }\n            var timer = this._platform.setTimeout(function () {\n                var i = findTimer(timer, _this3._debouncees);\n\n                var _debouncees$splice = _this3._debouncees.splice(i, 4),\n                    context = _debouncees$splice[0],\n                    func = _debouncees$splice[1],\n                    params = _debouncees$splice[2];\n\n                if (isImmediate === false) {\n                    _this3._run(context, func, params);\n                }\n            }, wait);\n            if (isImmediate && index === -1) {\n                this._join(target, method, args);\n            }\n            this._debouncees.push(target, method, args, timer);\n            return timer;\n        };\n\n        Backburner.prototype.cancelTimers = function cancelTimers() {\n            for (var i = 3; i < this._throttlers.length; i += 4) {\n                this._platform.clearTimeout(this._throttlers[i]);\n            }\n            this._throttlers = [];\n            for (var t = 3; t < this._debouncees.length; t += 4) {\n                this._platform.clearTimeout(this._debouncees[t]);\n            }\n            this._debouncees = [];\n            this._clearTimerTimeout();\n            this._timers = [];\n            this._cancelAutorun();\n        };\n\n        Backburner.prototype.hasTimers = function hasTimers() {\n            return this._timers.length > 0 || this._debouncees.length > 0 || this._throttlers.length > 0 || this._autorun !== null;\n        };\n\n        Backburner.prototype.cancel = function cancel(timer) {\n            if (!timer) {\n                return false;\n            }\n            var timerType = typeof timer;\n            if (timerType === 'number') {\n                return this._cancelItem(timer, this._throttlers) || this._cancelItem(timer, this._debouncees);\n            } else if (timerType === 'string') {\n                return this._cancelLaterTimer(timer);\n            } else if (timerType === 'object' && timer.queue && timer.method) {\n                return timer.queue.cancel(timer);\n            }\n            return false;\n        };\n\n        Backburner.prototype.ensureInstance = function ensureInstance() {\n            this._ensureInstance();\n        };\n\n        Backburner.prototype._join = function _join(target, method, args) {\n            if (this.currentInstance === null) {\n                return this._run(target, method, args);\n            }\n            if (target === undefined && args === undefined) {\n                return method();\n            } else {\n                return method.apply(target, args);\n            }\n        };\n\n        Backburner.prototype._run = function _run(target, method, args) {\n            var onError = getOnError(this.options);\n            this.begin();\n            if (onError) {\n                try {\n                    return method.apply(target, args);\n                } catch (error) {\n                    onError(error);\n                } finally {\n                    this.end();\n                }\n            } else {\n                try {\n                    return method.apply(target, args);\n                } finally {\n                    this.end();\n                }\n            }\n        };\n\n        Backburner.prototype._cancelAutorun = function _cancelAutorun() {\n            if (this._autorun !== null) {\n                this._platform.clearNext(this._autorun);\n                this._autorun = null;\n            }\n        };\n\n        Backburner.prototype._setTimeout = function _setTimeout(target, method, args, wait) {\n            var stack = this.DEBUG ? new Error() : undefined;\n            var executeAt = this._platform.now() + wait;\n            var id = UUID++ + '';\n            if (this._timers.length === 0) {\n                this._timers.push(executeAt, id, target, method, args, stack);\n                this._installTimerTimeout();\n                return id;\n            }\n            // find position to insert\n            var i = binarySearch(executeAt, this._timers);\n            this._timers.splice(i, 0, executeAt, id, target, method, args, stack);\n            // we should be the new earliest timer if i == 0\n            if (i === 0) {\n                this._reinstallTimerTimeout();\n            }\n            return id;\n        };\n\n        Backburner.prototype._cancelLaterTimer = function _cancelLaterTimer(timer) {\n            for (var i = 1; i < this._timers.length; i += 6) {\n                if (this._timers[i] === timer) {\n                    i = i - 1;\n                    this._timers.splice(i, 6);\n                    if (i === 0) {\n                        this._reinstallTimerTimeout();\n                    }\n                    return true;\n                }\n            }\n            return false;\n        };\n\n        Backburner.prototype._cancelItem = function _cancelItem(timer, array) {\n            var index = findTimer(timer, array);\n            if (index > -1) {\n                this._platform.clearTimeout(timer);\n                array.splice(index, 4);\n                return true;\n            }\n            return false;\n        };\n\n        Backburner.prototype._trigger = function _trigger(eventName, arg1, arg2) {\n            var callbacks = this._eventCallbacks[eventName];\n            if (callbacks !== undefined) {\n                for (var i = 0; i < callbacks.length; i++) {\n                    callbacks[i](arg1, arg2);\n                }\n            }\n        };\n\n        Backburner.prototype._runExpiredTimers = function _runExpiredTimers() {\n            this._timerTimeoutId = null;\n            if (this._timers.length === 0) {\n                return;\n            }\n            this.begin();\n            this._scheduleExpiredTimers();\n            this.end();\n        };\n\n        Backburner.prototype._scheduleExpiredTimers = function _scheduleExpiredTimers() {\n            var timers = this._timers;\n            var i = 0;\n            var l = timers.length;\n            var defaultQueue = this.options.defaultQueue;\n            var n = this._platform.now();\n            for (; i < l; i += 6) {\n                var executeAt = timers[i];\n                if (executeAt <= n) {\n                    var target = timers[i + 2];\n                    var method = timers[i + 3];\n                    var _args2 = timers[i + 4];\n                    var stack = timers[i + 5];\n                    this.currentInstance.schedule(defaultQueue, target, method, _args2, false, stack);\n                } else {\n                    break;\n                }\n            }\n            timers.splice(0, i);\n            this._installTimerTimeout();\n        };\n\n        Backburner.prototype._reinstallTimerTimeout = function _reinstallTimerTimeout() {\n            this._clearTimerTimeout();\n            this._installTimerTimeout();\n        };\n\n        Backburner.prototype._clearTimerTimeout = function _clearTimerTimeout() {\n            if (this._timerTimeoutId === null) {\n                return;\n            }\n            this._platform.clearTimeout(this._timerTimeoutId);\n            this._timerTimeoutId = null;\n        };\n\n        Backburner.prototype._installTimerTimeout = function _installTimerTimeout() {\n            if (this._timers.length === 0) {\n                return;\n            }\n            var minExpiresAt = this._timers[0];\n            var n = this._platform.now();\n            var wait = Math.max(0, minExpiresAt - n);\n            this._timerTimeoutId = this._platform.setTimeout(this._boundRunExpiredTimers, wait);\n        };\n\n        Backburner.prototype._ensureInstance = function _ensureInstance() {\n            var currentInstance = this.currentInstance;\n            if (currentInstance === null) {\n                currentInstance = this.begin();\n                var next = this._platform.next;\n                this._autorun = next(this._boundAutorunEnd);\n            }\n            return currentInstance;\n        };\n\n        return Backburner;\n    }();\n\n    Backburner.Queue = Queue;\n\n    exports.default = Backburner;\n});","enifed('container', ['exports', 'ember-babel', 'ember-utils', 'ember-debug', 'ember/features', 'ember-environment'], function (exports, _emberBabel, _emberUtils, _emberDebug, _features, _emberEnvironment) {\n  'use strict';\n\n  exports.FACTORY_FOR = exports.Container = exports.privatize = exports.Registry = undefined;\n\n  var Container = function () {\n    function Container(registry) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      (0, _emberBabel.classCallCheck)(this, Container);\n\n      this.registry = registry;\n      this.owner = options.owner || null;\n      this.cache = (0, _emberUtils.dictionary)(options.cache || null);\n      this.factoryManagerCache = (0, _emberUtils.dictionary)(options.factoryManagerCache || null);\n      this.isDestroyed = false;\n      this.isDestroying = false;\n\n      if (true) {\n        this.validationCache = (0, _emberUtils.dictionary)(options.validationCache || null);\n      }\n    }\n\n    /**\n     @private\n     @property registry\n     @type Registry\n     @since 1.11.0\n     */\n\n    /**\n     @private\n     @property cache\n     @type InheritingDict\n     */\n\n    /**\n     @private\n     @property validationCache\n     @type InheritingDict\n     */\n\n    /**\n     Given a fullName return a corresponding instance.\n      The default behavior is for lookup to return a singleton instance.\n     The singleton is scoped to the container, allowing multiple containers\n     to all have their own locally scoped singletons.\n      ```javascript\n     let registry = new Registry();\n     let container = registry.container();\n      registry.register('api:twitter', Twitter);\n      let twitter = container.lookup('api:twitter');\n      twitter instanceof Twitter; // => true\n      // by default the container will return singletons\n     let twitter2 = container.lookup('api:twitter');\n     twitter2 instanceof Twitter; // => true\n      twitter === twitter2; //=> true\n     ```\n      If singletons are not wanted, an optional flag can be provided at lookup.\n      ```javascript\n     let registry = new Registry();\n     let container = registry.container();\n      registry.register('api:twitter', Twitter);\n      let twitter = container.lookup('api:twitter', { singleton: false });\n     let twitter2 = container.lookup('api:twitter', { singleton: false });\n      twitter === twitter2; //=> false\n     ```\n      @private\n     @method lookup\n     @param {String} fullName\n     @param {Object} [options]\n     @param {String} [options.source] The fullname of the request source (used for local lookup)\n     @return {any}\n     */\n\n\n    Container.prototype.lookup = function lookup(fullName, options) {\n      (true && !(this.registry.isValidFullName(fullName)) && (0, _emberDebug.assert)('fullName must be a proper full name', this.registry.isValidFullName(fullName)));\n\n      return _lookup(this, this.registry.normalize(fullName), options);\n    };\n\n    Container.prototype.destroy = function destroy() {\n      destroyDestroyables(this);\n      this.isDestroying = true;\n    };\n\n    Container.prototype.finalizeDestroy = function finalizeDestroy() {\n      resetCache(this);\n      this.isDestroyed = true;\n    };\n\n    Container.prototype.reset = function reset(fullName) {\n      if (this.isDestroyed) return;\n      if (fullName === undefined) {\n        destroyDestroyables(this);\n        resetCache(this);\n      } else {\n        resetMember(this, this.registry.normalize(fullName));\n      }\n    };\n\n    Container.prototype.ownerInjection = function ownerInjection() {\n      var _ref;\n\n      return _ref = {}, _ref[_emberUtils.OWNER] = this.owner, _ref;\n    };\n\n    Container.prototype._resolverCacheKey = function _resolverCacheKey(name, options) {\n      return this.registry.resolverCacheKey(name, options);\n    };\n\n    Container.prototype.factoryFor = function factoryFor(fullName) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      var normalizedName = this.registry.normalize(fullName);\n\n      (true && !(this.registry.isValidFullName(normalizedName)) && (0, _emberDebug.assert)('fullName must be a proper full name', this.registry.isValidFullName(normalizedName)));\n\n\n      if (options.source) {\n        var expandedFullName = this.registry.expandLocalLookup(fullName, options);\n        // if expandLocalLookup returns falsey, we do not support local lookup\n        if (!_features.EMBER_MODULE_UNIFICATION) {\n          if (!expandedFullName) {\n            return;\n          }\n\n          normalizedName = expandedFullName;\n        } else if (expandedFullName) {\n          // with ember-module-unification, if expandLocalLookup returns something,\n          // pass it to the resolve without the source\n          normalizedName = expandedFullName;\n          options = {};\n        }\n      }\n\n      var cacheKey = this._resolverCacheKey(normalizedName, options);\n      var cached = this.factoryManagerCache[cacheKey];\n\n      if (cached !== undefined) {\n        return cached;\n      }\n\n      var factory = _features.EMBER_MODULE_UNIFICATION ? this.registry.resolve(normalizedName, options) : this.registry.resolve(normalizedName);\n\n      if (factory === undefined) {\n        return;\n      }\n\n      if (true && factory && typeof factory._onLookup === 'function') {\n        factory._onLookup(fullName);\n      }\n\n      var manager = new FactoryManager(this, factory, fullName, normalizedName);\n\n      if (true) {\n        manager = wrapManagerInDeprecationProxy(manager);\n      }\n\n      this.factoryManagerCache[cacheKey] = manager;\n      return manager;\n    };\n\n    return Container;\n  }();\n\n  /*\n   * Wrap a factory manager in a proxy which will not permit properties to be\n   * set on the manager.\n   */\n  function wrapManagerInDeprecationProxy(manager) {\n    if (_emberUtils.HAS_NATIVE_PROXY) {\n      var validator = {\n        set: function (obj, prop) {\n          throw new Error('You attempted to set \"' + prop + '\" on a factory manager created by container#factoryFor. A factory manager is a read-only construct.');\n        }\n      };\n\n      // Note:\n      // We have to proxy access to the manager here so that private property\n      // access doesn't cause the above errors to occur.\n      var m = manager;\n      var proxiedManager = {\n        class: m.class,\n        create: function (props) {\n          return m.create(props);\n        }\n      };\n\n      var proxy = new Proxy(proxiedManager, validator);\n      FACTORY_FOR.set(proxy, manager);\n    }\n\n    return manager;\n  }\n\n  function isSingleton(container, fullName) {\n    return container.registry.getOption(fullName, 'singleton') !== false;\n  }\n\n  function isInstantiatable(container, fullName) {\n    return container.registry.getOption(fullName, 'instantiate') !== false;\n  }\n\n  function _lookup(container, fullName) {\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n    if (options.source) {\n      var expandedFullName = container.registry.expandLocalLookup(fullName, options);\n\n      if (!_features.EMBER_MODULE_UNIFICATION) {\n        // if expandLocalLookup returns falsey, we do not support local lookup\n        if (!expandedFullName) {\n          return;\n        }\n\n        fullName = expandedFullName;\n      } else if (expandedFullName) {\n        // with ember-module-unification, if expandLocalLookup returns something,\n        // pass it to the resolve without the source\n        fullName = expandedFullName;\n        options = {};\n      }\n    }\n\n    if (options.singleton !== false) {\n      var cacheKey = container._resolverCacheKey(fullName, options);\n      var cached = container.cache[cacheKey];\n      if (cached !== undefined) {\n        return cached;\n      }\n    }\n\n    return instantiateFactory(container, fullName, options);\n  }\n\n  function isSingletonClass(container, fullName, _ref2) {\n    var instantiate = _ref2.instantiate,\n        singleton = _ref2.singleton;\n\n    return singleton !== false && !instantiate && isSingleton(container, fullName) && !isInstantiatable(container, fullName);\n  }\n\n  function isSingletonInstance(container, fullName, _ref3) {\n    var instantiate = _ref3.instantiate,\n        singleton = _ref3.singleton;\n\n    return singleton !== false && instantiate !== false && isSingleton(container, fullName) && isInstantiatable(container, fullName);\n  }\n\n  function isFactoryClass(container, fullname, _ref4) {\n    var instantiate = _ref4.instantiate,\n        singleton = _ref4.singleton;\n\n    return instantiate === false && (singleton === false || !isSingleton(container, fullname)) && !isInstantiatable(container, fullname);\n  }\n\n  function isFactoryInstance(container, fullName, _ref5) {\n    var instantiate = _ref5.instantiate,\n        singleton = _ref5.singleton;\n\n    return instantiate !== false && (singleton !== false || isSingleton(container, fullName)) && isInstantiatable(container, fullName);\n  }\n\n  function instantiateFactory(container, fullName, options) {\n    var factoryManager = _features.EMBER_MODULE_UNIFICATION && options && options.source ? container.factoryFor(fullName, options) : container.factoryFor(fullName);\n\n    if (factoryManager === undefined) {\n      return;\n    }\n\n    // SomeClass { singleton: true, instantiate: true } | { singleton: true } | { instantiate: true } | {}\n    // By default majority of objects fall into this case\n    if (isSingletonInstance(container, fullName, options)) {\n      var cacheKey = container._resolverCacheKey(fullName, options);\n      return container.cache[cacheKey] = factoryManager.create();\n    }\n\n    // SomeClass { singleton: false, instantiate: true }\n    if (isFactoryInstance(container, fullName, options)) {\n      return factoryManager.create();\n    }\n\n    // SomeClass { singleton: true, instantiate: false } | { instantiate: false } | { singleton: false, instantiation: false }\n    if (isSingletonClass(container, fullName, options) || isFactoryClass(container, fullName, options)) {\n      return factoryManager.class;\n    }\n\n    throw new Error('Could not create factory');\n  }\n\n  function buildInjections(container, injections) {\n    var hash = {};\n    var isDynamic = false;\n\n    if (injections.length > 0) {\n      if (true) {\n        container.registry.validateInjections(injections);\n      }\n\n      var injection = void 0;\n      for (var i = 0; i < injections.length; i++) {\n        injection = injections[i];\n        hash[injection.property] = _lookup(container, injection.fullName);\n        if (!isDynamic) {\n          isDynamic = !isSingleton(container, injection.fullName);\n        }\n      }\n    }\n\n    return { injections: hash, isDynamic: isDynamic };\n  }\n\n  function injectionsFor(container, fullName) {\n    var registry = container.registry;\n\n    var _fullName$split = fullName.split(':'),\n        type = _fullName$split[0];\n\n    var injections = registry.getTypeInjections(type).concat(registry.getInjections(fullName));\n    return buildInjections(container, injections);\n  }\n\n  function destroyDestroyables(container) {\n    var cache = container.cache;\n    var keys = Object.keys(cache);\n\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n      var value = cache[key];\n\n      if (value.destroy) {\n        value.destroy();\n      }\n    }\n  }\n\n  function resetCache(container) {\n    container.cache = (0, _emberUtils.dictionary)(null);\n    container.factoryManagerCache = (0, _emberUtils.dictionary)(null);\n  }\n\n  function resetMember(container, fullName) {\n    var member = container.cache[fullName];\n\n    delete container.factoryManagerCache[fullName];\n\n    if (member) {\n      delete container.cache[fullName];\n\n      if (member.destroy) {\n        member.destroy();\n      }\n    }\n  }\n\n  var FACTORY_FOR = new WeakMap();\n\n  var FactoryManager = function () {\n    function FactoryManager(container, factory, fullName, normalizedName) {\n      (0, _emberBabel.classCallCheck)(this, FactoryManager);\n\n      this.container = container;\n      this.owner = container.owner;\n      this.class = factory;\n      this.fullName = fullName;\n      this.normalizedName = normalizedName;\n      this.madeToString = undefined;\n      this.injections = undefined;\n      FACTORY_FOR.set(this, this);\n    }\n\n    FactoryManager.prototype.toString = function toString() {\n      if (this.madeToString === undefined) {\n        this.madeToString = this.container.registry.makeToString(this.class, this.fullName);\n      }\n\n      return this.madeToString;\n    };\n\n    FactoryManager.prototype.create = function create() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n      var injectionsCache = this.injections;\n      if (injectionsCache === undefined) {\n        var _injectionsFor = injectionsFor(this.container, this.normalizedName),\n            injections = _injectionsFor.injections,\n            isDynamic = _injectionsFor.isDynamic;\n\n        injectionsCache = injections;\n        if (!isDynamic) {\n          this.injections = injections;\n        }\n      }\n\n      var props = (0, _emberUtils.assign)({}, injectionsCache, options);\n\n      if (true) {\n        var lazyInjections = void 0;\n        var validationCache = this.container.validationCache;\n        // Ensure that all lazy injections are valid at instantiation time\n        if (!validationCache[this.fullName] && this.class && typeof this.class._lazyInjections === 'function') {\n          lazyInjections = this.class._lazyInjections();\n          lazyInjections = this.container.registry.normalizeInjectionsHash(lazyInjections);\n\n          this.container.registry.validateInjections(lazyInjections);\n        }\n\n        validationCache[this.fullName] = true;\n      }\n\n      if (!this.class.create) {\n        throw new Error('Failed to create an instance of \\'' + this.normalizedName + '\\'. Most likely an improperly defined class or' + ' an invalid module export.');\n      }\n\n      // required to allow access to things like\n      // the customized toString, _debugContainerKey,\n      // owner, etc. without a double extend and without\n      // modifying the objects properties\n      if (typeof this.class._initFactory === 'function') {\n        this.class._initFactory(this);\n      } else {\n        // in the non-EmberObject case we need to still setOwner\n        // this is required for supporting glimmer environment and\n        // template instantiation which rely heavily on\n        // `options[OWNER]` being passed into `create`\n        // TODO: clean this up, and remove in future versions\n        (0, _emberUtils.setOwner)(props, this.owner);\n      }\n\n      var instance = this.class.create(props);\n      FACTORY_FOR.set(instance, this);\n\n      return instance;\n    };\n\n    return FactoryManager;\n  }();\n\n  var VALID_FULL_NAME_REGEXP = /^[^:]+:[^:]+$/;\n  var missingResolverFunctionsDeprecation = 'Passing a `resolver` function into a Registry is deprecated. Please pass in a Resolver object with a `resolve` method.';\n\n  /**\n   A registry used to store factory and option information keyed\n   by type.\n  \n   A `Registry` stores the factory and option information needed by a\n   `Container` to instantiate and cache objects.\n  \n   The API for `Registry` is still in flux and should not be considered stable.\n  \n   @private\n   @class Registry\n   @since 1.11.0\n  */\n\n  var Registry = function () {\n    function Registry() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      (0, _emberBabel.classCallCheck)(this, Registry);\n\n      this.fallback = options.fallback || null;\n      this.resolver = options.resolver || null;\n\n      if (_emberEnvironment.ENV._ENABLE_RESOLVER_FUNCTION_SUPPORT !== true) {\n        (true && !(typeof this.resolver !== 'function') && (0, _emberDebug.assert)(missingResolverFunctionsDeprecation, typeof this.resolver !== 'function'));\n      }\n\n      if (typeof this.resolver === 'function' && _emberEnvironment.ENV._ENABLE_RESOLVER_FUNCTION_SUPPORT === true) {\n        deprecateResolverFunction(this);\n      }\n\n      this.registrations = (0, _emberUtils.dictionary)(options.registrations || null);\n\n      this._typeInjections = (0, _emberUtils.dictionary)(null);\n      this._injections = (0, _emberUtils.dictionary)(null);\n\n      this._localLookupCache = Object.create(null);\n      this._normalizeCache = (0, _emberUtils.dictionary)(null);\n      this._resolveCache = (0, _emberUtils.dictionary)(null);\n      this._failSet = new Set();\n\n      this._options = (0, _emberUtils.dictionary)(null);\n      this._typeOptions = (0, _emberUtils.dictionary)(null);\n    }\n\n    /**\n     A backup registry for resolving registrations when no matches can be found.\n      @private\n     @property fallback\n     @type Registry\n     */\n\n    /**\n     An object that has a `resolve` method that resolves a name.\n      @private\n     @property resolver\n     @type Resolver\n     */\n\n    /**\n     @private\n     @property registrations\n     @type InheritingDict\n     */\n\n    /**\n     @private\n      @property _typeInjections\n     @type InheritingDict\n     */\n\n    /**\n     @private\n      @property _injections\n     @type InheritingDict\n     */\n\n    /**\n     @private\n      @property _normalizeCache\n     @type InheritingDict\n     */\n\n    /**\n     @private\n      @property _resolveCache\n     @type InheritingDict\n     */\n\n    /**\n     @private\n      @property _options\n     @type InheritingDict\n     */\n\n    /**\n     @private\n      @property _typeOptions\n     @type InheritingDict\n     */\n\n    /**\n     Creates a container based on this registry.\n      @private\n     @method container\n     @param {Object} options\n     @return {Container} created container\n     */\n\n\n    Registry.prototype.container = function container(options) {\n      return new Container(this, options);\n    };\n\n    Registry.prototype.register = function register(fullName, factory) {\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      (true && !(this.isValidFullName(fullName)) && (0, _emberDebug.assert)('fullName must be a proper full name', this.isValidFullName(fullName)));\n      (true && !(factory !== undefined) && (0, _emberDebug.assert)('Attempting to register an unknown factory: \\'' + fullName + '\\'', factory !== undefined));\n\n\n      var normalizedName = this.normalize(fullName);\n      (true && !(!this._resolveCache[normalizedName]) && (0, _emberDebug.assert)('Cannot re-register: \\'' + fullName + '\\', as it has already been resolved.', !this._resolveCache[normalizedName]));\n\n\n      this._failSet.delete(normalizedName);\n      this.registrations[normalizedName] = factory;\n      this._options[normalizedName] = options;\n    };\n\n    Registry.prototype.unregister = function unregister(fullName) {\n      (true && !(this.isValidFullName(fullName)) && (0, _emberDebug.assert)('fullName must be a proper full name', this.isValidFullName(fullName)));\n\n\n      var normalizedName = this.normalize(fullName);\n\n      this._localLookupCache = Object.create(null);\n\n      delete this.registrations[normalizedName];\n      delete this._resolveCache[normalizedName];\n      delete this._options[normalizedName];\n      this._failSet.delete(normalizedName);\n    };\n\n    Registry.prototype.resolve = function resolve(fullName, options) {\n      (true && !(this.isValidFullName(fullName)) && (0, _emberDebug.assert)('fullName must be a proper full name', this.isValidFullName(fullName)));\n\n      var factory = _resolve(this, this.normalize(fullName), options);\n      if (factory === undefined && this.fallback !== null) {\n        var _fallback;\n\n        factory = (_fallback = this.fallback).resolve.apply(_fallback, arguments);\n      }\n      return factory;\n    };\n\n    Registry.prototype.describe = function describe(fullName) {\n      if (this.resolver !== null && this.resolver.lookupDescription) {\n        return this.resolver.lookupDescription(fullName);\n      } else if (this.fallback !== null) {\n        return this.fallback.describe(fullName);\n      } else {\n        return fullName;\n      }\n    };\n\n    Registry.prototype.normalizeFullName = function normalizeFullName(fullName) {\n      if (this.resolver !== null && this.resolver.normalize) {\n        return this.resolver.normalize(fullName);\n      } else if (this.fallback !== null) {\n        return this.fallback.normalizeFullName(fullName);\n      } else {\n        return fullName;\n      }\n    };\n\n    Registry.prototype.normalize = function normalize(fullName) {\n      return this._normalizeCache[fullName] || (this._normalizeCache[fullName] = this.normalizeFullName(fullName));\n    };\n\n    Registry.prototype.makeToString = function makeToString(factory, fullName) {\n      if (this.resolver !== null && this.resolver.makeToString) {\n        return this.resolver.makeToString(factory, fullName);\n      } else if (this.fallback !== null) {\n        return this.fallback.makeToString(factory, fullName);\n      } else {\n        return factory.toString();\n      }\n    };\n\n    Registry.prototype.has = function has(fullName, options) {\n      if (!this.isValidFullName(fullName)) {\n        return false;\n      }\n\n      var source = options && options.source && this.normalize(options.source);\n\n      return _has(this, this.normalize(fullName), source);\n    };\n\n    Registry.prototype.optionsForType = function optionsForType(type, options) {\n      this._typeOptions[type] = options;\n    };\n\n    Registry.prototype.getOptionsForType = function getOptionsForType(type) {\n      var optionsForType = this._typeOptions[type];\n      if (optionsForType === undefined && this.fallback !== null) {\n        optionsForType = this.fallback.getOptionsForType(type);\n      }\n      return optionsForType;\n    };\n\n    Registry.prototype.options = function options(fullName) {\n      var _options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      var normalizedName = this.normalize(fullName);\n      this._options[normalizedName] = _options;\n    };\n\n    Registry.prototype.getOptions = function getOptions(fullName) {\n      var normalizedName = this.normalize(fullName);\n      var options = this._options[normalizedName];\n\n      if (options === undefined && this.fallback !== null) {\n        options = this.fallback.getOptions(fullName);\n      }\n      return options;\n    };\n\n    Registry.prototype.getOption = function getOption(fullName, optionName) {\n      var options = this._options[fullName];\n\n      if (options && options[optionName] !== undefined) {\n        return options[optionName];\n      }\n\n      var type = fullName.split(':')[0];\n      options = this._typeOptions[type];\n\n      if (options && options[optionName] !== undefined) {\n        return options[optionName];\n      } else if (this.fallback !== null) {\n        return this.fallback.getOption(fullName, optionName);\n      }\n    };\n\n    Registry.prototype.typeInjection = function typeInjection(type, property, fullName) {\n      (true && !(this.isValidFullName(fullName)) && (0, _emberDebug.assert)('fullName must be a proper full name', this.isValidFullName(fullName)));\n\n\n      var fullNameType = fullName.split(':')[0];\n      (true && !(fullNameType !== type) && (0, _emberDebug.assert)('Cannot inject a \\'' + fullName + '\\' on other ' + type + '(s).', fullNameType !== type));\n\n\n      var injections = this._typeInjections[type] || (this._typeInjections[type] = []);\n\n      injections.push({ property: property, fullName: fullName });\n    };\n\n    Registry.prototype.injection = function injection(fullName, property, injectionName) {\n      (true && !(this.isValidFullName(injectionName)) && (0, _emberDebug.assert)('Invalid injectionName, expected: \\'type:name\\' got: ' + injectionName, this.isValidFullName(injectionName)));\n\n\n      var normalizedInjectionName = this.normalize(injectionName);\n\n      if (fullName.indexOf(':') === -1) {\n        return this.typeInjection(fullName, property, normalizedInjectionName);\n      }\n\n      (true && !(this.isValidFullName(fullName)) && (0, _emberDebug.assert)('fullName must be a proper full name', this.isValidFullName(fullName)));\n\n      var normalizedName = this.normalize(fullName);\n\n      var injections = this._injections[normalizedName] || (this._injections[normalizedName] = []);\n\n      injections.push({ property: property, fullName: normalizedInjectionName });\n    };\n\n    Registry.prototype.knownForType = function knownForType(type) {\n      var localKnown = (0, _emberUtils.dictionary)(null);\n      var registeredNames = Object.keys(this.registrations);\n      for (var index = 0; index < registeredNames.length; index++) {\n        var fullName = registeredNames[index];\n        var itemType = fullName.split(':')[0];\n\n        if (itemType === type) {\n          localKnown[fullName] = true;\n        }\n      }\n\n      var fallbackKnown = void 0,\n          resolverKnown = void 0;\n      if (this.fallback !== null) {\n        fallbackKnown = this.fallback.knownForType(type);\n      }\n\n      if (this.resolver !== null && this.resolver.knownForType) {\n        resolverKnown = this.resolver.knownForType(type);\n      }\n\n      return (0, _emberUtils.assign)({}, fallbackKnown, localKnown, resolverKnown);\n    };\n\n    Registry.prototype.isValidFullName = function isValidFullName(fullName) {\n      return VALID_FULL_NAME_REGEXP.test(fullName);\n    };\n\n    Registry.prototype.getInjections = function getInjections(fullName) {\n      var injections = this._injections[fullName] || [];\n      if (this.fallback !== null) {\n        injections = injections.concat(this.fallback.getInjections(fullName));\n      }\n      return injections;\n    };\n\n    Registry.prototype.getTypeInjections = function getTypeInjections(type) {\n      var injections = this._typeInjections[type] || [];\n      if (this.fallback !== null) {\n        injections = injections.concat(this.fallback.getTypeInjections(type));\n      }\n      return injections;\n    };\n\n    Registry.prototype.resolverCacheKey = function resolverCacheKey(name, options) {\n      if (!_features.EMBER_MODULE_UNIFICATION) {\n        return name;\n      }\n\n      return options && options.source ? options.source + ':' + name : name;\n    };\n\n    Registry.prototype.expandLocalLookup = function expandLocalLookup(fullName, options) {\n      if (this.resolver !== null && this.resolver.expandLocalLookup) {\n        (true && !(this.isValidFullName(fullName)) && (0, _emberDebug.assert)('fullName must be a proper full name', this.isValidFullName(fullName)));\n        (true && !(options && options.source) && (0, _emberDebug.assert)('options.source must be provided to expandLocalLookup', options && options.source));\n        (true && !(this.isValidFullName(options.source)) && (0, _emberDebug.assert)('options.source must be a proper full name', this.isValidFullName(options.source)));\n\n\n        var normalizedFullName = this.normalize(fullName);\n        var normalizedSource = this.normalize(options.source);\n\n        return _expandLocalLookup(this, normalizedFullName, normalizedSource);\n      } else if (this.fallback !== null) {\n        return this.fallback.expandLocalLookup(fullName, options);\n      } else {\n        return null;\n      }\n    };\n\n    return Registry;\n  }();\n\n  function deprecateResolverFunction(registry) {\n    (true && !(false) && (0, _emberDebug.deprecate)(missingResolverFunctionsDeprecation, false, { id: 'ember-application.registry-resolver-as-function', until: '3.0.0', url: 'https://emberjs.com/deprecations/v2.x#toc_registry-resolver-as-function' }));\n\n    registry.resolver = { resolve: registry.resolver };\n  }\n\n  if (true) {\n    Registry.prototype.normalizeInjectionsHash = function (hash) {\n      var injections = [];\n\n      for (var key in hash) {\n        if (hash.hasOwnProperty(key)) {\n          (true && !(this.isValidFullName(hash[key])) && (0, _emberDebug.assert)('Expected a proper full name, given \\'' + hash[key] + '\\'', this.isValidFullName(hash[key])));\n\n\n          injections.push({\n            property: key,\n            fullName: hash[key]\n          });\n        }\n      }\n\n      return injections;\n    };\n\n    Registry.prototype.validateInjections = function (injections) {\n      if (!injections) {\n        return;\n      }\n\n      var fullName = void 0;\n\n      for (var i = 0; i < injections.length; i++) {\n        fullName = injections[i].fullName;\n\n        (true && !(this.has(fullName)) && (0, _emberDebug.assert)('Attempting to inject an unknown injection: \\'' + fullName + '\\'', this.has(fullName)));\n      }\n    };\n  }\n\n  function _expandLocalLookup(registry, normalizedName, normalizedSource) {\n    var cache = registry._localLookupCache;\n    var normalizedNameCache = cache[normalizedName];\n\n    if (!normalizedNameCache) {\n      normalizedNameCache = cache[normalizedName] = Object.create(null);\n    }\n\n    var cached = normalizedNameCache[normalizedSource];\n\n    if (cached !== undefined) {\n      return cached;\n    }\n\n    var expanded = registry.resolver.expandLocalLookup(normalizedName, normalizedSource);\n\n    return normalizedNameCache[normalizedSource] = expanded;\n  }\n\n  function _resolve(registry, normalizedName, options) {\n    if (options && options.source) {\n      // when `source` is provided expand normalizedName\n      // and source into the full normalizedName\n      var expandedNormalizedName = registry.expandLocalLookup(normalizedName, options);\n\n      // if expandLocalLookup returns falsey, we do not support local lookup\n      if (!_features.EMBER_MODULE_UNIFICATION) {\n        if (!expandedNormalizedName) {\n          return;\n        }\n\n        normalizedName = expandedNormalizedName;\n      } else if (expandedNormalizedName) {\n        // with ember-module-unification, if expandLocalLookup returns something,\n        // pass it to the resolve without the source\n        normalizedName = expandedNormalizedName;\n        options = {};\n      }\n    }\n\n    var cacheKey = registry.resolverCacheKey(normalizedName, options);\n    var cached = registry._resolveCache[cacheKey];\n    if (cached !== undefined) {\n      return cached;\n    }\n    if (registry._failSet.has(cacheKey)) {\n      return;\n    }\n\n    var resolved = void 0;\n\n    if (registry.resolver) {\n      resolved = registry.resolver.resolve(normalizedName, options && options.source);\n    }\n\n    if (resolved === undefined) {\n      resolved = registry.registrations[normalizedName];\n    }\n\n    if (resolved === undefined) {\n      registry._failSet.add(cacheKey);\n    } else {\n      registry._resolveCache[cacheKey] = resolved;\n    }\n\n    return resolved;\n  }\n\n  function _has(registry, fullName, source) {\n    return registry.resolve(fullName, { source: source }) !== undefined;\n  }\n\n  var privateNames = (0, _emberUtils.dictionary)(null);\n  var privateSuffix = ('' + Math.random() + Date.now()).replace('.', '');\n\n  function privatize(_ref6) {\n    var fullName = _ref6[0];\n\n    var name = privateNames[fullName];\n    if (name) {\n      return name;\n    }\n\n    var _fullName$split2 = fullName.split(':'),\n        type = _fullName$split2[0],\n        rawName = _fullName$split2[1];\n\n    return privateNames[fullName] = (0, _emberUtils.intern)(type + ':' + rawName + '-' + privateSuffix);\n  }\n\n  /*\n  Public API for the container is still in flux.\n  The public API, specified on the application namespace should be considered the stable API.\n  // @module container\n    @private\n  */\n\n  exports.Registry = Registry;\n  exports.privatize = privatize;\n  exports.Container = Container;\n  exports.FACTORY_FOR = FACTORY_FOR;\n});","enifed(\"dag-map\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    /**\n     * A topologically ordered map of key/value pairs with a simple API for adding constraints.\n     *\n     * Edges can forward reference keys that have not been added yet (the forward reference will\n     * map the key to undefined).\n     */\n    var DAG = function () {\n        function DAG() {\n            this._vertices = new Vertices();\n        }\n        /**\n         * Adds a key/value pair with dependencies on other key/value pairs.\n         *\n         * @public\n         * @param key    The key of the vertex to be added.\n         * @param value  The value of that vertex.\n         * @param before A key or array of keys of the vertices that must\n         *               be visited before this vertex.\n         * @param after  An string or array of strings with the keys of the\n         *               vertices that must be after this vertex is visited.\n         */\n        DAG.prototype.add = function (key, value, before, after) {\n            if (!key) throw new Error('argument `key` is required');\n            var vertices = this._vertices;\n            var v = vertices.add(key);\n            v.val = value;\n            if (before) {\n                if (typeof before === \"string\") {\n                    vertices.addEdge(v, vertices.add(before));\n                } else {\n                    for (var i = 0; i < before.length; i++) {\n                        vertices.addEdge(v, vertices.add(before[i]));\n                    }\n                }\n            }\n            if (after) {\n                if (typeof after === \"string\") {\n                    vertices.addEdge(vertices.add(after), v);\n                } else {\n                    for (var i = 0; i < after.length; i++) {\n                        vertices.addEdge(vertices.add(after[i]), v);\n                    }\n                }\n            }\n        };\n        /**\n         * @deprecated please use add.\n         */\n        DAG.prototype.addEdges = function (key, value, before, after) {\n            this.add(key, value, before, after);\n        };\n        /**\n         * Visits key/value pairs in topological order.\n         *\n         * @public\n         * @param callback The function to be invoked with each key/value.\n         */\n        DAG.prototype.each = function (callback) {\n            this._vertices.walk(callback);\n        };\n        /**\n         * @deprecated please use each.\n         */\n        DAG.prototype.topsort = function (callback) {\n            this.each(callback);\n        };\n        return DAG;\n    }();\n    exports.default = DAG;\n\n    /** @private */\n    var Vertices = function () {\n        function Vertices() {\n            this.length = 0;\n            this.stack = new IntStack();\n            this.path = new IntStack();\n            this.result = new IntStack();\n        }\n        Vertices.prototype.add = function (key) {\n            if (!key) throw new Error(\"missing key\");\n            var l = this.length | 0;\n            var vertex;\n            for (var i = 0; i < l; i++) {\n                vertex = this[i];\n                if (vertex.key === key) return vertex;\n            }\n            this.length = l + 1;\n            return this[l] = {\n                idx: l,\n                key: key,\n                val: undefined,\n                out: false,\n                flag: false,\n                length: 0\n            };\n        };\n        Vertices.prototype.addEdge = function (v, w) {\n            this.check(v, w.key);\n            var l = w.length | 0;\n            for (var i = 0; i < l; i++) {\n                if (w[i] === v.idx) return;\n            }\n            w.length = l + 1;\n            w[l] = v.idx;\n            v.out = true;\n        };\n        Vertices.prototype.walk = function (cb) {\n            this.reset();\n            for (var i = 0; i < this.length; i++) {\n                var vertex = this[i];\n                if (vertex.out) continue;\n                this.visit(vertex, \"\");\n            }\n            this.each(this.result, cb);\n        };\n        Vertices.prototype.check = function (v, w) {\n            if (v.key === w) {\n                throw new Error(\"cycle detected: \" + w + \" <- \" + w);\n            }\n            // quick check\n            if (v.length === 0) return;\n            // shallow check\n            for (var i = 0; i < v.length; i++) {\n                var key = this[v[i]].key;\n                if (key === w) {\n                    throw new Error(\"cycle detected: \" + w + \" <- \" + v.key + \" <- \" + w);\n                }\n            }\n            // deep check\n            this.reset();\n            this.visit(v, w);\n            if (this.path.length > 0) {\n                var msg_1 = \"cycle detected: \" + w;\n                this.each(this.path, function (key) {\n                    msg_1 += \" <- \" + key;\n                });\n                throw new Error(msg_1);\n            }\n        };\n        Vertices.prototype.reset = function () {\n            this.stack.length = 0;\n            this.path.length = 0;\n            this.result.length = 0;\n            for (var i = 0, l = this.length; i < l; i++) {\n                this[i].flag = false;\n            }\n        };\n        Vertices.prototype.visit = function (start, search) {\n            var _a = this,\n                stack = _a.stack,\n                path = _a.path,\n                result = _a.result;\n            stack.push(start.idx);\n            while (stack.length) {\n                var index = stack.pop() | 0;\n                if (index >= 0) {\n                    // enter\n                    var vertex = this[index];\n                    if (vertex.flag) continue;\n                    vertex.flag = true;\n                    path.push(index);\n                    if (search === vertex.key) break;\n                    // push exit\n                    stack.push(~index);\n                    this.pushIncoming(vertex);\n                } else {\n                    // exit\n                    path.pop();\n                    result.push(~index);\n                }\n            }\n        };\n        Vertices.prototype.pushIncoming = function (incomming) {\n            var stack = this.stack;\n            for (var i = incomming.length - 1; i >= 0; i--) {\n                var index = incomming[i];\n                if (!this[index].flag) {\n                    stack.push(index);\n                }\n            }\n        };\n        Vertices.prototype.each = function (indices, cb) {\n            for (var i = 0, l = indices.length; i < l; i++) {\n                var vertex = this[indices[i]];\n                cb(vertex.key, vertex.val);\n            }\n        };\n        return Vertices;\n    }();\n    /** @private */\n    var IntStack = function () {\n        function IntStack() {\n            this.length = 0;\n        }\n        IntStack.prototype.push = function (n) {\n            this[this.length++] = n | 0;\n        };\n        IntStack.prototype.pop = function () {\n            return this[--this.length] | 0;\n        };\n        return IntStack;\n    }();\n});","enifed('ember-application/index', ['exports', 'ember-application/system/application', 'ember-application/system/application-instance', 'ember-application/system/resolver', 'ember-application/system/engine', 'ember-application/system/engine-instance', 'ember-application/system/engine-parent', 'ember-application/initializers/dom-templates'], function (exports, _application, _applicationInstance, _resolver, _engine, _engineInstance, _engineParent) {\n  'use strict';\n\n  exports.setEngineParent = exports.getEngineParent = exports.EngineInstance = exports.Engine = exports.Resolver = exports.ApplicationInstance = exports.Application = undefined;\n  Object.defineProperty(exports, 'Application', {\n    enumerable: true,\n    get: function () {\n      return _application.default;\n    }\n  });\n  Object.defineProperty(exports, 'ApplicationInstance', {\n    enumerable: true,\n    get: function () {\n      return _applicationInstance.default;\n    }\n  });\n  Object.defineProperty(exports, 'Resolver', {\n    enumerable: true,\n    get: function () {\n      return _resolver.default;\n    }\n  });\n  Object.defineProperty(exports, 'Engine', {\n    enumerable: true,\n    get: function () {\n      return _engine.default;\n    }\n  });\n  Object.defineProperty(exports, 'EngineInstance', {\n    enumerable: true,\n    get: function () {\n      return _engineInstance.default;\n    }\n  });\n  Object.defineProperty(exports, 'getEngineParent', {\n    enumerable: true,\n    get: function () {\n      return _engineParent.getEngineParent;\n    }\n  });\n  Object.defineProperty(exports, 'setEngineParent', {\n    enumerable: true,\n    get: function () {\n      return _engineParent.setEngineParent;\n    }\n  });\n});","enifed('ember-application/initializers/dom-templates', ['require', 'ember-glimmer', 'ember-environment', 'ember-application/system/application'], function (_require2, _emberGlimmer, _emberEnvironment, _application) {\n  'use strict';\n\n  var bootstrap = function () {};\n\n  _application.default.initializer({\n    name: 'domTemplates',\n    initialize: function () {\n      var bootstrapModuleId = 'ember-template-compiler/system/bootstrap';\n      var context = void 0;\n      if (_emberEnvironment.environment.hasDOM && (0, _require2.has)(bootstrapModuleId)) {\n        bootstrap = (0, _require2.default)(bootstrapModuleId).default;\n        context = document;\n      }\n\n      bootstrap({ context: context, hasTemplate: _emberGlimmer.hasTemplate, setTemplate: _emberGlimmer.setTemplate });\n    }\n  });\n});","enifed('ember-application/system/application-instance', ['exports', 'ember-utils', 'ember-metal', 'ember-environment', 'ember-views', 'ember-application/system/engine-instance', 'ember-glimmer'], function (exports, _emberUtils, _emberMetal, _emberEnvironment, _emberViews, _engineInstance, _emberGlimmer) {\n  'use strict';\n\n  /**\n    The `ApplicationInstance` encapsulates all of the stateful aspects of a\n    running `Application`.\n  \n    At a high-level, we break application boot into two distinct phases:\n  \n    * Definition time, where all of the classes, templates, and other\n      dependencies are loaded (typically in the browser).\n    * Run time, where we begin executing the application once everything\n      has loaded.\n  \n    Definition time can be expensive and only needs to happen once since it is\n    an idempotent operation. For example, between test runs and FastBoot\n    requests, the application stays the same. It is only the state that we want\n    to reset.\n  \n    That state is what the `ApplicationInstance` manages: it is responsible for\n    creating the container that contains all application state, and disposing of\n    it once the particular test run or FastBoot request has finished.\n  \n    @public\n    @class ApplicationInstance\n    @extends EngineInstance\n  */\n\n  /**\n  @module @ember/application\n  */\n\n  var ApplicationInstance = _engineInstance.default.extend({\n    /**\n      The `Application` for which this is an instance.\n       @property {Application} application\n      @private\n    */\n    application: null,\n\n    /**\n      The DOM events for which the event dispatcher should listen.\n       By default, the application's `Ember.EventDispatcher` listens\n      for a set of standard DOM events, such as `mousedown` and\n      `keyup`, and delegates them to your application's `Ember.View`\n      instances.\n       @private\n      @property {Object} customEvents\n    */\n    customEvents: null,\n\n    /**\n      The root DOM element of the Application as an element or a\n      [jQuery-compatible selector\n      string](http://api.jquery.com/category/selectors/).\n       @private\n      @property {String|DOMElement} rootElement\n    */\n    rootElement: null,\n\n    init: function () {\n      this._super.apply(this, arguments);\n\n      this.application._watchInstance(this);\n\n      // Register this instance in the per-instance registry.\n      //\n      // Why do we need to register the instance in the first place?\n      // Because we need a good way for the root route (a.k.a ApplicationRoute)\n      // to notify us when it has created the root-most view. That view is then\n      // appended to the rootElement, in the case of apps, to the fixture harness\n      // in tests, or rendered to a string in the case of FastBoot.\n      this.register('-application-instance:main', this, { instantiate: false });\n    },\n    _bootSync: function (options) {\n      if (this._booted) {\n        return this;\n      }\n\n      options = new BootOptions(options);\n\n      this.setupRegistry(options);\n\n      if (options.rootElement) {\n        this.rootElement = options.rootElement;\n      } else {\n        this.rootElement = this.application.rootElement;\n      }\n\n      if (options.location) {\n        var router = (0, _emberMetal.get)(this, 'router');\n        (0, _emberMetal.set)(router, 'location', options.location);\n      }\n\n      this.application.runInstanceInitializers(this);\n\n      if (options.isInteractive) {\n        this.setupEventDispatcher();\n      }\n\n      this._booted = true;\n\n      return this;\n    },\n    setupRegistry: function (options) {\n      this.constructor.setupRegistry(this.__registry__, options);\n    },\n\n\n    router: (0, _emberMetal.computed)(function () {\n      return this.lookup('router:main');\n    }).readOnly(),\n\n    didCreateRootView: function (view) {\n      view.appendTo(this.rootElement);\n    },\n    startRouting: function () {\n      var router = (0, _emberMetal.get)(this, 'router');\n      router.startRouting();\n      this._didSetupRouter = true;\n    },\n    setupRouter: function () {\n      if (this._didSetupRouter) {\n        return;\n      }\n      this._didSetupRouter = true;\n\n      var router = (0, _emberMetal.get)(this, 'router');\n      router.setupRouter();\n    },\n    handleURL: function (url) {\n      var router = (0, _emberMetal.get)(this, 'router');\n\n      this.setupRouter();\n      return router.handleURL(url);\n    },\n    setupEventDispatcher: function () {\n      var dispatcher = this.lookup('event_dispatcher:main');\n      var applicationCustomEvents = (0, _emberMetal.get)(this.application, 'customEvents');\n      var instanceCustomEvents = (0, _emberMetal.get)(this, 'customEvents');\n\n      var customEvents = (0, _emberUtils.assign)({}, applicationCustomEvents, instanceCustomEvents);\n      dispatcher.setup(customEvents, this.rootElement);\n\n      return dispatcher;\n    },\n    getURL: function () {\n      return (0, _emberMetal.get)(this, 'router.url');\n    },\n    visit: function (url) {\n      var _this = this;\n\n      this.setupRouter();\n\n      var bootOptions = this.__container__.lookup('-environment:main');\n\n      var router = (0, _emberMetal.get)(this, 'router');\n\n      var handleTransitionResolve = function () {\n        if (!bootOptions.options.shouldRender) {\n          // No rendering is needed, and routing has completed, simply return.\n          return _this;\n        } else {\n          // Ensure that the visit promise resolves when all rendering has completed\n          return (0, _emberGlimmer.renderSettled)().then(function () {\n            return _this;\n          });\n        }\n      };\n\n      var handleTransitionReject = function (error) {\n        if (error.error) {\n          throw error.error;\n        } else if (error.name === 'TransitionAborted' && router._routerMicrolib.activeTransition) {\n          return router._routerMicrolib.activeTransition.then(handleTransitionResolve, handleTransitionReject);\n        } else if (error.name === 'TransitionAborted') {\n          throw new Error(error.message);\n        } else {\n          throw error;\n        }\n      };\n\n      var location = (0, _emberMetal.get)(router, 'location');\n\n      // Keeps the location adapter's internal URL in-sync\n      location.setURL(url);\n\n      // getURL returns the set url with the rootURL stripped off\n      return router.handleURL(location.getURL()).then(handleTransitionResolve, handleTransitionReject);\n    },\n    willDestroy: function () {\n      this._super.apply(this, arguments);\n      this.application._unwatchInstance(this);\n    }\n  });\n\n  ApplicationInstance.reopenClass({\n    setupRegistry: function (registry) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      if (!options.toEnvironment) {\n        options = new BootOptions(options);\n      }\n\n      registry.register('-environment:main', options.toEnvironment(), { instantiate: false });\n      registry.register('service:-document', options.document, { instantiate: false });\n\n      this._super(registry, options);\n    }\n  });\n\n  /**\n    A list of boot-time configuration options for customizing the behavior of\n    an `ApplicationInstance`.\n  \n    This is an interface class that exists purely to document the available\n    options; you do not need to construct it manually. Simply pass a regular\n    JavaScript object containing the desired options into methods that require\n    one of these options object:\n  \n    ```javascript\n    MyApp.visit(\"/\", { location: \"none\", rootElement: \"#container\" });\n    ```\n  \n    Not all combinations of the supported options are valid. See the documentation\n    on `Application#visit` for the supported configurations.\n  \n    Internal, experimental or otherwise unstable flags are marked as private.\n  \n    @class BootOptions\n    @namespace ApplicationInstance\n    @public\n  */\n  function BootOptions() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    /**\n      Provide a specific instance of jQuery. This is useful in conjunction with\n      the `document` option, as it allows you to use a copy of `jQuery` that is\n      appropriately bound to the foreign `document` (e.g. a jsdom).\n       This is highly experimental and support very incomplete at the moment.\n       @property jQuery\n      @type Object\n      @default auto-detected\n      @private\n    */\n    this.jQuery = _emberViews.jQuery; // This default is overridable below\n\n    /**\n      Interactive mode: whether we need to set up event delegation and invoke\n      lifecycle callbacks on Components.\n       @property isInteractive\n      @type boolean\n      @default auto-detected\n      @private\n    */\n    this.isInteractive = _emberEnvironment.environment.hasDOM; // This default is overridable below\n\n    /**\n      Run in a full browser environment.\n       When this flag is set to `false`, it will disable most browser-specific\n      and interactive features. Specifically:\n       * It does not use `jQuery` to append the root view; the `rootElement`\n        (either specified as a subsequent option or on the application itself)\n        must already be an `Element` in the given `document` (as opposed to a\n        string selector).\n       * It does not set up an `EventDispatcher`.\n       * It does not run any `Component` lifecycle hooks (such as `didInsertElement`).\n       * It sets the `location` option to `\"none\"`. (If you would like to use\n        the location adapter specified in the app's router instead, you can also\n        specify `{ location: null }` to specifically opt-out.)\n       @property isBrowser\n      @type boolean\n      @default auto-detected\n      @public\n    */\n    if (options.isBrowser !== undefined) {\n      this.isBrowser = !!options.isBrowser;\n    } else {\n      this.isBrowser = _emberEnvironment.environment.hasDOM;\n    }\n\n    if (!this.isBrowser) {\n      this.jQuery = null;\n      this.isInteractive = false;\n      this.location = 'none';\n    }\n\n    /**\n      Disable rendering completely.\n       When this flag is set to `true`, it will disable the entire rendering\n      pipeline. Essentially, this puts the app into \"routing-only\" mode. No\n      templates will be rendered, and no Components will be created.\n       @property shouldRender\n      @type boolean\n      @default true\n      @public\n    */\n    if (options.shouldRender !== undefined) {\n      this.shouldRender = !!options.shouldRender;\n    } else {\n      this.shouldRender = true;\n    }\n\n    if (!this.shouldRender) {\n      this.jQuery = null;\n      this.isInteractive = false;\n    }\n\n    /**\n      If present, render into the given `Document` object instead of the\n      global `window.document` object.\n       In practice, this is only useful in non-browser environment or in\n      non-interactive mode, because Ember's `jQuery` dependency is\n      implicitly bound to the current document, causing event delegation\n      to not work properly when the app is rendered into a foreign\n      document object (such as an iframe's `contentDocument`).\n       In non-browser mode, this could be a \"`Document`-like\" object as\n      Ember only interact with a small subset of the DOM API in non-\n      interactive mode. While the exact requirements have not yet been\n      formalized, the `SimpleDOM` library's implementation is known to\n      work.\n       @property document\n      @type Document\n      @default the global `document` object\n      @public\n    */\n    if (options.document) {\n      this.document = options.document;\n    } else {\n      this.document = typeof document !== 'undefined' ? document : null;\n    }\n\n    /**\n      If present, overrides the application's `rootElement` property on\n      the instance. This is useful for testing environment, where you\n      might want to append the root view to a fixture area.\n       In non-browser mode, because Ember does not have access to jQuery,\n      this options must be specified as a DOM `Element` object instead of\n      a selector string.\n       See the documentation on `Application`'s `rootElement` for\n      details.\n       @property rootElement\n      @type String|Element\n      @default null\n      @public\n     */\n    if (options.rootElement) {\n      this.rootElement = options.rootElement;\n    }\n\n    // Set these options last to give the user a chance to override the\n    // defaults from the \"combo\" options like `isBrowser` (although in\n    // practice, the resulting combination is probably invalid)\n\n    /**\n      If present, overrides the router's `location` property with this\n      value. This is useful for environments where trying to modify the\n      URL would be inappropriate.\n       @property location\n      @type string\n      @default null\n      @public\n    */\n    if (options.location !== undefined) {\n      this.location = options.location;\n    }\n\n    if (options.jQuery !== undefined) {\n      this.jQuery = options.jQuery;\n    }\n\n    if (options.isInteractive !== undefined) {\n      this.isInteractive = !!options.isInteractive;\n    }\n  }\n\n  BootOptions.prototype.toEnvironment = function () {\n    var env = (0, _emberUtils.assign)({}, _emberEnvironment.environment);\n    // For compatibility with existing code\n    env.hasDOM = this.isBrowser;\n    env.isInteractive = this.isInteractive;\n    env.options = this;\n    return env;\n  };\n\n  exports.default = ApplicationInstance;\n});","enifed('ember-application/system/application', ['exports', 'ember-babel', 'ember-utils', 'ember-environment', 'ember-debug', 'ember-metal', 'ember-runtime', 'ember-views', 'ember-routing', 'ember-application/system/application-instance', 'container', 'ember-application/system/engine', 'ember-glimmer', 'ember/features'], function (exports, _emberBabel, _emberUtils, _emberEnvironment, _emberDebug, _emberMetal, _emberRuntime, _emberViews, _emberRouting, _applicationInstance, _container, _engine, _emberGlimmer, _features) {\n  'use strict';\n\n  var _templateObject = (0, _emberBabel.taggedTemplateLiteralLoose)(['-bucket-cache:main'], ['-bucket-cache:main']);\n\n  var librariesRegistered = false;\n\n  /**\n    An instance of `Application` is the starting point for every Ember\n    application. It helps to instantiate, initialize and coordinate the many\n    objects that make up your app.\n  \n    Each Ember app has one and only one `Application` object. In fact, the\n    very first thing you should do in your application is create the instance:\n  \n    ```javascript\n    import Application from '@ember/application';\n  \n    window.App = Application.create();\n    ```\n  \n    Typically, the application object is the only global variable. All other\n    classes in your app should be properties on the `Application` instance,\n    which highlights its first role: a global namespace.\n  \n    For example, if you define a view class, it might look like this:\n  \n    ```javascript\n    import Application from '@ember/application';\n  \n    App.MyView = Ember.View.extend();\n    ```\n  \n    By default, calling `Application.create()` will automatically initialize\n    your application by calling the `Application.initialize()` method. If\n    you need to delay initialization, you can call your app's `deferReadiness()`\n    method. When you are ready for your app to be initialized, call its\n    `advanceReadiness()` method.\n  \n    You can define a `ready` method on the `Application` instance, which\n    will be run by Ember when the application is initialized.\n  \n    Because `Application` inherits from `Ember.Namespace`, any classes\n    you create will have useful string representations when calling `toString()`.\n    See the `Ember.Namespace` documentation for more information.\n  \n    While you can think of your `Application` as a container that holds the\n    other classes in your application, there are several other responsibilities\n    going on under-the-hood that you may want to understand.\n  \n    ### Event Delegation\n  \n    Ember uses a technique called _event delegation_. This allows the framework\n    to set up a global, shared event listener instead of requiring each view to\n    do it manually. For example, instead of each view registering its own\n    `mousedown` listener on its associated element, Ember sets up a `mousedown`\n    listener on the `body`.\n  \n    If a `mousedown` event occurs, Ember will look at the target of the event and\n    start walking up the DOM node tree, finding corresponding views and invoking\n    their `mouseDown` method as it goes.\n  \n    `Application` has a number of default events that it listens for, as\n    well as a mapping from lowercase events to camel-cased view method names. For\n    example, the `keypress` event causes the `keyPress` method on the view to be\n    called, the `dblclick` event causes `doubleClick` to be called, and so on.\n  \n    If there is a bubbling browser event that Ember does not listen for by\n    default, you can specify custom events and their corresponding view method\n    names by setting the application's `customEvents` property:\n  \n    ```javascript\n    import Application from '@ember/application';\n  \n    let App = Application.create({\n      customEvents: {\n        // add support for the paste event\n        paste: 'paste'\n      }\n    });\n    ```\n  \n    To prevent Ember from setting up a listener for a default event,\n    specify the event name with a `null` value in the `customEvents`\n    property:\n  \n    ```javascript\n    import Application from '@ember/application';\n  \n    let App = Application.create({\n      customEvents: {\n        // prevent listeners for mouseenter/mouseleave events\n        mouseenter: null,\n        mouseleave: null\n      }\n    });\n    ```\n  \n    By default, the application sets up these event listeners on the document\n    body. However, in cases where you are embedding an Ember application inside\n    an existing page, you may want it to set up the listeners on an element\n    inside the body.\n  \n    For example, if only events inside a DOM element with the ID of `ember-app`\n    should be delegated, set your application's `rootElement` property:\n  \n    ```javascript\n    import Application from '@ember/application';\n  \n    let App = Application.create({\n      rootElement: '#ember-app'\n    });\n    ```\n  \n    The `rootElement` can be either a DOM element or a jQuery-compatible selector\n    string. Note that *views appended to the DOM outside the root element will\n    not receive events.* If you specify a custom root element, make sure you only\n    append views inside it!\n  \n    To learn more about the events Ember components use, see\n  \n    [components/handling-events](https://guides.emberjs.com/current/components/handling-events/#toc_event-names).\n  \n    ### Initializers\n  \n    Libraries on top of Ember can add initializers, like so:\n  \n    ```javascript\n    import Application from '@ember/application';\n  \n    Application.initializer({\n      name: 'api-adapter',\n  \n      initialize: function(application) {\n        application.register('api-adapter:main', ApiAdapter);\n      }\n    });\n    ```\n  \n    Initializers provide an opportunity to access the internal registry, which\n    organizes the different components of an Ember application. Additionally\n    they provide a chance to access the instantiated application. Beyond\n    being used for libraries, initializers are also a great way to organize\n    dependency injection or setup in your own application.\n  \n    ### Routing\n  \n    In addition to creating your application's router, `Application` is\n    also responsible for telling the router when to start routing. Transitions\n    between routes can be logged with the `LOG_TRANSITIONS` flag, and more\n    detailed intra-transition logging can be logged with\n    the `LOG_TRANSITIONS_INTERNAL` flag:\n  \n    ```javascript\n    import Application from '@ember/application';\n  \n    let App = Application.create({\n      LOG_TRANSITIONS: true, // basic logging of successful transitions\n      LOG_TRANSITIONS_INTERNAL: true // detailed logging of all routing steps\n    });\n    ```\n  \n    By default, the router will begin trying to translate the current URL into\n    application state once the browser emits the `DOMContentReady` event. If you\n    need to defer routing, you can call the application's `deferReadiness()`\n    method. Once routing can begin, call the `advanceReadiness()` method.\n  \n    If there is any setup required before routing begins, you can implement a\n    `ready()` method on your app that will be invoked immediately before routing\n    begins.\n  \n    @class Application\n    @extends Engine\n    @uses RegistryProxyMixin\n    @public\n  */\n\n  var Application = _engine.default.extend({\n    /**\n      The root DOM element of the Application. This can be specified as an\n      element or a\n      [jQuery-compatible selector string](http://api.jquery.com/category/selectors/).\n       This is the element that will be passed to the Application's,\n      `eventDispatcher`, which sets up the listeners for event delegation. Every\n      view in your application should be a child of the element you specify here.\n       @property rootElement\n      @type DOMElement\n      @default 'body'\n      @public\n    */\n    rootElement: 'body',\n\n    /**\n      The `Ember.EventDispatcher` responsible for delegating events to this\n      application's views.\n       The event dispatcher is created by the application at initialization time\n      and sets up event listeners on the DOM element described by the\n      application's `rootElement` property.\n       See the documentation for `Ember.EventDispatcher` for more information.\n       @property eventDispatcher\n      @type Ember.EventDispatcher\n      @default null\n      @public\n    */\n    eventDispatcher: null,\n\n    /**\n      The DOM events for which the event dispatcher should listen.\n       By default, the application's `Ember.EventDispatcher` listens\n      for a set of standard DOM events, such as `mousedown` and\n      `keyup`, and delegates them to your application's `Ember.View`\n      instances.\n       If you would like additional bubbling events to be delegated to your\n      views, set your `Application`'s `customEvents` property\n      to a hash containing the DOM event name as the key and the\n      corresponding view method name as the value. Setting an event to\n      a value of `null` will prevent a default event listener from being\n      added for that event.\n       To add new events to be listened to:\n       ```javascript\n      import Application from '@ember/application';\n       let App = Application.create({\n        customEvents: {\n          // add support for the paste event\n          paste: 'paste'\n        }\n      });\n      ```\n       To prevent default events from being listened to:\n       ```javascript\n      import Application from '@ember/application';\n       let App = Application.create({\n        customEvents: {\n          // remove support for mouseenter / mouseleave events\n          mouseenter: null,\n          mouseleave: null\n        }\n      });\n      ```\n      @property customEvents\n      @type Object\n      @default null\n      @public\n    */\n    customEvents: null,\n\n    /**\n      Whether the application should automatically start routing and render\n      templates to the `rootElement` on DOM ready. While default by true,\n      other environments such as FastBoot or a testing harness can set this\n      property to `false` and control the precise timing and behavior of the boot\n      process.\n       @property autoboot\n      @type Boolean\n      @default true\n      @private\n    */\n    autoboot: true,\n\n    /**\n      Whether the application should be configured for the legacy \"globals mode\".\n      Under this mode, the Application object serves as a global namespace for all\n      classes.\n       ```javascript\n      import Application from '@ember/application';\n      import Component from '@ember/component';\n       let App = Application.create({\n        ...\n      });\n       App.Router.reopen({\n        location: 'none'\n      });\n       App.Router.map({\n        ...\n      });\n       App.MyComponent = Component.extend({\n        ...\n      });\n      ```\n       This flag also exposes other internal APIs that assumes the existence of\n      a special \"default instance\", like `App.__container__.lookup(...)`.\n       This option is currently not configurable, its value is derived from\n      the `autoboot` flag – disabling `autoboot` also implies opting-out of\n      globals mode support, although they are ultimately orthogonal concerns.\n       Some of the global modes features are already deprecated in 1.x. The\n      existence of this flag is to untangle the globals mode code paths from\n      the autoboot code paths, so that these legacy features can be reviewed\n      for deprecation/removal separately.\n       Forcing the (autoboot=true, _globalsMode=false) here and running the tests\n      would reveal all the places where we are still relying on these legacy\n      behavior internally (mostly just tests).\n       @property _globalsMode\n      @type Boolean\n      @default true\n      @private\n    */\n    _globalsMode: true,\n\n    /**\n      An array of application instances created by `buildInstance()`. Used\n      internally to ensure that all instances get destroyed.\n       @property _applicationInstances\n      @type Array\n      @default null\n      @private\n    */\n    _applicationInstances: null,\n\n    init: function (options) {\n      // eslint-disable-line no-unused-vars\n      this._super.apply(this, arguments);\n\n      if (!this.$) {\n        this.$ = _emberViews.jQuery;\n      }\n\n      registerLibraries();\n\n      if (true) {\n        if (_emberEnvironment.ENV.LOG_VERSION) {\n          // we only need to see this once per Application#init\n          _emberEnvironment.ENV.LOG_VERSION = false;\n          _emberMetal.libraries.logVersions();\n        }\n      }\n\n      // Start off the number of deferrals at 1. This will be decremented by\n      // the Application's own `boot` method.\n      this._readinessDeferrals = 1;\n      this._booted = false;\n      this._applicationInstances = [];\n\n      this.autoboot = this._globalsMode = !!this.autoboot;\n\n      if (this._globalsMode) {\n        this._prepareForGlobalsMode();\n      }\n\n      if (this.autoboot) {\n        this.waitForDOMReady();\n      }\n    },\n    buildInstance: function () {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n      options.base = this;\n      options.application = this;\n      return _applicationInstance.default.create(options);\n    },\n    _watchInstance: function (instance) {\n      this._applicationInstances.push(instance);\n    },\n    _unwatchInstance: function (instance) {\n      var index = this._applicationInstances.indexOf(instance);\n      if (index > -1) {\n        this._applicationInstances.splice(index, 1);\n      }\n    },\n    _prepareForGlobalsMode: function () {\n      // Create subclass of Router for this Application instance.\n      // This is to ensure that someone reopening `App.Router` does not\n      // tamper with the default `Router`.\n      this.Router = (this.Router || _emberRouting.Router).extend();\n\n      this._buildDeprecatedInstance();\n    },\n    _buildDeprecatedInstance: function () {\n      // Build a default instance\n      var instance = this.buildInstance();\n\n      // Legacy support for App.__container__ and other global methods\n      // on App that rely on a single, default instance.\n      this.__deprecatedInstance__ = instance;\n      this.__container__ = instance.__container__;\n    },\n    waitForDOMReady: function () {\n      if (!this.$ || this.$.isReady) {\n        _emberMetal.run.schedule('actions', this, 'domReady');\n      } else {\n        this.$().ready(_emberMetal.run.bind(this, 'domReady'));\n      }\n    },\n    domReady: function () {\n      if (this.isDestroyed) {\n        return;\n      }\n\n      this._bootSync();\n\n      // Continues to `didBecomeReady`\n    },\n    deferReadiness: function () {\n      (true && !(this instanceof Application) && (0, _emberDebug.assert)('You must call deferReadiness on an instance of Application', this instanceof Application));\n      (true && !(this._readinessDeferrals > 0) && (0, _emberDebug.assert)('You cannot defer readiness since the `ready()` hook has already been called.', this._readinessDeferrals > 0));\n\n      this._readinessDeferrals++;\n    },\n    advanceReadiness: function () {\n      (true && !(this instanceof Application) && (0, _emberDebug.assert)('You must call advanceReadiness on an instance of Application', this instanceof Application));\n\n      this._readinessDeferrals--;\n\n      if (this._readinessDeferrals === 0) {\n        _emberMetal.run.once(this, this.didBecomeReady);\n      }\n    },\n    boot: function () {\n      if (this._bootPromise) {\n        return this._bootPromise;\n      }\n\n      try {\n        this._bootSync();\n      } catch (_) {\n        // Ignore the error: in the asynchronous boot path, the error is already reflected\n        // in the promise rejection\n      }\n\n      return this._bootPromise;\n    },\n    _bootSync: function () {\n      if (this._booted) {\n        return;\n      }\n\n      // Even though this returns synchronously, we still need to make sure the\n      // boot promise exists for book-keeping purposes: if anything went wrong in\n      // the boot process, we need to store the error as a rejection on the boot\n      // promise so that a future caller of `boot()` can tell what failed.\n      var defer = this._bootResolver = _emberRuntime.RSVP.defer();\n      this._bootPromise = defer.promise;\n\n      try {\n        this.runInitializers();\n        (0, _emberRuntime.runLoadHooks)('application', this);\n        this.advanceReadiness();\n        // Continues to `didBecomeReady`\n      } catch (error) {\n        // For the asynchronous boot path\n        defer.reject(error);\n\n        // For the synchronous boot path\n        throw error;\n      }\n    },\n    reset: function () {\n      (true && !(this._globalsMode && this.autoboot) && (0, _emberDebug.assert)('Calling reset() on instances of `Application` is not\\n            supported when globals mode is disabled; call `visit()` to\\n            create new `ApplicationInstance`s and dispose them\\n            via their `destroy()` method instead.', this._globalsMode && this.autoboot));\n\n\n      var instance = this.__deprecatedInstance__;\n\n      this._readinessDeferrals = 1;\n      this._bootPromise = null;\n      this._bootResolver = null;\n      this._booted = false;\n\n      function handleReset() {\n        (0, _emberMetal.run)(instance, 'destroy');\n        this._buildDeprecatedInstance();\n        _emberMetal.run.schedule('actions', this, '_bootSync');\n      }\n\n      _emberMetal.run.join(this, handleReset);\n    },\n    didBecomeReady: function () {\n      try {\n        // TODO: Is this still needed for _globalsMode = false?\n        if (!(0, _emberDebug.isTesting)()) {\n          // Eagerly name all classes that are already loaded\n          _emberRuntime.Namespace.processAll();\n          (0, _emberRuntime.setNamespaceSearchDisabled)(true);\n        }\n\n        // See documentation on `_autoboot()` for details\n        if (this.autoboot) {\n          var instance = void 0;\n\n          if (this._globalsMode) {\n            // If we already have the __deprecatedInstance__ lying around, boot it to\n            // avoid unnecessary work\n            instance = this.__deprecatedInstance__;\n          } else {\n            // Otherwise, build an instance and boot it. This is currently unreachable,\n            // because we forced _globalsMode to === autoboot; but having this branch\n            // allows us to locally toggle that flag for weeding out legacy globals mode\n            // dependencies independently\n            instance = this.buildInstance();\n          }\n\n          instance._bootSync();\n\n          // TODO: App.ready() is not called when autoboot is disabled, is this correct?\n          this.ready();\n\n          instance.startRouting();\n        }\n\n        // For the asynchronous boot path\n        this._bootResolver.resolve(this);\n\n        // For the synchronous boot path\n        this._booted = true;\n      } catch (error) {\n        // For the asynchronous boot path\n        this._bootResolver.reject(error);\n\n        // For the synchronous boot path\n        throw error;\n      }\n    },\n    ready: function () {\n      return this;\n    },\n    willDestroy: function () {\n      this._super.apply(this, arguments);\n      (0, _emberRuntime.setNamespaceSearchDisabled)(false);\n      this._booted = false;\n      this._bootPromise = null;\n      this._bootResolver = null;\n\n      if (_emberRuntime._loaded.application === this) {\n        _emberRuntime._loaded.application = undefined;\n      }\n\n      if (this._applicationInstances.length) {\n        this._applicationInstances.forEach(function (i) {\n          return i.destroy();\n        });\n        this._applicationInstances.length = 0;\n      }\n    },\n    visit: function (url, options) {\n      var _this = this;\n\n      return this.boot().then(function () {\n        var instance = _this.buildInstance();\n\n        return instance.boot(options).then(function () {\n          return instance.visit(url);\n        }).catch(function (error) {\n          (0, _emberMetal.run)(instance, 'destroy');\n          throw error;\n        });\n      });\n    }\n  });\n\n  Application.reopenClass({\n    buildRegistry: function (application) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      // eslint-disable-line no-unused-vars\n      var registry = this._super.apply(this, arguments);\n\n      commonSetupRegistry(registry);\n\n      (0, _emberGlimmer.setupApplicationRegistry)(registry);\n\n      return registry;\n    }\n  });\n\n  function commonSetupRegistry(registry) {\n    registry.register('router:main', _emberRouting.Router.extend());\n    registry.register('-view-registry:main', {\n      create: function () {\n        return (0, _emberUtils.dictionary)(null);\n      }\n    });\n\n    registry.register('route:basic', _emberRouting.Route);\n    registry.register('event_dispatcher:main', _emberViews.EventDispatcher);\n\n    registry.injection('router:main', 'namespace', 'application:main');\n\n    registry.register('location:auto', _emberRouting.AutoLocation);\n    registry.register('location:hash', _emberRouting.HashLocation);\n    registry.register('location:history', _emberRouting.HistoryLocation);\n    registry.register('location:none', _emberRouting.NoneLocation);\n\n    registry.register((0, _container.privatize)(_templateObject), _emberRouting.BucketCache);\n\n    if (_features.EMBER_ROUTING_ROUTER_SERVICE) {\n      registry.register('service:router', _emberRouting.RouterService);\n      registry.injection('service:router', '_router', 'router:main');\n    }\n  }\n\n  function registerLibraries() {\n    if (!librariesRegistered) {\n      librariesRegistered = true;\n\n      if (_emberEnvironment.environment.hasDOM && !_emberViews.jQueryDisabled) {\n        _emberMetal.libraries.registerCoreLibrary('jQuery', (0, _emberViews.jQuery)().jquery);\n      }\n    }\n  }\n\n  exports.default = Application;\n});","enifed('ember-application/system/engine-instance', ['exports', 'ember-babel', 'ember-utils', 'ember-runtime', 'ember-debug', 'container', 'ember-application/system/engine-parent'], function (exports, _emberBabel, _emberUtils, _emberRuntime, _emberDebug, _container, _engineParent) {\n  'use strict';\n\n  var _templateObject = (0, _emberBabel.taggedTemplateLiteralLoose)(['-bucket-cache:main'], ['-bucket-cache:main']),\n      _templateObject2 = (0, _emberBabel.taggedTemplateLiteralLoose)(['template-options:main'], ['template-options:main']);\n\n  /**\n    The `EngineInstance` encapsulates all of the stateful aspects of a\n    running `Engine`.\n  \n    @public\n    @class EngineInstance\n    @extends EmberObject\n    @uses RegistryProxyMixin\n    @uses ContainerProxyMixin\n  */\n\n  var EngineInstance = _emberRuntime.Object.extend(_emberRuntime.RegistryProxyMixin, _emberRuntime.ContainerProxyMixin, {\n    /**\n      The base `Engine` for which this is an instance.\n       @property {Engine} engine\n      @private\n    */\n    base: null,\n\n    init: function () {\n      this._super.apply(this, arguments);\n\n      (0, _emberUtils.guidFor)(this);\n\n      var base = this.base;\n\n      if (!base) {\n        base = this.application;\n        this.base = base;\n      }\n\n      // Create a per-instance registry that will use the application's registry\n      // as a fallback for resolving registrations.\n      var registry = this.__registry__ = new _container.Registry({\n        fallback: base.__registry__\n      });\n\n      // Create a per-instance container from the instance's registry\n      this.__container__ = registry.container({ owner: this });\n\n      this._booted = false;\n    },\n    boot: function (options) {\n      var _this = this;\n\n      if (this._bootPromise) {\n        return this._bootPromise;\n      }\n\n      this._bootPromise = new _emberRuntime.RSVP.Promise(function (resolve) {\n        return resolve(_this._bootSync(options));\n      });\n\n      return this._bootPromise;\n    },\n    _bootSync: function (options) {\n      if (this._booted) {\n        return this;\n      }\n\n      (true && !((0, _engineParent.getEngineParent)(this)) && (0, _emberDebug.assert)('An engine instance\\'s parent must be set via `setEngineParent(engine, parent)` prior to calling `engine.boot()`.', (0, _engineParent.getEngineParent)(this)));\n\n\n      this.cloneParentDependencies();\n\n      this.setupRegistry(options);\n\n      this.base.runInstanceInitializers(this);\n\n      this._booted = true;\n\n      return this;\n    },\n    setupRegistry: function () {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.__container__.lookup('-environment:main');\n\n      this.constructor.setupRegistry(this.__registry__, options);\n    },\n    unregister: function (fullName) {\n      this.__container__.reset(fullName);\n      this._super.apply(this, arguments);\n    },\n    buildChildEngineInstance: function (name) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      var Engine = this.lookup('engine:' + name);\n\n      if (!Engine) {\n        throw new _emberDebug.Error('You attempted to mount the engine \\'' + name + '\\', but it is not registered with its parent.');\n      }\n\n      var engineInstance = Engine.buildInstance(options);\n\n      (0, _engineParent.setEngineParent)(engineInstance, this);\n\n      return engineInstance;\n    },\n    cloneParentDependencies: function () {\n      var _this2 = this;\n\n      var parent = (0, _engineParent.getEngineParent)(this);\n\n      var registrations = ['route:basic', 'service:-routing', 'service:-glimmer-environment'];\n\n      registrations.forEach(function (key) {\n        return _this2.register(key, parent.resolveRegistration(key));\n      });\n\n      var env = parent.lookup('-environment:main');\n      this.register('-environment:main', env, { instantiate: false });\n\n      var singletons = ['router:main', (0, _container.privatize)(_templateObject), '-view-registry:main', 'renderer:-' + (env.isInteractive ? 'dom' : 'inert'), 'service:-document', (0, _container.privatize)(_templateObject2)];\n\n      if (env.isInteractive) {\n        singletons.push('event_dispatcher:main');\n      }\n\n      singletons.forEach(function (key) {\n        return _this2.register(key, parent.lookup(key), { instantiate: false });\n      });\n\n      this.inject('view', '_environment', '-environment:main');\n      this.inject('route', '_environment', '-environment:main');\n    }\n  });\n\n  EngineInstance.reopenClass({\n    setupRegistry: function (registry, options) {\n      // when no options/environment is present, do nothing\n      if (!options) {\n        return;\n      }\n\n      registry.injection('view', '_environment', '-environment:main');\n      registry.injection('route', '_environment', '-environment:main');\n\n      if (options.isInteractive) {\n        registry.injection('view', 'renderer', 'renderer:-dom');\n        registry.injection('component', 'renderer', 'renderer:-dom');\n      } else {\n        registry.injection('view', 'renderer', 'renderer:-inert');\n        registry.injection('component', 'renderer', 'renderer:-inert');\n      }\n    }\n  });\n\n  exports.default = EngineInstance;\n});","enifed('ember-application/system/engine-parent', ['exports', 'ember-utils'], function (exports, _emberUtils) {\n  'use strict';\n\n  exports.ENGINE_PARENT = undefined;\n  exports.getEngineParent = getEngineParent;\n  exports.setEngineParent = setEngineParent;\n  var ENGINE_PARENT = exports.ENGINE_PARENT = (0, _emberUtils.symbol)('ENGINE_PARENT');\n\n  /**\n    `getEngineParent` retrieves an engine instance's parent instance.\n  \n    @method getEngineParent\n    @param {EngineInstance} engine An engine instance.\n    @return {EngineInstance} The parent engine instance.\n    @for @ember/engine\n    @static\n    @private\n  */\n  function getEngineParent(engine) {\n    return engine[ENGINE_PARENT];\n  }\n\n  /**\n    `setEngineParent` sets an engine instance's parent instance.\n  \n    @method setEngineParent\n    @param {EngineInstance} engine An engine instance.\n    @param {EngineInstance} parent The parent engine instance.\n    @private\n  */\n  function setEngineParent(engine, parent) {\n    engine[ENGINE_PARENT] = parent;\n  }\n});","enifed('ember-application/system/engine', ['exports', 'ember-babel', 'ember-utils', 'ember-runtime', 'container', 'dag-map', 'ember-debug', 'ember-metal', 'ember-application/system/resolver', 'ember-application/system/engine-instance', 'ember-routing', 'ember-extension-support', 'ember-views', 'ember-glimmer'], function (exports, _emberBabel, _emberUtils, _emberRuntime, _container, _dagMap, _emberDebug, _emberMetal, _resolver, _engineInstance, _emberRouting, _emberExtensionSupport, _emberViews, _emberGlimmer) {\n  'use strict';\n\n  var _templateObject = (0, _emberBabel.taggedTemplateLiteralLoose)(['-bucket-cache:main'], ['-bucket-cache:main']);\n\n  function props(obj) {\n    var properties = [];\n\n    for (var key in obj) {\n      properties.push(key);\n    }\n\n    return properties;\n  }\n\n  /**\n    The `Engine` class contains core functionality for both applications and\n    engines.\n  \n    Each engine manages a registry that's used for dependency injection and\n    exposed through `RegistryProxy`.\n  \n    Engines also manage initializers and instance initializers.\n  \n    Engines can spawn `EngineInstance` instances via `buildInstance()`.\n  \n    @class Engine\n    @extends Ember.Namespace\n    @uses RegistryProxy\n    @public\n  */\n  var Engine = _emberRuntime.Namespace.extend(_emberRuntime.RegistryProxyMixin, {\n    init: function () {\n      this._super.apply(this, arguments);\n\n      this.buildRegistry();\n    },\n\n\n    /**\n      A private flag indicating whether an engine's initializers have run yet.\n       @private\n      @property _initializersRan\n    */\n    _initializersRan: false,\n\n    ensureInitializers: function () {\n      if (!this._initializersRan) {\n        this.runInitializers();\n        this._initializersRan = true;\n      }\n    },\n    buildInstance: function () {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n      this.ensureInitializers();\n      options.base = this;\n      return _engineInstance.default.create(options);\n    },\n    buildRegistry: function () {\n      var registry = this.__registry__ = this.constructor.buildRegistry(this);\n\n      return registry;\n    },\n    initializer: function (options) {\n      this.constructor.initializer(options);\n    },\n    instanceInitializer: function (options) {\n      this.constructor.instanceInitializer(options);\n    },\n    runInitializers: function () {\n      var _this = this;\n\n      this._runInitializer('initializers', function (name, initializer) {\n        (true && !(!!initializer) && (0, _emberDebug.assert)('No application initializer named \\'' + name + '\\'', !!initializer));\n\n        initializer.initialize(_this);\n      });\n    },\n    runInstanceInitializers: function (instance) {\n      this._runInitializer('instanceInitializers', function (name, initializer) {\n        (true && !(!!initializer) && (0, _emberDebug.assert)('No instance initializer named \\'' + name + '\\'', !!initializer));\n\n        initializer.initialize(instance);\n      });\n    },\n    _runInitializer: function (bucketName, cb) {\n      var initializersByName = (0, _emberMetal.get)(this.constructor, bucketName);\n      var initializers = props(initializersByName);\n      var graph = new _dagMap.default();\n      var initializer = void 0;\n\n      for (var i = 0; i < initializers.length; i++) {\n        initializer = initializersByName[initializers[i]];\n        graph.add(initializer.name, initializer, initializer.before, initializer.after);\n      }\n\n      graph.topsort(cb);\n    }\n  });\n\n  Engine.reopenClass({\n    initializers: Object.create(null),\n    instanceInitializers: Object.create(null),\n\n    /**\n      The goal of initializers should be to register dependencies and injections.\n      This phase runs once. Because these initializers may load code, they are\n      allowed to defer application readiness and advance it. If you need to access\n      the container or store you should use an InstanceInitializer that will be run\n      after all initializers and therefore after all code is loaded and the app is\n      ready.\n       Initializer receives an object which has the following attributes:\n      `name`, `before`, `after`, `initialize`. The only required attribute is\n      `initialize`, all others are optional.\n       * `name` allows you to specify under which name the initializer is registered.\n      This must be a unique name, as trying to register two initializers with the\n      same name will result in an error.\n       ```app/initializer/named-initializer.js\n      import { debug } from '@ember/debug';\n       export function initialize() {\n        debug('Running namedInitializer!');\n      }\n       export default {\n        name: 'named-initializer',\n        initialize\n      };\n      ```\n       * `before` and `after` are used to ensure that this initializer is ran prior\n      or after the one identified by the value. This value can be a single string\n      or an array of strings, referencing the `name` of other initializers.\n       An example of ordering initializers, we create an initializer named `first`:\n       ```app/initializer/first.js\n      import { debug } from '@ember/debug';\n       export function initialize() {\n        debug('First initializer!');\n      }\n       export default {\n        name: 'first',\n        initialize\n      };\n      ```\n       ```bash\n      // DEBUG: First initializer!\n      ```\n       We add another initializer named `second`, specifying that it should run\n      after the initializer named `first`:\n       ```app/initializer/second.js\n      import { debug } from '@ember/debug';\n       export function initialize() {\n        debug('Second initializer!');\n      }\n       export default {\n        name: 'second',\n        after: 'first',\n        initialize\n      };\n      ```\n       ```\n      // DEBUG: First initializer!\n      // DEBUG: Second initializer!\n      ```\n       Afterwards we add a further initializer named `pre`, this time specifying\n      that it should run before the initializer named `first`:\n       ```app/initializer/pre.js\n      import { debug } from '@ember/debug';\n       export function initialize() {\n        debug('Pre initializer!');\n      }\n       export default {\n        name: 'pre',\n        before: 'first',\n        initialize\n      };\n      ```\n       ```bash\n      // DEBUG: Pre initializer!\n      // DEBUG: First initializer!\n      // DEBUG: Second initializer!\n      ```\n       Finally we add an initializer named `post`, specifying it should run after\n      both the `first` and the `second` initializers:\n       ```app/initializer/post.js\n      import { debug } from '@ember/debug';\n       export function initialize() {\n        debug('Post initializer!');\n      }\n       export default {\n        name: 'post',\n        after: ['first', 'second'],\n        initialize\n      };\n      ```\n       ```bash\n      // DEBUG: Pre initializer!\n      // DEBUG: First initializer!\n      // DEBUG: Second initializer!\n      // DEBUG: Post initializer!\n      ```\n       * `initialize` is a callback function that receives one argument,\n        `application`, on which you can operate.\n       Example of using `application` to register an adapter:\n       ```app/initializer/api-adapter.js\n      import ApiAdapter from '../utils/api-adapter';\n       export function initialize(application) {\n        application.register('api-adapter:main', ApiAdapter);\n      }\n       export default {\n        name: 'post',\n        after: ['first', 'second'],\n        initialize\n      };\n      ```\n       @method initializer\n      @param initializer {Object}\n      @public\n    */\n\n    initializer: buildInitializerMethod('initializers', 'initializer'),\n\n    /**\n      Instance initializers run after all initializers have run. Because\n      instance initializers run after the app is fully set up. We have access\n      to the store, container, and other items. However, these initializers run\n      after code has loaded and are not allowed to defer readiness.\n       Instance initializer receives an object which has the following attributes:\n      `name`, `before`, `after`, `initialize`. The only required attribute is\n      `initialize`, all others are optional.\n       * `name` allows you to specify under which name the instanceInitializer is\n      registered. This must be a unique name, as trying to register two\n      instanceInitializer with the same name will result in an error.\n       ```app/initializer/named-instance-initializer.js\n      import { debug } from '@ember/debug';\n       export function initialize() {\n        debug('Running named-instance-initializer!');\n      }\n       export default {\n        name: 'named-instance-initializer',\n        initialize\n      };\n      ```\n       * `before` and `after` are used to ensure that this initializer is ran prior\n      or after the one identified by the value. This value can be a single string\n      or an array of strings, referencing the `name` of other initializers.\n       * See Application.initializer for discussion on the usage of before\n      and after.\n       Example instanceInitializer to preload data into the store.\n       ```app/initializer/preload-data.js\n      import $ from 'jquery';\n       export function initialize(application) {\n          var userConfig, userConfigEncoded, store;\n          // We have a HTML escaped JSON representation of the user's basic\n          // configuration generated server side and stored in the DOM of the main\n          // index.html file. This allows the app to have access to a set of data\n          // without making any additional remote calls. Good for basic data that is\n          // needed for immediate rendering of the page. Keep in mind, this data,\n          // like all local models and data can be manipulated by the user, so it\n          // should not be relied upon for security or authorization.\n           // Grab the encoded data from the meta tag\n          userConfigEncoded = $('head meta[name=app-user-config]').attr('content');\n           // Unescape the text, then parse the resulting JSON into a real object\n          userConfig = JSON.parse(unescape(userConfigEncoded));\n           // Lookup the store\n          store = application.lookup('service:store');\n           // Push the encoded JSON into the store\n          store.pushPayload(userConfig);\n      }\n       export default {\n        name: 'named-instance-initializer',\n        initialize\n      };\n      ```\n       @method instanceInitializer\n      @param instanceInitializer\n      @public\n    */\n    instanceInitializer: buildInitializerMethod('instanceInitializers', 'instance initializer'),\n\n    buildRegistry: function (namespace) {\n      var registry = new _container.Registry({\n        resolver: resolverFor(namespace)\n      });\n\n      registry.set = _emberMetal.set;\n\n      registry.register('application:main', namespace, { instantiate: false });\n\n      commonSetupRegistry(registry);\n      (0, _emberGlimmer.setupEngineRegistry)(registry);\n\n      return registry;\n    },\n\n\n    /**\n      Set this to provide an alternate class to `DefaultResolver`\n       @deprecated Use 'Resolver' instead\n      @property resolver\n      @public\n    */\n    resolver: null,\n\n    /**\n      Set this to provide an alternate class to `DefaultResolver`\n       @property resolver\n      @public\n    */\n    Resolver: null\n  });\n\n  /**\n    This function defines the default lookup rules for container lookups:\n  \n    * templates are looked up on `Ember.TEMPLATES`\n    * other names are looked up on the application after classifying the name.\n      For example, `controller:post` looks up `App.PostController` by default.\n    * if the default lookup fails, look for registered classes on the container\n  \n    This allows the application to register default injections in the container\n    that could be overridden by the normal naming convention.\n  \n    @private\n    @method resolverFor\n    @param {Ember.Namespace} namespace the namespace to look for classes\n    @return {*} the resolved value for a given lookup\n  */\n  function resolverFor(namespace) {\n    var ResolverClass = namespace.get('Resolver') || _resolver.default;\n\n    return ResolverClass.create({\n      namespace: namespace\n    });\n  }\n\n  function buildInitializerMethod(bucketName, humanName) {\n    return function (initializer) {\n      // If this is the first initializer being added to a subclass, we are going to reopen the class\n      // to make sure we have a new `initializers` object, which extends from the parent class' using\n      // prototypal inheritance. Without this, attempting to add initializers to the subclass would\n      // pollute the parent class as well as other subclasses.\n      if (this.superclass[bucketName] !== undefined && this.superclass[bucketName] === this[bucketName]) {\n        var attrs = {};\n        attrs[bucketName] = Object.create(this[bucketName]);\n        this.reopenClass(attrs);\n      }\n\n      (true && !(!this[bucketName][initializer.name]) && (0, _emberDebug.assert)('The ' + humanName + ' \\'' + initializer.name + '\\' has already been registered', !this[bucketName][initializer.name]));\n      (true && !((0, _emberUtils.canInvoke)(initializer, 'initialize')) && (0, _emberDebug.assert)('An ' + humanName + ' cannot be registered without an initialize function', (0, _emberUtils.canInvoke)(initializer, 'initialize')));\n      (true && !(initializer.name !== undefined) && (0, _emberDebug.assert)('An ' + humanName + ' cannot be registered without a name property', initializer.name !== undefined));\n\n\n      this[bucketName][initializer.name] = initializer;\n    };\n  }\n\n  function commonSetupRegistry(registry) {\n    registry.optionsForType('component', { singleton: false });\n    registry.optionsForType('view', { singleton: false });\n\n    registry.register('controller:basic', _emberRuntime.Controller, { instantiate: false });\n\n    registry.injection('view', '_viewRegistry', '-view-registry:main');\n    registry.injection('renderer', '_viewRegistry', '-view-registry:main');\n    registry.injection('event_dispatcher:main', '_viewRegistry', '-view-registry:main');\n\n    registry.injection('route', '_topLevelViewTemplate', 'template:-outlet');\n\n    registry.injection('view:-outlet', 'namespace', 'application:main');\n\n    registry.injection('controller', 'target', 'router:main');\n    registry.injection('controller', 'namespace', 'application:main');\n\n    registry.injection('router', '_bucketCache', (0, _container.privatize)(_templateObject));\n    registry.injection('route', '_bucketCache', (0, _container.privatize)(_templateObject));\n\n    registry.injection('route', '_router', 'router:main');\n\n    // Register the routing service...\n    registry.register('service:-routing', _emberRouting.RoutingService);\n    // Then inject the app router into it\n    registry.injection('service:-routing', 'router', 'router:main');\n\n    // DEBUGGING\n    registry.register('resolver-for-debugging:main', registry.resolver, { instantiate: false });\n    registry.injection('container-debug-adapter:main', 'resolver', 'resolver-for-debugging:main');\n    registry.injection('data-adapter:main', 'containerDebugAdapter', 'container-debug-adapter:main');\n    // Custom resolver authors may want to register their own ContainerDebugAdapter with this key\n\n    registry.register('container-debug-adapter:main', _emberExtensionSupport.ContainerDebugAdapter);\n\n    registry.register('component-lookup:main', _emberViews.ComponentLookup);\n  }\n\n  exports.default = Engine;\n});","enifed('ember-application/system/resolver', ['exports', 'ember-utils', 'ember-metal', 'ember-debug', 'ember-runtime', 'ember-application/utils/validate-type', 'ember-glimmer'], function (exports, _emberUtils, _emberMetal, _emberDebug, _emberRuntime, _validateType, _emberGlimmer) {\n  'use strict';\n\n  exports.Resolver = undefined;\n  /**\n  @module @ember/application\n  */\n\n  var Resolver = exports.Resolver = _emberRuntime.Object.extend({\n    /*\n      This will be set to the Application instance when it is\n      created.\n       @property namespace\n    */\n    namespace: null,\n    normalize: null, // required\n    resolve: null, // required\n    parseName: null, // required\n    lookupDescription: null, // required\n    makeToString: null, // required\n    resolveOther: null, // required\n    _logLookup: null // required\n  });\n\n  /**\n    The DefaultResolver defines the default lookup rules to resolve\n    container lookups before consulting the container for registered\n    items:\n  \n    * templates are looked up on `Ember.TEMPLATES`\n    * other names are looked up on the application after converting\n      the name. For example, `controller:post` looks up\n      `App.PostController` by default.\n    * there are some nuances (see examples below)\n  \n    ### How Resolving Works\n  \n    The container calls this object's `resolve` method with the\n    `fullName` argument.\n  \n    It first parses the fullName into an object using `parseName`.\n  \n    Then it checks for the presence of a type-specific instance\n    method of the form `resolve[Type]` and calls it if it exists.\n    For example if it was resolving 'template:post', it would call\n    the `resolveTemplate` method.\n  \n    Its last resort is to call the `resolveOther` method.\n  \n    The methods of this object are designed to be easy to override\n    in a subclass. For example, you could enhance how a template\n    is resolved like so:\n  \n    ```app/app.js\n    import Application from '@ember/application';\n    import GlobalsResolver from '@ember/application/globals-resolver';\n  \n    App = Application.create({\n      Resolver: GlobalsResolver.extend({\n        resolveTemplate(parsedName) {\n          let resolvedTemplate = this._super(parsedName);\n          if (resolvedTemplate) { return resolvedTemplate; }\n  \n          return Ember.TEMPLATES['not_found'];\n        }\n      })\n    });\n    ```\n  \n    Some examples of how names are resolved:\n  \n    ```text\n    'template:post'           //=> Ember.TEMPLATES['post']\n    'template:posts/byline'   //=> Ember.TEMPLATES['posts/byline']\n    'template:posts.byline'   //=> Ember.TEMPLATES['posts/byline']\n    'template:blogPost'       //=> Ember.TEMPLATES['blog-post']\n    'controller:post'         //=> App.PostController\n    'controller:posts.index'  //=> App.PostsIndexController\n    'controller:blog/post'    //=> Blog.PostController\n    'controller:basic'        //=> Controller\n    'route:post'              //=> App.PostRoute\n    'route:posts.index'       //=> App.PostsIndexRoute\n    'route:blog/post'         //=> Blog.PostRoute\n    'route:basic'             //=> Route\n    'foo:post'                //=> App.PostFoo\n    'model:post'              //=> App.Post\n    ```\n  \n    @class GlobalsResolver\n    @extends EmberObject\n    @public\n  */\n\n  var DefaultResolver = _emberRuntime.Object.extend({\n    /**\n      This will be set to the Application instance when it is\n      created.\n       @property namespace\n      @public\n    */\n    namespace: null,\n\n    init: function () {\n      this._parseNameCache = (0, _emberUtils.dictionary)(null);\n    },\n    normalize: function (fullName) {\n      var _fullName$split = fullName.split(':'),\n          type = _fullName$split[0],\n          name = _fullName$split[1];\n\n      (true && !(fullName.split(':').length === 2) && (0, _emberDebug.assert)('Tried to normalize a container name without a colon (:) in it. ' + 'You probably tried to lookup a name that did not contain a type, ' + 'a colon, and a name. A proper lookup name would be `view:post`.', fullName.split(':').length === 2));\n\n\n      if (type !== 'template') {\n        var result = name.replace(/(\\.|_|-)./g, function (m) {\n          return m.charAt(1).toUpperCase();\n        });\n\n        return type + ':' + result;\n      } else {\n        return fullName;\n      }\n    },\n    resolve: function (fullName) {\n      var parsedName = this.parseName(fullName);\n      var resolveMethodName = parsedName.resolveMethodName;\n      var resolved = void 0;\n\n      if (this[resolveMethodName]) {\n        resolved = this[resolveMethodName](parsedName);\n      }\n\n      resolved = resolved || this.resolveOther(parsedName);\n\n      if (true) {\n        if (parsedName.root && parsedName.root.LOG_RESOLVER) {\n          this._logLookup(resolved, parsedName);\n        }\n      }\n\n      if (resolved) {\n        (0, _validateType.default)(resolved, parsedName);\n      }\n\n      return resolved;\n    },\n    parseName: function (fullName) {\n      return this._parseNameCache[fullName] || (this._parseNameCache[fullName] = this._parseName(fullName));\n    },\n    _parseName: function (fullName) {\n      var _fullName$split2 = fullName.split(':'),\n          type = _fullName$split2[0],\n          fullNameWithoutType = _fullName$split2[1];\n\n      var name = fullNameWithoutType;\n      var namespace = (0, _emberMetal.get)(this, 'namespace');\n      var root = namespace;\n      var lastSlashIndex = name.lastIndexOf('/');\n      var dirname = lastSlashIndex !== -1 ? name.slice(0, lastSlashIndex) : null;\n\n      if (type !== 'template' && lastSlashIndex !== -1) {\n        var parts = name.split('/');\n        name = parts[parts.length - 1];\n        var namespaceName = _emberRuntime.String.capitalize(parts.slice(0, -1).join('.'));\n        root = _emberRuntime.Namespace.byName(namespaceName);\n\n        (true && !(root) && (0, _emberDebug.assert)('You are looking for a ' + name + ' ' + type + ' in the ' + namespaceName + ' namespace, but the namespace could not be found', root));\n      }\n\n      var resolveMethodName = fullNameWithoutType === 'main' ? 'Main' : _emberRuntime.String.classify(type);\n\n      if (!(name && type)) {\n        throw new TypeError('Invalid fullName: `' + fullName + '`, must be of the form `type:name` ');\n      }\n\n      return {\n        fullName: fullName,\n        type: type,\n        fullNameWithoutType: fullNameWithoutType,\n        dirname: dirname,\n        name: name,\n        root: root,\n        resolveMethodName: 'resolve' + resolveMethodName\n      };\n    },\n    lookupDescription: function (fullName) {\n      var parsedName = this.parseName(fullName);\n      var description = void 0;\n\n      if (parsedName.type === 'template') {\n        return 'template at ' + parsedName.fullNameWithoutType.replace(/\\./g, '/');\n      }\n\n      description = parsedName.root + '.' + _emberRuntime.String.classify(parsedName.name).replace(/\\./g, '');\n\n      if (parsedName.type !== 'model') {\n        description += _emberRuntime.String.classify(parsedName.type);\n      }\n\n      return description;\n    },\n    makeToString: function (factory) {\n      return factory.toString();\n    },\n    useRouterNaming: function (parsedName) {\n      if (parsedName.name === 'basic') {\n        parsedName.name = '';\n      } else {\n        parsedName.name = parsedName.name.replace(/\\./g, '_');\n      }\n    },\n    resolveTemplate: function (parsedName) {\n      var templateName = parsedName.fullNameWithoutType.replace(/\\./g, '/');\n\n      return (0, _emberGlimmer.getTemplate)(templateName) || (0, _emberGlimmer.getTemplate)(_emberRuntime.String.decamelize(templateName));\n    },\n    resolveView: function (parsedName) {\n      this.useRouterNaming(parsedName);\n      return this.resolveOther(parsedName);\n    },\n    resolveController: function (parsedName) {\n      this.useRouterNaming(parsedName);\n      return this.resolveOther(parsedName);\n    },\n    resolveRoute: function (parsedName) {\n      this.useRouterNaming(parsedName);\n      return this.resolveOther(parsedName);\n    },\n    resolveModel: function (parsedName) {\n      var className = _emberRuntime.String.classify(parsedName.name);\n      var factory = (0, _emberMetal.get)(parsedName.root, className);\n\n      return factory;\n    },\n    resolveHelper: function (parsedName) {\n      return this.resolveOther(parsedName);\n    },\n    resolveOther: function (parsedName) {\n      var className = _emberRuntime.String.classify(parsedName.name) + _emberRuntime.String.classify(parsedName.type);\n      var factory = (0, _emberMetal.get)(parsedName.root, className);\n      return factory;\n    },\n    resolveMain: function (parsedName) {\n      var className = _emberRuntime.String.classify(parsedName.type);\n      return (0, _emberMetal.get)(parsedName.root, className);\n    },\n    knownForType: function (type) {\n      var namespace = (0, _emberMetal.get)(this, 'namespace');\n      var suffix = _emberRuntime.String.classify(type);\n      var typeRegexp = new RegExp(suffix + '$');\n\n      var known = (0, _emberUtils.dictionary)(null);\n      var knownKeys = Object.keys(namespace);\n      for (var index = 0; index < knownKeys.length; index++) {\n        var name = knownKeys[index];\n\n        if (typeRegexp.test(name)) {\n          var containerName = this.translateToContainerFullname(type, name);\n\n          known[containerName] = true;\n        }\n      }\n\n      return known;\n    },\n    translateToContainerFullname: function (type, name) {\n      var suffix = _emberRuntime.String.classify(type);\n      var namePrefix = name.slice(0, suffix.length * -1);\n      var dasherizedName = _emberRuntime.String.dasherize(namePrefix);\n\n      return type + ':' + dasherizedName;\n    }\n  });\n\n  exports.default = DefaultResolver;\n\n\n  if (true) {\n    DefaultResolver.reopen({\n      _logLookup: function (found, parsedName) {\n        var symbol = found ? '[✓]' : '[ ]';\n\n        var padding = void 0;\n        if (parsedName.fullName.length > 60) {\n          padding = '.';\n        } else {\n          padding = new Array(60 - parsedName.fullName.length).join('.');\n        }\n\n        (0, _emberDebug.info)(symbol, parsedName.fullName, padding, this.lookupDescription(parsedName.fullName));\n      }\n    });\n  }\n});","enifed('ember-application/utils/validate-type', ['exports', 'ember-debug'], function (exports, _emberDebug) {\n  'use strict';\n\n  exports.default = validateType;\n\n\n  var VALIDATED_TYPES = {\n    route: ['assert', 'isRouteFactory', 'Ember.Route'],\n    component: ['deprecate', 'isComponentFactory', 'Ember.Component'],\n    view: ['deprecate', 'isViewFactory', 'Ember.View'],\n    service: ['deprecate', 'isServiceFactory', 'Ember.Service']\n  };\n\n  function validateType(resolvedType, parsedName) {\n    var validationAttributes = VALIDATED_TYPES[parsedName.type];\n\n    if (!validationAttributes) {\n      return;\n    }\n\n    var factoryFlag = validationAttributes[1],\n        expectedType = validationAttributes[2];\n    (true && !(!!resolvedType[factoryFlag]) && (0, _emberDebug.assert)('Expected ' + parsedName.fullName + ' to resolve to an ' + expectedType + ' but ' + ('instead it was ' + resolvedType + '.'), !!resolvedType[factoryFlag]));\n  }\n});","enifed('ember-babel', ['exports'], function (exports) {\n  'use strict';\n\n  exports.classCallCheck = classCallCheck;\n  exports.inherits = inherits;\n  exports.taggedTemplateLiteralLoose = taggedTemplateLiteralLoose;\n  exports.createClass = createClass;\n  exports.defaults = defaults;\n  function classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError('Cannot call a class as a function');\n    }\n  }\n\n  function inherits(subClass, superClass) {\n    if (typeof superClass !== 'function' && superClass !== null) {\n      throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n    }\n\n    subClass.prototype = Object.create(superClass && superClass.prototype, {\n      constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n\n    if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : defaults(subClass, superClass);\n  }\n\n  function taggedTemplateLiteralLoose(strings, raw) {\n    strings.raw = raw;\n    return strings;\n  }\n\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if ('value' in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n\n  function defaults(obj, defaults) {\n    var keys = Object.getOwnPropertyNames(defaults);\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n      var value = Object.getOwnPropertyDescriptor(defaults, key);\n      if (value && value.configurable && obj[key] === undefined) {\n        Object.defineProperty(obj, key, value);\n      }\n    }\n    return obj;\n  }\n\n  var possibleConstructorReturn = exports.possibleConstructorReturn = function (self, call) {\n    if (!self) {\n      throw new ReferenceError('this hasn\\'t been initialized - super() hasn\\'t been called');\n    }\n    return call && (typeof call === 'object' || typeof call === 'function') ? call : self;\n  };\n\n  var slice = exports.slice = Array.prototype.slice;\n});","enifed(\"ember-console\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  /**\n     @module ember\n  */\n  /**\n    Inside Ember-Metal, simply uses the methods from `imports.console`.\n    Override this to provide more robust logging functionality.\n  \n    @class Logger\n    @namespace Ember\n    @public\n  */\n  var index = {\n    log: function () {\n      var _console;\n\n      return (_console = console).log.apply(_console, arguments);\n    },\n    warn: function () {\n      var _console2;\n\n      return (_console2 = console).warn.apply(_console2, arguments);\n    },\n    error: function () {\n      var _console3;\n\n      return (_console3 = console).error.apply(_console3, arguments);\n    },\n    info: function () {\n      var _console4;\n\n      return (_console4 = console).info.apply(_console4, arguments);\n    },\n    debug: function () {\n      var _console6;\n\n      /* eslint-disable no-console */\n      if (console.debug) {\n        var _console5;\n\n        return (_console5 = console).debug.apply(_console5, arguments);\n      }\n\n      return (_console6 = console).info.apply(_console6, arguments);\n      /* eslint-enable no-console */\n    },\n    assert: function () {\n      var _console7;\n\n      return (_console7 = console).assert.apply(_console7, arguments);\n    }\n  };\n\n  exports.default = index;\n});","enifed('ember-debug/deprecate', ['exports', 'ember-debug/error', 'ember-console', 'ember-environment', 'ember-debug/index', 'ember-debug/handlers'], function (exports, _error, _emberConsole, _emberEnvironment, _index, _handlers) {\n  'use strict';\n\n  exports.missingOptionsUntilDeprecation = exports.missingOptionsIdDeprecation = exports.missingOptionsDeprecation = exports.registerHandler = undefined;\n\n  /**\n   @module @ember/debug\n   @public\n  */\n  /**\n    Allows for runtime registration of handler functions that override the default deprecation behavior.\n    Deprecations are invoked by calls to [@ember/application/deprecations/deprecate](https://emberjs.com/api/ember/release/classes/@ember%2Fapplication%2Fdeprecations/methods/deprecate?anchor=deprecate).\n    The following example demonstrates its usage by registering a handler that throws an error if the\n    message contains the word \"should\", otherwise defers to the default handler.\n  \n    ```javascript\n    import { registerDeprecationHandler } from '@ember/debug';\n  \n    registerDeprecationHandler((message, options, next) => {\n      if (message.indexOf('should') !== -1) {\n        throw new Error(`Deprecation message with should: ${message}`);\n      } else {\n        // defer to whatever handler was registered before this one\n        next(message, options);\n      }\n    });\n    ```\n  \n    The handler function takes the following arguments:\n  \n    <ul>\n      <li> <code>message</code> - The message received from the deprecation call.</li>\n      <li> <code>options</code> - An object passed in with the deprecation call containing additional information including:</li>\n        <ul>\n          <li> <code>id</code> - An id of the deprecation in the form of <code>package-name.specific-deprecation</code>.</li>\n          <li> <code>until</code> - The Ember version number the feature and deprecation will be removed in.</li>\n        </ul>\n      <li> <code>next</code> - A function that calls into the previously registered handler.</li>\n    </ul>\n  \n    @public\n    @static\n    @method registerDeprecationHandler\n    @for @ember/debug\n    @param handler {Function} A function to handle deprecation calls.\n    @since 2.1.0\n  */\n  /*global __fail__*/\n  var registerHandler = function () {};\n  var missingOptionsDeprecation = void 0,\n      missingOptionsIdDeprecation = void 0,\n      missingOptionsUntilDeprecation = void 0,\n      deprecate = void 0;\n\n  if (true) {\n    exports.registerHandler = registerHandler = function registerHandler(handler) {\n      (0, _handlers.registerHandler)('deprecate', handler);\n    };\n\n    var formatMessage = function formatMessage(_message, options) {\n      var message = _message;\n\n      if (options && options.id) {\n        message = message + (' [deprecation id: ' + options.id + ']');\n      }\n\n      if (options && options.url) {\n        message += ' See ' + options.url + ' for more details.';\n      }\n\n      return message;\n    };\n\n    registerHandler(function logDeprecationToConsole(message, options) {\n      var updatedMessage = formatMessage(message, options);\n\n      _emberConsole.default.warn('DEPRECATION: ' + updatedMessage);\n    });\n\n    var captureErrorForStack = void 0;\n\n    if (new Error().stack) {\n      captureErrorForStack = function () {\n        return new Error();\n      };\n    } else {\n      captureErrorForStack = function () {\n        try {\n          __fail__.fail();\n        } catch (e) {\n          return e;\n        }\n      };\n    }\n\n    registerHandler(function logDeprecationStackTrace(message, options, next) {\n      if (_emberEnvironment.ENV.LOG_STACKTRACE_ON_DEPRECATION) {\n        var stackStr = '';\n        var error = captureErrorForStack();\n        var stack = void 0;\n\n        if (error.stack) {\n          if (error['arguments']) {\n            // Chrome\n            stack = error.stack.replace(/^\\s+at\\s+/gm, '').replace(/^([^\\(]+?)([\\n$])/gm, '{anonymous}($1)$2').replace(/^Object.<anonymous>\\s*\\(([^\\)]+)\\)/gm, '{anonymous}($1)').split('\\n');\n            stack.shift();\n          } else {\n            // Firefox\n            stack = error.stack.replace(/(?:\\n@:0)?\\s+$/m, '').replace(/^\\(/gm, '{anonymous}(').split('\\n');\n          }\n\n          stackStr = '\\n    ' + stack.slice(2).join('\\n    ');\n        }\n\n        var updatedMessage = formatMessage(message, options);\n\n        _emberConsole.default.warn('DEPRECATION: ' + updatedMessage + stackStr);\n      } else {\n        next.apply(undefined, arguments);\n      }\n    });\n\n    registerHandler(function raiseOnDeprecation(message, options, next) {\n      if (_emberEnvironment.ENV.RAISE_ON_DEPRECATION) {\n        var updatedMessage = formatMessage(message);\n\n        throw new _error.default(updatedMessage);\n      } else {\n        next.apply(undefined, arguments);\n      }\n    });\n\n    exports.missingOptionsDeprecation = missingOptionsDeprecation = 'When calling `deprecate` you ' + 'must provide an `options` hash as the third parameter.  ' + '`options` should include `id` and `until` properties.';\n    exports.missingOptionsIdDeprecation = missingOptionsIdDeprecation = 'When calling `deprecate` you must provide `id` in options.';\n    exports.missingOptionsUntilDeprecation = missingOptionsUntilDeprecation = 'When calling `deprecate` you must provide `until` in options.';\n    /**\n     @module @ember/application\n     @public\n     */\n    /**\n      Display a deprecation warning with the provided message and a stack trace\n      (Chrome and Firefox only).\n       * In a production build, this method is defined as an empty function (NOP).\n      Uses of this method in Ember itself are stripped from the ember.prod.js build.\n       @method deprecate\n      @for @ember/application/deprecations\n      @param {String} message A description of the deprecation.\n      @param {Boolean} test A boolean. If falsy, the deprecation will be displayed.\n      @param {Object} options\n      @param {String} options.id A unique id for this deprecation. The id can be\n        used by Ember debugging tools to change the behavior (raise, log or silence)\n        for that specific deprecation. The id should be namespaced by dots, e.g.\n        \"view.helper.select\".\n      @param {string} options.until The version of Ember when this deprecation\n        warning will be removed.\n      @param {String} [options.url] An optional url to the transition guide on the\n        emberjs.com website.\n      @static\n      @public\n      @since 1.0.0\n    */\n    deprecate = function deprecate(message, test, options) {\n      if (_emberEnvironment.ENV._ENABLE_DEPRECATION_OPTIONS_SUPPORT !== true) {\n        (0, _index.assert)(missingOptionsDeprecation, options && (options.id || options.until));\n        (0, _index.assert)(missingOptionsIdDeprecation, options.id);\n        (0, _index.assert)(missingOptionsUntilDeprecation, options.until);\n      }\n\n      if ((!options || !options.id && !options.until) && _emberEnvironment.ENV._ENABLE_DEPRECATION_OPTIONS_SUPPORT === true) {\n        deprecate(missingOptionsDeprecation, false, {\n          id: 'ember-debug.deprecate-options-missing',\n          until: '3.0.0',\n          url: 'https://emberjs.com/deprecations/v2.x/#toc_ember-debug-function-options'\n        });\n      }\n\n      if (options && !options.id && _emberEnvironment.ENV._ENABLE_DEPRECATION_OPTIONS_SUPPORT === true) {\n        deprecate(missingOptionsIdDeprecation, false, {\n          id: 'ember-debug.deprecate-id-missing',\n          until: '3.0.0',\n          url: 'https://emberjs.com/deprecations/v2.x/#toc_ember-debug-function-options'\n        });\n      }\n\n      if (options && !options.until && _emberEnvironment.ENV._ENABLE_DEPRECATION_OPTIONS_SUPPORT === true) {\n        deprecate(missingOptionsUntilDeprecation, options && options.until, {\n          id: 'ember-debug.deprecate-until-missing',\n          until: '3.0.0',\n          url: 'https://emberjs.com/deprecations/v2.x/#toc_ember-debug-function-options'\n        });\n      }\n\n      _handlers.invoke.apply(undefined, ['deprecate'].concat(Array.prototype.slice.call(arguments)));\n    };\n  }\n\n  exports.default = deprecate;\n  exports.registerHandler = registerHandler;\n  exports.missingOptionsDeprecation = missingOptionsDeprecation;\n  exports.missingOptionsIdDeprecation = missingOptionsIdDeprecation;\n  exports.missingOptionsUntilDeprecation = missingOptionsUntilDeprecation;\n});","enifed(\"ember-debug/error\", [\"exports\", \"ember-babel\"], function (exports, _emberBabel) {\n  \"use strict\";\n\n  /**\n   @module @ember/error\n  */\n  function ExtendBuiltin(klass) {\n    function ExtendableBuiltin() {\n      klass.apply(this, arguments);\n    }\n\n    ExtendableBuiltin.prototype = Object.create(klass.prototype);\n    ExtendableBuiltin.prototype.constructor = ExtendableBuiltin;\n    return ExtendableBuiltin;\n  }\n\n  /**\n    A subclass of the JavaScript Error object for use in Ember.\n  \n    @class EmberError\n    @extends Error\n    @constructor\n    @public\n  */\n\n  var EmberError = function (_ExtendBuiltin) {\n    (0, _emberBabel.inherits)(EmberError, _ExtendBuiltin);\n\n    function EmberError(message) {\n      (0, _emberBabel.classCallCheck)(this, EmberError);\n\n      var _this = (0, _emberBabel.possibleConstructorReturn)(this, _ExtendBuiltin.call(this));\n\n      if (!(_this instanceof EmberError)) {\n        var _ret;\n\n        return _ret = new EmberError(message), (0, _emberBabel.possibleConstructorReturn)(_this, _ret);\n      }\n\n      var error = Error.call(_this, message);\n      _this.stack = error.stack;\n      _this.description = error.description;\n      _this.fileName = error.fileName;\n      _this.lineNumber = error.lineNumber;\n      _this.message = error.message;\n      _this.name = error.name;\n      _this.number = error.number;\n      _this.code = error.code;\n      return _this;\n    }\n\n    return EmberError;\n  }(ExtendBuiltin(Error));\n\n  exports.default = EmberError;\n});","enifed('ember-debug/features', ['exports', 'ember-environment', 'ember/features'], function (exports, _emberEnvironment, _features) {\n  'use strict';\n\n  exports.default = isEnabled;\n  var FEATURES = _features.FEATURES;\n\n\n  /**\n   @module ember\n  */\n\n  /**\n    The hash of enabled Canary features. Add to this, any canary features\n    before creating your application.\n  \n    Alternatively (and recommended), you can also define `EmberENV.FEATURES`\n    if you need to enable features flagged at runtime.\n  \n    @class FEATURES\n    @namespace Ember\n    @static\n    @since 1.1.0\n    @public\n  */\n\n  // Auto-generated\n\n  /**\n    Determine whether the specified `feature` is enabled. Used by Ember's\n    build tools to exclude experimental features from beta/stable builds.\n  \n    You can define the following configuration options:\n  \n    * `EmberENV.ENABLE_OPTIONAL_FEATURES` - enable any features that have not been explicitly\n      enabled/disabled.\n  \n    @method isEnabled\n    @param {String} feature The feature to check\n    @return {Boolean}\n    @for Ember.FEATURES\n    @since 1.1.0\n    @public\n  */\n  function isEnabled(feature) {\n    var featureValue = FEATURES[feature];\n\n    if (featureValue === true || featureValue === false || featureValue === undefined) {\n      return featureValue;\n    } else if (_emberEnvironment.ENV.ENABLE_OPTIONAL_FEATURES) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n});","enifed('ember-debug/handlers', ['exports'], function (exports) {\n  'use strict';\n\n  var HANDLERS = exports.HANDLERS = {};\n\n  var registerHandler = function () {};\n  var invoke = function () {};\n\n  if (true) {\n    exports.registerHandler = registerHandler = function registerHandler(type, callback) {\n      var nextHandler = HANDLERS[type] || function () {};\n\n      HANDLERS[type] = function (message, options) {\n        callback(message, options, nextHandler);\n      };\n    };\n\n    exports.invoke = invoke = function invoke(type, message, test, options) {\n      if (test) {\n        return;\n      }\n\n      var handlerForType = HANDLERS[type];\n\n      if (handlerForType) {\n        handlerForType(message, options);\n      }\n    };\n  }\n\n  exports.registerHandler = registerHandler;\n  exports.invoke = invoke;\n});","enifed('ember-debug/index', ['exports', 'ember-debug/warn', 'ember-debug/deprecate', 'ember-debug/features', 'ember-debug/error', 'ember-debug/testing', 'ember-environment', 'ember-console', 'ember/features'], function (exports, _warn2, _deprecate2, _features, _error, _testing, _emberEnvironment, _emberConsole, _features2) {\n  'use strict';\n\n  exports._warnIfUsingStrippedFeatureFlags = exports.getDebugFunction = exports.setDebugFunction = exports.deprecateFunc = exports.runInDebug = exports.debugFreeze = exports.debugSeal = exports.deprecate = exports.debug = exports.warn = exports.info = exports.assert = exports.setTesting = exports.isTesting = exports.Error = exports.isFeatureEnabled = exports.registerDeprecationHandler = exports.registerWarnHandler = undefined;\n  Object.defineProperty(exports, 'registerWarnHandler', {\n    enumerable: true,\n    get: function () {\n      return _warn2.registerHandler;\n    }\n  });\n  Object.defineProperty(exports, 'registerDeprecationHandler', {\n    enumerable: true,\n    get: function () {\n      return _deprecate2.registerHandler;\n    }\n  });\n  Object.defineProperty(exports, 'isFeatureEnabled', {\n    enumerable: true,\n    get: function () {\n      return _features.default;\n    }\n  });\n  Object.defineProperty(exports, 'Error', {\n    enumerable: true,\n    get: function () {\n      return _error.default;\n    }\n  });\n  Object.defineProperty(exports, 'isTesting', {\n    enumerable: true,\n    get: function () {\n      return _testing.isTesting;\n    }\n  });\n  Object.defineProperty(exports, 'setTesting', {\n    enumerable: true,\n    get: function () {\n      return _testing.setTesting;\n    }\n  });\n  var DEFAULT_FEATURES = _features2.DEFAULT_FEATURES,\n      FEATURES = _features2.FEATURES;\n\n\n  // These are the default production build versions:\n  var noop = function () {};\n\n  var assert = noop;\n  var info = noop;\n  var warn = noop;\n  var debug = noop;\n  var deprecate = noop;\n  var debugSeal = noop;\n  var debugFreeze = noop;\n  var runInDebug = noop;\n  var setDebugFunction = noop;\n  var getDebugFunction = noop;\n\n  var deprecateFunc = function () {\n    return arguments[arguments.length - 1];\n  };\n\n  if (true) {\n    exports.setDebugFunction = setDebugFunction = function (type, callback) {\n      switch (type) {\n        case 'assert':\n          return exports.assert = assert = callback;\n        case 'info':\n          return exports.info = info = callback;\n        case 'warn':\n          return exports.warn = warn = callback;\n        case 'debug':\n          return exports.debug = debug = callback;\n        case 'deprecate':\n          return exports.deprecate = deprecate = callback;\n        case 'debugSeal':\n          return exports.debugSeal = debugSeal = callback;\n        case 'debugFreeze':\n          return exports.debugFreeze = debugFreeze = callback;\n        case 'runInDebug':\n          return exports.runInDebug = runInDebug = callback;\n        case 'deprecateFunc':\n          return exports.deprecateFunc = deprecateFunc = callback;\n      }\n    };\n\n    exports.getDebugFunction = getDebugFunction = function (type) {\n      switch (type) {\n        case 'assert':\n          return assert;\n        case 'info':\n          return info;\n        case 'warn':\n          return warn;\n        case 'debug':\n          return debug;\n        case 'deprecate':\n          return deprecate;\n        case 'debugSeal':\n          return debugSeal;\n        case 'debugFreeze':\n          return debugFreeze;\n        case 'runInDebug':\n          return runInDebug;\n        case 'deprecateFunc':\n          return deprecateFunc;\n      }\n    };\n  }\n\n  /**\n  @module @ember/debug\n  */\n\n  if (true) {\n    /**\n      Verify that a certain expectation is met, or throw a exception otherwise.\n       This is useful for communicating assumptions in the code to other human\n      readers as well as catching bugs that accidentally violates these\n      expectations.\n       Assertions are removed from production builds, so they can be freely added\n      for documentation and debugging purposes without worries of incuring any\n      performance penalty. However, because of that, they should not be used for\n      checks that could reasonably fail during normal usage. Furthermore, care\n      should be taken to avoid accidentally relying on side-effects produced from\n      evaluating the condition itself, since the code will not run in production.\n       ```javascript\n      import { assert } from '@ember/debug';\n       // Test for truthiness\n      assert('Must pass a string', typeof str === 'string');\n       // Fail unconditionally\n      assert('This code path should never be run');\n      ```\n       @method assert\n      @static\n      @for @ember/debug\n      @param {String} description Describes the expectation. This will become the\n        text of the Error thrown if the assertion fails.\n      @param {Boolean} condition Must be truthy for the assertion to pass. If\n        falsy, an exception will be thrown.\n      @public\n      @since 1.0.0\n    */\n    setDebugFunction('assert', function assert(desc, test) {\n      if (!test) {\n        throw new _error.default('Assertion Failed: ' + desc);\n      }\n    });\n\n    /**\n      Display a debug notice.\n       Calls to this function are removed from production builds, so they can be\n      freely added for documentation and debugging purposes without worries of\n      incuring any performance penalty.\n       ```javascript\n      import { debug } from '@ember/debug';\n       debug('I\\'m a debug notice!');\n      ```\n       @method debug\n      @for @ember/debug\n      @static\n      @param {String} message A debug message to display.\n      @public\n    */\n    setDebugFunction('debug', function debug(message) {\n      _emberConsole.default.debug('DEBUG: ' + message);\n    });\n\n    /**\n      Display an info notice.\n       Calls to this function are removed from production builds, so they can be\n      freely added for documentation and debugging purposes without worries of\n      incuring any performance penalty.\n       @method info\n      @private\n    */\n    setDebugFunction('info', function info() {\n      _emberConsole.default.info.apply(undefined, arguments);\n    });\n\n    /**\n     @module @ember/application\n     @public\n    */\n\n    /**\n      Alias an old, deprecated method with its new counterpart.\n       Display a deprecation warning with the provided message and a stack trace\n      (Chrome and Firefox only) when the assigned method is called.\n       Calls to this function are removed from production builds, so they can be\n      freely added for documentation and debugging purposes without worries of\n      incuring any performance penalty.\n       ```javascript\n      import { deprecateFunc } from '@ember/application/deprecations';\n       Ember.oldMethod = deprecateFunc('Please use the new, updated method', options, Ember.newMethod);\n      ```\n       @method deprecateFunc\n      @static\n      @for @ember/application/deprecations\n      @param {String} message A description of the deprecation.\n      @param {Object} [options] The options object for `deprecate`.\n      @param {Function} func The new function called to replace its deprecated counterpart.\n      @return {Function} A new function that wraps the original function with a deprecation warning\n      @private\n    */\n    setDebugFunction('deprecateFunc', function deprecateFunc() {\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      if (args.length === 3) {\n        var message = args[0],\n            options = args[1],\n            func = args[2];\n\n        return function () {\n          deprecate(message, false, options);\n          return func.apply(this, arguments);\n        };\n      } else {\n        var _message = args[0],\n            _func = args[1];\n\n        return function () {\n          deprecate(_message);\n          return _func.apply(this, arguments);\n        };\n      }\n    });\n\n    /**\n     @module @ember/debug\n     @public\n    */\n    /**\n      Run a function meant for debugging.\n       Calls to this function are removed from production builds, so they can be\n      freely added for documentation and debugging purposes without worries of\n      incuring any performance penalty.\n       ```javascript\n      import Component from '@ember/component';\n      import { runInDebug } from '@ember/debug';\n       runInDebug(() => {\n        Component.reopen({\n          didInsertElement() {\n            console.log(\"I'm happy\");\n          }\n        });\n      });\n      ```\n       @method runInDebug\n      @for @ember/debug\n      @static\n      @param {Function} func The function to be executed.\n      @since 1.5.0\n      @public\n    */\n    setDebugFunction('runInDebug', function runInDebug(func) {\n      func();\n    });\n\n    setDebugFunction('debugSeal', function debugSeal(obj) {\n      Object.seal(obj);\n    });\n\n    setDebugFunction('debugFreeze', function debugFreeze(obj) {\n      Object.freeze(obj);\n    });\n\n    setDebugFunction('deprecate', _deprecate2.default);\n\n    setDebugFunction('warn', _warn2.default);\n  }\n\n  var _warnIfUsingStrippedFeatureFlags = void 0;\n\n  if (true && !(0, _testing.isTesting)()) {\n    /**\n       Will call `warn()` if ENABLE_OPTIONAL_FEATURES or\n       any specific FEATURES flag is truthy.\n        This method is called automatically in debug canary builds.\n        @private\n       @method _warnIfUsingStrippedFeatureFlags\n       @return {void}\n    */\n    exports._warnIfUsingStrippedFeatureFlags = _warnIfUsingStrippedFeatureFlags = function _warnIfUsingStrippedFeatureFlags(FEATURES, knownFeatures, featuresWereStripped) {\n      if (featuresWereStripped) {\n        warn('Ember.ENV.ENABLE_OPTIONAL_FEATURES is only available in canary builds.', !_emberEnvironment.ENV.ENABLE_OPTIONAL_FEATURES, { id: 'ember-debug.feature-flag-with-features-stripped' });\n\n        var keys = Object.keys(FEATURES || {});\n        for (var i = 0; i < keys.length; i++) {\n          var key = keys[i];\n          if (key === 'isEnabled' || !(key in knownFeatures)) {\n            continue;\n          }\n\n          warn('FEATURE[\"' + key + '\"] is set as enabled, but FEATURE flags are only available in canary builds.', !FEATURES[key], { id: 'ember-debug.feature-flag-with-features-stripped' });\n        }\n      }\n    };\n\n    // Complain if they're using FEATURE flags in builds other than canary\n    FEATURES['features-stripped-test'] = true;\n    var featuresWereStripped = true;\n\n    if ((0, _features.default)('features-stripped-test')) {\n      featuresWereStripped = false;\n    }\n\n    delete FEATURES['features-stripped-test'];\n    _warnIfUsingStrippedFeatureFlags(_emberEnvironment.ENV.FEATURES, DEFAULT_FEATURES, featuresWereStripped);\n\n    // Inform the developer about the Ember Inspector if not installed.\n    var isFirefox = _emberEnvironment.environment.isFirefox;\n    var isChrome = _emberEnvironment.environment.isChrome;\n\n    if (typeof window !== 'undefined' && (isFirefox || isChrome) && window.addEventListener) {\n      window.addEventListener('load', function () {\n        if (document.documentElement && document.documentElement.dataset && !document.documentElement.dataset.emberExtension) {\n          var downloadURL = void 0;\n\n          if (isChrome) {\n            downloadURL = 'https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi';\n          } else if (isFirefox) {\n            downloadURL = 'https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/';\n          }\n\n          debug('For more advanced debugging, install the Ember Inspector from ' + downloadURL);\n        }\n      }, false);\n    }\n  }\n\n  exports.assert = assert;\n  exports.info = info;\n  exports.warn = warn;\n  exports.debug = debug;\n  exports.deprecate = deprecate;\n  exports.debugSeal = debugSeal;\n  exports.debugFreeze = debugFreeze;\n  exports.runInDebug = runInDebug;\n  exports.deprecateFunc = deprecateFunc;\n  exports.setDebugFunction = setDebugFunction;\n  exports.getDebugFunction = getDebugFunction;\n  exports._warnIfUsingStrippedFeatureFlags = _warnIfUsingStrippedFeatureFlags;\n});","enifed(\"ember-debug/testing\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.isTesting = isTesting;\n  exports.setTesting = setTesting;\n  var testing = false;\n\n  function isTesting() {\n    return testing;\n  }\n\n  function setTesting(value) {\n    testing = !!value;\n  }\n});","enifed('ember-debug/warn', ['exports', 'ember-environment', 'ember-console', 'ember-debug/deprecate', 'ember-debug/index', 'ember-debug/handlers'], function (exports, _emberEnvironment, _emberConsole, _deprecate, _index, _handlers) {\n  'use strict';\n\n  exports.missingOptionsDeprecation = exports.missingOptionsIdDeprecation = exports.registerHandler = undefined;\n\n\n  var registerHandler = function () {};\n  var warn = function () {};\n  var missingOptionsDeprecation = void 0,\n      missingOptionsIdDeprecation = void 0;\n\n  /**\n  @module @ember/debug\n  */\n\n  if (true) {\n    /**\n      Allows for runtime registration of handler functions that override the default warning behavior.\n      Warnings are invoked by calls made to [@ember/debug/warn](https://emberjs.com/api/ember/release/classes/@ember%2Fdebug/methods/warn?anchor=warn).\n      The following example demonstrates its usage by registering a handler that does nothing overriding Ember's\n      default warning behavior.\n       ```javascript\n      import { registerWarnHandler } from '@ember/debug';\n       // next is not called, so no warnings get the default behavior\n      registerWarnHandler(() => {});\n      ```\n       The handler function takes the following arguments:\n       <ul>\n        <li> <code>message</code> - The message received from the warn call. </li>\n        <li> <code>options</code> - An object passed in with the warn call containing additional information including:</li>\n          <ul>\n            <li> <code>id</code> - An id of the warning in the form of <code>package-name.specific-warning</code>.</li>\n          </ul>\n        <li> <code>next</code> - A function that calls into the previously registered handler.</li>\n      </ul>\n       @public\n      @static\n      @method registerWarnHandler\n      @for @ember/debug\n      @param handler {Function} A function to handle warnings.\n      @since 2.1.0\n    */\n    exports.registerHandler = registerHandler = function registerHandler(handler) {\n      (0, _handlers.registerHandler)('warn', handler);\n    };\n\n    registerHandler(function logWarning(message) {\n      _emberConsole.default.warn('WARNING: ' + message);\n      if ('trace' in _emberConsole.default) {\n        _emberConsole.default.trace();\n      }\n    });\n\n    exports.missingOptionsDeprecation = missingOptionsDeprecation = 'When calling `warn` you ' + 'must provide an `options` hash as the third parameter.  ' + '`options` should include an `id` property.';\n    exports.missingOptionsIdDeprecation = missingOptionsIdDeprecation = 'When calling `warn` you must provide `id` in options.';\n\n    /**\n      Display a warning with the provided message.\n       * In a production build, this method is defined as an empty function (NOP).\n      Uses of this method in Ember itself are stripped from the ember.prod.js build.\n       @method warn\n      @for @ember/debug\n      @static\n      @param {String} message A warning to display.\n      @param {Boolean} test An optional boolean. If falsy, the warning\n        will be displayed.\n      @param {Object} options An object that can be used to pass a unique\n        `id` for this warning.  The `id` can be used by Ember debugging tools\n        to change the behavior (raise, log, or silence) for that specific warning.\n        The `id` should be namespaced by dots, e.g. \"ember-debug.feature-flag-with-features-stripped\"\n      @public\n      @since 1.0.0\n    */\n    warn = function warn(message, test, options) {\n      if (arguments.length === 2 && typeof test === 'object') {\n        options = test;\n        test = false;\n      }\n\n      if (_emberEnvironment.ENV._ENABLE_WARN_OPTIONS_SUPPORT !== true) {\n        (0, _index.assert)(missingOptionsDeprecation, options);\n        (0, _index.assert)(missingOptionsIdDeprecation, options && options.id);\n      }\n\n      if (!options && _emberEnvironment.ENV._ENABLE_WARN_OPTIONS_SUPPORT === true) {\n        (0, _deprecate.default)(missingOptionsDeprecation, false, {\n          id: 'ember-debug.warn-options-missing',\n          until: '3.0.0',\n          url: 'https://emberjs.com/deprecations/v2.x/#toc_ember-debug-function-options'\n        });\n      }\n\n      if (options && !options.id && _emberEnvironment.ENV._ENABLE_WARN_OPTIONS_SUPPORT === true) {\n        (0, _deprecate.default)(missingOptionsIdDeprecation, false, {\n          id: 'ember-debug.warn-id-missing',\n          until: '3.0.0',\n          url: 'https://emberjs.com/deprecations/v2.x/#toc_ember-debug-function-options'\n        });\n      }\n\n      (0, _handlers.invoke)('warn', message, test, options);\n    };\n  }\n\n  exports.default = warn;\n  exports.registerHandler = registerHandler;\n  exports.missingOptionsIdDeprecation = missingOptionsIdDeprecation;\n  exports.missingOptionsDeprecation = missingOptionsDeprecation;\n});","enifed('ember-environment', ['exports'], function (exports) {\n  'use strict';\n\n  /* globals global, window, self, mainContext */\n\n  // from lodash to catch fake globals\n  function checkGlobal(value) {\n    return value && value.Object === Object ? value : undefined;\n  }\n\n  // element ids can ruin global miss checks\n  function checkElementIdShadowing(value) {\n    return value && value.nodeType === undefined ? value : undefined;\n  }\n\n  // export real global\n  var global$1 = checkGlobal(checkElementIdShadowing(typeof global === 'object' && global)) || checkGlobal(typeof self === 'object' && self) || checkGlobal(typeof window === 'object' && window) || mainContext || // set before strict mode in Ember loader/wrapper\n  new Function('return this')(); // eval outside of strict mode\n\n  function defaultTrue(v) {\n    return v === false ? false : true;\n  }\n\n  function defaultFalse(v) {\n    return v === true ? true : false;\n  }\n\n  function normalizeExtendPrototypes(obj) {\n    if (obj === false) {\n      return { String: false, Array: false, Function: false };\n    } else if (!obj || obj === true) {\n      return { String: true, Array: true, Function: true };\n    } else {\n      return {\n        String: defaultTrue(obj.String),\n        Array: defaultTrue(obj.Array),\n        Function: defaultTrue(obj.Function)\n      };\n    }\n  }\n\n  /* globals module */\n  /**\n    The hash of environment variables used to control various configuration\n    settings. To specify your own or override default settings, add the\n    desired properties to a global hash named `EmberENV` (or `ENV` for\n    backwards compatibility with earlier versions of Ember). The `EmberENV`\n    hash must be created before loading Ember.\n  \n    @class EmberENV\n    @type Object\n    @public\n  */\n  var ENV = typeof global$1.EmberENV === 'object' && global$1.EmberENV || typeof global$1.ENV === 'object' && global$1.ENV || {};\n\n  // ENABLE_ALL_FEATURES was documented, but you can't actually enable non optional features.\n  if (ENV.ENABLE_ALL_FEATURES) {\n    ENV.ENABLE_OPTIONAL_FEATURES = true;\n  }\n\n  /**\n    Determines whether Ember should add to `Array`, `Function`, and `String`\n    native object prototypes, a few extra methods in order to provide a more\n    friendly API.\n  \n    We generally recommend leaving this option set to true however, if you need\n    to turn it off, you can add the configuration property\n    `EXTEND_PROTOTYPES` to `EmberENV` and set it to `false`.\n  \n    Note, when disabled (the default configuration for Ember Addons), you will\n    instead have to access all methods and functions from the Ember\n    namespace.\n  \n    @property EXTEND_PROTOTYPES\n    @type Boolean\n    @default true\n    @for EmberENV\n    @public\n  */\n  ENV.EXTEND_PROTOTYPES = normalizeExtendPrototypes(ENV.EXTEND_PROTOTYPES);\n\n  /**\n    The `LOG_STACKTRACE_ON_DEPRECATION` property, when true, tells Ember to log\n    a full stack trace during deprecation warnings.\n  \n    @property LOG_STACKTRACE_ON_DEPRECATION\n    @type Boolean\n    @default true\n    @for EmberENV\n    @public\n  */\n  ENV.LOG_STACKTRACE_ON_DEPRECATION = defaultTrue(ENV.LOG_STACKTRACE_ON_DEPRECATION);\n\n  /**\n    The `LOG_VERSION` property, when true, tells Ember to log versions of all\n    dependent libraries in use.\n  \n    @property LOG_VERSION\n    @type Boolean\n    @default true\n    @for EmberENV\n    @public\n  */\n  ENV.LOG_VERSION = defaultTrue(ENV.LOG_VERSION);\n\n  /**\n    Debug parameter you can turn on. This will log all bindings that fire to\n    the console. This should be disabled in production code. Note that you\n    can also enable this from the console or temporarily.\n  \n    @property LOG_BINDINGS\n    @for EmberENV\n    @type Boolean\n    @default false\n    @public\n  */\n  ENV.LOG_BINDINGS = defaultFalse(ENV.LOG_BINDINGS);\n\n  ENV.RAISE_ON_DEPRECATION = defaultFalse(ENV.RAISE_ON_DEPRECATION);\n\n  /**\n    Whether to insert a `<div class=\"ember-view\" />` wrapper around the\n    application template. See RFC #280.\n  \n    This is not intended to be set directly, as the implementation may change in\n    the future. Use `@ember/optional-features` instead.\n  \n    @property _APPLICATION_TEMPLATE_WRAPPER\n    @for EmberENV\n    @type Boolean\n    @default true\n    @private\n  */\n  ENV._APPLICATION_TEMPLATE_WRAPPER = defaultTrue(ENV._APPLICATION_TEMPLATE_WRAPPER);\n\n  /**\n    Whether to use Glimmer Component semantics (as opposed to the classic \"Curly\"\n    components semantics) for template-only components. See RFC #278.\n  \n    This is not intended to be set directly, as the implementation may change in\n    the future. Use `@ember/optional-features` instead.\n  \n    @property _TEMPLATE_ONLY_GLIMMER_COMPONENTS\n    @for EmberENV\n    @type Boolean\n    @default false\n    @private\n  */\n  ENV._TEMPLATE_ONLY_GLIMMER_COMPONENTS = defaultFalse(ENV._TEMPLATE_ONLY_GLIMMER_COMPONENTS);\n\n  // check if window exists and actually is the global\n  var hasDOM = typeof window !== 'undefined' && window === global$1 && window.document && window.document.createElement && !ENV.disableBrowserEnvironment; // is this a public thing?\n\n  // legacy imports/exports/lookup stuff (should we keep this??)\n  var originalContext = global$1.Ember || {};\n\n  var context = {\n    // import jQuery\n    imports: originalContext.imports || global$1,\n    // export Ember\n    exports: originalContext.exports || global$1,\n    // search for Namespaces\n    lookup: originalContext.lookup || global$1\n  };\n\n  // TODO: cleanup single source of truth issues with this stuff\n  var environment = hasDOM ? {\n    hasDOM: true,\n    isChrome: !!window.chrome && !window.opera,\n    isFirefox: typeof InstallTrigger !== 'undefined',\n    location: window.location,\n    history: window.history,\n    userAgent: window.navigator.userAgent,\n    window: window\n  } : {\n    hasDOM: false,\n    isChrome: false,\n    isFirefox: false,\n    location: null,\n    history: null,\n    userAgent: 'Lynx (textmode)',\n    window: null\n  };\n\n  exports.ENV = ENV;\n  exports.context = context;\n  exports.environment = environment;\n});","enifed('ember-extension-support/container_debug_adapter', ['exports', 'ember-runtime'], function (exports, _emberRuntime) {\n  'use strict';\n\n  exports.default = _emberRuntime.Object.extend({\n    /**\n      The resolver instance of the application\n      being debugged. This property will be injected\n      on creation.\n       @property resolver\n      @default null\n      @public\n    */\n    resolver: null,\n\n    /**\n      Returns true if it is possible to catalog a list of available\n      classes in the resolver for a given type.\n       @method canCatalogEntriesByType\n      @param {String} type The type. e.g. \"model\", \"controller\", \"route\".\n      @return {boolean} whether a list is available for this type.\n      @public\n    */\n    canCatalogEntriesByType: function (type) {\n      if (type === 'model' || type === 'template') {\n        return false;\n      }\n\n      return true;\n    },\n\n\n    /**\n      Returns the available classes a given type.\n       @method catalogEntriesByType\n      @param {String} type The type. e.g. \"model\", \"controller\", \"route\".\n      @return {Array} An array of strings.\n      @public\n    */\n    catalogEntriesByType: function (type) {\n      var namespaces = (0, _emberRuntime.A)(_emberRuntime.Namespace.NAMESPACES);\n      var types = (0, _emberRuntime.A)();\n      var typeSuffixRegex = new RegExp(_emberRuntime.String.classify(type) + '$');\n\n      namespaces.forEach(function (namespace) {\n        for (var key in namespace) {\n          if (!namespace.hasOwnProperty(key)) {\n            continue;\n          }\n          if (typeSuffixRegex.test(key)) {\n            var klass = namespace[key];\n            if ((0, _emberRuntime.typeOf)(klass) === 'class') {\n              types.push(_emberRuntime.String.dasherize(key.replace(typeSuffixRegex, '')));\n            }\n          }\n        }\n      });\n      return types;\n    }\n  });\n});","enifed('ember-extension-support/data_adapter', ['exports', 'ember-utils', 'ember-metal', 'ember-runtime'], function (exports, _emberUtils, _emberMetal, _emberRuntime) {\n  'use strict';\n\n  exports.default = _emberRuntime.Object.extend({\n    init: function () {\n      this._super.apply(this, arguments);\n      this.releaseMethods = (0, _emberRuntime.A)();\n    },\n\n\n    /**\n      The container-debug-adapter which is used\n      to list all models.\n       @property containerDebugAdapter\n      @default undefined\n      @since 1.5.0\n      @public\n    **/\n    containerDebugAdapter: undefined,\n\n    /**\n      The number of attributes to send\n      as columns. (Enough to make the record\n      identifiable).\n       @private\n      @property attributeLimit\n      @default 3\n      @since 1.3.0\n    */\n    attributeLimit: 3,\n\n    /**\n       Ember Data > v1.0.0-beta.18\n       requires string model names to be passed\n       around instead of the actual factories.\n        This is a stamp for the Ember Inspector\n       to differentiate between the versions\n       to be able to support older versions too.\n        @public\n       @property acceptsModelName\n     */\n    acceptsModelName: true,\n\n    /**\n      Stores all methods that clear observers.\n      These methods will be called on destruction.\n       @private\n      @property releaseMethods\n      @since 1.3.0\n    */\n    releaseMethods: (0, _emberRuntime.A)(),\n\n    /**\n      Specifies how records can be filtered.\n      Records returned will need to have a `filterValues`\n      property with a key for every name in the returned array.\n       @public\n      @method getFilters\n      @return {Array} List of objects defining filters.\n       The object should have a `name` and `desc` property.\n    */\n    getFilters: function () {\n      return (0, _emberRuntime.A)();\n    },\n\n\n    /**\n      Fetch the model types and observe them for changes.\n       @public\n      @method watchModelTypes\n       @param {Function} typesAdded Callback to call to add types.\n      Takes an array of objects containing wrapped types (returned from `wrapModelType`).\n       @param {Function} typesUpdated Callback to call when a type has changed.\n      Takes an array of objects containing wrapped types.\n       @return {Function} Method to call to remove all observers\n    */\n    watchModelTypes: function (typesAdded, typesUpdated) {\n      var _this = this;\n\n      var modelTypes = this.getModelTypes();\n      var releaseMethods = (0, _emberRuntime.A)();\n      var typesToSend = void 0;\n\n      typesToSend = modelTypes.map(function (type) {\n        var klass = type.klass;\n        var wrapped = _this.wrapModelType(klass, type.name);\n        releaseMethods.push(_this.observeModelType(type.name, typesUpdated));\n        return wrapped;\n      });\n\n      typesAdded(typesToSend);\n\n      var release = function () {\n        releaseMethods.forEach(function (fn) {\n          return fn();\n        });\n        _this.releaseMethods.removeObject(release);\n      };\n      this.releaseMethods.pushObject(release);\n      return release;\n    },\n    _nameToClass: function (type) {\n      if (typeof type === 'string') {\n        var owner = (0, _emberUtils.getOwner)(this);\n        var Factory = owner.factoryFor('model:' + type);\n        type = Factory && Factory.class;\n      }\n      return type;\n    },\n\n\n    /**\n      Fetch the records of a given type and observe them for changes.\n       @public\n      @method watchRecords\n       @param {String} modelName The model name.\n       @param {Function} recordsAdded Callback to call to add records.\n      Takes an array of objects containing wrapped records.\n      The object should have the following properties:\n        columnValues: {Object} The key and value of a table cell.\n        object: {Object} The actual record object.\n       @param {Function} recordsUpdated Callback to call when a record has changed.\n      Takes an array of objects containing wrapped records.\n       @param {Function} recordsRemoved Callback to call when a record has removed.\n      Takes the following parameters:\n        index: The array index where the records were removed.\n        count: The number of records removed.\n       @return {Function} Method to call to remove all observers.\n    */\n    watchRecords: function (modelName, recordsAdded, recordsUpdated, recordsRemoved) {\n      var _this2 = this;\n\n      var releaseMethods = (0, _emberRuntime.A)();\n      var klass = this._nameToClass(modelName);\n      var records = this.getRecords(klass, modelName);\n      var release = void 0;\n\n      function recordUpdated(updatedRecord) {\n        recordsUpdated([updatedRecord]);\n      }\n\n      var recordsToSend = records.map(function (record) {\n        releaseMethods.push(_this2.observeRecord(record, recordUpdated));\n        return _this2.wrapRecord(record);\n      });\n\n      var contentDidChange = function (array, idx, removedCount, addedCount) {\n        for (var i = idx; i < idx + addedCount; i++) {\n          var record = (0, _emberMetal.objectAt)(array, i);\n          var wrapped = _this2.wrapRecord(record);\n          releaseMethods.push(_this2.observeRecord(record, recordUpdated));\n          recordsAdded([wrapped]);\n        }\n\n        if (removedCount) {\n          recordsRemoved(idx, removedCount);\n        }\n      };\n\n      var observer = { didChange: contentDidChange, willChange: function () {\n          return this;\n        }\n      };\n      (0, _emberRuntime.addArrayObserver)(records, this, observer);\n\n      release = function () {\n        releaseMethods.forEach(function (fn) {\n          return fn();\n        });\n        (0, _emberRuntime.removeArrayObserver)(records, _this2, observer);\n        _this2.releaseMethods.removeObject(release);\n      };\n\n      recordsAdded(recordsToSend);\n\n      this.releaseMethods.pushObject(release);\n      return release;\n    },\n\n\n    /**\n      Clear all observers before destruction\n      @private\n      @method willDestroy\n    */\n    willDestroy: function () {\n      this._super.apply(this, arguments);\n      this.releaseMethods.forEach(function (fn) {\n        return fn();\n      });\n    },\n\n\n    /**\n      Detect whether a class is a model.\n       Test that against the model class\n      of your persistence library.\n       @private\n      @method detect\n      @return boolean Whether the class is a model class or not.\n    */\n    detect: function () {\n      return false;\n    },\n\n\n    /**\n      Get the columns for a given model type.\n       @private\n      @method columnsForType\n      @return {Array} An array of columns of the following format:\n       name: {String} The name of the column.\n       desc: {String} Humanized description (what would show in a table column name).\n    */\n    columnsForType: function () {\n      return (0, _emberRuntime.A)();\n    },\n\n\n    /**\n      Adds observers to a model type class.\n       @private\n      @method observeModelType\n      @param {String} modelName The model type name.\n      @param {Function} typesUpdated Called when a type is modified.\n      @return {Function} The function to call to remove observers.\n    */\n\n    observeModelType: function (modelName, typesUpdated) {\n      var _this3 = this;\n\n      var klass = this._nameToClass(modelName);\n      var records = this.getRecords(klass, modelName);\n\n      function onChange() {\n        typesUpdated([this.wrapModelType(klass, modelName)]);\n      }\n\n      var observer = {\n        didChange: function (array, idx, removedCount, addedCount) {\n          // Only re-fetch records if the record count changed\n          // (which is all we care about as far as model types are concerned).\n          if (removedCount > 0 || addedCount > 0) {\n            _emberMetal.run.scheduleOnce('actions', this, onChange);\n          }\n        },\n        willChange: function () {\n          return this;\n        }\n      };\n\n      (0, _emberRuntime.addArrayObserver)(records, this, observer);\n\n      var release = function () {\n        return (0, _emberRuntime.removeArrayObserver)(records, _this3, observer);\n      };\n\n      return release;\n    },\n\n\n    /**\n      Wraps a given model type and observes changes to it.\n       @private\n      @method wrapModelType\n      @param {Class} klass A model class.\n      @param {String} modelName Name of the class.\n      @return {Object} Contains the wrapped type and the function to remove observers\n      Format:\n        type: {Object} The wrapped type.\n          The wrapped type has the following format:\n            name: {String} The name of the type.\n            count: {Integer} The number of records available.\n            columns: {Columns} An array of columns to describe the record.\n            object: {Class} The actual Model type class.\n        release: {Function} The function to remove observers.\n    */\n    wrapModelType: function (klass, name) {\n      var records = this.getRecords(klass, name);\n      var typeToSend = void 0;\n\n      typeToSend = {\n        name: name,\n        count: (0, _emberMetal.get)(records, 'length'),\n        columns: this.columnsForType(klass),\n        object: klass\n      };\n\n      return typeToSend;\n    },\n\n\n    /**\n      Fetches all models defined in the application.\n       @private\n      @method getModelTypes\n      @return {Array} Array of model types.\n    */\n    getModelTypes: function () {\n      var _this4 = this;\n\n      var containerDebugAdapter = this.get('containerDebugAdapter');\n      var types = void 0;\n\n      if (containerDebugAdapter.canCatalogEntriesByType('model')) {\n        types = containerDebugAdapter.catalogEntriesByType('model');\n      } else {\n        types = this._getObjectsOnNamespaces();\n      }\n\n      // New adapters return strings instead of classes.\n      types = (0, _emberRuntime.A)(types).map(function (name) {\n        return {\n          klass: _this4._nameToClass(name),\n          name: name\n        };\n      });\n      types = (0, _emberRuntime.A)(types).filter(function (type) {\n        return _this4.detect(type.klass);\n      });\n\n      return (0, _emberRuntime.A)(types);\n    },\n\n\n    /**\n      Loops over all namespaces and all objects\n      attached to them.\n       @private\n      @method _getObjectsOnNamespaces\n      @return {Array} Array of model type strings.\n    */\n    _getObjectsOnNamespaces: function () {\n      var _this5 = this;\n\n      var namespaces = (0, _emberRuntime.A)(_emberRuntime.Namespace.NAMESPACES);\n      var types = (0, _emberRuntime.A)();\n\n      namespaces.forEach(function (namespace) {\n        for (var key in namespace) {\n          if (!namespace.hasOwnProperty(key)) {\n            continue;\n          }\n          // Even though we will filter again in `getModelTypes`,\n          // we should not call `lookupFactory` on non-models\n          if (!_this5.detect(namespace[key])) {\n            continue;\n          }\n          var name = _emberRuntime.String.dasherize(key);\n          types.push(name);\n        }\n      });\n      return types;\n    },\n\n\n    /**\n      Fetches all loaded records for a given type.\n       @private\n      @method getRecords\n      @return {Array} An array of records.\n       This array will be observed for changes,\n       so it should update when new records are added/removed.\n    */\n    getRecords: function () {\n      return (0, _emberRuntime.A)();\n    },\n\n\n    /**\n      Wraps a record and observers changes to it.\n       @private\n      @method wrapRecord\n      @param {Object} record The record instance.\n      @return {Object} The wrapped record. Format:\n      columnValues: {Array}\n      searchKeywords: {Array}\n    */\n    wrapRecord: function (record) {\n      var recordToSend = { object: record };\n\n      recordToSend.columnValues = this.getRecordColumnValues(record);\n      recordToSend.searchKeywords = this.getRecordKeywords(record);\n      recordToSend.filterValues = this.getRecordFilterValues(record);\n      recordToSend.color = this.getRecordColor(record);\n\n      return recordToSend;\n    },\n\n\n    /**\n      Gets the values for each column.\n       @private\n      @method getRecordColumnValues\n      @return {Object} Keys should match column names defined\n      by the model type.\n    */\n    getRecordColumnValues: function () {\n      return {};\n    },\n\n\n    /**\n      Returns keywords to match when searching records.\n       @private\n      @method getRecordKeywords\n      @return {Array} Relevant keywords for search.\n    */\n    getRecordKeywords: function () {\n      return (0, _emberRuntime.A)();\n    },\n\n\n    /**\n      Returns the values of filters defined by `getFilters`.\n       @private\n      @method getRecordFilterValues\n      @param {Object} record The record instance.\n      @return {Object} The filter values.\n    */\n    getRecordFilterValues: function () {\n      return {};\n    },\n\n\n    /**\n      Each record can have a color that represents its state.\n       @private\n      @method getRecordColor\n      @param {Object} record The record instance\n      @return {String} The records color.\n        Possible options: black, red, blue, green.\n    */\n    getRecordColor: function () {\n      return null;\n    },\n\n\n    /**\n      Observes all relevant properties and re-sends the wrapped record\n      when a change occurs.\n       @private\n      @method observerRecord\n      @return {Function} The function to call to remove all observers.\n    */\n    observeRecord: function () {\n      return function () {};\n    }\n  });\n});","enifed('ember-extension-support/index', ['exports', 'ember-extension-support/data_adapter', 'ember-extension-support/container_debug_adapter'], function (exports, _data_adapter, _container_debug_adapter) {\n  'use strict';\n\n  Object.defineProperty(exports, 'DataAdapter', {\n    enumerable: true,\n    get: function () {\n      return _data_adapter.default;\n    }\n  });\n  Object.defineProperty(exports, 'ContainerDebugAdapter', {\n    enumerable: true,\n    get: function () {\n      return _container_debug_adapter.default;\n    }\n  });\n});","enifed('ember-glimmer', ['exports', '@glimmer/runtime', '@glimmer/node', 'ember-babel', '@glimmer/reference', 'ember-debug', 'ember-metal', 'ember-utils', 'ember/features', 'ember-runtime', '@glimmer/opcode-compiler', 'ember-views', 'ember-environment', 'node-module', 'rsvp', 'container', '@glimmer/util', '@glimmer/wire-format', '@glimmer/program', 'ember-console', 'ember-routing'], function (exports, _runtime, _node, _emberBabel, _reference, _emberDebug, _emberMetal, _emberUtils, _features, _emberRuntime, _opcodeCompiler, _emberViews, _emberEnvironment, _nodeModule, _rsvp, _container, _util, _wireFormat, _program, _emberConsole, _emberRouting) {\n    'use strict';\n\n    exports.NodeDOMTreeConstruction = exports.DOMTreeConstruction = exports.DOMChanges = exports.OutletView = exports.DebugStack = exports.iterableFor = exports.UpdatableReference = exports.AbstractComponentManager = exports._experimentalMacros = exports._registerMacros = exports.setupApplicationRegistry = exports.setupEngineRegistry = exports.setTemplates = exports.getTemplates = exports.hasTemplate = exports.setTemplate = exports.getTemplate = exports.renderSettled = exports._resetRenderers = exports.InteractiveRenderer = exports.InertRenderer = exports.Renderer = exports.isHTMLSafe = exports.htmlSafe = exports.escapeExpression = exports.SafeString = exports.Environment = exports.helper = exports.Helper = exports.ROOT_REF = exports.Component = exports.LinkComponent = exports.TextArea = exports.TextField = exports.Checkbox = exports.template = exports.RootTemplate = exports.INVOKE = undefined;\n    Object.defineProperty(exports, 'DOMChanges', {\n        enumerable: true,\n        get: function () {\n            return _runtime.DOMChanges;\n        }\n    });\n    Object.defineProperty(exports, 'DOMTreeConstruction', {\n        enumerable: true,\n        get: function () {\n            return _runtime.DOMTreeConstruction;\n        }\n    });\n    Object.defineProperty(exports, 'NodeDOMTreeConstruction', {\n        enumerable: true,\n        get: function () {\n            return _node.NodeDOMTreeConstruction;\n        }\n    });\n\n    var _templateObject = (0, _emberBabel.taggedTemplateLiteralLoose)(['template:components/-default'], ['template:components/-default']),\n        _templateObject2 = (0, _emberBabel.taggedTemplateLiteralLoose)(['component:-default'], ['component:-default']),\n        _templateObject3 = (0, _emberBabel.taggedTemplateLiteralLoose)(['template:-root'], ['template:-root']),\n        _templateObject4 = (0, _emberBabel.taggedTemplateLiteralLoose)(['template-options:main'], ['template-options:main']);\n\n    var _CoreView$extend;\n\n    /**\n    @module @ember/component\n    */\n    var RECOMPUTE_TAG = (0, _emberUtils.symbol)('RECOMPUTE_TAG');\n    function isHelperFactory(helper) {\n        return typeof helper === 'object' && helper !== null && helper.class && helper.class.isHelperFactory;\n    }\n    function isSimpleHelper(helper) {\n        return helper.destroy === undefined;\n    }\n    /**\n      Ember Helpers are functions that can compute values, and are used in templates.\n      For example, this code calls a helper named `format-currency`:\n    \n      ```handlebars\n      <div>{{format-currency cents currency=\"$\"}}</div>\n      ```\n    \n      Additionally a helper can be called as a nested helper (sometimes called a\n      subexpression). In this example, the computed value of a helper is passed\n      to a component named `show-money`:\n    \n      ```handlebars\n      {{show-money amount=(format-currency cents currency=\"$\")}}\n      ```\n    \n      Helpers defined using a class must provide a `compute` function. For example:\n    \n      ```app/helpers/format-currency.js\n      import Helper from '@ember/component/helper';\n    \n      export default Helper.extend({\n        compute([cents], { currency }) {\n          return `${currency}${cents * 0.01}`;\n        }\n      });\n      ```\n    \n      Each time the input to a helper changes, the `compute` function will be\n      called again.\n    \n      As instances, these helpers also have access to the container an will accept\n      injected dependencies.\n    \n      Additionally, class helpers can call `recompute` to force a new computation.\n    \n      @class Helper\n      @public\n      @since 1.13.0\n    */\n    var Helper = _emberRuntime.FrameworkObject.extend({\n        init: function () {\n            this._super.apply(this, arguments);\n            this[RECOMPUTE_TAG] = _reference.DirtyableTag.create();\n        },\n        recompute: function () {\n            this[RECOMPUTE_TAG].inner.dirty();\n        }\n    });\n    Helper.reopenClass({\n        isHelperFactory: true\n    });\n\n    var Wrapper = function () {\n        function Wrapper(compute) {\n            (0, _emberBabel.classCallCheck)(this, Wrapper);\n\n            this.compute = compute;\n            this.isHelperFactory = true;\n        }\n\n        Wrapper.prototype.create = function create() {\n            // needs new instance or will leak containers\n            return {\n                compute: this.compute\n            };\n        };\n\n        return Wrapper;\n    }();\n\n    /**\n      In many cases, the ceremony of a full `Helper` class is not required.\n      The `helper` method create pure-function helpers without instances. For\n      example:\n    \n      ```app/helpers/format-currency.js\n      import { helper } from '@ember/component/helper';\n    \n      export default helper(function(params, hash) {\n        let cents = params[0];\n        let currency = hash.currency;\n        return `${currency}${cents * 0.01}`;\n      });\n      ```\n    \n      @static\n      @param {Function} helper The helper function\n      @method helper\n      @for @ember/component/helper\n      @public\n      @since 1.13.0\n    */\n    function helper(helperFn) {\n        return new Wrapper(helperFn);\n    }\n\n    function _toBool(predicate) {\n        if (!predicate) {\n            return false;\n        }\n        if (predicate === true) {\n            return true;\n        }\n        if ((0, _emberRuntime.isArray)(predicate)) {\n            return (0, _emberMetal.get)(predicate, 'length') !== 0;\n        }\n        return true;\n    }\n\n    var UPDATE = (0, _emberUtils.symbol)('UPDATE');\n    var maybeFreeze = void 0;\n    if (true) {\n        // gaurding this in a DEBUG gaurd (as well as all invocations)\n        // so that it is properly stripped during the minification's\n        // dead code elimination\n        maybeFreeze = function (obj) {\n            // re-freezing an already frozen object introduces a significant\n            // performance penalty on Chrome (tested through 59).\n            //\n            // See: https://bugs.chromium.org/p/v8/issues/detail?id=6450\n            if (!Object.isFrozen(obj)) {\n                Object.freeze(obj);\n            }\n        };\n    }\n    // @abstract\n    // @implements PathReference\n\n    var EmberPathReference = function () {\n        function EmberPathReference() {\n            (0, _emberBabel.classCallCheck)(this, EmberPathReference);\n        }\n\n        EmberPathReference.prototype.get = function get(key) {\n            return PropertyReference.create(this, key);\n        };\n\n        return EmberPathReference;\n    }();\n\n    var CachedReference$1 = function (_EmberPathReference) {\n        (0, _emberBabel.inherits)(CachedReference$1, _EmberPathReference);\n\n        function CachedReference$1() {\n            (0, _emberBabel.classCallCheck)(this, CachedReference$1);\n\n            var _this = (0, _emberBabel.possibleConstructorReturn)(this, _EmberPathReference.call(this));\n\n            _this._lastRevision = null;\n            _this._lastValue = null;\n            return _this;\n        }\n\n        CachedReference$1.prototype.compute = function compute() {};\n\n        CachedReference$1.prototype.value = function value() {\n            var tag = this.tag,\n                _lastRevision = this._lastRevision,\n                _lastValue = this._lastValue;\n\n            if (!_lastRevision || !tag.validate(_lastRevision)) {\n                _lastValue = this._lastValue = this.compute();\n                this._lastRevision = tag.value();\n            }\n            return _lastValue;\n        };\n\n        return CachedReference$1;\n    }(EmberPathReference);\n\n    var RootReference = function (_ConstReference) {\n        (0, _emberBabel.inherits)(RootReference, _ConstReference);\n\n        function RootReference(value) {\n            (0, _emberBabel.classCallCheck)(this, RootReference);\n\n            var _this2 = (0, _emberBabel.possibleConstructorReturn)(this, _ConstReference.call(this, value));\n\n            _this2.children = Object.create(null);\n            return _this2;\n        }\n\n        RootReference.prototype.get = function get(propertyKey) {\n            var ref = this.children[propertyKey];\n            if (ref === undefined) {\n                ref = this.children[propertyKey] = new RootPropertyReference(this.inner, propertyKey);\n            }\n            return ref;\n        };\n\n        return RootReference;\n    }(_reference.ConstReference);\n\n    var _TwoWayFlushDetectionTag = void 0;\n    if (_features.EMBER_GLIMMER_DETECT_BACKTRACKING_RERENDER) {\n        _TwoWayFlushDetectionTag = function () {\n            TwoWayFlushDetectionTag.create = function create(tag, key, ref) {\n                return new _reference.TagWrapper(tag.type, new _TwoWayFlushDetectionTag(tag, key, ref));\n            };\n\n            function TwoWayFlushDetectionTag(tag, key, ref) {\n                (0, _emberBabel.classCallCheck)(this, TwoWayFlushDetectionTag);\n\n                this.tag = tag;\n                this.parent = null;\n                this.key = key;\n                this.ref = ref;\n            }\n\n            TwoWayFlushDetectionTag.prototype.value = function value() {\n                return this.tag.value();\n            };\n\n            TwoWayFlushDetectionTag.prototype.validate = function validate(ticket) {\n                var parent = this.parent,\n                    key = this.key;\n\n                var isValid = this.tag.validate(ticket);\n                if (isValid && parent) {\n                    (0, _emberMetal.didRender)(parent, key, this.ref);\n                }\n                return isValid;\n            };\n\n            TwoWayFlushDetectionTag.prototype.didCompute = function didCompute(parent) {\n                this.parent = parent;\n                (0, _emberMetal.didRender)(parent, this.key, this.ref);\n            };\n\n            return TwoWayFlushDetectionTag;\n        }();\n    }\n\n    var PropertyReference = function (_CachedReference$) {\n        (0, _emberBabel.inherits)(PropertyReference, _CachedReference$);\n\n        function PropertyReference() {\n            (0, _emberBabel.classCallCheck)(this, PropertyReference);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _CachedReference$.apply(this, arguments));\n        }\n\n        PropertyReference.create = function create(parentReference, propertyKey) {\n            if ((0, _reference.isConst)(parentReference)) {\n                return new RootPropertyReference(parentReference.value(), propertyKey);\n            } else {\n                return new NestedPropertyReference(parentReference, propertyKey);\n            }\n        };\n\n        PropertyReference.prototype.get = function get(key) {\n            return new NestedPropertyReference(this, key);\n        };\n\n        return PropertyReference;\n    }(CachedReference$1);\n\n    var RootPropertyReference = function (_PropertyReference) {\n        (0, _emberBabel.inherits)(RootPropertyReference, _PropertyReference);\n\n        function RootPropertyReference(parentValue, propertyKey) {\n            (0, _emberBabel.classCallCheck)(this, RootPropertyReference);\n\n            var _this4 = (0, _emberBabel.possibleConstructorReturn)(this, _PropertyReference.call(this));\n\n            _this4._parentValue = parentValue;\n            _this4._propertyKey = propertyKey;\n            if (_features.EMBER_GLIMMER_DETECT_BACKTRACKING_RERENDER) {\n                _this4.tag = _TwoWayFlushDetectionTag.create((0, _emberMetal.tagForProperty)(parentValue, propertyKey), propertyKey, _this4);\n            } else {\n                _this4.tag = (0, _emberMetal.tagForProperty)(parentValue, propertyKey);\n            }\n            if (_features.MANDATORY_SETTER) {\n                (0, _emberMetal.watchKey)(parentValue, propertyKey);\n            }\n            return _this4;\n        }\n\n        RootPropertyReference.prototype.compute = function compute() {\n            var _parentValue = this._parentValue,\n                _propertyKey = this._propertyKey;\n\n            if (_features.EMBER_GLIMMER_DETECT_BACKTRACKING_RERENDER) {\n                this.tag.inner.didCompute(_parentValue);\n            }\n            return (0, _emberMetal.get)(_parentValue, _propertyKey);\n        };\n\n        RootPropertyReference.prototype[UPDATE] = function (value) {\n            (0, _emberMetal.set)(this._parentValue, this._propertyKey, value);\n        };\n\n        return RootPropertyReference;\n    }(PropertyReference);\n\n    var NestedPropertyReference = function (_PropertyReference2) {\n        (0, _emberBabel.inherits)(NestedPropertyReference, _PropertyReference2);\n\n        function NestedPropertyReference(parentReference, propertyKey) {\n            (0, _emberBabel.classCallCheck)(this, NestedPropertyReference);\n\n            var _this5 = (0, _emberBabel.possibleConstructorReturn)(this, _PropertyReference2.call(this));\n\n            var parentReferenceTag = parentReference.tag;\n            var parentObjectTag = _reference.UpdatableTag.create(_reference.CONSTANT_TAG);\n            _this5._parentReference = parentReference;\n            _this5._parentObjectTag = parentObjectTag;\n            _this5._propertyKey = propertyKey;\n            if (_features.EMBER_GLIMMER_DETECT_BACKTRACKING_RERENDER) {\n                var tag = (0, _reference.combine)([parentReferenceTag, parentObjectTag]);\n                _this5.tag = _TwoWayFlushDetectionTag.create(tag, propertyKey, _this5);\n            } else {\n                _this5.tag = (0, _reference.combine)([parentReferenceTag, parentObjectTag]);\n            }\n            return _this5;\n        }\n\n        NestedPropertyReference.prototype.compute = function compute() {\n            var _parentReference = this._parentReference,\n                _parentObjectTag = this._parentObjectTag,\n                _propertyKey = this._propertyKey;\n\n            var parentValue = _parentReference.value();\n            _parentObjectTag.inner.update((0, _emberMetal.tagForProperty)(parentValue, _propertyKey));\n            var parentValueType = typeof parentValue;\n            if (parentValueType === 'string' && _propertyKey === 'length') {\n                return parentValue.length;\n            }\n            if (parentValueType === 'object' && parentValue !== null || parentValueType === 'function') {\n                if (_features.MANDATORY_SETTER) {\n                    (0, _emberMetal.watchKey)(parentValue, _propertyKey);\n                }\n                if (_features.EMBER_GLIMMER_DETECT_BACKTRACKING_RERENDER) {\n                    this.tag.inner.didCompute(parentValue);\n                }\n                return (0, _emberMetal.get)(parentValue, _propertyKey);\n            } else {\n                return undefined;\n            }\n        };\n\n        NestedPropertyReference.prototype[UPDATE] = function (value) {\n            var parent = this._parentReference.value();\n            (0, _emberMetal.set)(parent, this._propertyKey, value);\n        };\n\n        return NestedPropertyReference;\n    }(PropertyReference);\n\n    var UpdatableReference = function (_EmberPathReference2) {\n        (0, _emberBabel.inherits)(UpdatableReference, _EmberPathReference2);\n\n        function UpdatableReference(value) {\n            (0, _emberBabel.classCallCheck)(this, UpdatableReference);\n\n            var _this6 = (0, _emberBabel.possibleConstructorReturn)(this, _EmberPathReference2.call(this));\n\n            _this6.tag = _reference.DirtyableTag.create();\n            _this6._value = value;\n            return _this6;\n        }\n\n        UpdatableReference.prototype.value = function value() {\n            return this._value;\n        };\n\n        UpdatableReference.prototype.update = function update(value) {\n            var _value = this._value;\n\n            if (value !== _value) {\n                this.tag.inner.dirty();\n                this._value = value;\n            }\n        };\n\n        return UpdatableReference;\n    }(EmberPathReference);\n\n    var UpdatablePrimitiveReference = function (_UpdatableReference) {\n        (0, _emberBabel.inherits)(UpdatablePrimitiveReference, _UpdatableReference);\n\n        function UpdatablePrimitiveReference() {\n            (0, _emberBabel.classCallCheck)(this, UpdatablePrimitiveReference);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _UpdatableReference.apply(this, arguments));\n        }\n\n        return UpdatablePrimitiveReference;\n    }(UpdatableReference);\n\n    var ConditionalReference$1 = function (_ConditionalReference) {\n        (0, _emberBabel.inherits)(ConditionalReference$1, _ConditionalReference);\n\n        ConditionalReference$1.create = function create(reference$$1) {\n            if ((0, _reference.isConst)(reference$$1)) {\n                var value = reference$$1.value();\n                if ((0, _emberMetal.isProxy)(value)) {\n                    return new RootPropertyReference(value, 'isTruthy');\n                } else {\n                    return _runtime.PrimitiveReference.create(_toBool(value));\n                }\n            }\n            return new ConditionalReference$1(reference$$1);\n        };\n\n        function ConditionalReference$1(reference$$1) {\n            (0, _emberBabel.classCallCheck)(this, ConditionalReference$1);\n\n            var _this8 = (0, _emberBabel.possibleConstructorReturn)(this, _ConditionalReference.call(this, reference$$1));\n\n            _this8.objectTag = _reference.UpdatableTag.create(_reference.CONSTANT_TAG);\n            _this8.tag = (0, _reference.combine)([reference$$1.tag, _this8.objectTag]);\n            return _this8;\n        }\n\n        ConditionalReference$1.prototype.toBool = function toBool(predicate) {\n            if ((0, _emberMetal.isProxy)(predicate)) {\n                this.objectTag.inner.update((0, _emberMetal.tagForProperty)(predicate, 'isTruthy'));\n                return (0, _emberMetal.get)(predicate, 'isTruthy');\n            } else {\n                this.objectTag.inner.update((0, _emberMetal.tagFor)(predicate));\n                return _toBool(predicate);\n            }\n        };\n\n        return ConditionalReference$1;\n    }(_runtime.ConditionalReference);\n\n    var SimpleHelperReference = function (_CachedReference$2) {\n        (0, _emberBabel.inherits)(SimpleHelperReference, _CachedReference$2);\n\n        SimpleHelperReference.create = function create(helper$$1, args) {\n            if ((0, _reference.isConst)(args)) {\n                var positional = args.positional,\n                    named = args.named;\n\n                var positionalValue = positional.value();\n                var namedValue = named.value();\n                if (true) {\n                    maybeFreeze(positionalValue);\n                    maybeFreeze(namedValue);\n                }\n                var result = helper$$1(positionalValue, namedValue);\n                return valueToRef(result);\n            } else {\n                return new SimpleHelperReference(helper$$1, args);\n            }\n        };\n\n        function SimpleHelperReference(helper$$1, args) {\n            (0, _emberBabel.classCallCheck)(this, SimpleHelperReference);\n\n            var _this9 = (0, _emberBabel.possibleConstructorReturn)(this, _CachedReference$2.call(this));\n\n            _this9.tag = args.tag;\n            _this9.helper = helper$$1;\n            _this9.args = args;\n            return _this9;\n        }\n\n        SimpleHelperReference.prototype.compute = function compute() {\n            var helper$$1 = this.helper,\n                _args2 = this.args,\n                positional = _args2.positional,\n                named = _args2.named;\n\n            var positionalValue = positional.value();\n            var namedValue = named.value();\n            if (true) {\n                maybeFreeze(positionalValue);\n                maybeFreeze(namedValue);\n            }\n            return helper$$1(positionalValue, namedValue);\n        };\n\n        return SimpleHelperReference;\n    }(CachedReference$1);\n\n    var ClassBasedHelperReference = function (_CachedReference$3) {\n        (0, _emberBabel.inherits)(ClassBasedHelperReference, _CachedReference$3);\n\n        ClassBasedHelperReference.create = function create(instance, args) {\n            return new ClassBasedHelperReference(instance, args);\n        };\n\n        function ClassBasedHelperReference(instance, args) {\n            (0, _emberBabel.classCallCheck)(this, ClassBasedHelperReference);\n\n            var _this10 = (0, _emberBabel.possibleConstructorReturn)(this, _CachedReference$3.call(this));\n\n            _this10.tag = (0, _reference.combine)([instance[RECOMPUTE_TAG], args.tag]);\n            _this10.instance = instance;\n            _this10.args = args;\n            return _this10;\n        }\n\n        ClassBasedHelperReference.prototype.compute = function compute() {\n            var instance = this.instance,\n                _args3 = this.args,\n                positional = _args3.positional,\n                named = _args3.named;\n\n            var positionalValue = positional.value();\n            var namedValue = named.value();\n            if (true) {\n                maybeFreeze(positionalValue);\n                maybeFreeze(namedValue);\n            }\n            return instance.compute(positionalValue, namedValue);\n        };\n\n        return ClassBasedHelperReference;\n    }(CachedReference$1);\n\n    var InternalHelperReference = function (_CachedReference$4) {\n        (0, _emberBabel.inherits)(InternalHelperReference, _CachedReference$4);\n\n        function InternalHelperReference(helper$$1, args) {\n            (0, _emberBabel.classCallCheck)(this, InternalHelperReference);\n\n            var _this11 = (0, _emberBabel.possibleConstructorReturn)(this, _CachedReference$4.call(this));\n\n            _this11.tag = args.tag;\n            _this11.helper = helper$$1;\n            _this11.args = args;\n            return _this11;\n        }\n\n        InternalHelperReference.prototype.compute = function compute() {\n            var helper$$1 = this.helper,\n                args = this.args;\n\n            return helper$$1(args);\n        };\n\n        return InternalHelperReference;\n    }(CachedReference$1);\n\n    var UnboundReference = function (_ConstReference2) {\n        (0, _emberBabel.inherits)(UnboundReference, _ConstReference2);\n\n        function UnboundReference() {\n            (0, _emberBabel.classCallCheck)(this, UnboundReference);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _ConstReference2.apply(this, arguments));\n        }\n\n        UnboundReference.create = function create(value) {\n            return valueToRef(value, false);\n        };\n\n        UnboundReference.prototype.get = function get(key) {\n            return valueToRef((0, _emberMetal.get)(this.inner, key), false);\n        };\n\n        return UnboundReference;\n    }(_reference.ConstReference);\n\n    function referenceFromParts(root, parts) {\n        var reference$$1 = root;\n        for (var i = 0; i < parts.length; i++) {\n            reference$$1 = reference$$1.get(parts[i]);\n        }\n        return reference$$1;\n    }\n    function valueToRef(value) {\n        var bound = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n        if (value !== null && typeof value === 'object') {\n            // root of interop with ember objects\n            return bound ? new RootReference(value) : new UnboundReference(value);\n        }\n        // ember doesn't do observing with functions\n        if (typeof value === 'function') {\n            return new UnboundReference(value);\n        }\n        return _runtime.PrimitiveReference.create(value);\n    }\n\n    /**\n    @module ember\n    */\n    var INVOKE = (0, _emberUtils.symbol)('INVOKE');\n    var ACTION = (0, _emberUtils.symbol)('ACTION');\n    /**\n      The `{{action}}` helper provides a way to pass triggers for behavior (usually\n      just a function) between components, and into components from controllers.\n    \n      ### Passing functions with the action helper\n    \n      There are three contexts an action helper can be used in. The first two\n      contexts to discuss are attribute context, and Handlebars value context.\n    \n      ```handlebars\n      {{! An example of attribute context }}\n      <div onclick={{action \"save\"}}></div>\n      {{! Examples of Handlebars value context }}\n      {{input on-input=(action \"save\")}}\n      {{yield (action \"refreshData\") andAnotherParam}}\n      ```\n    \n      In these contexts,\n      the helper is called a \"closure action\" helper. Its behavior is simple:\n      If passed a function name, read that function off the `actions` property\n      of the current context. Once that function is read, or immediately if a function was\n      passed, create a closure over that function and any arguments.\n      The resulting value of an action helper used this way is simply a function.\n    \n      For example, in the attribute context:\n    \n      ```handlebars\n      {{! An example of attribute context }}\n      <div onclick={{action \"save\"}}></div>\n      ```\n    \n      The resulting template render logic would be:\n    \n      ```js\n      var div = document.createElement('div');\n      var actionFunction = (function(context){\n        return function() {\n          return context.actions.save.apply(context, arguments);\n        };\n      })(context);\n      div.onclick = actionFunction;\n      ```\n    \n      Thus when the div is clicked, the action on that context is called.\n      Because the `actionFunction` is just a function, closure actions can be\n      passed between components and still execute in the correct context.\n    \n      Here is an example action handler on a component:\n    \n      ```app/components/my-component.js\n      import Component from '@ember/component';\n    \n      export default Component.extend({\n        actions: {\n          save() {\n            this.get('model').save();\n          }\n        }\n      });\n      ```\n    \n      Actions are always looked up on the `actions` property of the current context.\n      This avoids collisions in the naming of common actions, such as `destroy`.\n      Two options can be passed to the `action` helper when it is used in this way.\n    \n      * `target=someProperty` will look to `someProperty` instead of the current\n        context for the `actions` hash. This can be useful when targeting a\n        service for actions.\n      * `value=\"target.value\"` will read the path `target.value` off the first\n        argument to the action when it is called and rewrite the first argument\n        to be that value. This is useful when attaching actions to event listeners.\n    \n      ### Invoking an action\n    \n      Closure actions curry both their scope and any arguments. When invoked, any\n      additional arguments are added to the already curried list.\n      Actions should be invoked using the [sendAction](/api/ember/release/classes/Component/methods/sendAction?anchor=sendAction)\n      method. The first argument to `sendAction` is the action to be called, and\n      additional arguments are passed to the action function. This has interesting\n      properties combined with currying of arguments. For example:\n    \n      ```app/components/my-component.js\n      import Component from '@ember/component';\n    \n      export default Component.extend({\n        actions: {\n          // Usage {{input on-input=(action (action 'setName' model) value=\"target.value\")}}\n          setName(model, name) {\n            model.set('name', name);\n          }\n        }\n      });\n      ```\n    \n      The first argument (`model`) was curried over, and the run-time argument (`event`)\n      becomes a second argument. Action calls can be nested this way because each simply\n      returns a function. Any function can be passed to the `{{action}}` helper, including\n      other actions.\n    \n      Actions invoked with `sendAction` have the same currying behavior as demonstrated\n      with `on-input` above. For example:\n    \n      ```app/components/my-input.js\n      import Component from '@ember/component';\n    \n      export default Component.extend({\n        actions: {\n          setName(model, name) {\n            model.set('name', name);\n          }\n        }\n      });\n      ```\n    \n      ```handlebars\n      {{my-input submit=(action 'setName' model)}}\n      ```\n    \n      ```app/components/my-component.js\n      import Component from '@ember/component';\n    \n      export default Component.extend({\n        click() {\n          // Note that model is not passed, it was curried in the template\n          this.sendAction('submit', 'bob');\n        }\n      });\n      ```\n    \n      ### Attaching actions to DOM elements\n    \n      The third context of the `{{action}}` helper can be called \"element space\".\n      For example:\n    \n      ```handlebars\n      {{! An example of element space }}\n      <div {{action \"save\"}}></div>\n      ```\n    \n      Used this way, the `{{action}}` helper provides a useful shortcut for\n      registering an HTML element in a template for a single DOM event and\n      forwarding that interaction to the template's context (controller or component).\n      If the context of a template is a controller, actions used this way will\n      bubble to routes when the controller does not implement the specified action.\n      Once an action hits a route, it will bubble through the route hierarchy.\n    \n      ### Event Propagation\n    \n      `{{action}}` helpers called in element space can control event bubbling. Note\n      that the closure style actions cannot.\n    \n      Events triggered through the action helper will automatically have\n      `.preventDefault()` called on them. You do not need to do so in your event\n      handlers. If you need to allow event propagation (to handle file inputs for\n      example) you can supply the `preventDefault=false` option to the `{{action}}` helper:\n    \n      ```handlebars\n      <div {{action \"sayHello\" preventDefault=false}}>\n        <input type=\"file\" />\n        <input type=\"checkbox\" />\n      </div>\n      ```\n    \n      To disable bubbling, pass `bubbles=false` to the helper:\n    \n      ```handlebars\n      <button {{action 'edit' post bubbles=false}}>Edit</button>\n      ```\n    \n      To disable bubbling with closure style actions you must create your own\n      wrapper helper that makes use of `event.stopPropagation()`:\n    \n      ```handlebars\n      <div onclick={{disable-bubbling (action \"sayHello\")}}>Hello</div>\n      ```\n    \n      ```app/helpers/disable-bubbling.js\n      import { helper } from '@ember/component/helper';\n    \n      export function disableBubbling([action]) {\n        return function(event) {\n          event.stopPropagation();\n          return action(event);\n        };\n      }\n      export default helper(disableBubbling);\n      ```\n    \n      If you need the default handler to trigger you should either register your\n      own event handler, or use event methods on your view class. See\n      [\"Responding to Browser Events\"](/api/ember/release/classes/Component)\n      in the documentation for `Component` for more information.\n    \n      ### Specifying DOM event type\n    \n      `{{action}}` helpers called in element space can specify an event type.\n      By default the `{{action}}` helper registers for DOM `click` events. You can\n      supply an `on` option to the helper to specify a different DOM event name:\n    \n      ```handlebars\n      <div {{action \"anActionName\" on=\"doubleClick\"}}>\n        click me\n      </div>\n      ```\n    \n      See [\"Event Names\"](/api/ember/release/classes/Component) for a list of\n      acceptable DOM event names.\n    \n      ### Specifying whitelisted modifier keys\n    \n      `{{action}}` helpers called in element space can specify modifier keys.\n      By default the `{{action}}` helper will ignore click events with pressed modifier\n      keys. You can supply an `allowedKeys` option to specify which keys should not be ignored.\n    \n      ```handlebars\n      <div {{action \"anActionName\" allowedKeys=\"alt\"}}>\n        click me\n      </div>\n      ```\n    \n      This way the action will fire when clicking with the alt key pressed down.\n      Alternatively, supply \"any\" to the `allowedKeys` option to accept any combination of modifier keys.\n    \n      ```handlebars\n      <div {{action \"anActionName\" allowedKeys=\"any\"}}>\n        click me with any key pressed\n      </div>\n      ```\n    \n      ### Specifying a Target\n    \n      A `target` option can be provided to the helper to change\n      which object will receive the method call. This option must be a path\n      to an object, accessible in the current context:\n    \n      ```app/templates/application.hbs\n      <div {{action \"anActionName\" target=someService}}>\n        click me\n      </div>\n      ```\n    \n      ```app/controllers/application.js\n      import Controller from '@ember/controller';\n      import { inject as service } from '@ember/service';\n    \n      export default Controller.extend({\n        someService: service()\n      });\n      ```\n    \n      @method action\n      @for Ember.Templates.helpers\n      @public\n    */\n    var action = function (_vm, args) {\n        var named = args.named,\n            positional = args.positional;\n\n        var capturedArgs = positional.capture();\n        // The first two argument slots are reserved.\n        // pos[0] is the context (or `this`)\n        // pos[1] is the action name or function\n        // Anything else is an action argument.\n\n        var _capturedArgs$referen = capturedArgs.references,\n            context = _capturedArgs$referen[0],\n            action = _capturedArgs$referen[1],\n            restArgs = _capturedArgs$referen.slice(2);\n\n        // TODO: Is there a better way of doing this?\n        var debugKey = action._propertyKey;\n        var target = named.has('target') ? named.get('target') : context;\n        var processArgs = makeArgsProcessor(named.has('value') && named.get('value'), restArgs);\n        var fn = void 0;\n        if (typeof action[INVOKE] === 'function') {\n            fn = makeClosureAction(action, action, action[INVOKE], processArgs, debugKey);\n        } else if ((0, _reference.isConst)(target) && (0, _reference.isConst)(action)) {\n            fn = makeClosureAction(context.value(), target.value(), action.value(), processArgs, debugKey);\n        } else {\n            fn = makeDynamicClosureAction(context.value(), target, action, processArgs, debugKey);\n        }\n        fn[ACTION] = true;\n        return new UnboundReference(fn);\n    };\n    function NOOP(args) {\n        return args;\n    }\n    function makeArgsProcessor(valuePathRef, actionArgsRef) {\n        var mergeArgs = void 0;\n        if (actionArgsRef.length > 0) {\n            mergeArgs = function (args) {\n                return actionArgsRef.map(function (ref) {\n                    return ref.value();\n                }).concat(args);\n            };\n        }\n        var readValue = void 0;\n        if (valuePathRef) {\n            readValue = function (args) {\n                var valuePath = valuePathRef.value();\n                if (valuePath && args.length > 0) {\n                    args[0] = (0, _emberMetal.get)(args[0], valuePath);\n                }\n                return args;\n            };\n        }\n        if (mergeArgs && readValue) {\n            return function (args) {\n                return readValue(mergeArgs(args));\n            };\n        } else {\n            return mergeArgs || readValue || NOOP;\n        }\n    }\n    function makeDynamicClosureAction(context, targetRef, actionRef, processArgs, debugKey) {\n        // We don't allow undefined/null values, so this creates a throw-away action to trigger the assertions\n        if (true) {\n            makeClosureAction(context, targetRef.value(), actionRef.value(), processArgs, debugKey);\n        }\n        return function () {\n            return makeClosureAction(context, targetRef.value(), actionRef.value(), processArgs, debugKey).apply(undefined, arguments);\n        };\n    }\n    function makeClosureAction(context, target, action, processArgs, debugKey) {\n        var self = void 0;\n        var fn = void 0;\n        (true && !(!(0, _emberMetal.isNone)(action)) && (0, _emberDebug.assert)('Action passed is null or undefined in (action) from ' + target + '.', !(0, _emberMetal.isNone)(action)));\n\n        if (typeof action[INVOKE] === 'function') {\n            self = action;\n            fn = action[INVOKE];\n        } else {\n            var typeofAction = typeof action;\n            if (typeofAction === 'string') {\n                self = target;\n                fn = target.actions && target.actions[action];\n                (true && !(fn) && (0, _emberDebug.assert)('An action named \\'' + action + '\\' was not found in ' + target, fn));\n            } else if (typeofAction === 'function') {\n                self = context;\n                fn = action;\n            } else {\n                (true && !(false) && (0, _emberDebug.assert)('An action could not be made for `' + (debugKey || action) + '` in ' + target + '. Please confirm that you are using either a quoted action name (i.e. `(action \\'' + (debugKey || 'myAction') + '\\')`) or a function available in ' + target + '.', false));\n            }\n        }\n        return function () {\n            for (var _len = arguments.length, args = Array(_len), _key2 = 0; _key2 < _len; _key2++) {\n                args[_key2] = arguments[_key2];\n            }\n\n            var payload = { target: self, args: args, label: '@glimmer/closure-action' };\n            return (0, _emberMetal.flaggedInstrument)('interaction.ember-action', payload, function () {\n                return _emberMetal.run.join.apply(_emberMetal.run, [self, fn].concat(processArgs(args)));\n            });\n        };\n    }\n\n    function template(json) {\n        return new FactoryWrapper((0, _opcodeCompiler.templateFactory)(json));\n    }\n\n    var FactoryWrapper = function () {\n        function FactoryWrapper(factory) {\n            (0, _emberBabel.classCallCheck)(this, FactoryWrapper);\n\n            this.factory = factory;\n            this.id = factory.id;\n            this.meta = factory.meta;\n        }\n\n        FactoryWrapper.prototype.create = function create(injections) {\n            var owner = (0, _emberUtils.getOwner)(injections);\n            return this.factory.create(injections.options, { owner: owner });\n        };\n\n        return FactoryWrapper;\n    }();\n\n    var RootTemplate = template({ \"id\": \"UYMQEP0l\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[26,\\\"component\\\",[[21,0,[]]],null],false]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"packages/ember-glimmer/lib/templates/root.hbs\" } });\n\n    var DIRTY_TAG = (0, _emberUtils.symbol)('DIRTY_TAG');\n    var ARGS = (0, _emberUtils.symbol)('ARGS');\n    var ROOT_REF = (0, _emberUtils.symbol)('ROOT_REF');\n    var IS_DISPATCHING_ATTRS = (0, _emberUtils.symbol)('IS_DISPATCHING_ATTRS');\n    var HAS_BLOCK = (0, _emberUtils.symbol)('HAS_BLOCK');\n    var BOUNDS = (0, _emberUtils.symbol)('BOUNDS');\n    /**\n    @module @ember/component\n    */\n    /**\n      A `Component` is a view that is completely\n      isolated. Properties accessed in its templates go\n      to the view object and actions are targeted at\n      the view object. There is no access to the\n      surrounding context or outer controller; all\n      contextual information must be passed in.\n    \n      The easiest way to create a `Component` is via\n      a template. If you name a template\n      `app/components/my-foo.hbs`, you will be able to use\n      `{{my-foo}}` in other templates, which will make\n      an instance of the isolated component.\n    \n      ```app/components/my-foo.hbs\n      {{person-profile person=currentUser}}\n      ```\n    \n      ```app/components/person-profile.hbs\n      <h1>{{person.title}}</h1>\n      <img src={{person.avatar}}>\n      <p class='signature'>{{person.signature}}</p>\n      ```\n    \n      You can use `yield` inside a template to\n      include the **contents** of any block attached to\n      the component. The block will be executed in the\n      context of the surrounding context or outer controller:\n    \n      ```handlebars\n      {{#person-profile person=currentUser}}\n        <p>Admin mode</p>\n        {{! Executed in the controller's context. }}\n      {{/person-profile}}\n      ```\n    \n      ```app/components/person-profile.hbs\n      <h1>{{person.title}}</h1>\n      {{! Executed in the component's context. }}\n      {{yield}} {{! block contents }}\n      ```\n    \n      If you want to customize the component, in order to\n      handle events or actions, you implement a subclass\n      of `Component` named after the name of the\n      component.\n    \n      For example, you could implement the action\n      `hello` for the `person-profile` component:\n    \n      ```app/components/person-profile.js\n      import Component from '@ember/component';\n    \n      export default Component.extend({\n        actions: {\n          hello(name) {\n            console.log(\"Hello\", name);\n          }\n        }\n      });\n      ```\n    \n      And then use it in the component's template:\n    \n      ```app/templates/components/person-profile.hbs\n      <h1>{{person.title}}</h1>\n      {{yield}} <!-- block contents -->\n      <button {{action 'hello' person.name}}>\n        Say Hello to {{person.name}}\n      </button>\n      ```\n    \n      Components must have a `-` in their name to avoid\n      conflicts with built-in controls that wrap HTML\n      elements. This is consistent with the same\n      requirement in web components.\n    \n      ## HTML Tag\n    \n      The default HTML tag name used for a component's DOM representation is `div`.\n      This can be customized by setting the `tagName` property.\n      The following component class:\n    \n      ```app/components/emphasized-paragraph.js\n      import Component from '@ember/component';\n    \n      export default Component.extend({\n        tagName: 'em'\n      });\n      ```\n    \n      Would result in instances with the following HTML:\n    \n      ```html\n      <em id=\"ember1\" class=\"ember-view\"></em>\n      ```\n    \n      ## HTML `class` Attribute\n    \n      The HTML `class` attribute of a component's tag can be set by providing a\n      `classNames` property that is set to an array of strings:\n    \n      ```app/components/my-widget.js\n      import Component from '@ember/component';\n    \n      export default Component.extend({\n        classNames: ['my-class', 'my-other-class']\n      });\n      ```\n    \n      Will result in component instances with an HTML representation of:\n    \n      ```html\n      <div id=\"ember1\" class=\"ember-view my-class my-other-class\"></div>\n      ```\n    \n      `class` attribute values can also be set by providing a `classNameBindings`\n      property set to an array of properties names for the component. The return value\n      of these properties will be added as part of the value for the components's `class`\n      attribute. These properties can be computed properties:\n    \n      ```app/components/my-widget.js\n      import Component from '@ember/component';\n      import { computed } from '@ember/object';\n    \n      export default Component.extend({\n        classNameBindings: ['propertyA', 'propertyB'],\n    \n        propertyA: 'from-a',\n        propertyB: computed(function() {\n          if (someLogic) { return 'from-b'; }\n        })\n      });\n      ```\n    \n      Will result in component instances with an HTML representation of:\n    \n      ```html\n      <div id=\"ember1\" class=\"ember-view from-a from-b\"></div>\n      ```\n    \n      If the value of a class name binding returns a boolean the property name\n      itself will be used as the class name if the property is true.\n      The class name will not be added if the value is `false` or `undefined`.\n    \n      ```app/components/my-widget.js\n      import Component from '@ember/component';\n    \n      export default Component.extend({\n        classNameBindings: ['hovered'],\n    \n        hovered: true\n      });\n      ```\n    \n      Will result in component instances with an HTML representation of:\n    \n      ```html\n      <div id=\"ember1\" class=\"ember-view hovered\"></div>\n      ```\n    \n      When using boolean class name bindings you can supply a string value other\n      than the property name for use as the `class` HTML attribute by appending the\n      preferred value after a \":\" character when defining the binding:\n    \n      ```app/components/my-widget.js\n      import Component from '@ember/component';\n    \n      export default Component.extend({\n        classNameBindings: ['awesome:so-very-cool'],\n    \n        awesome: true\n      });\n      ```\n    \n      Will result in component instances with an HTML representation of:\n    \n      ```html\n      <div id=\"ember1\" class=\"ember-view so-very-cool\"></div>\n      ```\n    \n      Boolean value class name bindings whose property names are in a\n      camelCase-style format will be converted to a dasherized format:\n    \n      ```app/components/my-widget.js\n      import Component from '@ember/component';\n    \n      export default Component.extend({\n        classNameBindings: ['isUrgent'],\n    \n        isUrgent: true\n      });\n      ```\n    \n      Will result in component instances with an HTML representation of:\n    \n      ```html\n      <div id=\"ember1\" class=\"ember-view is-urgent\"></div>\n      ```\n    \n      Class name bindings can also refer to object values that are found by\n      traversing a path relative to the component itself:\n    \n      ```app/components/my-widget.js\n      import Component from '@ember/component';\n      import EmberObject from '@ember/object';\n    \n      export default Component.extend({\n        classNameBindings: ['messages.empty'],\n    \n        messages: EmberObject.create({\n          empty: true\n        })\n      });\n      ```\n    \n      Will result in component instances with an HTML representation of:\n    \n      ```html\n      <div id=\"ember1\" class=\"ember-view empty\"></div>\n      ```\n    \n      If you want to add a class name for a property which evaluates to true and\n      and a different class name if it evaluates to false, you can pass a binding\n      like this:\n    \n      ```app/components/my-widget.js\n      import Component from '@ember/component';\n    \n      export default Component.extend({\n        classNameBindings: ['isEnabled:enabled:disabled'],\n        isEnabled: true\n      });\n      ```\n    \n      Will result in component instances with an HTML representation of:\n    \n      ```html\n      <div id=\"ember1\" class=\"ember-view enabled\"></div>\n      ```\n    \n      When isEnabled is `false`, the resulting HTML representation looks like\n      this:\n    \n      ```html\n      <div id=\"ember1\" class=\"ember-view disabled\"></div>\n      ```\n    \n      This syntax offers the convenience to add a class if a property is `false`:\n    \n      ```app/components/my-widget.js\n      import Component from '@ember/component';\n    \n      // Applies no class when isEnabled is true and class 'disabled' when isEnabled is false\n      export default Component.extend({\n        classNameBindings: ['isEnabled::disabled'],\n        isEnabled: true\n      });\n      ```\n    \n      Will result in component instances with an HTML representation of:\n    \n      ```html\n      <div id=\"ember1\" class=\"ember-view\"></div>\n      ```\n    \n      When the `isEnabled` property on the component is set to `false`, it will result\n      in component instances with an HTML representation of:\n    \n      ```html\n      <div id=\"ember1\" class=\"ember-view disabled\"></div>\n      ```\n    \n      Updates to the value of a class name binding will result in automatic\n      update of the  HTML `class` attribute in the component's rendered HTML\n      representation. If the value becomes `false` or `undefined` the class name\n      will be removed.\n      Both `classNames` and `classNameBindings` are concatenated properties. See\n      [EmberObject](/api/ember/release/classes/EmberObject) documentation for more\n      information about concatenated properties.\n    \n      ## HTML Attributes\n    \n      The HTML attribute section of a component's tag can be set by providing an\n      `attributeBindings` property set to an array of property names on the component.\n      The return value of these properties will be used as the value of the component's\n      HTML associated attribute:\n    \n      ```app/components/my-anchor.js\n      import Component from '@ember/component';\n    \n      export default Component.extend({\n        tagName: 'a',\n        attributeBindings: ['href'],\n    \n        href: 'http://google.com'\n      });\n      ```\n    \n      Will result in component instances with an HTML representation of:\n    \n      ```html\n      <a id=\"ember1\" class=\"ember-view\" href=\"http://google.com\"></a>\n      ```\n    \n      One property can be mapped on to another by placing a \":\" between\n      the source property and the destination property:\n    \n      ```app/components/my-anchor.js\n      import Component from '@ember/component';\n    \n      export default Component.extend({\n        tagName: 'a',\n        attributeBindings: ['url:href'],\n    \n        url: 'http://google.com'\n      });\n      ```\n    \n      Will result in component instances with an HTML representation of:\n    \n      ```html\n      <a id=\"ember1\" class=\"ember-view\" href=\"http://google.com\"></a>\n      ```\n    \n      Namespaced attributes (e.g. `xlink:href`) are supported, but have to be\n      mapped, since `:` is not a valid character for properties in Javascript:\n    \n      ```app/components/my-use.js\n      import Component from '@ember/component';\n    \n      export default Component.extend({\n        tagName: 'use',\n        attributeBindings: ['xlinkHref:xlink:href'],\n    \n        xlinkHref: '#triangle'\n      });\n      ```\n    \n      Will result in component instances with an HTML representation of:\n    \n      ```html\n      <use xlink:href=\"#triangle\"></use>\n      ```\n    \n      If the return value of an `attributeBindings` monitored property is a boolean\n      the attribute will be present or absent depending on the value:\n    \n      ```app/components/my-text-input.js\n      import Component from '@ember/component';\n    \n      export default Component.extend({\n        tagName: 'input',\n        attributeBindings: ['disabled'],\n    \n        disabled: false\n      });\n      ```\n    \n      Will result in a component instance with an HTML representation of:\n    \n      ```html\n      <input id=\"ember1\" class=\"ember-view\" />\n      ```\n    \n      `attributeBindings` can refer to computed properties:\n    \n      ```app/components/my-text-input.js\n      import Component from '@ember/component';\n      import { computed } from '@ember/object';\n    \n      export default Component.extend({\n        tagName: 'input',\n        attributeBindings: ['disabled'],\n    \n        disabled: computed(function() {\n          if (someLogic) {\n            return true;\n          } else {\n            return false;\n          }\n        })\n      });\n      ```\n    \n      To prevent setting an attribute altogether, use `null` or `undefined` as the\n      return value of the `attributeBindings` monitored property:\n    \n      ```app/components/my-text-input.js\n      import Component from '@ember/component';\n    \n      export default Component.extend({\n        tagName: 'form',\n        attributeBindings: ['novalidate'],\n        novalidate: null\n      });\n      ```\n    \n      Updates to the property of an attribute binding will result in automatic\n      update of the  HTML attribute in the component's rendered HTML representation.\n      `attributeBindings` is a concatenated property. See [EmberObject](/api/ember/release/classes/EmberObject)\n      documentation for more information about concatenated properties.\n    \n      ## Layouts\n    \n      See [Ember.Templates.helpers.yield](/api/ember/release/classes/Ember.Templates.helpers/methods/yield?anchor=yield)\n      for more information.\n    \n      Layout can be used to wrap content in a component. In addition\n      to wrapping content in a Component's template, you can also use\n      the public layout API in your Component JavaScript.\n    \n      ```app/templates/components/person-profile.hbs\n        <h1>Person's Title</h1>\n        <div class='details'>{{yield}}</div>\n      ```\n    \n      ```app/components/person-profile.js\n        import Component from '@ember/component';\n        import layout from '../templates/components/person-profile';\n    \n        export default Component.extend({\n          layout\n        });\n      ```\n    \n      The above will result in the following HTML output:\n    \n      ```html\n        <h1>Person's Title</h1>\n        <div class=\"details\">\n          <h2>Chief Basket Weaver</h2>\n          <h3>Fisherman Industries</h3>\n        </div>\n      ```\n    \n      ## Responding to Browser Events\n    \n      Components can respond to user-initiated events in one of three ways: method\n      implementation, through an event manager, and through `{{action}}` helper use\n      in their template or layout.\n    \n      ### Method Implementation\n    \n      Components can respond to user-initiated events by implementing a method that\n      matches the event name. A `jQuery.Event` object will be passed as the\n      argument to this method.\n    \n      ```app/components/my-widget.js\n      import Component from '@ember/component';\n    \n      export default Component.extend({\n        click(event) {\n          // will be called when an instance's\n          // rendered element is clicked\n        }\n      });\n      ```\n    \n      ### `{{action}}` Helper\n    \n      See [Ember.Templates.helpers.action](/api/ember/release/classes/Ember.Templates.helpers/methods/yield?anchor=yield).\n    \n      ### Event Names\n    \n      All of the event handling approaches described above respond to the same set\n      of events. The names of the built-in events are listed below. (The hash of\n      built-in events exists in `Ember.EventDispatcher`.) Additional, custom events\n      can be registered by using `Application.customEvents`.\n    \n      Touch events:\n    \n      * `touchStart`\n      * `touchMove`\n      * `touchEnd`\n      * `touchCancel`\n    \n      Keyboard events:\n    \n      * `keyDown`\n      * `keyUp`\n      * `keyPress`\n    \n      Mouse events:\n    \n      * `mouseDown`\n      * `mouseUp`\n      * `contextMenu`\n      * `click`\n      * `doubleClick`\n      * `mouseMove`\n      * `focusIn`\n      * `focusOut`\n      * `mouseEnter`\n      * `mouseLeave`\n    \n      Form events:\n    \n      * `submit`\n      * `change`\n      * `focusIn`\n      * `focusOut`\n      * `input`\n    \n      HTML5 drag and drop events:\n    \n      * `dragStart`\n      * `drag`\n      * `dragEnter`\n      * `dragLeave`\n      * `dragOver`\n      * `dragEnd`\n      * `drop`\n    \n      @class Component\n      @extends Ember.CoreView\n      @uses Ember.TargetActionSupport\n      @uses Ember.ClassNamesSupport\n      @uses Ember.ActionSupport\n      @uses Ember.ViewMixin\n      @uses Ember.ViewStateSupport\n      @public\n    */\n    var Component = _emberViews.CoreView.extend(_emberViews.ChildViewsSupport, _emberViews.ViewStateSupport, _emberViews.ClassNamesSupport, _emberRuntime.TargetActionSupport, _emberViews.ActionSupport, _emberViews.ViewMixin, (_CoreView$extend = {\n        isComponent: true,\n        init: function () {\n            var _this13 = this;\n\n            this._super.apply(this, arguments);\n            this[IS_DISPATCHING_ATTRS] = false;\n            this[DIRTY_TAG] = _reference.DirtyableTag.create();\n            this[ROOT_REF] = new RootReference(this);\n            this[BOUNDS] = null;\n            // If in a tagless component, assert that no event handlers are defined\n            (true && !(this.tagName !== '' || !this.renderer._destinedForDOM || !function () {\n                var eventDispatcher = (0, _emberUtils.getOwner)(_this13).lookup('event_dispatcher:main');\n                var events = eventDispatcher && eventDispatcher._finalEvents || {};\n                // tslint:disable-next-line:forin\n                for (var key in events) {\n                    var methodName = events[key];\n                    if (typeof _this13[methodName] === 'function') {\n                        return true; // indicate that the assertion should be triggered\n                    }\n                }\n                return false;\n            }()) && (0, _emberDebug.assert)('You can not define a function that handles DOM events in the `' + this + '` tagless component since it doesn\\'t have any DOM element.', this.tagName !== '' || !this.renderer._destinedForDOM || !function () {\n                var eventDispatcher = (0, _emberUtils.getOwner)(_this13).lookup('event_dispatcher:main');var events = eventDispatcher && eventDispatcher._finalEvents || {};for (var key in events) {\n                    var methodName = events[key];if (typeof _this13[methodName] === 'function') {\n                        return true;\n                    }\n                }return false;\n            }()));\n        },\n        rerender: function () {\n            this[DIRTY_TAG].inner.dirty();\n            this._super();\n        },\n        __defineNonEnumerable: function (property) {\n            this[property.name] = property.descriptor.value;\n        }\n    }, _CoreView$extend[_emberMetal.PROPERTY_DID_CHANGE] = function (key) {\n        if (this[IS_DISPATCHING_ATTRS]) {\n            return;\n        }\n        var args = this[ARGS];\n        var reference$$1 = args && args[key];\n        if (reference$$1) {\n            if (reference$$1[UPDATE]) {\n                reference$$1[UPDATE]((0, _emberMetal.get)(this, key));\n            }\n        }\n    }, _CoreView$extend.getAttr = function (key) {\n        // TODO Intimate API should be deprecated\n        return this.get(key);\n    }, _CoreView$extend.readDOMAttr = function (name) {\n        // TODO revisit this\n        var element = (0, _emberViews.getViewElement)(this);\n        var isSVG = element.namespaceURI === _runtime.SVG_NAMESPACE;\n\n        var _normalizeProperty = (0, _runtime.normalizeProperty)(element, name),\n            type = _normalizeProperty.type,\n            normalized = _normalizeProperty.normalized;\n\n        if (isSVG) {\n            return element.getAttribute(normalized);\n        }\n        if (type === 'attr') {\n            return element.getAttribute(normalized);\n        }\n        return element[normalized];\n    }, _CoreView$extend));\n    Component.toString = function () {\n        return '@ember/component';\n    };\n    Component.reopenClass({\n        isComponentFactory: true,\n        positionalParams: []\n    });\n\n    var layout = template({ \"id\": \"5jp2oO+o\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"packages/ember-glimmer/lib/templates/empty.hbs\" } });\n\n    /**\n    @module @ember/component\n    */\n    /**\n      The internal class used to create text inputs when the `{{input}}`\n      helper is used with `type` of `checkbox`.\n    \n      See [Ember.Templates.helpers.input](/api/ember/release/classes/Ember.Templates.helpers/methods/input?anchor=input)  for usage details.\n    \n      ## Direct manipulation of `checked`\n    \n      The `checked` attribute of an `Checkbox` object should always be set\n      through the Ember object or by interacting with its rendered element\n      representation via the mouse, keyboard, or touch. Updating the value of the\n      checkbox via jQuery will result in the checked value of the object and its\n      element losing synchronization.\n    \n      ## Layout and LayoutName properties\n    \n      Because HTML `input` elements are self closing `layout` and `layoutName`\n      properties will not be applied.\n    \n      @class Checkbox\n      @extends Component\n      @public\n    */\n    var Checkbox = Component.extend({\n        layout: layout,\n        classNames: ['ember-checkbox'],\n        tagName: 'input',\n        attributeBindings: ['type', 'checked', 'indeterminate', 'disabled', 'tabindex', 'name', 'autofocus', 'required', 'form'],\n        type: 'checkbox',\n        disabled: false,\n        indeterminate: false,\n        didInsertElement: function () {\n            this._super.apply(this, arguments);\n            (0, _emberMetal.get)(this, 'element').indeterminate = !!(0, _emberMetal.get)(this, 'indeterminate');\n        },\n        change: function () {\n            (0, _emberMetal.set)(this, 'checked', this.element.checked);\n        }\n    });\n    Checkbox.toString = function () {\n        return '@ember/component/checkbox';\n    };\n\n    /**\n    @module @ember/component\n    */\n    var inputTypes = Object.create(null);\n    function canSetTypeOfInput(type) {\n        if (type in inputTypes) {\n            return inputTypes[type];\n        }\n        // if running in outside of a browser always return the\n        // original type\n        if (!_emberEnvironment.environment.hasDOM) {\n            inputTypes[type] = type;\n            return type;\n        }\n        var inputTypeTestElement = document.createElement('input');\n        try {\n            inputTypeTestElement.type = type;\n        } catch (e) {\n            // ignored\n        }\n        return inputTypes[type] = inputTypeTestElement.type === type;\n    }\n    /**\n    \n      The internal class used to create text inputs when the `{{input}}`\n      helper is used with `type` of `text`.\n    \n      See [Ember.Templates.helpers.input](/api/ember/release/classes/Ember.Templates.helpers/methods/input?anchor=input)  for usage details.\n    \n      ## Layout and LayoutName properties\n    \n      Because HTML `input` elements are self closing `layout` and `layoutName`\n      properties will not be applied.\n    \n      @class TextField\n      @extends Component\n      @uses Ember.TextSupport\n      @public\n    */\n    var TextField = Component.extend(_emberViews.TextSupport, {\n        layout: layout,\n        classNames: ['ember-text-field'],\n        tagName: 'input',\n        attributeBindings: ['accept', 'autocomplete', 'autosave', 'dir', 'formaction', 'formenctype', 'formmethod', 'formnovalidate', 'formtarget', 'height', 'inputmode', 'lang', 'list', 'type', 'max', 'min', 'multiple', 'name', 'pattern', 'size', 'step', 'value', 'width'],\n        /**\n          The `value` attribute of the input element. As the user inputs text, this\n          property is updated live.\n             @property value\n          @type String\n          @default \"\"\n          @public\n        */\n        value: '',\n        /**\n          The `type` attribute of the input element.\n             @property type\n          @type String\n          @default \"text\"\n          @public\n        */\n        type: (0, _emberMetal.computed)({\n            get: function () {\n                return 'text';\n            },\n            set: function (_key, value) {\n                var type = 'text';\n                if (canSetTypeOfInput(value)) {\n                    type = value;\n                }\n                return type;\n            }\n        }),\n        /**\n          The `size` of the text field in characters.\n             @property size\n          @type String\n          @default null\n          @public\n        */\n        size: null,\n        /**\n          The `pattern` attribute of input element.\n             @property pattern\n          @type String\n          @default null\n          @public\n        */\n        pattern: null,\n        /**\n          The `min` attribute of input element used with `type=\"number\"` or `type=\"range\"`.\n             @property min\n          @type String\n          @default null\n          @since 1.4.0\n          @public\n        */\n        min: null,\n        /**\n          The `max` attribute of input element used with `type=\"number\"` or `type=\"range\"`.\n             @property max\n          @type String\n          @default null\n          @since 1.4.0\n          @public\n        */\n        max: null\n    });\n    TextField.toString = function () {\n        return '@ember/component/text-field';\n    };\n\n    /**\n    @module @ember/component\n    */\n    /**\n      `{{textarea}}` inserts a new instance of `<textarea>` tag into the template.\n      The attributes of `{{textarea}}` match those of the native HTML tags as\n      closely as possible.\n    \n      The following HTML attributes can be set:\n    \n        * `value`\n        * `name`\n        * `rows`\n        * `cols`\n        * `placeholder`\n        * `disabled`\n        * `maxlength`\n        * `tabindex`\n        * `selectionEnd`\n        * `selectionStart`\n        * `selectionDirection`\n        * `wrap`\n        * `readonly`\n        * `autofocus`\n        * `form`\n        * `spellcheck`\n        * `required`\n    \n      When set to a quoted string, these value will be directly applied to the HTML\n      element. When left unquoted, these values will be bound to a property on the\n      template's current rendering context (most typically a controller instance).\n    \n      Unbound:\n    \n      ```handlebars\n      {{textarea value=\"Lots of static text that ISN'T bound\"}}\n      ```\n    \n      Would result in the following HTML:\n    \n      ```html\n      <textarea class=\"ember-text-area\">\n        Lots of static text that ISN'T bound\n      </textarea>\n      ```\n    \n      Bound:\n    \n      In the following example, the `writtenWords` property on the application\n      Controller will be updated live as the user types 'Lots of text that IS\n      bound' into the text area of their browser's window.\n    \n      ```app/controllers/application.js\n      import Controller from '@ember/controller';\n    \n      export default Controller.extend({\n        writtenWords: \"Lots of text that IS bound\"\n      });\n      ```\n    \n      ```handlebars\n      {{textarea value=writtenWords}}\n      ```\n    \n      Would result in the following HTML:\n    \n      ```html\n      <textarea class=\"ember-text-area\">\n        Lots of text that IS bound\n      </textarea>\n      ```\n    \n      If you wanted a one way binding between the text area and a div tag\n      somewhere else on your screen, you could use `oneWay`:\n    \n      ```app/controllers/application.js\n      import Controller from '@ember/controller';\n      import { oneWay } from '@ember/object/computed';\n    \n      export default Controller.extend({\n        writtenWords: \"Lots of text that IS bound\",\n    \n        outputWrittenWords: oneWay(\"writtenWords\")\n      });\n      ```\n    \n      ```handlebars\n      {{textarea value=writtenWords}}\n      <div>\n        {{outputWrittenWords}}\n      </div>\n      ```\n    \n      Would result in the following HTML:\n    \n      ```html\n      <textarea class=\"ember-text-area\">\n        Lots of text that IS bound\n      </textarea>\n      <-- the following div will be updated in real time as you type -->\n      <div>\n        Lots of text that IS bound\n      </div>\n      ```\n    \n      Finally, this example really shows the power and ease of Ember when two\n      properties are bound to eachother via `alias`. Type into\n      either text area box and they'll both stay in sync. Note that\n      `alias` costs more in terms of performance, so only use it when\n      your really binding in both directions:\n    \n      ```app/controllers/application.js\n      import Controller from '@ember/controller';\n      import { alias } from '@ember/object/computed';\n    \n      export default Controller.extend({\n        writtenWords: \"Lots of text that IS bound\",\n    \n        twoWayWrittenWords: alias(\"writtenWords\")\n      });\n      ```\n    \n      ```handlebars\n      {{textarea value=writtenWords}}\n      {{textarea value=twoWayWrittenWords}}\n      ```\n    \n      ```html\n      <textarea id=\"ember1\" class=\"ember-text-area\">\n        Lots of text that IS bound\n      </textarea>\n      <-- both updated in real time -->\n      <textarea id=\"ember2\" class=\"ember-text-area\">\n        Lots of text that IS bound\n      </textarea>\n      ```\n    \n      ### Actions\n    \n      The helper can send multiple actions based on user events.\n      The action property defines the action which is send when\n      the user presses the return key.\n    \n      ```handlebars\n      {{input action=\"submit\"}}\n      ```\n    \n      The helper allows some user events to send actions.\n    \n      * `enter`\n      * `insert-newline`\n      * `escape-press`\n      * `focus-in`\n      * `focus-out`\n      * `key-press`\n    \n      For example, if you desire an action to be sent when the input is blurred,\n      you only need to setup the action name to the event name property.\n    \n      ```handlebars\n      {{textarea focus-out=\"alertMessage\"}}\n      ```\n    \n      See more about [Text Support Actions](/api/ember/release/classes/TextArea)\n    \n      ### Extension\n    \n      Internally, `{{textarea}}` creates an instance of `TextArea`, passing\n      arguments from the helper to `TextArea`'s `create` method. You can\n      extend the capabilities of text areas in your application by reopening this\n      class. For example, if you are building a Bootstrap project where `data-*`\n      attributes are used, you can globally add support for a `data-*` attribute\n      on all `{{textarea}}`s' in your app by reopening `TextArea` or\n      `TextSupport` and adding it to the `attributeBindings` concatenated\n      property:\n    \n      ```javascript\n      import TextArea from '@ember/component/text-area';\n    \n      TextArea.reopen({\n        attributeBindings: ['data-error']\n      });\n      ```\n    \n      Keep in mind when writing `TextArea` subclasses that `TextArea`\n      itself extends `Component`. Expect isolated component semantics, not\n      legacy 1.x view semantics (like `controller` being present).\n    \n      See more about [Ember components](/api/ember/release/classes/Component)\n    \n      @method textarea\n      @for Ember.Templates.helpers\n      @param {Hash} options\n      @public\n    */\n    /**\n      The internal class used to create textarea element when the `{{textarea}}`\n      helper is used.\n    \n      See [Ember.Templates.helpers.textarea](/api/ember/release/classes/Ember.Templates.helpers/methods/textarea?anchor=textarea)  for usage details.\n    \n      ## Layout and LayoutName properties\n    \n      Because HTML `textarea` elements do not contain inner HTML the `layout` and\n      `layoutName` properties will not be applied.\n    \n      @class TextArea\n      @extends Component\n      @uses Ember.TextSupport\n      @public\n    */\n    var TextArea = Component.extend(_emberViews.TextSupport, {\n        classNames: ['ember-text-area'],\n        layout: layout,\n        tagName: 'textarea',\n        attributeBindings: ['rows', 'cols', 'name', 'selectionEnd', 'selectionStart', 'wrap', 'lang', 'dir', 'value'],\n        rows: null,\n        cols: null\n    });\n    TextArea.toString = function () {\n        return '@ember/component/text-area';\n    };\n\n    var layout$1 = template({ \"id\": \"4GmgUGfN\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"linkTitle\\\"]]],null,{\\\"statements\\\":[[1,[20,\\\"linkTitle\\\"],false]],\\\"parameters\\\":[]},{\\\"statements\\\":[[13,1]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"packages/ember-glimmer/lib/templates/link-to.hbs\" } });\n\n    /**\n    @module ember\n    */\n    /**\n      The `{{link-to}}` component renders a link to the supplied\n      `routeName` passing an optionally supplied model to the\n      route as its `model` context of the route. The block\n      for `{{link-to}}` becomes the innerHTML of the rendered\n      element:\n    \n      ```handlebars\n      {{#link-to 'photoGallery'}}\n        Great Hamster Photos\n      {{/link-to}}\n      ```\n    \n      You can also use an inline form of `{{link-to}}` component by\n      passing the link text as the first argument\n      to the component:\n    \n      ```handlebars\n      {{link-to 'Great Hamster Photos' 'photoGallery'}}\n      ```\n    \n      Both will result in:\n    \n      ```html\n      <a href=\"/hamster-photos\">\n        Great Hamster Photos\n      </a>\n      ```\n    \n      ### Supplying a tagName\n      By default `{{link-to}}` renders an `<a>` element. This can\n      be overridden for a single use of `{{link-to}}` by supplying\n      a `tagName` option:\n    \n      ```handlebars\n      {{#link-to 'photoGallery' tagName=\"li\"}}\n        Great Hamster Photos\n      {{/link-to}}\n      ```\n    \n      ```html\n      <li>\n        Great Hamster Photos\n      </li>\n      ```\n    \n      To override this option for your entire application, see\n      \"Overriding Application-wide Defaults\".\n    \n      ### Disabling the `link-to` component\n      By default `{{link-to}}` is enabled.\n      any passed value to the `disabled` component property will disable\n      the `link-to` component.\n    \n      static use: the `disabled` option:\n    \n      ```handlebars\n      {{#link-to 'photoGallery' disabled=true}}\n        Great Hamster Photos\n      {{/link-to}}\n      ```\n    \n      dynamic use: the `disabledWhen` option:\n    \n      ```handlebars\n      {{#link-to 'photoGallery' disabledWhen=controller.someProperty}}\n        Great Hamster Photos\n      {{/link-to}}\n      ```\n    \n      any truthy value passed to `disabled` will disable it except `undefined`.\n    \n      See \"Overriding Application-wide Defaults\" for more.\n    \n      ### Handling `href`\n      `{{link-to}}` will use your application's Router to\n      fill the element's `href` property with a url that\n      matches the path to the supplied `routeName` for your\n      router's configured `Location` scheme, which defaults\n      to HashLocation.\n    \n      ### Handling current route\n      `{{link-to}}` will apply a CSS class name of 'active'\n      when the application's current route matches\n      the supplied routeName. For example, if the application's\n      current route is 'photoGallery.recent' the following\n      use of `{{link-to}}`:\n    \n      ```handlebars\n      {{#link-to 'photoGallery.recent'}}\n        Great Hamster Photos\n      {{/link-to}}\n      ```\n    \n      will result in\n    \n      ```html\n      <a href=\"/hamster-photos/this-week\" class=\"active\">\n        Great Hamster Photos\n      </a>\n      ```\n    \n      The CSS class name used for active classes can be customized\n      for a single use of `{{link-to}}` by passing an `activeClass`\n      option:\n    \n      ```handlebars\n      {{#link-to 'photoGallery.recent' activeClass=\"current-url\"}}\n        Great Hamster Photos\n      {{/link-to}}\n      ```\n    \n      ```html\n      <a href=\"/hamster-photos/this-week\" class=\"current-url\">\n        Great Hamster Photos\n      </a>\n      ```\n    \n      To override this option for your entire application, see\n      \"Overriding Application-wide Defaults\".\n    \n      ### Keeping a link active for other routes\n    \n      If you need a link to be 'active' even when it doesn't match\n      the current route, you can use the `current-when` argument.\n    \n      ```handlebars\n      {{#link-to 'photoGallery' current-when='photos'}}\n        Photo Gallery\n      {{/link-to}}\n      ```\n    \n      This may be helpful for keeping links active for:\n    \n      * non-nested routes that are logically related\n      * some secondary menu approaches\n      * 'top navigation' with 'sub navigation' scenarios\n    \n      A link will be active if `current-when` is `true` or the current\n      route is the route this link would transition to.\n    \n      To match multiple routes 'space-separate' the routes:\n    \n      ```handlebars\n      {{#link-to 'gallery' current-when='photos drawings paintings'}}\n        Art Gallery\n      {{/link-to}}\n      ```\n    \n      ### Supplying a model\n      An optional model argument can be used for routes whose\n      paths contain dynamic segments. This argument will become\n      the model context of the linked route:\n    \n      ```javascript\n      Router.map(function() {\n        this.route(\"photoGallery\", {path: \"hamster-photos/:photo_id\"});\n      });\n      ```\n    \n      ```handlebars\n      {{#link-to 'photoGallery' aPhoto}}\n        {{aPhoto.title}}\n      {{/link-to}}\n      ```\n    \n      ```html\n      <a href=\"/hamster-photos/42\">\n        Tomster\n      </a>\n      ```\n    \n      ### Supplying multiple models\n      For deep-linking to route paths that contain multiple\n      dynamic segments, multiple model arguments can be used.\n      As the router transitions through the route path, each\n      supplied model argument will become the context for the\n      route with the dynamic segments:\n    \n      ```javascript\n      Router.map(function() {\n        this.route(\"photoGallery\", { path: \"hamster-photos/:photo_id\" }, function() {\n          this.route(\"comment\", {path: \"comments/:comment_id\"});\n        });\n      });\n      ```\n      This argument will become the model context of the linked route:\n    \n      ```handlebars\n      {{#link-to 'photoGallery.comment' aPhoto comment}}\n        {{comment.body}}\n      {{/link-to}}\n      ```\n    \n      ```html\n      <a href=\"/hamster-photos/42/comments/718\">\n        A+++ would snuggle again.\n      </a>\n      ```\n    \n      ### Supplying an explicit dynamic segment value\n      If you don't have a model object available to pass to `{{link-to}}`,\n      an optional string or integer argument can be passed for routes whose\n      paths contain dynamic segments. This argument will become the value\n      of the dynamic segment:\n    \n      ```javascript\n      Router.map(function() {\n        this.route(\"photoGallery\", { path: \"hamster-photos/:photo_id\" });\n      });\n      ```\n    \n      ```handlebars\n      {{#link-to 'photoGallery' aPhotoId}}\n        {{aPhoto.title}}\n      {{/link-to}}\n      ```\n    \n      ```html\n      <a href=\"/hamster-photos/42\">\n        Tomster\n      </a>\n      ```\n    \n      When transitioning into the linked route, the `model` hook will\n      be triggered with parameters including this passed identifier.\n    \n      ### Allowing Default Action\n    \n      By default the `{{link-to}}` component prevents the default browser action\n      by calling `preventDefault()` as this sort of action bubbling is normally\n      handled internally and we do not want to take the browser to a new URL (for\n      example).\n    \n      If you need to override this behavior specify `preventDefault=false` in\n      your template:\n    \n      ```handlebars\n      {{#link-to 'photoGallery' aPhotoId preventDefault=false}}\n        {{aPhotoId.title}}\n      {{/link-to}}\n      ```\n    \n      ### Overriding attributes\n      You can override any given property of the `LinkComponent`\n      that is generated by the `{{link-to}}` component by passing\n      key/value pairs, like so:\n    \n      ```handlebars\n      {{#link-to  aPhoto tagName='li' title='Following this link will change your life' classNames='pic sweet'}}\n        Uh-mazing!\n      {{/link-to}}\n      ```\n    \n      See [LinkComponent](/api/ember/release/classes/LinkComponent) for a\n      complete list of overrideable properties. Be sure to also\n      check out inherited properties of `LinkComponent`.\n    \n      ### Overriding Application-wide Defaults\n    \n      ``{{link-to}}`` creates an instance of `LinkComponent` for rendering. To\n      override options for your entire application, export your customized\n      `LinkComponent` from `app/components/link-to.js` with the desired overrides:\n    \n      ```javascript\n      // app/components/link-to.js\n      import LinkComponent from '@ember/routing/link-component';\n    \n      export default LinkComponent.extend({\n        activeClass: \"is-active\",\n        tagName: 'li'\n      })\n      ```\n    \n      It is also possible to override the default event in this manner:\n    \n      ```javascript\n      import LinkCompoennt from '@ember/routing/link-component';\n    \n      export default LinkComponent.extend({\n        eventName: 'customEventName'\n      });\n      ```\n    \n      @method link-to\n      @for Ember.Templates.helpers\n      @param {String} routeName\n      @param {Object} [context]*\n      @param [options] {Object} Handlebars key/value pairs of options, you can override any property of Ember.LinkComponent\n      @return {String} HTML string\n      @see {LinkComponent}\n      @public\n    */\n    /**\n      @module @ember/routing\n    */\n    /**\n      `LinkComponent` renders an element whose `click` event triggers a\n      transition of the application's instance of `Router` to\n      a supplied route by name.\n    \n      `LinkComponent` components are invoked with {{#link-to}}. Properties\n      of this class can be overridden with `reopen` to customize application-wide\n      behavior.\n    \n      @class LinkComponent\n      @extends Component\n      @see {Ember.Templates.helpers.link-to}\n      @public\n    **/\n    var LinkComponent = Component.extend({\n        layout: layout$1,\n        tagName: 'a',\n        /**\n          Used to determine when this `LinkComponent` is active.\n             @property current-when\n          @public\n        */\n        'current-when': null,\n        /**\n          Sets the `title` attribute of the `LinkComponent`'s HTML element.\n             @property title\n          @default null\n          @public\n        **/\n        title: null,\n        /**\n          Sets the `rel` attribute of the `LinkComponent`'s HTML element.\n             @property rel\n          @default null\n          @public\n        **/\n        rel: null,\n        /**\n          Sets the `tabindex` attribute of the `LinkComponent`'s HTML element.\n             @property tabindex\n          @default null\n          @public\n        **/\n        tabindex: null,\n        /**\n          Sets the `target` attribute of the `LinkComponent`'s HTML element.\n             @since 1.8.0\n          @property target\n          @default null\n          @public\n        **/\n        target: null,\n        /**\n          The CSS class to apply to `LinkComponent`'s element when its `active`\n          property is `true`.\n             @property activeClass\n          @type String\n          @default active\n          @public\n        **/\n        activeClass: 'active',\n        /**\n          The CSS class to apply to `LinkComponent`'s element when its `loading`\n          property is `true`.\n             @property loadingClass\n          @type String\n          @default loading\n          @private\n        **/\n        loadingClass: 'loading',\n        /**\n          The CSS class to apply to a `LinkComponent`'s element when its `disabled`\n          property is `true`.\n             @property disabledClass\n          @type String\n          @default disabled\n          @private\n        **/\n        disabledClass: 'disabled',\n        /**\n          Determines whether the `LinkComponent` will trigger routing via\n          the `replaceWith` routing strategy.\n             @property replace\n          @type Boolean\n          @default false\n          @public\n        **/\n        replace: false,\n        /**\n          By default the `{{link-to}}` component will bind to the `href` and\n          `title` attributes. It's discouraged that you override these defaults,\n          however you can push onto the array if needed.\n             @property attributeBindings\n          @type Array | String\n          @default ['title', 'rel', 'tabindex', 'target']\n          @public\n        */\n        attributeBindings: ['href', 'title', 'rel', 'tabindex', 'target'],\n        /**\n          By default the `{{link-to}}` component will bind to the `active`, `loading`,\n          and `disabled` classes. It is discouraged to override these directly.\n             @property classNameBindings\n          @type Array\n          @default ['active', 'loading', 'disabled', 'ember-transitioning-in', 'ember-transitioning-out']\n          @public\n        */\n        classNameBindings: ['active', 'loading', 'disabled', 'transitioningIn', 'transitioningOut'],\n        /**\n          By default the `{{link-to}}` component responds to the `click` event. You\n          can override this globally by setting this property to your custom\n          event name.\n             This is particularly useful on mobile when one wants to avoid the 300ms\n          click delay using some sort of custom `tap` event.\n             @property eventName\n          @type String\n          @default click\n          @private\n        */\n        eventName: 'click',\n        init: function () {\n            this._super.apply(this, arguments);\n            // Map desired event name to invoke function\n            var eventName = (0, _emberMetal.get)(this, 'eventName');\n            this.on(eventName, this, this._invoke);\n        },\n\n        _routing: _emberRuntime.inject.service('-routing'),\n        /**\n          Accessed as a classname binding to apply the `LinkComponent`'s `disabledClass`\n          CSS `class` to the element when the link is disabled.\n             When `true` interactions with the element will not trigger route changes.\n          @property disabled\n          @private\n        */\n        disabled: (0, _emberMetal.computed)({\n            get: function (_key) {\n                // always returns false for `get` because (due to the `set` just below)\n                // the cached return value from the set will prevent this getter from _ever_\n                // being called after a set has occured\n                return false;\n            },\n            set: function (_key, value) {\n                this._isDisabled = value;\n                return value ? (0, _emberMetal.get)(this, 'disabledClass') : false;\n            }\n        }),\n        _isActive: function (routerState) {\n            if ((0, _emberMetal.get)(this, 'loading')) {\n                return false;\n            }\n            var currentWhen = (0, _emberMetal.get)(this, 'current-when');\n            if (typeof currentWhen === 'boolean') {\n                return currentWhen;\n            }\n            var isCurrentWhenSpecified = !!currentWhen;\n            currentWhen = currentWhen || (0, _emberMetal.get)(this, 'qualifiedRouteName');\n            currentWhen = currentWhen.split(' ');\n            var routing = (0, _emberMetal.get)(this, '_routing');\n            var models = (0, _emberMetal.get)(this, 'models');\n            var resolvedQueryParams = (0, _emberMetal.get)(this, 'resolvedQueryParams');\n            for (var i = 0; i < currentWhen.length; i++) {\n                if (routing.isActiveForRoute(models, resolvedQueryParams, currentWhen[i], routerState, isCurrentWhenSpecified)) {\n                    return true;\n                }\n            }\n            return false;\n        },\n\n        /**\n          Accessed as a classname binding to apply the `LinkComponent`'s `activeClass`\n          CSS `class` to the element when the link is active.\n             A `LinkComponent` is considered active when its `currentWhen` property is `true`\n          or the application's current route is the route the `LinkComponent` would trigger\n          transitions into.\n             The `currentWhen` property can match against multiple routes by separating\n          route names using the ` ` (space) character.\n             @property active\n          @private\n        */\n        active: (0, _emberMetal.computed)('activeClass', '_active', function computeLinkToComponentActiveClass() {\n            return this.get('_active') ? (0, _emberMetal.get)(this, 'activeClass') : false;\n        }),\n        _active: (0, _emberMetal.computed)('_routing.currentState', 'attrs.params', function computeLinkToComponentActive() {\n            var currentState = (0, _emberMetal.get)(this, '_routing.currentState');\n            if (!currentState) {\n                return false;\n            }\n            return this._isActive(currentState);\n        }),\n        willBeActive: (0, _emberMetal.computed)('_routing.targetState', function computeLinkToComponentWillBeActive() {\n            var routing = (0, _emberMetal.get)(this, '_routing');\n            var targetState = (0, _emberMetal.get)(routing, 'targetState');\n            if ((0, _emberMetal.get)(routing, 'currentState') === targetState) {\n                return;\n            }\n            return this._isActive(targetState);\n        }),\n        transitioningIn: (0, _emberMetal.computed)('active', 'willBeActive', function computeLinkToComponentTransitioningIn() {\n            if ((0, _emberMetal.get)(this, 'willBeActive') === true && !(0, _emberMetal.get)(this, '_active')) {\n                return 'ember-transitioning-in';\n            } else {\n                return false;\n            }\n        }),\n        transitioningOut: (0, _emberMetal.computed)('active', 'willBeActive', function computeLinkToComponentTransitioningOut() {\n            if ((0, _emberMetal.get)(this, 'willBeActive') === false && (0, _emberMetal.get)(this, '_active')) {\n                return 'ember-transitioning-out';\n            } else {\n                return false;\n            }\n        }),\n        _invoke: function (event) {\n            if (!(0, _emberViews.isSimpleClick)(event)) {\n                return true;\n            }\n            var preventDefault = (0, _emberMetal.get)(this, 'preventDefault');\n            var targetAttribute = (0, _emberMetal.get)(this, 'target');\n            if (preventDefault !== false) {\n                if (!targetAttribute || targetAttribute === '_self') {\n                    event.preventDefault();\n                }\n            }\n            if ((0, _emberMetal.get)(this, 'bubbles') === false) {\n                event.stopPropagation();\n            }\n            if (this._isDisabled) {\n                return false;\n            }\n            if ((0, _emberMetal.get)(this, 'loading')) {\n                (true && (0, _emberDebug.warn)('This link-to is in an inactive loading state because at least one of its parameters presently has a null/undefined value, or the provided route name is invalid.', false, {\n                    id: 'ember-glimmer.link-to.inactive-loading-state'\n                }));\n\n                return false;\n            }\n            if (targetAttribute && targetAttribute !== '_self') {\n                return false;\n            }\n            var qualifiedRouteName = (0, _emberMetal.get)(this, 'qualifiedRouteName');\n            var models = (0, _emberMetal.get)(this, 'models');\n            var queryParams = (0, _emberMetal.get)(this, 'queryParams.values');\n            var shouldReplace = (0, _emberMetal.get)(this, 'replace');\n            var payload = {\n                queryParams: queryParams,\n                routeName: qualifiedRouteName\n            };\n            // tslint:disable-next-line:max-line-length\n            (0, _emberMetal.flaggedInstrument)('interaction.link-to', payload, this._generateTransition(payload, qualifiedRouteName, models, queryParams, shouldReplace));\n            return false;\n        },\n        _generateTransition: function (payload, qualifiedRouteName, models, queryParams, shouldReplace) {\n            var routing = (0, _emberMetal.get)(this, '_routing');\n            return function () {\n                payload.transition = routing.transitionTo(qualifiedRouteName, models, queryParams, shouldReplace);\n            };\n        },\n\n        queryParams: null,\n        qualifiedRouteName: (0, _emberMetal.computed)('targetRouteName', '_routing.currentState', function computeLinkToComponentQualifiedRouteName() {\n            var params = (0, _emberMetal.get)(this, 'params');\n            var paramsLength = params.length;\n            var lastParam = params[paramsLength - 1];\n            if (lastParam && lastParam.isQueryParams) {\n                paramsLength--;\n            }\n            var onlyQueryParamsSupplied = this[HAS_BLOCK] ? paramsLength === 0 : paramsLength === 1;\n            if (onlyQueryParamsSupplied) {\n                return (0, _emberMetal.get)(this, '_routing.currentRouteName');\n            }\n            return (0, _emberMetal.get)(this, 'targetRouteName');\n        }),\n        resolvedQueryParams: (0, _emberMetal.computed)('queryParams', function computeLinkToComponentResolvedQueryParams() {\n            var resolvedQueryParams = {};\n            var queryParams = (0, _emberMetal.get)(this, 'queryParams');\n            if (!queryParams) {\n                return resolvedQueryParams;\n            }\n            var values = queryParams.values;\n            for (var key in values) {\n                if (!values.hasOwnProperty(key)) {\n                    continue;\n                }\n                resolvedQueryParams[key] = values[key];\n            }\n            return resolvedQueryParams;\n        }),\n        /**\n          Sets the element's `href` attribute to the url for\n          the `LinkComponent`'s targeted route.\n             If the `LinkComponent`'s `tagName` is changed to a value other\n          than `a`, this property will be ignored.\n             @property href\n          @private\n        */\n        href: (0, _emberMetal.computed)('models', 'qualifiedRouteName', function computeLinkToComponentHref() {\n            if ((0, _emberMetal.get)(this, 'tagName') !== 'a') {\n                return;\n            }\n            var qualifiedRouteName = (0, _emberMetal.get)(this, 'qualifiedRouteName');\n            var models = (0, _emberMetal.get)(this, 'models');\n            if ((0, _emberMetal.get)(this, 'loading')) {\n                return (0, _emberMetal.get)(this, 'loadingHref');\n            }\n            var routing = (0, _emberMetal.get)(this, '_routing');\n            var queryParams = (0, _emberMetal.get)(this, 'queryParams.values');\n            if (true) {\n                /*\n                 * Unfortunately, to get decent error messages, we need to do this.\n                 * In some future state we should be able to use a \"feature flag\"\n                 * which allows us to strip this without needing to call it twice.\n                 *\n                 * if (isDebugBuild()) {\n                 *   // Do the useful debug thing, probably including try/catch.\n                 * } else {\n                 *   // Do the performant thing.\n                 * }\n                 */\n                try {\n                    routing.generateURL(qualifiedRouteName, models, queryParams);\n                } catch (e) {\n                    (true && !(false) && (0, _emberDebug.assert)('You attempted to define a `{{link-to \"' + qualifiedRouteName + '\"}}` but did not pass the parameters required for generating its dynamic segments. ' + e.message));\n                }\n            }\n            return routing.generateURL(qualifiedRouteName, models, queryParams);\n        }),\n        loading: (0, _emberMetal.computed)('_modelsAreLoaded', 'qualifiedRouteName', function computeLinkToComponentLoading() {\n            var qualifiedRouteName = (0, _emberMetal.get)(this, 'qualifiedRouteName');\n            var modelsAreLoaded = (0, _emberMetal.get)(this, '_modelsAreLoaded');\n            if (!modelsAreLoaded || qualifiedRouteName === null || qualifiedRouteName === undefined) {\n                return (0, _emberMetal.get)(this, 'loadingClass');\n            }\n        }),\n        _modelsAreLoaded: (0, _emberMetal.computed)('models', function computeLinkToComponentModelsAreLoaded() {\n            var models = (0, _emberMetal.get)(this, 'models');\n            for (var i = 0; i < models.length; i++) {\n                var model = models[i];\n                if (model === null || model === undefined) {\n                    return false;\n                }\n            }\n            return true;\n        }),\n        _getModels: function (params) {\n            var modelCount = params.length - 1;\n            var models = new Array(modelCount);\n            for (var i = 0; i < modelCount; i++) {\n                var value = params[i + 1];\n                models[i] = value;\n            }\n            return models;\n        },\n\n        /**\n          The default href value to use while a link-to is loading.\n          Only applies when tagName is 'a'\n             @property loadingHref\n          @type String\n          @default #\n          @private\n        */\n        loadingHref: '#',\n        didReceiveAttrs: function () {\n            var queryParams = void 0;\n            var params = (0, _emberMetal.get)(this, 'params');\n            if (params) {\n                // Do not mutate params in place\n                params = params.slice();\n            }\n            (true && !(params && params.length) && (0, _emberDebug.assert)('You must provide one or more parameters to the link-to component.', params && params.length));\n\n            var disabledWhen = (0, _emberMetal.get)(this, 'disabledWhen');\n            if (disabledWhen !== undefined) {\n                this.set('disabled', disabledWhen);\n            }\n            // Process the positional arguments, in order.\n            // 1. Inline link title comes first, if present.\n            if (!this[HAS_BLOCK]) {\n                this.set('linkTitle', params.shift());\n            }\n            // 2. `targetRouteName` is now always at index 0.\n            this.set('targetRouteName', params[0]);\n            // 3. The last argument (if still remaining) is the `queryParams` object.\n            var lastParam = params[params.length - 1];\n            if (lastParam && lastParam.isQueryParams) {\n                queryParams = params.pop();\n            } else {\n                queryParams = { values: {} };\n            }\n            this.set('queryParams', queryParams);\n            // 4. Any remaining indices (excepting `targetRouteName` at 0) are `models`.\n            if (params.length > 1) {\n                this.set('models', this._getModels(params));\n            } else {\n                this.set('models', []);\n            }\n        }\n    });\n    LinkComponent.toString = function () {\n        return '@ember/routing/link-component';\n    };\n    LinkComponent.reopenClass({\n        positionalParams: 'params'\n    });\n\n    // @ts-check\n    var DebugStack = void 0;\n    if (true) {\n        var Element = function Element(name) {\n            (0, _emberBabel.classCallCheck)(this, Element);\n\n            this.name = name;\n        };\n\n        var TemplateElement = function (_Element) {\n            (0, _emberBabel.inherits)(TemplateElement, _Element);\n\n            function TemplateElement() {\n                (0, _emberBabel.classCallCheck)(this, TemplateElement);\n                return (0, _emberBabel.possibleConstructorReturn)(this, _Element.apply(this, arguments));\n            }\n\n            return TemplateElement;\n        }(Element);\n\n        var EngineElement = function (_Element2) {\n            (0, _emberBabel.inherits)(EngineElement, _Element2);\n\n            function EngineElement() {\n                (0, _emberBabel.classCallCheck)(this, EngineElement);\n                return (0, _emberBabel.possibleConstructorReturn)(this, _Element2.apply(this, arguments));\n            }\n\n            return EngineElement;\n        }(Element);\n\n        // tslint:disable-next-line:no-shadowed-variable\n        DebugStack = function () {\n            function DebugStack() {\n                (0, _emberBabel.classCallCheck)(this, DebugStack);\n\n                this._stack = [];\n            }\n\n            DebugStack.prototype.push = function push(name) {\n                this._stack.push(new TemplateElement(name));\n            };\n\n            DebugStack.prototype.pushEngine = function pushEngine(name) {\n                this._stack.push(new EngineElement(name));\n            };\n\n            DebugStack.prototype.pop = function pop() {\n                var element = this._stack.pop();\n                if (element) {\n                    return element.name;\n                }\n            };\n\n            DebugStack.prototype.peek = function peek() {\n                var template = this._currentTemplate();\n                var engine = this._currentEngine();\n                if (engine) {\n                    return '\"' + template + '\" (in \"' + engine + '\")';\n                } else if (template) {\n                    return '\"' + template + '\"';\n                }\n            };\n\n            DebugStack.prototype._currentTemplate = function _currentTemplate() {\n                return this._getCurrentByType(TemplateElement);\n            };\n\n            DebugStack.prototype._currentEngine = function _currentEngine() {\n                return this._getCurrentByType(EngineElement);\n            };\n\n            DebugStack.prototype._getCurrentByType = function _getCurrentByType(type) {\n                for (var i = this._stack.length; i >= 0; i--) {\n                    var element = this._stack[i];\n                    if (element instanceof type) {\n                        return element.name;\n                    }\n                }\n            };\n\n            return DebugStack;\n        }();\n    }\n    var DebugStack$1 = DebugStack;\n\n    /**\n      The `{{#each}}` helper loops over elements in a collection. It is an extension\n      of the base Handlebars `{{#each}}` helper.\n      The default behavior of `{{#each}}` is to yield its inner block once for every\n      item in an array passing the item as the first block parameter.\n    \n      ```javascript\n      var developers = [{ name: 'Yehuda' },{ name: 'Tom' }, { name: 'Paul' }];\n      ```\n    \n      ```handlebars\n      {{#each developers key=\"name\" as |person|}}\n        {{person.name}}\n        {{! `this` is whatever it was outside the #each }}\n      {{/each}}\n      ```\n    \n      The same rules apply to arrays of primitives.\n    \n      ```javascript\n      var developerNames = ['Yehuda', 'Tom', 'Paul']\n      ```\n    \n      ```handlebars\n      {{#each developerNames key=\"@index\" as |name|}}\n        {{name}}\n      {{/each}}\n      ```\n    \n      During iteration, the index of each item in the array is provided as a second block parameter.\n    \n      ```handlebars\n      <ul>\n        {{#each people as |person index|}}\n          <li>Hello, {{person.name}}! You're number {{index}} in line</li>\n        {{/each}}\n      </ul>\n      ```\n    \n      ### Specifying Keys\n    \n      The `key` option is used to tell Ember how to determine if the array being\n      iterated over with `{{#each}}` has changed between renders. By helping Ember\n      detect that some elements in the array are the same, DOM elements can be\n      re-used, significantly improving rendering speed.\n    \n      For example, here's the `{{#each}}` helper with its `key` set to `id`:\n    \n      ```handlebars\n      {{#each model key=\"id\" as |item|}}\n      {{/each}}\n      ```\n    \n      When this `{{#each}}` re-renders, Ember will match up the previously rendered\n      items (and reorder the generated DOM elements) based on each item's `id`\n      property.\n      By default the item's own reference is used.\n    \n      ### {{else}} condition\n    \n      `{{#each}}` can have a matching `{{else}}`. The contents of this block will render\n      if the collection is empty.\n    \n      ```handlebars\n      {{#each developers as |person|}}\n        {{person.name}}\n      {{else}}\n        <p>Sorry, nobody is available for this task.</p>\n      {{/each}}\n      ```\n    \n      @method each\n      @for Ember.Templates.helpers\n      @public\n     */\n    /**\n      The `{{each-in}}` helper loops over properties on an object.\n    \n      For example, given a `user` object that looks like:\n    \n      ```javascript\n      {\n        \"name\": \"Shelly Sails\",\n        \"age\": 42\n      }\n      ```\n    \n      This template would display all properties on the `user`\n      object in a list:\n    \n      ```handlebars\n      <ul>\n      {{#each-in user as |key value|}}\n        <li>{{key}}: {{value}}</li>\n      {{/each-in}}\n      </ul>\n      ```\n    \n      Outputting their name and age.\n    \n      @method each-in\n      @for Ember.Templates.helpers\n      @public\n      @since 2.1.0\n    */\n    var EACH_IN_REFERENCE = (0, _emberUtils.symbol)('EACH_IN');\n    function isEachIn(ref) {\n        return ref && ref[EACH_IN_REFERENCE];\n    }\n    var eachIn = function (_vm, args) {\n        var ref = Object.create(args.positional.at(0));\n        ref[EACH_IN_REFERENCE] = true;\n        return ref;\n    };\n\n    var ITERATOR_KEY_GUID = 'be277757-bbbe-4620-9fcb-213ef433cca2';\n    function _iterableFor(ref, keyPath) {\n        if (isEachIn(ref)) {\n            return new EachInIterable(ref, keyForEachIn(keyPath));\n        } else {\n            return new ArrayIterable(ref, keyForArray(keyPath));\n        }\n    }\n    function keyForEachIn(keyPath) {\n        switch (keyPath) {\n            case '@index':\n            case undefined:\n            case null:\n                return index;\n            case '@identity':\n                return identity;\n            default:\n                return function (item) {\n                    return (0, _emberMetal.get)(item, keyPath);\n                };\n        }\n    }\n    function keyForArray(keyPath) {\n        switch (keyPath) {\n            case '@index':\n                return index;\n            case '@identity':\n            case undefined:\n            case null:\n                return identity;\n            default:\n                return function (item) {\n                    return (0, _emberMetal.get)(item, keyPath);\n                };\n        }\n    }\n    function index(_item, i) {\n        return String(i);\n    }\n    function identity(item) {\n        switch (typeof item) {\n            case 'string':\n            case 'number':\n                return String(item);\n            default:\n                return (0, _emberUtils.guidFor)(item);\n        }\n    }\n    function ensureUniqueKey(seen, key) {\n        var seenCount = seen[key];\n        if (seenCount > 0) {\n            seen[key]++;\n            return '' + key + ITERATOR_KEY_GUID + seenCount;\n        } else {\n            seen[key] = 1;\n        }\n        return key;\n    }\n\n    var ArrayIterator = function () {\n        function ArrayIterator(array, length, keyFor) {\n            (0, _emberBabel.classCallCheck)(this, ArrayIterator);\n\n            this.array = array;\n            this.length = length;\n            this.keyFor = keyFor;\n            this.position = 0;\n            this.seen = Object.create(null);\n        }\n\n        ArrayIterator.from = function from(array, keyFor) {\n            var length = array.length;\n\n            if (length > 0) {\n                return new this(array, array.length, keyFor);\n            } else {\n                return EMPTY_ITERATOR;\n            }\n        };\n\n        ArrayIterator.prototype.isEmpty = function isEmpty() {\n            return false;\n        };\n\n        ArrayIterator.prototype.getMemo = function getMemo(position) {\n            return position;\n        };\n\n        ArrayIterator.prototype.getValue = function getValue(position) {\n            return this.array[position];\n        };\n\n        ArrayIterator.prototype.next = function next() {\n            var length = this.length,\n                keyFor = this.keyFor,\n                position = this.position,\n                seen = this.seen;\n\n            if (position >= length) {\n                return null;\n            }\n            var value = this.getValue(position);\n            var memo = this.getMemo(position);\n            var key = ensureUniqueKey(seen, keyFor(value, memo));\n            this.position++;\n            return { key: key, value: value, memo: memo };\n        };\n\n        return ArrayIterator;\n    }();\n\n    var EmberArrayIterator = function (_ArrayIterator) {\n        (0, _emberBabel.inherits)(EmberArrayIterator, _ArrayIterator);\n\n        EmberArrayIterator.from = function from(array, keyFor) {\n            var length = (0, _emberMetal.get)(array, 'length');\n            if (length > 0) {\n                return new this(array, length, keyFor);\n            } else {\n                return EMPTY_ITERATOR;\n            }\n        };\n\n        function EmberArrayIterator(array, length, keyFor) {\n            (0, _emberBabel.classCallCheck)(this, EmberArrayIterator);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _ArrayIterator.call(this, array, length, keyFor));\n        }\n\n        EmberArrayIterator.prototype.getValue = function getValue(position) {\n            return (0, _emberMetal.objectAt)(this.array, position);\n        };\n\n        return EmberArrayIterator;\n    }(ArrayIterator);\n\n    var ObjectKeysIterator = function (_ArrayIterator2) {\n        (0, _emberBabel.inherits)(ObjectKeysIterator, _ArrayIterator2);\n\n        function ObjectKeysIterator(keys, values, length, keyFor) {\n            (0, _emberBabel.classCallCheck)(this, ObjectKeysIterator);\n\n            var _this17 = (0, _emberBabel.possibleConstructorReturn)(this, _ArrayIterator2.call(this, values, length, keyFor));\n\n            _this17.keys = keys;\n            return _this17;\n        }\n\n        ObjectKeysIterator.from = function from(obj, keyFor) {\n            var keys = Object.keys(obj);\n            var length = keys.length;\n\n            if (length > 0) {\n                return new this(keys, keys.map(function (key) {\n                    return obj[key];\n                }), length, keyFor);\n            } else {\n                return EMPTY_ITERATOR;\n            }\n        };\n\n        ObjectKeysIterator.prototype.getMemo = function getMemo(position) {\n            return this.keys[position];\n        };\n\n        return ObjectKeysIterator;\n    }(ArrayIterator);\n\n    var EmptyIterator = function () {\n        function EmptyIterator() {\n            (0, _emberBabel.classCallCheck)(this, EmptyIterator);\n        }\n\n        EmptyIterator.prototype.isEmpty = function isEmpty() {\n            return true;\n        };\n\n        EmptyIterator.prototype.next = function next() {\n            throw new Error('Cannot call next() on an empty iterator');\n        };\n\n        return EmptyIterator;\n    }();\n\n    var EMPTY_ITERATOR = new EmptyIterator();\n\n    var EachInIterable = function () {\n        function EachInIterable(ref, keyFor) {\n            (0, _emberBabel.classCallCheck)(this, EachInIterable);\n\n            this.ref = ref;\n            this.keyFor = keyFor;\n            var valueTag = this.valueTag = _reference.UpdatableTag.create(_reference.CONSTANT_TAG);\n            this.tag = (0, _reference.combine)([ref.tag, valueTag]);\n        }\n\n        EachInIterable.prototype.iterate = function iterate() {\n            var ref = this.ref,\n                keyFor = this.keyFor,\n                valueTag = this.valueTag;\n\n            var iterable = ref.value();\n            var tag = (0, _emberMetal.tagFor)(iterable);\n            if ((0, _emberMetal.isProxy)(iterable)) {\n                // this is because the each-in doesn't actually get(proxy, 'key') but bypasses it\n                // and the proxy's tag is lazy updated on access\n                iterable = (0, _emberRuntime._contentFor)(iterable);\n            }\n            valueTag.inner.update(tag);\n            var typeofIterable = typeof iterable;\n            if (iterable !== null && (typeofIterable === 'object' || typeofIterable === 'function')) {\n                return ObjectKeysIterator.from(iterable, keyFor);\n            } else {\n                return EMPTY_ITERATOR;\n            }\n        };\n\n        EachInIterable.prototype.valueReferenceFor = function valueReferenceFor(item) {\n            return new UpdatablePrimitiveReference(item.memo);\n        };\n\n        EachInIterable.prototype.updateValueReference = function updateValueReference(reference$$1, item) {\n            reference$$1.update(item.memo);\n        };\n\n        EachInIterable.prototype.memoReferenceFor = function memoReferenceFor(item) {\n            return new UpdatableReference(item.value);\n        };\n\n        EachInIterable.prototype.updateMemoReference = function updateMemoReference(reference$$1, item) {\n            reference$$1.update(item.value);\n        };\n\n        return EachInIterable;\n    }();\n\n    var ArrayIterable = function () {\n        function ArrayIterable(ref, keyFor) {\n            (0, _emberBabel.classCallCheck)(this, ArrayIterable);\n\n            this.ref = ref;\n            this.keyFor = keyFor;\n            var valueTag = this.valueTag = _reference.UpdatableTag.create(_reference.CONSTANT_TAG);\n            this.tag = (0, _reference.combine)([ref.tag, valueTag]);\n        }\n\n        ArrayIterable.prototype.iterate = function iterate() {\n            var ref = this.ref,\n                keyFor = this.keyFor,\n                valueTag = this.valueTag;\n\n            var iterable = ref.value();\n            valueTag.inner.update((0, _emberMetal.tagForProperty)(iterable, '[]'));\n            if (iterable === null || typeof iterable !== 'object') {\n                return EMPTY_ITERATOR;\n            }\n            if (Array.isArray(iterable)) {\n                return ArrayIterator.from(iterable, keyFor);\n            } else if ((0, _emberRuntime.isEmberArray)(iterable)) {\n                return EmberArrayIterator.from(iterable, keyFor);\n            } else if (typeof iterable.forEach === 'function') {\n                var array = [];\n                iterable.forEach(function (item) {\n                    return array.push(item);\n                });\n                return ArrayIterator.from(array, keyFor);\n            } else {\n                return EMPTY_ITERATOR;\n            }\n        };\n\n        ArrayIterable.prototype.valueReferenceFor = function valueReferenceFor(item) {\n            return new UpdatableReference(item.value);\n        };\n\n        ArrayIterable.prototype.updateValueReference = function updateValueReference(reference$$1, item) {\n            reference$$1.update(item.value);\n        };\n\n        ArrayIterable.prototype.memoReferenceFor = function memoReferenceFor(item) {\n            return new UpdatablePrimitiveReference(item.memo);\n        };\n\n        ArrayIterable.prototype.updateMemoReference = function updateMemoReference(reference$$1, item) {\n            reference$$1.update(item.memo);\n        };\n\n        return ArrayIterable;\n    }();\n\n    var SafeString = function () {\n        function SafeString(string) {\n            (0, _emberBabel.classCallCheck)(this, SafeString);\n\n            this.string = string;\n        }\n\n        SafeString.prototype.toString = function toString() {\n            return '' + this.string;\n        };\n\n        SafeString.prototype.toHTML = function toHTML() {\n            return this.toString();\n        };\n\n        return SafeString;\n    }();\n\n    var escape = {\n        '&': '&amp;',\n        '<': '&lt;',\n        '>': '&gt;',\n        '\"': '&quot;',\n        \"'\": '&#x27;',\n        '`': '&#x60;',\n        '=': '&#x3D;'\n    };\n    var possible = /[&<>\"'`=]/;\n    var badChars = /[&<>\"'`=]/g;\n    function escapeChar(chr) {\n        return escape[chr];\n    }\n    function escapeExpression(string) {\n        if (typeof string !== 'string') {\n            // don't escape SafeStrings, since they're already safe\n            if (string && string.toHTML) {\n                return string.toHTML();\n            } else if (string === null || string === undefined) {\n                return '';\n            } else if (!string) {\n                return string + '';\n            }\n            // Force a string conversion as this will be done by the append regardless and\n            // the regex test will do this transparently behind the scenes, causing issues if\n            // an object's to string has escaped characters in it.\n            string = '' + string;\n        }\n        if (!possible.test(string)) {\n            return string;\n        }\n        return string.replace(badChars, escapeChar);\n    }\n    /**\n      Mark a string as safe for unescaped output with Ember templates. If you\n      return HTML from a helper, use this function to\n      ensure Ember's rendering layer does not escape the HTML.\n    \n      ```javascript\n      import { htmlSafe } from '@ember/string';\n    \n      htmlSafe('<div>someString</div>')\n      ```\n    \n      @method htmlSafe\n      @for @ember/template\n      @static\n      @return {Handlebars.SafeString} A string that will not be HTML escaped by Handlebars.\n      @public\n    */\n    function htmlSafe(str) {\n        if (str === null || str === undefined) {\n            str = '';\n        } else if (typeof str !== 'string') {\n            str = '' + str;\n        }\n        return new SafeString(str);\n    }\n    /**\n      Detects if a string was decorated using `htmlSafe`.\n    \n      ```javascript\n      import { htmlSafe, isHTMLSafe } from '@ember/string';\n    \n      var plainString = 'plain string',\n          safeString = htmlSafe('<div>someValue</div>');\n    \n      isHTMLSafe(plainString); // false\n      isHTMLSafe(safeString);  // true\n      ```\n    \n      @method isHTMLSafe\n      @for @ember/template\n      @static\n      @return {Boolean} `true` if the string was decorated with `htmlSafe`, `false` otherwise.\n      @public\n    */\n    function isHTMLSafe(str) {\n        return str !== null && typeof str === 'object' && typeof str.toHTML === 'function';\n    }\n\n    /* globals module, URL */\n    var nodeURL = void 0;\n    var parsingNode = void 0;\n    function installProtocolForURL(environment$$1) {\n        var protocol = void 0;\n        if (_emberEnvironment.environment.hasDOM) {\n            protocol = browserProtocolForURL.call(environment$$1, 'foobar:baz');\n        }\n        // Test to see if our DOM implementation parses\n        // and normalizes URLs.\n        if (protocol === 'foobar:') {\n            // Swap in the method that doesn't do this test now that\n            // we know it works.\n            environment$$1.protocolForURL = browserProtocolForURL;\n        } else if (typeof URL === 'object') {\n            // URL globally provided, likely from FastBoot's sandbox\n            nodeURL = URL;\n            environment$$1.protocolForURL = nodeProtocolForURL;\n        } else if (_nodeModule.IS_NODE) {\n            // Otherwise, we need to fall back to our own URL parsing.\n            // Global `require` is shadowed by Ember's loader so we have to use the fully\n            // qualified `module.require`.\n            // tslint:disable-next-line:no-require-imports\n            nodeURL = (0, _nodeModule.require)('url');\n            environment$$1.protocolForURL = nodeProtocolForURL;\n        } else {\n            throw new Error('Could not find valid URL parsing mechanism for URL Sanitization');\n        }\n    }\n    function browserProtocolForURL(url) {\n        if (!parsingNode) {\n            parsingNode = document.createElement('a');\n        }\n        parsingNode.href = url;\n        return parsingNode.protocol;\n    }\n    function nodeProtocolForURL(url) {\n        var protocol = null;\n        if (typeof url === 'string') {\n            protocol = nodeURL.parse(url).protocol;\n        }\n        return protocol === null ? ':' : protocol;\n    }\n\n    var Environment$1 = function (_Environment) {\n        (0, _emberBabel.inherits)(Environment$1, _Environment);\n\n        Environment$1.create = function create(options) {\n            return new this(options);\n        };\n\n        // private _definitionCache: Cache<{\n        //   name: string;\n        //   source: string;\n        //   owner: Container;\n        // }, CurlyComponentDefinition | TemplateOnlyComponentDefinition | undefined>;\n        // private _templateCache: Cache<{\n        //   Template: WrappedTemplateFactory | OwnedTemplate;\n        //   owner: Container;\n        // }, OwnedTemplate>;\n        // private _compilerCache: Cache<CompilerFactory, Cache<OwnedTemplate, CompiledDynamicProgram>>;\n        function Environment$1(injections) {\n            (0, _emberBabel.classCallCheck)(this, Environment$1);\n\n            var _this18 = (0, _emberBabel.possibleConstructorReturn)(this, _Environment.call(this, injections));\n\n            _this18.owner = injections[_emberUtils.OWNER];\n            _this18.isInteractive = _this18.owner.lookup('-environment:main').isInteractive;\n            // can be removed once https://github.com/tildeio/glimmer/pull/305 lands\n            _this18.destroyedComponents = [];\n            installProtocolForURL(_this18);\n            // this._definitionCache = new Cache(2000, ({ name, source, owner }) => {\n            //   let { component: componentFactory, layout } = lookupComponent(owner, name, { source });\n            //   let customManager: any;\n            //   if (ENV._TEMPLATE_ONLY_GLIMMER_COMPONENTS && layout && !componentFactory) {\n            //     return new TemplateOnlyComponentDefinition(name, layout);\n            //   } else if (componentFactory || layout) {\n            //     if (GLIMMER_CUSTOM_COMPONENT_MANAGER) {\n            //       let managerId = layout && layout.meta.managerId;\n            //       if (managerId) {\n            //         customManager = owner.factoryFor<any>(`component-manager:${managerId}`).class;\n            //       }\n            //     }\n            //     return new CurlyComponentDefinition(name, componentFactory, layout, undefined, customManager);\n            //   }\n            //   return undefined;\n            // }, ({ name, source, owner }) => {\n            //   let expandedName = source && this._resolveLocalLookupName(name, source, owner) || name;\n            //   let ownerGuid = guidFor(owner);\n            //   return ownerGuid + '|' + expandedName;\n            // });\n            // this._templateCache = new Cache(1000, ({ Template, owner }) => {\n            //   if (isTemplateFactory(Template)) {\n            //     // we received a factory\n            //     return Template.create({ env: this, [OWNER]: owner });\n            //   } else {\n            //     // we were provided an instance already\n            //     return Template;\n            //   }\n            // }, ({ Template, owner }) => guidFor(owner) + '|' + Template.id);\n            // this._compilerCache = new Cache(10, (Compiler) => {\n            //   return new Cache(2000, (template) => {\n            //     let compilable = new Compiler(template);\n            //     return compileLayout(compilable, this);\n            //   }, (template) => {\n            //     let owner = template.meta.owner;\n            //     return guidFor(owner) + '|' + template.id;\n            //   });\n            // }, (Compiler) => Compiler.id);\n            // this.builtInModifiers = {\n            //   action: new ActionModifierManager(),\n            // };\n            // this.builtInHelpers = {\n            //   'if': inlineIf,\n            //   action,\n            //   concat,\n            //   get,\n            //   hash,\n            //   log,\n            //   mut,\n            //   'query-params': queryParams,\n            //   readonly,\n            //   unbound,\n            //   'unless': inlineUnless,\n            //   '-class': classHelper,\n            //   '-each-in': eachIn,\n            //   '-input-type': inputTypeHelper,\n            //   '-normalize-class': normalizeClassHelper,\n            //   '-html-safe': htmlSafeHelper,\n            //   '-get-dynamic-var': getDynamicVar,\n            // };\n            if (true) {\n                _this18.debugStack = new DebugStack$1();\n            }\n            return _this18;\n        }\n        // this gets clobbered by installPlatformSpecificProtocolForURL\n        // it really should just delegate to a platform specific injection\n\n\n        Environment$1.prototype.protocolForURL = function protocolForURL(s) {\n            return s;\n        };\n\n        Environment$1.prototype._resolveLocalLookupName = function _resolveLocalLookupName(name, source, owner) {\n            return _features.EMBER_MODULE_UNIFICATION ? source + ':' + name : owner._resolveLocalLookupName(name, source);\n        };\n\n        Environment$1.prototype.lookupComponent = function lookupComponent(name, meta) {\n            return (0, _emberViews.lookupComponent)(meta.owner, name, meta);\n        };\n\n        Environment$1.prototype.toConditionalReference = function toConditionalReference(reference$$1) {\n            return ConditionalReference$1.create(reference$$1);\n        };\n\n        Environment$1.prototype.iterableFor = function iterableFor(ref, key) {\n            return _iterableFor(ref, key);\n        };\n\n        Environment$1.prototype.scheduleInstallModifier = function scheduleInstallModifier(modifier, manager) {\n            if (this.isInteractive) {\n                _Environment.prototype.scheduleInstallModifier.call(this, modifier, manager);\n            }\n        };\n\n        Environment$1.prototype.scheduleUpdateModifier = function scheduleUpdateModifier(modifier, manager) {\n            if (this.isInteractive) {\n                _Environment.prototype.scheduleUpdateModifier.call(this, modifier, manager);\n            }\n        };\n\n        Environment$1.prototype.didDestroy = function didDestroy(destroyable) {\n            destroyable.destroy();\n        };\n\n        Environment$1.prototype.begin = function begin() {\n            this.inTransaction = true;\n            _Environment.prototype.begin.call(this);\n        };\n\n        Environment$1.prototype.commit = function commit() {\n            var destroyedComponents = this.destroyedComponents;\n            this.destroyedComponents = [];\n            // components queued for destruction must be destroyed before firing\n            // `didCreate` to prevent errors when removing and adding a component\n            // with the same name (would throw an error when added to view registry)\n            for (var i = 0; i < destroyedComponents.length; i++) {\n                destroyedComponents[i].destroy();\n            }\n            try {\n                _Environment.prototype.commit.call(this);\n            } finally {\n                this.inTransaction = false;\n            }\n        };\n\n        return Environment$1;\n    }(_runtime.Environment);\n\n    if (true) {\n        var StyleAttributeManager = function (_SimpleDynamicAttribu) {\n            (0, _emberBabel.inherits)(StyleAttributeManager, _SimpleDynamicAttribu);\n\n            function StyleAttributeManager() {\n                (0, _emberBabel.classCallCheck)(this, StyleAttributeManager);\n                return (0, _emberBabel.possibleConstructorReturn)(this, _SimpleDynamicAttribu.apply(this, arguments));\n            }\n\n            StyleAttributeManager.prototype.set = function set(dom, value, env) {\n                (true && (0, _emberDebug.warn)((0, _emberViews.constructStyleDeprecationMessage)(value), function () {\n                    if (value === null || value === undefined || isHTMLSafe(value)) {\n                        return true;\n                    }\n                    return false;\n                }(), { id: 'ember-htmlbars.style-xss-warning' }));\n\n                _SimpleDynamicAttribu.prototype.set.call(this, dom, value, env);\n            };\n\n            StyleAttributeManager.prototype.update = function update(value, env) {\n                (true && (0, _emberDebug.warn)((0, _emberViews.constructStyleDeprecationMessage)(value), function () {\n                    if (value === null || value === undefined || isHTMLSafe(value)) {\n                        return true;\n                    }\n                    return false;\n                }(), { id: 'ember-htmlbars.style-xss-warning' }));\n\n                _SimpleDynamicAttribu.prototype.update.call(this, value, env);\n            };\n\n            return StyleAttributeManager;\n        }(_runtime.SimpleDynamicAttribute);\n\n        Environment$1.prototype.attributeFor = function (element, attribute, isTrusting, namespace) {\n            if (attribute === 'style' && !isTrusting) {\n                return new StyleAttributeManager({ element: element, name: attribute, namespace: namespace });\n            }\n            return _runtime.Environment.prototype.attributeFor.call(this, element, attribute, isTrusting, namespace);\n        };\n    }\n\n    // implements the ComponentManager interface as defined in glimmer:\n    // tslint:disable-next-line:max-line-length\n    // https://github.com/glimmerjs/glimmer-vm/blob/v0.24.0-beta.4/packages/%40glimmer/runtime/lib/component/interfaces.ts#L21\n\n    var AbstractManager = function () {\n        function AbstractManager() {\n            (0, _emberBabel.classCallCheck)(this, AbstractManager);\n\n            this.debugStack = undefined;\n        }\n\n        AbstractManager.prototype.prepareArgs = function prepareArgs(_state, _args) {\n            return null;\n        };\n\n        AbstractManager.prototype.didCreateElement = function didCreateElement(_component, _element, _operations) {}\n        // noop\n\n        // inheritors should also call `this.debugStack.pop()` to\n        // ensure the rerendering assertion messages are properly\n        // maintained\n        ;\n\n        AbstractManager.prototype.didRenderLayout = function didRenderLayout(_component, _bounds) {\n            // noop\n        };\n\n        AbstractManager.prototype.didCreate = function didCreate(_bucket) {}\n        // noop\n\n        // inheritors should also call `this._pushToDebugStack`\n        // to ensure the rerendering assertion messages are\n        // properly maintained\n        ;\n\n        AbstractManager.prototype.update = function update(_bucket, _dynamicScope) {}\n        // noop\n\n        // inheritors should also call `this.debugStack.pop()` to\n        // ensure the rerendering assertion messages are properly\n        // maintained\n        ;\n\n        AbstractManager.prototype.didUpdateLayout = function didUpdateLayout(_bucket, _bounds) {\n            // noop\n        };\n\n        AbstractManager.prototype.didUpdate = function didUpdate(_bucket) {\n            // noop\n        };\n\n        return AbstractManager;\n    }();\n\n    if (true) {\n        AbstractManager.prototype._pushToDebugStack = function (name, environment$$1) {\n            this.debugStack = environment$$1.debugStack;\n            this.debugStack.push(name);\n        };\n        AbstractManager.prototype._pushEngineToDebugStack = function (name, environment$$1) {\n            this.debugStack = environment$$1.debugStack;\n            this.debugStack.pushEngine(name);\n        };\n    }\n\n    function instrumentationPayload(def) {\n        return { object: def.name + ':' + def.outlet };\n    }\n    var CAPABILITIES = {\n        dynamicLayout: false,\n        dynamicTag: false,\n        prepareArgs: false,\n        createArgs: false,\n        attributeHook: false,\n        elementHook: false\n    };\n\n    var OutletComponentManager = function (_AbstractManager) {\n        (0, _emberBabel.inherits)(OutletComponentManager, _AbstractManager);\n\n        function OutletComponentManager() {\n            (0, _emberBabel.classCallCheck)(this, OutletComponentManager);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractManager.apply(this, arguments));\n        }\n\n        OutletComponentManager.prototype.create = function create(environment$$1, definition, _args, dynamicScope) {\n            if (true) {\n                this._pushToDebugStack('template:' + definition.template.referrer.moduleName, environment$$1);\n            }\n            dynamicScope.outletState = definition.ref;\n            // this is only used for render helper which is legacy\n            if (dynamicScope.rootOutletState === undefined) {\n                dynamicScope.rootOutletState = dynamicScope.outletState;\n            }\n            var controller = definition.controller;\n            var self = controller === undefined ? _runtime.UNDEFINED_REFERENCE : new RootReference(controller);\n            return {\n                self: self,\n                finalize: (0, _emberMetal._instrumentStart)('render.outlet', instrumentationPayload, definition)\n            };\n        };\n\n        OutletComponentManager.prototype.layoutFor = function layoutFor(_state, _component, _env) {\n            throw new Error('Method not implemented.');\n        };\n\n        OutletComponentManager.prototype.getLayout = function getLayout(_ref, _resolver) {\n            var template = _ref.template;\n\n            // The router has already resolved the template\n            var layout = template.asLayout();\n            return {\n                handle: layout.compile(),\n                symbolTable: layout.symbolTable\n            };\n        };\n\n        OutletComponentManager.prototype.getCapabilities = function getCapabilities() {\n            return CAPABILITIES;\n        };\n\n        OutletComponentManager.prototype.getSelf = function getSelf(_ref2) {\n            var self = _ref2.self;\n\n            return self;\n        };\n\n        OutletComponentManager.prototype.getTag = function getTag() {\n            // an outlet has no hooks\n            return _reference.CONSTANT_TAG;\n        };\n\n        OutletComponentManager.prototype.didRenderLayout = function didRenderLayout(state) {\n            state.finalize();\n            if (true) {\n                this.debugStack.pop();\n            }\n        };\n\n        OutletComponentManager.prototype.getDestructor = function getDestructor() {\n            return null;\n        };\n\n        return OutletComponentManager;\n    }(AbstractManager);\n\n    var OUTLET_MANAGER = new OutletComponentManager();\n\n    var OutletComponentDefinition = function OutletComponentDefinition(state) {\n        var manager = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : OUTLET_MANAGER;\n        (0, _emberBabel.classCallCheck)(this, OutletComponentDefinition);\n\n        this.state = state;\n        this.manager = manager;\n    };\n\n    function createRootOutlet(outletView) {\n        if (_emberEnvironment.ENV._APPLICATION_TEMPLATE_WRAPPER) {\n            var WRAPPED_CAPABILITIES = (0, _emberUtils.assign)({}, CAPABILITIES, {\n                dynamicTag: true,\n                elementHook: true\n            });\n            var WrappedOutletComponentManager = function (_OutletComponentManag) {\n                (0, _emberBabel.inherits)(WrappedOutletComponentManager, _OutletComponentManag);\n\n                function WrappedOutletComponentManager() {\n                    (0, _emberBabel.classCallCheck)(this, WrappedOutletComponentManager);\n                    return (0, _emberBabel.possibleConstructorReturn)(this, _OutletComponentManag.apply(this, arguments));\n                }\n\n                WrappedOutletComponentManager.prototype.getTagName = function getTagName(_component) {\n                    return 'div';\n                };\n\n                WrappedOutletComponentManager.prototype.getLayout = function getLayout(state) {\n                    // The router has already resolved the template\n                    var template = state.template;\n                    var layout = template.asWrappedLayout();\n                    return {\n                        handle: layout.compile(),\n                        symbolTable: layout.symbolTable\n                    };\n                };\n\n                WrappedOutletComponentManager.prototype.getCapabilities = function getCapabilities() {\n                    return WRAPPED_CAPABILITIES;\n                };\n\n                WrappedOutletComponentManager.prototype.didCreateElement = function didCreateElement(component, element, _operations) {\n                    // to add GUID id and class\n                    element.setAttribute('class', 'ember-view');\n                    element.setAttribute('id', (0, _emberUtils.guidFor)(component));\n                };\n\n                return WrappedOutletComponentManager;\n            }(OutletComponentManager);\n            var WRAPPED_OUTLET_MANAGER = new WrappedOutletComponentManager();\n            return new OutletComponentDefinition(outletView.state, WRAPPED_OUTLET_MANAGER);\n        } else {\n            return new OutletComponentDefinition(outletView.state);\n        }\n    }\n\n    // tslint:disable-next-line:no-empty\n    function NOOP$1() {}\n    /**\n      @module ember\n    */\n    /**\n      Represents the internal state of the component.\n    \n      @class ComponentStateBucket\n      @private\n    */\n\n    var ComponentStateBucket = function () {\n        function ComponentStateBucket(environment$$1, component, args, finalizer) {\n            (0, _emberBabel.classCallCheck)(this, ComponentStateBucket);\n\n            this.environment = environment$$1;\n            this.component = component;\n            this.args = args;\n            this.finalizer = finalizer;\n            this.classRef = null;\n            this.classRef = null;\n            this.argsRevision = args === null ? 0 : args.tag.value();\n        }\n\n        ComponentStateBucket.prototype.destroy = function destroy() {\n            var component = this.component,\n                environment$$1 = this.environment;\n\n            if (environment$$1.isInteractive) {\n                component.trigger('willDestroyElement');\n                component.trigger('willClearRender');\n            }\n            environment$$1.destroyedComponents.push(component);\n        };\n\n        ComponentStateBucket.prototype.finalize = function finalize() {\n            var finalizer = this.finalizer;\n\n            finalizer();\n            this.finalizer = NOOP$1;\n        };\n\n        return ComponentStateBucket;\n    }();\n\n    function referenceForKey(component, key) {\n        return component[ROOT_REF].get(key);\n    }\n    function referenceForParts(component, parts) {\n        var isAttrs = parts[0] === 'attrs';\n        // TODO deprecate this\n        if (isAttrs) {\n            parts.shift();\n            if (parts.length === 1) {\n                return referenceForKey(component, parts[0]);\n            }\n        }\n        return referenceFromParts(component[ROOT_REF], parts);\n    }\n    // TODO we should probably do this transform at build time\n    function wrapComponentClassAttribute(hash) {\n        if (hash === null) {\n            return;\n        }\n        var keys = hash[0],\n            values = hash[1];\n\n        var index = keys === null ? -1 : keys.indexOf('class');\n        if (index !== -1) {\n            var value = values[index];\n            if (!Array.isArray(value)) {\n                return;\n            }\n            var type = value[0];\n\n            if (type === _wireFormat.Ops.Get || type === _wireFormat.Ops.MaybeLocal) {\n                var path = value[value.length - 1];\n                var propName = path[path.length - 1];\n                values[index] = [_wireFormat.Ops.Helper, '-class', [value, propName], null];\n            }\n        }\n    }\n    var AttributeBinding = {\n        parse: function (microsyntax) {\n            var colonIndex = microsyntax.indexOf(':');\n            if (colonIndex === -1) {\n                (true && !(microsyntax !== 'class') && (0, _emberDebug.assert)('You cannot use class as an attributeBinding, use classNameBindings instead.', microsyntax !== 'class'));\n\n                return [microsyntax, microsyntax, true];\n            } else {\n                var prop = microsyntax.substring(0, colonIndex);\n                var attribute = microsyntax.substring(colonIndex + 1);\n                (true && !(attribute !== 'class') && (0, _emberDebug.assert)('You cannot use class as an attributeBinding, use classNameBindings instead.', attribute !== 'class'));\n\n                return [prop, attribute, false];\n            }\n        },\n        install: function (_element, component, parsed, operations) {\n            var prop = parsed[0],\n                attribute = parsed[1],\n                isSimple = parsed[2];\n\n            if (attribute === 'id') {\n                var elementId = (0, _emberMetal.get)(component, prop);\n                if (elementId === undefined || elementId === null) {\n                    elementId = component.elementId;\n                }\n                elementId = _runtime.PrimitiveReference.create(elementId);\n                operations.setAttribute('id', elementId, true, null);\n                // operations.addStaticAttribute(element, 'id', elementId);\n                return;\n            }\n            var isPath = prop.indexOf('.') > -1;\n            var reference$$1 = isPath ? referenceForParts(component, prop.split('.')) : referenceForKey(component, prop);\n            (true && !(!(isSimple && isPath)) && (0, _emberDebug.assert)('Illegal attributeBinding: \\'' + prop + '\\' is not a valid attribute name.', !(isSimple && isPath)));\n\n            if (attribute === 'style') {\n                reference$$1 = new StyleBindingReference(reference$$1, referenceForKey(component, 'isVisible'));\n            }\n            operations.setAttribute(attribute, reference$$1, false, null);\n            // operations.addDynamicAttribute(element, attribute, reference, false);\n        }\n    };\n    var DISPLAY_NONE = 'display: none;';\n    var SAFE_DISPLAY_NONE = htmlSafe(DISPLAY_NONE);\n\n    var StyleBindingReference = function (_CachedReference) {\n        (0, _emberBabel.inherits)(StyleBindingReference, _CachedReference);\n\n        function StyleBindingReference(inner, isVisible) {\n            (0, _emberBabel.classCallCheck)(this, StyleBindingReference);\n\n            var _this22 = (0, _emberBabel.possibleConstructorReturn)(this, _CachedReference.call(this));\n\n            _this22.inner = inner;\n            _this22.isVisible = isVisible;\n            _this22.tag = (0, _reference.combine)([inner.tag, isVisible.tag]);\n            return _this22;\n        }\n\n        StyleBindingReference.prototype.compute = function compute() {\n            var value = this.inner.value();\n            var isVisible = this.isVisible.value();\n            if (isVisible !== false) {\n                return value;\n            } else if (!value) {\n                return SAFE_DISPLAY_NONE;\n            } else {\n                var style = value + ' ' + DISPLAY_NONE;\n                return isHTMLSafe(value) ? htmlSafe(style) : style;\n            }\n        };\n\n        return StyleBindingReference;\n    }(_reference.CachedReference);\n\n    var IsVisibleBinding = {\n        install: function (_element, component, operations) {\n            operations.setAttribute('style', (0, _reference.map)(referenceForKey(component, 'isVisible'), this.mapStyleValue), false, null);\n            // // the upstream type for addDynamicAttribute's `value` argument\n            // // appears to be incorrect. It is currently a Reference<string>, I\n            // // think it should be a Reference<string|null>.\n            // operations.addDynamicAttribute(element, 'style', ref as any as Reference<string>, false);\n        },\n        mapStyleValue: function (isVisible) {\n            return isVisible === false ? SAFE_DISPLAY_NONE : null;\n        }\n    };\n    var ClassNameBinding = {\n        install: function (_element, component, microsyntax, operations) {\n            var _microsyntax$split = microsyntax.split(':'),\n                prop = _microsyntax$split[0],\n                truthy = _microsyntax$split[1],\n                falsy = _microsyntax$split[2];\n\n            var isStatic = prop === '';\n            if (isStatic) {\n                operations.setAttribute('class', _runtime.PrimitiveReference.create(truthy), true, null);\n            } else {\n                var isPath = prop.indexOf('.') > -1;\n                var parts = isPath ? prop.split('.') : [];\n                var value = isPath ? referenceForParts(component, parts) : referenceForKey(component, prop);\n                var ref = void 0;\n                if (truthy === undefined) {\n                    ref = new SimpleClassNameBindingReference(value, isPath ? parts[parts.length - 1] : prop);\n                } else {\n                    ref = new ColonClassNameBindingReference(value, truthy, falsy);\n                }\n                operations.setAttribute('class', ref, false, null);\n                // // the upstream type for addDynamicAttribute's `value` argument\n                // // appears to be incorrect. It is currently a Reference<string>, I\n                // // think it should be a Reference<string|null>.\n                // operations.addDynamicAttribute(element, 'class', ref as any as Reference<string>, false);\n            }\n        }\n    };\n\n    var SimpleClassNameBindingReference = function (_CachedReference2) {\n        (0, _emberBabel.inherits)(SimpleClassNameBindingReference, _CachedReference2);\n\n        function SimpleClassNameBindingReference(inner, path) {\n            (0, _emberBabel.classCallCheck)(this, SimpleClassNameBindingReference);\n\n            var _this23 = (0, _emberBabel.possibleConstructorReturn)(this, _CachedReference2.call(this));\n\n            _this23.inner = inner;\n            _this23.path = path;\n            _this23.tag = inner.tag;\n            _this23.inner = inner;\n            _this23.path = path;\n            _this23.dasherizedPath = null;\n            return _this23;\n        }\n\n        SimpleClassNameBindingReference.prototype.compute = function compute() {\n            var value = this.inner.value();\n            if (value === true) {\n                var path = this.path,\n                    dasherizedPath = this.dasherizedPath;\n\n                return dasherizedPath || (this.dasherizedPath = _emberRuntime.String.dasherize(path));\n            } else if (value || value === 0) {\n                return String(value);\n            } else {\n                return null;\n            }\n        };\n\n        return SimpleClassNameBindingReference;\n    }(_reference.CachedReference);\n\n    var ColonClassNameBindingReference = function (_CachedReference3) {\n        (0, _emberBabel.inherits)(ColonClassNameBindingReference, _CachedReference3);\n\n        function ColonClassNameBindingReference(inner) {\n            var truthy = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n            var falsy = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n            (0, _emberBabel.classCallCheck)(this, ColonClassNameBindingReference);\n\n            var _this24 = (0, _emberBabel.possibleConstructorReturn)(this, _CachedReference3.call(this));\n\n            _this24.inner = inner;\n            _this24.truthy = truthy;\n            _this24.falsy = falsy;\n            _this24.tag = inner.tag;\n            return _this24;\n        }\n\n        ColonClassNameBindingReference.prototype.compute = function compute() {\n            var inner = this.inner,\n                truthy = this.truthy,\n                falsy = this.falsy;\n\n            return inner.value() ? truthy : falsy;\n        };\n\n        return ColonClassNameBindingReference;\n    }(_reference.CachedReference);\n\n    // ComponentArgs takes EvaluatedNamedArgs and converts them into the\n    // inputs needed by CurlyComponents (attrs and props, with mutable\n    // cells, etc).\n    function processComponentArgs(namedArgs) {\n        var keys = namedArgs.names;\n        var attrs = namedArgs.value();\n        var props = Object.create(null);\n        var args = Object.create(null);\n        props[ARGS] = args;\n        for (var i = 0; i < keys.length; i++) {\n            var name = keys[i];\n            var ref = namedArgs.get(name);\n            var value = attrs[name];\n            if (typeof value === 'function' && value[ACTION]) {\n                attrs[name] = value;\n            } else if (ref[UPDATE]) {\n                attrs[name] = new MutableCell(ref, value);\n            }\n            args[name] = ref;\n            props[name] = value;\n        }\n        props.attrs = attrs;\n        return props;\n    }\n    var REF = (0, _emberUtils.symbol)('REF');\n\n    var MutableCell = function () {\n        function MutableCell(ref, value) {\n            (0, _emberBabel.classCallCheck)(this, MutableCell);\n\n            this[_emberViews.MUTABLE_CELL] = true;\n            this[REF] = ref;\n            this.value = value;\n        }\n\n        MutableCell.prototype.update = function update(val) {\n            this[REF][UPDATE](val);\n        };\n\n        return MutableCell;\n    }();\n\n    function aliasIdToElementId(args, props) {\n        if (args.named.has('id')) {\n            (true && !(!args.named.has('elementId')) && (0, _emberDebug.assert)('You cannot invoke a component with both \\'id\\' and \\'elementId\\' at the same time.', !args.named.has('elementId')));\n\n            props.elementId = props.id;\n        }\n    }\n    function isTemplateFactory(template) {\n        return typeof template.create === 'function';\n    }\n    // We must traverse the attributeBindings in reverse keeping track of\n    // what has already been applied. This is essentially refining the concatenated\n    // properties applying right to left.\n    function applyAttributeBindings(element, attributeBindings, component, operations) {\n        var seen = [];\n        var i = attributeBindings.length - 1;\n        while (i !== -1) {\n            var binding = attributeBindings[i];\n            var parsed = AttributeBinding.parse(binding);\n            var attribute = parsed[1];\n            if (seen.indexOf(attribute) === -1) {\n                seen.push(attribute);\n                AttributeBinding.install(element, component, parsed, operations);\n            }\n            i--;\n        }\n        if (seen.indexOf('id') === -1) {\n            operations.setAttribute('id', _runtime.PrimitiveReference.create(component.elementId), true, null);\n        }\n        if (seen.indexOf('style') === -1) {\n            IsVisibleBinding.install(element, component, operations);\n        }\n    }\n    var DEFAULT_LAYOUT = (0, _container.privatize)(_templateObject);\n\n    var CurlyComponentManager = function (_AbstractManager2) {\n        (0, _emberBabel.inherits)(CurlyComponentManager, _AbstractManager2);\n\n        function CurlyComponentManager() {\n            (0, _emberBabel.classCallCheck)(this, CurlyComponentManager);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractManager2.apply(this, arguments));\n        }\n\n        CurlyComponentManager.prototype.getLayout = function getLayout(state, _resolver) {\n            return {\n                // TODO fix\n                handle: state.handle,\n                symbolTable: state.symbolTable\n            };\n        };\n\n        CurlyComponentManager.prototype.templateFor = function templateFor(component, resolver) {\n            var layout = (0, _emberMetal.get)(component, 'layout');\n            if (layout !== undefined) {\n                // This needs to be cached by template.id\n                if (isTemplateFactory(layout)) {\n                    return resolver.createTemplate(layout, (0, _emberUtils.getOwner)(component));\n                } else {\n                    // we were provided an instance already\n                    return layout;\n                }\n            }\n            var owner = (0, _emberUtils.getOwner)(component);\n            var layoutName = (0, _emberMetal.get)(component, 'layoutName');\n            if (layoutName) {\n                var _template = owner.lookup('template:' + layoutName);\n                if (_template) {\n                    return _template;\n                }\n            }\n            return owner.lookup(DEFAULT_LAYOUT);\n        };\n\n        CurlyComponentManager.prototype.getDynamicLayout = function getDynamicLayout(_ref3, resolver) {\n            var component = _ref3.component;\n\n            var template = this.templateFor(component, resolver);\n            var layout = template.asWrappedLayout();\n            return {\n                handle: layout.compile(),\n                symbolTable: layout.symbolTable\n            };\n        };\n\n        CurlyComponentManager.prototype.getTagName = function getTagName(state) {\n            var component = state.component;\n\n            if (component.tagName === '') {\n                return null;\n            }\n            return component && component.tagName || 'div';\n        };\n\n        CurlyComponentManager.prototype.getCapabilities = function getCapabilities(state) {\n            return state.capabilities;\n        };\n\n        CurlyComponentManager.prototype.prepareArgs = function prepareArgs(state, args) {\n            var positionalParams = state.ComponentClass.class.positionalParams;\n\n            // early exits\n            if (positionalParams === undefined || positionalParams === null || args.positional.length === 0) {\n                return null;\n            }\n            var named = void 0;\n            if (typeof positionalParams === 'string') {\n                var _named;\n\n                (true && !(!args.named.has(positionalParams)) && (0, _emberDebug.assert)('You cannot specify positional parameters and the hash argument `' + positionalParams + '`.', !args.named.has(positionalParams)));\n\n                named = (_named = {}, _named[positionalParams] = args.positional.capture(), _named);\n                (0, _emberUtils.assign)(named, args.named.capture().map);\n            } else if (Array.isArray(positionalParams) && positionalParams.length > 0) {\n                var count = Math.min(positionalParams.length, args.positional.length);\n                named = {};\n                (0, _emberUtils.assign)(named, args.named.capture().map);\n                for (var i = 0; i < count; i++) {\n                    var name = positionalParams[i];\n                    (true && !(!args.named.has(name)) && (0, _emberDebug.deprecate)('You cannot specify both a positional param (at position ' + i + ') and the hash argument `' + name + '`.', !args.named.has(name), {\n                        id: 'ember-glimmer.positional-param-conflict',\n                        until: '3.5.0'\n                    }));\n\n                    named[name] = args.positional.at(i);\n                }\n            } else {\n                return null;\n            }\n            return { positional: _util.EMPTY_ARRAY, named: named };\n        };\n\n        CurlyComponentManager.prototype.create = function create(environment$$1, state, args, dynamicScope, callerSelfRef, hasBlock) {\n            if (true) {\n                this._pushToDebugStack('component:' + state.name, environment$$1);\n            }\n            var parentView = dynamicScope.view;\n            var factory = state.ComponentClass;\n            var capturedArgs = args.named.capture();\n            var props = processComponentArgs(capturedArgs);\n            aliasIdToElementId(args, props);\n            props.parentView = parentView;\n            props[HAS_BLOCK] = hasBlock;\n            props._targetObject = callerSelfRef.value();\n            // static layout asserts CurriedDefinition\n            if (state.template) {\n                props.layout = state.template;\n            }\n            var component = factory.create(props);\n            var finalizer = (0, _emberMetal._instrumentStart)('render.component', initialRenderInstrumentDetails, component);\n            dynamicScope.view = component;\n            if (parentView !== null && parentView !== undefined) {\n                parentView.appendChild(component);\n            }\n            // We usually do this in the `didCreateElement`, but that hook doesn't fire for tagless components\n            if (component.tagName === '') {\n                if (environment$$1.isInteractive) {\n                    component.trigger('willRender');\n                }\n                component._transitionTo('hasElement');\n                if (environment$$1.isInteractive) {\n                    component.trigger('willInsertElement');\n                }\n            }\n            var bucket = new ComponentStateBucket(environment$$1, component, capturedArgs, finalizer);\n            if (args.named.has('class')) {\n                bucket.classRef = args.named.get('class');\n            }\n            if (true) {\n                processComponentInitializationAssertions(component, props);\n            }\n            if (environment$$1.isInteractive && component.tagName !== '') {\n                component.trigger('willRender');\n            }\n            return bucket;\n        };\n\n        CurlyComponentManager.prototype.getSelf = function getSelf(_ref4) {\n            var component = _ref4.component;\n\n            return component[ROOT_REF];\n        };\n\n        CurlyComponentManager.prototype.didCreateElement = function didCreateElement(_ref5, element, operations) {\n            var component = _ref5.component,\n                classRef = _ref5.classRef,\n                environment$$1 = _ref5.environment;\n\n            (0, _emberViews.setViewElement)(component, element);\n            var attributeBindings = component.attributeBindings,\n                classNames = component.classNames,\n                classNameBindings = component.classNameBindings;\n\n            operations.setAttribute('id', _runtime.PrimitiveReference.create((0, _emberUtils.guidFor)(component)), false, null);\n            if (attributeBindings && attributeBindings.length) {\n                applyAttributeBindings(element, attributeBindings, component, operations);\n            } else {\n                if (component.elementId) {\n                    operations.setAttribute('id', _runtime.PrimitiveReference.create(component.elementId), false, null);\n                }\n                IsVisibleBinding.install(element, component, operations);\n            }\n            if (classRef) {\n                var ref = new SimpleClassNameBindingReference(classRef, classRef['_propertyKey']);\n                operations.setAttribute('class', ref, false, null);\n            }\n            if (classNames && classNames.length) {\n                classNames.forEach(function (name) {\n                    operations.setAttribute('class', _runtime.PrimitiveReference.create(name), false, null);\n                });\n            }\n            if (classNameBindings && classNameBindings.length) {\n                classNameBindings.forEach(function (binding) {\n                    ClassNameBinding.install(element, component, binding, operations);\n                });\n            }\n            operations.setAttribute('class', _runtime.PrimitiveReference.create('ember-view'), false, null);\n            if ('ariaRole' in component) {\n                operations.setAttribute('role', referenceForKey(component, 'ariaRole'), false, null);\n            }\n            component._transitionTo('hasElement');\n            if (environment$$1.isInteractive) {\n                component.trigger('willInsertElement');\n            }\n        };\n\n        CurlyComponentManager.prototype.didRenderLayout = function didRenderLayout(bucket, bounds) {\n            bucket.component[BOUNDS] = bounds;\n            bucket.finalize();\n            if (true) {\n                this.debugStack.pop();\n            }\n        };\n\n        CurlyComponentManager.prototype.getTag = function getTag(_ref6) {\n            var args = _ref6.args,\n                component = _ref6.component;\n\n            return args ? (0, _reference.combine)([args.tag, component[DIRTY_TAG]]) : component[DIRTY_TAG];\n        };\n\n        CurlyComponentManager.prototype.didCreate = function didCreate(_ref7) {\n            var component = _ref7.component,\n                environment$$1 = _ref7.environment;\n\n            if (environment$$1.isInteractive) {\n                component._transitionTo('inDOM');\n                component.trigger('didInsertElement');\n                component.trigger('didRender');\n            }\n        };\n\n        CurlyComponentManager.prototype.update = function update(bucket) {\n            var component = bucket.component,\n                args = bucket.args,\n                argsRevision = bucket.argsRevision,\n                environment$$1 = bucket.environment;\n\n            if (true) {\n                this._pushToDebugStack(component._debugContainerKey, environment$$1);\n            }\n            bucket.finalizer = (0, _emberMetal._instrumentStart)('render.component', rerenderInstrumentDetails, component);\n            if (args && !args.tag.validate(argsRevision)) {\n                var props = processComponentArgs(args);\n                bucket.argsRevision = args.tag.value();\n                component[IS_DISPATCHING_ATTRS] = true;\n                component.setProperties(props);\n                component[IS_DISPATCHING_ATTRS] = false;\n                component.trigger('didUpdateAttrs');\n                component.trigger('didReceiveAttrs');\n            }\n            if (environment$$1.isInteractive) {\n                component.trigger('willUpdate');\n                component.trigger('willRender');\n            }\n        };\n\n        CurlyComponentManager.prototype.didUpdateLayout = function didUpdateLayout(bucket) {\n            bucket.finalize();\n            if (true) {\n                this.debugStack.pop();\n            }\n        };\n\n        CurlyComponentManager.prototype.didUpdate = function didUpdate(_ref8) {\n            var component = _ref8.component,\n                environment$$1 = _ref8.environment;\n\n            if (environment$$1.isInteractive) {\n                component.trigger('didUpdate');\n                component.trigger('didRender');\n            }\n        };\n\n        CurlyComponentManager.prototype.getDestructor = function getDestructor(stateBucket) {\n            return stateBucket;\n        };\n\n        return CurlyComponentManager;\n    }(AbstractManager);\n\n    function processComponentInitializationAssertions(component, props) {\n        (true && !(function () {\n            var classNameBindings = component.classNameBindings;\n\n            for (var i = 0; i < classNameBindings.length; i++) {\n                var binding = classNameBindings[i];\n                if (typeof binding !== 'string' || binding.length === 0) {\n                    return false;\n                }\n            }\n            return true;\n        }()) && (0, _emberDebug.assert)('classNameBindings must be non-empty strings: ' + component, function () {\n            var classNameBindings = component.classNameBindings;\n            for (var i = 0; i < classNameBindings.length; i++) {\n                var binding = classNameBindings[i];if (typeof binding !== 'string' || binding.length === 0) {\n                    return false;\n                }\n            }return true;\n        }()));\n        (true && !(function () {\n            var classNameBindings = component.classNameBindings;\n\n            for (var i = 0; i < classNameBindings.length; i++) {\n                var binding = classNameBindings[i];\n                if (binding.split(' ').length > 1) {\n                    return false;\n                }\n            }\n            return true;\n        }()) && (0, _emberDebug.assert)('classNameBindings must not have spaces in them: ' + component, function () {\n            var classNameBindings = component.classNameBindings;\n            for (var i = 0; i < classNameBindings.length; i++) {\n                var binding = classNameBindings[i];if (binding.split(' ').length > 1) {\n                    return false;\n                }\n            }return true;\n        }()));\n        (true && !(component.tagName !== '' || !component.classNameBindings || component.classNameBindings.length === 0) && (0, _emberDebug.assert)('You cannot use `classNameBindings` on a tag-less component: ' + component, component.tagName !== '' || !component.classNameBindings || component.classNameBindings.length === 0));\n        (true && !(component.tagName !== '' || props.id === component.elementId || !component.elementId && component.elementId !== '') && (0, _emberDebug.assert)('You cannot use `elementId` on a tag-less component: ' + component, component.tagName !== '' || props.id === component.elementId || !component.elementId && component.elementId !== ''));\n        (true && !(component.tagName !== '' || !component.attributeBindings || component.attributeBindings.length === 0) && (0, _emberDebug.assert)('You cannot use `attributeBindings` on a tag-less component: ' + component, component.tagName !== '' || !component.attributeBindings || component.attributeBindings.length === 0));\n    }\n    function initialRenderInstrumentDetails(component) {\n        return component.instrumentDetails({ initialRender: true });\n    }\n    function rerenderInstrumentDetails(component) {\n        return component.instrumentDetails({ initialRender: false });\n    }\n    var CURLY_CAPABILITIES = {\n        dynamicLayout: true,\n        dynamicTag: true,\n        prepareArgs: true,\n        createArgs: true,\n        attributeHook: true,\n        elementHook: true\n    };\n    var CURLY_COMPONENT_MANAGER = new CurlyComponentManager();\n\n    var CurlyComponentDefinition =\n    // tslint:disable-next-line:no-shadowed-variable\n    function CurlyComponentDefinition(name) {\n        var manager = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : CURLY_COMPONENT_MANAGER;\n        var ComponentClass = arguments[2];\n        var handle = arguments[3];\n        var template = arguments[4];\n        var args = arguments[5];\n        (0, _emberBabel.classCallCheck)(this, CurlyComponentDefinition);\n\n        this.name = name;\n        this.manager = manager;\n        this.ComponentClass = ComponentClass;\n        this.handle = handle;\n        var layout = template && template.asLayout();\n        var symbolTable = layout ? layout.symbolTable : undefined;\n        this.symbolTable = symbolTable;\n        this.template = template;\n        this.args = args;\n        this.state = {\n            name: name,\n            ComponentClass: ComponentClass,\n            handle: handle,\n            template: template,\n            capabilities: CURLY_CAPABILITIES,\n            symbolTable: symbolTable\n        };\n    };\n\n    var RootComponentManager = function (_CurlyComponentManage) {\n        (0, _emberBabel.inherits)(RootComponentManager, _CurlyComponentManage);\n\n        function RootComponentManager(component) {\n            (0, _emberBabel.classCallCheck)(this, RootComponentManager);\n\n            var _this26 = (0, _emberBabel.possibleConstructorReturn)(this, _CurlyComponentManage.call(this));\n\n            _this26.component = component;\n            return _this26;\n        }\n\n        RootComponentManager.prototype.getLayout = function getLayout(_state, resolver) {\n            var template = this.templateFor(this.component, resolver);\n            var layout = template.asWrappedLayout();\n            return {\n                handle: layout.compile(),\n                symbolTable: layout.symbolTable\n            };\n        };\n\n        RootComponentManager.prototype.create = function create(environment$$1, _state, _args, dynamicScope) {\n            var component = this.component;\n            if (true) {\n                this._pushToDebugStack(component._debugContainerKey, environment$$1);\n            }\n            var finalizer = (0, _emberMetal._instrumentStart)('render.component', initialRenderInstrumentDetails, component);\n            dynamicScope.view = component;\n            // We usually do this in the `didCreateElement`, but that hook doesn't fire for tagless components\n            if (component.tagName === '') {\n                if (environment$$1.isInteractive) {\n                    component.trigger('willRender');\n                }\n                component._transitionTo('hasElement');\n                if (environment$$1.isInteractive) {\n                    component.trigger('willInsertElement');\n                }\n            }\n            if (true) {\n                processComponentInitializationAssertions(component, {});\n            }\n            return new ComponentStateBucket(environment$$1, component, null, finalizer);\n        };\n\n        return RootComponentManager;\n    }(CurlyComponentManager);\n\n    // ROOT is the top-level template it has nothing but one yield.\n    // it is supposed to have a dummy element\n    var ROOT_CAPABILITIES = {\n        dynamicLayout: false,\n        dynamicTag: true,\n        prepareArgs: false,\n        createArgs: false,\n        attributeHook: true,\n        elementHook: true\n    };\n\n    var RootComponentDefinition = function () {\n        function RootComponentDefinition(component) {\n            (0, _emberBabel.classCallCheck)(this, RootComponentDefinition);\n\n            this.component = component;\n            var manager = new RootComponentManager(component);\n            this.manager = manager;\n            var factory = _container.FACTORY_FOR.get(component);\n            this.state = {\n                name: factory.fullName.slice(10),\n                capabilities: ROOT_CAPABILITIES,\n                ComponentClass: factory,\n                handle: null\n            };\n        }\n\n        RootComponentDefinition.prototype.getTag = function getTag(_ref9) {\n            var component = _ref9.component;\n\n            return component[DIRTY_TAG];\n        };\n\n        return RootComponentDefinition;\n    }();\n\n    var backburner = _emberMetal.run.backburner;\n\n    var DynamicScope = function () {\n        function DynamicScope(view, outletState, rootOutletState) {\n            (0, _emberBabel.classCallCheck)(this, DynamicScope);\n\n            this.view = view;\n            this.outletState = outletState;\n            this.rootOutletState = rootOutletState;\n        }\n\n        DynamicScope.prototype.child = function child() {\n            return new DynamicScope(this.view, this.outletState, this.rootOutletState);\n        };\n\n        DynamicScope.prototype.get = function get(key) {\n            (true && !(key === 'outletState') && (0, _emberDebug.assert)('Using `-get-dynamic-scope` is only supported for `outletState` (you used `' + key + '`).', key === 'outletState'));\n\n            return this.outletState;\n        };\n\n        DynamicScope.prototype.set = function set(key, value) {\n            (true && !(key === 'outletState') && (0, _emberDebug.assert)('Using `-with-dynamic-scope` is only supported for `outletState` (you used `' + key + '`).', key === 'outletState'));\n\n            this.outletState = value;\n            return value;\n        };\n\n        return DynamicScope;\n    }();\n\n    var RootState = function () {\n        function RootState(root, env, template, self, parentElement, dynamicScope) {\n            var _this27 = this;\n\n            (0, _emberBabel.classCallCheck)(this, RootState);\n            (true && !(template !== undefined) && (0, _emberDebug.assert)('You cannot render `' + self.value() + '` without a template.', template !== undefined));\n\n            this.id = (0, _emberViews.getViewId)(root);\n            this.env = env;\n            this.root = root;\n            this.result = undefined;\n            this.shouldReflush = false;\n            this.destroyed = false;\n            var options = this.options = {\n                alwaysRevalidate: false\n            };\n            this.render = function () {\n                var layout = template.asLayout();\n                var handle = layout.compile();\n                var iterator = (0, _runtime.renderMain)(layout['options'].program, env, self, dynamicScope, (0, _runtime.clientBuilder)(env, { element: parentElement, nextSibling: null }), handle);\n                var iteratorResult = void 0;\n                do {\n                    iteratorResult = iterator.next();\n                } while (!iteratorResult.done);\n                var result = _this27.result = iteratorResult.value;\n                // override .render function after initial render\n                _this27.render = function () {\n                    return result.rerender(options);\n                };\n            };\n        }\n\n        RootState.prototype.isFor = function isFor(possibleRoot) {\n            return this.root === possibleRoot;\n        };\n\n        RootState.prototype.destroy = function destroy() {\n            var result = this.result,\n                env = this.env;\n\n            this.destroyed = true;\n            this.env = undefined;\n            this.root = null;\n            this.result = undefined;\n            this.render = undefined;\n            if (result) {\n                /*\n                 Handles these scenarios:\n                        * When roots are removed during standard rendering process, a transaction exists already\n                   `.begin()` / `.commit()` are not needed.\n                 * When roots are being destroyed manually (`component.append(); component.destroy() case), no\n                   transaction exists already.\n                 * When roots are being destroyed during `Renderer#destroy`, no transaction exists\n                        */\n                var needsTransaction = !env.inTransaction;\n                if (needsTransaction) {\n                    env.begin();\n                }\n                try {\n                    result.destroy();\n                } finally {\n                    if (needsTransaction) {\n                        env.commit();\n                    }\n                }\n            }\n        };\n\n        return RootState;\n    }();\n\n    var renderers = [];\n    function _resetRenderers() {\n        renderers.length = 0;\n    }\n    (0, _emberMetal.setHasViews)(function () {\n        return renderers.length > 0;\n    });\n    function register(renderer) {\n        (true && !(renderers.indexOf(renderer) === -1) && (0, _emberDebug.assert)('Cannot register the same renderer twice', renderers.indexOf(renderer) === -1));\n\n        renderers.push(renderer);\n    }\n    function deregister(renderer) {\n        var index = renderers.indexOf(renderer);\n        (true && !(index !== -1) && (0, _emberDebug.assert)('Cannot deregister unknown unregistered renderer', index !== -1));\n\n        renderers.splice(index, 1);\n    }\n    function loopBegin() {\n        for (var i = 0; i < renderers.length; i++) {\n            renderers[i]._scheduleRevalidate();\n        }\n    }\n    function K() {}\n    var renderSettledDeferred = null;\n    /*\n      Returns a promise which will resolve when rendering has settled. Settled in\n      this context is defined as when all of the tags in use are \"current\" (e.g.\n      `renderers.every(r => r._isValid())`). When this is checked at the _end_ of\n      the run loop, this essentially guarantees that all rendering is completed.\n    \n      @method renderSettled\n      @returns {Promise<void>} a promise which fulfills when rendering has settled\n    */\n    function renderSettled() {\n        if (renderSettledDeferred === null) {\n            renderSettledDeferred = _rsvp.default.defer();\n            // if there is no current runloop, the promise created above will not have\n            // a chance to resolve (because its resolved in backburner's \"end\" event)\n            if (!_emberMetal.run.currentRunLoop) {\n                // ensure a runloop has been kicked off\n                backburner.schedule('actions', null, K);\n            }\n        }\n        return renderSettledDeferred.promise;\n    }\n    function resolveRenderPromise() {\n        if (renderSettledDeferred !== null) {\n            var resolve = renderSettledDeferred.resolve;\n            renderSettledDeferred = null;\n            backburner.join(null, resolve);\n        }\n    }\n    var loops = 0;\n    function loopEnd() {\n        for (var i = 0; i < renderers.length; i++) {\n            if (!renderers[i]._isValid()) {\n                if (loops > 10) {\n                    loops = 0;\n                    // TODO: do something better\n                    renderers[i].destroy();\n                    throw new Error('infinite rendering invalidation detected');\n                }\n                loops++;\n                return backburner.join(null, K);\n            }\n        }\n        loops = 0;\n        resolveRenderPromise();\n    }\n    backburner.on('begin', loopBegin);\n    backburner.on('end', loopEnd);\n\n    var Renderer = function () {\n        function Renderer(env, rootTemplate) {\n            var _viewRegistry = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _emberViews.fallbackViewRegistry;\n\n            var destinedForDOM = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n            (0, _emberBabel.classCallCheck)(this, Renderer);\n\n            this._env = env;\n            this._rootTemplate = rootTemplate;\n            this._viewRegistry = _viewRegistry;\n            this._destinedForDOM = destinedForDOM;\n            this._destroyed = false;\n            this._roots = [];\n            this._lastRevision = -1;\n            this._isRenderingRoots = false;\n            this._removedRoots = [];\n        }\n        // renderer HOOKS\n\n\n        Renderer.prototype.appendOutletView = function appendOutletView(view, target) {\n            var definition = createRootOutlet(view);\n            this._appendDefinition(view, (0, _runtime.curry)(definition), target);\n        };\n\n        Renderer.prototype.appendTo = function appendTo(view, target) {\n            var definition = new RootComponentDefinition(view);\n            this._appendDefinition(view, (0, _runtime.curry)(definition), target);\n        };\n\n        Renderer.prototype._appendDefinition = function _appendDefinition(root, definition, target) {\n            var self = new UnboundReference(definition);\n            var dynamicScope = new DynamicScope(null, _runtime.UNDEFINED_REFERENCE);\n            var rootState = new RootState(root, this._env, this._rootTemplate, self, target, dynamicScope);\n            this._renderRoot(rootState);\n        };\n\n        Renderer.prototype.rerender = function rerender() {\n            this._scheduleRevalidate();\n        };\n\n        Renderer.prototype.register = function register(view) {\n            var id = (0, _emberViews.getViewId)(view);\n            (true && !(!this._viewRegistry[id]) && (0, _emberDebug.assert)('Attempted to register a view with an id already in use: ' + id, !this._viewRegistry[id]));\n\n            this._viewRegistry[id] = view;\n        };\n\n        Renderer.prototype.unregister = function unregister(view) {\n            delete this._viewRegistry[(0, _emberViews.getViewId)(view)];\n        };\n\n        Renderer.prototype.remove = function remove(view) {\n            view._transitionTo('destroying');\n            this.cleanupRootFor(view);\n            (0, _emberViews.setViewElement)(view, null);\n            if (this._destinedForDOM) {\n                view.trigger('didDestroyElement');\n            }\n            if (!view.isDestroying) {\n                view.destroy();\n            }\n        };\n\n        Renderer.prototype.cleanupRootFor = function cleanupRootFor(view) {\n            // no need to cleanup roots if we have already been destroyed\n            if (this._destroyed) {\n                return;\n            }\n            var roots = this._roots;\n            // traverse in reverse so we can remove items\n            // without mucking up the index\n            var i = this._roots.length;\n            while (i--) {\n                var root = roots[i];\n                if (root.isFor(view)) {\n                    root.destroy();\n                    roots.splice(i, 1);\n                }\n            }\n        };\n\n        Renderer.prototype.destroy = function destroy() {\n            if (this._destroyed) {\n                return;\n            }\n            this._destroyed = true;\n            this._clearAllRoots();\n        };\n\n        Renderer.prototype.getBounds = function getBounds(view) {\n            var bounds = view[BOUNDS];\n            var parentElement = bounds.parentElement();\n            var firstNode = bounds.firstNode();\n            var lastNode = bounds.lastNode();\n            return { parentElement: parentElement, firstNode: firstNode, lastNode: lastNode };\n        };\n\n        Renderer.prototype.createElement = function createElement(tagName) {\n            return this._env.getAppendOperations().createElement(tagName);\n        };\n\n        Renderer.prototype._renderRoot = function _renderRoot(root) {\n            var roots = this._roots;\n\n            roots.push(root);\n            if (roots.length === 1) {\n                register(this);\n            }\n            this._renderRootsTransaction();\n        };\n\n        Renderer.prototype._renderRoots = function _renderRoots() {\n            var roots = this._roots,\n                env = this._env,\n                removedRoots = this._removedRoots;\n\n            var globalShouldReflush = void 0;\n            var initialRootsLength = void 0;\n            do {\n                env.begin();\n                try {\n                    // ensure that for the first iteration of the loop\n                    // each root is processed\n                    initialRootsLength = roots.length;\n                    globalShouldReflush = false;\n                    for (var i = 0; i < roots.length; i++) {\n                        var root = roots[i];\n                        if (root.destroyed) {\n                            // add to the list of roots to be removed\n                            // they will be removed from `this._roots` later\n                            removedRoots.push(root);\n                            // skip over roots that have been marked as destroyed\n                            continue;\n                        }\n                        var shouldReflush = root.shouldReflush;\n\n                        // when processing non-initial reflush loops,\n                        // do not process more roots than needed\n                        if (i >= initialRootsLength && !shouldReflush) {\n                            continue;\n                        }\n                        root.options.alwaysRevalidate = shouldReflush;\n                        // track shouldReflush based on this roots render result\n                        shouldReflush = root.shouldReflush = (0, _emberMetal.runInTransaction)(root, 'render');\n                        // globalShouldReflush should be `true` if *any* of\n                        // the roots need to reflush\n                        globalShouldReflush = globalShouldReflush || shouldReflush;\n                    }\n                    this._lastRevision = _reference.CURRENT_TAG.value();\n                } finally {\n                    env.commit();\n                }\n            } while (globalShouldReflush || roots.length > initialRootsLength);\n            // remove any roots that were destroyed during this transaction\n            while (removedRoots.length) {\n                var _root = removedRoots.pop();\n                var rootIndex = roots.indexOf(_root);\n                roots.splice(rootIndex, 1);\n            }\n            if (this._roots.length === 0) {\n                deregister(this);\n            }\n        };\n\n        Renderer.prototype._renderRootsTransaction = function _renderRootsTransaction() {\n            if (this._isRenderingRoots) {\n                // currently rendering roots, a new root was added and will\n                // be processed by the existing _renderRoots invocation\n                return;\n            }\n            // used to prevent calling _renderRoots again (see above)\n            // while we are actively rendering roots\n            this._isRenderingRoots = true;\n            var completedWithoutError = false;\n            try {\n                this._renderRoots();\n                completedWithoutError = true;\n            } finally {\n                if (!completedWithoutError) {\n                    this._lastRevision = _reference.CURRENT_TAG.value();\n                    if (this._env.inTransaction === true) {\n                        this._env.commit();\n                    }\n                }\n                this._isRenderingRoots = false;\n            }\n        };\n\n        Renderer.prototype._clearAllRoots = function _clearAllRoots() {\n            var roots = this._roots;\n            for (var i = 0; i < roots.length; i++) {\n                var root = roots[i];\n                root.destroy();\n            }\n            this._removedRoots.length = 0;\n            this._roots = [];\n            // if roots were present before destroying\n            // deregister this renderer instance\n            if (roots.length) {\n                deregister(this);\n            }\n        };\n\n        Renderer.prototype._scheduleRevalidate = function _scheduleRevalidate() {\n            backburner.scheduleOnce('render', this, this._revalidate);\n        };\n\n        Renderer.prototype._isValid = function _isValid() {\n            return this._destroyed || this._roots.length === 0 || _reference.CURRENT_TAG.validate(this._lastRevision);\n        };\n\n        Renderer.prototype._revalidate = function _revalidate() {\n            if (this._isValid()) {\n                return;\n            }\n            this._renderRootsTransaction();\n        };\n\n        return Renderer;\n    }();\n\n    var InertRenderer = function (_Renderer) {\n        (0, _emberBabel.inherits)(InertRenderer, _Renderer);\n\n        function InertRenderer() {\n            (0, _emberBabel.classCallCheck)(this, InertRenderer);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _Renderer.apply(this, arguments));\n        }\n\n        InertRenderer.create = function create(_ref10) {\n            var env = _ref10.env,\n                rootTemplate = _ref10.rootTemplate,\n                _viewRegistry = _ref10._viewRegistry;\n\n            return new this(env, rootTemplate, _viewRegistry, false);\n        };\n\n        InertRenderer.prototype.getElement = function getElement(_view) {\n            throw new Error('Accessing `this.element` is not allowed in non-interactive environments (such as FastBoot).');\n        };\n\n        return InertRenderer;\n    }(Renderer);\n\n    var InteractiveRenderer = function (_Renderer2) {\n        (0, _emberBabel.inherits)(InteractiveRenderer, _Renderer2);\n\n        function InteractiveRenderer() {\n            (0, _emberBabel.classCallCheck)(this, InteractiveRenderer);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _Renderer2.apply(this, arguments));\n        }\n\n        InteractiveRenderer.create = function create(_ref11) {\n            var env = _ref11.env,\n                rootTemplate = _ref11.rootTemplate,\n                _viewRegistry = _ref11._viewRegistry;\n\n            return new this(env, rootTemplate, _viewRegistry, true);\n        };\n\n        InteractiveRenderer.prototype.getElement = function getElement(view) {\n            return (0, _emberViews.getViewElement)(view);\n        };\n\n        return InteractiveRenderer;\n    }(Renderer);\n\n    var TEMPLATES = {};\n    function setTemplates(templates) {\n        TEMPLATES = templates;\n    }\n    function getTemplates() {\n        return TEMPLATES;\n    }\n    function getTemplate(name) {\n        if (TEMPLATES.hasOwnProperty(name)) {\n            return TEMPLATES[name];\n        }\n    }\n    function hasTemplate(name) {\n        return TEMPLATES.hasOwnProperty(name);\n    }\n    function setTemplate(name, template) {\n        return TEMPLATES[name] = template;\n    }\n\n    ///<reference path=\"./simple-dom.d.ts\" />\n\n    /**\n    @module ember\n    */\n    /**\n      Calls [loc](/api/classes/Ember.String.html#method_loc) with the\n      provided string. This is a convenient way to localize text within a template.\n      For example:\n    \n      ```javascript\n      Ember.STRINGS = {\n        '_welcome_': 'Bonjour'\n      };\n      ```\n    \n      ```handlebars\n      <div class='message'>\n        {{loc '_welcome_'}}\n      </div>\n      ```\n    \n      ```html\n      <div class='message'>\n        Bonjour\n      </div>\n      ```\n    \n      See [String.loc](/api/ember/release/classes/String/methods/loc?anchor=loc) for how to\n      set up localized string references.\n    \n      @method loc\n      @for Ember.Templates.helpers\n      @param {String} str The string to format.\n      @see {String#loc}\n      @public\n    */\n    var loc = helper(function (params) {\n        return _emberRuntime.String.loc.apply(null, params);\n    });\n\n    var CompileTimeLookup = function () {\n        function CompileTimeLookup(resolver) {\n            (0, _emberBabel.classCallCheck)(this, CompileTimeLookup);\n\n            this.resolver = resolver;\n        }\n\n        CompileTimeLookup.prototype.getCapabilities = function getCapabilities(handle) {\n            var definition = this.resolver.resolve(handle);\n            var manager = definition.manager,\n                state = definition.state;\n\n            return manager.getCapabilities(state);\n        };\n\n        CompileTimeLookup.prototype.getLayout = function getLayout(handle) {\n            var _resolver$resolve = this.resolver.resolve(handle),\n                manager = _resolver$resolve.manager,\n                state = _resolver$resolve.state;\n\n            var capabilities = manager.getCapabilities(state);\n            if (capabilities.dynamicLayout) {\n                return null;\n            }\n            var invocation = manager.getLayout(state, this.resolver);\n            return {\n                compile: function () {\n                    return invocation.handle;\n                },\n\n                symbolTable: invocation.symbolTable\n            };\n        };\n\n        CompileTimeLookup.prototype.lookupHelper = function lookupHelper(name, referrer) {\n            return this.resolver.lookupHelper(name, referrer);\n        };\n\n        CompileTimeLookup.prototype.lookupModifier = function lookupModifier(name, referrer) {\n            return this.resolver.lookupModifier(name, referrer);\n        };\n\n        CompileTimeLookup.prototype.lookupComponentDefinition = function lookupComponentDefinition(name, referrer) {\n            return this.resolver.lookupComponentDefinition(name, referrer);\n        };\n\n        CompileTimeLookup.prototype.lookupPartial = function lookupPartial(name, referrer) {\n            return this.resolver.lookupPartial(name, referrer);\n        };\n\n        return CompileTimeLookup;\n    }();\n\n    var CAPABILITIES$1 = {\n        dynamicLayout: false,\n        dynamicTag: false,\n        prepareArgs: false,\n        createArgs: false,\n        attributeHook: false,\n        elementHook: false\n    };\n\n    var TemplateOnlyComponentManager = function (_AbstractManager3) {\n        (0, _emberBabel.inherits)(TemplateOnlyComponentManager, _AbstractManager3);\n\n        function TemplateOnlyComponentManager() {\n            (0, _emberBabel.classCallCheck)(this, TemplateOnlyComponentManager);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractManager3.apply(this, arguments));\n        }\n\n        TemplateOnlyComponentManager.prototype.getLayout = function getLayout(template) {\n            var layout = template.asLayout();\n            return {\n                handle: layout.compile(),\n                symbolTable: layout.symbolTable\n            };\n        };\n\n        TemplateOnlyComponentManager.prototype.getCapabilities = function getCapabilities() {\n            return CAPABILITIES$1;\n        };\n\n        TemplateOnlyComponentManager.prototype.create = function create() {\n            return null;\n        };\n\n        TemplateOnlyComponentManager.prototype.getSelf = function getSelf() {\n            return _runtime.NULL_REFERENCE;\n        };\n\n        TemplateOnlyComponentManager.prototype.getTag = function getTag() {\n            return _reference.CONSTANT_TAG;\n        };\n\n        TemplateOnlyComponentManager.prototype.getDestructor = function getDestructor() {\n            return null;\n        };\n\n        return TemplateOnlyComponentManager;\n    }(AbstractManager);\n\n    var MANAGER = new TemplateOnlyComponentManager();\n\n    var TemplateOnlyComponentDefinition = function TemplateOnlyComponentDefinition(state) {\n        (0, _emberBabel.classCallCheck)(this, TemplateOnlyComponentDefinition);\n\n        this.state = state;\n        this.manager = MANAGER;\n    };\n\n    function classHelper(_ref12) {\n        var positional = _ref12.positional;\n\n        var path = positional.at(0);\n        var args = positional.length;\n        var value = path.value();\n        if (value === true) {\n            if (args > 1) {\n                return _emberRuntime.String.dasherize(positional.at(1).value());\n            }\n            return null;\n        }\n        if (value === false) {\n            if (args > 2) {\n                return _emberRuntime.String.dasherize(positional.at(2).value());\n            }\n            return null;\n        }\n        return value;\n    }\n    var classHelper$1 = function (_vm, args) {\n        return new InternalHelperReference(classHelper, args.capture());\n    };\n\n    function htmlSafe$1(_ref13) {\n        var positional = _ref13.positional;\n\n        var path = positional.at(0);\n        return new SafeString(path.value());\n    }\n    var htmlSafeHelper = function (_vm, args) {\n        return new InternalHelperReference(htmlSafe$1, args.capture());\n    };\n\n    function inputTypeHelper(_ref14) {\n        var positional = _ref14.positional;\n\n        var type = positional.at(0).value();\n        if (type === 'checkbox') {\n            return '-checkbox';\n        }\n        return '-text-field';\n    }\n    var inputTypeHelper$1 = function (_vm, args) {\n        return new InternalHelperReference(inputTypeHelper, args.capture());\n    };\n\n    function normalizeClass(_ref15) {\n        var positional = _ref15.positional;\n\n        var classNameParts = positional.at(0).value().split('.');\n        var className = classNameParts[classNameParts.length - 1];\n        var value = positional.at(1).value();\n        if (value === true) {\n            return _emberRuntime.String.dasherize(className);\n        } else if (!value && value !== 0) {\n            return '';\n        } else {\n            return String(value);\n        }\n    }\n    var normalizeClassHelper = function (_vm, args) {\n        return new InternalHelperReference(normalizeClass, args.capture());\n    };\n\n    var isEmpty = function (value) {\n        return value === null || value === undefined || typeof value.toString !== 'function';\n    };\n    var normalizeTextValue = function (value) {\n        if (isEmpty(value)) {\n            return '';\n        }\n        return String(value);\n    };\n    /**\n    @module ember\n    */\n    /**\n      Concatenates the given arguments into a string.\n    \n      Example:\n    \n      ```handlebars\n      {{some-component name=(concat firstName \" \" lastName)}}\n    \n      {{! would pass name=\"<first name value> <last name value>\" to the component}}\n      ```\n    \n      @public\n      @method concat\n      @for Ember.Templates.helpers\n      @since 1.13.0\n    */\n    function concat(_ref16) {\n        var positional = _ref16.positional;\n\n        return positional.value().map(normalizeTextValue).join('');\n    }\n    var concat$1 = function (_vm, args) {\n        return new InternalHelperReference(concat, args.capture());\n    };\n\n    /**\n    @module ember\n    */\n    /**\n      Dynamically look up a property on an object. The second argument to `{{get}}`\n      should have a string value, although it can be bound.\n    \n      For example, these two usages are equivalent:\n    \n      ```handlebars\n      {{person.height}}\n      {{get person \"height\"}}\n      ```\n    \n      If there were several facts about a person, the `{{get}}` helper can dynamically\n      pick one:\n    \n      ```handlebars\n      {{get person factName}}\n      ```\n    \n      For a more complex example, this template would allow the user to switch\n      between showing the user's height and weight with a click:\n    \n      ```handlebars\n      {{get person factName}}\n      <button {{action (action (mut factName)) \"height\"}}>Show height</button>\n      <button {{action (action (mut factName)) \"weight\"}}>Show weight</button>\n      ```\n    \n      The `{{get}}` helper can also respect mutable values itself. For example:\n    \n      ```handlebars\n      {{input value=(mut (get person factName)) type=\"text\"}}\n      <button {{action (action (mut factName)) \"height\"}}>Show height</button>\n      <button {{action (action (mut factName)) \"weight\"}}>Show weight</button>\n      ```\n    \n      Would allow the user to swap what fact is being displayed, and also edit\n      that fact via a two-way mutable binding.\n    \n      @public\n      @method get\n      @for Ember.Templates.helpers\n      @since 2.1.0\n     */\n    var get$1 = function (_vm, args) {\n        return GetHelperReference.create(args.positional.at(0), args.positional.at(1));\n    };\n    function referenceFromPath(source, path) {\n        var innerReference = void 0;\n        if (path === undefined || path === null || path === '') {\n            innerReference = _runtime.NULL_REFERENCE;\n        } else if (typeof path === 'string' && path.indexOf('.') > -1) {\n            innerReference = referenceFromParts(source, path.split('.'));\n        } else {\n            innerReference = source.get(path);\n        }\n        return innerReference;\n    }\n\n    var GetHelperReference = function (_CachedReference$5) {\n        (0, _emberBabel.inherits)(GetHelperReference, _CachedReference$5);\n\n        GetHelperReference.create = function create(sourceReference, pathReference) {\n            if ((0, _reference.isConst)(pathReference)) {\n                var path = pathReference.value();\n                return referenceFromPath(sourceReference, path);\n            } else {\n                return new GetHelperReference(sourceReference, pathReference);\n            }\n        };\n\n        function GetHelperReference(sourceReference, pathReference) {\n            (0, _emberBabel.classCallCheck)(this, GetHelperReference);\n\n            var _this31 = (0, _emberBabel.possibleConstructorReturn)(this, _CachedReference$5.call(this));\n\n            _this31.sourceReference = sourceReference;\n            _this31.pathReference = pathReference;\n            _this31.lastPath = null;\n            _this31.innerReference = _runtime.NULL_REFERENCE;\n            var innerTag = _this31.innerTag = _reference.UpdatableTag.create(_reference.CONSTANT_TAG);\n            _this31.tag = (0, _reference.combine)([sourceReference.tag, pathReference.tag, innerTag]);\n            return _this31;\n        }\n\n        GetHelperReference.prototype.compute = function compute() {\n            var lastPath = this.lastPath,\n                innerReference = this.innerReference,\n                innerTag = this.innerTag;\n\n            var path = this.pathReference.value();\n            if (path !== lastPath) {\n                innerReference = referenceFromPath(this.sourceReference, path);\n                innerTag.inner.update(innerReference.tag);\n                this.innerReference = innerReference;\n                this.lastPath = path;\n            }\n            return innerReference.value();\n        };\n\n        GetHelperReference.prototype[UPDATE] = function (value) {\n            (0, _emberMetal.set)(this.sourceReference.value(), this.pathReference.value(), value);\n        };\n\n        return GetHelperReference;\n    }(CachedReference$1);\n\n    /**\n    @module ember\n    */\n    /**\n       Use the `{{hash}}` helper to create a hash to pass as an option to your\n       components. This is specially useful for contextual components where you can\n       just yield a hash:\n    \n       ```handlebars\n       {{yield (hash\n          name='Sarah'\n          title=office\n       )}}\n       ```\n    \n       Would result in an object such as:\n    \n       ```js\n       { name: 'Sarah', title: this.get('office') }\n       ```\n    \n       Where the `title` is bound to updates of the `office` property.\n    \n       Note that the hash is an empty object with no prototype chain, therefore\n       common methods like `toString` are not available in the resulting hash.\n       If you need to use such a method, you can use the `call` or `apply`\n       approach:\n    \n       ```js\n       function toString(obj) {\n         return Object.prototype.toString.apply(obj);\n       }\n       ```\n    \n       @method hash\n       @for Ember.Templates.helpers\n       @param {Object} options\n       @return {Object} Hash\n       @since 2.3.0\n       @public\n     */\n    var hash = function (_vm, args) {\n        return args.named.capture();\n    };\n\n    /**\n    @module ember\n    */\n\n    var ConditionalHelperReference = function (_CachedReference$6) {\n        (0, _emberBabel.inherits)(ConditionalHelperReference, _CachedReference$6);\n\n        ConditionalHelperReference.create = function create(_condRef, truthyRef, falsyRef) {\n            var condRef = ConditionalReference$1.create(_condRef);\n            if ((0, _reference.isConst)(condRef)) {\n                return condRef.value() ? truthyRef : falsyRef;\n            } else {\n                return new ConditionalHelperReference(condRef, truthyRef, falsyRef);\n            }\n        };\n\n        function ConditionalHelperReference(cond, truthy, falsy) {\n            (0, _emberBabel.classCallCheck)(this, ConditionalHelperReference);\n\n            var _this32 = (0, _emberBabel.possibleConstructorReturn)(this, _CachedReference$6.call(this));\n\n            _this32.branchTag = _reference.UpdatableTag.create(_reference.CONSTANT_TAG);\n            _this32.tag = (0, _reference.combine)([cond.tag, _this32.branchTag]);\n            _this32.cond = cond;\n            _this32.truthy = truthy;\n            _this32.falsy = falsy;\n            return _this32;\n        }\n\n        ConditionalHelperReference.prototype.compute = function compute() {\n            var branch = this.cond.value() ? this.truthy : this.falsy;\n            this.branchTag.inner.update(branch.tag);\n            return branch.value();\n        };\n\n        return ConditionalHelperReference;\n    }(CachedReference$1);\n\n    /**\n      The `if` helper allows you to conditionally render one of two branches,\n      depending on the \"truthiness\" of a property.\n      For example the following values are all falsey: `false`, `undefined`, `null`, `\"\"`, `0`, `NaN` or an empty array.\n    \n      This helper has two forms, block and inline.\n    \n      ## Block form\n    \n      You can use the block form of `if` to conditionally render a section of the template.\n    \n      To use it, pass the conditional value to the `if` helper,\n      using the block form to wrap the section of template you want to conditionally render.\n      Like so:\n    \n      ```handlebars\n      {{! will not render if foo is falsey}}\n      {{#if foo}}\n        Welcome to the {{foo.bar}}\n      {{/if}}\n      ```\n    \n      You can also specify a template to show if the property is falsey by using\n      the `else` helper.\n    \n      ```handlebars\n      {{! is it raining outside?}}\n      {{#if isRaining}}\n        Yes, grab an umbrella!\n      {{else}}\n        No, it's lovely outside!\n      {{/if}}\n      ```\n    \n      You are also able to combine `else` and `if` helpers to create more complex\n      conditional logic.\n    \n      ```handlebars\n      {{#if isMorning}}\n        Good morning\n      {{else if isAfternoon}}\n        Good afternoon\n      {{else}}\n        Good night\n      {{/if}}\n      ```\n    \n      ## Inline form\n    \n      The inline `if` helper conditionally renders a single property or string.\n    \n      In this form, the `if` helper receives three arguments, the conditional value,\n      the value to render when truthy, and the value to render when falsey.\n    \n      For example, if `useLongGreeting` is truthy, the following:\n    \n      ```handlebars\n      {{if useLongGreeting \"Hello\" \"Hi\"}} Alex\n      ```\n    \n      Will render:\n    \n      ```html\n      Hello Alex\n      ```\n    \n      ### Nested `if`\n    \n      You can use the `if` helper inside another helper as a nested helper:\n    \n      ```handlebars\n      {{some-component height=(if isBig \"100\" \"10\")}}\n      ```\n    \n      One detail to keep in mind is that both branches of the `if` helper will be evaluated,\n      so if you have `{{if condition \"foo\" (expensive-operation \"bar\")`,\n      `expensive-operation` will always calculate.\n    \n      @method if\n      @for Ember.Templates.helpers\n      @public\n    */\n    function inlineIf(_vm, _ref17) {\n        var positional = _ref17.positional;\n        (true && !(positional.length === 3 || positional.length === 2) && (0, _emberDebug.assert)('The inline form of the `if` helper expects two or three arguments, e.g. ' + '`{{if trialExpired \"Expired\" expiryDate}}`.', positional.length === 3 || positional.length === 2));\n\n        return ConditionalHelperReference.create(positional.at(0), positional.at(1), positional.at(2));\n    }\n    /**\n      The inline `unless` helper conditionally renders a single property or string.\n      This helper acts like a ternary operator. If the first property is falsy,\n      the second argument will be displayed, otherwise, the third argument will be\n      displayed\n    \n      ```handlebars\n      {{unless useLongGreeting \"Hi\" \"Hello\"}} Ben\n      ```\n    \n      You can use the `unless` helper inside another helper as a subexpression.\n    \n      ```handlebars\n      {{some-component height=(unless isBig \"10\" \"100\")}}\n      ```\n    \n      @method unless\n      @for Ember.Templates.helpers\n      @public\n    */\n    function inlineUnless(_vm, _ref18) {\n        var positional = _ref18.positional;\n        (true && !(positional.length === 3 || positional.length === 2) && (0, _emberDebug.assert)('The inline form of the `unless` helper expects two or three arguments, e.g. ' + '`{{unless isFirstLogin \"Welcome back!\"}}`.', positional.length === 3 || positional.length === 2));\n\n        return ConditionalHelperReference.create(positional.at(0), positional.at(2), positional.at(1));\n    }\n\n    /**\n    @module ember\n    */\n    /**\n      `log` allows you to output the value of variables in the current rendering\n      context. `log` also accepts primitive types such as strings or numbers.\n    \n      ```handlebars\n      {{log \"myVariable:\" myVariable }}\n      ```\n    \n      @method log\n      @for Ember.Templates.helpers\n      @param {Array} params\n      @public\n    */\n    function log(_ref19) {\n        var positional = _ref19.positional;\n\n        _emberConsole.default.log.apply(null, positional.value());\n    }\n    var log$1 = function (_vm, args) {\n        return new InternalHelperReference(log, args.capture());\n    };\n\n    /**\n      The `mut` helper lets you __clearly specify__ that a child `Component` can update the\n      (mutable) value passed to it, which will __change the value of the parent component__.\n    \n      To specify that a parameter is mutable, when invoking the child `Component`:\n    \n      ```handlebars\n      {{my-child childClickCount=(mut totalClicks)}}\n      ```\n    \n      The child `Component` can then modify the parent's value just by modifying its own\n      property:\n    \n      ```javascript\n      // my-child.js\n      export default Component.extend({\n        click() {\n          this.incrementProperty('childClickCount');\n        }\n      });\n      ```\n    \n      Note that for curly components (`{{my-component}}`) the bindings are already mutable,\n      making the `mut` unnecessary.\n    \n      Additionally, the `mut` helper can be combined with the `action` helper to\n      mutate a value. For example:\n    \n      ```handlebars\n      {{my-child childClickCount=totalClicks click-count-change=(action (mut totalClicks))}}\n      ```\n    \n      The child `Component` would invoke the action with the new click value:\n    \n      ```javascript\n      // my-child.js\n      export default Component.extend({\n        click() {\n          this.get('click-count-change')(this.get('childClickCount') + 1);\n        }\n      });\n      ```\n    \n      The `mut` helper changes the `totalClicks` value to what was provided as the action argument.\n    \n      The `mut` helper, when used with `action`, will return a function that\n      sets the value passed to `mut` to its first argument. This works like any other\n      closure action and interacts with the other features `action` provides.\n      As an example, we can create a button that increments a value passing the value\n      directly to the `action`:\n    \n      ```handlebars\n      {{! inc helper is not provided by Ember }}\n      <button onclick={{action (mut count) (inc count)}}>\n        Increment count\n      </button>\n      ```\n    \n      You can also use the `value` option:\n    \n      ```handlebars\n      <input value={{name}} oninput={{action (mut name) value=\"target.value\"}}>\n      ```\n    \n      @method mut\n      @param {Object} [attr] the \"two-way\" attribute that can be modified.\n      @for Ember.Templates.helpers\n      @public\n    */\n    var MUT_REFERENCE = (0, _emberUtils.symbol)('MUT');\n    var SOURCE = (0, _emberUtils.symbol)('SOURCE');\n    function isMut(ref) {\n        return ref && ref[MUT_REFERENCE];\n    }\n    function unMut(ref) {\n        return ref[SOURCE] || ref;\n    }\n    var mut = function (_vm, args) {\n        var rawRef = args.positional.at(0);\n        if (isMut(rawRef)) {\n            return rawRef;\n        }\n        // TODO: Improve this error message. This covers at least two distinct\n        // cases:\n        //\n        // 1. (mut \"not a path\") – passing a literal, result from a helper\n        //    invocation, etc\n        //\n        // 2. (mut receivedValue) – passing a value received from the caller\n        //    that was originally derived from a literal, result from a helper\n        //    invocation, etc\n        //\n        // This message is alright for the first case, but could be quite\n        // confusing for the second case.\n        (true && !(rawRef[UPDATE]) && (0, _emberDebug.assert)('You can only pass a path to mut', rawRef[UPDATE]));\n\n        var wrappedRef = Object.create(rawRef);\n        wrappedRef[SOURCE] = rawRef;\n        wrappedRef[INVOKE] = rawRef[UPDATE];\n        wrappedRef[MUT_REFERENCE] = true;\n        return wrappedRef;\n    };\n\n    /**\n      This is a helper to be used in conjunction with the link-to helper.\n      It will supply url query parameters to the target route.\n    \n      Example\n    \n      ```handlebars\n      {{#link-to 'posts' (query-params direction=\"asc\")}}Sort{{/link-to}}\n      ```\n    \n      @method query-params\n      @for Ember.Templates.helpers\n      @param {Object} hash takes a hash of query parameters\n      @return {Object} A `QueryParams` object for `{{link-to}}`\n      @public\n    */\n    function queryParams(_ref20) {\n        var positional = _ref20.positional,\n            named = _ref20.named;\n        (true && !(positional.value().length === 0) && (0, _emberDebug.assert)('The `query-params` helper only accepts hash parameters, e.g. (query-params queryParamPropertyName=\\'foo\\') as opposed to just (query-params \\'foo\\')', positional.value().length === 0));\n\n        return _emberRouting.QueryParams.create({\n            values: (0, _emberUtils.assign)({}, named.value())\n        });\n    }\n    var queryParams$1 = function (_vm, args) {\n        return new InternalHelperReference(queryParams, args.capture());\n    };\n\n    /**\n      The `readonly` helper let's you specify that a binding is one-way only,\n      instead of two-way.\n      When you pass a `readonly` binding from an outer context (e.g. parent component),\n      to to an inner context (e.g. child component), you are saying that changing that\n      property in the inner context does not change the value in the outer context.\n    \n      To specify that a binding is read-only, when invoking the child `Component`:\n    \n      ```app/components/my-parent.js\n      export default Component.extend({\n        totalClicks: 3\n      });\n      ```\n    \n      ```app/templates/components/my-parent.hbs\n      {{log totalClicks}} // -> 3\n      {{my-child childClickCount=(readonly totalClicks)}}\n      ```\n    \n      Now, when you update `childClickCount`:\n    \n      ```app/components/my-child.js\n      export default Component.extend({\n        click() {\n          this.incrementProperty('childClickCount');\n        }\n      });\n      ```\n    \n      The value updates in the child component, but not the parent component:\n    \n      ```app/templates/components/my-child.hbs\n      {{log childClickCount}} //-> 4\n      ```\n    \n      ```app/templates/components/my-parent.hbs\n      {{log totalClicks}} //-> 3\n      {{my-child childClickCount=(readonly totalClicks)}}\n      ```\n    \n      ### Objects and Arrays\n    \n      When passing a property that is a complex object (e.g. object, array) instead of a primitive object (e.g. number, string),\n      only the reference to the object is protected using the readonly helper.\n      This means that you can change properties of the object both on the parent component, as well as the child component.\n      The `readonly` binding behaves similar to the `const` keyword in JavaScript.\n    \n      Let's look at an example:\n    \n      First let's set up the parent component:\n    \n      ```app/components/my-parent.js\n      import Component from '@ember/component';\n    \n      export default Component.extend({\n        clicks: null,\n    \n        init() {\n          this._super(...arguments);\n          this.set('clicks', { total: 3 });\n        }\n      });\n      ```\n    \n      ```app/templates/components/my-parent.hbs\n      {{log clicks.total}} //-> 3\n      {{my-child childClicks=(readonly clicks)}}\n      ```\n    \n      Now, if you update the `total` property of `childClicks`:\n    \n      ```app/components/my-child.js\n      import Component from '@ember/component';\n    \n      export default Component.extend({\n        click() {\n          this.get('clicks').incrementProperty('total');\n        }\n      });\n      ```\n    \n      You will see the following happen:\n    \n      ```app/templates/components/my-parent.hbs\n      {{log clicks.total}} //-> 4\n      {{my-child childClicks=(readonly clicks)}}\n      ```\n    \n      ```app/templates/components/my-child.hbs\n      {{log childClicks.total}} //-> 4\n      ```\n    \n      @method readonly\n      @param {Object} [attr] the read-only attribute.\n      @for Ember.Templates.helpers\n      @private\n    */\n    var readonly = function (_vm, args) {\n        var ref = unMut(args.positional.at(0));\n        var wrapped = Object.create(ref);\n        wrapped[UPDATE] = undefined;\n        return wrapped;\n    };\n\n    /**\n    @module ember\n    */\n    /**\n      The `{{unbound}}` helper disconnects the one-way binding of a property,\n      essentially freezing its value at the moment of rendering. For example,\n      in this example the display of the variable `name` will not change even\n      if it is set with a new value:\n    \n      ```handlebars\n      {{unbound name}}\n      ```\n    \n      Like any helper, the `unbound` helper can accept a nested helper expression.\n      This allows for custom helpers to be rendered unbound:\n    \n      ```handlebars\n      {{unbound (some-custom-helper)}}\n      {{unbound (capitalize name)}}\n      {{! You can use any helper, including unbound, in a nested expression }}\n      {{capitalize (unbound name)}}\n      ```\n    \n      The `unbound` helper only accepts a single argument, and it return an\n      unbound value.\n    \n      @method unbound\n      @for Ember.Templates.helpers\n      @public\n    */\n    var unbound = function (_vm, args) {\n        (true && !(args.positional.length === 1 && args.named.length === 0) && (0, _emberDebug.assert)('unbound helper cannot be called with multiple params or hash params', args.positional.length === 1 && args.named.length === 0));\n\n        return UnboundReference.create(args.positional.at(0).value());\n    };\n\n    var MODIFIERS = ['alt', 'shift', 'meta', 'ctrl'];\n    var POINTER_EVENT_TYPE_REGEX = /^click|mouse|touch/;\n    function isAllowedEvent(event, allowedKeys) {\n        if (allowedKeys === null || allowedKeys === undefined) {\n            if (POINTER_EVENT_TYPE_REGEX.test(event.type)) {\n                return (0, _emberViews.isSimpleClick)(event);\n            } else {\n                allowedKeys = '';\n            }\n        }\n        if (allowedKeys.indexOf('any') >= 0) {\n            return true;\n        }\n        for (var i = 0; i < MODIFIERS.length; i++) {\n            if (event[MODIFIERS[i] + 'Key'] && allowedKeys.indexOf(MODIFIERS[i]) === -1) {\n                return false;\n            }\n        }\n        return true;\n    }\n    var ActionHelper = {\n        // registeredActions is re-exported for compatibility with older plugins\n        // that were using this undocumented API.\n        registeredActions: _emberViews.ActionManager.registeredActions,\n        registerAction: function (actionState) {\n            var actionId = actionState.actionId;\n\n            _emberViews.ActionManager.registeredActions[actionId] = actionState;\n            return actionId;\n        },\n        unregisterAction: function (actionState) {\n            var actionId = actionState.actionId;\n\n            delete _emberViews.ActionManager.registeredActions[actionId];\n        }\n    };\n\n    var ActionState = function () {\n        function ActionState(element, actionId, actionName, actionArgs, namedArgs, positionalArgs, implicitTarget, dom, tag) {\n            (0, _emberBabel.classCallCheck)(this, ActionState);\n\n            this.element = element;\n            this.actionId = actionId;\n            this.actionName = actionName;\n            this.actionArgs = actionArgs;\n            this.namedArgs = namedArgs;\n            this.positional = positionalArgs;\n            this.implicitTarget = implicitTarget;\n            this.dom = dom;\n            this.eventName = this.getEventName();\n            this.tag = tag;\n        }\n\n        ActionState.prototype.getEventName = function getEventName() {\n            return this.namedArgs.get('on').value() || 'click';\n        };\n\n        ActionState.prototype.getActionArgs = function getActionArgs() {\n            var result = new Array(this.actionArgs.length);\n            for (var i = 0; i < this.actionArgs.length; i++) {\n                result[i] = this.actionArgs[i].value();\n            }\n            return result;\n        };\n\n        ActionState.prototype.getTarget = function getTarget() {\n            var implicitTarget = this.implicitTarget,\n                namedArgs = this.namedArgs;\n\n            var target = void 0;\n            if (namedArgs.has('target')) {\n                target = namedArgs.get('target').value();\n            } else {\n                target = implicitTarget.value();\n            }\n            return target;\n        };\n\n        ActionState.prototype.handler = function handler(event) {\n            var _this33 = this;\n\n            var actionName = this.actionName,\n                namedArgs = this.namedArgs;\n\n            var bubbles = namedArgs.get('bubbles');\n            var preventDefault = namedArgs.get('preventDefault');\n            var allowedKeys = namedArgs.get('allowedKeys');\n            var target = this.getTarget();\n            var shouldBubble = bubbles.value() !== false;\n            if (!isAllowedEvent(event, allowedKeys.value())) {\n                return true;\n            }\n            if (preventDefault.value() !== false) {\n                event.preventDefault();\n            }\n            if (!shouldBubble) {\n                event.stopPropagation();\n            }\n            _emberMetal.run.join(function () {\n                var args = _this33.getActionArgs();\n                var payload = {\n                    args: args,\n                    target: target,\n                    name: null\n                };\n                if (typeof actionName[INVOKE] === 'function') {\n                    (0, _emberMetal.flaggedInstrument)('interaction.ember-action', payload, function () {\n                        actionName[INVOKE].apply(actionName, args);\n                    });\n                    return;\n                }\n                if (typeof actionName === 'function') {\n                    (0, _emberMetal.flaggedInstrument)('interaction.ember-action', payload, function () {\n                        actionName.apply(target, args);\n                    });\n                    return;\n                }\n                payload.name = actionName;\n                if (target.send) {\n                    (0, _emberMetal.flaggedInstrument)('interaction.ember-action', payload, function () {\n                        target.send.apply(target, [actionName].concat(args));\n                    });\n                } else {\n                    (true && !(typeof target[actionName] === 'function') && (0, _emberDebug.assert)('The action \\'' + actionName + '\\' did not exist on ' + target, typeof target[actionName] === 'function'));\n\n                    (0, _emberMetal.flaggedInstrument)('interaction.ember-action', payload, function () {\n                        target[actionName].apply(target, args);\n                    });\n                }\n            });\n            return shouldBubble;\n        };\n\n        ActionState.prototype.destroy = function destroy() {\n            ActionHelper.unregisterAction(this);\n        };\n\n        return ActionState;\n    }();\n\n    var ActionModifierManager = function () {\n        function ActionModifierManager() {\n            (0, _emberBabel.classCallCheck)(this, ActionModifierManager);\n        }\n\n        ActionModifierManager.prototype.create = function create(element, args, _dynamicScope, dom) {\n            var _args$capture = args.capture(),\n                named = _args$capture.named,\n                positional = _args$capture.positional,\n                tag = _args$capture.tag;\n\n            var implicitTarget = void 0;\n            var actionName = void 0;\n            var actionNameRef = void 0;\n            if (positional.length > 1) {\n                implicitTarget = positional.at(0);\n                actionNameRef = positional.at(1);\n                if (actionNameRef[INVOKE]) {\n                    actionName = actionNameRef;\n                } else {\n                    var actionLabel = actionNameRef._propertyKey;\n                    actionName = actionNameRef.value();\n                    (true && !(typeof actionName === 'string' || typeof actionName === 'function') && (0, _emberDebug.assert)('You specified a quoteless path, `' + actionLabel + '`, to the ' + '{{action}} helper which did not resolve to an action name (a ' + 'string). Perhaps you meant to use a quoted actionName? (e.g. ' + '{{action \"' + actionLabel + '\"}}).', typeof actionName === 'string' || typeof actionName === 'function'));\n                }\n            }\n            var actionArgs = [];\n            // The first two arguments are (1) `this` and (2) the action name.\n            // Everything else is a param.\n            for (var i = 2; i < positional.length; i++) {\n                actionArgs.push(positional.at(i));\n            }\n            var actionId = (0, _emberUtils.uuid)();\n            return new ActionState(element, actionId, actionName, actionArgs, named, positional, implicitTarget, dom, tag);\n        };\n\n        ActionModifierManager.prototype.install = function install(actionState) {\n            var dom = actionState.dom,\n                element = actionState.element,\n                actionId = actionState.actionId;\n\n            ActionHelper.registerAction(actionState);\n            dom.setAttribute(element, 'data-ember-action', '');\n            dom.setAttribute(element, 'data-ember-action-' + actionId, actionId);\n        };\n\n        ActionModifierManager.prototype.update = function update(actionState) {\n            var positional = actionState.positional;\n\n            var actionNameRef = positional.at(1);\n            if (!actionNameRef[INVOKE]) {\n                actionState.actionName = actionNameRef.value();\n            }\n            actionState.eventName = actionState.getEventName();\n        };\n\n        ActionModifierManager.prototype.getTag = function getTag(actionState) {\n            return actionState.tag;\n        };\n\n        ActionModifierManager.prototype.getDestructor = function getDestructor(modifier) {\n            return modifier;\n        };\n\n        return ActionModifierManager;\n    }();\n\n    function hashToArgs(hash) {\n        if (hash === null) return null;\n        var names = hash[0].map(function (key) {\n            return '@' + key;\n        });\n        return [names, hash[1]];\n    }\n\n    function textAreaMacro(_name, params, hash, builder) {\n        var definition = builder.resolver.lookupComponentDefinition('-text-area', builder.referrer);\n        wrapComponentClassAttribute(hash);\n        builder.component.static(definition, [params || [], hashToArgs(hash), null, null]);\n        return true;\n    }\n\n    function buildSyntax(type, params, hash, builder) {\n        var definition = builder.resolver.lookupComponentDefinition(type, builder.referrer);\n        builder.component.static(definition, [params, hashToArgs(hash), null, null]);\n        return true;\n    }\n    /**\n      The `{{input}}` helper lets you create an HTML `<input />` component.\n      It causes an `TextField` component to be rendered.  For more info,\n      see the [TextField](/api/ember/release/classes/TextField) docs and\n      the [templates guide](https://emberjs.com/guides/templates/input-helpers/).\n    \n      ```handlebars\n      {{input value=\"987\"}}\n      ```\n    \n      renders as:\n    \n      ```HTML\n      <input type=\"text\" value=\"987\" />\n      ```\n    \n      ### Text field\n    \n      If no `type` option is specified, a default of type 'text' is used.\n      Many of the standard HTML attributes may be passed to this helper.\n      <table>\n        <tr><td>`readonly`</td><td>`required`</td><td>`autofocus`</td></tr>\n        <tr><td>`value`</td><td>`placeholder`</td><td>`disabled`</td></tr>\n        <tr><td>`size`</td><td>`tabindex`</td><td>`maxlength`</td></tr>\n        <tr><td>`name`</td><td>`min`</td><td>`max`</td></tr>\n        <tr><td>`pattern`</td><td>`accept`</td><td>`autocomplete`</td></tr>\n        <tr><td>`autosave`</td><td>`formaction`</td><td>`formenctype`</td></tr>\n        <tr><td>`formmethod`</td><td>`formnovalidate`</td><td>`formtarget`</td></tr>\n        <tr><td>`height`</td><td>`inputmode`</td><td>`multiple`</td></tr>\n        <tr><td>`step`</td><td>`width`</td><td>`form`</td></tr>\n        <tr><td>`selectionDirection`</td><td>`spellcheck`</td><td>&nbsp;</td></tr>\n      </table>\n      When set to a quoted string, these values will be directly applied to the HTML\n      element. When left unquoted, these values will be bound to a property on the\n      template's current rendering context (most typically a controller instance).\n      A very common use of this helper is to bind the `value` of an input to an Object's attribute:\n    \n      ```handlebars\n      Search:\n      {{input value=searchWord}}\n      ```\n    \n      In this example, the initial value in the `<input />` will be set to the value of `searchWord`.\n      If the user changes the text, the value of `searchWord` will also be updated.\n    \n      ### Actions\n    \n      The helper can send multiple actions based on user events.\n      The action property defines the action which is sent when\n      the user presses the return key.\n    \n      ```handlebars\n      {{input action=\"submit\"}}\n      ```\n    \n      The helper allows some user events to send actions.\n    \n      * `enter`\n      * `insert-newline`\n      * `escape-press`\n      * `focus-in`\n      * `focus-out`\n      * `key-press`\n      * `key-up`\n    \n      For example, if you desire an action to be sent when the input is blurred,\n      you only need to setup the action name to the event name property.\n    \n      ```handlebars\n      {{input focus-out=\"alertMessage\"}}\n      ```\n      See more about [Text Support Actions](/api/ember/release/classes/TextField)\n    \n      ### Extending `TextField`\n    \n      Internally, `{{input type=\"text\"}}` creates an instance of `TextField`, passing\n      arguments from the helper to `TextField`'s `create` method. You can extend the\n      capabilities of text inputs in your applications by reopening this class. For example,\n      if you are building a Bootstrap project where `data-*` attributes are used, you\n      can add one to the `TextField`'s `attributeBindings` property:\n    \n      ```javascript\n      import TextField from '@ember/component/text-field';\n      TextField.reopen({\n        attributeBindings: ['data-error']\n      });\n      ```\n    \n      Keep in mind when writing `TextField` subclasses that `TextField`\n      itself extends `Component`. Expect isolated component semantics, not\n      legacy 1.x view semantics (like `controller` being present).\n      See more about [Ember components](/api/ember/release/classes/Component)\n    \n      ### Checkbox\n    \n      Checkboxes are special forms of the `{{input}}` helper.  To create a `<checkbox />`:\n    \n      ```handlebars\n      Emberize Everything:\n      {{input type=\"checkbox\" name=\"isEmberized\" checked=isEmberized}}\n      ```\n    \n      This will bind checked state of this checkbox to the value of `isEmberized`  -- if either one changes,\n      it will be reflected in the other.\n    \n      The following HTML attributes can be set via the helper:\n    \n      * `checked`\n      * `disabled`\n      * `tabindex`\n      * `indeterminate`\n      * `name`\n      * `autofocus`\n      * `form`\n    \n      ### Extending `Checkbox`\n    \n      Internally, `{{input type=\"checkbox\"}}` creates an instance of `Checkbox`, passing\n      arguments from the helper to `Checkbox`'s `create` method. You can extend the\n      capablilties of checkbox inputs in your applications by reopening this class. For example,\n      if you wanted to add a css class to all checkboxes in your application:\n    \n      ```javascript\n      import Checkbox from '@ember/component/checkbox';\n    \n      Checkbox.reopen({\n        classNames: ['my-app-checkbox']\n      });\n      ```\n    \n      @method input\n      @for Ember.Templates.helpers\n      @param {Hash} options\n      @public\n    */\n    function inputMacro(_name, params, hash, builder) {\n        if (params === null) {\n            params = [];\n        }\n        if (hash !== null) {\n            var keys = hash[0];\n            var values = hash[1];\n            var typeIndex = keys.indexOf('type');\n            if (typeIndex > -1) {\n                var typeArg = values[typeIndex];\n                if (Array.isArray(typeArg)) {\n                    // there is an AST plugin that converts this to an expression\n                    // it really should just compile in the component call too.\n                    var inputTypeExpr = params[0];\n                    builder.dynamicComponent(inputTypeExpr, params.slice(1), hash, true, null, null);\n                    return true;\n                }\n                if (typeArg === 'checkbox') {\n                    (true && !(keys.indexOf('value') === -1) && (0, _emberDebug.assert)('{{input type=\\'checkbox\\'}} does not support setting `value=someBooleanValue`; ' + 'you must use `checked=someBooleanValue` instead.', keys.indexOf('value') === -1));\n\n                    wrapComponentClassAttribute(hash);\n                    return buildSyntax('-checkbox', params, hash, builder);\n                }\n            }\n        }\n        return buildSyntax('-text-field', params, hash, builder);\n    }\n\n    /**\n    @module ember\n    */\n    /**\n      The `let` helper receives one or more positional arguments and yields\n      them out as block params.\n    \n      This allows the developer to introduce shorter names for certain computations\n      in the template.\n    \n      This is especially useful if you are passing properties to a component\n      that receives a lot of options and you want to clean up the invocation.\n    \n      For the following example, the template receives a `post` object with\n      `content` and `title` properties.\n    \n      We are going to call the `my-post` component, passing a title which is\n      the title of the post suffixed with the name of the blog, the content\n      of the post, and a series of options defined in-place.\n    \n      ```handlebars\n      {{#let\n          (concat post.title ' | The Ember.js Blog')\n          post.content\n          (hash\n            theme=\"high-contrast\"\n            enableComments=true\n          )\n          as |title content options|\n      }}\n        {{my-post title=title content=content options=options}}\n      {{/let}}\n    ```\n    \n    @method let\n    @for Ember.Templates.helpers\n    @public\n    */\n    function blockLetMacro(params, _hash, template, _inverse, builder) {\n        if (template !== null) {\n            if (params !== null) {\n                builder.compileParams(params);\n                builder.invokeStaticBlock(template, params.length);\n            } else {\n                builder.invokeStatic(template);\n            }\n        }\n        return true;\n    }\n\n    var CAPABILITIES$2 = {\n        dynamicLayout: true,\n        dynamicTag: false,\n        prepareArgs: false,\n        createArgs: false,\n        attributeHook: false,\n        elementHook: false\n    };\n\n    var MountManager = function (_AbstractManager4) {\n        (0, _emberBabel.inherits)(MountManager, _AbstractManager4);\n\n        function MountManager() {\n            (0, _emberBabel.classCallCheck)(this, MountManager);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractManager4.apply(this, arguments));\n        }\n\n        MountManager.prototype.getDynamicLayout = function getDynamicLayout(state, _) {\n            var template = state.engine.lookup('template:application');\n            var layout = template.asLayout();\n            return {\n                handle: layout.compile(),\n                symbolTable: layout.symbolTable\n            };\n        };\n\n        MountManager.prototype.getCapabilities = function getCapabilities() {\n            return CAPABILITIES$2;\n        };\n\n        MountManager.prototype.create = function create(environment$$1, state) {\n            if (true) {\n                this._pushEngineToDebugStack('engine:' + state.name, environment$$1);\n            }\n            // TODO\n            // mount is a runtime helper, this shouldn't use dynamic layout\n            // we should resolve the engine app template in the helper\n            // it also should use the owner that looked up the mount helper.\n            var engine = environment$$1.owner.buildChildEngineInstance(state.name);\n            engine.boot();\n            var applicationFactory = engine.factoryFor('controller:application');\n            var controllerFactory = applicationFactory || (0, _emberRouting.generateControllerFactory)(engine, 'application');\n            var controller = void 0;\n            var self = void 0;\n            var bucket = void 0;\n            var tag = void 0;\n            if (_features.EMBER_ENGINES_MOUNT_PARAMS) {\n                var modelRef = state.modelRef;\n                if (modelRef === undefined) {\n                    controller = controllerFactory.create();\n                    self = new RootReference(controller);\n                    tag = _reference.CONSTANT_TAG;\n                    bucket = { engine: engine, controller: controller, self: self, tag: tag };\n                } else {\n                    var model = modelRef.value();\n                    var modelRev = modelRef.tag.value();\n                    controller = controllerFactory.create({ model: model });\n                    self = new RootReference(controller);\n                    tag = modelRef.tag;\n                    bucket = { engine: engine, controller: controller, self: self, tag: tag, modelRef: modelRef, modelRev: modelRev };\n                }\n            } else {\n                controller = controllerFactory.create();\n                self = new RootReference(controller);\n                tag = _reference.CONSTANT_TAG;\n                bucket = { engine: engine, controller: controller, self: self, tag: tag };\n            }\n            return bucket;\n        };\n\n        MountManager.prototype.getSelf = function getSelf(_ref21) {\n            var self = _ref21.self;\n\n            return self;\n        };\n\n        MountManager.prototype.getTag = function getTag(state) {\n            return state.tag;\n        };\n\n        MountManager.prototype.getDestructor = function getDestructor(_ref22) {\n            var engine = _ref22.engine;\n\n            return engine;\n        };\n\n        MountManager.prototype.didRenderLayout = function didRenderLayout() {\n            if (true) {\n                this.debugStack.pop();\n            }\n        };\n\n        MountManager.prototype.update = function update(bucket) {\n            if (_features.EMBER_ENGINES_MOUNT_PARAMS) {\n                var controller = bucket.controller,\n                    modelRef = bucket.modelRef,\n                    modelRev = bucket.modelRev;\n\n                if (!modelRef.tag.validate(modelRev)) {\n                    var model = modelRef.value();\n                    bucket.modelRev = modelRef.tag.value();\n                    controller.set('model', model);\n                }\n            }\n        };\n\n        return MountManager;\n    }(AbstractManager);\n\n    var MOUNT_MANAGER = new MountManager();\n\n    var MountDefinition = function MountDefinition(name, modelRef) {\n        (0, _emberBabel.classCallCheck)(this, MountDefinition);\n\n        this.manager = MOUNT_MANAGER;\n        this.state = { name: name, modelRef: modelRef };\n    };\n\n    function mountHelper(vm, args) {\n        var env = vm.env;\n        var nameRef = args.positional.at(0);\n        var modelRef = args.named.has('model') ? args.named.get('model') : undefined;\n        return new DynamicEngineReference(nameRef, env, modelRef);\n    }\n    /**\n      The `{{mount}}` helper lets you embed a routeless engine in a template.\n      Mounting an engine will cause an instance to be booted and its `application`\n      template to be rendered.\n    \n      For example, the following template mounts the `ember-chat` engine:\n    \n      ```handlebars\n      {{! application.hbs }}\n      {{mount \"ember-chat\"}}\n      ```\n    \n      Additionally, you can also pass in a `model` argument that will be\n      set as the engines model. This can be an existing object:\n    \n      ```\n      <div>\n        {{mount 'admin' model=userSettings}}\n      </div>\n      ```\n    \n      Or an inline `hash`, and you can even pass components:\n    \n      ```\n      <div>\n        <h1>Application template!</h1>\n        {{mount 'admin' model=(hash\n            title='Secret Admin'\n            signInButton=(component 'sign-in-button')\n        )}}\n      </div>\n      ```\n    \n      @method mount\n      @param {String} name Name of the engine to mount.\n      @param {Object} [model] Object that will be set as\n                              the model of the engine.\n      @for Ember.Templates.helpers\n      @category ember-application-engines\n      @public\n    */\n    function mountMacro(_name, params, hash, builder) {\n        if (_features.EMBER_ENGINES_MOUNT_PARAMS) {\n            (true && !(params.length === 1) && (0, _emberDebug.assert)('You can only pass a single positional argument to the {{mount}} helper, e.g. {{mount \"chat-engine\"}}.', params.length === 1));\n        } else {\n            (true && !(params.length === 1 && hash === null) && (0, _emberDebug.assert)('You can only pass a single argument to the {{mount}} helper, e.g. {{mount \"chat-engine\"}}.', params.length === 1 && hash === null));\n        }\n        var expr = [_wireFormat.Ops.Helper, '-mount', params || [], hash];\n        builder.dynamicComponent(expr, [], null, false, null, null);\n        return true;\n    }\n\n    var DynamicEngineReference = function () {\n        function DynamicEngineReference(nameRef, env, modelRef) {\n            (0, _emberBabel.classCallCheck)(this, DynamicEngineReference);\n\n            this.tag = nameRef.tag;\n            this.nameRef = nameRef;\n            this.modelRef = modelRef;\n            this.env = env;\n            this._lastName = null;\n            this._lastDef = null;\n        }\n\n        DynamicEngineReference.prototype.value = function value() {\n            var env = this.env,\n                nameRef = this.nameRef,\n                modelRef = this.modelRef;\n\n            var name = nameRef.value();\n            if (typeof name === 'string') {\n                if (this._lastName === name) {\n                    return this._lastDef;\n                }\n                (true && !(env.owner.hasRegistration('engine:' + name)) && (0, _emberDebug.assert)('You used `{{mount \\'' + name + '\\'}}`, but the engine \\'' + name + '\\' can not be found.', env.owner.hasRegistration('engine:' + name)));\n\n                if (!env.owner.hasRegistration('engine:' + name)) {\n                    return null;\n                }\n                this._lastName = name;\n                this._lastDef = (0, _runtime.curry)(new MountDefinition(name, modelRef));\n                return this._lastDef;\n            } else {\n                (true && !(name === null || name === undefined) && (0, _emberDebug.assert)('Invalid engine name \\'' + name + '\\' specified, engine name must be either a string, null or undefined.', name === null || name === undefined));\n\n                this._lastDef = null;\n                this._lastName = null;\n                return null;\n            }\n        };\n\n        DynamicEngineReference.prototype.get = function get() {\n            return _runtime.UNDEFINED_REFERENCE;\n        };\n\n        return DynamicEngineReference;\n    }();\n\n    var RootOutletReference = function () {\n        function RootOutletReference(outletState) {\n            (0, _emberBabel.classCallCheck)(this, RootOutletReference);\n\n            this.outletState = outletState;\n            this.tag = _reference.DirtyableTag.create();\n        }\n\n        RootOutletReference.prototype.get = function get(key) {\n            return new PathReference(this, key);\n        };\n\n        RootOutletReference.prototype.value = function value() {\n            return this.outletState;\n        };\n\n        RootOutletReference.prototype.update = function update(state) {\n            this.outletState.outlets.main = state;\n            this.tag.inner.dirty();\n        };\n\n        return RootOutletReference;\n    }();\n\n    var OutletReference = function () {\n        function OutletReference(parentStateRef, outletNameRef) {\n            (0, _emberBabel.classCallCheck)(this, OutletReference);\n\n            this.parentStateRef = parentStateRef;\n            this.outletNameRef = outletNameRef;\n            this.tag = (0, _reference.combine)([parentStateRef.tag, outletNameRef.tag]);\n        }\n\n        OutletReference.prototype.value = function value() {\n            var outletState = this.parentStateRef.value();\n            var outlets = outletState === undefined ? undefined : outletState.outlets;\n            return outlets === undefined ? undefined : outlets[this.outletNameRef.value()];\n        };\n\n        OutletReference.prototype.get = function get(key) {\n            return new PathReference(this, key);\n        };\n\n        return OutletReference;\n    }();\n\n    var PathReference = function () {\n        function PathReference(parent, key) {\n            (0, _emberBabel.classCallCheck)(this, PathReference);\n\n            this.parent = parent;\n            this.key = key;\n            this.tag = parent.tag;\n        }\n\n        PathReference.prototype.get = function get(key) {\n            return new PathReference(this, key);\n        };\n\n        PathReference.prototype.value = function value() {\n            var parent = this.parent.value();\n            return parent && parent[this.key];\n        };\n\n        return PathReference;\n    }();\n\n    var OrphanedOutletReference = function () {\n        function OrphanedOutletReference(root, name) {\n            (0, _emberBabel.classCallCheck)(this, OrphanedOutletReference);\n\n            this.root = root;\n            this.name = name;\n            this.tag = root.tag;\n        }\n\n        OrphanedOutletReference.prototype.value = function value() {\n            var rootState = this.root.value();\n            var outletState = rootState && rootState.outlets.main;\n            var outlets = outletState && outletState.outlets;\n            outletState = outlets && outlets.__ember_orphans__;\n            outlets = outletState && outletState.outlets;\n            if (outlets === undefined) {\n                return;\n            }\n            var matched = outlets[this.name];\n            if (matched === undefined || matched.render === undefined) {\n                return;\n            }\n            var state = Object.create(null);\n            state[matched.render.outlet] = matched;\n            matched.wasUsed = true;\n            return { outlets: state, render: undefined };\n        };\n\n        OrphanedOutletReference.prototype.get = function get(key) {\n            return new PathReference(this, key);\n        };\n\n        return OrphanedOutletReference;\n    }();\n\n    /**\n      The `{{outlet}}` helper lets you specify where a child route will render in\n      your template. An important use of the `{{outlet}}` helper is in your\n      application's `application.hbs` file:\n    \n      ```handlebars\n      {{! app/templates/application.hbs }}\n      <!-- header content goes here, and will always display -->\n      {{my-header}}\n      <div class=\"my-dynamic-content\">\n        <!-- this content will change based on the current route, which depends on the current URL -->\n        {{outlet}}\n      </div>\n      <!-- footer content goes here, and will always display -->\n      {{my-footer}}\n      ```\n    \n      See [templates guide](https://emberjs.com/guides/templates/the-application-template/) for\n      additional information on using `{{outlet}}` in `application.hbs`.\n      You may also specify a name for the `{{outlet}}`, which is useful when using more than one\n      `{{outlet}}` in a template:\n    \n      ```handlebars\n      {{outlet \"menu\"}}\n      {{outlet \"sidebar\"}}\n      {{outlet \"main\"}}\n      ```\n    \n      Your routes can then render into a specific one of these `outlet`s by specifying the `outlet`\n      attribute in your `renderTemplate` function:\n    \n      ```app/routes/menu.js\n      import Route from '@ember/routing/route';\n    \n      export default Route.extend({\n        renderTemplate() {\n          this.render({ outlet: 'menu' });\n        }\n      });\n      ```\n    \n      See the [routing guide](https://emberjs.com/guides/routing/rendering-a-template/) for more\n      information on how your `route` interacts with the `{{outlet}}` helper.\n      Note: Your content __will not render__ if there isn't an `{{outlet}}` for it.\n    \n      @method outlet\n      @param {String} [name]\n      @for Ember.Templates.helpers\n      @public\n    */\n    function outletHelper(vm, args) {\n        var scope = vm.dynamicScope();\n        var nameRef = void 0;\n        if (args.positional.length === 0) {\n            nameRef = new _reference.ConstReference('main');\n        } else {\n            nameRef = args.positional.at(0);\n        }\n        return new OutletComponentReference(new OutletReference(scope.outletState, nameRef));\n    }\n    function outletMacro(_name, params, hash, builder) {\n        var expr = [_wireFormat.Ops.Helper, '-outlet', params || [], hash];\n        builder.dynamicComponent(expr, [], null, false, null, null);\n        return true;\n    }\n\n    var OutletComponentReference = function () {\n        function OutletComponentReference(outletRef) {\n            (0, _emberBabel.classCallCheck)(this, OutletComponentReference);\n\n            this.outletRef = outletRef;\n            this.definition = null;\n            this.lastState = null;\n            // The router always dirties the root state.\n            this.tag = outletRef.tag;\n        }\n\n        OutletComponentReference.prototype.value = function value() {\n            var state = stateFor(this.outletRef);\n            if (validate(state, this.lastState)) {\n                return this.definition;\n            }\n            this.lastState = state;\n            var definition = null;\n            if (state !== null) {\n                definition = (0, _runtime.curry)(new OutletComponentDefinition(state));\n            }\n            return this.definition = definition;\n        };\n\n        OutletComponentReference.prototype.get = function get(_key) {\n            return _runtime.UNDEFINED_REFERENCE;\n        };\n\n        return OutletComponentReference;\n    }();\n\n    function stateFor(ref) {\n        var outlet = ref.value();\n        if (outlet === undefined) return null;\n        var render = outlet.render;\n        if (render === undefined) return null;\n        var template = render.template;\n        if (template === undefined) return null;\n        return {\n            ref: ref,\n            name: render.name,\n            outlet: render.outlet,\n            template: template,\n            controller: render.controller\n        };\n    }\n    function validate(state, lastState) {\n        if (state === null) {\n            return lastState === null;\n        }\n        if (lastState === null) {\n            return false;\n        }\n        return state.template === lastState.template && state.controller === lastState.controller;\n    }\n\n    var AbstractRenderManager = function (_AbstractManager5) {\n        (0, _emberBabel.inherits)(AbstractRenderManager, _AbstractManager5);\n\n        function AbstractRenderManager() {\n            (0, _emberBabel.classCallCheck)(this, AbstractRenderManager);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractManager5.apply(this, arguments));\n        }\n\n        AbstractRenderManager.prototype.create = function create(env, definition, args, dynamicScope) {\n            var name = definition.name;\n\n            if (true) {\n                this._pushToDebugStack('controller:' + name + ' (with the render helper)', env);\n            }\n            if (dynamicScope.rootOutletState) {\n                dynamicScope.outletState = new OrphanedOutletReference(dynamicScope.rootOutletState, name);\n            }\n            return this.createRenderState(args, env.owner, name);\n        };\n\n        AbstractRenderManager.prototype.getLayout = function getLayout(_ref23) {\n            var template = _ref23.template;\n\n            var layout = template.asLayout();\n            return {\n                handle: layout.compile(),\n                symbolTable: layout.symbolTable\n            };\n        };\n\n        AbstractRenderManager.prototype.getSelf = function getSelf(_ref24) {\n            var controller = _ref24.controller;\n\n            return new RootReference(controller);\n        };\n\n        return AbstractRenderManager;\n    }(AbstractManager);\n\n    if (true) {\n        AbstractRenderManager.prototype.didRenderLayout = function () {\n            this.debugStack.pop();\n        };\n    }\n    var CAPABILITIES$3 = {\n        dynamicLayout: false,\n        dynamicTag: false,\n        prepareArgs: false,\n        createArgs: false,\n        attributeHook: false,\n        elementHook: false\n    };\n\n    var SingletonRenderManager = function (_AbstractRenderManage) {\n        (0, _emberBabel.inherits)(SingletonRenderManager, _AbstractRenderManage);\n\n        function SingletonRenderManager() {\n            (0, _emberBabel.classCallCheck)(this, SingletonRenderManager);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractRenderManage.apply(this, arguments));\n        }\n\n        SingletonRenderManager.prototype.createRenderState = function createRenderState(_args, owner, name) {\n            var controller = owner.lookup('controller:' + name) || (0, _emberRouting.generateController)(owner, name);\n            return { controller: controller };\n        };\n\n        SingletonRenderManager.prototype.getCapabilities = function getCapabilities(_) {\n            return CAPABILITIES$3;\n        };\n\n        SingletonRenderManager.prototype.getTag = function getTag() {\n            // todo this should be the tag of the state args\n            return _reference.CONSTANT_TAG;\n        };\n\n        SingletonRenderManager.prototype.getDestructor = function getDestructor() {\n            return null;\n        };\n\n        return SingletonRenderManager;\n    }(AbstractRenderManager);\n\n    var SINGLETON_RENDER_MANAGER = new SingletonRenderManager();\n    var NONSINGLETON_CAPABILITIES = {\n        dynamicLayout: false,\n        dynamicTag: false,\n        prepareArgs: false,\n        createArgs: true,\n        attributeHook: false,\n        elementHook: false\n    };\n\n    var NonSingletonRenderManager = function (_AbstractRenderManage2) {\n        (0, _emberBabel.inherits)(NonSingletonRenderManager, _AbstractRenderManage2);\n\n        function NonSingletonRenderManager() {\n            (0, _emberBabel.classCallCheck)(this, NonSingletonRenderManager);\n            return (0, _emberBabel.possibleConstructorReturn)(this, _AbstractRenderManage2.apply(this, arguments));\n        }\n\n        NonSingletonRenderManager.prototype.createRenderState = function createRenderState(args, owner, name) {\n            var model = args.positional.at(1);\n            var factory = owner.factoryFor('controller:' + name) || (0, _emberRouting.generateControllerFactory)(owner, 'controller:' + name);\n            var controller = factory.create({ model: model.value() });\n            return { controller: controller, model: model };\n        };\n\n        NonSingletonRenderManager.prototype.update = function update(_ref25) {\n            var controller = _ref25.controller,\n                model = _ref25.model;\n\n            controller.set('model', model.value());\n        };\n\n        NonSingletonRenderManager.prototype.getCapabilities = function getCapabilities(_) {\n            return NONSINGLETON_CAPABILITIES;\n        };\n\n        NonSingletonRenderManager.prototype.getTag = function getTag(_ref26) {\n            var model = _ref26.model;\n\n            return model.tag;\n        };\n\n        NonSingletonRenderManager.prototype.getDestructor = function getDestructor(_ref27) {\n            var controller = _ref27.controller;\n\n            return controller;\n        };\n\n        return NonSingletonRenderManager;\n    }(AbstractRenderManager);\n\n    var NON_SINGLETON_RENDER_MANAGER = new NonSingletonRenderManager();\n\n    var RenderDefinition = function RenderDefinition(name, template, manager) {\n        (0, _emberBabel.classCallCheck)(this, RenderDefinition);\n\n        this.manager = manager;\n        this.state = {\n            name: name,\n            template: template\n        };\n    };\n\n    /**\n     @module ember\n    */\n    function renderHelper(vm, args) {\n        var env = vm.env;\n        var nameRef = args.positional.at(0);\n        (true && !((0, _reference.isConst)(nameRef)) && (0, _emberDebug.assert)('The first argument of {{render}} must be quoted, e.g. {{render \"sidebar\"}}.', (0, _reference.isConst)(nameRef)));\n        (true && !(args.positional.length === 1 || !(0, _reference.isConst)(args.positional.at(1))) && (0, _emberDebug.assert)('The second argument of {{render}} must be a path, e.g. {{render \"post\" post}}.', args.positional.length === 1 || !(0, _reference.isConst)(args.positional.at(1))));\n\n        var templateName = nameRef.value();\n        // tslint:disable-next-line:max-line-length\n        (true && !(env.owner.hasRegistration('template:' + templateName)) && (0, _emberDebug.assert)('You used `{{render \\'' + templateName + '\\'}}`, but \\'' + templateName + '\\' can not be found as a template.', env.owner.hasRegistration('template:' + templateName)));\n\n        var template = env.owner.lookup('template:' + templateName);\n        var controllerName = void 0;\n        if (args.named.has('controller')) {\n            var controllerNameRef = args.named.get('controller');\n            // tslint:disable-next-line:max-line-length\n            (true && !((0, _reference.isConst)(controllerNameRef)) && (0, _emberDebug.assert)('The controller argument for {{render}} must be quoted, e.g. {{render \"sidebar\" controller=\"foo\"}}.', (0, _reference.isConst)(controllerNameRef)));\n\n            // TODO should be ensuring this to string here\n            controllerName = controllerNameRef.value();\n            // tslint:disable-next-line:max-line-length\n            (true && !(env.owner.hasRegistration('controller:' + controllerName)) && (0, _emberDebug.assert)('The controller name you supplied \\'' + controllerName + '\\' did not resolve to a controller.', env.owner.hasRegistration('controller:' + controllerName)));\n        } else {\n            controllerName = templateName;\n        }\n        if (args.positional.length === 1) {\n            var def = new RenderDefinition(controllerName, template, SINGLETON_RENDER_MANAGER);\n            return UnboundReference.create((0, _runtime.curry)(def));\n        } else {\n            var _def = new RenderDefinition(controllerName, template, NON_SINGLETON_RENDER_MANAGER);\n            var captured = args.capture();\n            return UnboundReference.create((0, _runtime.curry)(_def, captured));\n        }\n    }\n    /**\n      Calling ``{{render}}`` from within a template will insert another\n      template that matches the provided name. The inserted template will\n      access its properties on its own controller (rather than the controller\n      of the parent template).\n    \n      If a view class with the same name exists, the view class also will be used.\n      Note: A given controller may only be used *once* in your app in this manner.\n      A singleton instance of the controller will be created for you.\n    \n      Example:\n    \n      ```app/controllers/navigation.js\n      import Controller from '@ember/controller';\n    \n      export default Controller.extend({\n        who: \"world\"\n      });\n      ```\n    \n      ```handlebars\n      <!-- navigation.hbs -->\n      Hello, {{who}}.\n      ```\n    \n      ```handlebars\n      <!-- application.hbs -->\n      <h1>My great app</h1>\n      {{render \"navigation\"}}\n      ```\n    \n      ```html\n      <h1>My great app</h1>\n      <div class='ember-view'>\n        Hello, world.\n      </div>\n      ```\n    \n      Optionally you may provide a second argument: a property path\n      that will be bound to the `model` property of the controller.\n      If a `model` property path is specified, then a new instance of the\n      controller will be created and `{{render}}` can be used multiple times\n      with the same name.\n    \n      For example if you had this `author` template.\n    \n      ```handlebars\n      <div class=\"author\">\n        Written by {{firstName}} {{lastName}}.\n        Total Posts: {{postCount}}\n      </div>\n      ```\n    \n      You could render it inside the `post` template using the `render` helper.\n    \n      ```handlebars\n      <div class=\"post\">\n        <h1>{{title}}</h1>\n        <div>{{body}}</div>\n        {{render \"author\" author}}\n      </div>\n      ```\n    \n      @method render\n      @for Ember.Templates.helpers\n      @param {String} name\n      @param {Object?} context\n      @param {Hash} options\n      @return {String} HTML string\n      @public\n      @deprecated Use a component instead\n    */\n    function renderMacro(_name, params, hash, builder) {\n        if (_emberEnvironment.ENV._ENABLE_RENDER_SUPPORT === true) {\n            // TODO needs makeComponentDefinition a helper that returns a curried definition\n            // TODO not sure all args are for definition or component\n            // likely the controller name should be a arg to create?\n            var expr = [_wireFormat.Ops.Helper, '-render', params || [], hash];\n            builder.dynamicComponent(expr, null, null, false, null, null);\n            return true;\n        }\n        return false;\n    }\n\n    function refineInlineSyntax(name, params, hash, builder) {\n        (true && !(!(builder.resolver['resolver']['builtInHelpers'][name] && builder.referrer.owner.hasRegistration('helper:' + name))) && (0, _emberDebug.assert)('You attempted to overwrite the built-in helper \"' + name + '\" which is not allowed. Please rename the helper.', !(builder.resolver['resolver']['builtInHelpers'][name] && builder.referrer.owner.hasRegistration('helper:' + name))));\n\n        if (name.indexOf('-') === -1) {\n            return false;\n        }\n        var handle = builder.resolver.lookupComponentDefinition(name, builder.referrer);\n        if (handle !== null) {\n            builder.component.static(handle, [params === null ? [] : params, hashToArgs(hash), null, null]);\n            return true;\n        }\n        return false;\n    }\n    function refineBlockSyntax(name, params, hash, template, inverse, builder) {\n        if (name.indexOf('-') === -1) {\n            return false;\n        }\n        var handle = builder.resolver.lookupComponentDefinition(name, builder.referrer);\n        if (handle !== null) {\n            wrapComponentClassAttribute(hash);\n            builder.component.static(handle, [params, hashToArgs(hash), template, inverse]);\n            return true;\n        }\n        (true && !(builder.referrer.owner.hasRegistration('helper:' + name)) && (0, _emberDebug.assert)('A component or helper named \"' + name + '\" could not be found', builder.referrer.owner.hasRegistration('helper:' + name)));\n        (true && !(!function () {\n            var resolver = builder.resolver['resolver'];\n            var _builder$referrer = builder.referrer,\n                owner = _builder$referrer.owner,\n                moduleName = _builder$referrer.moduleName;\n\n            if (name === 'component' || resolver['builtInHelpers'][name]) {\n                return true;\n            }\n            var options = { source: 'template:' + moduleName };\n            return owner.hasRegistration('helper:' + name, options) || owner.hasRegistration('helper:' + name);\n        }()) && (0, _emberDebug.assert)('Helpers may not be used in the block form, for example {{#' + name + '}}{{/' + name + '}}. Please use a component, or alternatively use the helper in combination with a built-in Ember helper, for example {{#if (' + name + ')}}{{/if}}.', !function () {\n            var resolver = builder.resolver['resolver'];var _builder$referrer = builder.referrer,\n                owner = _builder$referrer.owner,\n                moduleName = _builder$referrer.moduleName;\n            if (name === 'component' || resolver['builtInHelpers'][name]) {\n                return true;\n            }var options = { source: 'template:' + moduleName };return owner.hasRegistration('helper:' + name, options) || owner.hasRegistration('helper:' + name);\n        }()));\n\n        return false;\n    }\n    var experimentalMacros = [];\n    // This is a private API to allow for experimental macros\n    // to be created in user space. Registering a macro should\n    // should be done in an initializer.\n    function registerMacros(macro) {\n        experimentalMacros.push(macro);\n    }\n    function populateMacros(macros) {\n        var inlines = macros.inlines,\n            blocks = macros.blocks;\n\n        inlines.add('outlet', outletMacro);\n        inlines.add('render', renderMacro);\n        inlines.add('mount', mountMacro);\n        inlines.add('input', inputMacro);\n        inlines.add('textarea', textAreaMacro);\n        inlines.addMissing(refineInlineSyntax);\n        if (_features.EMBER_TEMPLATE_BLOCK_LET_HELPER === true) {\n            blocks.add('let', blockLetMacro);\n        }\n        blocks.addMissing(refineBlockSyntax);\n        for (var i = 0; i < experimentalMacros.length; i++) {\n            var macro = experimentalMacros[i];\n            macro(blocks, inlines);\n        }\n        return { blocks: blocks, inlines: inlines };\n    }\n\n    function instrumentationPayload$1(name) {\n        return { object: 'component:' + name };\n    }\n    function makeOptions(moduleName) {\n        return moduleName !== undefined ? { source: 'template:' + moduleName } : undefined;\n    }\n    var BUILTINS_HELPERS = {\n        'if': inlineIf,\n        action: action,\n        concat: concat$1,\n        get: get$1,\n        hash: hash,\n        log: log$1,\n        mut: mut,\n        'query-params': queryParams$1,\n        readonly: readonly,\n        unbound: unbound,\n        'unless': inlineUnless,\n        '-class': classHelper$1,\n        '-each-in': eachIn,\n        '-input-type': inputTypeHelper$1,\n        '-normalize-class': normalizeClassHelper,\n        '-html-safe': htmlSafeHelper,\n        '-get-dynamic-var': _runtime.getDynamicVar,\n        '-mount': mountHelper,\n        '-outlet': outletHelper,\n        '-render': renderHelper\n    };\n    var BUILTIN_MODIFIERS = {\n        action: new ActionModifierManager()\n    };\n\n    var RuntimeResolver = function () {\n        function RuntimeResolver() {\n            (0, _emberBabel.classCallCheck)(this, RuntimeResolver);\n\n            this.templateOptions = {\n                program: new _program.Program(new _program.LazyConstants(this)),\n                macros: new _opcodeCompiler.Macros(),\n                resolver: new CompileTimeLookup(this),\n                Builder: _opcodeCompiler.LazyOpcodeBuilder\n            };\n            this.handles = [undefined];\n            this.objToHandle = new WeakMap();\n            this.builtInHelpers = BUILTINS_HELPERS;\n            this.builtInModifiers = BUILTIN_MODIFIERS;\n            // supports directly imported late bound layouts on component.prototype.layout\n            this.templateCache = new Map();\n            this.componentDefinitionCache = new Map();\n            this.templateCacheHits = 0;\n            this.templateCacheMisses = 0;\n            this.componentDefinitionCount = 0;\n            this.helperDefinitionCount = 0;\n            populateMacros(this.templateOptions.macros);\n        }\n        /***  IRuntimeResolver ***/\n        /**\n         * public componentDefHandleCount = 0;\n         * Called while executing Append Op.PushDynamicComponentManager if string\n         */\n\n\n        RuntimeResolver.prototype.lookupComponent = function lookupComponent(name, meta) {\n            var handle = this.lookupComponentDefinition(name, meta);\n            if (handle === null) {\n                (true && !(false) && (0, _emberDebug.assert)('Could not find component named \"' + name + '\" (no component or template with that name was found)'));\n\n                return null;\n            }\n            return this.resolve(handle);\n        };\n\n        RuntimeResolver.prototype.resolve = function resolve(handle) {\n            return this.handles[handle];\n        };\n\n        RuntimeResolver.prototype.lookupHelper = function lookupHelper(name, meta) {\n            var nextHandle = this.handles.length;\n            var helper$$1 = this._lookupHelper(name, meta);\n            if (helper$$1 !== null) {\n                var handle = this.handle(helper$$1);\n                if (nextHandle === handle) {\n                    this.helperDefinitionCount++;\n                }\n                return handle;\n            }\n            return null;\n        };\n\n        RuntimeResolver.prototype.lookupComponentDefinition = function lookupComponentDefinition(name, meta) {\n            var nextHandle = this.handles.length;\n            var handle = this.handle(this._lookupComponentDefinition(name, meta));\n            if (nextHandle === handle) {\n                this.componentDefinitionCount++;\n            }\n            return handle;\n        };\n\n        RuntimeResolver.prototype.lookupModifier = function lookupModifier(name, _meta) {\n            return this.handle(this._lookupModifier(name));\n        };\n\n        RuntimeResolver.prototype.lookupPartial = function lookupPartial(name, meta) {\n            var partial = this._lookupPartial(name, meta);\n            return this.handle(partial);\n        };\n\n        RuntimeResolver.prototype.createTemplate = function createTemplate(factory, owner) {\n            var cache = this.templateCache.get(owner);\n            if (cache === undefined) {\n                cache = new Map();\n                this.templateCache.set(owner, cache);\n            }\n            var template = cache.get(factory);\n            if (template === undefined) {\n                var injections = { options: this.templateOptions };\n                (0, _emberUtils.setOwner)(injections, owner);\n                template = factory.create(injections);\n                cache.set(factory, template);\n                this.templateCacheMisses++;\n            } else {\n                this.templateCacheHits++;\n            }\n            return template;\n        };\n\n        RuntimeResolver.prototype.handle = function handle(obj) {\n            if (obj === undefined || obj === null) {\n                return null;\n            }\n            var handle = this.objToHandle.get(obj);\n            if (handle === undefined) {\n                handle = this.handles.push(obj) - 1;\n                this.objToHandle.set(obj, handle);\n            }\n            return handle;\n        };\n\n        RuntimeResolver.prototype._lookupHelper = function _lookupHelper(name, meta) {\n            var helper$$1 = this.builtInHelpers[name];\n            if (helper$$1 !== undefined) {\n                return helper$$1;\n            }\n            var owner = meta.owner,\n                moduleName = meta.moduleName;\n\n            var options = makeOptions(moduleName);\n            var factory = owner.factoryFor('helper:' + name, options) || owner.factoryFor('helper:' + name);\n            if (!isHelperFactory(factory)) {\n                return null;\n            }\n            return function (vm, args) {\n                var helper$$1 = factory.create();\n                if (isSimpleHelper(helper$$1)) {\n                    return new SimpleHelperReference(helper$$1.compute, args.capture());\n                }\n                vm.newDestroyable(helper$$1);\n                return ClassBasedHelperReference.create(helper$$1, args.capture());\n            };\n        };\n\n        RuntimeResolver.prototype._lookupPartial = function _lookupPartial(name, meta) {\n            var template = (0, _emberViews.lookupPartial)(name, meta.owner);\n            var partial = new _opcodeCompiler.PartialDefinition(name, (0, _emberViews.lookupPartial)(name, meta.owner));\n            if (template) {\n                return partial;\n            } else {\n                throw new Error(name + ' is not a partial');\n            }\n        };\n\n        RuntimeResolver.prototype._lookupModifier = function _lookupModifier(name) {\n            var modifier = this.builtInModifiers[name];\n            if (modifier !== undefined) {\n                return modifier;\n            }\n            return null;\n        };\n\n        RuntimeResolver.prototype._lookupComponentDefinition = function _lookupComponentDefinition(name, meta) {\n            var _lookupComponent2 = (0, _emberViews.lookupComponent)(meta.owner, name, makeOptions(meta.moduleName)),\n                layout = _lookupComponent2.layout,\n                component = _lookupComponent2.component;\n\n            var key = component === undefined ? layout : component;\n            if (key === undefined) {\n                return null;\n            }\n            var cachedComponentDefinition = this.componentDefinitionCache.get(key);\n            if (cachedComponentDefinition !== undefined) {\n                return cachedComponentDefinition;\n            }\n            if (layout && !component && _emberEnvironment.ENV._TEMPLATE_ONLY_GLIMMER_COMPONENTS) {\n                var _definition = new TemplateOnlyComponentDefinition(layout);\n                this.componentDefinitionCache.set(key, _definition);\n                return _definition;\n            }\n            var finalizer = (0, _emberMetal._instrumentStart)('render.getComponentDefinition', instrumentationPayload$1, name);\n            var definition = layout || component ? new CurlyComponentDefinition(name, undefined, component || meta.owner.factoryFor((0, _container.privatize)(_templateObject2)), null, layout // TODO fix type\n            ) : null;\n            finalizer();\n            this.componentDefinitionCache.set(key, definition);\n            return definition;\n        };\n\n        return RuntimeResolver;\n    }();\n\n    // factory for DI\n    var TemplateOptions = {\n        create: function () {\n            return new RuntimeResolver().templateOptions;\n        }\n    };\n\n    var ComponentTemplate = template({ \"id\": \"o98Iahwz\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[13,1]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"packages/ember-glimmer/lib/templates/component.hbs\" } });\n\n    var OutletTemplate = template({ \"id\": \"cNysaqQS\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[20,\\\"outlet\\\"],false]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"packages/ember-glimmer/lib/templates/outlet.hbs\" } });\n\n    var TOP_LEVEL_NAME = '-top-level';\n    var TOP_LEVEL_OUTLET = 'main';\n\n    var OutletView = function () {\n        function OutletView(_environment, renderer, owner, template) {\n            (0, _emberBabel.classCallCheck)(this, OutletView);\n\n            this._environment = _environment;\n            this.renderer = renderer;\n            this.owner = owner;\n            this.template = template;\n            var ref = this.ref = new RootOutletReference({\n                outlets: { main: undefined },\n                render: {\n                    owner: owner,\n                    into: undefined,\n                    outlet: TOP_LEVEL_OUTLET,\n                    name: TOP_LEVEL_NAME,\n                    controller: undefined,\n                    template: template\n                }\n            });\n            this.state = {\n                ref: ref,\n                name: TOP_LEVEL_NAME,\n                outlet: TOP_LEVEL_OUTLET,\n                template: template,\n                controller: undefined\n            };\n        }\n\n        OutletView.extend = function extend(injections) {\n            return function (_OutletView) {\n                (0, _emberBabel.inherits)(_class, _OutletView);\n\n                function _class() {\n                    (0, _emberBabel.classCallCheck)(this, _class);\n                    return (0, _emberBabel.possibleConstructorReturn)(this, _OutletView.apply(this, arguments));\n                }\n\n                _class.create = function create(options) {\n                    if (options) {\n                        return _OutletView.create.call(this, (0, _emberUtils.assign)({}, injections, options));\n                    } else {\n                        return _OutletView.create.call(this, injections);\n                    }\n                };\n\n                return _class;\n            }(OutletView);\n        };\n\n        OutletView.reopenClass = function reopenClass(injections) {\n            (0, _emberUtils.assign)(this, injections);\n        };\n\n        OutletView.create = function create(options) {\n            var _environment = options._environment,\n                renderer = options.renderer,\n                template = options.template;\n\n            var owner = options[_emberUtils.OWNER];\n            return new OutletView(_environment, renderer, owner, template);\n        };\n\n        OutletView.prototype.appendTo = function appendTo(selector) {\n            var env = this._environment || _emberEnvironment.environment;\n            var target = void 0;\n            if (env.hasDOM) {\n                target = typeof selector === 'string' ? document.querySelector(selector) : selector;\n            } else {\n                target = selector;\n            }\n            _emberMetal.run.schedule('render', this.renderer, 'appendOutletView', this, target);\n        };\n\n        OutletView.prototype.rerender = function rerender() {};\n\n        OutletView.prototype.setOutletState = function setOutletState(state) {\n            this.ref.update(state);\n        };\n\n        OutletView.prototype.destroy = function destroy() {};\n\n        return OutletView;\n    }();\n\n    function setupApplicationRegistry(registry) {\n        registry.injection('service:-glimmer-environment', 'appendOperations', 'service:-dom-tree-construction');\n        registry.injection('renderer', 'env', 'service:-glimmer-environment');\n        registry.register((0, _container.privatize)(_templateObject3), RootTemplate);\n        registry.injection('renderer', 'rootTemplate', (0, _container.privatize)(_templateObject3));\n        registry.register('renderer:-dom', InteractiveRenderer);\n        registry.register('renderer:-inert', InertRenderer);\n        if (_emberEnvironment.environment.hasDOM) {\n            registry.injection('service:-glimmer-environment', 'updateOperations', 'service:-dom-changes');\n        }\n        registry.register('service:-dom-changes', {\n            create: function (_ref28) {\n                var document = _ref28.document;\n\n                return new _runtime.DOMChanges(document);\n            }\n        });\n        registry.register('service:-dom-tree-construction', {\n            create: function (_ref29) {\n                var document = _ref29.document;\n\n                var Implementation = _emberEnvironment.environment.hasDOM ? _runtime.DOMTreeConstruction : _node.NodeDOMTreeConstruction;\n                return new Implementation(document);\n            }\n        });\n    }\n    function setupEngineRegistry(registry) {\n        registry.register('view:-outlet', OutletView);\n        registry.register('template:-outlet', OutletTemplate);\n        registry.injection('view:-outlet', 'template', 'template:-outlet');\n        registry.injection('service:-dom-changes', 'document', 'service:-document');\n        registry.injection('service:-dom-tree-construction', 'document', 'service:-document');\n        registry.register((0, _container.privatize)(_templateObject), ComponentTemplate);\n        registry.register('service:-glimmer-environment', Environment$1);\n        registry.register((0, _container.privatize)(_templateObject4), TemplateOptions);\n        registry.injection('template', 'options', (0, _container.privatize)(_templateObject4));\n        registry.optionsForType('helper', { instantiate: false });\n        registry.register('helper:loc', loc);\n        registry.register('component:-text-field', TextField);\n        registry.register('component:-text-area', TextArea);\n        registry.register('component:-checkbox', Checkbox);\n        registry.register('component:link-to', LinkComponent);\n        if (!_emberEnvironment.ENV._TEMPLATE_ONLY_GLIMMER_COMPONENTS) {\n            registry.register((0, _container.privatize)(_templateObject2), Component);\n        }\n    }\n\n    /**\n      [Glimmer](https://github.com/tildeio/glimmer) is a templating engine used by Ember.js that is compatible with a subset of the [Handlebars](http://handlebarsjs.com/) syntax.\n    \n      ### Showing a property\n    \n      Templates manage the flow of an application's UI, and display state (through\n      the DOM) to a user. For example, given a component with the property \"name\",\n      that component's template can use the name in several ways:\n    \n      ```app/components/person-profile.js\n      import Component from '@ember/component';\n    \n      export default Component.extend({\n        name: 'Jill'\n      });\n      ```\n    \n      ```app/components/person-profile.hbs\n      {{name}}\n      <div>{{name}}</div>\n      <span data-name={{name}}></span>\n      ```\n    \n      Any time the \"name\" property on the component changes, the DOM will be\n      updated.\n    \n      Properties can be chained as well:\n    \n      ```handlebars\n      {{aUserModel.name}}\n      <div>{{listOfUsers.firstObject.name}}</div>\n      ```\n    \n      ### Using Ember helpers\n    \n      When content is passed in mustaches `{{}}`, Ember will first try to find a helper\n      or component with that name. For example, the `if` helper:\n    \n      ```handlebars\n      {{if name \"I have a name\" \"I have no name\"}}\n      <span data-has-name={{if name true}}></span>\n      ```\n    \n      The returned value is placed where the `{{}}` is called. The above style is\n      called \"inline\". A second style of helper usage is called \"block\". For example:\n    \n      ```handlebars\n      {{#if name}}\n      I have a name\n      {{else}}\n      I have no name\n      {{/if}}\n      ```\n    \n      The block form of helpers allows you to control how the UI is created based\n      on the values of properties.\n      A third form of helper is called \"nested\". For example here the concat\n      helper will add \" Doe\" to a displayed name if the person has no last name:\n    \n      ```handlebars\n      <span data-name={{concat firstName (\n      if lastName (concat \" \" lastName) \"Doe\"\n      )}}></span>\n      ```\n    \n      Ember's built-in helpers are described under the [Ember.Templates.helpers](/api/ember/release/classes/Ember.Templates.helpers)\n      namespace. Documentation on creating custom helpers can be found under\n      [Helper](/api/classes/Ember.Helper.html).\n    \n      ### Invoking a Component\n    \n      Ember components represent state to the UI of an application. Further\n      reading on components can be found under [Component](/api/ember/release/classes/Component).\n    \n      @module @ember/component\n      @main @ember/component\n      @public\n     */\n    /**\n     @module ember\n     @class Ember.Templates.helpers\n     @public\n     */\n    /**\n      Use the `{{with}}` helper when you want to alias a property to a new name. This is helpful\n      for semantic clarity as it allows you to retain default scope or to reference a property from another\n      `{{with}}` block.\n    \n      If the aliased property is \"falsey\", for example: `false`, `undefined` `null`, `\"\"`, `0`, `NaN` or\n      an empty array, the block will not be rendered.\n    \n      ```handlebars\n      {{! Will only render if user.posts contains items}}\n      {{#with user.posts as |blogPosts|}}\n        <div class=\"notice\">\n          There are {{blogPosts.length}} blog posts written by {{user.name}}.\n        </div>\n        {{#each blogPosts as |post|}}\n          <li>{{post.title}}</li>\n        {{/each}}\n      {{/with}}\n      ```\n    \n      NOTE: The alias should not reuse a name from the bound property path.\n    \n      For example: `{{#with foo.bar as |foo|}}` is not supported because it attempts to alias using\n      the first part of the property path, `foo`. Instead, use `{{#with foo.bar as |baz|}}`.\n    \n      @method with\n      @for Ember.Templates.helpers\n      @param {Object} options\n      @return {String} HTML string\n      @public\n     */\n    /**\n      `{{yield}}` denotes an area of a template that will be rendered inside\n      of another template.\n    \n      ### Use with `Component`\n    \n      When designing components `{{yield}}` is used to denote where, inside the component's\n      template, an optional block passed to the component should render:\n    \n      ```app/templates/application.hbs\n      {{#labeled-textfield value=someProperty}}\n        First name:\n      {{/labeled-textfield}}\n      ```\n    \n      ```app/templates/components/labeled-textfield.hbs\n      <label>\n        {{yield}} {{input value=value}}\n      </label>\n      ```\n    \n      Result:\n    \n      ```html\n      <label>\n        First name: <input type=\"text\" />\n      </label>\n      ```\n    \n      Additionally you can `yield` properties into the context for use by the consumer:\n    \n      ```app/templates/application.hbs\n      {{#labeled-textfield value=someProperty validator=(action 'firstNameValidator') as |validationError|}}\n        {{#if validationError}}\n          <p class=\"error\">{{validationError}}</p>\n        {{/if}}\n        First name:\n      {{/labeled-textfield}}\n      ```\n    \n      ```app/templates/components/labeled-textfield.hbs\n      <label>\n        {{yield validationError}} {{input value=value}}\n      </label>\n      ```\n    \n      Result:\n    \n      ```html\n      <label>\n        <p class=\"error\">First Name must be at least 3 characters long.</p>\n        First name: <input type=\"text\" />\n      </label>\n      ```\n      @method yield\n      @for Ember.Templates.helpers\n      @param {Hash} options\n      @return {String} HTML string\n      @public\n     */\n    /**\n      Execute the `debugger` statement in the current template's context.\n    \n      ```handlebars\n      {{debugger}}\n      ```\n    \n      When using the debugger helper you will have access to a `get` function. This\n      function retrieves values available in the context of the template.\n      For example, if you're wondering why a value `{{foo}}` isn't rendering as\n      expected within a template, you could place a `{{debugger}}` statement and,\n      when the `debugger;` breakpoint is hit, you can attempt to retrieve this value:\n    \n      ```\n      > get('foo')\n      ```\n    \n      `get` is also aware of keywords. So in this situation\n    \n      ```handlebars\n      {{#each items as |item|}}\n        {{debugger}}\n      {{/each}}\n      ```\n    \n      You'll be able to get values from the current item:\n    \n      ```\n      > get('item.name')\n      ```\n    \n      You can also access the context of the view to make sure it is the object that\n      you expect:\n    \n      ```\n      > context\n      ```\n    \n      @method debugger\n      @for Ember.Templates.helpers\n      @public\n     */\n    /**\n      The `partial` helper renders another template without\n      changing the template context:\n    \n      ```handlebars\n      {{foo}}\n      {{partial \"nav\"}}\n      ```\n    \n      The above example template will render a template named\n      \"-nav\", which has the same context as the parent template\n      it's rendered into, so if the \"-nav\" template also referenced\n      `{{foo}}`, it would print the same thing as the `{{foo}}`\n      in the above example.\n    \n      If a \"-nav\" template isn't found, the `partial` helper will\n      fall back to a template named \"nav\".\n    \n      ### Bound template names\n    \n      The parameter supplied to `partial` can also be a path\n      to a property containing a template name, e.g.:\n    \n      ```handlebars\n      {{partial someTemplateName}}\n      ```\n    \n      The above example will look up the value of `someTemplateName`\n      on the template context (e.g. a controller) and use that\n      value as the name of the template to render. If the resolved\n      value is falsy, nothing will be rendered. If `someTemplateName`\n      changes, the partial will be re-rendered using the new template\n      name.\n    \n      @method partial\n      @for Ember.Templates.helpers\n      @param {String} partialName The name of the template to render minus the leading underscore.\n      @public\n    */\n\n    exports.INVOKE = INVOKE;\n    exports.RootTemplate = RootTemplate;\n    exports.template = template;\n    exports.Checkbox = Checkbox;\n    exports.TextField = TextField;\n    exports.TextArea = TextArea;\n    exports.LinkComponent = LinkComponent;\n    exports.Component = Component;\n    exports.ROOT_REF = ROOT_REF;\n    exports.Helper = Helper;\n    exports.helper = helper;\n    exports.Environment = Environment$1;\n    exports.SafeString = SafeString;\n    exports.escapeExpression = escapeExpression;\n    exports.htmlSafe = htmlSafe;\n    exports.isHTMLSafe = isHTMLSafe;\n    exports.Renderer = Renderer;\n    exports.InertRenderer = InertRenderer;\n    exports.InteractiveRenderer = InteractiveRenderer;\n    exports._resetRenderers = _resetRenderers;\n    exports.renderSettled = renderSettled;\n    exports.getTemplate = getTemplate;\n    exports.setTemplate = setTemplate;\n    exports.hasTemplate = hasTemplate;\n    exports.getTemplates = getTemplates;\n    exports.setTemplates = setTemplates;\n    exports.setupEngineRegistry = setupEngineRegistry;\n    exports.setupApplicationRegistry = setupApplicationRegistry;\n    exports._registerMacros = registerMacros;\n    exports._experimentalMacros = experimentalMacros;\n    exports.AbstractComponentManager = AbstractManager;\n    exports.UpdatableReference = UpdatableReference;\n    exports.iterableFor = _iterableFor;\n    exports.DebugStack = DebugStack$1;\n    exports.OutletView = OutletView;\n});","enifed('ember-metal', ['exports', 'ember-environment', 'ember-utils', 'ember-debug', 'ember/features', 'ember-babel', '@glimmer/reference', 'container', 'backburner'], function (exports, emberEnvironment, emberUtils, emberDebug, features, emberBabel, reference, container, Backburner) {\n  'use strict';\n\n  Backburner = Backburner && Backburner.hasOwnProperty('default') ? Backburner['default'] : Backburner;\n\n  var Ember = typeof emberEnvironment.context.imports.Ember === 'object' && emberEnvironment.context.imports.Ember || {};\n\n  // Make sure these are set whether Ember was already defined or not\n  Ember.isNamespace = true;\n  Ember.toString = function () {\n    return 'Ember';\n  };\n\n  /*\n   When we render a rich template hierarchy, the set of events that\n   *might* happen tends to be much larger than the set of events that\n   actually happen. This implies that we should make listener creation &\n   destruction cheap, even at the cost of making event dispatch more\n   expensive.\n  \n   Thus we store a new listener with a single push and no new\n   allocations, without even bothering to do deduplication -- we can\n   save that for dispatch time, if an event actually happens.\n   */\n\n  var protoMethods = {\n    addToListeners: function (eventName, target, method, once) {\n      if (this._listeners === undefined) {\n        this._listeners = [];\n      }\n      this._listeners.push(eventName, target, method, once);\n    },\n    _finalizeListeners: function () {\n      if (this._listenersFinalized) {\n        return;\n      }\n      if (this._listeners === undefined) {\n        this._listeners = [];\n      }\n      var pointer = this.parent;\n      while (pointer !== undefined) {\n        var listeners = pointer._listeners;\n        if (listeners !== undefined) {\n          this._listeners = this._listeners.concat(listeners);\n        }\n        if (pointer._listenersFinalized) {\n          break;\n        }\n        pointer = pointer.parent;\n      }\n      this._listenersFinalized = true;\n    },\n    removeFromListeners: function (eventName, target, method, didRemove) {\n      var pointer = this;\n      while (pointer !== undefined) {\n        var listeners = pointer._listeners;\n        if (listeners !== undefined) {\n          for (var index = listeners.length - 4; index >= 0; index -= 4) {\n            if (listeners[index] === eventName && (!method || listeners[index + 1] === target && listeners[index + 2] === method)) {\n              if (pointer === this) {\n                // we are modifying our own list, so we edit directly\n                if (typeof didRemove === 'function') {\n                  didRemove(eventName, target, listeners[index + 2]);\n                }\n                listeners.splice(index, 4);\n              } else {\n                // we are trying to remove an inherited listener, so we do\n                // just-in-time copying to detach our own listeners from\n                // our inheritance chain.\n                this._finalizeListeners();\n                return this.removeFromListeners(eventName, target, method);\n              }\n            }\n          }\n        }\n        if (pointer._listenersFinalized) {\n          break;\n        }\n        pointer = pointer.parent;\n      }\n    },\n    matchingListeners: function (eventName) {\n      var pointer = this;\n      var result = void 0;\n      while (pointer !== undefined) {\n        var listeners = pointer._listeners;\n        if (listeners !== undefined) {\n          for (var index = 0; index < listeners.length; index += 4) {\n            if (listeners[index] === eventName) {\n              result = result || [];\n              pushUniqueListener(result, listeners, index);\n            }\n          }\n        }\n        if (pointer._listenersFinalized) {\n          break;\n        }\n        pointer = pointer.parent;\n      }\n      return result;\n    }\n  };\n\n  function pushUniqueListener(destination, source, index) {\n    var target = source[index + 1];\n    var method = source[index + 2];\n    for (var destinationIndex = 0; destinationIndex < destination.length; destinationIndex += 3) {\n      if (destination[destinationIndex] === target && destination[destinationIndex + 1] === method) {\n        return;\n      }\n    }\n    destination.push(target, method, source[index + 3]);\n  }\n\n  /**\n  @module @ember/object\n  */\n  /*\n    The event system uses a series of nested hashes to store listeners on an\n    object. When a listener is registered, or when an event arrives, these\n    hashes are consulted to determine which target and action pair to invoke.\n  \n    The hashes are stored in the object's meta hash, and look like this:\n  \n        // Object's meta hash\n        {\n          listeners: {       // variable name: `listenerSet`\n            \"foo:change\": [ // variable name: `actions`\n              target, method, once\n            ]\n          }\n        }\n  \n  */\n\n  /**\n    Add an event listener\n  \n    @method addListener\n    @static\n    @for @ember/object/events\n    @param obj\n    @param {String} eventName\n    @param {Object|Function} target A target object or a function\n    @param {Function|String} method A function or the name of a function to be called on `target`\n    @param {Boolean} once A flag whether a function should only be called once\n    @public\n  */\n  function addListener(obj, eventName, target, method, once) {\n    true && !(!!obj && !!eventName) && emberDebug.assert('You must pass at least an object and event name to addListener', !!obj && !!eventName);\n\n    if (emberEnvironment.ENV._ENABLE_DID_INIT_ATTRS_SUPPORT === true) {\n      true && !(eventName !== 'didInitAttrs') && emberDebug.deprecate('didInitAttrs called in ' + (obj && obj.toString && obj.toString()) + '.', eventName !== 'didInitAttrs', {\n        id: 'ember-views.did-init-attrs',\n        until: '3.0.0',\n        url: 'https://emberjs.com/deprecations/v2.x#toc_ember-component-didinitattrs'\n      });\n    } else {\n      true && !(eventName !== 'didInitAttrs') && emberDebug.assert('didInitAttrs called in ' + (obj && obj.toString && obj.toString()) + ' is no longer supported.', eventName !== 'didInitAttrs');\n    }\n\n    if (!method && 'function' === typeof target) {\n      method = target;\n      target = null;\n    }\n\n    meta(obj).addToListeners(eventName, target, method, once);\n\n    if ('function' === typeof obj.didAddListener) {\n      obj.didAddListener(eventName, target, method);\n    }\n  }\n\n  /**\n    Remove an event listener\n  \n    Arguments should match those passed to `addListener`.\n  \n    @method removeListener\n    @static\n    @for @ember/object/events\n    @param obj\n    @param {String} eventName\n    @param {Object|Function} target A target object or a function\n    @param {Function|String} method A function or the name of a function to be called on `target`\n    @public\n  */\n  function removeListener(obj, eventName, target, method) {\n    true && !(!!obj && !!eventName) && emberDebug.assert('You must pass at least an object and event name to removeListener', !!obj && !!eventName);\n\n    if (!method && 'function' === typeof target) {\n      method = target;\n      target = null;\n    }\n\n    var func = 'function' === typeof obj.didRemoveListener ? obj.didRemoveListener.bind(obj) : function () {};\n    meta(obj).removeFromListeners(eventName, target, method, func);\n  }\n\n  /**\n    Send an event. The execution of suspended listeners\n    is skipped, and once listeners are removed. A listener without\n    a target is executed on the passed object. If an array of actions\n    is not passed, the actions stored on the passed object are invoked.\n  \n    @method sendEvent\n    @static\n    @for @ember/object/events\n    @param obj\n    @param {String} eventName\n    @param {Array} params Optional parameters for each listener.\n    @param {Array} actions Optional array of actions (listeners).\n    @param {Meta}  meta Optional meta to lookup listeners\n    @return true\n    @public\n  */\n  function sendEvent(obj, eventName, params, actions, _meta) {\n    if (actions === undefined) {\n      var meta$$1 = _meta === undefined ? peekMeta(obj) : _meta;\n      actions = typeof meta$$1 === 'object' && meta$$1 !== null && meta$$1.matchingListeners(eventName);\n    }\n\n    if (actions === undefined || actions.length === 0) {\n      return false;\n    }\n\n    for (var i = actions.length - 3; i >= 0; i -= 3) {\n      // looping in reverse for once listeners\n      var target = actions[i];\n      var method = actions[i + 1];\n      var once = actions[i + 2];\n\n      if (!method) {\n        continue;\n      }\n      if (once) {\n        removeListener(obj, eventName, target, method);\n      }\n      if (!target) {\n        target = obj;\n      }\n      if ('string' === typeof method) {\n        method = target[method];\n      }\n\n      method.apply(target, params);\n    }\n    return true;\n  }\n\n  /**\n    @private\n    @method hasListeners\n    @static\n    @for @ember/object/events\n    @param obj\n    @param {String} eventName\n  */\n  function hasListeners(obj, eventName) {\n    var meta$$1 = peekMeta(obj);\n    if (meta$$1 === undefined) {\n      return false;\n    }\n    var matched = meta$$1.matchingListeners(eventName);\n    return matched !== undefined && matched.length > 0;\n  }\n\n  /**\n    Define a property as a function that should be executed when\n    a specified event or events are triggered.\n  \n  \n    ``` javascript\n    import EmberObject from '@ember/object';\n    import { on } from '@ember/object/evented';\n    import { sendEvent } from '@ember/object/events';\n  \n    let Job = EmberObject.extend({\n      logCompleted: on('completed', function() {\n        console.log('Job completed!');\n      })\n    });\n  \n    let job = Job.create();\n  \n    sendEvent(job, 'completed'); // Logs 'Job completed!'\n   ```\n  \n    @method on\n    @static\n    @for @ember/object/evented\n    @param {String} eventNames*\n    @param {Function} func\n    @return func\n    @public\n  */\n  function on() {\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    var func = args.pop();\n    var events = args;\n\n    true && !(typeof func === 'function') && emberDebug.assert('on expects function as last argument', typeof func === 'function');\n    true && !(events.length > 0 && events.every(function (p) {\n      return typeof p === 'string' && p.length;\n    })) && emberDebug.assert('on called without valid event names', events.length > 0 && events.every(function (p) {\n      return typeof p === 'string' && p.length;\n    }));\n\n    func.__ember_listens__ = events;\n    return func;\n  }\n\n  var onerror = void 0;\n  var onErrorTarget = {\n    get onerror() {\n      return onerror;\n    }\n  };\n\n  // Ember.onerror getter\n  function getOnerror() {\n    return onerror;\n  }\n  // Ember.onerror setter\n  function setOnerror(handler) {\n    onerror = handler;\n  }\n\n  var dispatchOverride = void 0;\n\n  // allows testing adapter to override dispatch\n  function getDispatchOverride() {\n    return dispatchOverride;\n  }\n  function setDispatchOverride(handler) {\n    dispatchOverride = handler;\n  }\n\n  var _templateObject = emberBabel.taggedTemplateLiteralLoose(['rsvpAfter'], ['rsvpAfter']);\n\n  function onBegin(current) {\n    run.currentRunLoop = current;\n  }\n\n  function onEnd(current, next) {\n    run.currentRunLoop = next;\n  }\n\n  var backburner$1 = new Backburner(['sync', 'actions',\n\n  // used in router transitions to prevent unnecessary loading state entry\n  // if all context promises resolve on the 'actions' queue first\n  'routerTransitions', 'render', 'afterRender', 'destroy',\n\n  // used to re-throw unhandled RSVP rejection errors specifically in this\n  // position to avoid breaking anything rendered in the other sections\n  container.privatize(_templateObject)], {\n    sync: {\n      before: beginPropertyChanges,\n      after: endPropertyChanges\n    },\n    defaultQueue: 'actions',\n    onBegin: onBegin,\n    onEnd: onEnd,\n    onErrorTarget: onErrorTarget,\n    onErrorMethod: 'onerror'\n  });\n\n  /**\n   @module @ember/runloop\n  */\n  // ..........................................................\n  // run - this is ideally the only public API the dev sees\n  //\n\n  /**\n    Runs the passed target and method inside of a RunLoop, ensuring any\n    deferred actions including bindings and views updates are flushed at the\n    end.\n  \n    Normally you should not need to invoke this method yourself. However if\n    you are implementing raw event handlers when interfacing with other\n    libraries or plugins, you should probably wrap all of your code inside this\n    call.\n  \n    ```javascript\n    import { run } from '@ember/runloop';\n  \n    run(function() {\n      // code to be executed within a RunLoop\n    });\n    ```\n    @method run\n    @for @ember/runloop\n    @static\n    @param {Object} [target] target of method to call\n    @param {Function|String} method Method to invoke.\n      May be a function or a string. If you pass a string\n      then it will be looked up on the passed target.\n    @param {Object} [args*] Any additional arguments you wish to pass to the method.\n    @return {Object} return value from invoking the passed function.\n    @public\n  */\n  function run() {\n    return backburner$1.run.apply(backburner$1, arguments);\n  }\n\n  /**\n    If no run-loop is present, it creates a new one. If a run loop is\n    present it will queue itself to run on the existing run-loops action\n    queue.\n  \n    Please note: This is not for normal usage, and should be used sparingly.\n  \n    If invoked when not within a run loop:\n  \n    ```javascript\n    import { join } from '@ember/runloop';\n  \n    join(function() {\n      // creates a new run-loop\n    });\n    ```\n  \n    Alternatively, if called within an existing run loop:\n  \n    ```javascript\n    import { run, join } from '@ember/runloop';\n  \n    run(function() {\n      // creates a new run-loop\n  \n      join(function() {\n        // joins with the existing run-loop, and queues for invocation on\n        // the existing run-loops action queue.\n      });\n    });\n    ```\n  \n    @method join\n    @static\n    @for @ember/runloop\n    @param {Object} [target] target of method to call\n    @param {Function|String} method Method to invoke.\n      May be a function or a string. If you pass a string\n      then it will be looked up on the passed target.\n    @param {Object} [args*] Any additional arguments you wish to pass to the method.\n    @return {Object} Return value from invoking the passed function. Please note,\n    when called within an existing loop, no return value is possible.\n    @public\n  */\n  run.join = function () {\n    return backburner$1.join.apply(backburner$1, arguments);\n  };\n\n  /**\n    Allows you to specify which context to call the specified function in while\n    adding the execution of that function to the Ember run loop. This ability\n    makes this method a great way to asynchronously integrate third-party libraries\n    into your Ember application.\n  \n    `bind` takes two main arguments, the desired context and the function to\n    invoke in that context. Any additional arguments will be supplied as arguments\n    to the function that is passed in.\n  \n    Let's use the creation of a TinyMCE component as an example. Currently,\n    TinyMCE provides a setup configuration option we can use to do some processing\n    after the TinyMCE instance is initialized but before it is actually rendered.\n    We can use that setup option to do some additional setup for our component.\n    The component itself could look something like the following:\n  \n    ```app/components/rich-text-editor.js\n    import Component from '@ember/component';\n    import { on } from '@ember/object/evented';\n    import { bind } from '@ember/runloop';\n  \n    export default Component.extend({\n      initializeTinyMCE: on('didInsertElement', function() {\n        tinymce.init({\n          selector: '#' + this.$().prop('id'),\n          setup: bind(this, this.setupEditor)\n        });\n      }),\n  \n      didInsertElement() {\n        tinymce.init({\n          selector: '#' + this.$().prop('id'),\n          setup: bind(this, this.setupEditor)\n        });\n      }\n  \n      setupEditor(editor) {\n        this.set('editor', editor);\n  \n        editor.on('change', function() {\n          console.log('content changed!');\n        });\n      }\n    });\n    ```\n  \n    In this example, we use `bind` to bind the setupEditor method to the\n    context of the RichTextEditor component and to have the invocation of that\n    method be safely handled and executed by the Ember run loop.\n  \n    @method bind\n    @static\n    @for @ember/runloop\n    @param {Object} [target] target of method to call\n    @param {Function|String} method Method to invoke.\n      May be a function or a string. If you pass a string\n      then it will be looked up on the passed target.\n    @param {Object} [args*] Any additional arguments you wish to pass to the method.\n    @return {Function} returns a new function that will always have a particular context\n    @since 1.4.0\n    @public\n  */\n  run.bind = function () {\n    for (var _len = arguments.length, curried = Array(_len), _key = 0; _key < _len; _key++) {\n      curried[_key] = arguments[_key];\n    }\n\n    return function () {\n      for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      return run.join.apply(run, curried.concat(args));\n    };\n  };\n\n  run.backburner = backburner$1;\n  run.currentRunLoop = null;\n  run.queues = backburner$1.queueNames;\n\n  /**\n    Begins a new RunLoop. Any deferred actions invoked after the begin will\n    be buffered until you invoke a matching call to `run.end()`. This is\n    a lower-level way to use a RunLoop instead of using `run()`.\n  \n    ```javascript\n    import { begin, end } from '@ember/runloop';\n  \n    begin();\n    // code to be executed within a RunLoop\n    end();\n    ```\n  \n    @method begin\n    @static\n    @for @ember/runloop\n    @return {void}\n    @public\n  */\n  run.begin = function () {\n    backburner$1.begin();\n  };\n\n  /**\n    Ends a RunLoop. This must be called sometime after you call\n    `run.begin()` to flush any deferred actions. This is a lower-level way\n    to use a RunLoop instead of using `run()`.\n  \n    ```javascript\n    import { begin, end } from '@ember/runloop';\n  \n    begin();\n    // code to be executed within a RunLoop\n    end();\n    ```\n  \n    @method end\n    @static\n    @for @ember/runloop\n    @return {void}\n    @public\n  */\n  run.end = function () {\n    backburner$1.end();\n  };\n\n  /**\n    Array of named queues. This array determines the order in which queues\n    are flushed at the end of the RunLoop. You can define your own queues by\n    simply adding the queue name to this array. Normally you should not need\n    to inspect or modify this property.\n  \n    @property queues\n    @type Array\n    @default ['actions', 'destroy']\n    @private\n  */\n\n  /**\n    Adds the passed target/method and any optional arguments to the named\n    queue to be executed at the end of the RunLoop. If you have not already\n    started a RunLoop when calling this method one will be started for you\n    automatically.\n  \n    At the end of a RunLoop, any methods scheduled in this way will be invoked.\n    Methods will be invoked in an order matching the named queues defined in\n    the `run.queues` property.\n  \n    ```javascript\n    import { schedule } from '@ember/runloop';\n  \n    schedule('actions', this, function() {\n      // this will be executed in the 'actions' queue, after bindings have synced.\n      console.log('scheduled on actions queue');\n    });\n  \n    // Note the functions will be run in order based on the run queues order.\n    // Output would be:\n    //   scheduled on sync queue\n    //   scheduled on actions queue\n    ```\n  \n    @method schedule\n    @static\n    @for @ember/runloop\n    @param {String} queue The name of the queue to schedule against. Default queues is 'actions'\n    @param {Object} [target] target object to use as the context when invoking a method.\n    @param {String|Function} method The method to invoke. If you pass a string it\n      will be resolved on the target object at the time the scheduled item is\n      invoked allowing you to change the target function.\n    @param {Object} [arguments*] Optional arguments to be passed to the queued method.\n    @return {*} Timer information for use in canceling, see `run.cancel`.\n    @public\n  */\n  run.schedule = function (queue /*, target, method */) {\n    true && !(run.currentRunLoop || !emberDebug.isTesting()) && emberDebug.assert('You have turned on testing mode, which disabled the run-loop\\'s autorun. ' + 'You will need to wrap any code with asynchronous side-effects in a run', run.currentRunLoop || !emberDebug.isTesting());\n    true && !(queue !== 'sync') && emberDebug.deprecate('Scheduling into the \\'' + queue + '\\' run loop queue is deprecated.', queue !== 'sync', { id: 'ember-metal.run.sync', until: '3.5.0' });\n\n    return backburner$1.schedule.apply(backburner$1, arguments);\n  };\n\n  // Used by global test teardown\n  run.hasScheduledTimers = function () {\n    return backburner$1.hasTimers();\n  };\n\n  // Used by global test teardown\n  run.cancelTimers = function () {\n    backburner$1.cancelTimers();\n  };\n\n  /**\n    Invokes the passed target/method and optional arguments after a specified\n    period of time. The last parameter of this method must always be a number\n    of milliseconds.\n  \n    You should use this method whenever you need to run some action after a\n    period of time instead of using `setTimeout()`. This method will ensure that\n    items that expire during the same script execution cycle all execute\n    together, which is often more efficient than using a real setTimeout.\n  \n    ```javascript\n    import { later } from '@ember/runloop';\n  \n    later(myContext, function() {\n      // code here will execute within a RunLoop in about 500ms with this == myContext\n    }, 500);\n    ```\n  \n    @method later\n    @static\n    @for @ember/runloop\n    @param {Object} [target] target of method to invoke\n    @param {Function|String} method The method to invoke.\n      If you pass a string it will be resolved on the\n      target at the time the method is invoked.\n    @param {Object} [args*] Optional arguments to pass to the timeout.\n    @param {Number} wait Number of milliseconds to wait.\n    @return {*} Timer information for use in canceling, see `run.cancel`.\n    @public\n  */\n  run.later = function () /*target, method*/{\n    return backburner$1.later.apply(backburner$1, arguments);\n  };\n\n  /**\n    Schedule a function to run one time during the current RunLoop. This is equivalent\n    to calling `scheduleOnce` with the \"actions\" queue.\n  \n    @method once\n    @static\n    @for @ember/runloop\n    @param {Object} [target] The target of the method to invoke.\n    @param {Function|String} method The method to invoke.\n      If you pass a string it will be resolved on the\n      target at the time the method is invoked.\n    @param {Object} [args*] Optional arguments to pass to the timeout.\n    @return {Object} Timer information for use in canceling, see `run.cancel`.\n    @public\n  */\n  run.once = function () {\n    true && !(run.currentRunLoop || !emberDebug.isTesting()) && emberDebug.assert('You have turned on testing mode, which disabled the run-loop\\'s autorun. ' + 'You will need to wrap any code with asynchronous side-effects in a run', run.currentRunLoop || !emberDebug.isTesting());\n\n    for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      args[_key3] = arguments[_key3];\n    }\n\n    args.unshift('actions');\n    return backburner$1.scheduleOnce.apply(backburner$1, args);\n  };\n\n  /**\n    Schedules a function to run one time in a given queue of the current RunLoop.\n    Calling this method with the same queue/target/method combination will have\n    no effect (past the initial call).\n  \n    Note that although you can pass optional arguments these will not be\n    considered when looking for duplicates. New arguments will replace previous\n    calls.\n  \n    ```javascript\n    import { run, scheduleOnce } from '@ember/runloop';\n  \n    function sayHi() {\n      console.log('hi');\n    }\n  \n    run(function() {\n      scheduleOnce('afterRender', myContext, sayHi);\n      scheduleOnce('afterRender', myContext, sayHi);\n      // sayHi will only be executed once, in the afterRender queue of the RunLoop\n    });\n    ```\n  \n    Also note that for `run.scheduleOnce` to prevent additional calls, you need to\n    pass the same function instance. The following case works as expected:\n  \n    ```javascript\n    function log() {\n      console.log('Logging only once');\n    }\n  \n    function scheduleIt() {\n      scheduleOnce('actions', myContext, log);\n    }\n  \n    scheduleIt();\n    scheduleIt();\n    ```\n  \n    But this other case will schedule the function multiple times:\n  \n    ```javascript\n    import { scheduleOnce } from '@ember/runloop';\n  \n    function scheduleIt() {\n      scheduleOnce('actions', myContext, function() {\n        console.log('Closure');\n      });\n    }\n  \n    scheduleIt();\n    scheduleIt();\n  \n    // \"Closure\" will print twice, even though we're using `run.scheduleOnce`,\n    // because the function we pass to it won't match the\n    // previously scheduled operation.\n    ```\n  \n    Available queues, and their order, can be found at `run.queues`\n  \n    @method scheduleOnce\n    @static\n    @for @ember/runloop\n    @param {String} [queue] The name of the queue to schedule against. Default queues is 'actions'.\n    @param {Object} [target] The target of the method to invoke.\n    @param {Function|String} method The method to invoke.\n      If you pass a string it will be resolved on the\n      target at the time the method is invoked.\n    @param {Object} [args*] Optional arguments to pass to the timeout.\n    @return {Object} Timer information for use in canceling, see `run.cancel`.\n    @public\n  */\n  run.scheduleOnce = function (queue /*, target, method*/) {\n    true && !(run.currentRunLoop || !emberDebug.isTesting()) && emberDebug.assert('You have turned on testing mode, which disabled the run-loop\\'s autorun. ' + 'You will need to wrap any code with asynchronous side-effects in a run', run.currentRunLoop || !emberDebug.isTesting());\n    true && !(queue !== 'sync') && emberDebug.deprecate('Scheduling into the \\'' + queue + '\\' run loop queue is deprecated.', queue !== 'sync', { id: 'ember-metal.run.sync', until: '3.5.0' });\n\n    return backburner$1.scheduleOnce.apply(backburner$1, arguments);\n  };\n\n  /**\n    Schedules an item to run from within a separate run loop, after\n    control has been returned to the system. This is equivalent to calling\n    `run.later` with a wait time of 1ms.\n  \n    ```javascript\n    import { next } from '@ember/runloop';\n  \n    next(myContext, function() {\n      // code to be executed in the next run loop,\n      // which will be scheduled after the current one\n    });\n    ```\n  \n    Multiple operations scheduled with `run.next` will coalesce\n    into the same later run loop, along with any other operations\n    scheduled by `run.later` that expire right around the same\n    time that `run.next` operations will fire.\n  \n    Note that there are often alternatives to using `run.next`.\n    For instance, if you'd like to schedule an operation to happen\n    after all DOM element operations have completed within the current\n    run loop, you can make use of the `afterRender` run loop queue (added\n    by the `ember-views` package, along with the preceding `render` queue\n    where all the DOM element operations happen).\n  \n    Example:\n  \n    ```app/components/my-component.js\n    import Component from '@ember/component';\n    import { scheduleOnce } from '@ember/runloop';\n  \n    export Component.extend({\n      didInsertElement() {\n        this._super(...arguments);\n        scheduleOnce('afterRender', this, 'processChildElements');\n      },\n  \n      processChildElements() {\n        // ... do something with component's child component\n        // elements after they've finished rendering, which\n        // can't be done within this component's\n        // `didInsertElement` hook because that gets run\n        // before the child elements have been added to the DOM.\n      }\n    });\n    ```\n  \n    One benefit of the above approach compared to using `run.next` is\n    that you will be able to perform DOM/CSS operations before unprocessed\n    elements are rendered to the screen, which may prevent flickering or\n    other artifacts caused by delaying processing until after rendering.\n  \n    The other major benefit to the above approach is that `run.next`\n    introduces an element of non-determinism, which can make things much\n    harder to test, due to its reliance on `setTimeout`; it's much harder\n    to guarantee the order of scheduled operations when they are scheduled\n    outside of the current run loop, i.e. with `run.next`.\n  \n    @method next\n    @static\n    @for @ember/runloop\n    @param {Object} [target] target of method to invoke\n    @param {Function|String} method The method to invoke.\n      If you pass a string it will be resolved on the\n      target at the time the method is invoked.\n    @param {Object} [args*] Optional arguments to pass to the timeout.\n    @return {Object} Timer information for use in canceling, see `run.cancel`.\n    @public\n  */\n  run.next = function () {\n    for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n      args[_key4] = arguments[_key4];\n    }\n\n    args.push(1);\n    return backburner$1.later.apply(backburner$1, args);\n  };\n\n  /**\n    Cancels a scheduled item. Must be a value returned by `later()`,\n    `once()`, `scheduleOnce()`, `next()`, `debounce()`, or\n    `throttle()`.\n  \n    ```javascript\n    import {\n      next,\n      cancel,\n      later,\n      scheduleOnce,\n      once,\n      throttle,\n      debounce\n    } from '@ember/runloop';\n  \n    let runNext = next(myContext, function() {\n      // will not be executed\n    });\n  \n    cancel(runNext);\n  \n    let runLater = later(myContext, function() {\n      // will not be executed\n    }, 500);\n  \n    cancel(runLater);\n  \n    let runScheduleOnce = scheduleOnce('afterRender', myContext, function() {\n      // will not be executed\n    });\n  \n    cancel(runScheduleOnce);\n  \n    let runOnce = once(myContext, function() {\n      // will not be executed\n    });\n  \n    cancel(runOnce);\n  \n    let throttle = throttle(myContext, function() {\n      // will not be executed\n    }, 1, false);\n  \n    cancel(throttle);\n  \n    let debounce = debounce(myContext, function() {\n      // will not be executed\n    }, 1);\n  \n    cancel(debounce);\n  \n    let debounceImmediate = debounce(myContext, function() {\n      // will be executed since we passed in true (immediate)\n    }, 100, true);\n  \n    // the 100ms delay until this method can be called again will be canceled\n    cancel(debounceImmediate);\n    ```\n  \n    @method cancel\n    @static\n    @for @ember/runloop\n    @param {Object} timer Timer object to cancel\n    @return {Boolean} true if canceled or false/undefined if it wasn't found\n    @public\n  */\n  run.cancel = function (timer) {\n    return backburner$1.cancel(timer);\n  };\n\n  /**\n    Delay calling the target method until the debounce period has elapsed\n    with no additional debounce calls. If `debounce` is called again before\n    the specified time has elapsed, the timer is reset and the entire period\n    must pass again before the target method is called.\n  \n    This method should be used when an event may be called multiple times\n    but the action should only be called once when the event is done firing.\n    A common example is for scroll events where you only want updates to\n    happen once scrolling has ceased.\n  \n    ```javascript\n    import { debounce } from '@ember/runloop';\n  \n    function whoRan() {\n      console.log(this.name + ' ran.');\n    }\n  \n    let myContext = { name: 'debounce' };\n  \n    debounce(myContext, whoRan, 150);\n  \n    // less than 150ms passes\n    debounce(myContext, whoRan, 150);\n  \n    // 150ms passes\n    // whoRan is invoked with context myContext\n    // console logs 'debounce ran.' one time.\n    ```\n  \n    Immediate allows you to run the function immediately, but debounce\n    other calls for this function until the wait time has elapsed. If\n    `debounce` is called again before the specified time has elapsed,\n    the timer is reset and the entire period must pass again before\n    the method can be called again.\n  \n    ```javascript\n    import { debounce } from '@ember/runloop';\n  \n    function whoRan() {\n      console.log(this.name + ' ran.');\n    }\n  \n    let myContext = { name: 'debounce' };\n  \n    debounce(myContext, whoRan, 150, true);\n  \n    // console logs 'debounce ran.' one time immediately.\n    // 100ms passes\n    debounce(myContext, whoRan, 150, true);\n  \n    // 150ms passes and nothing else is logged to the console and\n    // the debouncee is no longer being watched\n    debounce(myContext, whoRan, 150, true);\n  \n    // console logs 'debounce ran.' one time immediately.\n    // 150ms passes and nothing else is logged to the console and\n    // the debouncee is no longer being watched\n    ```\n  \n    @method debounce\n    @static\n    @for @ember/runloop\n    @param {Object} [target] target of method to invoke\n    @param {Function|String} method The method to invoke.\n      May be a function or a string. If you pass a string\n      then it will be looked up on the passed target.\n    @param {Object} [args*] Optional arguments to pass to the timeout.\n    @param {Number} wait Number of milliseconds to wait.\n    @param {Boolean} immediate Trigger the function on the leading instead\n      of the trailing edge of the wait interval. Defaults to false.\n    @return {Array} Timer information for use in canceling, see `run.cancel`.\n    @public\n  */\n  run.debounce = function () {\n    return backburner$1.debounce.apply(backburner$1, arguments);\n  };\n\n  /**\n    Ensure that the target method is never called more frequently than\n    the specified spacing period. The target method is called immediately.\n  \n    ```javascript\n    import { throttle } from '@ember/runloop';\n  \n    function whoRan() {\n      console.log(this.name + ' ran.');\n    }\n  \n    let myContext = { name: 'throttle' };\n  \n    throttle(myContext, whoRan, 150);\n    // whoRan is invoked with context myContext\n    // console logs 'throttle ran.'\n  \n    // 50ms passes\n    throttle(myContext, whoRan, 150);\n  \n    // 50ms passes\n    throttle(myContext, whoRan, 150);\n  \n    // 150ms passes\n    throttle(myContext, whoRan, 150);\n    // whoRan is invoked with context myContext\n    // console logs 'throttle ran.'\n    ```\n  \n    @method throttle\n    @static\n    @for @ember/runloop\n    @param {Object} [target] target of method to invoke\n    @param {Function|String} method The method to invoke.\n      May be a function or a string. If you pass a string\n      then it will be looked up on the passed target.\n    @param {Object} [args*] Optional arguments to pass to the timeout.\n    @param {Number} spacing Number of milliseconds to space out requests.\n    @param {Boolean} immediate Trigger the function on the leading instead\n      of the trailing edge of the wait interval. Defaults to true.\n    @return {Array} Timer information for use in canceling, see `run.cancel`.\n    @public\n  */\n  run.throttle = function () {\n    return backburner$1.throttle.apply(backburner$1, arguments);\n  };\n\n  var hasViews = function () {\n    return false;\n  };\n\n  function setHasViews(fn) {\n    hasViews = fn;\n  }\n\n  function makeTag() {\n    return reference.DirtyableTag.create();\n  }\n\n  function tagForProperty(object, propertyKey, _meta) {\n    if (typeof object !== 'object' || object === null) {\n      return reference.CONSTANT_TAG;\n    }\n\n    var meta$$1 = _meta === undefined ? meta(object) : _meta;\n    if (meta$$1.isProxy()) {\n      return tagFor(object, meta$$1);\n    }\n\n    var tags = meta$$1.writableTags();\n    var tag = tags[propertyKey];\n    if (tag) {\n      return tag;\n    }\n\n    return tags[propertyKey] = makeTag();\n  }\n\n  function tagFor(object, _meta) {\n    if (typeof object === 'object' && object !== null) {\n      var meta$$1 = _meta === undefined ? meta(object) : _meta;\n      return meta$$1.writableTag(makeTag);\n    } else {\n      return reference.CONSTANT_TAG;\n    }\n  }\n\n  function markObjectAsDirty(meta$$1, propertyKey) {\n    var objectTag = meta$$1.readableTag();\n\n    if (objectTag !== undefined) {\n      if (meta$$1.isProxy()) {\n        objectTag.inner.first.inner.dirty();\n      } else {\n        objectTag.inner.dirty();\n      }\n    }\n\n    var tags = meta$$1.readableTags();\n    var propertyTag = tags !== undefined ? tags[propertyKey] : undefined;\n\n    if (propertyTag !== undefined) {\n      propertyTag.inner.dirty();\n    }\n\n    if (objectTag !== undefined || propertyTag !== undefined) {\n      ensureRunloop();\n    }\n  }\n\n  var backburner = void 0;\n  function ensureRunloop() {\n    if (backburner === undefined) {\n      backburner = run.backburner;\n    }\n\n    if (hasViews()) {\n      backburner.ensureInstance();\n    }\n  }\n\n  /**\n    ObserverSet is a data structure used to keep track of observers\n    that have been deferred.\n  \n    It ensures that observers are called in the same order that they\n    were initially triggered.\n  \n    It also ensures that observers for any object-key pairs are called\n    only once, even if they were triggered multiple times while\n    deferred. In this case, the order that the observer is called in\n    will depend on the first time the observer was triggered.\n  \n    @private\n    @class ObserverSet\n  */\n\n  var ObserverSet = function () {\n    function ObserverSet() {\n      emberBabel.classCallCheck(this, ObserverSet);\n\n      this.added = new Map();\n      this.queue = [];\n    }\n\n    ObserverSet.prototype.add = function add(object, key, event) {\n      var keys = this.added.get(object);\n      if (keys === undefined) {\n        keys = new Set();\n        this.added.set(object, keys);\n      }\n\n      if (!keys.has(key)) {\n        this.queue.push(object, key, event);\n        keys.add(key);\n      }\n    };\n\n    ObserverSet.prototype.flush = function flush() {\n      // The queue is saved off to support nested flushes.\n      var queue = this.queue;\n      this.added.clear();\n      this.queue = [];\n\n      for (var i = 0; i < queue.length; i += 3) {\n        var object = queue[i];\n        var key = queue[i + 1];\n        var event = queue[i + 2];\n\n        if (object.isDestroying || object.isDestroyed) {\n          continue;\n        }\n\n        sendEvent(object, event, [object, key]);\n      }\n    };\n\n    return ObserverSet;\n  }();\n\n  exports.runInTransaction = void 0;\n  exports.didRender = void 0;\n  exports.assertNotRendered = void 0;\n\n  // detect-backtracking-rerender by default is debug build only\n  if (features.EMBER_GLIMMER_DETECT_BACKTRACKING_RERENDER) {\n\n    // there are 2 states\n\n    // DEBUG\n    // tracks lastRef and lastRenderedIn per rendered object and key during a transaction\n    // release everything via normal weakmap semantics by just derefencing the weakmap\n\n    // RELEASE\n    // tracks transactionId per rendered object and key during a transaction\n    // release everything via normal weakmap semantics by just derefencing the weakmap\n\n    var TransactionRunner = function () {\n      function TransactionRunner() {\n        emberBabel.classCallCheck(this, TransactionRunner);\n\n        this.transactionId = 0;\n        this.inTransaction = false;\n        this.shouldReflush = false;\n        this.weakMap = new WeakMap();\n        {\n          // track templates\n          this.debugStack = undefined;\n        }\n      }\n\n      TransactionRunner.prototype.runInTransaction = function runInTransaction(context$$1, methodName) {\n        this.before(context$$1);\n        try {\n          context$$1[methodName]();\n        } finally {\n          this.after();\n        }\n        return this.shouldReflush;\n      };\n\n      TransactionRunner.prototype.didRender = function didRender(object, key, reference$$1) {\n        if (!this.inTransaction) {\n          return;\n        }\n        {\n          this.setKey(object, key, {\n            lastRef: reference$$1,\n            lastRenderedIn: this.debugStack.peek()\n          });\n        }\n      };\n\n      TransactionRunner.prototype.assertNotRendered = function assertNotRendered(object, key) {\n        if (!this.inTransaction) {\n          return;\n        }\n        if (this.hasRendered(object, key)) {\n          {\n            var _getKey = this.getKey(object, key),\n                lastRef = _getKey.lastRef,\n                lastRenderedIn = _getKey.lastRenderedIn;\n\n            var currentlyIn = this.debugStack.peek();\n\n            var parts = [];\n            var label = void 0;\n\n            if (lastRef !== undefined) {\n              while (lastRef && lastRef._propertyKey) {\n                parts.unshift(lastRef._propertyKey);\n                lastRef = lastRef._parentReference;\n              }\n\n              label = parts.join('.');\n            } else {\n              label = 'the same value';\n            }\n\n            true && !false && emberDebug.assert('You modified \"' + label + '\" twice on ' + object + ' in a single render. It was rendered in ' + lastRenderedIn + ' and modified in ' + currentlyIn + '. This was unreliable and slow in Ember 1.x and is no longer supported. See https://github.com/emberjs/ember.js/issues/13948 for more details.', false);\n          }\n\n          this.shouldReflush = true;\n        }\n      };\n\n      TransactionRunner.prototype.hasRendered = function hasRendered(object, key) {\n        if (!this.inTransaction) {\n          return false;\n        }\n        {\n          return this.getKey(object, key) !== undefined;\n        }\n        return this.getKey(object, key) === this.transactionId;\n      };\n\n      TransactionRunner.prototype.before = function before(context$$1) {\n        this.inTransaction = true;\n        this.shouldReflush = false;\n        {\n          this.debugStack = context$$1.env.debugStack;\n        }\n      };\n\n      TransactionRunner.prototype.after = function after() {\n        this.transactionId++;\n        this.inTransaction = false;\n        {\n          this.debugStack = undefined;\n        }\n        this.clearObjectMap();\n      };\n\n      TransactionRunner.prototype.createMap = function createMap(object) {\n        var map = Object.create(null);\n        this.weakMap.set(object, map);\n        return map;\n      };\n\n      TransactionRunner.prototype.getOrCreateMap = function getOrCreateMap(object) {\n        var map = this.weakMap.get(object);\n        if (map === undefined) {\n          map = this.createMap(object);\n        }\n        return map;\n      };\n\n      TransactionRunner.prototype.setKey = function setKey(object, key, value) {\n        var map = this.getOrCreateMap(object);\n        map[key] = value;\n      };\n\n      TransactionRunner.prototype.getKey = function getKey(object, key) {\n        var map = this.weakMap.get(object);\n        if (map !== undefined) {\n          return map[key];\n        }\n      };\n\n      TransactionRunner.prototype.clearObjectMap = function clearObjectMap() {\n        this.weakMap = new WeakMap();\n      };\n\n      return TransactionRunner;\n    }();\n\n    var runner = new TransactionRunner();\n\n    exports.runInTransaction = runner.runInTransaction.bind(runner);\n    exports.didRender = runner.didRender.bind(runner);\n    exports.assertNotRendered = runner.assertNotRendered.bind(runner);\n  } else {\n    // in production do nothing to detect reflushes\n    exports.runInTransaction = function (context$$1, methodName) {\n      context$$1[methodName]();\n      return false;\n    };\n  }\n\n  function watchPath(obj, keyPath, meta$$1) {\n    if (typeof obj !== 'object' || obj === null) {\n      return;\n    }\n    var m = meta$$1 === undefined ? meta(obj) : meta$$1;\n    var counter = m.peekWatching(keyPath) || 0;\n\n    m.writeWatching(keyPath, counter + 1);\n    if (counter === 0) {\n      // activate watching first time\n      m.writableChains(makeChainNode).add(keyPath);\n    }\n  }\n\n  function unwatchPath(obj, keyPath, meta$$1) {\n    if (typeof obj !== 'object' || obj === null) {\n      return;\n    }\n    var m = meta$$1 === undefined ? peekMeta(obj) : meta$$1;\n\n    if (m === undefined) {\n      return;\n    }\n    var counter = m.peekWatching(keyPath) || 0;\n\n    if (counter === 1) {\n      m.writeWatching(keyPath, 0);\n      m.writableChains(makeChainNode).remove(keyPath);\n    } else if (counter > 1) {\n      m.writeWatching(keyPath, counter - 1);\n    }\n  }\n\n  /**\n  @module ember\n  */\n  /**\n    Starts watching a property on an object. Whenever the property changes,\n    invokes `Ember.notifyPropertyChange`. This is the primitive used by observers\n    and dependent keys; usually you will never call this method directly but instead\n    use higher level methods like `addObserver()`.\n  \n    @private\n    @method watch\n    @for Ember\n    @param obj\n    @param {String} _keyPath\n  */\n  function watch(obj, _keyPath, m) {\n    if (isPath(_keyPath)) {\n      watchPath(obj, _keyPath, m);\n    } else {\n      watchKey(obj, _keyPath, m);\n    }\n  }\n\n  function isWatching(obj, key) {\n    return watcherCount(obj, key) > 0;\n  }\n\n  function watcherCount(obj, key) {\n    var meta$$1 = peekMeta(obj);\n    return meta$$1 !== undefined && meta$$1.peekWatching(key) || 0;\n  }\n\n  function unwatch(obj, _keyPath, m) {\n    if (isPath(_keyPath)) {\n      unwatchPath(obj, _keyPath, m);\n    } else {\n      unwatchKey(obj, _keyPath, m);\n    }\n  }\n\n  /**\n  @module @ember/object\n  */\n\n  var AFTER_OBSERVERS = ':change';\n\n  function changeEvent(keyName) {\n    return keyName + AFTER_OBSERVERS;\n  }\n\n  /**\n    @method addObserver\n    @static\n    @for @ember/object/observers\n    @param obj\n    @param {String} _path\n    @param {Object|Function} target\n    @param {Function|String} [method]\n    @public\n  */\n  function addObserver(obj, _path, target, method) {\n    addListener(obj, changeEvent(_path), target, method);\n    watch(obj, _path);\n  }\n\n  /**\n    @method removeObserver\n    @static\n    @for @ember/object/observers\n    @param obj\n    @param {String} path\n    @param {Object|Function} target\n    @param {Function|String} [method]\n    @public\n  */\n  function removeObserver(obj, path, target, method) {\n    unwatch(obj, path);\n    removeListener(obj, changeEvent(path), target, method);\n  }\n\n  /**\n   @module ember\n   @private\n   */\n\n  var PROPERTY_DID_CHANGE = emberUtils.symbol('PROPERTY_DID_CHANGE');\n\n  var observerSet = new ObserverSet();\n  var deferred = 0;\n\n  // ..........................................................\n  // PROPERTY CHANGES\n  //\n\n  /**\n    @method propertyWillChange\n    @for Ember\n    @private\n  */\n  function propertyWillChange() {\n    true && !false && emberDebug.deprecate('\\'propertyWillChange\\' is deprecated and has no effect. It is safe to remove this call.', false, {\n      id: 'ember-metal.deprecate-propertyWillChange',\n      until: '3.5.0',\n      url: 'https://emberjs.com/deprecations/v3.x/#toc_use-notifypropertychange-instead-of-propertywillchange-and-propertydidchange'\n    });\n  }\n\n  /**\n    @method propertyDidChange\n    @for Ember\n    @private\n  */\n  function propertyDidChange(obj, keyName, _meta) {\n    true && !false && emberDebug.deprecate('\\'propertyDidChange\\' is deprecated in favor of \\'notifyPropertyChange\\'. It is safe to change this call to \\'notifyPropertyChange\\'.', false, {\n      id: 'ember-metal.deprecate-propertyDidChange',\n      until: '3.5.0',\n      url: 'https://emberjs.com/deprecations/v3.x/#toc_use-notifypropertychange-instead-of-propertywillchange-and-propertydidchange'\n    });\n\n    notifyPropertyChange(obj, keyName, _meta);\n  }\n\n  /**\n    This function is called just after an object property has changed.\n    It will notify any observers and clear caches among other things.\n  \n    Normally you will not need to call this method directly but if for some\n    reason you can't directly watch a property you can invoke this method\n    manually.\n  \n    @method notifyPropertyChange\n    @for Ember\n    @param {Object} obj The object with the property that will change\n    @param {String} keyName The property key (or path) that will change.\n    @param {Meta} meta The objects meta.\n    @return {void}\n    @private\n  */\n  function notifyPropertyChange(obj, keyName, _meta) {\n    var meta$$1 = _meta === undefined ? peekMeta(obj) : _meta;\n    var hasMeta = meta$$1 !== undefined;\n\n    if (hasMeta && !meta$$1.isInitialized(obj)) {\n      return;\n    }\n\n    var possibleDesc = descriptorFor(obj, keyName, meta$$1);\n\n    // shouldn't this mean that we're watching this key?\n    if (possibleDesc !== undefined && possibleDesc.didChange) {\n      possibleDesc.didChange(obj, keyName);\n    }\n\n    if (hasMeta && meta$$1.peekWatching(keyName) > 0) {\n      dependentKeysDidChange(obj, keyName, meta$$1);\n      chainsDidChange(obj, keyName, meta$$1);\n      notifyObservers(obj, keyName, meta$$1);\n    }\n\n    if (PROPERTY_DID_CHANGE in obj) {\n      obj[PROPERTY_DID_CHANGE](keyName);\n    }\n\n    if (hasMeta) {\n      if (meta$$1.isSourceDestroying()) {\n        return;\n      }\n      markObjectAsDirty(meta$$1, keyName);\n    }\n\n    if (features.EMBER_GLIMMER_DETECT_BACKTRACKING_RERENDER) {\n      exports.assertNotRendered(obj, keyName, meta$$1);\n    }\n  }\n\n  var DID_SEEN = null;\n\n  // called whenever a property has just changed to update dependent keys\n  function dependentKeysDidChange(obj, depKey, meta$$1) {\n    if (meta$$1.isSourceDestroying() || !meta$$1.hasDeps(depKey)) {\n      return;\n    }\n    var seen = DID_SEEN;\n    var top = seen === null;\n\n    if (top) {\n      seen = DID_SEEN = new Map();\n    }\n\n    iterDeps(notifyPropertyChange, obj, depKey, seen, meta$$1);\n\n    if (top) {\n      DID_SEEN = null;\n    }\n  }\n\n  function iterDeps(method, obj, depKey, seen, meta$$1) {\n    var current = seen.get(obj);\n\n    if (current === undefined) {\n      current = new Set();\n      seen.set(obj, current);\n    }\n\n    if (current.has(depKey)) {\n      return;\n    }\n\n    var possibleDesc = void 0;\n    meta$$1.forEachInDeps(depKey, function (key, value) {\n      if (!value) {\n        return;\n      }\n\n      possibleDesc = descriptorFor(obj, key, meta$$1);\n\n      if (possibleDesc !== undefined && possibleDesc._suspended === obj) {\n        return;\n      }\n\n      method(obj, key, meta$$1);\n    });\n  }\n\n  function chainsDidChange(obj, keyName, meta$$1) {\n    var chainWatchers = meta$$1.readableChainWatchers();\n    if (chainWatchers !== undefined) {\n      chainWatchers.notify(keyName, true, notifyPropertyChange);\n    }\n  }\n\n  function overrideChains(obj, keyName, meta$$1) {\n    var chainWatchers = meta$$1.readableChainWatchers();\n    if (chainWatchers !== undefined) {\n      chainWatchers.revalidate(keyName);\n    }\n  }\n\n  /**\n    @method beginPropertyChanges\n    @chainable\n    @private\n  */\n  function beginPropertyChanges() {\n    deferred++;\n  }\n\n  /**\n    @method endPropertyChanges\n    @private\n  */\n  function endPropertyChanges() {\n    deferred--;\n    if (deferred <= 0) {\n      observerSet.flush();\n    }\n  }\n\n  /**\n    Make a series of property changes together in an\n    exception-safe way.\n  \n    ```javascript\n    Ember.changeProperties(function() {\n      obj1.set('foo', mayBlowUpWhenSet);\n      obj2.set('bar', baz);\n    });\n    ```\n  \n    @method changeProperties\n    @param {Function} callback\n    @private\n  */\n  function changeProperties(callback) {\n    beginPropertyChanges();\n    try {\n      callback();\n    } finally {\n      endPropertyChanges();\n    }\n  }\n\n  function notifyObservers(obj, keyName, meta$$1) {\n    if (meta$$1.isSourceDestroying()) {\n      return;\n    }\n\n    var eventName = changeEvent(keyName);\n    if (deferred > 0) {\n      observerSet.add(obj, keyName, eventName);\n    } else {\n      sendEvent(obj, eventName, [obj, keyName]);\n    }\n  }\n\n  /**\n  @module @ember/object\n  */\n\n  // ..........................................................\n  // DESCRIPTOR\n  //\n\n  /**\n    Objects of this type can implement an interface to respond to requests to\n    get and set. The default implementation handles simple properties.\n  \n    @class Descriptor\n    @private\n  */\n  function Descriptor() {\n    this.isDescriptor = true;\n  }\n\n  // ..........................................................\n  // DEFINING PROPERTIES API\n  //\n\n  function MANDATORY_SETTER_FUNCTION(name) {\n    function SETTER_FUNCTION(value) {\n      var m = peekMeta(this);\n      if (!m.isInitialized(this)) {\n        m.writeValues(name, value);\n      } else {\n        true && !false && emberDebug.assert('You must use set() to set the `' + name + '` property (of ' + this + ') to `' + value + '`.', false);\n      }\n    }\n\n    SETTER_FUNCTION.isMandatorySetter = true;\n    return SETTER_FUNCTION;\n  }\n\n  function DEFAULT_GETTER_FUNCTION(name) {\n    return function GETTER_FUNCTION() {\n      var meta$$1 = peekMeta(this);\n      if (meta$$1 !== undefined) {\n        return meta$$1.peekValues(name);\n      }\n    };\n  }\n\n  function INHERITING_GETTER_FUNCTION(name) {\n    function IGETTER_FUNCTION() {\n      var meta$$1 = peekMeta(this);\n      var val = void 0;\n      if (meta$$1 !== undefined) {\n        val = meta$$1.readInheritedValue('values', name);\n      }\n\n      if (val === UNDEFINED) {\n        var proto = Object.getPrototypeOf(this);\n        return proto && proto[name];\n      } else {\n        return val;\n      }\n    }\n\n    IGETTER_FUNCTION.isInheritingGetter = true;\n    return IGETTER_FUNCTION;\n  }\n\n  var DESCRIPTOR_GETTER_FUNCTION = void 0;\n\n  if (features.EMBER_METAL_ES5_GETTERS) {\n    DESCRIPTOR_GETTER_FUNCTION = function (name, descriptor) {\n      return function CPGETTER_FUNCTION() {\n        return descriptor.get(this, name);\n      };\n    };\n  } else if (features.DESCRIPTOR_TRAP) {\n    // Future traveler, although this code looks scary. It merely exists in\n    // development to aid in development asertions. Production builds of\n    // ember strip this entire branch out.\n    var messageFor = function (obj, keyName, property, value) {\n      return 'You attempted to access `' + keyName + '.' + String(property) + '` ' + ('(on `' + obj + '`), but `' + keyName + '` is a computed property.\\n\\n') + 'Due to certain internal implementation details of Ember, the ' + ('`' + keyName + '` property previously contained a private \"descriptor\" ') + ('object, therefore `' + keyName + '.' + String(property) + '` would have been ') + ('`' + String(value).replace(/\\n/g, ' ') + '`.\\n\\n') + 'This implementation detail has now changed and the \"descriptor\" ' + 'object is no longer present at this location. Soon, accessing ' + ('`' + keyName + '` on this object will return the computed property\\'s ') + 'current value (see RFC #281 for more details).\\n\\n' + 'If you are seeing this error, you are likely using an addon that ' + 'relies on this now-defunct private implementation detail. If you ' + 'can, identify the addon from the stack trace below and report this ' + 'bug to the addon authors. If you feel stuck, the Ember Community ' + 'Slack (https://ember-community-slackin.herokuapp.com/) may be able ' + 'to offer some help.\\n\\n' + 'If you are an addon author and need help transitioning your code, ' + 'please get in touch in the #dev-ember channel in the Ember Community ' + 'Slack.';\n    };\n\n    var trapFor = void 0;\n\n    if (emberUtils.HAS_NATIVE_PROXY) {\n      /* globals Proxy */\n      trapFor = function (obj, keyName, descriptor) {\n        return new Proxy(descriptor, {\n          get: function (descriptor, property) {\n            if (property === DESCRIPTOR) {\n              return descriptor;\n            } else if (property === 'prototype' || property === 'constructor' || property === 'nodeType' || property === 'window') {\n              return undefined;\n            } else if (property === 'toString' || property === 'valueOf' || property === 'inspect' || property === 'toJSON' || Symbol && property === Symbol.toPrimitive || Symbol && property === Symbol.toStringTag) {\n              return function () {\n                return '[COMPUTED PROPERTY]';\n              };\n            }\n\n            true && !false && emberDebug.assert(messageFor(obj, keyName, property, descriptor[property]));\n          }\n        });\n      };\n    } else {\n      trapFor = function (obj, keyName, descriptor) {\n        var trap = Object.create(null);\n\n        Object.defineProperty(trap, DESCRIPTOR, {\n          configurable: false,\n          enumerable: false,\n          writable: false,\n          value: descriptor\n        });\n\n        trap.toString = trap.toJSON = trap.valueOf = function () {\n          return '[COMPUTED PROPERTY]';\n        };\n\n        // Without a proxy, we can only trap the \"likely\" properties\n        ['isDescriptor', 'setup', 'teardown', 'get', '_getter', 'set', '_setter', 'meta'].forEach(function (property) {\n          Object.defineProperty(trap, property, {\n            configurable: false,\n            enumerable: false,\n            get: function () {\n              true && !false && emberDebug.assert(messageFor(obj, keyName, property, descriptor[property]));\n            }\n          });\n        });\n\n        return trap;\n      };\n    }\n\n    DESCRIPTOR_GETTER_FUNCTION = function (name, descriptor) {\n      var trap = void 0;\n      return function CPGETTER_FUNCTION() {\n        if (trap) {\n          return trap;\n        }\n\n        trap = trapFor(this, name, descriptor);\n        return trap;\n      };\n    };\n  }\n\n  /**\n    NOTE: This is a low-level method used by other parts of the API. You almost\n    never want to call this method directly. Instead you should use\n    `mixin()` to define new properties.\n  \n    Defines a property on an object. This method works much like the ES5\n    `Object.defineProperty()` method except that it can also accept computed\n    properties and other special descriptors.\n  \n    Normally this method takes only three parameters. However if you pass an\n    instance of `Descriptor` as the third param then you can pass an\n    optional value as the fourth parameter. This is often more efficient than\n    creating new descriptor hashes for each property.\n  \n    ## Examples\n  \n    ```javascript\n    import { defineProperty, computed } from '@ember/object';\n  \n    // ES5 compatible mode\n    defineProperty(contact, 'firstName', {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: 'Charles'\n    });\n  \n    // define a simple property\n    defineProperty(contact, 'lastName', undefined, 'Jolley');\n  \n    // define a computed property\n    defineProperty(contact, 'fullName', computed('firstName', 'lastName', function() {\n      return this.firstName+' '+this.lastName;\n    }));\n    ```\n  \n    @private\n    @method defineProperty\n    @for @ember/object\n    @param {Object} obj the object to define this property on. This may be a prototype.\n    @param {String} keyName the name of the property\n    @param {Descriptor} [desc] an instance of `Descriptor` (typically a\n      computed property) or an ES5 descriptor.\n      You must provide this or `data` but not both.\n    @param {*} [data] something other than a descriptor, that will\n      become the explicit value of this property.\n  */\n  function defineProperty(obj, keyName, desc, data, meta$$1) {\n    if (meta$$1 === undefined) {\n      meta$$1 = meta(obj);\n    }\n\n    var watchEntry = meta$$1.peekWatching(keyName);\n    var watching = watchEntry !== undefined && watchEntry > 0;\n    var previousDesc = descriptorFor(obj, keyName, meta$$1);\n    var wasDescriptor = previousDesc !== undefined;\n\n    if (wasDescriptor) {\n      previousDesc.teardown(obj, keyName, meta$$1);\n\n      if (features.EMBER_METAL_ES5_GETTERS) {\n        meta$$1.removeDescriptors(keyName);\n      }\n    }\n\n    // used to track if the the property being defined be enumerable\n    var enumerable = true;\n\n    // Ember.NativeArray is a normal Ember.Mixin that we mix into `Array.prototype` when prototype extensions are enabled\n    // mutating a native object prototype like this should _not_ result in enumerable properties being added (or we have significant\n    // issues with things like deep equality checks from test frameworks, or things like jQuery.extend(true, [], [])).\n    //\n    // this is a hack, and we should stop mutating the array prototype by default 😫\n    if (obj === Array.prototype) {\n      enumerable = false;\n    }\n\n    var value = void 0;\n    if (desc instanceof Descriptor) {\n      value = desc;\n\n      if (features.EMBER_METAL_ES5_GETTERS || features.DESCRIPTOR_TRAP) {\n        Object.defineProperty(obj, keyName, {\n          configurable: true,\n          enumerable: enumerable,\n          get: DESCRIPTOR_GETTER_FUNCTION(keyName, value)\n        });\n      } else if (features.MANDATORY_SETTER && watching) {\n        Object.defineProperty(obj, keyName, {\n          configurable: true,\n          enumerable: enumerable,\n          writable: true,\n          value: value\n        });\n      } else if (enumerable === false) {\n        Object.defineProperty(obj, keyName, {\n          configurable: true,\n          writable: true,\n          enumerable: enumerable,\n          value: value\n        });\n      } else {\n        obj[keyName] = value;\n      }\n\n      if (features.EMBER_METAL_ES5_GETTERS) {\n        meta$$1.writeDescriptors(keyName, value);\n      }\n\n      didDefineComputedProperty(obj.constructor);\n\n      if (typeof desc.setup === 'function') {\n        desc.setup(obj, keyName);\n      }\n    } else if (desc === undefined || desc === null) {\n      value = data;\n\n      if (features.MANDATORY_SETTER && watching) {\n        meta$$1.writeValues(keyName, data);\n\n        var defaultDescriptor = {\n          configurable: true,\n          enumerable: enumerable,\n          set: MANDATORY_SETTER_FUNCTION(keyName),\n          get: DEFAULT_GETTER_FUNCTION(keyName)\n        };\n\n        Object.defineProperty(obj, keyName, defaultDescriptor);\n      } else if ((features.EMBER_METAL_ES5_GETTERS || features.DESCRIPTOR_TRAP) && wasDescriptor) {\n        Object.defineProperty(obj, keyName, {\n          configurable: true,\n          enumerable: enumerable,\n          writable: true,\n          value: value\n        });\n      } else if (enumerable === false) {\n        Object.defineProperty(obj, keyName, {\n          configurable: true,\n          enumerable: enumerable,\n          writable: true,\n          value: value\n        });\n      } else {\n        obj[keyName] = data;\n      }\n    } else {\n      value = desc;\n\n      // fallback to ES5\n      Object.defineProperty(obj, keyName, desc);\n    }\n\n    // if key is being watched, override chains that\n    // were initialized with the prototype\n    if (watching) {\n      overrideChains(obj, keyName, meta$$1);\n    }\n\n    // The `value` passed to the `didDefineProperty` hook is\n    // either the descriptor or data, whichever was passed.\n    if (typeof obj.didDefineProperty === 'function') {\n      obj.didDefineProperty(obj, keyName, value);\n    }\n\n    return this;\n  }\n\n  var hasCachedComputedProperties = false;\n  function _hasCachedComputedProperties() {\n    hasCachedComputedProperties = true;\n  }\n\n  function didDefineComputedProperty(constructor) {\n    if (hasCachedComputedProperties === false) {\n      return;\n    }\n\n    var cache = peekCacheFor(constructor);\n    if (cache !== undefined) {\n      cache.delete('_computedProperties');\n    }\n  }\n\n  var handleMandatorySetter = void 0;\n\n  function watchKey(obj, keyName, _meta) {\n    if (typeof obj !== 'object' || obj === null) {\n      return;\n    }\n\n    var meta$$1 = _meta === undefined ? meta(obj) : _meta;\n    var count = meta$$1.peekWatching(keyName) || 0;\n    meta$$1.writeWatching(keyName, count + 1);\n\n    if (count === 0) {\n      // activate watching first time\n      var possibleDesc = descriptorFor(obj, keyName, meta$$1);\n\n      if (possibleDesc !== undefined && possibleDesc.willWatch) {\n        possibleDesc.willWatch(obj, keyName, meta$$1);\n      }\n\n      if (typeof obj.willWatchProperty === 'function') {\n        obj.willWatchProperty(keyName);\n      }\n\n      if (features.MANDATORY_SETTER) {\n        // NOTE: this is dropped for prod + minified builds\n        handleMandatorySetter(meta$$1, obj, keyName);\n      }\n    }\n  }\n\n  if (features.MANDATORY_SETTER) {\n    var _hasOwnProperty = function (obj, key) {\n      return Object.prototype.hasOwnProperty.call(obj, key);\n    };\n    var _propertyIsEnumerable = function (obj, key) {\n      return Object.prototype.propertyIsEnumerable.call(obj, key);\n    };\n\n    // Future traveler, although this code looks scary. It merely exists in\n    // development to aid in development asertions. Production builds of\n    // ember strip this entire block out\n    handleMandatorySetter = function handleMandatorySetter(m, obj, keyName) {\n      var descriptor = emberUtils.lookupDescriptor(obj, keyName);\n      var hasDescriptor = descriptor !== null;\n      var possibleDesc = hasDescriptor && descriptor.value;\n      if (isDescriptor(possibleDesc)) {\n        return;\n      }\n      var configurable = hasDescriptor ? descriptor.configurable : true;\n      var isWritable = hasDescriptor ? descriptor.writable : true;\n      var hasValue = hasDescriptor ? 'value' in descriptor : true;\n\n      // this x in Y deopts, so keeping it in this function is better;\n      if (configurable && isWritable && hasValue && keyName in obj) {\n        var desc = {\n          configurable: true,\n          set: MANDATORY_SETTER_FUNCTION(keyName),\n          enumerable: _propertyIsEnumerable(obj, keyName),\n          get: undefined\n        };\n\n        if (_hasOwnProperty(obj, keyName)) {\n          m.writeValues(keyName, obj[keyName]);\n          desc.get = DEFAULT_GETTER_FUNCTION(keyName);\n        } else {\n          desc.get = INHERITING_GETTER_FUNCTION(keyName);\n        }\n\n        Object.defineProperty(obj, keyName, desc);\n      }\n    };\n  }\n\n  function unwatchKey(obj, keyName, _meta) {\n    if (typeof obj !== 'object' || obj === null) {\n      return;\n    }\n    var meta$$1 = _meta === undefined ? peekMeta(obj) : _meta;\n\n    // do nothing of this object has already been destroyed\n    if (meta$$1 === undefined || meta$$1.isSourceDestroyed()) {\n      return;\n    }\n\n    var count = meta$$1.peekWatching(keyName);\n    if (count === 1) {\n      meta$$1.writeWatching(keyName, 0);\n\n      var possibleDesc = descriptorFor(obj, keyName, meta$$1);\n      var _isDescriptor = possibleDesc !== undefined;\n\n      if (_isDescriptor && possibleDesc.didUnwatch) {\n        possibleDesc.didUnwatch(obj, keyName, meta$$1);\n      }\n\n      if (typeof obj.didUnwatchProperty === 'function') {\n        obj.didUnwatchProperty(keyName);\n      }\n\n      if (features.MANDATORY_SETTER) {\n        // It is true, the following code looks quite WAT. But have no fear, It\n        // exists purely to improve development ergonomics and is removed from\n        // ember.min.js and ember.prod.js builds.\n        //\n        // Some further context: Once a property is watched by ember, bypassing `set`\n        // for mutation, will bypass observation. This code exists to assert when\n        // that occurs, and attempt to provide more helpful feedback. The alternative\n        // is tricky to debug partially observable properties.\n        if (!_isDescriptor && keyName in obj) {\n          var maybeMandatoryDescriptor = emberUtils.lookupDescriptor(obj, keyName);\n\n          if (maybeMandatoryDescriptor.set && maybeMandatoryDescriptor.set.isMandatorySetter) {\n            if (maybeMandatoryDescriptor.get && maybeMandatoryDescriptor.get.isInheritingGetter) {\n              var possibleValue = meta$$1.readInheritedValue('values', keyName);\n              if (possibleValue === UNDEFINED) {\n                delete obj[keyName];\n                return;\n              }\n            }\n\n            Object.defineProperty(obj, keyName, {\n              configurable: true,\n              enumerable: Object.prototype.propertyIsEnumerable.call(obj, keyName),\n              writable: true,\n              value: meta$$1.peekValues(keyName)\n            });\n            meta$$1.deleteFromValues(keyName);\n          }\n        }\n      }\n    } else if (count > 1) {\n      meta$$1.writeWatching(keyName, count - 1);\n    }\n  }\n\n  function objectAt(content, idx) {\n    if (typeof content.objectAt === 'function') {\n      return content.objectAt(idx);\n    } else {\n      return content[idx];\n    }\n  }\n\n  var EACH_PROXIES = new WeakMap();\n\n  function eachProxyFor(array) {\n    var eachProxy = EACH_PROXIES.get(array);\n    if (eachProxy === undefined) {\n      eachProxy = new EachProxy(array);\n      EACH_PROXIES.set(array, eachProxy);\n    }\n    return eachProxy;\n  }\n\n  function eachProxyArrayWillChange(array, idx, removedCnt, addedCnt) {\n    var eachProxy = EACH_PROXIES.get(array);\n    if (eachProxy !== undefined) {\n      eachProxy.arrayWillChange(array, idx, removedCnt, addedCnt);\n    }\n  }\n\n  function eachProxyArrayDidChange(array, idx, removedCnt, addedCnt) {\n    var eachProxy = EACH_PROXIES.get(array);\n    if (eachProxy !== undefined) {\n      eachProxy.arrayDidChange(array, idx, removedCnt, addedCnt);\n    }\n  }\n\n  var EachProxy = function () {\n    function EachProxy(content) {\n      emberBabel.classCallCheck(this, EachProxy);\n\n      this._content = content;\n      this._keys = undefined;\n      meta(this);\n    }\n\n    // ..........................................................\n    // ARRAY CHANGES\n    // Invokes whenever the content array itself changes.\n\n    EachProxy.prototype.arrayWillChange = function arrayWillChange(content, idx, removedCnt, addedCnt) {\n      // eslint-disable-line no-unused-vars\n      var keys = this._keys;\n      var lim = removedCnt > 0 ? idx + removedCnt : -1;\n      for (var key in keys) {\n        if (lim > 0) {\n          removeObserverForContentKey(content, key, this, idx, lim);\n        }\n      }\n    };\n\n    EachProxy.prototype.arrayDidChange = function arrayDidChange(content, idx, removedCnt, addedCnt) {\n      var keys = this._keys;\n      var lim = addedCnt > 0 ? idx + addedCnt : -1;\n      var meta$$1 = peekMeta(this);\n      for (var key in keys) {\n        if (lim > 0) {\n          addObserverForContentKey(content, key, this, idx, lim);\n        }\n        notifyPropertyChange(this, key, meta$$1);\n      }\n    };\n\n    // ..........................................................\n    // LISTEN FOR NEW OBSERVERS AND OTHER EVENT LISTENERS\n    // Start monitoring keys based on who is listening...\n\n    EachProxy.prototype.willWatchProperty = function willWatchProperty(property) {\n      this.beginObservingContentKey(property);\n    };\n\n    EachProxy.prototype.didUnwatchProperty = function didUnwatchProperty(property) {\n      this.stopObservingContentKey(property);\n    };\n\n    // ..........................................................\n    // CONTENT KEY OBSERVING\n    // Actual watch keys on the source content.\n\n    EachProxy.prototype.beginObservingContentKey = function beginObservingContentKey(keyName) {\n      var keys = this._keys;\n      if (!keys) {\n        keys = this._keys = Object.create(null);\n      }\n\n      if (!keys[keyName]) {\n        keys[keyName] = 1;\n        var content = this._content;\n        var len = get(content, 'length');\n\n        addObserverForContentKey(content, keyName, this, 0, len);\n      } else {\n        keys[keyName]++;\n      }\n    };\n\n    EachProxy.prototype.stopObservingContentKey = function stopObservingContentKey(keyName) {\n      var keys = this._keys;\n      if (keys && keys[keyName] > 0 && --keys[keyName] <= 0) {\n        var content = this._content;\n        var len = get(content, 'length');\n\n        removeObserverForContentKey(content, keyName, this, 0, len);\n      }\n    };\n\n    EachProxy.prototype.contentKeyDidChange = function contentKeyDidChange(obj, keyName) {\n      notifyPropertyChange(this, keyName);\n    };\n\n    return EachProxy;\n  }();\n\n  function addObserverForContentKey(content, keyName, proxy, idx, loc) {\n    while (--loc >= idx) {\n      var item = objectAt(content, loc);\n      if (item) {\n        true && !(typeof item === 'object') && emberDebug.assert('When using @each to observe the array `' + toString(content) + '`, the array must return an object', typeof item === 'object');\n\n        addObserver(item, keyName, proxy, 'contentKeyDidChange');\n      }\n    }\n  }\n\n  function removeObserverForContentKey(content, keyName, proxy, idx, loc) {\n    while (--loc >= idx) {\n      var item = objectAt(content, loc);\n      if (item) {\n        removeObserver(item, keyName, proxy, 'contentKeyDidChange');\n      }\n    }\n  }\n\n  function isObject(obj) {\n    return typeof obj === 'object' && obj !== null;\n  }\n\n  function isVolatile(obj, keyName, meta$$1) {\n    var desc = descriptorFor(obj, keyName, meta$$1);\n    return !(desc !== undefined && desc._volatile === false);\n  }\n\n  var ChainWatchers = function () {\n    function ChainWatchers() {\n      emberBabel.classCallCheck(this, ChainWatchers);\n\n      // chain nodes that reference a key in this obj by key\n      // we only create ChainWatchers when we are going to add them\n      // so create this upfront\n      this.chains = Object.create(null);\n    }\n\n    ChainWatchers.prototype.add = function add(key, node) {\n      var nodes = this.chains[key];\n      if (nodes === undefined) {\n        this.chains[key] = [node];\n      } else {\n        nodes.push(node);\n      }\n    };\n\n    ChainWatchers.prototype.remove = function remove(key, node) {\n      var nodes = this.chains[key];\n      if (nodes !== undefined) {\n        for (var i = 0; i < nodes.length; i++) {\n          if (nodes[i] === node) {\n            nodes.splice(i, 1);\n            break;\n          }\n        }\n      }\n    };\n\n    ChainWatchers.prototype.has = function has(key, node) {\n      var nodes = this.chains[key];\n      if (nodes !== undefined) {\n        for (var i = 0; i < nodes.length; i++) {\n          if (nodes[i] === node) {\n            return true;\n          }\n        }\n      }\n      return false;\n    };\n\n    ChainWatchers.prototype.revalidateAll = function revalidateAll() {\n      for (var key in this.chains) {\n        this.notify(key, true, undefined);\n      }\n    };\n\n    ChainWatchers.prototype.revalidate = function revalidate(key) {\n      this.notify(key, true, undefined);\n    };\n\n    // key: the string key that is part of a path changed\n    // revalidate: boolean; the chains that are watching this value should revalidate\n    // callback: function that will be called with the object and path that\n    //           will be/are invalidated by this key change, depending on\n    //           whether the revalidate flag is passed\n\n\n    ChainWatchers.prototype.notify = function notify(key, revalidate, callback) {\n      var nodes = this.chains[key];\n      if (nodes === undefined || nodes.length === 0) {\n        return;\n      }\n\n      var affected = void 0;\n\n      if (callback) {\n        affected = [];\n      }\n\n      for (var i = 0; i < nodes.length; i++) {\n        nodes[i].notify(revalidate, affected);\n      }\n\n      if (callback === undefined) {\n        return;\n      }\n\n      // we gather callbacks so we don't notify them during revalidation\n      for (var _i = 0; _i < affected.length; _i += 2) {\n        var obj = affected[_i];\n        var path = affected[_i + 1];\n        callback(obj, path);\n      }\n    };\n\n    return ChainWatchers;\n  }();\n\n  function makeChainWatcher() {\n    return new ChainWatchers();\n  }\n\n  function makeChainNode(obj) {\n    return new ChainNode(null, null, obj);\n  }\n\n  function addChainWatcher(obj, keyName, node) {\n    var m = meta(obj);\n    m.writableChainWatchers(makeChainWatcher).add(keyName, node);\n    watchKey(obj, keyName, m);\n  }\n\n  function removeChainWatcher(obj, keyName, node, _meta) {\n    if (!isObject(obj)) {\n      return;\n    }\n\n    var meta$$1 = _meta === undefined ? peekMeta(obj) : _meta;\n\n    if (meta$$1 === undefined || meta$$1.readableChainWatchers() === undefined) {\n      return;\n    }\n\n    // make meta writable\n    meta$$1 = meta(obj);\n\n    meta$$1.readableChainWatchers().remove(keyName, node);\n\n    unwatchKey(obj, keyName, meta$$1);\n  }\n\n  // A ChainNode watches a single key on an object. If you provide a starting\n  // value for the key then the node won't actually watch it. For a root node\n  // pass null for parent and key and object for value.\n\n  var ChainNode = function () {\n    function ChainNode(parent, key, value) {\n      emberBabel.classCallCheck(this, ChainNode);\n\n      this._parent = parent;\n      this._key = key;\n\n      // _watching is true when calling get(this._parent, this._key) will\n      // return the value of this node.\n      //\n      // It is false for the root of a chain (because we have no parent)\n      // and for global paths (because the parent node is the object with\n      // the observer on it)\n      var isWatching = this._watching = value === undefined;\n\n      this._chains = undefined;\n      this._object = undefined;\n      this.count = 0;\n\n      this._value = value;\n      this._paths = undefined;\n      if (isWatching) {\n        var obj = parent.value();\n\n        if (!isObject(obj)) {\n          return;\n        }\n\n        this._object = obj;\n\n        addChainWatcher(this._object, this._key, this);\n      }\n    }\n\n    ChainNode.prototype.value = function value() {\n      if (this._value === undefined && this._watching) {\n        var obj = this._parent.value();\n        this._value = lazyGet(obj, this._key);\n      }\n      return this._value;\n    };\n\n    ChainNode.prototype.destroy = function destroy() {\n      if (this._watching) {\n        removeChainWatcher(this._object, this._key, this);\n        this._watching = false; // so future calls do nothing\n      }\n    };\n\n    // copies a top level object only\n\n\n    ChainNode.prototype.copy = function copy(obj) {\n      var ret = makeChainNode(obj);\n      var paths = this._paths;\n      if (paths !== undefined) {\n        var path = void 0;\n        for (path in paths) {\n          if (paths[path] > 0) {\n            ret.add(path);\n          }\n        }\n      }\n      return ret;\n    };\n\n    // called on the root node of a chain to setup watchers on the specified\n    // path.\n\n\n    ChainNode.prototype.add = function add(path) {\n      var paths = this._paths || (this._paths = {});\n      paths[path] = (paths[path] || 0) + 1;\n\n      var tails = path.split('.');\n      this.chain(tails.shift(), tails);\n    };\n\n    // called on the root node of a chain to teardown watcher on the specified\n    // path\n\n\n    ChainNode.prototype.remove = function remove(path) {\n      var paths = this._paths;\n      if (paths === undefined) {\n        return;\n      }\n      if (paths[path] > 0) {\n        paths[path]--;\n      }\n\n      var tails = path.split('.');\n      this.unchain(tails.shift(), tails);\n    };\n\n    ChainNode.prototype.chain = function chain(key, tails) {\n      var chains = this._chains;\n      var node = void 0;\n      if (chains === undefined) {\n        chains = this._chains = Object.create(null);\n      } else {\n        node = chains[key];\n      }\n\n      if (node === undefined) {\n        node = chains[key] = new ChainNode(this, key, undefined);\n      }\n\n      node.count++; // count chains...\n\n      // chain rest of path if there is one\n      if (tails.length > 0) {\n        node.chain(tails.shift(), tails);\n      }\n    };\n\n    ChainNode.prototype.unchain = function unchain(key, tails) {\n      var chains = this._chains;\n      var node = chains[key];\n\n      // unchain rest of path first...\n      if (tails.length > 0) {\n        node.unchain(tails.shift(), tails);\n      }\n\n      // delete node if needed.\n      node.count--;\n      if (node.count <= 0) {\n        chains[node._key] = undefined;\n        node.destroy();\n      }\n    };\n\n    ChainNode.prototype.notify = function notify(revalidate, affected) {\n      if (revalidate && this._watching) {\n        var parentValue = this._parent.value();\n\n        if (parentValue !== this._object) {\n          removeChainWatcher(this._object, this._key, this);\n\n          if (isObject(parentValue)) {\n            this._object = parentValue;\n            addChainWatcher(parentValue, this._key, this);\n          } else {\n            this._object = undefined;\n          }\n        }\n        this._value = undefined;\n      }\n\n      // then notify chains...\n      var chains = this._chains;\n      if (chains !== undefined) {\n        var node = void 0;\n        for (var key in chains) {\n          node = chains[key];\n          if (node !== undefined) {\n            node.notify(revalidate, affected);\n          }\n        }\n      }\n\n      if (affected && this._parent) {\n        this._parent.populateAffected(this._key, 1, affected);\n      }\n    };\n\n    ChainNode.prototype.populateAffected = function populateAffected(path, depth, affected) {\n      if (this._key) {\n        path = this._key + '.' + path;\n      }\n\n      if (this._parent) {\n        this._parent.populateAffected(path, depth + 1, affected);\n      } else if (depth > 1) {\n        affected.push(this.value(), path);\n      }\n    };\n\n    return ChainNode;\n  }();\n\n  function lazyGet(obj, key) {\n    if (!isObject(obj)) {\n      return;\n    }\n\n    var meta$$1 = peekMeta(obj);\n\n    // check if object meant only to be a prototype\n    if (meta$$1 !== undefined && meta$$1.proto === obj) {\n      return;\n    }\n\n    // Use `get` if the return value is an EachProxy or an uncacheable value.\n    if (key === '@each') {\n      return eachProxyFor(obj);\n    } else if (isVolatile(obj, key, meta$$1)) {\n      return get(obj, key);\n      // Otherwise attempt to get the cached value of the computed property\n    } else {\n      return getCachedValueFor(obj, key);\n    }\n  }\n\n  function finishChains(meta$$1) {\n    // finish any current chains node watchers that reference obj\n    var chainWatchers = meta$$1.readableChainWatchers();\n    if (chainWatchers !== undefined) {\n      chainWatchers.revalidateAll();\n    }\n    // ensure that if we have inherited any chains they have been\n    // copied onto our own meta.\n    if (meta$$1.readableChains() !== undefined) {\n      meta$$1.writableChains(makeChainNode);\n    }\n  }\n\n  var counters = void 0;\n  {\n    counters = {\n      peekCalls: 0,\n      peekParentCalls: 0,\n      peekPrototypeWalks: 0,\n      setCalls: 0,\n      deleteCalls: 0,\n      metaCalls: 0,\n      metaInstantiated: 0\n    };\n  }\n\n  /**\n  @module ember\n  */\n\n  var UNDEFINED = emberUtils.symbol('undefined');\n\n  // FLAGS\n  var SOURCE_DESTROYING = 1 << 1;\n  var SOURCE_DESTROYED = 1 << 2;\n  var META_DESTROYED = 1 << 3;\n  var IS_PROXY = 1 << 4;\n\n  var NODE_STACK = [];\n\n  var Meta = function () {\n    function Meta(obj, parentMeta) {\n      emberBabel.classCallCheck(this, Meta);\n\n      {\n        counters.metaInstantiated++;\n      }\n\n      if (features.EMBER_METAL_ES5_GETTERS) {\n        this._descriptors = undefined;\n      }\n\n      this._watching = undefined;\n      this._mixins = undefined;\n      if (emberEnvironment.ENV._ENABLE_BINDING_SUPPORT) {\n        this._bindings = undefined;\n      }\n      this._values = undefined;\n      this._deps = undefined;\n      this._chainWatchers = undefined;\n      this._chains = undefined;\n      this._tag = undefined;\n      this._tags = undefined;\n\n      // initial value for all flags right now is false\n      // see FLAGS const for detailed list of flags used\n      this._flags = 0;\n\n      // used only internally\n      this.source = obj;\n\n      // when meta(obj).proto === obj, the object is intended to be only a\n      // prototype and doesn't need to actually be observable itself\n      this.proto = undefined;\n\n      // The next meta in our inheritance chain. We (will) track this\n      // explicitly instead of using prototypical inheritance because we\n      // have detailed knowledge of how each property should really be\n      // inherited, and we can optimize it much better than JS runtimes.\n      this.parent = parentMeta;\n\n      this._listeners = undefined;\n      this._listenersFinalized = false;\n    }\n\n    Meta.prototype.isInitialized = function isInitialized(obj) {\n      return this.proto !== obj;\n    };\n\n    Meta.prototype.destroy = function destroy() {\n      if (this.isMetaDestroyed()) {\n        return;\n      }\n\n      // remove chainWatchers to remove circular references that would prevent GC\n      var nodes = void 0,\n          key = void 0,\n          nodeObject = void 0;\n      var node = this.readableChains();\n      if (node !== undefined) {\n        NODE_STACK.push(node);\n        // process tree\n        while (NODE_STACK.length > 0) {\n          node = NODE_STACK.pop();\n          // push children\n          nodes = node._chains;\n          if (nodes !== undefined) {\n            for (key in nodes) {\n              if (nodes[key] !== undefined) {\n                NODE_STACK.push(nodes[key]);\n              }\n            }\n          }\n\n          // remove chainWatcher in node object\n          if (node._watching) {\n            nodeObject = node._object;\n            if (nodeObject !== undefined) {\n              var foreignMeta = peekMeta(nodeObject);\n              // avoid cleaning up chain watchers when both current and\n              // foreign objects are being destroyed\n              // if both are being destroyed manual cleanup is not needed\n              // as they will be GC'ed and no non-destroyed references will\n              // be remaining\n              if (foreignMeta && !foreignMeta.isSourceDestroying()) {\n                removeChainWatcher(nodeObject, node._key, node, foreignMeta);\n              }\n            }\n          }\n        }\n      }\n\n      this.setMetaDestroyed();\n    };\n\n    Meta.prototype.isSourceDestroying = function isSourceDestroying() {\n      return (this._flags & SOURCE_DESTROYING) !== 0;\n    };\n\n    Meta.prototype.setSourceDestroying = function setSourceDestroying() {\n      this._flags |= SOURCE_DESTROYING;\n    };\n\n    Meta.prototype.isSourceDestroyed = function isSourceDestroyed() {\n      return (this._flags & SOURCE_DESTROYED) !== 0;\n    };\n\n    Meta.prototype.setSourceDestroyed = function setSourceDestroyed() {\n      this._flags |= SOURCE_DESTROYED;\n    };\n\n    Meta.prototype.isMetaDestroyed = function isMetaDestroyed() {\n      return (this._flags & META_DESTROYED) !== 0;\n    };\n\n    Meta.prototype.setMetaDestroyed = function setMetaDestroyed() {\n      this._flags |= META_DESTROYED;\n    };\n\n    Meta.prototype.isProxy = function isProxy() {\n      return (this._flags & IS_PROXY) !== 0;\n    };\n\n    Meta.prototype.setProxy = function setProxy() {\n      this._flags |= IS_PROXY;\n    };\n\n    Meta.prototype._getOrCreateOwnMap = function _getOrCreateOwnMap(key) {\n      return this[key] || (this[key] = Object.create(null));\n    };\n\n    Meta.prototype._getInherited = function _getInherited(key) {\n      var pointer = this;\n      while (pointer !== undefined) {\n        var map = pointer[key];\n        if (map !== undefined) {\n          return map;\n        }\n        pointer = pointer.parent;\n      }\n    };\n\n    Meta.prototype._findInherited = function _findInherited(key, subkey) {\n      var pointer = this;\n      while (pointer !== undefined) {\n        var map = pointer[key];\n        if (map !== undefined) {\n          var value = map[subkey];\n          if (value !== undefined) {\n            return value;\n          }\n        }\n        pointer = pointer.parent;\n      }\n    };\n\n    // Implements a member that provides a lazily created map of maps,\n    // with inheritance at both levels.\n\n\n    Meta.prototype.writeDeps = function writeDeps(subkey, itemkey, value) {\n      true && !!this.isMetaDestroyed() && emberDebug.assert('Cannot modify dependent keys for `' + itemkey + '` on `' + emberUtils.toString(this.source) + '` after it has been destroyed.', !this.isMetaDestroyed());\n\n      var outerMap = this._getOrCreateOwnMap('_deps');\n      var innerMap = outerMap[subkey];\n      if (innerMap === undefined) {\n        innerMap = outerMap[subkey] = Object.create(null);\n      }\n      innerMap[itemkey] = value;\n    };\n\n    Meta.prototype.peekDeps = function peekDeps(subkey, itemkey) {\n      var pointer = this;\n      while (pointer !== undefined) {\n        var map = pointer._deps;\n        if (map !== undefined) {\n          var value = map[subkey];\n          if (value !== undefined) {\n            var itemvalue = value[itemkey];\n            if (itemvalue !== undefined) {\n              return itemvalue;\n            }\n          }\n        }\n        pointer = pointer.parent;\n      }\n    };\n\n    Meta.prototype.hasDeps = function hasDeps(subkey) {\n      var pointer = this;\n      while (pointer !== undefined) {\n        var deps = pointer._deps;\n        if (deps !== undefined && deps[subkey] !== undefined) {\n          return true;\n        }\n        pointer = pointer.parent;\n      }\n      return false;\n    };\n\n    Meta.prototype.forEachInDeps = function forEachInDeps(subkey, fn) {\n      return this._forEachIn('_deps', subkey, fn);\n    };\n\n    Meta.prototype._forEachIn = function _forEachIn(key, subkey, fn) {\n      var pointer = this;\n      var seen = void 0;\n      var calls = void 0;\n      while (pointer !== undefined) {\n        var map = pointer[key];\n        if (map !== undefined) {\n          var innerMap = map[subkey];\n          if (innerMap !== undefined) {\n            for (var innerKey in innerMap) {\n              seen = seen === undefined ? new Set() : seen;\n              if (!seen.has(innerKey)) {\n                seen.add(innerKey);\n                calls = calls || [];\n                calls.push(innerKey, innerMap[innerKey]);\n              }\n            }\n          }\n        }\n        pointer = pointer.parent;\n      }\n\n      if (calls !== undefined) {\n        for (var i = 0; i < calls.length; i += 2) {\n          fn(calls[i], calls[i + 1]);\n        }\n      }\n    };\n\n    Meta.prototype.writableTags = function writableTags() {\n      return this._getOrCreateOwnMap('_tags');\n    };\n\n    Meta.prototype.readableTags = function readableTags() {\n      return this._tags;\n    };\n\n    Meta.prototype.writableTag = function writableTag(create) {\n      true && !!this.isMetaDestroyed() && emberDebug.assert('Cannot create a new tag for `' + emberUtils.toString(this.source) + '` after it has been destroyed.', !this.isMetaDestroyed());\n\n      var ret = this._tag;\n      if (ret === undefined) {\n        ret = this._tag = create(this.source);\n      }\n      return ret;\n    };\n\n    Meta.prototype.readableTag = function readableTag() {\n      return this._tag;\n    };\n\n    Meta.prototype.writableChainWatchers = function writableChainWatchers(create) {\n      true && !!this.isMetaDestroyed() && emberDebug.assert('Cannot create a new chain watcher for `' + emberUtils.toString(this.source) + '` after it has been destroyed.', !this.isMetaDestroyed());\n\n      var ret = this._chainWatchers;\n      if (ret === undefined) {\n        ret = this._chainWatchers = create(this.source);\n      }\n      return ret;\n    };\n\n    Meta.prototype.readableChainWatchers = function readableChainWatchers() {\n      return this._chainWatchers;\n    };\n\n    Meta.prototype.writableChains = function writableChains(create) {\n      true && !!this.isMetaDestroyed() && emberDebug.assert('Cannot create a new chains for `' + emberUtils.toString(this.source) + '` after it has been destroyed.', !this.isMetaDestroyed());\n\n      var ret = this._chains;\n      if (ret === undefined) {\n        if (this.parent === undefined) {\n          ret = create(this.source);\n        } else {\n          ret = this.parent.writableChains(create).copy(this.source);\n        }\n        this._chains = ret;\n      }\n      return ret;\n    };\n\n    Meta.prototype.readableChains = function readableChains() {\n      return this._getInherited('_chains');\n    };\n\n    Meta.prototype.writeWatching = function writeWatching(subkey, value) {\n      true && !!this.isMetaDestroyed() && emberDebug.assert('Cannot update watchers for `' + subkey + '` on `' + emberUtils.toString(this.source) + '` after it has been destroyed.', !this.isMetaDestroyed());\n\n      var map = this._getOrCreateOwnMap('_watching');\n      map[subkey] = value;\n    };\n\n    Meta.prototype.peekWatching = function peekWatching(subkey) {\n      return this._findInherited('_watching', subkey);\n    };\n\n    Meta.prototype.writeMixins = function writeMixins(subkey, value) {\n      true && !!this.isMetaDestroyed() && emberDebug.assert('Cannot add mixins for `' + subkey + '` on `' + emberUtils.toString(this.source) + '` call writeMixins after it has been destroyed.', !this.isMetaDestroyed());\n\n      var map = this._getOrCreateOwnMap('_mixins');\n      map[subkey] = value;\n    };\n\n    Meta.prototype.peekMixins = function peekMixins(subkey) {\n      return this._findInherited('_mixins', subkey);\n    };\n\n    Meta.prototype.forEachMixins = function forEachMixins(fn) {\n      var pointer = this;\n      var seen = void 0;\n      while (pointer !== undefined) {\n        var map = pointer._mixins;\n        if (map !== undefined) {\n          for (var key in map) {\n            seen = seen === undefined ? new Set() : seen;\n            if (!seen.has(key)) {\n              seen.add(key);\n              fn(key, map[key]);\n            }\n          }\n        }\n        pointer = pointer.parent;\n      }\n    };\n\n    Meta.prototype.writeBindings = function writeBindings(subkey, value) {\n      true && !emberEnvironment.ENV._ENABLE_BINDING_SUPPORT && emberDebug.assert('Cannot invoke `meta.writeBindings` when EmberENV._ENABLE_BINDING_SUPPORT is not set', emberEnvironment.ENV._ENABLE_BINDING_SUPPORT);\n      true && !!this.isMetaDestroyed() && emberDebug.assert('Cannot add a binding for `' + subkey + '` on `' + emberUtils.toString(this.source) + '` after it has been destroyed.', !this.isMetaDestroyed());\n\n      var map = this._getOrCreateOwnMap('_bindings');\n      map[subkey] = value;\n    };\n\n    Meta.prototype.peekBindings = function peekBindings(subkey) {\n      true && !emberEnvironment.ENV._ENABLE_BINDING_SUPPORT && emberDebug.assert('Cannot invoke `meta.peekBindings` when EmberENV._ENABLE_BINDING_SUPPORT is not set', emberEnvironment.ENV._ENABLE_BINDING_SUPPORT);\n\n      return this._findInherited('_bindings', subkey);\n    };\n\n    Meta.prototype.forEachBindings = function forEachBindings(fn) {\n      true && !emberEnvironment.ENV._ENABLE_BINDING_SUPPORT && emberDebug.assert('Cannot invoke `meta.forEachBindings` when EmberENV._ENABLE_BINDING_SUPPORT is not set', emberEnvironment.ENV._ENABLE_BINDING_SUPPORT);\n\n      var pointer = this;\n      var seen = void 0;\n      while (pointer !== undefined) {\n        var map = pointer._bindings;\n        if (map !== undefined) {\n          for (var key in map) {\n            seen = seen || Object.create(null);\n            if (seen[key] === undefined) {\n              seen[key] = true;\n              fn(key, map[key]);\n            }\n          }\n        }\n        pointer = pointer.parent;\n      }\n    };\n\n    Meta.prototype.clearBindings = function clearBindings() {\n      true && !emberEnvironment.ENV._ENABLE_BINDING_SUPPORT && emberDebug.assert('Cannot invoke `meta.clearBindings` when EmberENV._ENABLE_BINDING_SUPPORT is not set', emberEnvironment.ENV._ENABLE_BINDING_SUPPORT);\n      true && !!this.isMetaDestroyed() && emberDebug.assert('Cannot clear bindings on `' + emberUtils.toString(this.source) + '` after it has been destroyed.', !this.isMetaDestroyed());\n\n      this._bindings = undefined;\n    };\n\n    Meta.prototype.writeValues = function writeValues(subkey, value) {\n      true && !!this.isMetaDestroyed() && emberDebug.assert('Cannot set the value of `' + subkey + '` on `' + emberUtils.toString(this.source) + '` after it has been destroyed.', !this.isMetaDestroyed());\n\n      var map = this._getOrCreateOwnMap('_values');\n      map[subkey] = value;\n    };\n\n    Meta.prototype.peekValues = function peekValues(subkey) {\n      return this._findInherited('_values', subkey);\n    };\n\n    Meta.prototype.deleteFromValues = function deleteFromValues(subkey) {\n      delete this._getOrCreateOwnMap('_values')[subkey];\n    };\n\n    return Meta;\n  }();\n\n  for (var name in protoMethods) {\n    Meta.prototype[name] = protoMethods[name];\n  }\n\n  if (features.MANDATORY_SETTER) {\n    Meta.prototype.readInheritedValue = function (key, subkey) {\n      var internalKey = '_' + key;\n\n      var pointer = this;\n\n      while (pointer !== undefined) {\n        var map = pointer[internalKey];\n        if (map !== undefined) {\n          var value = map[subkey];\n          if (value !== undefined || subkey in map) {\n            return value;\n          }\n        }\n        pointer = pointer.parent;\n      }\n\n      return UNDEFINED;\n    };\n\n    Meta.prototype.writeValue = function (obj, key, value) {\n      var descriptor = emberUtils.lookupDescriptor(obj, key);\n      var isMandatorySetter = descriptor !== null && descriptor.set && descriptor.set.isMandatorySetter;\n\n      if (isMandatorySetter) {\n        this.writeValues(key, value);\n      } else {\n        obj[key] = value;\n      }\n    };\n  }\n\n  if (features.EMBER_METAL_ES5_GETTERS) {\n    Meta.prototype.writeDescriptors = function (subkey, value) {\n      true && !!this.isMetaDestroyed() && emberDebug.assert('Cannot update descriptors for `' + subkey + '` on `' + emberUtils.toString(this.source) + '` after it has been destroyed.', !this.isMetaDestroyed());\n\n      var map = this._getOrCreateOwnMap('_descriptors');\n      map[subkey] = value;\n    };\n\n    Meta.prototype.peekDescriptors = function (subkey) {\n      var possibleDesc = this._findInherited('_descriptors', subkey);\n      return possibleDesc === UNDEFINED ? undefined : possibleDesc;\n    };\n\n    Meta.prototype.removeDescriptors = function (subkey) {\n      this.writeDescriptors(subkey, UNDEFINED);\n    };\n  }\n\n  var getPrototypeOf = Object.getPrototypeOf;\n  var metaStore = new WeakMap();\n\n  function setMeta(obj, meta) {\n    true && !(obj !== null) && emberDebug.assert('Cannot call `setMeta` on null', obj !== null);\n    true && !(obj !== undefined) && emberDebug.assert('Cannot call `setMeta` on undefined', obj !== undefined);\n    true && !(typeof obj === 'object' || typeof obj === 'function') && emberDebug.assert('Cannot call `setMeta` on ' + typeof obj, typeof obj === 'object' || typeof obj === 'function');\n\n    {\n      counters.setCalls++;\n    }\n    metaStore.set(obj, meta);\n  }\n\n  function peekMeta(obj) {\n    true && !(obj !== null) && emberDebug.assert('Cannot call `peekMeta` on null', obj !== null);\n    true && !(obj !== undefined) && emberDebug.assert('Cannot call `peekMeta` on undefined', obj !== undefined);\n    true && !(typeof obj === 'object' || typeof obj === 'function') && emberDebug.assert('Cannot call `peekMeta` on ' + typeof obj, typeof obj === 'object' || typeof obj === 'function');\n\n    var pointer = obj;\n    var meta = void 0;\n    while (pointer !== undefined && pointer !== null) {\n      meta = metaStore.get(pointer);\n      // jshint loopfunc:true\n      {\n        counters.peekCalls++;\n      }\n      if (meta !== undefined) {\n        return meta;\n      }\n\n      pointer = getPrototypeOf(pointer);\n      {\n        counters.peekPrototypeWalks++;\n      }\n    }\n  }\n\n  /**\n    Tears down the meta on an object so that it can be garbage collected.\n    Multiple calls will have no effect.\n  \n    @method deleteMeta\n    @for Ember\n    @param {Object} obj  the object to destroy\n    @return {void}\n    @private\n  */\n  function deleteMeta(obj) {\n    true && !(obj !== null) && emberDebug.assert('Cannot call `deleteMeta` on null', obj !== null);\n    true && !(obj !== undefined) && emberDebug.assert('Cannot call `deleteMeta` on undefined', obj !== undefined);\n    true && !(typeof obj === 'object' || typeof obj === 'function') && emberDebug.assert('Cannot call `deleteMeta` on ' + typeof obj, typeof obj === 'object' || typeof obj === 'function');\n\n    {\n      counters.deleteCalls++;\n    }\n\n    var meta = peekMeta(obj);\n    if (meta !== undefined) {\n      meta.destroy();\n    }\n  }\n\n  /**\n    Retrieves the meta hash for an object. If `writable` is true ensures the\n    hash is writable for this object as well.\n  \n    The meta object contains information about computed property descriptors as\n    well as any watched properties and other information. You generally will\n    not access this information directly but instead work with higher level\n    methods that manipulate this hash indirectly.\n  \n    @method meta\n    @for Ember\n    @private\n  \n    @param {Object} obj The object to retrieve meta for\n    @param {Boolean} [writable=true] Pass `false` if you do not intend to modify\n      the meta hash, allowing the method to avoid making an unnecessary copy.\n    @return {Object} the meta hash for an object\n  */\n  function meta(obj) {\n    true && !(obj !== null) && emberDebug.assert('Cannot call `meta` on null', obj !== null);\n    true && !(obj !== undefined) && emberDebug.assert('Cannot call `meta` on undefined', obj !== undefined);\n    true && !(typeof obj === 'object' || typeof obj === 'function') && emberDebug.assert('Cannot call `meta` on ' + typeof obj, typeof obj === 'object' || typeof obj === 'function');\n\n    {\n      counters.metaCalls++;\n    }\n\n    var maybeMeta = peekMeta(obj);\n    var parent = void 0;\n\n    // remove this code, in-favor of explicit parent\n    if (maybeMeta !== undefined) {\n      if (maybeMeta.source === obj) {\n        return maybeMeta;\n      }\n      parent = maybeMeta;\n    }\n\n    var newMeta = new Meta(obj, parent);\n    setMeta(obj, newMeta);\n    return newMeta;\n  }\n\n  {\n    meta._counters = counters;\n  }\n\n  // Using `symbol()` here causes some node test to fail, presumably\n  // because we define the CP with one copy of Ember and boot the app\n  // with a different copy, so the random key we generate do not line\n  // up. Is that testing a legit scenario?\n  var DESCRIPTOR = '__DESCRIPTOR__';\n\n  /**\n    Returns the CP descriptor assocaited with `obj` and `keyName`, if any.\n  \n    @method descriptorFor\n    @param {Object} obj the object to check\n    @param {String} keyName the key to check\n    @return {Descriptor}\n    @private\n  */\n  function descriptorFor(obj, keyName, _meta) {\n    true && !(obj !== null) && emberDebug.assert('Cannot call `descriptorFor` on null', obj !== null);\n    true && !(obj !== undefined) && emberDebug.assert('Cannot call `descriptorFor` on undefined', obj !== undefined);\n    true && !(typeof obj === 'object' || typeof obj === 'function') && emberDebug.assert('Cannot call `descriptorFor` on ' + typeof obj, typeof obj === 'object' || typeof obj === 'function');\n\n    if (features.EMBER_METAL_ES5_GETTERS) {\n      var _meta2 = _meta === undefined ? peekMeta(obj) : _meta;\n\n      if (_meta2 !== undefined) {\n        return _meta2.peekDescriptors(keyName);\n      }\n    } else {\n      var possibleDesc = obj[keyName];\n\n      if (features.DESCRIPTOR_TRAP && isDescriptorTrap(possibleDesc)) {\n        return possibleDesc[DESCRIPTOR];\n      } else {\n        return isDescriptor(possibleDesc) ? possibleDesc : undefined;\n      }\n    }\n  }\n\n  function isDescriptorTrap(possibleDesc) {\n    if (features.DESCRIPTOR_TRAP) {\n      return possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc[DESCRIPTOR] !== undefined;\n    } else {\n      throw new Error('Cannot call `isDescriptorTrap` in production');\n    }\n  }\n\n  /**\n    Check whether a value is a CP descriptor.\n  \n    @method descriptorFor\n    @param {any} possibleDesc the value to check\n    @return {boolean}\n    @private\n  */\n  function isDescriptor(possibleDesc) {\n    return possibleDesc !== null && typeof possibleDesc === 'object' && possibleDesc.isDescriptor;\n  }\n\n  var Cache = function () {\n    function Cache(limit, func, key, store) {\n      emberBabel.classCallCheck(this, Cache);\n\n      this.size = 0;\n      this.misses = 0;\n      this.hits = 0;\n      this.limit = limit;\n      this.func = func;\n      this.key = key;\n      this.store = store || new Map();\n    }\n\n    Cache.prototype.get = function get(obj) {\n      var key = this.key === undefined ? obj : this.key(obj);\n      var value = this.store.get(key);\n      if (value === undefined) {\n        this.misses++;\n        value = this._set(key, this.func(obj));\n      } else if (value === UNDEFINED) {\n        this.hits++;\n        value = undefined;\n      } else {\n        this.hits++;\n        // nothing to translate\n      }\n\n      return value;\n    };\n\n    Cache.prototype.set = function set(obj, value) {\n      var key = this.key === undefined ? obj : this.key(obj);\n      return this._set(key, value);\n    };\n\n    Cache.prototype._set = function _set(key, value) {\n      if (this.limit > this.size) {\n        this.size++;\n        if (value === undefined) {\n          this.store.set(key, UNDEFINED);\n        } else {\n          this.store.set(key, value);\n        }\n      }\n\n      return value;\n    };\n\n    Cache.prototype.purge = function purge() {\n      this.store.clear();\n      this.size = 0;\n      this.hits = 0;\n      this.misses = 0;\n    };\n\n    return Cache;\n  }();\n\n  var firstDotIndexCache = new Cache(1000, function (key) {\n    return key.indexOf('.');\n  });\n\n  function isPath(path) {\n    return typeof path === 'string' && firstDotIndexCache.get(path) !== -1;\n  }\n\n  /**\n  @module @ember/object\n  */\n\n  var ALLOWABLE_TYPES = {\n    object: true,\n    function: true,\n    string: true\n  };\n\n  var PROXY_CONTENT = emberUtils.symbol('PROXY_CONTENT');\n\n  function getPossibleMandatoryProxyValue(obj, keyName) {\n    if (features.MANDATORY_GETTER && features.EMBER_METAL_ES5_GETTERS && emberUtils.HAS_NATIVE_PROXY) {\n      var content = obj[PROXY_CONTENT];\n      if (content === undefined) {\n        return obj[keyName];\n      } else {\n        /* global Reflect */\n        return Reflect.get(content, keyName, obj);\n      }\n    } else {\n      return obj[keyName];\n    }\n  }\n\n  // ..........................................................\n  // GET AND SET\n  //\n  // If we are on a platform that supports accessors we can use those.\n  // Otherwise simulate accessors by looking up the property directly on the\n  // object.\n\n  /**\n    Gets the value of a property on an object. If the property is computed,\n    the function will be invoked. If the property is not defined but the\n    object implements the `unknownProperty` method then that will be invoked.\n  \n    ```javascript\n    import { get } from '@ember/object';\n    get(obj, \"name\");\n    ```\n  \n    If you plan to run on IE8 and older browsers then you should use this\n    method anytime you want to retrieve a property on an object that you don't\n    know for sure is private. (Properties beginning with an underscore '_'\n    are considered private.)\n  \n    On all newer browsers, you only need to use this method to retrieve\n    properties if the property might not be defined on the object and you want\n    to respect the `unknownProperty` handler. Otherwise you can ignore this\n    method.\n  \n    Note that if the object itself is `undefined`, this method will throw\n    an error.\n  \n    @method get\n    @for @ember/object\n    @static\n    @param {Object} obj The object to retrieve from.\n    @param {String} keyName The property key to retrieve\n    @return {Object} the property value or `null`.\n    @public\n  */\n  function get(obj, keyName) {\n    true && !(arguments.length === 2) && emberDebug.assert('Get must be called with two arguments; an object and a property key', arguments.length === 2);\n    true && !(obj !== undefined && obj !== null) && emberDebug.assert('Cannot call get with \\'' + keyName + '\\' on an undefined object.', obj !== undefined && obj !== null);\n    true && !(typeof keyName === 'string' || typeof keyName === 'number' && !isNaN(keyName)) && emberDebug.assert('The key provided to get must be a string or number, you passed ' + keyName, typeof keyName === 'string' || typeof keyName === 'number' && !isNaN(keyName));\n    true && !(typeof keyName !== 'string' || keyName.lastIndexOf('this.', 0) !== 0) && emberDebug.assert('\\'this\\' in paths is not supported', typeof keyName !== 'string' || keyName.lastIndexOf('this.', 0) !== 0);\n    true && !(keyName !== '') && emberDebug.assert('Cannot call `get` with an empty string', keyName !== '');\n\n    var type = typeof obj;\n\n    var isObject = type === 'object';\n    var isFunction = type === 'function';\n    var isObjectLike = isObject || isFunction;\n\n    var descriptor = undefined;\n    var value = void 0;\n\n    if (isObjectLike) {\n      if (features.EMBER_METAL_ES5_GETTERS) {\n        descriptor = descriptorFor(obj, keyName);\n      }\n\n      if (!features.EMBER_METAL_ES5_GETTERS || descriptor === undefined) {\n        value = getPossibleMandatoryProxyValue(obj, keyName);\n\n        if (features.DESCRIPTOR_TRAP && isDescriptorTrap(value)) {\n          descriptor = value[DESCRIPTOR];\n        } else if (isDescriptor(value)) {\n          descriptor = value;\n        }\n      }\n\n      if (descriptor !== undefined) {\n        return descriptor.get(obj, keyName);\n      }\n    } else {\n      value = obj[keyName];\n    }\n\n    if (isPath(keyName)) {\n      return _getPath(obj, keyName);\n    } else if (value === undefined && isObject && !(keyName in obj) && typeof obj.unknownProperty === 'function') {\n      return obj.unknownProperty(keyName);\n    } else {\n      return value;\n    }\n  }\n\n  function _getPath(root, path) {\n    var obj = root;\n    var parts = path.split('.');\n\n    for (var i = 0; i < parts.length; i++) {\n      if (!isGettable(obj)) {\n        return undefined;\n      }\n\n      obj = get(obj, parts[i]);\n\n      if (obj && obj.isDestroyed) {\n        return undefined;\n      }\n    }\n\n    return obj;\n  }\n\n  function isGettable(obj) {\n    return obj !== undefined && obj !== null && ALLOWABLE_TYPES[typeof obj];\n  }\n\n  /**\n    Retrieves the value of a property from an Object, or a default value in the\n    case that the property returns `undefined`.\n  \n    ```javascript\n    import { getWithDefault } from '@ember/object';\n    getWithDefault(person, 'lastName', 'Doe');\n    ```\n  \n    @method getWithDefault\n    @for @ember/object\n    @static\n    @param {Object} obj The object to retrieve from.\n    @param {String} keyName The name of the property to retrieve\n    @param {Object} defaultValue The value to return if the property value is undefined\n    @return {Object} The property value or the defaultValue.\n    @public\n  */\n  function getWithDefault(root, key, defaultValue) {\n    var value = get(root, key);\n\n    if (value === undefined) {\n      return defaultValue;\n    }\n    return value;\n  }\n\n  /**\n   @module @ember/object\n  */\n  /**\n    Sets the value of a property on an object, respecting computed properties\n    and notifying observers and other listeners of the change.\n    If the specified property is not defined on the object and the object\n    implements the `setUnknownProperty` method, then instead of setting the\n    value of the property on the object, its `setUnknownProperty` handler\n    will be invoked with the two parameters `keyName` and `value`.\n  \n    ```javascript\n    import { set } from '@ember/object';\n    set(obj, \"name\", value);\n    ```\n  \n    @method set\n    @static\n    @for @ember/object\n    @param {Object} obj The object to modify.\n    @param {String} keyName The property key to set\n    @param {Object} value The value to set\n    @return {Object} the passed value.\n    @public\n  */\n  function set(obj, keyName, value, tolerant) {\n    true && !(arguments.length === 3 || arguments.length === 4) && emberDebug.assert('Set must be called with three or four arguments; an object, a property key, a value and tolerant true/false', arguments.length === 3 || arguments.length === 4);\n    true && !(obj && typeof obj === 'object' || typeof obj === 'function') && emberDebug.assert('Cannot call set with \\'' + keyName + '\\' on an undefined object.', obj && typeof obj === 'object' || typeof obj === 'function');\n    true && !(typeof keyName === 'string' || typeof keyName === 'number' && !isNaN(keyName)) && emberDebug.assert('The key provided to set must be a string or number, you passed ' + keyName, typeof keyName === 'string' || typeof keyName === 'number' && !isNaN(keyName));\n    true && !(typeof keyName !== 'string' || keyName.lastIndexOf('this.', 0) !== 0) && emberDebug.assert('\\'this\\' in paths is not supported', typeof keyName !== 'string' || keyName.lastIndexOf('this.', 0) !== 0);\n\n    if (obj.isDestroyed) {\n      true && !tolerant && emberDebug.assert('calling set on destroyed object: ' + emberUtils.toString(obj) + '.' + keyName + ' = ' + emberUtils.toString(value), tolerant);\n\n      return;\n    }\n\n    if (isPath(keyName)) {\n      return setPath(obj, keyName, value, tolerant);\n    }\n\n    if (features.EMBER_METAL_ES5_GETTERS) {\n      var possibleDesc = descriptorFor(obj, keyName);\n\n      if (possibleDesc !== undefined) {\n        /* computed property */\n        possibleDesc.set(obj, keyName, value);\n        return value;\n      }\n    }\n\n    var currentValue = getPossibleMandatoryProxyValue(obj, keyName);\n\n    if (features.DESCRIPTOR_TRAP && isDescriptorTrap(currentValue)) {\n      currentValue = currentValue[DESCRIPTOR];\n    }\n\n    if (isDescriptor(currentValue)) {\n      /* computed property */\n      currentValue.set(obj, keyName, value);\n    } else if (currentValue === undefined && 'object' === typeof obj && !(keyName in obj) && typeof obj.setUnknownProperty === 'function') {\n      /* unknown property */\n      obj.setUnknownProperty(keyName, value);\n    } else if (currentValue === value) {/* no change */\n    } else {\n      var meta$$1 = peekMeta(obj);\n\n      if (features.MANDATORY_SETTER) {\n        setWithMandatorySetter(meta$$1, obj, keyName, value);\n      } else {\n        obj[keyName] = value;\n      }\n\n      notifyPropertyChange(obj, keyName, meta$$1);\n    }\n\n    return value;\n  }\n\n  if (features.MANDATORY_SETTER) {\n    var setWithMandatorySetter = function (meta$$1, obj, keyName, value) {\n      if (meta$$1 !== undefined && meta$$1.peekWatching(keyName) > 0) {\n        makeEnumerable(obj, keyName);\n        meta$$1.writeValue(obj, keyName, value);\n      } else {\n        obj[keyName] = value;\n      }\n    };\n\n    var makeEnumerable = function (obj, key) {\n      var desc = Object.getOwnPropertyDescriptor(obj, key);\n\n      if (desc && desc.set && desc.set.isMandatorySetter) {\n        desc.enumerable = true;\n        Object.defineProperty(obj, key, desc);\n      }\n    };\n  }\n\n  function setPath(root, path, value, tolerant) {\n    var parts = path.split('.');\n    var keyName = parts.pop();\n\n    true && !(keyName.trim().length > 0) && emberDebug.assert('Property set failed: You passed an empty path', keyName.trim().length > 0);\n\n    var newPath = parts.join('.');\n\n    var newRoot = _getPath(root, newPath);\n\n    if (newRoot) {\n      return set(newRoot, keyName, value);\n    } else if (!tolerant) {\n      throw new emberDebug.Error('Property set failed: object in path \"' + newPath + '\" could not be found or was destroyed.');\n    }\n  }\n\n  /**\n    Error-tolerant form of `set`. Will not blow up if any part of the\n    chain is `undefined`, `null`, or destroyed.\n  \n    This is primarily used when syncing bindings, which may try to update after\n    an object has been destroyed.\n  \n    @method trySet\n    @static\n    @for @ember/object\n    @param {Object} root The object to modify.\n    @param {String} path The property path to set\n    @param {Object} value The value to set\n    @public\n  */\n  function trySet(root, path, value) {\n    return set(root, path, value, true);\n  }\n\n  /**\n  @module @ember/object\n  */\n\n  var END_WITH_EACH_REGEX = /\\.@each$/;\n\n  /**\n    Expands `pattern`, invoking `callback` for each expansion.\n  \n    The only pattern supported is brace-expansion, anything else will be passed\n    once to `callback` directly.\n  \n    Example\n  \n    ```js\n    import { expandProperties } from '@ember/object/computed';\n  \n    function echo(arg){ console.log(arg); }\n  \n    expandProperties('foo.bar', echo);              //=> 'foo.bar'\n    expandProperties('{foo,bar}', echo);            //=> 'foo', 'bar'\n    expandProperties('foo.{bar,baz}', echo);        //=> 'foo.bar', 'foo.baz'\n    expandProperties('{foo,bar}.baz', echo);        //=> 'foo.baz', 'bar.baz'\n    expandProperties('foo.{bar,baz}.[]', echo)      //=> 'foo.bar.[]', 'foo.baz.[]'\n    expandProperties('{foo,bar}.{spam,eggs}', echo) //=> 'foo.spam', 'foo.eggs', 'bar.spam', 'bar.eggs'\n    expandProperties('{foo}.bar.{baz}')             //=> 'foo.bar.baz'\n    ```\n  \n    @method expandProperties\n    @static\n    @for @ember/object/computed\n    @public\n    @param {String} pattern The property pattern to expand.\n    @param {Function} callback The callback to invoke.  It is invoked once per\n    expansion, and is passed the expansion.\n  */\n  function expandProperties(pattern, callback) {\n    true && !(typeof pattern === 'string') && emberDebug.assert('A computed property key must be a string, you passed ' + typeof pattern + ' ' + pattern, typeof pattern === 'string');\n    true && !(pattern.indexOf(' ') === -1) && emberDebug.assert('Brace expanded properties cannot contain spaces, e.g. \"user.{firstName, lastName}\" should be \"user.{firstName,lastName}\"', pattern.indexOf(' ') === -1);\n    // regex to look for double open, double close, or unclosed braces\n\n    true && !(pattern.match(/\\{[^}{]*\\{|\\}[^}{]*\\}|\\{[^}]*$/g) === null) && emberDebug.assert('Brace expanded properties have to be balanced and cannot be nested, pattern: ' + pattern, pattern.match(/\\{[^}{]*\\{|\\}[^}{]*\\}|\\{[^}]*$/g) === null);\n\n    var start = pattern.indexOf('{');\n    if (start < 0) {\n      callback(pattern.replace(END_WITH_EACH_REGEX, '.[]'));\n    } else {\n      dive('', pattern, start, callback);\n    }\n  }\n\n  function dive(prefix, pattern, start, callback) {\n    var end = pattern.indexOf('}'),\n        i = 0,\n        newStart = void 0,\n        arrayLength = void 0;\n    var tempArr = pattern.substring(start + 1, end).split(',');\n    var after = pattern.substring(end + 1);\n    prefix = prefix + pattern.substring(0, start);\n\n    arrayLength = tempArr.length;\n    while (i < arrayLength) {\n      newStart = after.indexOf('{');\n      if (newStart < 0) {\n        callback((prefix + tempArr[i++] + after).replace(END_WITH_EACH_REGEX, '.[]'));\n      } else {\n        dive(prefix + tempArr[i++], after, newStart, callback);\n      }\n    }\n  }\n\n  // ..........................................................\n  // DEPENDENT KEYS\n  //\n\n  function addDependentKeys(desc, obj, keyName, meta) {\n    // the descriptor has a list of dependent keys, so\n    // add all of its dependent keys.\n    var depKeys = desc._dependentKeys;\n    if (depKeys === null || depKeys === undefined) {\n      return;\n    }\n\n    for (var idx = 0; idx < depKeys.length; idx++) {\n      var depKey = depKeys[idx];\n      // Increment the number of times depKey depends on keyName.\n      meta.writeDeps(depKey, keyName, (meta.peekDeps(depKey, keyName) || 0) + 1);\n      // Watch the depKey\n      watch(obj, depKey, meta);\n    }\n  }\n\n  function removeDependentKeys(desc, obj, keyName, meta) {\n    // the descriptor has a list of dependent keys, so\n    // remove all of its dependent keys.\n    var depKeys = desc._dependentKeys;\n    if (depKeys === null || depKeys === undefined) {\n      return;\n    }\n\n    for (var idx = 0; idx < depKeys.length; idx++) {\n      var depKey = depKeys[idx];\n      // Decrement the number of times depKey depends on keyName.\n      meta.writeDeps(depKey, keyName, (meta.peekDeps(depKey, keyName) || 0) - 1);\n      // Unwatch the depKey\n      unwatch(obj, depKey, meta);\n    }\n  }\n\n  /**\n  @module @ember/object\n  */\n\n  var DEEP_EACH_REGEX = /\\.@each\\.[^.]+\\./;\n\n  /**\n    A computed property transforms an object literal with object's accessor function(s) into a property.\n  \n    By default the function backing the computed property will only be called\n    once and the result will be cached. You can specify various properties\n    that your computed property depends on. This will force the cached\n    result to be recomputed if the dependencies are modified.\n  \n    In the following example we declare a computed property - `fullName` - by calling\n    `computed` with property dependencies (`firstName` and `lastName`) as leading arguments and getter accessor function. The `fullName` getter function\n    will be called once (regardless of how many times it is accessed) as long\n    as its dependencies have not changed. Once `firstName` or `lastName` are updated\n    any future calls (or anything bound) to `fullName` will incorporate the new\n    values.\n  \n    ```javascript\n    import EmberObject, { computed } from '@ember/object';\n  \n    let Person = EmberObject.extend({\n      // these will be supplied by `create`\n      firstName: null,\n      lastName: null,\n  \n      fullName: computed('firstName', 'lastName', function() {\n        let firstName = this.get('firstName'),\n            lastName  = this.get('lastName');\n  \n        return `${firstName} ${lastName}`;\n      })\n    });\n  \n    let tom = Person.create({\n      firstName: 'Tom',\n      lastName: 'Dale'\n    });\n  \n    tom.get('fullName') // 'Tom Dale'\n    ```\n  \n    You can also define what Ember should do when setting a computed property by providing additional function (`set`) in hash argument.\n    If you try to set a computed property, it will try to invoke setter accessor function with the key and\n    value you want to set it to as arguments.\n  \n    ```javascript\n    import EmberObject, { computed } from '@ember/object';\n  \n    let Person = EmberObject.extend({\n      // these will be supplied by `create`\n      firstName: null,\n      lastName: null,\n  \n      fullName: computed('firstName', 'lastName', {\n        get(key) {\n          let firstName = this.get('firstName'),\n              lastName  = this.get('lastName');\n  \n          return firstName + ' ' + lastName;\n        },\n        set(key, value) {\n          let [firstName, lastName] = value.split(' ');\n  \n          this.set('firstName', firstName);\n          this.set('lastName', lastName);\n  \n          return value;\n        }\n      })\n    });\n  \n    let person = Person.create();\n  \n    person.set('fullName', 'Peter Wagenet');\n    person.get('firstName'); // 'Peter'\n    person.get('lastName');  // 'Wagenet'\n    ```\n  \n    You can overwrite computed property with normal property (no longer computed), that won't change if dependencies change, if you set computed property and it won't have setter accessor function defined.\n  \n    You can also mark computed property as `.readOnly()` and block all attempts to set it.\n  \n    ```javascript\n    import EmberObject, { computed } from '@ember/object';\n  \n    let Person = EmberObject.extend({\n      // these will be supplied by `create`\n      firstName: null,\n      lastName: null,\n  \n      fullName: computed('firstName', 'lastName', {\n        get(key) {\n          let firstName = this.get('firstName');\n          let lastName  = this.get('lastName');\n  \n          return firstName + ' ' + lastName;\n        }\n      }).readOnly()\n    });\n  \n    let person = Person.create();\n    person.set('fullName', 'Peter Wagenet'); // Uncaught Error: Cannot set read-only property \"fullName\" on object: <(...):emberXXX>\n    ```\n  \n    Additional resources:\n    - [New CP syntax RFC](https://github.com/emberjs/rfcs/blob/master/text/0011-improved-cp-syntax.md)\n    - [New computed syntax explained in \"Ember 1.12 released\" ](https://emberjs.com/blog/2015/05/13/ember-1-12-released.html#toc_new-computed-syntax)\n  \n    @class ComputedProperty\n    @public\n  */\n  function ComputedProperty(config, opts) {\n    this.isDescriptor = true;\n    var hasGetterOnly = typeof config === 'function';\n    if (hasGetterOnly) {\n      this._getter = config;\n    } else {\n      true && !(typeof config === 'object' && !Array.isArray(config)) && emberDebug.assert('computed expects a function or an object as last argument.', typeof config === 'object' && !Array.isArray(config));\n      true && !Object.keys(config).every(function (key) {\n        return key === 'get' || key === 'set';\n      }) && emberDebug.assert('Config object passed to computed can only contain `get` or `set` keys.', Object.keys(config).every(function (key) {\n        return key === 'get' || key === 'set';\n      }));\n\n      this._getter = config.get;\n      this._setter = config.set;\n    }\n    true && !(!!this._getter || !!this._setter) && emberDebug.assert('Computed properties must receive a getter or a setter, you passed none.', !!this._getter || !!this._setter);\n\n    this._suspended = undefined;\n    this._meta = undefined;\n    this._volatile = false;\n\n    this._dependentKeys = opts && opts.dependentKeys;\n    this._readOnly = opts && hasGetterOnly && opts.readOnly === true;\n  }\n\n  ComputedProperty.prototype = new Descriptor();\n  ComputedProperty.prototype.constructor = ComputedProperty;\n\n  var ComputedPropertyPrototype = ComputedProperty.prototype;\n\n  /**\n    Call on a computed property to set it into non-cached mode. When in this\n    mode the computed property will not automatically cache the return value.\n  \n    It also does not automatically fire any change events. You must manually notify\n    any changes if you want to observe this property.\n  \n    Dependency keys have no effect on volatile properties as they are for cache\n    invalidation and notification when cached value is invalidated.\n  \n    ```javascript\n    import EmberObject, { computed } from '@ember/object';\n  \n    let outsideService = EmberObject.extend({\n      value: computed(function() {\n        return OutsideService.getValue();\n      }).volatile()\n    }).create();\n    ```\n  \n    @method volatile\n    @return {ComputedProperty} this\n    @chainable\n    @public\n  */\n  ComputedPropertyPrototype.volatile = function () {\n    this._volatile = true;\n    return this;\n  };\n\n  /**\n    Call on a computed property to set it into read-only mode. When in this\n    mode the computed property will throw an error when set.\n  \n    ```javascript\n    import EmberObject, { computed } from '@ember/object';\n  \n    let Person = EmberObject.extend({\n      guid: computed(function() {\n        return 'guid-guid-guid';\n      }).readOnly()\n    });\n  \n    let person = Person.create();\n  \n    person.set('guid', 'new-guid'); // will throw an exception\n    ```\n  \n    @method readOnly\n    @return {ComputedProperty} this\n    @chainable\n    @public\n  */\n  ComputedPropertyPrototype.readOnly = function () {\n    this._readOnly = true;\n    true && !!(this._readOnly && this._setter && this._setter !== this._getter) && emberDebug.assert('Computed properties that define a setter using the new syntax cannot be read-only', !(this._readOnly && this._setter && this._setter !== this._getter));\n\n    return this;\n  };\n\n  /**\n    Sets the dependent keys on this computed property. Pass any number of\n    arguments containing key paths that this computed property depends on.\n  \n    ```javascript\n    import EmberObject, { computed } from '@ember/object';\n  \n    let President = EmberObject.extend({\n      fullName: computed('firstName', 'lastName', function() {\n        return this.get('firstName') + ' ' + this.get('lastName');\n  \n        // Tell Ember that this computed property depends on firstName\n        // and lastName\n      })\n    });\n  \n    let president = President.create({\n      firstName: 'Barack',\n      lastName: 'Obama'\n    });\n  \n    president.get('fullName'); // 'Barack Obama'\n    ```\n  \n    @method property\n    @param {String} path* zero or more property paths\n    @return {ComputedProperty} this\n    @chainable\n    @public\n  */\n  ComputedPropertyPrototype.property = function () {\n    var args = [];\n\n    function addArg(property) {\n      true && emberDebug.warn('Dependent keys containing @each only work one level deep. ' + ('You used the key \"' + property + '\" which is invalid. ') + 'Please create an intermediary computed property.', DEEP_EACH_REGEX.test(property) === false, { id: 'ember-metal.computed-deep-each' });\n\n      args.push(property);\n    }\n\n    for (var i = 0; i < arguments.length; i++) {\n      expandProperties(arguments[i], addArg);\n    }\n\n    this._dependentKeys = args;\n    return this;\n  };\n\n  /**\n    In some cases, you may want to annotate computed properties with additional\n    metadata about how they function or what values they operate on. For example,\n    computed property functions may close over variables that are then no longer\n    available for introspection.\n  \n    You can pass a hash of these values to a computed property like this:\n  \n    ```\n    import { computed } from '@ember/object';\n    import Person from 'my-app/utils/person';\n  \n    person: computed(function() {\n      let personId = this.get('personId');\n      return Person.create({ id: personId });\n    }).meta({ type: Person })\n    ```\n  \n    The hash that you pass to the `meta()` function will be saved on the\n    computed property descriptor under the `_meta` key. Ember runtime\n    exposes a public API for retrieving these values from classes,\n    via the `metaForProperty()` function.\n  \n    @method meta\n    @param {Object} meta\n    @chainable\n    @public\n  */\n  ComputedPropertyPrototype.meta = function (meta$$1) {\n    if (arguments.length === 0) {\n      return this._meta || {};\n    } else {\n      this._meta = meta$$1;\n      return this;\n    }\n  };\n\n  // invalidate cache when CP key changes\n  ComputedPropertyPrototype.didChange = function (obj, keyName) {\n    // _suspended is set via a CP.set to ensure we don't clear\n    // the cached value set by the setter\n    if (this._volatile || this._suspended === obj) {\n      return;\n    }\n\n    // don't create objects just to invalidate\n    var meta$$1 = peekMeta(obj);\n    if (meta$$1 === undefined || meta$$1.source !== obj) {\n      return;\n    }\n\n    var cache = peekCacheFor(obj);\n    if (cache !== undefined && cache.delete(keyName)) {\n      removeDependentKeys(this, obj, keyName, meta$$1);\n    }\n  };\n\n  ComputedPropertyPrototype.get = function (obj, keyName) {\n    if (this._volatile) {\n      return this._getter.call(obj, keyName);\n    }\n\n    var cache = getCacheFor(obj);\n\n    if (cache.has(keyName)) {\n      return cache.get(keyName);\n    }\n\n    var ret = this._getter.call(obj, keyName);\n\n    cache.set(keyName, ret);\n\n    var meta$$1 = meta(obj);\n    var chainWatchers = meta$$1.readableChainWatchers();\n    if (chainWatchers !== undefined) {\n      chainWatchers.revalidate(keyName);\n    }\n    addDependentKeys(this, obj, keyName, meta$$1);\n\n    return ret;\n  };\n\n  ComputedPropertyPrototype.set = function computedPropertySetEntry(obj, keyName, value) {\n    if (this._readOnly) {\n      this._throwReadOnlyError(obj, keyName);\n    }\n\n    if (!this._setter) {\n      return this.clobberSet(obj, keyName, value);\n    }\n\n    if (this._volatile) {\n      return this.volatileSet(obj, keyName, value);\n    }\n\n    return this.setWithSuspend(obj, keyName, value);\n  };\n\n  ComputedPropertyPrototype._throwReadOnlyError = function computedPropertyThrowReadOnlyError(obj, keyName) {\n    throw new emberDebug.Error('Cannot set read-only property \"' + keyName + '\" on object: ' + emberUtils.inspect(obj));\n  };\n\n  ComputedPropertyPrototype.clobberSet = function computedPropertyClobberSet(obj, keyName, value) {\n    var cachedValue = getCachedValueFor(obj, keyName);\n    defineProperty(obj, keyName, null, cachedValue);\n    set(obj, keyName, value);\n    return value;\n  };\n\n  ComputedPropertyPrototype.volatileSet = function computedPropertyVolatileSet(obj, keyName, value) {\n    return this._setter.call(obj, keyName, value);\n  };\n\n  ComputedPropertyPrototype.setWithSuspend = function computedPropertySetWithSuspend(obj, keyName, value) {\n    var oldSuspended = this._suspended;\n    this._suspended = obj;\n    try {\n      return this._set(obj, keyName, value);\n    } finally {\n      this._suspended = oldSuspended;\n    }\n  };\n\n  ComputedPropertyPrototype._set = function computedPropertySet(obj, keyName, value) {\n    var meta$$1 = meta(obj);\n    var cache = getCacheFor(obj);\n    var hadCachedValue = cache.has(keyName);\n    var cachedValue = cache.get(keyName);\n\n    var ret = this._setter.call(obj, keyName, value, cachedValue);\n\n    // allows setter to return the same value that is cached already\n    if (hadCachedValue && cachedValue === ret) {\n      return ret;\n    }\n\n    if (!hadCachedValue) {\n      addDependentKeys(this, obj, keyName, meta$$1);\n    }\n\n    cache.set(keyName, ret);\n\n    notifyPropertyChange(obj, keyName, meta$$1);\n\n    return ret;\n  };\n\n  /* called before property is overridden */\n  ComputedPropertyPrototype.teardown = function (obj, keyName, meta$$1) {\n    if (this._volatile) {\n      return;\n    }\n    var cache = peekCacheFor(obj);\n    if (cache !== undefined && cache.delete(keyName)) {\n      removeDependentKeys(this, obj, keyName, meta$$1);\n    }\n  };\n\n  /**\n    This helper returns a new property descriptor that wraps the passed\n    computed property function. You can use this helper to define properties\n    with mixins or via `defineProperty()`.\n  \n    If you pass a function as an argument, it will be used as a getter. A computed\n    property defined in this way might look like this:\n  \n    ```js\n    import EmberObject, { computed } from '@ember/object';\n  \n    let Person = EmberObject.extend({\n      init() {\n        this._super(...arguments);\n  \n        this.firstName = 'Betty';\n        this.lastName = 'Jones';\n      },\n  \n      fullName: computed('firstName', 'lastName', function() {\n        return `${this.get('firstName')} ${this.get('lastName')}`;\n      })\n    });\n  \n    let client = Person.create();\n  \n    client.get('fullName'); // 'Betty Jones'\n  \n    client.set('lastName', 'Fuller');\n    client.get('fullName'); // 'Betty Fuller'\n    ```\n  \n    You can pass a hash with two functions, `get` and `set`, as an\n    argument to provide both a getter and setter:\n  \n    ```js\n    import EmberObject, { computed } from '@ember/object';\n  \n    let Person = EmberObject.extend({\n      init() {\n        this._super(...arguments);\n  \n        this.firstName = 'Betty';\n        this.lastName = 'Jones';\n      },\n  \n      fullName: computed('firstName', 'lastName', {\n        get(key) {\n          return `${this.get('firstName')} ${this.get('lastName')}`;\n        },\n        set(key, value) {\n          let [firstName, lastName] = value.split(/\\s+/);\n          this.setProperties({ firstName, lastName });\n          return value;\n        }\n      })\n    });\n  \n    let client = Person.create();\n    client.get('firstName'); // 'Betty'\n  \n    client.set('fullName', 'Carroll Fuller');\n    client.get('firstName'); // 'Carroll'\n    ```\n  \n    The `set` function should accept two parameters, `key` and `value`. The value\n    returned from `set` will be the new value of the property.\n  \n    _Note: This is the preferred way to define computed properties when writing third-party\n    libraries that depend on or use Ember, since there is no guarantee that the user\n    will have [prototype Extensions](https://emberjs.com/guides/configuring-ember/disabling-prototype-extensions/) enabled._\n  \n    The alternative syntax, with prototype extensions, might look like:\n  \n    ```js\n    fullName: function() {\n      return this.get('firstName') + ' ' + this.get('lastName');\n    }.property('firstName', 'lastName')\n    ```\n  \n    @method computed\n    @for @ember/object\n    @static\n    @param {String} [dependentKeys*] Optional dependent keys that trigger this computed property.\n    @param {Function} func The computed property function.\n    @return {ComputedProperty} property descriptor instance\n    @public\n  */\n  function computed() {\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    var func = args.pop();\n\n    var cp = new ComputedProperty(func);\n\n    if (args.length > 0) {\n      cp.property.apply(cp, args);\n    }\n\n    return cp;\n  }\n\n  var COMPUTED_PROPERTY_CACHED_VALUES = new WeakMap();\n\n  /**\n    Returns the cached value for a property, if one exists.\n    This can be useful for peeking at the value of a computed\n    property that is generated lazily, without accidentally causing\n    it to be created.\n  \n    @method cacheFor\n    @static\n    @for @ember/object/internals\n    @param {Object} obj the object whose property you want to check\n    @param {String} key the name of the property whose cached value you want\n      to return\n    @return {Object} the cached value\n    @public\n  */\n  function getCacheFor(obj) {\n    var cache = COMPUTED_PROPERTY_CACHED_VALUES.get(obj);\n    if (cache === undefined) {\n      cache = new Map();\n      COMPUTED_PROPERTY_CACHED_VALUES.set(obj, cache);\n    }\n    return cache;\n  }\n\n  function getCachedValueFor(obj, key) {\n    var cache = COMPUTED_PROPERTY_CACHED_VALUES.get(obj);\n    if (cache !== undefined) {\n      return cache.get(key);\n    }\n  }\n\n  function peekCacheFor(obj) {\n    return COMPUTED_PROPERTY_CACHED_VALUES.get(obj);\n  }\n\n  var CONSUMED = {};\n\n  function alias(altKey) {\n    return new AliasedProperty(altKey);\n  }\n\n  var AliasedProperty = function (_Descriptor) {\n    emberBabel.inherits(AliasedProperty, _Descriptor);\n\n    function AliasedProperty(altKey) {\n      emberBabel.classCallCheck(this, AliasedProperty);\n\n      var _this = emberBabel.possibleConstructorReturn(this, _Descriptor.call(this));\n\n      _this.isDescriptor = true;\n      _this.altKey = altKey;\n      _this._dependentKeys = [altKey];\n      return _this;\n    }\n\n    AliasedProperty.prototype.setup = function setup(obj, keyName) {\n      true && !(this.altKey !== keyName) && emberDebug.assert('Setting alias \\'' + keyName + '\\' on self', this.altKey !== keyName);\n\n      var meta$$1 = meta(obj);\n      if (meta$$1.peekWatching(keyName)) {\n        addDependentKeys(this, obj, keyName, meta$$1);\n      }\n    };\n\n    AliasedProperty.prototype.teardown = function teardown(obj, keyName, meta$$1) {\n      if (meta$$1.peekWatching(keyName)) {\n        removeDependentKeys(this, obj, keyName, meta$$1);\n      }\n    };\n\n    AliasedProperty.prototype.willWatch = function willWatch(obj, keyName, meta$$1) {\n      addDependentKeys(this, obj, keyName, meta$$1);\n    };\n\n    AliasedProperty.prototype.didUnwatch = function didUnwatch(obj, keyName, meta$$1) {\n      removeDependentKeys(this, obj, keyName, meta$$1);\n    };\n\n    AliasedProperty.prototype.get = function get$$1(obj, keyName) {\n      var ret = get(obj, this.altKey);\n      var meta$$1 = meta(obj);\n      var cache = getCacheFor(obj);\n      if (cache.get(keyName) !== CONSUMED) {\n        cache.set(keyName, CONSUMED);\n        addDependentKeys(this, obj, keyName, meta$$1);\n      }\n      return ret;\n    };\n\n    AliasedProperty.prototype.set = function set$$1(obj, keyName, value) {\n      return set(obj, this.altKey, value);\n    };\n\n    AliasedProperty.prototype.readOnly = function readOnly() {\n      this.set = AliasedProperty_readOnlySet;\n      return this;\n    };\n\n    AliasedProperty.prototype.oneWay = function oneWay() {\n      this.set = AliasedProperty_oneWaySet;\n      return this;\n    };\n\n    return AliasedProperty;\n  }(Descriptor);\n\n  function AliasedProperty_readOnlySet(obj, keyName, value) {\n    // eslint-disable-line no-unused-vars\n    throw new emberDebug.Error('Cannot set read-only property \\'' + keyName + '\\' on object: ' + emberUtils.inspect(obj));\n  }\n\n  function AliasedProperty_oneWaySet(obj, keyName, value) {\n    defineProperty(obj, keyName, null);\n    return set(obj, keyName, value);\n  }\n\n  // Backwards compatibility with Ember Data.\n  AliasedProperty.prototype._meta = undefined;\n  AliasedProperty.prototype.meta = ComputedProperty.prototype.meta;\n\n  /**\n   @module @ember/polyfills\n  */\n  /**\n    Merge the contents of two objects together into the first object.\n  \n    ```javascript\n    import { merge } from '@ember/polyfills';\n  \n    merge({ first: 'Tom' }, { last: 'Dale' }); // { first: 'Tom', last: 'Dale' }\n    var a = { first: 'Yehuda' };\n    var b = { last: 'Katz' };\n    merge(a, b); // a == { first: 'Yehuda', last: 'Katz' }, b == { last: 'Katz' }\n    ```\n  \n    @method merge\n    @static\n    @for @ember/polyfills\n    @param {Object} original The object to merge into\n    @param {Object} updates The object to copy properties from\n    @return {Object}\n    @public\n  */\n  function merge(original, updates) {\n    if (updates === null || typeof updates !== 'object') {\n      return original;\n    }\n\n    var props = Object.keys(updates);\n    var prop = void 0;\n\n    for (var i = 0; i < props.length; i++) {\n      prop = props[i];\n      original[prop] = updates[prop];\n    }\n\n    return original;\n  }\n\n  /**\n  @module ember\n  */\n\n  /**\n    Used internally to allow changing properties in a backwards compatible way, and print a helpful\n    deprecation warning.\n  \n    @method deprecateProperty\n    @param {Object} object The object to add the deprecated property to.\n    @param {String} deprecatedKey The property to add (and print deprecation warnings upon accessing).\n    @param {String} newKey The property that will be aliased.\n    @private\n    @since 1.7.0\n  */\n\n  function deprecateProperty(object, deprecatedKey, newKey, options) {\n    function _deprecate() {\n      true && !false && emberDebug.deprecate('Usage of `' + deprecatedKey + '` is deprecated, use `' + newKey + '` instead.', false, options);\n    }\n\n    Object.defineProperty(object, deprecatedKey, {\n      configurable: true,\n      enumerable: false,\n      set: function (value) {\n        _deprecate();\n        set(this, newKey, value);\n      },\n      get: function () {\n        _deprecate();\n        return get(this, newKey);\n      }\n    });\n  }\n\n  /* eslint no-console:off */\n  /* global console */\n\n  /**\n  @module @ember/instrumentation\n  @private\n  */\n\n  /**\n    The purpose of the Ember Instrumentation module is\n    to provide efficient, general-purpose instrumentation\n    for Ember.\n  \n    Subscribe to a listener by using `subscribe`:\n  \n    ```javascript\n    import { subscribe } from '@ember/instrumentation';\n  \n    subscribe(\"render\", {\n      before(name, timestamp, payload) {\n  \n      },\n  \n      after(name, timestamp, payload) {\n  \n      }\n    });\n    ```\n  \n    If you return a value from the `before` callback, that same\n    value will be passed as a fourth parameter to the `after`\n    callback.\n  \n    Instrument a block of code by using `instrument`:\n  \n    ```javascript\n    import { instrument } from '@ember/instrumentation';\n  \n    instrument(\"render.handlebars\", payload, function() {\n      // rendering logic\n    }, binding);\n    ```\n  \n    Event names passed to `instrument` are namespaced\n    by periods, from more general to more specific. Subscribers\n    can listen for events by whatever level of granularity they\n    are interested in.\n  \n    In the above example, the event is `render.handlebars`,\n    and the subscriber listened for all events beginning with\n    `render`. It would receive callbacks for events named\n    `render`, `render.handlebars`, `render.container`, or\n    even `render.handlebars.layout`.\n  \n    @class Instrumentation\n    @static\n    @private\n  */\n  var subscribers = [];\n  var cache = {};\n\n  function populateListeners(name) {\n    var listeners = [];\n    var subscriber = void 0;\n\n    for (var i = 0; i < subscribers.length; i++) {\n      subscriber = subscribers[i];\n      if (subscriber.regex.test(name)) {\n        listeners.push(subscriber.object);\n      }\n    }\n\n    cache[name] = listeners;\n    return listeners;\n  }\n\n  var time = function () {\n    var perf = 'undefined' !== typeof window ? window.performance || {} : {};\n    var fn = perf.now || perf.mozNow || perf.webkitNow || perf.msNow || perf.oNow;\n    // fn.bind will be available in all the browsers that support the advanced window.performance... ;-)\n    return fn ? fn.bind(perf) : function () {\n      return +new Date();\n    };\n  }();\n\n  /**\n    Notifies event's subscribers, calls `before` and `after` hooks.\n  \n    @method instrument\n    @for @ember/instrumentation\n    @static\n    @param {String} [name] Namespaced event name.\n    @param {Object} _payload\n    @param {Function} callback Function that you're instrumenting.\n    @param {Object} binding Context that instrument function is called with.\n    @private\n  */\n  function instrument(name, _payload, callback, binding) {\n    if (arguments.length <= 3 && typeof _payload === 'function') {\n      binding = callback;\n      callback = _payload;\n      _payload = undefined;\n    }\n    if (subscribers.length === 0) {\n      return callback.call(binding);\n    }\n    var payload = _payload || {};\n    var finalizer = _instrumentStart(name, function () {\n      return payload;\n    });\n\n    if (finalizer) {\n      return withFinalizer(callback, finalizer, payload, binding);\n    } else {\n      return callback.call(binding);\n    }\n  }\n\n  exports.flaggedInstrument = void 0;\n  if (features.EMBER_IMPROVED_INSTRUMENTATION) {\n    exports.flaggedInstrument = instrument;\n  } else {\n    exports.flaggedInstrument = function (name, payload, callback) {\n      return callback();\n    };\n  }\n  function withFinalizer(callback, finalizer, payload, binding) {\n    var result = void 0;\n    try {\n      result = callback.call(binding);\n    } catch (e) {\n      payload.exception = e;\n      result = payload;\n    } finally {\n      finalizer();\n    }\n    return result;\n  }\n\n  function NOOP() {}\n\n  // private for now\n  function _instrumentStart(name, _payload, _payloadParam) {\n    if (subscribers.length === 0) {\n      return NOOP;\n    }\n\n    var listeners = cache[name];\n\n    if (!listeners) {\n      listeners = populateListeners(name);\n    }\n\n    if (listeners.length === 0) {\n      return NOOP;\n    }\n\n    var payload = _payload(_payloadParam);\n\n    var STRUCTURED_PROFILE = emberEnvironment.ENV.STRUCTURED_PROFILE;\n    var timeName = void 0;\n    if (STRUCTURED_PROFILE) {\n      timeName = name + ': ' + payload.object;\n      console.time(timeName);\n    }\n\n    var beforeValues = new Array(listeners.length);\n    var i = void 0,\n        listener = void 0;\n    var timestamp = time();\n    for (i = 0; i < listeners.length; i++) {\n      listener = listeners[i];\n      beforeValues[i] = listener.before(name, timestamp, payload);\n    }\n\n    return function _instrumentEnd() {\n      var i = void 0,\n          listener = void 0;\n      var timestamp = time();\n      for (i = 0; i < listeners.length; i++) {\n        listener = listeners[i];\n        if (typeof listener.after === 'function') {\n          listener.after(name, timestamp, payload, beforeValues[i]);\n        }\n      }\n\n      if (STRUCTURED_PROFILE) {\n        console.timeEnd(timeName);\n      }\n    };\n  }\n\n  /**\n    Subscribes to a particular event or instrumented block of code.\n  \n    @method subscribe\n    @for @ember/instrumentation\n    @static\n  \n    @param {String} [pattern] Namespaced event name.\n    @param {Object} [object] Before and After hooks.\n  \n    @return {Subscriber}\n    @private\n  */\n  function subscribe(pattern, object) {\n    var paths = pattern.split('.');\n    var path = void 0;\n    var regex = [];\n\n    for (var i = 0; i < paths.length; i++) {\n      path = paths[i];\n      if (path === '*') {\n        regex.push('[^\\\\.]*');\n      } else {\n        regex.push(path);\n      }\n    }\n\n    regex = regex.join('\\\\.');\n    regex = regex + '(\\\\..*)?';\n\n    var subscriber = {\n      pattern: pattern,\n      regex: new RegExp('^' + regex + '$'),\n      object: object\n    };\n\n    subscribers.push(subscriber);\n    cache = {};\n\n    return subscriber;\n  }\n\n  /**\n    Unsubscribes from a particular event or instrumented block of code.\n  \n    @method unsubscribe\n    @for @ember/instrumentation\n    @static\n  \n    @param {Object} [subscriber]\n    @private\n  */\n  function unsubscribe(subscriber) {\n    var index = void 0;\n\n    for (var i = 0; i < subscribers.length; i++) {\n      if (subscribers[i] === subscriber) {\n        index = i;\n      }\n    }\n\n    subscribers.splice(index, 1);\n    cache = {};\n  }\n\n  /**\n    Resets `Instrumentation` by flushing list of subscribers.\n  \n    @method reset\n    @for @ember/instrumentation\n    @static\n    @private\n  */\n  function reset() {\n    subscribers.length = 0;\n    cache = {};\n  }\n\n  /**\n   @module @ember/utils\n  */\n  /**\n    Returns true if the passed value is null or undefined. This avoids errors\n    from JSLint complaining about use of ==, which can be technically\n    confusing.\n  \n    ```javascript\n    isNone();              // true\n    isNone(null);          // true\n    isNone(undefined);     // true\n    isNone('');            // false\n    isNone([]);            // false\n    isNone(function() {}); // false\n    ```\n  \n    @method isNone\n    @static\n    @for @ember/utils\n    @param {Object} obj Value to test\n    @return {Boolean}\n    @public\n  */\n  function isNone(obj) {\n    return obj === null || obj === undefined;\n  }\n\n  /**\n   @module @ember/utils\n  */\n  /**\n    Verifies that a value is `null` or `undefined`, an empty string, or an empty\n    array.\n  \n    Constrains the rules on `isNone` by returning true for empty strings and\n    empty arrays.\n  \n    If the value is an object with a `size` property of type number, it is used\n    to check emptiness.\n  \n    ```javascript\n    isEmpty();                 // true\n    isEmpty(null);             // true\n    isEmpty(undefined);        // true\n    isEmpty('');               // true\n    isEmpty([]);               // true\n    isEmpty({ size: 0});       // true\n    isEmpty({});               // false\n    isEmpty('Adam Hawkins');   // false\n    isEmpty([0,1,2]);          // false\n    isEmpty('\\n\\t');           // false\n    isEmpty('  ');             // false\n    isEmpty({ size: 1 })       // false\n    isEmpty({ size: () => 0 }) // false\n    ```\n  \n    @method isEmpty\n    @static\n    @for @ember/utils\n    @param {Object} obj Value to test\n    @return {Boolean}\n    @public\n  */\n  function isEmpty(obj) {\n    var none = isNone(obj);\n    if (none) {\n      return none;\n    }\n\n    if (typeof obj.size === 'number') {\n      return !obj.size;\n    }\n\n    var objectType = typeof obj;\n\n    if (objectType === 'object') {\n      var size = get(obj, 'size');\n      if (typeof size === 'number') {\n        return !size;\n      }\n    }\n\n    if (typeof obj.length === 'number' && objectType !== 'function') {\n      return !obj.length;\n    }\n\n    if (objectType === 'object') {\n      var length = get(obj, 'length');\n      if (typeof length === 'number') {\n        return !length;\n      }\n    }\n\n    return false;\n  }\n\n  /**\n   @module @ember/utils\n  */\n  /**\n    A value is blank if it is empty or a whitespace string.\n  \n    ```javascript\n    import { isBlank } from '@ember/utils';\n  \n    isBlank();                // true\n    isBlank(null);            // true\n    isBlank(undefined);       // true\n    isBlank('');              // true\n    isBlank([]);              // true\n    isBlank('\\n\\t');          // true\n    isBlank('  ');            // true\n    isBlank({});              // false\n    isBlank('\\n\\t Hello');    // false\n    isBlank('Hello world');   // false\n    isBlank([1,2,3]);         // false\n    ```\n  \n    @method isBlank\n    @static\n    @for @ember/utils\n    @param {Object} obj Value to test\n    @return {Boolean}\n    @since 1.5.0\n    @public\n  */\n  function isBlank(obj) {\n    return isEmpty(obj) || typeof obj === 'string' && /\\S/.test(obj) === false;\n  }\n\n  /**\n   @module @ember/utils\n  */\n  /**\n    A value is present if it not `isBlank`.\n  \n    ```javascript\n    isPresent();                // false\n    isPresent(null);            // false\n    isPresent(undefined);       // false\n    isPresent('');              // false\n    isPresent('  ');            // false\n    isPresent('\\n\\t');          // false\n    isPresent([]);              // false\n    isPresent({ length: 0 })    // false\n    isPresent(false);           // true\n    isPresent(true);            // true\n    isPresent('string');        // true\n    isPresent(0);               // true\n    isPresent(function() {})    // true\n    isPresent({});              // true\n    isPresent(false);           // true\n    isPresent('\\n\\t Hello');    // true\n    isPresent([1,2,3]);         // true\n    ```\n  \n    @method isPresent\n    @static\n    @for @ember/utils\n    @param {Object} obj Value to test\n    @return {Boolean}\n    @since 1.8.0\n    @public\n  */\n  function isPresent(obj) {\n    return !isBlank(obj);\n  }\n\n  /**\n   @module ember\n  */\n  /**\n    Helper class that allows you to register your library with Ember.\n  \n    Singleton created at `Ember.libraries`.\n  \n    @class Libraries\n    @constructor\n    @private\n  */\n  var Libraries = function () {\n    function Libraries() {\n      emberBabel.classCallCheck(this, Libraries);\n\n      this._registry = [];\n      this._coreLibIndex = 0;\n    }\n\n    Libraries.prototype._getLibraryByName = function _getLibraryByName(name) {\n      var libs = this._registry;\n      var count = libs.length;\n\n      for (var i = 0; i < count; i++) {\n        if (libs[i].name === name) {\n          return libs[i];\n        }\n      }\n    };\n\n    Libraries.prototype.register = function register(name, version, isCoreLibrary) {\n      var index = this._registry.length;\n\n      if (!this._getLibraryByName(name)) {\n        if (isCoreLibrary) {\n          index = this._coreLibIndex++;\n        }\n        this._registry.splice(index, 0, { name: name, version: version });\n      } else {\n        true && emberDebug.warn('Library \"' + name + '\" is already registered with Ember.', false, { id: 'ember-metal.libraries-register' });\n      }\n    };\n\n    Libraries.prototype.registerCoreLibrary = function registerCoreLibrary(name, version) {\n      this.register(name, version, true);\n    };\n\n    Libraries.prototype.deRegister = function deRegister(name) {\n      var lib = this._getLibraryByName(name);\n      var index = void 0;\n\n      if (lib) {\n        index = this._registry.indexOf(lib);\n        this._registry.splice(index, 1);\n      }\n    };\n\n    return Libraries;\n  }();\n\n  if (features.EMBER_LIBRARIES_ISREGISTERED) {\n    Libraries.prototype.isRegistered = function (name) {\n      return !!this._getLibraryByName(name);\n    };\n  }\n\n  {\n    Libraries.prototype.logVersions = function () {\n      var libs = this._registry;\n      var nameLengths = libs.map(function (item) {\n        return get(item, 'name.length');\n      });\n      var maxNameLength = Math.max.apply(null, nameLengths);\n\n      emberDebug.debug('-------------------------------');\n      for (var i = 0; i < libs.length; i++) {\n        var lib = libs[i];\n        var spaces = new Array(maxNameLength - lib.name.length + 1).join(' ');\n        emberDebug.debug([lib.name, spaces, ' : ', lib.version].join(''));\n      }\n      emberDebug.debug('-------------------------------');\n    };\n  }\n\n  var libraries = new Libraries();\n\n  /**\n  @module @ember/map\n  @private\n  */\n\n  /*\n    JavaScript (before ES6) does not have a Map implementation. Objects,\n    which are often used as dictionaries, may only have Strings as keys.\n  \n    Because Ember has a way to get a unique identifier for every object\n    via `guidFor`, we can implement a performant Map with arbitrary\n    keys. Because it is commonly used in low-level bookkeeping, Map is\n    implemented as a pure JavaScript object for performance.\n  \n    This implementation follows the current iteration of the ES6 proposal for\n    maps (http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets),\n    with one exception:  as we do not have the luxury of in-VM iteration, we implement a\n    forEach method for iteration.\n  \n    Map is mocked out to look like an Ember object, so you can do\n    `EmberMap.create()` for symmetry with other Ember classes.\n  */\n\n  function copyNull(obj) {\n    var output = Object.create(null);\n\n    for (var prop in obj) {\n      // hasOwnPropery is not needed because obj is Object.create(null);\n      output[prop] = obj[prop];\n    }\n\n    return output;\n  }\n\n  function copyMap(original, newObject) {\n    var keys = original._keys.copy();\n    var values = copyNull(original._values);\n\n    newObject._keys = keys;\n    newObject._values = values;\n    newObject.size = original.size;\n\n    return newObject;\n  }\n\n  /**\n    This class is used internally by Ember and Ember Data.\n    Please do not use it at this time. We plan to clean it up\n    and add many tests soon.\n  \n    @class OrderedSet\n    @namespace Ember\n    @constructor\n    @private\n  */\n\n  var OrderedSet = function () {\n    function OrderedSet() {\n      emberBabel.classCallCheck(this, OrderedSet);\n\n      this.clear();\n    }\n\n    /**\n      @method create\n      @static\n      @return {Ember.OrderedSet}\n      @private\n    */\n\n    OrderedSet.create = function create() {\n      var Constructor = this;\n      return new Constructor();\n    };\n\n    /**\n      @method clear\n      @private\n    */\n\n    OrderedSet.prototype.clear = function clear() {\n      this.presenceSet = Object.create(null);\n      this.list = [];\n      this.size = 0;\n    };\n\n    /**\n      @method add\n      @param obj\n      @param guid (optional, and for internal use)\n      @return {Ember.OrderedSet}\n      @private\n    */\n\n    OrderedSet.prototype.add = function add(obj, _guid) {\n      var guid = _guid || emberUtils.guidFor(obj);\n      var presenceSet = this.presenceSet;\n      var list = this.list;\n\n      if (presenceSet[guid] !== true) {\n        presenceSet[guid] = true;\n        this.size = list.push(obj);\n      }\n\n      return this;\n    };\n\n    /**\n      @since 1.8.0\n      @method delete\n      @param obj\n      @param _guid (optional and for internal use only)\n      @return {Boolean}\n      @private\n    */\n\n    OrderedSet.prototype.delete = function _delete(obj, _guid) {\n      var guid = _guid || emberUtils.guidFor(obj);\n      var presenceSet = this.presenceSet;\n      var list = this.list;\n\n      if (presenceSet[guid] === true) {\n        delete presenceSet[guid];\n        var index = list.indexOf(obj);\n        if (index > -1) {\n          list.splice(index, 1);\n        }\n        this.size = list.length;\n        return true;\n      } else {\n        return false;\n      }\n    };\n\n    /**\n      @method isEmpty\n      @return {Boolean}\n      @private\n    */\n\n    OrderedSet.prototype.isEmpty = function isEmpty() {\n      return this.size === 0;\n    };\n\n    /**\n      @method has\n      @param obj\n      @return {Boolean}\n      @private\n    */\n\n    OrderedSet.prototype.has = function has(obj) {\n      if (this.size === 0) {\n        return false;\n      }\n\n      var guid = emberUtils.guidFor(obj);\n      var presenceSet = this.presenceSet;\n\n      return presenceSet[guid] === true;\n    };\n\n    /**\n      @method forEach\n      @param {Function} fn\n      @param self\n      @private\n    */\n\n    OrderedSet.prototype.forEach = function forEach(fn /*, ...thisArg*/) {\n      true && !(typeof fn === 'function') && emberDebug.assert(Object.prototype.toString.call(fn) + ' is not a function', typeof fn === 'function');\n\n      if (this.size === 0) {\n        return;\n      }\n\n      var list = this.list;\n\n      if (arguments.length === 2) {\n        for (var i = 0; i < list.length; i++) {\n          fn.call(arguments[1], list[i]);\n        }\n      } else {\n        for (var _i = 0; _i < list.length; _i++) {\n          fn(list[_i]);\n        }\n      }\n    };\n\n    /**\n      @method toArray\n      @return {Array}\n      @private\n    */\n\n    OrderedSet.prototype.toArray = function toArray() {\n      return this.list.slice();\n    };\n\n    /**\n      @method copy\n      @return {Ember.OrderedSet}\n      @private\n    */\n\n    OrderedSet.prototype.copy = function copy() {\n      var Constructor = this.constructor;\n      var set = new Constructor();\n\n      set.presenceSet = copyNull(this.presenceSet);\n      set.list = this.toArray();\n      set.size = this.size;\n\n      return set;\n    };\n\n    return OrderedSet;\n  }();\n\n  /**\n    A Map stores values indexed by keys. Unlike JavaScript's\n    default Objects, the keys of a Map can be any JavaScript\n    object.\n  \n    Internally, a Map has two data structures:\n  \n    1. `keys`: an OrderedSet of all of the existing keys\n    2. `values`: a JavaScript Object indexed by the `guidFor(key)`\n  \n    When a key/value pair is added for the first time, we\n    add the key to the `keys` OrderedSet, and create or\n    replace an entry in `values`. When an entry is deleted,\n    we delete its entry in `keys` and `values`.\n  \n    @class Map\n    @private\n    @constructor\n  */\n\n  var Map$1 = function () {\n    function Map() {\n      emberBabel.classCallCheck(this, Map);\n\n      this._keys = new OrderedSet();\n      this._values = Object.create(null);\n      this.size = 0;\n    }\n\n    /**\n      @method create\n      @static\n      @private\n    */\n\n    Map.create = function create() {\n      var Constructor = this;\n      return new Constructor();\n    };\n\n    /**\n      Retrieve the value associated with a given key.\n       @method get\n      @param {*} key\n      @return {*} the value associated with the key, or `undefined`\n      @private\n    */\n\n    Map.prototype.get = function get(key) {\n      if (this.size === 0) {\n        return;\n      }\n\n      var values = this._values;\n      var guid = emberUtils.guidFor(key);\n\n      return values[guid];\n    };\n\n    /**\n      Adds a value to the map. If a value for the given key has already been\n      provided, the new value will replace the old value.\n       @method set\n      @param {*} key\n      @param {*} value\n      @return {Map}\n      @private\n    */\n\n    Map.prototype.set = function set(key, value) {\n      var keys = this._keys;\n      var values = this._values;\n      var guid = emberUtils.guidFor(key);\n\n      // ensure we don't store -0\n      var k = key === -0 ? 0 : key;\n\n      keys.add(k, guid);\n\n      values[guid] = value;\n\n      this.size = keys.size;\n\n      return this;\n    };\n\n    /**\n      Removes a value from the map for an associated key.\n       @since 1.8.0\n      @method delete\n      @param {*} key\n      @return {Boolean} true if an item was removed, false otherwise\n      @private\n    */\n\n    Map.prototype.delete = function _delete(key) {\n      if (this.size === 0) {\n        return false;\n      }\n      // don't use ES6 \"delete\" because it will be annoying\n      // to use in browsers that are not ES6 friendly;\n      var keys = this._keys;\n      var values = this._values;\n      var guid = emberUtils.guidFor(key);\n\n      if (keys.delete(key, guid)) {\n        delete values[guid];\n        this.size = keys.size;\n        return true;\n      } else {\n        return false;\n      }\n    };\n\n    /**\n      Check whether a key is present.\n       @method has\n      @param {*} key\n      @return {Boolean} true if the item was present, false otherwise\n      @private\n    */\n\n    Map.prototype.has = function has(key) {\n      return this._keys.has(key);\n    };\n\n    /**\n      Iterate over all the keys and values. Calls the function once\n      for each key, passing in value, key, and the map being iterated over,\n      in that order.\n       The keys are guaranteed to be iterated over in insertion order.\n       @method forEach\n      @param {Function} callback\n      @param {*} self if passed, the `this` value inside the\n        callback. By default, `this` is the map.\n      @private\n    */\n\n    Map.prototype.forEach = function forEach(callback /*, ...thisArg*/) {\n      true && !(typeof callback === 'function') && emberDebug.assert(Object.prototype.toString.call(callback) + ' is not a function', typeof callback === 'function');\n\n      if (this.size === 0) {\n        return;\n      }\n\n      var map = this;\n      var cb = void 0,\n          thisArg = void 0;\n\n      if (arguments.length === 2) {\n        thisArg = arguments[1];\n        cb = function (key) {\n          return callback.call(thisArg, map.get(key), key, map);\n        };\n      } else {\n        cb = function (key) {\n          return callback(map.get(key), key, map);\n        };\n      }\n\n      this._keys.forEach(cb);\n    };\n\n    /**\n      @method clear\n      @private\n    */\n\n    Map.prototype.clear = function clear() {\n      this._keys.clear();\n      this._values = Object.create(null);\n      this.size = 0;\n    };\n\n    /**\n      @method copy\n      @return {Map}\n      @private\n    */\n\n    Map.prototype.copy = function copy() {\n      return copyMap(this, new Map());\n    };\n\n    return Map;\n  }();\n\n  /**\n    @class MapWithDefault\n    @extends Map\n    @private\n    @constructor\n    @param [options]\n      @param {*} [options.defaultValue]\n  */\n\n  var MapWithDefault = function (_Map) {\n    emberBabel.inherits(MapWithDefault, _Map);\n\n    function MapWithDefault(options) {\n      emberBabel.classCallCheck(this, MapWithDefault);\n\n      var _this = emberBabel.possibleConstructorReturn(this, _Map.call(this));\n\n      _this.defaultValue = options.defaultValue;\n      return _this;\n    }\n\n    /**\n      @method create\n      @static\n      @param [options]\n        @param {*} [options.defaultValue]\n      @return {MapWithDefault|Map} If options are passed, returns\n        `MapWithDefault` otherwise returns `EmberMap`\n      @private\n    */\n\n    MapWithDefault.create = function create(options) {\n      if (options) {\n        return new MapWithDefault(options);\n      } else {\n        return new Map$1();\n      }\n    };\n\n    /**\n      Retrieve the value associated with a given key.\n       @method get\n      @param {*} key\n      @return {*} the value associated with the key, or the default value\n      @private\n    */\n\n    MapWithDefault.prototype.get = function get(key) {\n      var hasValue = this.has(key);\n\n      if (hasValue) {\n        return _Map.prototype.get.call(this, key);\n      } else {\n        var defaultValue = this.defaultValue(key);\n        this.set(key, defaultValue);\n        return defaultValue;\n      }\n    };\n\n    /**\n      @method copy\n      @return {MapWithDefault}\n      @private\n    */\n\n    MapWithDefault.prototype.copy = function copy() {\n      var Constructor = this.constructor;\n      return copyMap(this, new Constructor({\n        defaultValue: this.defaultValue\n      }));\n    };\n\n    return MapWithDefault;\n  }(Map$1);\n\n  /**\n   @module @ember/object\n  */\n\n  /**\n    To get multiple properties at once, call `getProperties`\n    with an object followed by a list of strings or an array:\n  \n    ```javascript\n    import { getProperties } from '@ember/object';\n  \n    getProperties(record, 'firstName', 'lastName', 'zipCode');\n    // { firstName: 'John', lastName: 'Doe', zipCode: '10011' }\n    ```\n  \n    is equivalent to:\n  \n    ```javascript\n    import { getProperties } from '@ember/object';\n  \n    getProperties(record, ['firstName', 'lastName', 'zipCode']);\n    // { firstName: 'John', lastName: 'Doe', zipCode: '10011' }\n    ```\n  \n    @method getProperties\n    @static\n    @for @ember/object\n    @param {Object} obj\n    @param {String...|Array} list of keys to get\n    @return {Object}\n    @public\n  */\n  function getProperties(obj) {\n    var ret = {};\n    var propertyNames = arguments;\n    var i = 1;\n\n    if (arguments.length === 2 && Array.isArray(arguments[1])) {\n      i = 0;\n      propertyNames = arguments[1];\n    }\n    for (; i < propertyNames.length; i++) {\n      ret[propertyNames[i]] = get(obj, propertyNames[i]);\n    }\n    return ret;\n  }\n\n  /**\n   @module @ember/object\n  */\n  /**\n    Set a list of properties on an object. These properties are set inside\n    a single `beginPropertyChanges` and `endPropertyChanges` batch, so\n    observers will be buffered.\n  \n    ```javascript\n    import EmberObject from '@ember/object';\n    let anObject = EmberObject.create();\n  \n    anObject.setProperties({\n      firstName: 'Stanley',\n      lastName: 'Stuart',\n      age: 21\n    });\n    ```\n  \n    @method setProperties\n    @static\n    @for @ember/object\n    @param obj\n    @param {Object} properties\n    @return properties\n    @public\n  */\n  function setProperties(obj, properties) {\n    if (properties === null || typeof properties !== 'object') {\n      return properties;\n    }\n    changeProperties(function () {\n      var props = Object.keys(properties);\n      var propertyName = void 0;\n\n      for (var i = 0; i < props.length; i++) {\n        propertyName = props[i];\n\n        set(obj, propertyName, properties[propertyName]);\n      }\n    });\n    return properties;\n  }\n\n  /**\n  @module @ember/object\n  */\n  var a_concat = Array.prototype.concat;\n  var isArray = Array.isArray;\n\n  function isMethod(obj) {\n    return 'function' === typeof obj && obj.isMethod !== false && obj !== Boolean && obj !== Object && obj !== Number && obj !== Array && obj !== Date && obj !== String;\n  }\n\n  var CONTINUE = {};\n\n  function mixinProperties(mixinsMeta, mixin) {\n    var guid = void 0;\n\n    if (mixin instanceof Mixin) {\n      guid = emberUtils.guidFor(mixin);\n      if (mixinsMeta.peekMixins(guid)) {\n        return CONTINUE;\n      }\n      mixinsMeta.writeMixins(guid, mixin);\n      return mixin.properties;\n    } else {\n      return mixin; // apply anonymous mixin properties\n    }\n  }\n\n  function concatenatedMixinProperties(concatProp, props, values, base) {\n    // reset before adding each new mixin to pickup concats from previous\n    var concats = values[concatProp] || base[concatProp];\n    if (props[concatProp]) {\n      concats = concats ? a_concat.call(concats, props[concatProp]) : props[concatProp];\n    }\n    return concats;\n  }\n\n  function giveDescriptorSuper(meta$$1, key, property, values, descs, base) {\n    var superProperty = void 0;\n\n    // Computed properties override methods, and do not call super to them\n    if (values[key] === undefined) {\n      // Find the original descriptor in a parent mixin\n      superProperty = descs[key];\n    }\n\n    // If we didn't find the original descriptor in a parent mixin, find\n    // it on the original object.\n    if (!superProperty) {\n      superProperty = descriptorFor(base, key, meta$$1);\n    }\n\n    if (superProperty === undefined || !(superProperty instanceof ComputedProperty)) {\n      return property;\n    }\n\n    // Since multiple mixins may inherit from the same parent, we need\n    // to clone the computed property so that other mixins do not receive\n    // the wrapped version.\n    property = Object.create(property);\n    property._getter = emberUtils.wrap(property._getter, superProperty._getter);\n    if (superProperty._setter) {\n      if (property._setter) {\n        property._setter = emberUtils.wrap(property._setter, superProperty._setter);\n      } else {\n        property._setter = superProperty._setter;\n      }\n    }\n\n    return property;\n  }\n\n  function giveMethodSuper(obj, key, method, values, descs) {\n    // Methods overwrite computed properties, and do not call super to them.\n    if (descs[key] !== undefined) {\n      return method;\n    }\n\n    // Find the original method in a parent mixin\n    var superMethod = values[key];\n\n    // If we didn't find the original value in a parent mixin, find it in\n    // the original object\n    if (superMethod === undefined && (!features.EMBER_METAL_ES5_GETTERS || descriptorFor(obj, key) === undefined)) {\n      superMethod = obj[key];\n    }\n\n    // Only wrap the new method if the original method was a function\n    if (typeof superMethod === 'function') {\n      return emberUtils.wrap(method, superMethod);\n    }\n\n    return method;\n  }\n\n  function applyConcatenatedProperties(obj, key, value, values) {\n    var baseValue = values[key] || obj[key];\n    var ret = void 0;\n\n    if (baseValue === null || baseValue === undefined) {\n      ret = emberUtils.makeArray(value);\n    } else if (isArray(baseValue)) {\n      if (value === null || value === undefined) {\n        ret = baseValue;\n      } else {\n        ret = a_concat.call(baseValue, value);\n      }\n    } else {\n      ret = a_concat.call(emberUtils.makeArray(baseValue), value);\n    }\n\n    {\n      // it is possible to use concatenatedProperties with strings (which cannot be frozen)\n      // only freeze objects...\n      if (typeof ret === 'object' && ret !== null) {\n        // prevent mutating `concatenatedProperties` array after it is applied\n        Object.freeze(ret);\n      }\n    }\n\n    return ret;\n  }\n\n  function applyMergedProperties(obj, key, value, values) {\n    var baseValue = values[key] || obj[key];\n\n    true && !!isArray(value) && emberDebug.assert('You passed in `' + JSON.stringify(value) + '` as the value for `' + key + '` but `' + key + '` cannot be an Array', !isArray(value));\n\n    if (!baseValue) {\n      return value;\n    }\n\n    var newBase = emberUtils.assign({}, baseValue);\n    var hasFunction = false;\n\n    for (var prop in value) {\n      if (!value.hasOwnProperty(prop)) {\n        continue;\n      }\n\n      var propValue = value[prop];\n      if (isMethod(propValue)) {\n        // TODO: support for Computed Properties, etc?\n        hasFunction = true;\n        newBase[prop] = giveMethodSuper(obj, prop, propValue, baseValue, {});\n      } else {\n        newBase[prop] = propValue;\n      }\n    }\n\n    if (hasFunction) {\n      newBase._super = emberUtils.ROOT;\n    }\n\n    return newBase;\n  }\n\n  function addNormalizedProperty(base, key, value, meta$$1, descs, values, concats, mergings) {\n    if (value instanceof Descriptor) {\n      if (emberEnvironment.ENV._ENABLE_PROPERTY_REQUIRED_SUPPORT && value === REQUIRED && descs[key]) {\n        return CONTINUE;\n      }\n\n      // Wrap descriptor function to implement\n      // _super() if needed\n      if (value._getter) {\n        value = giveDescriptorSuper(meta$$1, key, value, values, descs, base);\n      }\n\n      descs[key] = value;\n      values[key] = undefined;\n    } else {\n      if (concats && concats.indexOf(key) >= 0 || key === 'concatenatedProperties' || key === 'mergedProperties') {\n        value = applyConcatenatedProperties(base, key, value, values);\n      } else if (mergings && mergings.indexOf(key) > -1) {\n        value = applyMergedProperties(base, key, value, values);\n      } else if (isMethod(value)) {\n        value = giveMethodSuper(base, key, value, values, descs);\n      }\n\n      descs[key] = undefined;\n      values[key] = value;\n    }\n  }\n\n  function mergeMixins(mixins, meta$$1, descs, values, base, keys) {\n    var currentMixin = void 0,\n        props = void 0,\n        key = void 0,\n        concats = void 0,\n        mergings = void 0;\n\n    function removeKeys(keyName) {\n      delete descs[keyName];\n      delete values[keyName];\n    }\n\n    for (var i = 0; i < mixins.length; i++) {\n      currentMixin = mixins[i];\n      true && !(typeof currentMixin === 'object' && currentMixin !== null && Object.prototype.toString.call(currentMixin) !== '[object Array]') && emberDebug.assert('Expected hash or Mixin instance, got ' + Object.prototype.toString.call(currentMixin), typeof currentMixin === 'object' && currentMixin !== null && Object.prototype.toString.call(currentMixin) !== '[object Array]');\n\n      props = mixinProperties(meta$$1, currentMixin);\n      if (props === CONTINUE) {\n        continue;\n      }\n\n      if (props) {\n        // remove willMergeMixin after 3.4 as it was used for _actions\n        if (base.willMergeMixin) {\n          base.willMergeMixin(props);\n        }\n        concats = concatenatedMixinProperties('concatenatedProperties', props, values, base);\n        mergings = concatenatedMixinProperties('mergedProperties', props, values, base);\n\n        for (key in props) {\n          if (!props.hasOwnProperty(key)) {\n            continue;\n          }\n          keys.push(key);\n          addNormalizedProperty(base, key, props[key], meta$$1, descs, values, concats, mergings);\n        }\n\n        // manually copy toString() because some JS engines do not enumerate it\n        if (props.hasOwnProperty('toString')) {\n          base.toString = props.toString;\n        }\n      } else if (currentMixin.mixins) {\n        mergeMixins(currentMixin.mixins, meta$$1, descs, values, base, keys);\n        if (currentMixin._without) {\n          currentMixin._without.forEach(removeKeys);\n        }\n      }\n    }\n  }\n\n  function followAlias(obj, desc, descs, values) {\n    var altKey = desc.methodName;\n    var value = void 0;\n    var possibleDesc = void 0;\n    if (descs[altKey] || values[altKey]) {\n      value = values[altKey];\n      desc = descs[altKey];\n    } else if ((possibleDesc = descriptorFor(obj, altKey)) !== undefined) {\n      desc = possibleDesc;\n      value = undefined;\n    } else {\n      desc = undefined;\n      value = obj[altKey];\n    }\n\n    return { desc: desc, value: value };\n  }\n\n  function updateObserversAndListeners(obj, key, paths, updateMethod) {\n    if (paths) {\n      for (var i = 0; i < paths.length; i++) {\n        updateMethod(obj, paths[i], null, key);\n      }\n    }\n  }\n\n  function replaceObserversAndListeners(obj, key, prev, next) {\n    if (typeof prev === 'function') {\n      updateObserversAndListeners(obj, key, prev.__ember_observes__, removeObserver);\n      updateObserversAndListeners(obj, key, prev.__ember_listens__, removeListener);\n    }\n\n    if (typeof next === 'function') {\n      updateObserversAndListeners(obj, key, next.__ember_observes__, addObserver);\n      updateObserversAndListeners(obj, key, next.__ember_listens__, addListener);\n    }\n  }\n\n  function applyMixin(obj, mixins, partial) {\n    var descs = {};\n    var values = {};\n    var meta$$1 = meta(obj);\n    var keys = [];\n    var key = void 0,\n        value = void 0,\n        desc = void 0;\n\n    obj._super = emberUtils.ROOT;\n\n    // Go through all mixins and hashes passed in, and:\n    //\n    // * Handle concatenated properties\n    // * Handle merged properties\n    // * Set up _super wrapping if necessary\n    // * Set up computed property descriptors\n    // * Copying `toString` in broken browsers\n    mergeMixins(mixins, meta$$1, descs, values, obj, keys);\n\n    for (var i = 0; i < keys.length; i++) {\n      key = keys[i];\n      if (key === 'constructor' || !values.hasOwnProperty(key)) {\n        continue;\n      }\n\n      desc = descs[key];\n      value = values[key];\n\n      if (emberEnvironment.ENV._ENABLE_PROPERTY_REQUIRED_SUPPORT && desc === REQUIRED) {\n        continue;\n      }\n\n      while (desc && desc instanceof Alias) {\n        var followed = followAlias(obj, desc, descs, values);\n        desc = followed.desc;\n        value = followed.value;\n      }\n\n      if (desc === undefined && value === undefined) {\n        continue;\n      }\n\n      if (features.EMBER_METAL_ES5_GETTERS && descriptorFor(obj, key) !== undefined) {\n        replaceObserversAndListeners(obj, key, null, value);\n      } else {\n        replaceObserversAndListeners(obj, key, obj[key], value);\n      }\n\n      if (emberEnvironment.ENV._ENABLE_BINDING_SUPPORT && typeof Mixin.detectBinding === 'function' && Mixin.detectBinding(key)) {\n        meta$$1.writeBindings(key, value);\n      }\n\n      defineProperty(obj, key, desc, value, meta$$1);\n    }\n\n    if (emberEnvironment.ENV._ENABLE_BINDING_SUPPORT && !partial && typeof Mixin.finishProtype === 'function') {\n      Mixin.finishPartial(obj, meta$$1);\n    }\n\n    return obj;\n  }\n\n  /**\n    @method mixin\n    @param obj\n    @param mixins*\n    @return obj\n    @private\n  */\n  function mixin(obj) {\n    for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    applyMixin(obj, args, false);\n    return obj;\n  }\n\n  /**\n    The `Mixin` class allows you to create mixins, whose properties can be\n    added to other classes. For instance,\n  \n    ```javascript\n    import Mixin from '@ember/object/mixin';\n  \n    const EditableMixin = Mixin.create({\n      edit() {\n        console.log('starting to edit');\n        this.set('isEditing', true);\n      },\n      isEditing: false\n    });\n    ```\n  \n    ```javascript\n    import EmberObject from '@ember/object';\n    import EditableMixin from '../mixins/editable';\n  \n    // Mix mixins into classes by passing them as the first arguments to\n    // `.extend.`\n    const Comment = EmberObject.extend(EditableMixin, {\n      post: null\n    });\n  \n    let comment = Comment.create({\n      post: somePost\n    });\n  \n    comment.edit(); // outputs 'starting to edit'\n    ```\n  \n    Note that Mixins are created with `Mixin.create`, not\n    `Mixin.extend`.\n  \n    Note that mixins extend a constructor's prototype so arrays and object literals\n    defined as properties will be shared amongst objects that implement the mixin.\n    If you want to define a property in a mixin that is not shared, you can define\n    it either as a computed property or have it be created on initialization of the object.\n  \n    ```javascript\n    // filters array will be shared amongst any object implementing mixin\n    import Mixin from '@ember/object/mixin';\n    import { A } from '@ember/array';\n  \n    const FilterableMixin = Mixin.create({\n      filters: A()\n    });\n    ```\n  \n    ```javascript\n    import Mixin from '@ember/object/mixin';\n    import { A } from '@ember/array';\n    import { computed } from '@ember/object';\n  \n    // filters will be a separate array for every object implementing the mixin\n    const FilterableMixin = Mixin.create({\n      filters: computed(function() {\n        return A();\n      })\n    });\n    ```\n  \n    ```javascript\n    import Mixin from '@ember/object/mixin';\n    import { A } from '@ember/array';\n  \n    // filters will be created as a separate array during the object's initialization\n    const Filterable = Mixin.create({\n      filters: null,\n  \n      init() {\n        this._super(...arguments);\n        this.set(\"filters\", A());\n      }\n    });\n    ```\n  \n    @class Mixin\n    @public\n  */\n\n  var Mixin = function () {\n    function Mixin(mixins, properties) {\n      emberBabel.classCallCheck(this, Mixin);\n\n      this.properties = properties;\n\n      var length = mixins && mixins.length;\n\n      if (length > 0) {\n        var m = new Array(length);\n\n        for (var i = 0; i < length; i++) {\n          var x = mixins[i];\n          if (x instanceof Mixin) {\n            m[i] = x;\n          } else {\n            m[i] = new Mixin(undefined, x);\n          }\n        }\n\n        this.mixins = m;\n      } else {\n        this.mixins = undefined;\n      }\n      this.ownerConstructor = undefined;\n      this._without = undefined;\n      this[emberUtils.GUID_KEY] = null;\n      this[emberUtils.NAME_KEY] = null;\n      emberDebug.debugSeal(this);\n    }\n\n    Mixin.applyPartial = function applyPartial(obj) {\n      for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n\n      return applyMixin(obj, args, true);\n    };\n\n    /**\n      @method create\n      @for @ember/object/mixin\n      @static\n      @param arguments*\n      @public\n    */\n\n    Mixin.create = function create() {\n      // ES6TODO: this relies on a global state?\n      unprocessedFlag = true;\n      var M = this;\n\n      for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        args[_key3] = arguments[_key3];\n      }\n\n      return new M(args, undefined);\n    };\n\n    // returns the mixins currently applied to the specified object\n    // TODO: Make `mixin`\n\n\n    Mixin.mixins = function mixins(obj) {\n      var meta$$1 = peekMeta(obj);\n      var ret = [];\n      if (meta$$1 === undefined) {\n        return ret;\n      }\n\n      meta$$1.forEachMixins(function (key, currentMixin) {\n        // skip primitive mixins since these are always anonymous\n        if (!currentMixin.properties) {\n          ret.push(currentMixin);\n        }\n      });\n\n      return ret;\n    };\n\n    /**\n      @method reopen\n      @param arguments*\n      @private\n    */\n\n    Mixin.prototype.reopen = function reopen() {\n      var currentMixin = void 0;\n\n      if (this.properties) {\n        currentMixin = new Mixin(undefined, this.properties);\n        this.properties = undefined;\n        this.mixins = [currentMixin];\n      } else if (!this.mixins) {\n        this.mixins = [];\n      }\n\n      var mixins = this.mixins;\n      var idx = void 0;\n\n      for (idx = 0; idx < arguments.length; idx++) {\n        currentMixin = arguments[idx];\n        true && !(typeof currentMixin === 'object' && currentMixin !== null && Object.prototype.toString.call(currentMixin) !== '[object Array]') && emberDebug.assert('Expected hash or Mixin instance, got ' + Object.prototype.toString.call(currentMixin), typeof currentMixin === 'object' && currentMixin !== null && Object.prototype.toString.call(currentMixin) !== '[object Array]');\n\n        if (currentMixin instanceof Mixin) {\n          mixins.push(currentMixin);\n        } else {\n          mixins.push(new Mixin(undefined, currentMixin));\n        }\n      }\n\n      return this;\n    };\n\n    /**\n      @method apply\n      @param obj\n      @return applied object\n      @private\n    */\n\n    Mixin.prototype.apply = function apply(obj) {\n      return applyMixin(obj, [this], false);\n    };\n\n    Mixin.prototype.applyPartial = function applyPartial(obj) {\n      return applyMixin(obj, [this], true);\n    };\n\n    /**\n      @method detect\n      @param obj\n      @return {Boolean}\n      @private\n    */\n\n    Mixin.prototype.detect = function detect(obj) {\n      if (typeof obj !== 'object' || obj === null) {\n        return false;\n      }\n      if (obj instanceof Mixin) {\n        return _detect(obj, this, {});\n      }\n      var meta$$1 = peekMeta(obj);\n      if (meta$$1 === undefined) {\n        return false;\n      }\n      return !!meta$$1.peekMixins(emberUtils.guidFor(this));\n    };\n\n    Mixin.prototype.without = function without() {\n      var ret = new Mixin([this]);\n\n      for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n        args[_key4] = arguments[_key4];\n      }\n\n      ret._without = args;\n      return ret;\n    };\n\n    Mixin.prototype.keys = function keys() {\n      var keys = {};\n      var seen = {};\n\n      _keys(keys, this, seen);\n      var ret = Object.keys(keys);\n      return ret;\n    };\n\n    return Mixin;\n  }();\n\n  Mixin._apply = applyMixin;\n  if (emberEnvironment.ENV._ENABLE_BINDING_SUPPORT) {\n    // slotting this so that the legacy addon can add the function here\n    // without triggering an error due to the Object.seal done below\n    Mixin.finishPartial = null;\n    Mixin.detectBinding = null;\n  }\n\n  var MixinPrototype = Mixin.prototype;\n  MixinPrototype.toString = function Mixin_toString() {\n    return '(unknown mixin)';\n  };\n\n  emberDebug.debugSeal(MixinPrototype);\n\n  var unprocessedFlag = false;\n\n  function hasUnprocessedMixins() {\n    return unprocessedFlag;\n  }\n\n  function clearUnprocessedMixins() {\n    unprocessedFlag = false;\n  }\n\n  function _detect(curMixin, targetMixin, seen) {\n    var guid = emberUtils.guidFor(curMixin);\n\n    if (seen[guid]) {\n      return false;\n    }\n    seen[guid] = true;\n\n    if (curMixin === targetMixin) {\n      return true;\n    }\n    var mixins = curMixin.mixins;\n    var loc = mixins ? mixins.length : 0;\n    while (--loc >= 0) {\n      if (_detect(mixins[loc], targetMixin, seen)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  function _keys(ret, mixin, seen) {\n    if (seen[emberUtils.guidFor(mixin)]) {\n      return;\n    }\n    seen[emberUtils.guidFor(mixin)] = true;\n\n    if (mixin.properties) {\n      var props = Object.keys(mixin.properties);\n      for (var i = 0; i < props.length; i++) {\n        var key = props[i];\n        ret[key] = true;\n      }\n    } else if (mixin.mixins) {\n      mixin.mixins.forEach(function (x) {\n        return _keys(ret, x, seen);\n      });\n    }\n  }\n\n  var REQUIRED = new Descriptor();\n  REQUIRED.toString = function () {\n    return '(Required Property)';\n  };\n\n  /**\n    Denotes a required property for a mixin\n  \n    @method required\n    @for Ember\n    @private\n  */\n  function required() {\n    true && !false && emberDebug.deprecate('Ember.required is deprecated as its behavior is inconsistent and unreliable.', false, { id: 'ember-metal.required', until: '3.0.0' });\n\n    return REQUIRED;\n  }\n\n  function Alias(methodName) {\n    this.isDescriptor = true;\n    this.methodName = methodName;\n  }\n\n  Alias.prototype = new Descriptor();\n\n  /**\n    Makes a method available via an additional name.\n  \n    ```app/utils/person.js\n    import EmberObject, {\n      aliasMethod\n    } from '@ember/object';\n  \n    export default EmberObject.extend({\n      name() {\n        return 'Tomhuda Katzdale';\n      },\n      moniker: aliasMethod('name')\n    });\n    ```\n  \n    ```javascript\n    let goodGuy = Person.create();\n  \n    goodGuy.name();    // 'Tomhuda Katzdale'\n    goodGuy.moniker(); // 'Tomhuda Katzdale'\n    ```\n  \n    @method aliasMethod\n    @static\n    @for @ember/object\n    @param {String} methodName name of the method to alias\n    @public\n  */\n  function aliasMethod(methodName) {\n    return new Alias(methodName);\n  }\n\n  // ..........................................................\n  // OBSERVER HELPER\n  //\n\n  /**\n    Specify a method that observes property changes.\n  \n    ```javascript\n    import EmberObject from '@ember/object';\n    import { observer } from '@ember/object';\n  \n    export default EmberObject.extend({\n      valueObserver: observer('value', function() {\n        // Executes whenever the \"value\" property changes\n      })\n    });\n    ```\n  \n    Also available as `Function.prototype.observes` if prototype extensions are\n    enabled.\n  \n    @method observer\n    @for @ember/object\n    @param {String} propertyNames*\n    @param {Function} func\n    @return func\n    @public\n    @static\n  */\n  function observer() {\n    for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n      args[_key5] = arguments[_key5];\n    }\n\n    var func = args.pop();\n    var _paths = args;\n\n    true && !(typeof func === 'function') && emberDebug.assert('observer called without a function', typeof func === 'function');\n    true && !(_paths.length > 0 && _paths.every(function (p) {\n      return typeof p === 'string' && p.length;\n    })) && emberDebug.assert('observer called without valid path', _paths.length > 0 && _paths.every(function (p) {\n      return typeof p === 'string' && p.length;\n    }));\n\n    var paths = [];\n    var addWatchedProperty = function (path) {\n      return paths.push(path);\n    };\n\n    for (var i = 0; i < _paths.length; ++i) {\n      expandProperties(_paths[i], addWatchedProperty);\n    }\n\n    func.__ember_observes__ = paths;\n    return func;\n  }\n\n  /**\n   @module ember\n   @private\n   */\n\n  /**\n    Read-only property that returns the result of a container lookup.\n  \n    @class InjectedProperty\n    @namespace Ember\n    @constructor\n    @param {String} type The container type the property will lookup\n    @param {String} name (optional) The name the property will lookup, defaults\n           to the property's name\n    @private\n  */\n  function InjectedProperty(type, name) {\n    this.type = type;\n    this.name = name;\n\n    this._super$Constructor(injectedPropertyGet);\n    AliasedPropertyPrototype.oneWay.call(this);\n  }\n\n  function injectedPropertyGet(keyName) {\n    var desc = descriptorFor(this, keyName);\n    var owner = emberUtils.getOwner(this) || this.container; // fallback to `container` for backwards compat\n\n    true && !(desc && desc.type) && emberDebug.assert('InjectedProperties should be defined with the inject computed property macros.', desc && desc.type);\n    true && !owner && emberDebug.assert('Attempting to lookup an injected property on an object without a container, ensure that the object was instantiated via a container.', owner);\n\n    return owner.lookup(desc.type + ':' + (desc.name || keyName));\n  }\n\n  InjectedProperty.prototype = Object.create(Descriptor.prototype);\n\n  var InjectedPropertyPrototype = InjectedProperty.prototype;\n  var ComputedPropertyPrototype$1 = ComputedProperty.prototype;\n  var AliasedPropertyPrototype = AliasedProperty.prototype;\n\n  InjectedPropertyPrototype._super$Constructor = ComputedProperty;\n\n  InjectedPropertyPrototype.get = ComputedPropertyPrototype$1.get;\n  InjectedPropertyPrototype.readOnly = ComputedPropertyPrototype$1.readOnly;\n  InjectedPropertyPrototype.teardown = ComputedPropertyPrototype$1.teardown;\n\n  var splice = Array.prototype.splice;\n\n  function replace(array, idx, amt, objects) {\n    var args = [].concat(objects);\n    var ret = [];\n    // https://code.google.com/p/chromium/issues/detail?id=56588\n    var size = 60000;\n    var start = idx;\n    var ends = amt;\n    var count = void 0,\n        chunk = void 0;\n\n    while (args.length) {\n      count = ends > size ? size : ends;\n      if (count <= 0) {\n        count = 0;\n      }\n\n      chunk = args.splice(0, size);\n      chunk = [start, count].concat(chunk);\n\n      start += size;\n      ends -= count;\n\n      ret = ret.concat(splice.apply(array, chunk));\n    }\n    return ret;\n  }\n\n  function isProxy(value) {\n    if (typeof value === 'object' && value !== null) {\n      var meta$$1 = peekMeta(value);\n      return meta$$1 === undefined ? false : meta$$1.isProxy();\n    }\n\n    return false;\n  }\n\n  function descriptor(desc) {\n    return new Descriptor$1(desc);\n  }\n\n  /**\n    A wrapper for a native ES5 descriptor. In an ideal world, we wouldn't need\n    this at all, however, the way we currently flatten/merge our mixins require\n    a special value to denote a descriptor.\n  \n    @class Descriptor\n    @private\n  */\n\n  var Descriptor$1 = function (_EmberDescriptor) {\n    emberBabel.inherits(Descriptor$$1, _EmberDescriptor);\n\n    function Descriptor$$1(desc) {\n      emberBabel.classCallCheck(this, Descriptor$$1);\n\n      var _this = emberBabel.possibleConstructorReturn(this, _EmberDescriptor.call(this));\n\n      _this.desc = desc;\n      return _this;\n    }\n\n    Descriptor$$1.prototype.setup = function setup(obj, key) {\n      Object.defineProperty(obj, key, this.desc);\n    };\n\n    Descriptor$$1.prototype.get = function get(obj, key) {\n      return obj[key];\n    };\n\n    Descriptor$$1.prototype.set = function set(obj, key, value) {\n      return obj[key] = value;\n    };\n\n    Descriptor$$1.prototype.teardown = function teardown() {};\n\n    return Descriptor$$1;\n  }(Descriptor);\n\n  exports['default'] = Ember;\n  exports.computed = computed;\n  exports.getCacheFor = getCacheFor;\n  exports.getCachedValueFor = getCachedValueFor;\n  exports.peekCacheFor = peekCacheFor;\n  exports.ComputedProperty = ComputedProperty;\n  exports.alias = alias;\n  exports.merge = merge;\n  exports.deprecateProperty = deprecateProperty;\n  exports.instrument = instrument;\n  exports._instrumentStart = _instrumentStart;\n  exports.instrumentationReset = reset;\n  exports.instrumentationSubscribe = subscribe;\n  exports.instrumentationUnsubscribe = unsubscribe;\n  exports.getOnerror = getOnerror;\n  exports.setOnerror = setOnerror;\n  exports.setDispatchOverride = setDispatchOverride;\n  exports.getDispatchOverride = getDispatchOverride;\n  exports.descriptorFor = descriptorFor;\n  exports.meta = meta;\n  exports.peekMeta = peekMeta;\n  exports.deleteMeta = deleteMeta;\n  exports.Cache = Cache;\n  exports.PROXY_CONTENT = PROXY_CONTENT;\n  exports._getPath = _getPath;\n  exports.get = get;\n  exports.getWithDefault = getWithDefault;\n  exports.set = set;\n  exports.trySet = trySet;\n  exports.objectAt = objectAt;\n  exports.eachProxyFor = eachProxyFor;\n  exports.eachProxyArrayWillChange = eachProxyArrayWillChange;\n  exports.eachProxyArrayDidChange = eachProxyArrayDidChange;\n  exports.addListener = addListener;\n  exports.hasListeners = hasListeners;\n  exports.on = on;\n  exports.removeListener = removeListener;\n  exports.sendEvent = sendEvent;\n  exports.isNone = isNone;\n  exports.isEmpty = isEmpty;\n  exports.isBlank = isBlank;\n  exports.isPresent = isPresent;\n  exports.run = run;\n  exports.beginPropertyChanges = beginPropertyChanges;\n  exports.changeProperties = changeProperties;\n  exports.endPropertyChanges = endPropertyChanges;\n  exports.notifyPropertyChange = notifyPropertyChange;\n  exports.overrideChains = overrideChains;\n  exports.propertyDidChange = propertyDidChange;\n  exports.propertyWillChange = propertyWillChange;\n  exports.PROPERTY_DID_CHANGE = PROPERTY_DID_CHANGE;\n  exports.defineProperty = defineProperty;\n  exports.Descriptor = Descriptor;\n  exports._hasCachedComputedProperties = _hasCachedComputedProperties;\n  exports.watchKey = watchKey;\n  exports.unwatchKey = unwatchKey;\n  exports.ChainNode = ChainNode;\n  exports.finishChains = finishChains;\n  exports.removeChainWatcher = removeChainWatcher;\n  exports.watchPath = watchPath;\n  exports.unwatchPath = unwatchPath;\n  exports.isWatching = isWatching;\n  exports.unwatch = unwatch;\n  exports.watch = watch;\n  exports.watcherCount = watcherCount;\n  exports.libraries = libraries;\n  exports.Libraries = Libraries;\n  exports.Map = Map$1;\n  exports.MapWithDefault = MapWithDefault;\n  exports.OrderedSet = OrderedSet;\n  exports.getProperties = getProperties;\n  exports.setProperties = setProperties;\n  exports.expandProperties = expandProperties;\n  exports.addObserver = addObserver;\n  exports.removeObserver = removeObserver;\n  exports.Mixin = Mixin;\n  exports.aliasMethod = aliasMethod;\n  exports.mixin = mixin;\n  exports.observer = observer;\n  exports.required = required;\n  exports.REQUIRED = REQUIRED;\n  exports.hasUnprocessedMixins = hasUnprocessedMixins;\n  exports.clearUnprocessedMixins = clearUnprocessedMixins;\n  exports.InjectedProperty = InjectedProperty;\n  exports.setHasViews = setHasViews;\n  exports.tagForProperty = tagForProperty;\n  exports.tagFor = tagFor;\n  exports.markObjectAsDirty = markObjectAsDirty;\n  exports.replace = replace;\n  exports.isProxy = isProxy;\n  exports.descriptor = descriptor;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n});","enifed('ember-routing/ext/controller', ['exports', 'ember-metal', 'ember-runtime', 'ember-routing/utils'], function (exports, _emberMetal, _emberRuntime, _utils) {\n  'use strict';\n\n  /**\n  @module ember\n  */\n\n  _emberRuntime.ControllerMixin.reopen({\n    concatenatedProperties: ['queryParams'],\n\n    /**\n      Defines which query parameters the controller accepts.\n      If you give the names `['category','page']` it will bind\n      the values of these query parameters to the variables\n      `this.category` and `this.page`.\n      By default, Ember coerces query parameter values using `toggleProperty`.\n      This behavior may lead to unexpected results.\n      To explicitly configure a query parameter property so it coerces as expected, you must define a type property:\n      ```javascript\n        queryParams: [{\n          category: {\n            type: 'boolean'\n          }\n        }]\n      ```\n      @property queryParams\n      @public\n    */\n    queryParams: null,\n\n    /**\n     This property is updated to various different callback functions depending on\n     the current \"state\" of the backing route. It is used by\n     `Controller.prototype._qpChanged`.\n      The methods backing each state can be found in the `Route.prototype._qp` computed\n     property return value (the `.states` property). The current values are listed here for\n     the sanity of future travelers:\n      * `inactive` - This state is used when this controller instance is not part of the active\n       route hierarchy. Set in `Route.prototype._reset` (a `router.js` microlib hook) and\n       `Route.prototype.actions.finalizeQueryParamChange`.\n     * `active` - This state is used when this controller instance is part of the active\n       route hierarchy. Set in `Route.prototype.actions.finalizeQueryParamChange`.\n     * `allowOverrides` - This state is used in `Route.prototype.setup` (`route.js` microlib hook).\n       @method _qpDelegate\n      @private\n    */\n    _qpDelegate: null, _qpChanged: function (controller, _prop) {\n      var prop = _prop.substr(0, _prop.length - 3);\n\n      var delegate = controller._qpDelegate;\n      var value = (0, _emberMetal.get)(controller, prop);\n      delegate(prop, value);\n    },\n    transitionToRoute: function () {\n      // target may be either another controller or a router\n      var target = (0, _emberMetal.get)(this, 'target');\n      var method = target.transitionToRoute || target.transitionTo;\n\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return method.apply(target, (0, _utils.prefixRouteNameArg)(this, args));\n    },\n    replaceRoute: function () {\n      // target may be either another controller or a router\n      var target = (0, _emberMetal.get)(this, 'target');\n      var method = target.replaceRoute || target.replaceWith;\n\n      for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      return method.apply(target, (0, _utils.prefixRouteNameArg)(this, args));\n    }\n  });\n\n  exports.default = _emberRuntime.ControllerMixin;\n});","enifed('ember-routing/index', ['exports', 'ember-routing/location/api', 'ember-routing/location/none_location', 'ember-routing/location/hash_location', 'ember-routing/location/history_location', 'ember-routing/location/auto_location', 'ember-routing/system/generate_controller', 'ember-routing/system/controller_for', 'ember-routing/system/dsl', 'ember-routing/system/router', 'ember-routing/system/route', 'ember-routing/system/query_params', 'ember-routing/services/routing', 'ember-routing/services/router', 'ember-routing/system/cache', 'ember-routing/ext/controller'], function (exports, _api, _none_location, _hash_location, _history_location, _auto_location, _generate_controller, _controller_for, _dsl, _router, _route, _query_params, _routing, _router2, _cache) {\n  'use strict';\n\n  exports.BucketCache = exports.RouterService = exports.RoutingService = exports.QueryParams = exports.Route = exports.Router = exports.RouterDSL = exports.controllerFor = exports.generateControllerFactory = exports.generateController = exports.AutoLocation = exports.HistoryLocation = exports.HashLocation = exports.NoneLocation = exports.Location = undefined;\n  Object.defineProperty(exports, 'Location', {\n    enumerable: true,\n    get: function () {\n      return _api.default;\n    }\n  });\n  Object.defineProperty(exports, 'NoneLocation', {\n    enumerable: true,\n    get: function () {\n      return _none_location.default;\n    }\n  });\n  Object.defineProperty(exports, 'HashLocation', {\n    enumerable: true,\n    get: function () {\n      return _hash_location.default;\n    }\n  });\n  Object.defineProperty(exports, 'HistoryLocation', {\n    enumerable: true,\n    get: function () {\n      return _history_location.default;\n    }\n  });\n  Object.defineProperty(exports, 'AutoLocation', {\n    enumerable: true,\n    get: function () {\n      return _auto_location.default;\n    }\n  });\n  Object.defineProperty(exports, 'generateController', {\n    enumerable: true,\n    get: function () {\n      return _generate_controller.default;\n    }\n  });\n  Object.defineProperty(exports, 'generateControllerFactory', {\n    enumerable: true,\n    get: function () {\n      return _generate_controller.generateControllerFactory;\n    }\n  });\n  Object.defineProperty(exports, 'controllerFor', {\n    enumerable: true,\n    get: function () {\n      return _controller_for.default;\n    }\n  });\n  Object.defineProperty(exports, 'RouterDSL', {\n    enumerable: true,\n    get: function () {\n      return _dsl.default;\n    }\n  });\n  Object.defineProperty(exports, 'Router', {\n    enumerable: true,\n    get: function () {\n      return _router.default;\n    }\n  });\n  Object.defineProperty(exports, 'Route', {\n    enumerable: true,\n    get: function () {\n      return _route.default;\n    }\n  });\n  Object.defineProperty(exports, 'QueryParams', {\n    enumerable: true,\n    get: function () {\n      return _query_params.default;\n    }\n  });\n  Object.defineProperty(exports, 'RoutingService', {\n    enumerable: true,\n    get: function () {\n      return _routing.default;\n    }\n  });\n  Object.defineProperty(exports, 'RouterService', {\n    enumerable: true,\n    get: function () {\n      return _router2.default;\n    }\n  });\n  Object.defineProperty(exports, 'BucketCache', {\n    enumerable: true,\n    get: function () {\n      return _cache.default;\n    }\n  });\n});","enifed('ember-routing/location/api', ['exports', 'ember-debug', 'ember-environment', 'ember-routing/location/util'], function (exports, _emberDebug, _emberEnvironment, _util) {\n  'use strict';\n\n  exports.default = {\n    /**\n     This is deprecated in favor of using the container to lookup the location\n     implementation as desired.\n      For example:\n      ```javascript\n     // Given a location registered as follows:\n     container.register('location:history-test', HistoryTestLocation);\n      // You could create a new instance via:\n     container.lookup('location:history-test');\n     ```\n       @method create\n      @param {Object} options\n      @return {Object} an instance of an implementation of the `location` API\n      @deprecated Use the container to lookup the location implementation that you\n      need.\n      @private\n    */\n    create: function (options) {\n      var implementation = options && options.implementation;\n      (true && !(!!implementation) && (0, _emberDebug.assert)('Location.create: you must specify a \\'implementation\\' option', !!implementation));\n\n\n      var implementationClass = this.implementations[implementation];\n      (true && !(!!implementationClass) && (0, _emberDebug.assert)('Location.create: ' + implementation + ' is not a valid implementation', !!implementationClass));\n\n\n      return implementationClass.create.apply(implementationClass, arguments);\n    },\n\n\n    implementations: {},\n    _location: _emberEnvironment.environment.location,\n\n    /**\n      Returns the current `location.hash` by parsing location.href since browsers\n      inconsistently URL-decode `location.hash`.\n       https://bugzilla.mozilla.org/show_bug.cgi?id=483304\n       @private\n      @method getHash\n      @since 1.4.0\n    */\n    _getHash: function () {\n      return (0, _util.getHash)(this.location);\n    }\n  };\n});","enifed('ember-routing/location/auto_location', ['exports', 'ember-utils', 'ember-metal', 'ember-debug', 'ember-runtime', 'ember-environment', 'ember-routing/location/util'], function (exports, _emberUtils, _emberMetal, _emberDebug, _emberRuntime, _emberEnvironment, _util) {\n  'use strict';\n\n  exports.getHistoryPath = getHistoryPath;\n  exports.getHashPath = getHashPath;\n  exports.default = _emberRuntime.Object.extend({\n    /**\n      @private\n       The browser's `location` object. This is typically equivalent to\n      `window.location`, but may be overridden for testing.\n       @property location\n      @default environment.location\n    */\n    location: _emberEnvironment.environment.location,\n\n    /**\n      @private\n       The browser's `history` object. This is typically equivalent to\n      `window.history`, but may be overridden for testing.\n       @since 1.5.1\n      @property history\n      @default environment.history\n    */\n    history: _emberEnvironment.environment.history,\n\n    /**\n     @private\n      The user agent's global variable. In browsers, this will be `window`.\n      @since 1.11\n     @property global\n     @default window\n    */\n    global: _emberEnvironment.environment.window,\n\n    /**\n      @private\n       The browser's `userAgent`. This is typically equivalent to\n      `navigator.userAgent`, but may be overridden for testing.\n       @since 1.5.1\n      @property userAgent\n      @default environment.history\n    */\n    userAgent: _emberEnvironment.environment.userAgent,\n\n    /**\n      @private\n       This property is used by the router to know whether to cancel the routing\n      setup process, which is needed while we redirect the browser.\n       @since 1.5.1\n      @property cancelRouterSetup\n      @default false\n    */\n    cancelRouterSetup: false,\n\n    /**\n      @private\n       Will be pre-pended to path upon state change.\n       @since 1.5.1\n      @property rootURL\n      @default '/'\n    */\n    rootURL: '/',\n\n    /**\n     Called by the router to instruct the location to do any feature detection\n     necessary. In the case of AutoLocation, we detect whether to use history\n     or hash concrete implementations.\n      @private\n    */\n    detect: function () {\n      var rootURL = this.rootURL;\n\n      (true && !(rootURL.charAt(rootURL.length - 1) === '/') && (0, _emberDebug.assert)('rootURL must end with a trailing forward slash e.g. \"/app/\"', rootURL.charAt(rootURL.length - 1) === '/'));\n\n\n      var implementation = detectImplementation({\n        location: this.location,\n        history: this.history,\n        userAgent: this.userAgent,\n        rootURL: rootURL,\n        documentMode: this.documentMode,\n        global: this.global\n      });\n\n      if (implementation === false) {\n        (0, _emberMetal.set)(this, 'cancelRouterSetup', true);\n        implementation = 'none';\n      }\n\n      var concrete = (0, _emberUtils.getOwner)(this).lookup('location:' + implementation);\n      (0, _emberMetal.set)(concrete, 'rootURL', rootURL);\n\n      (true && !(!!concrete) && (0, _emberDebug.assert)('Could not find location \\'' + implementation + '\\'.', !!concrete));\n\n\n      (0, _emberMetal.set)(this, 'concreteImplementation', concrete);\n    },\n\n\n    initState: delegateToConcreteImplementation('initState'),\n    getURL: delegateToConcreteImplementation('getURL'),\n    setURL: delegateToConcreteImplementation('setURL'),\n    replaceURL: delegateToConcreteImplementation('replaceURL'),\n    onUpdateURL: delegateToConcreteImplementation('onUpdateURL'),\n    formatURL: delegateToConcreteImplementation('formatURL'),\n\n    willDestroy: function () {\n      var concreteImplementation = (0, _emberMetal.get)(this, 'concreteImplementation');\n\n      if (concreteImplementation) {\n        concreteImplementation.destroy();\n      }\n    }\n  });\n\n\n  function delegateToConcreteImplementation(methodName) {\n    return function () {\n      var concreteImplementation = (0, _emberMetal.get)(this, 'concreteImplementation');\n      (true && !(!!concreteImplementation) && (0, _emberDebug.assert)('AutoLocation\\'s detect() method should be called before calling any other hooks.', !!concreteImplementation));\n\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return (0, _emberUtils.tryInvoke)(concreteImplementation, methodName, args);\n    };\n  }\n\n  /*\n    Given the browser's `location`, `history` and `userAgent`, and a configured\n    root URL, this function detects whether the browser supports the [History\n    API](https://developer.mozilla.org/en-US/docs/Web/API/History) and returns a\n    string representing the Location object to use based on its determination.\n  \n    For example, if the page loads in an evergreen browser, this function would\n    return the string \"history\", meaning the history API and thus HistoryLocation\n    should be used. If the page is loaded in IE8, it will return the string\n    \"hash,\" indicating that the History API should be simulated by manipulating the\n    hash portion of the location.\n  \n  */\n\n  function detectImplementation(options) {\n    var location = options.location,\n        userAgent = options.userAgent,\n        history = options.history,\n        documentMode = options.documentMode,\n        global = options.global,\n        rootURL = options.rootURL;\n\n\n    var implementation = 'none';\n    var cancelRouterSetup = false;\n    var currentPath = (0, _util.getFullPath)(location);\n\n    if ((0, _util.supportsHistory)(userAgent, history)) {\n      var historyPath = getHistoryPath(rootURL, location);\n\n      // If the browser supports history and we have a history path, we can use\n      // the history location with no redirects.\n      if (currentPath === historyPath) {\n        implementation = 'history';\n      } else if (currentPath.substr(0, 2) === '/#') {\n        history.replaceState({ path: historyPath }, null, historyPath);\n        implementation = 'history';\n      } else {\n        cancelRouterSetup = true;\n        (0, _util.replacePath)(location, historyPath);\n      }\n    } else if ((0, _util.supportsHashChange)(documentMode, global)) {\n      var hashPath = getHashPath(rootURL, location);\n\n      // Be sure we're using a hashed path, otherwise let's switch over it to so\n      // we start off clean and consistent. We'll count an index path with no\n      // hash as \"good enough\" as well.\n      if (currentPath === hashPath || currentPath === '/' && hashPath === '/#/') {\n        implementation = 'hash';\n      } else {\n        // Our URL isn't in the expected hash-supported format, so we want to\n        // cancel the router setup and replace the URL to start off clean\n        cancelRouterSetup = true;\n        (0, _util.replacePath)(location, hashPath);\n      }\n    }\n\n    if (cancelRouterSetup) {\n      return false;\n    }\n\n    return implementation;\n  }\n\n  /**\n    @private\n  \n    Returns the current path as it should appear for HistoryLocation supported\n    browsers. This may very well differ from the real current path (e.g. if it\n    starts off as a hashed URL)\n  */\n  function getHistoryPath(rootURL, location) {\n    var path = (0, _util.getPath)(location);\n    var hash = (0, _util.getHash)(location);\n    var query = (0, _util.getQuery)(location);\n    var rootURLIndex = path.indexOf(rootURL);\n    var routeHash = void 0,\n        hashParts = void 0;\n\n    (true && !(rootURLIndex === 0) && (0, _emberDebug.assert)('Path ' + path + ' does not start with the provided rootURL ' + rootURL, rootURLIndex === 0));\n\n\n    // By convention, Ember.js routes using HashLocation are required to start\n    // with `#/`. Anything else should NOT be considered a route and should\n    // be passed straight through, without transformation.\n    if (hash.substr(0, 2) === '#/') {\n      // There could be extra hash segments after the route\n      hashParts = hash.substr(1).split('#');\n      // The first one is always the route url\n      routeHash = hashParts.shift();\n\n      // If the path already has a trailing slash, remove the one\n      // from the hashed route so we don't double up.\n      if (path.charAt(path.length - 1) === '/') {\n        routeHash = routeHash.substr(1);\n      }\n\n      // This is the \"expected\" final order\n      path += routeHash + query;\n\n      if (hashParts.length) {\n        path += '#' + hashParts.join('#');\n      }\n    } else {\n      path += query + hash;\n    }\n\n    return path;\n  }\n\n  /**\n    @private\n  \n    Returns the current path as it should appear for HashLocation supported\n    browsers. This may very well differ from the real current path.\n  \n    @method _getHashPath\n  */\n  function getHashPath(rootURL, location) {\n    var path = rootURL;\n    var historyPath = getHistoryPath(rootURL, location);\n    var routePath = historyPath.substr(rootURL.length);\n\n    if (routePath !== '') {\n      if (routePath[0] !== '/') {\n        routePath = '/' + routePath;\n      }\n\n      path += '#' + routePath;\n    }\n\n    return path;\n  }\n});","enifed('ember-routing/location/hash_location', ['exports', 'ember-metal', 'ember-runtime', 'ember-routing/location/api'], function (exports, _emberMetal, _emberRuntime, _api) {\n  'use strict';\n\n  exports.default = _emberRuntime.Object.extend({\n    implementation: 'hash',\n\n    init: function () {\n      (0, _emberMetal.set)(this, 'location', (0, _emberMetal.get)(this, '_location') || window.location);\n\n      this._hashchangeHandler = undefined;\n    },\n\n\n    /**\n      @private\n       Returns normalized location.hash\n       @since 1.5.1\n      @method getHash\n    */\n    getHash: _api.default._getHash,\n\n    /**\n      Returns the normalized URL, constructed from `location.hash`.\n       e.g. `#/foo` => `/foo` as well as `#/foo#bar` => `/foo#bar`.\n       By convention, hashed paths must begin with a forward slash, otherwise they\n      are not treated as a path so we can distinguish intent.\n       @private\n      @method getURL\n    */\n    getURL: function () {\n      var originalPath = this.getHash().substr(1);\n      var outPath = originalPath;\n\n      if (outPath[0] !== '/') {\n        outPath = '/';\n\n        // Only add the # if the path isn't empty.\n        // We do NOT want `/#` since the ampersand\n        // is only included (conventionally) when\n        // the location.hash has a value\n        if (originalPath) {\n          outPath += '#' + originalPath;\n        }\n      }\n\n      return outPath;\n    },\n\n\n    /**\n      Set the `location.hash` and remembers what was set. This prevents\n      `onUpdateURL` callbacks from triggering when the hash was set by\n      `HashLocation`.\n       @private\n      @method setURL\n      @param path {String}\n    */\n    setURL: function (path) {\n      (0, _emberMetal.get)(this, 'location').hash = path;\n      (0, _emberMetal.set)(this, 'lastSetURL', path);\n    },\n\n\n    /**\n      Uses location.replace to update the url without a page reload\n      or history modification.\n       @private\n      @method replaceURL\n      @param path {String}\n    */\n    replaceURL: function (path) {\n      (0, _emberMetal.get)(this, 'location').replace('#' + path);\n      (0, _emberMetal.set)(this, 'lastSetURL', path);\n    },\n\n\n    /**\n      Register a callback to be invoked when the hash changes. These\n      callbacks will execute when the user presses the back or forward\n      button, but not after `setURL` is invoked.\n       @private\n      @method onUpdateURL\n      @param callback {Function}\n    */\n    onUpdateURL: function (callback) {\n      this._removeEventListener();\n\n      this._hashchangeHandler = _emberMetal.run.bind(this, function () {\n        var path = this.getURL();\n        if ((0, _emberMetal.get)(this, 'lastSetURL') === path) {\n          return;\n        }\n\n        (0, _emberMetal.set)(this, 'lastSetURL', null);\n\n        callback(path);\n      });\n\n      window.addEventListener('hashchange', this._hashchangeHandler);\n    },\n\n\n    /**\n      Given a URL, formats it to be placed into the page as part\n      of an element's `href` attribute.\n       This is used, for example, when using the {{action}} helper\n      to generate a URL based on an event.\n       @private\n      @method formatURL\n      @param url {String}\n    */\n    formatURL: function (url) {\n      return '#' + url;\n    },\n\n\n    /**\n      Cleans up the HashLocation event listener.\n       @private\n      @method willDestroy\n    */\n    willDestroy: function () {\n      this._removeEventListener();\n    },\n    _removeEventListener: function () {\n      if (this._hashchangeHandler) {\n        window.removeEventListener('hashchange', this._hashchangeHandler);\n      }\n    }\n  });\n});","enifed('ember-routing/location/history_location', ['exports', 'ember-metal', 'ember-runtime', 'ember-routing/location/api'], function (exports, _emberMetal, _emberRuntime, _api) {\n  'use strict';\n\n  /**\n  @module @ember/routing\n  */\n\n  var popstateFired = false;\n\n  function _uuid() {\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n      var r, v;\n      r = Math.random() * 16 | 0;\n      v = c === 'x' ? r : r & 3 | 8;\n      return v.toString(16);\n    });\n  }\n\n  /**\n    HistoryLocation implements the location API using the browser's\n    history.pushState API.\n  \n    Using `HistoryLocation` results in URLs that are indistinguishable from a\n    standard URL. This relies upon the browser's `history` API.\n  \n    Example:\n  \n    ```app/router.js\n    Router.map(function() {\n      this.route('posts', function() {\n        this.route('new');\n      });\n    });\n  \n    Router.reopen({\n      location: 'history'\n    });\n    ```\n  \n    This will result in a posts.new url of `/posts/new`.\n  \n    Keep in mind that your server must serve the Ember app at all the routes you\n    define.\n  \n    @class HistoryLocation\n    @extends EmberObject\n    @protected\n  */\n  exports.default = _emberRuntime.Object.extend({\n    implementation: 'history',\n\n    init: function () {\n      this._super.apply(this, arguments);\n\n      var base = document.querySelector('base');\n      var baseURL = '';\n      if (base) {\n        baseURL = base.getAttribute('href');\n      }\n\n      (0, _emberMetal.set)(this, 'baseURL', baseURL);\n      (0, _emberMetal.set)(this, 'location', (0, _emberMetal.get)(this, 'location') || window.location);\n\n      this._popstateHandler = undefined;\n    },\n\n\n    /**\n      Used to set state on first call to setURL\n       @private\n      @method initState\n    */\n    initState: function () {\n      var history = (0, _emberMetal.get)(this, 'history') || window.history;\n      (0, _emberMetal.set)(this, 'history', history);\n\n      if (history && 'state' in history) {\n        this.supportsHistory = true;\n      }\n\n      var state = this.getState();\n      var path = this.formatURL(this.getURL());\n      if (state && state.path === path) {\n        // preserve existing state\n        // used for webkit workaround, since there will be no initial popstate event\n        this._previousURL = this.getURL();\n      } else {\n        this.replaceState(path);\n      }\n    },\n\n\n    /**\n      Will be pre-pended to path upon state change\n       @property rootURL\n      @default '/'\n      @private\n    */\n    rootURL: '/',\n\n    /**\n      Returns the current `location.pathname` without `rootURL` or `baseURL`\n       @private\n      @method getURL\n      @return url {String}\n    */\n    getURL: function () {\n      var location = (0, _emberMetal.get)(this, 'location');\n      var path = location.pathname;\n\n      var rootURL = (0, _emberMetal.get)(this, 'rootURL');\n      var baseURL = (0, _emberMetal.get)(this, 'baseURL');\n\n      // remove trailing slashes if they exists\n      rootURL = rootURL.replace(/\\/$/, '');\n      baseURL = baseURL.replace(/\\/$/, '');\n\n      // remove baseURL and rootURL from start of path\n      var url = path.replace(new RegExp('^' + baseURL + '(?=/|$)'), '').replace(new RegExp('^' + rootURL + '(?=/|$)'), '').replace(/\\/\\/$/g, '/'); // remove extra slashes\n\n      var search = location.search || '';\n      url += search + this.getHash();\n\n      return url;\n    },\n\n\n    /**\n      Uses `history.pushState` to update the url without a page reload.\n       @private\n      @method setURL\n      @param path {String}\n    */\n    setURL: function (path) {\n      var state = this.getState();\n      path = this.formatURL(path);\n\n      if (!state || state.path !== path) {\n        this.pushState(path);\n      }\n    },\n\n\n    /**\n      Uses `history.replaceState` to update the url without a page reload\n      or history modification.\n       @private\n      @method replaceURL\n      @param path {String}\n    */\n    replaceURL: function (path) {\n      var state = this.getState();\n      path = this.formatURL(path);\n\n      if (!state || state.path !== path) {\n        this.replaceState(path);\n      }\n    },\n\n\n    /**\n      Get the current `history.state`. Checks for if a polyfill is\n      required and if so fetches this._historyState. The state returned\n      from getState may be null if an iframe has changed a window's\n      history.\n       The object returned will contain a `path` for the given state as well\n      as a unique state `id`. The state index will allow the app to distinguish\n      between two states with similar paths but should be unique from one another.\n       @private\n      @method getState\n      @return state {Object}\n    */\n    getState: function () {\n      if (this.supportsHistory) {\n        return (0, _emberMetal.get)(this, 'history').state;\n      }\n\n      return this._historyState;\n    },\n\n\n    /**\n     Pushes a new state.\n      @private\n     @method pushState\n     @param path {String}\n    */\n    pushState: function (path) {\n      var state = { path: path, uuid: _uuid() };\n\n      (0, _emberMetal.get)(this, 'history').pushState(state, null, path);\n\n      this._historyState = state;\n\n      // used for webkit workaround\n      this._previousURL = this.getURL();\n    },\n\n\n    /**\n     Replaces the current state.\n      @private\n     @method replaceState\n     @param path {String}\n    */\n    replaceState: function (path) {\n      var state = { path: path, uuid: _uuid() };\n\n      (0, _emberMetal.get)(this, 'history').replaceState(state, null, path);\n\n      this._historyState = state;\n\n      // used for webkit workaround\n      this._previousURL = this.getURL();\n    },\n\n\n    /**\n      Register a callback to be invoked whenever the browser\n      history changes, including using forward and back buttons.\n       @private\n      @method onUpdateURL\n      @param callback {Function}\n    */\n    onUpdateURL: function (callback) {\n      var _this = this;\n\n      this._removeEventListener();\n\n      this._popstateHandler = function () {\n        // Ignore initial page load popstate event in Chrome\n        if (!popstateFired) {\n          popstateFired = true;\n          if (_this.getURL() === _this._previousURL) {\n            return;\n          }\n        }\n        callback(_this.getURL());\n      };\n\n      window.addEventListener('popstate', this._popstateHandler);\n    },\n\n\n    /**\n      Used when using `{{action}}` helper.  The url is always appended to the rootURL.\n       @private\n      @method formatURL\n      @param url {String}\n      @return formatted url {String}\n    */\n    formatURL: function (url) {\n      var rootURL = (0, _emberMetal.get)(this, 'rootURL');\n      var baseURL = (0, _emberMetal.get)(this, 'baseURL');\n\n      if (url !== '') {\n        // remove trailing slashes if they exists\n        rootURL = rootURL.replace(/\\/$/, '');\n        baseURL = baseURL.replace(/\\/$/, '');\n      } else if (baseURL[0] === '/' && rootURL[0] === '/') {\n        // if baseURL and rootURL both start with a slash\n        // ... remove trailing slash from baseURL if it exists\n        baseURL = baseURL.replace(/\\/$/, '');\n      }\n\n      return baseURL + rootURL + url;\n    },\n\n\n    /**\n      Cleans up the HistoryLocation event listener.\n       @private\n      @method willDestroy\n    */\n    willDestroy: function () {\n      this._removeEventListener();\n    },\n\n\n    /**\n      @private\n       Returns normalized location.hash\n       @method getHash\n    */\n    getHash: _api.default._getHash,\n\n    _removeEventListener: function () {\n      if (this._popstateHandler) {\n        window.removeEventListener('popstate', this._popstateHandler);\n      }\n    }\n  });\n});","enifed('ember-routing/location/none_location', ['exports', 'ember-metal', 'ember-debug', 'ember-runtime'], function (exports, _emberMetal, _emberDebug, _emberRuntime) {\n  'use strict';\n\n  exports.default = _emberRuntime.Object.extend({\n    implementation: 'none',\n    path: '',\n\n    detect: function () {\n      var rootURL = this.rootURL;\n\n      (true && !(rootURL.charAt(rootURL.length - 1) === '/') && (0, _emberDebug.assert)('rootURL must end with a trailing forward slash e.g. \"/app/\"', rootURL.charAt(rootURL.length - 1) === '/'));\n    },\n\n\n    /**\n      Will be pre-pended to path.\n       @private\n      @property rootURL\n      @default '/'\n    */\n    rootURL: '/',\n\n    /**\n      Returns the current path without `rootURL`.\n       @private\n      @method getURL\n      @return {String} path\n    */\n    getURL: function () {\n      var path = (0, _emberMetal.get)(this, 'path');\n      var rootURL = (0, _emberMetal.get)(this, 'rootURL');\n\n      // remove trailing slashes if they exists\n      rootURL = rootURL.replace(/\\/$/, '');\n\n      // remove rootURL from url\n      return path.replace(new RegExp('^' + rootURL + '(?=/|$)'), '');\n    },\n\n\n    /**\n      Set the path and remembers what was set. Using this method\n      to change the path will not invoke the `updateURL` callback.\n       @private\n      @method setURL\n      @param path {String}\n    */\n    setURL: function (path) {\n      (0, _emberMetal.set)(this, 'path', path);\n    },\n\n\n    /**\n      Register a callback to be invoked when the path changes. These\n      callbacks will execute when the user presses the back or forward\n      button, but not after `setURL` is invoked.\n       @private\n      @method onUpdateURL\n      @param callback {Function}\n    */\n    onUpdateURL: function (callback) {\n      this.updateCallback = callback;\n    },\n\n\n    /**\n      Sets the path and calls the `updateURL` callback.\n       @private\n      @method handleURL\n      @param url {String}\n    */\n    handleURL: function (url) {\n      (0, _emberMetal.set)(this, 'path', url);\n      this.updateCallback(url);\n    },\n\n\n    /**\n      Given a URL, formats it to be placed into the page as part\n      of an element's `href` attribute.\n       This is used, for example, when using the {{action}} helper\n      to generate a URL based on an event.\n       @private\n      @method formatURL\n      @param url {String}\n      @return {String} url\n    */\n    formatURL: function (url) {\n      var rootURL = (0, _emberMetal.get)(this, 'rootURL');\n\n      if (url !== '') {\n        // remove trailing slashes if they exists\n        rootURL = rootURL.replace(/\\/$/, '');\n      }\n\n      return rootURL + url;\n    }\n  });\n});","enifed('ember-routing/location/util', ['exports'], function (exports) {\n  'use strict';\n\n  exports.getPath = getPath;\n  exports.getQuery = getQuery;\n  exports.getHash = getHash;\n  exports.getFullPath = getFullPath;\n  exports.getOrigin = getOrigin;\n  exports.supportsHashChange = supportsHashChange;\n  exports.supportsHistory = supportsHistory;\n  exports.replacePath = replacePath;\n  /**\n    @private\n  \n    Returns the current `location.pathname`, normalized for IE inconsistencies.\n  */\n  function getPath(location) {\n    var pathname = location.pathname;\n    // Various versions of IE/Opera don't always return a leading slash\n    if (pathname[0] !== '/') {\n      pathname = '/' + pathname;\n    }\n\n    return pathname;\n  }\n\n  /**\n    @private\n  \n    Returns the current `location.search`.\n  */\n  function getQuery(location) {\n    return location.search;\n  }\n\n  /**\n    @private\n  \n    Returns the current `location.hash` by parsing location.href since browsers\n    inconsistently URL-decode `location.hash`.\n  \n    Should be passed the browser's `location` object as the first argument.\n  \n    https://bugzilla.mozilla.org/show_bug.cgi?id=483304\n  */\n  function getHash(location) {\n    var href = location.href;\n    var hashIndex = href.indexOf('#');\n\n    if (hashIndex === -1) {\n      return '';\n    } else {\n      return href.substr(hashIndex);\n    }\n  }\n\n  function getFullPath(location) {\n    return getPath(location) + getQuery(location) + getHash(location);\n  }\n\n  function getOrigin(location) {\n    var origin = location.origin;\n\n    // Older browsers, especially IE, don't have origin\n    if (!origin) {\n      origin = location.protocol + '//' + location.hostname;\n\n      if (location.port) {\n        origin += ':' + location.port;\n      }\n    }\n\n    return origin;\n  }\n\n  /*\n    `documentMode` only exist in Internet Explorer, and it's tested because IE8 running in\n    IE7 compatibility mode claims to support `onhashchange` but actually does not.\n  \n    `global` is an object that may have an `onhashchange` property.\n  \n    @private\n    @function supportsHashChange\n  */\n  function supportsHashChange(documentMode, global) {\n    return 'onhashchange' in global && (documentMode === undefined || documentMode > 7);\n  }\n\n  /*\n    `userAgent` is a user agent string. We use user agent testing here, because\n    the stock Android browser is known to have buggy versions of the History API,\n    in some Android versions.\n  \n    @private\n    @function supportsHistory\n  */\n  function supportsHistory(userAgent, history) {\n    // Boosted from Modernizr: https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n    // The stock browser on Android 2.2 & 2.3, and 4.0.x returns positive on history support\n    // Unfortunately support is really buggy and there is no clean way to detect\n    // these bugs, so we fall back to a user agent sniff :(\n\n    // We only want Android 2 and 4.0, stock browser, and not Chrome which identifies\n    // itself as 'Mobile Safari' as well, nor Windows Phone.\n    if ((userAgent.indexOf('Android 2.') !== -1 || userAgent.indexOf('Android 4.0') !== -1) && userAgent.indexOf('Mobile Safari') !== -1 && userAgent.indexOf('Chrome') === -1 && userAgent.indexOf('Windows Phone') === -1) {\n      return false;\n    }\n\n    return !!(history && 'pushState' in history);\n  }\n\n  /**\n    Replaces the current location, making sure we explicitly include the origin\n    to prevent redirecting to a different origin.\n  \n    @private\n  */\n  function replacePath(location, path) {\n    location.replace(getOrigin(location) + path);\n  }\n});","enifed('ember-routing/services/router', ['exports', 'ember-runtime', 'ember-routing/utils'], function (exports, _emberRuntime, _utils) {\n  'use strict';\n\n  /**\n     The Router service is the public API that provides component/view layer\n     access to the router.\n  \n     @public\n     @class RouterService\n     @category ember-routing-router-service\n   */\n  /**\n  @module ember\n  */\n\n  var RouterService = _emberRuntime.Service.extend({\n\n    /**\n       Name of the current route.\n        This property represent the logical name of the route,\n       which is comma separated.\n       For the following router:\n        ```app/router.js\n       Router.map(function() {\n         this.route('about');\n         this.route('blog', function () {\n           this.route('post', { path: ':post_id' });\n         });\n       });\n       ```\n        It will return:\n        * `index` when you visit `/`\n       * `about` when you visit `/about`\n       * `blog.index` when you visit `/blog`\n       * `blog.post` when you visit `/blog/some-post-id`\n        @property currentRouteName\n       @type String\n       @public\n     */\n    currentRouteName: (0, _emberRuntime.readOnly)('_router.currentRouteName'),\n\n    /**\n       Current URL for the application.\n       This property represent the URL path for this route.\n      For the following router:\n        ```app/router.js\n       Router.map(function() {\n         this.route('about');\n         this.route('blog', function () {\n           this.route('post', { path: ':post_id' });\n         });\n       });\n       ```\n        It will return:\n        * `/` when you visit `/`\n       * `/about` when you visit `/about`\n       * `/blog` when you visit `/blog`\n       * `/blog/some-post-id` when you visit `/blog/some-post-id`\n        @property currentURL\n       @type String\n       @public\n     */\n    currentURL: (0, _emberRuntime.readOnly)('_router.currentURL'),\n\n    /**\n      The `location` property determines the type of URL's that your\n      application will use.\n      The following location types are currently available:\n      * `auto`\n      * `hash`\n      * `history`\n      * `none`\n       @property location\n      @default 'hash'\n      @see {Location}\n      @public\n    */\n    location: (0, _emberRuntime.readOnly)('_router.location'),\n\n    /**\n      The `rootURL` property represents the URL of the root of\n      the application, '/' by default.\n      This prefix is assumed on all routes defined on this app.\n       IF you change the `rootURL` in your environment configuration\n      like so:\n       ```config/environment.js\n      'use strict';\n       module.exports = function(environment) {\n        let ENV = {\n          modulePrefix: 'router-service',\n          environment,\n          rootURL: '/my-root',\n        …\n        }\n      ]\n      ```\n       This property will return `/my-root`.\n       @property rootURL\n      @default '/'\n      @public\n    */\n    rootURL: (0, _emberRuntime.readOnly)('_router.rootURL'),\n    _router: null,\n\n    transitionTo: function () {\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      if ((0, _utils.resemblesURL)(args[0])) {\n        return this._router._doURLTransition('transitionTo', args[0]);\n      }\n\n      var _extractRouteArgs = (0, _utils.extractRouteArgs)(args),\n          routeName = _extractRouteArgs.routeName,\n          models = _extractRouteArgs.models,\n          queryParams = _extractRouteArgs.queryParams;\n\n      var transition = this._router._doTransition(routeName, models, queryParams, true);\n      transition._keepDefaultQueryParamValues = true;\n\n      return transition;\n    },\n    replaceWith: function () /* routeNameOrUrl, ...models, options */{\n      return this.transitionTo.apply(this, arguments).method('replace');\n    },\n    urlFor: function () /* routeName, ...models, options */{\n      var _router;\n\n      return (_router = this._router).generate.apply(_router, arguments);\n    },\n    isActive: function () {\n      for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        args[_key2] = arguments[_key2];\n      }\n\n      var _extractRouteArgs2 = (0, _utils.extractRouteArgs)(args),\n          routeName = _extractRouteArgs2.routeName,\n          models = _extractRouteArgs2.models,\n          queryParams = _extractRouteArgs2.queryParams;\n\n      var routerMicrolib = this._router._routerMicrolib;\n\n      if (!routerMicrolib.isActiveIntent(routeName, models, null)) {\n        return false;\n      }\n      var hasQueryParams = Object.keys(queryParams).length > 0;\n\n      if (hasQueryParams) {\n        this._router._prepareQueryParams(routeName, models, queryParams, true /* fromRouterService */);\n        return (0, _utils.shallowEqual)(queryParams, routerMicrolib.state.queryParams);\n      }\n\n      return true;\n    }\n  });\n\n  exports.default = RouterService;\n});","enifed('ember-routing/services/routing', ['exports', 'ember-utils', 'ember-runtime', 'ember-metal'], function (exports, _emberUtils, _emberRuntime, _emberMetal) {\n  'use strict';\n\n  exports.default = _emberRuntime.Service.extend({\n    router: null,\n\n    targetState: (0, _emberRuntime.readOnly)('router.targetState'),\n    currentState: (0, _emberRuntime.readOnly)('router.currentState'),\n    currentRouteName: (0, _emberRuntime.readOnly)('router.currentRouteName'),\n    currentPath: (0, _emberRuntime.readOnly)('router.currentPath'),\n\n    hasRoute: function (routeName) {\n      return (0, _emberMetal.get)(this, 'router').hasRoute(routeName);\n    },\n    transitionTo: function (routeName, models, queryParams, shouldReplace) {\n      var router = (0, _emberMetal.get)(this, 'router');\n\n      var transition = router._doTransition(routeName, models, queryParams);\n\n      if (shouldReplace) {\n        transition.method('replace');\n      }\n\n      return transition;\n    },\n    normalizeQueryParams: function (routeName, models, queryParams) {\n      (0, _emberMetal.get)(this, 'router')._prepareQueryParams(routeName, models, queryParams);\n    },\n    generateURL: function (routeName, models, queryParams) {\n      var router = (0, _emberMetal.get)(this, 'router');\n      // return early when the router microlib is not present, which is the case for {{link-to}} in integration tests\n      if (!router._routerMicrolib) {\n        return;\n      }\n\n      var visibleQueryParams = {};\n      if (queryParams) {\n        (0, _emberUtils.assign)(visibleQueryParams, queryParams);\n        this.normalizeQueryParams(routeName, models, visibleQueryParams);\n      }\n\n      return router.generate.apply(router, [routeName].concat(models, [{ queryParams: visibleQueryParams }]));\n    },\n    isActiveForRoute: function (contexts, queryParams, routeName, routerState, isCurrentWhenSpecified) {\n      var router = (0, _emberMetal.get)(this, 'router');\n\n      var handlers = router._routerMicrolib.recognizer.handlersFor(routeName);\n      var leafName = handlers[handlers.length - 1].handler;\n      var maximumContexts = numberOfContextsAcceptedByHandler(routeName, handlers);\n\n      // NOTE: any ugliness in the calculation of activeness is largely\n      // due to the fact that we support automatic normalizing of\n      // `resource` -> `resource.index`, even though there might be\n      // dynamic segments / query params defined on `resource.index`\n      // which complicates (and makes somewhat ambiguous) the calculation\n      // of activeness for links that link to `resource` instead of\n      // directly to `resource.index`.\n\n      // if we don't have enough contexts revert back to full route name\n      // this is because the leaf route will use one of the contexts\n      if (contexts.length > maximumContexts) {\n        routeName = leafName;\n      }\n\n      return routerState.isActiveIntent(routeName, contexts, queryParams, !isCurrentWhenSpecified);\n    }\n  });\n\n\n  function numberOfContextsAcceptedByHandler(handler, handlerInfos) {\n    var req = 0;\n    for (var i = 0; i < handlerInfos.length; i++) {\n      req += handlerInfos[i].names.length;\n      if (handlerInfos[i].handler === handler) {\n        break;\n      }\n    }\n\n    return req;\n  }\n});","enifed('ember-routing/system/cache', ['exports', 'ember-runtime'], function (exports, _emberRuntime) {\n  'use strict';\n\n  exports.default = _emberRuntime.Object.extend({\n    init: function () {\n      this.cache = Object.create(null);\n    },\n    has: function (bucketKey) {\n      return !!this.cache[bucketKey];\n    },\n    stash: function (bucketKey, key, value) {\n      var bucket = this.cache[bucketKey];\n\n      if (!bucket) {\n        bucket = this.cache[bucketKey] = Object.create(null);\n      }\n\n      bucket[key] = value;\n    },\n    lookup: function (bucketKey, prop, defaultValue) {\n      var cache = this.cache;\n      if (!this.has(bucketKey)) {\n        return defaultValue;\n      }\n\n      var bucket = cache[bucketKey];\n      if (prop in bucket && bucket[prop] !== undefined) {\n        return bucket[prop];\n      } else {\n        return defaultValue;\n      }\n    }\n  });\n});","enifed(\"ember-routing/system/controller_for\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.default = controllerFor;\n  /**\n  @module ember\n  */\n\n  /**\n    Finds a controller instance.\n  \n    @for Ember\n    @method controllerFor\n    @private\n  */\n  function controllerFor(container, controllerName, lookupOptions) {\n    return container.lookup(\"controller:\" + controllerName, lookupOptions);\n  }\n});","enifed('ember-routing/system/dsl', ['exports', 'ember-babel', 'ember-utils', 'ember-debug'], function (exports, _emberBabel, _emberUtils, _emberDebug) {\n  'use strict';\n\n  var uuid = 0;\n\n  var DSL = function () {\n    function DSL(name, options) {\n      (0, _emberBabel.classCallCheck)(this, DSL);\n\n      this.parent = name;\n      this.enableLoadingSubstates = options && options.enableLoadingSubstates;\n      this.matches = [];\n      this.explicitIndex = undefined;\n      this.options = options;\n    }\n\n    DSL.prototype.route = function route(name) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var callback = arguments[2];\n\n      var dummyErrorRoute = '/_unused_dummy_error_path_route_' + name + '/:error';\n      if (arguments.length === 2 && typeof options === 'function') {\n        callback = options;\n        options = {};\n      }\n\n      (true && !(function () {\n        if (options.overrideNameAssertion === true) {\n          return true;\n        }\n\n        return ['array', 'basic', 'object', 'application'].indexOf(name) === -1;\n      }()) && (0, _emberDebug.assert)('\\'' + name + '\\' cannot be used as a route name.', function () {\n        if (options.overrideNameAssertion === true) {\n          return true;\n        }return ['array', 'basic', 'object', 'application'].indexOf(name) === -1;\n      }()));\n\n\n      if (this.enableLoadingSubstates) {\n        createRoute(this, name + '_loading', { resetNamespace: options.resetNamespace });\n        createRoute(this, name + '_error', { resetNamespace: options.resetNamespace, path: dummyErrorRoute });\n      }\n\n      if (callback) {\n        var fullName = getFullName(this, name, options.resetNamespace);\n        var dsl = new DSL(fullName, this.options);\n\n        createRoute(dsl, 'loading');\n        createRoute(dsl, 'error', { path: dummyErrorRoute });\n\n        callback.call(dsl);\n\n        createRoute(this, name, options, dsl.generate());\n      } else {\n        createRoute(this, name, options);\n      }\n    };\n\n    DSL.prototype.push = function push(url, name, callback, serialize) {\n      var parts = name.split('.');\n\n      if (this.options.engineInfo) {\n        var localFullName = name.slice(this.options.engineInfo.fullName.length + 1);\n        var routeInfo = (0, _emberUtils.assign)({ localFullName: localFullName }, this.options.engineInfo);\n\n        if (serialize) {\n          routeInfo.serializeMethod = serialize;\n        }\n\n        this.options.addRouteForEngine(name, routeInfo);\n      } else if (serialize) {\n        throw new Error('Defining a route serializer on route \\'' + name + '\\' outside an Engine is not allowed.');\n      }\n\n      if (url === '' || url === '/' || parts[parts.length - 1] === 'index') {\n        this.explicitIndex = true;\n      }\n\n      this.matches.push(url, name, callback);\n    };\n\n    DSL.prototype.generate = function generate() {\n      var dslMatches = this.matches;\n\n      if (!this.explicitIndex) {\n        this.route('index', { path: '/' });\n      }\n\n      return function (match) {\n        for (var i = 0; i < dslMatches.length; i += 3) {\n          match(dslMatches[i]).to(dslMatches[i + 1], dslMatches[i + 2]);\n        }\n      };\n    };\n\n    DSL.prototype.mount = function mount(_name) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      var engineRouteMap = this.options.resolveRouteMap(_name);\n      var name = _name;\n\n      if (options.as) {\n        name = options.as;\n      }\n\n      var fullName = getFullName(this, name, options.resetNamespace);\n\n      var engineInfo = {\n        name: _name,\n        instanceId: uuid++,\n        mountPoint: fullName,\n        fullName: fullName\n      };\n\n      var path = options.path;\n\n      if (typeof path !== 'string') {\n        path = '/' + name;\n      }\n\n      var callback = void 0;\n      var dummyErrorRoute = '/_unused_dummy_error_path_route_' + name + '/:error';\n      if (engineRouteMap) {\n        var shouldResetEngineInfo = false;\n        var oldEngineInfo = this.options.engineInfo;\n        if (oldEngineInfo) {\n          shouldResetEngineInfo = true;\n          this.options.engineInfo = engineInfo;\n        }\n\n        var optionsForChild = (0, _emberUtils.assign)({ engineInfo: engineInfo }, this.options);\n        var childDSL = new DSL(fullName, optionsForChild);\n\n        createRoute(childDSL, 'loading');\n        createRoute(childDSL, 'error', { path: dummyErrorRoute });\n\n        engineRouteMap.class.call(childDSL);\n\n        callback = childDSL.generate();\n\n        if (shouldResetEngineInfo) {\n          this.options.engineInfo = oldEngineInfo;\n        }\n      }\n\n      var localFullName = 'application';\n      var routeInfo = (0, _emberUtils.assign)({ localFullName: localFullName }, engineInfo);\n\n      if (this.enableLoadingSubstates) {\n        // These values are important to register the loading routes under their\n        // proper names for the Router and within the Engine's registry.\n        var substateName = name + '_loading';\n        var _localFullName = 'application_loading';\n        var _routeInfo = (0, _emberUtils.assign)({ localFullName: _localFullName }, engineInfo);\n        createRoute(this, substateName, { resetNamespace: options.resetNamespace });\n        this.options.addRouteForEngine(substateName, _routeInfo);\n\n        substateName = name + '_error';\n        _localFullName = 'application_error';\n        _routeInfo = (0, _emberUtils.assign)({ localFullName: _localFullName }, engineInfo);\n        createRoute(this, substateName, { resetNamespace: options.resetNamespace, path: dummyErrorRoute });\n        this.options.addRouteForEngine(substateName, _routeInfo);\n      }\n\n      this.options.addRouteForEngine(fullName, routeInfo);\n\n      this.push(path, fullName, callback);\n    };\n\n    return DSL;\n  }();\n\n  exports.default = DSL;\n\n\n  function canNest(dsl) {\n    return dsl.parent !== 'application';\n  }\n\n  function getFullName(dsl, name, resetNamespace) {\n    if (canNest(dsl) && resetNamespace !== true) {\n      return dsl.parent + '.' + name;\n    } else {\n      return name;\n    }\n  }\n\n  function createRoute(dsl, name) {\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    var callback = arguments[3];\n\n    var fullName = getFullName(dsl, name, options.resetNamespace);\n\n    if (typeof options.path !== 'string') {\n      options.path = '/' + name;\n    }\n\n    dsl.push(options.path, fullName, callback, options.serialize);\n  }\n\n  DSL.map = function (callback) {\n    var dsl = new DSL();\n    callback.call(dsl);\n    return dsl;\n  };\n});","enifed('ember-routing/system/generate_controller', ['exports', 'ember-metal', 'ember-debug'], function (exports, _emberMetal, _emberDebug) {\n  'use strict';\n\n  exports.generateControllerFactory = generateControllerFactory;\n  exports.default = generateController;\n\n  /**\n  @module ember\n  */\n\n  /**\n    Generates a controller factory\n  \n    @for Ember\n    @method generateControllerFactory\n    @private\n  */\n\n  function generateControllerFactory(owner, controllerName) {\n    var Factory = owner.factoryFor('controller:basic').class;\n\n    Factory = Factory.extend({\n      toString: function () {\n        return '(generated ' + controllerName + ' controller)';\n      }\n    });\n\n    var fullName = 'controller:' + controllerName;\n\n    owner.register(fullName, Factory);\n\n    return Factory;\n  }\n\n  /**\n    Generates and instantiates a controller extending from `controller:basic`\n    if present, or `Controller` if not.\n  \n    @for Ember\n    @method generateController\n    @private\n    @since 1.3.0\n  */\n  function generateController(owner, controllerName) {\n    generateControllerFactory(owner, controllerName);\n\n    var fullName = 'controller:' + controllerName;\n    var instance = owner.lookup(fullName);\n\n    if (true) {\n      if ((0, _emberMetal.get)(instance, 'namespace.LOG_ACTIVE_GENERATION')) {\n        (0, _emberDebug.info)('generated -> ' + fullName, { fullName: fullName });\n      }\n    }\n\n    return instance;\n  }\n});","enifed('ember-routing/system/query_params', ['exports', 'ember-runtime'], function (exports, _emberRuntime) {\n  'use strict';\n\n  exports.default = _emberRuntime.Object.extend({\n    isQueryParams: true,\n    values: null\n  });\n});","enifed('ember-routing/system/route', ['exports', 'ember-utils', 'ember-metal', 'ember-debug', 'ember-runtime', 'ember-routing/system/generate_controller', 'ember-routing/utils'], function (exports, _emberUtils, _emberMetal, _emberDebug, _emberRuntime, _generate_controller, _utils) {\n  'use strict';\n\n  exports.defaultSerialize = defaultSerialize;\n  exports.hasDefaultSerialize = hasDefaultSerialize;\n\n\n  function K() {\n    return this;\n  }\n\n  function defaultSerialize(model, params) {\n    if (params.length < 1 || !model) {\n      return;\n    }\n\n    var object = {};\n\n    if (params.length === 1) {\n      var name = params[0];\n      if (name in model) {\n        object[name] = (0, _emberMetal.get)(model, name);\n      } else if (/_id$/.test(name)) {\n        object[name] = (0, _emberMetal.get)(model, 'id');\n      }\n    } else {\n      object = (0, _emberMetal.getProperties)(model, params);\n    }\n\n    return object;\n  }\n\n  var DEFAULT_SERIALIZE = (0, _emberUtils.symbol)('DEFAULT_SERIALIZE');\n\n  defaultSerialize[DEFAULT_SERIALIZE] = true;\n\n  function hasDefaultSerialize(route) {\n    return !!route.serialize[DEFAULT_SERIALIZE];\n  }\n\n  /**\n  @module @ember/routing\n  */\n\n  /**\n    The `Route` class is used to define individual routes. Refer to\n    the [routing guide](https://emberjs.com/guides/routing/) for documentation.\n  \n    @class Route\n    @extends EmberObject\n    @uses ActionHandler\n    @uses Evented\n    @since 1.0.0\n    @public\n  */\n  var Route = _emberRuntime.Object.extend(_emberRuntime.ActionHandler, _emberRuntime.Evented, {\n    /**\n      Configuration hash for this route's queryParams. The possible\n      configuration options and their defaults are as follows\n      (assuming a query param whose controller property is `page`):\n       ```javascript\n      queryParams: {\n        page: {\n          // By default, controller query param properties don't\n          // cause a full transition when they are changed, but\n          // rather only cause the URL to update. Setting\n          // `refreshModel` to true will cause an \"in-place\"\n          // transition to occur, whereby the model hooks for\n          // this route (and any child routes) will re-fire, allowing\n          // you to reload models (e.g., from the server) using the\n          // updated query param values.\n          refreshModel: false,\n           // By default, changes to controller query param properties\n          // cause the URL to update via `pushState`, which means an\n          // item will be added to the browser's history, allowing\n          // you to use the back button to restore the app to the\n          // previous state before the query param property was changed.\n          // Setting `replace` to true will use `replaceState` (or its\n          // hash location equivalent), which causes no browser history\n          // item to be added. This options name and default value are\n          // the same as the `link-to` helper's `replace` option.\n          replace: false,\n           // By default, the query param URL key is the same name as\n          // the controller property name. Use `as` to specify a\n          // different URL key.\n          as: 'page'\n        }\n      }\n      ```\n       @property queryParams\n      @for Route\n      @type Object\n      @since 1.6.0\n      @public\n    */\n    queryParams: {},\n\n    router: (0, _emberMetal.computed)('_router', function () {\n      (true && !(false) && (0, _emberDebug.deprecate)('Route#router is an intimate API that has been renamed to Route#_router. However you might want to consider using the router service', false, { id: 'ember-routing.route-router', until: '3.5.0', url: 'https://emberjs.com/deprecations/v3.x#toc_ember-routing-route-router' }));\n\n      return this._router;\n    }),\n\n    _setRouteName: function (name) {\n      this.routeName = name;\n      this.fullRouteName = getEngineRouteName((0, _emberUtils.getOwner)(this), name);\n    },\n\n\n    /**\n      @private\n       @property _qp\n    */\n    _qp: (0, _emberMetal.computed)(function () {\n      var _this = this;\n\n      var combinedQueryParameterConfiguration = void 0;\n\n      var controllerName = this.controllerName || this.routeName;\n      var owner = (0, _emberUtils.getOwner)(this);\n      var controller = owner.lookup('controller:' + controllerName);\n      var queryParameterConfiguraton = (0, _emberMetal.get)(this, 'queryParams');\n      var hasRouterDefinedQueryParams = Object.keys(queryParameterConfiguraton).length > 0;\n\n      if (controller) {\n        // the developer has authored a controller class in their application for\n        // this route find its query params and normalize their object shape them\n        // merge in the query params for the route. As a mergedProperty,\n        // Route#queryParams is always at least `{}`\n\n        var controllerDefinedQueryParameterConfiguration = (0, _emberMetal.get)(controller, 'queryParams') || {};\n        var normalizedControllerQueryParameterConfiguration = (0, _utils.normalizeControllerQueryParams)(controllerDefinedQueryParameterConfiguration);\n        combinedQueryParameterConfiguration = mergeEachQueryParams(normalizedControllerQueryParameterConfiguration, queryParameterConfiguraton);\n      } else if (hasRouterDefinedQueryParams) {\n        // the developer has not defined a controller but *has* supplied route query params.\n        // Generate a class for them so we can later insert default values\n        controller = (0, _generate_controller.default)(owner, controllerName);\n        combinedQueryParameterConfiguration = queryParameterConfiguraton;\n      }\n\n      var qps = [];\n      var map = {};\n      var propertyNames = [];\n\n      for (var propName in combinedQueryParameterConfiguration) {\n        if (!combinedQueryParameterConfiguration.hasOwnProperty(propName)) {\n          continue;\n        }\n\n        // to support the dubious feature of using unknownProperty\n        // on queryParams configuration\n        if (propName === 'unknownProperty' || propName === '_super') {\n          // possible todo: issue deprecation warning?\n          continue;\n        }\n\n        var desc = combinedQueryParameterConfiguration[propName];\n        var scope = desc.scope || 'model';\n        var parts = void 0;\n\n        if (scope === 'controller') {\n          parts = [];\n        }\n\n        var urlKey = desc.as || this.serializeQueryParamKey(propName);\n        var defaultValue = (0, _emberMetal.get)(controller, propName);\n\n        if (Array.isArray(defaultValue)) {\n          defaultValue = (0, _emberRuntime.A)(defaultValue.slice());\n        }\n\n        var type = desc.type || (0, _emberRuntime.typeOf)(defaultValue);\n\n        var defaultValueSerialized = this.serializeQueryParam(defaultValue, urlKey, type);\n        var scopedPropertyName = controllerName + ':' + propName;\n        var qp = {\n          undecoratedDefaultValue: (0, _emberMetal.get)(controller, propName),\n          defaultValue: defaultValue,\n          serializedDefaultValue: defaultValueSerialized,\n          serializedValue: defaultValueSerialized,\n\n          type: type,\n          urlKey: urlKey,\n          prop: propName,\n          scopedPropertyName: scopedPropertyName,\n          controllerName: controllerName,\n          route: this,\n          parts: parts, // provided later when stashNames is called if 'model' scope\n          values: null, // provided later when setup is called. no idea why.\n          scope: scope\n        };\n\n        map[propName] = map[urlKey] = map[scopedPropertyName] = qp;\n        qps.push(qp);\n        propertyNames.push(propName);\n      }\n\n      return {\n        qps: qps,\n        map: map,\n        propertyNames: propertyNames,\n        states: {\n          /*\n            Called when a query parameter changes in the URL, this route cares\n            about that query parameter, but the route is not currently\n            in the active route hierarchy.\n          */\n          inactive: function (prop, value) {\n            var qp = map[prop];\n            _this._qpChanged(prop, value, qp);\n          },\n          /*\n            Called when a query parameter changes in the URL, this route cares\n            about that query parameter, and the route is currently\n            in the active route hierarchy.\n          */\n          active: function (prop, value) {\n            var qp = map[prop];\n            _this._qpChanged(prop, value, qp);\n            return _this._activeQPChanged(qp, value);\n          },\n          /*\n            Called when a value of a query parameter this route handles changes in a controller\n            and the route is currently in the active route hierarchy.\n          */\n          allowOverrides: function (prop, value) {\n            var qp = map[prop];\n            _this._qpChanged(prop, value, qp);\n            return _this._updatingQPChanged(qp);\n          }\n        }\n      };\n    }),\n\n    /**\n      @private\n       @property _names\n    */\n    _names: null,\n\n    _stashNames: function (handlerInfo, dynamicParent) {\n      if (this._names) {\n        return;\n      }\n      var names = this._names = handlerInfo._names;\n\n      if (!names.length) {\n        handlerInfo = dynamicParent;\n        names = handlerInfo && handlerInfo._names || [];\n      }\n\n      var qps = (0, _emberMetal.get)(this, '_qp.qps');\n\n      var namePaths = new Array(names.length);\n      for (var a = 0; a < names.length; ++a) {\n        namePaths[a] = handlerInfo.name + '.' + names[a];\n      }\n\n      for (var i = 0; i < qps.length; ++i) {\n        var qp = qps[i];\n        if (qp.scope === 'model') {\n          qp.parts = namePaths;\n        }\n      }\n    },\n    _activeQPChanged: function (qp, value) {\n      this._router._activeQPChanged(qp.scopedPropertyName, value);\n    },\n    _updatingQPChanged: function (qp) {\n      this._router._updatingQPChanged(qp.urlKey);\n    },\n\n\n    mergedProperties: ['queryParams'],\n\n    paramsFor: function (name) {\n      var _this2 = this;\n\n      var route = (0, _emberUtils.getOwner)(this).lookup('route:' + name);\n\n      if (!route) {\n        return {};\n      }\n\n      var transition = this._router._routerMicrolib.activeTransition;\n      var state = transition ? transition.state : this._router._routerMicrolib.state;\n\n      var fullName = route.fullRouteName;\n      var params = (0, _emberUtils.assign)({}, state.params[fullName]);\n      var queryParams = getQueryParamsFor(route, state);\n\n      return Object.keys(queryParams).reduce(function (params, key) {\n        (true && !(!params[key]) && (0, _emberDebug.assert)('The route \\'' + _this2.routeName + '\\' has both a dynamic segment and query param with name \\'' + key + '\\'. Please rename one to avoid collisions.', !params[key]));\n\n        params[key] = queryParams[key];\n        return params;\n      }, params);\n    },\n    serializeQueryParamKey: function (controllerPropertyName) {\n      return controllerPropertyName;\n    },\n    serializeQueryParam: function (value, urlKey, defaultValueType) {\n      // urlKey isn't used here, but anyone overriding\n      // can use it to provide serialization specific\n      // to a certain query param.\n      return this._router._serializeQueryParam(value, defaultValueType);\n    },\n    deserializeQueryParam: function (value, urlKey, defaultValueType) {\n      // urlKey isn't used here, but anyone overriding\n      // can use it to provide deserialization specific\n      // to a certain query param.\n      return this._router._deserializeQueryParam(value, defaultValueType);\n    },\n    _optionsForQueryParam: function (qp) {\n      return (0, _emberMetal.get)(this, 'queryParams.' + qp.urlKey) || (0, _emberMetal.get)(this, 'queryParams.' + qp.prop) || {};\n    },\n\n\n    /**\n      A hook you can use to reset controller values either when the model\n      changes or the route is exiting.\n       ```app/routes/articles.js\n      import Route from '@ember/routing/route';\n       export default Route.extend({\n        resetController(controller, isExiting, transition) {\n          if (isExiting && transition.targetName !== 'error') {\n            controller.set('page', 1);\n          }\n        }\n      });\n      ```\n       @method resetController\n      @param {Controller} controller instance\n      @param {Boolean} isExiting\n      @param {Object} transition\n      @since 1.7.0\n      @public\n    */\n    resetController: K,\n\n    exit: function () {\n      this.deactivate();\n      this.trigger('deactivate');\n      this.teardownViews();\n    },\n    _reset: function (isExiting, transition) {\n      var controller = this.controller;\n      controller._qpDelegate = (0, _emberMetal.get)(this, '_qp.states.inactive');\n\n      this.resetController(controller, isExiting, transition);\n    },\n    enter: function () {\n      this.connections = [];\n      this.activate();\n      this.trigger('activate');\n    },\n\n\n    /**\n      The name of the template to use by default when rendering this routes\n      template.\n       ```app/routes/posts/list.js\n      import Route from '@ember/routing/route';\n       export default Route.extend({\n        templateName: 'posts/list'\n      });\n      ```\n       ```app/routes/posts/index.js\n      import PostsList from '../posts/list';\n       export default PostsList.extend();\n      ```\n       ```app/routes/posts/archived.js\n      import PostsList from '../posts/list';\n       export default PostsList.extend();\n      ```\n       @property templateName\n      @type String\n      @default null\n      @since 1.4.0\n      @public\n    */\n    templateName: null,\n\n    /**\n      The name of the controller to associate with this route.\n       By default, Ember will lookup a route's controller that matches the name\n      of the route (i.e. `App.PostController` for `App.PostRoute`). However,\n      if you would like to define a specific controller to use, you can do so\n      using this property.\n       This is useful in many ways, as the controller specified will be:\n       * passed to the `setupController` method.\n      * used as the controller for the template being rendered by the route.\n      * returned from a call to `controllerFor` for the route.\n       @property controllerName\n      @type String\n      @default null\n      @since 1.4.0\n      @public\n    */\n    controllerName: null,\n\n    /**\n      The `willTransition` action is fired at the beginning of any\n      attempted transition with a `Transition` object as the sole\n      argument. This action can be used for aborting, redirecting,\n      or decorating the transition from the currently active routes.\n       A good example is preventing navigation when a form is\n      half-filled out:\n       ```app/routes/contact-form.js\n      import Route from '@ember/routing/route';\n       export default Route.extend({\n        actions: {\n          willTransition(transition) {\n            if (this.controller.get('userHasEnteredData')) {\n              this.controller.displayNavigationConfirm();\n              transition.abort();\n            }\n          }\n        }\n      });\n      ```\n       You can also redirect elsewhere by calling\n      `this.transitionTo('elsewhere')` from within `willTransition`.\n      Note that `willTransition` will not be fired for the\n      redirecting `transitionTo`, since `willTransition` doesn't\n      fire when there is already a transition underway. If you want\n      subsequent `willTransition` actions to fire for the redirecting\n      transition, you must first explicitly call\n      `transition.abort()`.\n       To allow the `willTransition` event to continue bubbling to the parent\n      route, use `return true;`. When the `willTransition` method has a\n      return value of `true` then the parent route's `willTransition` method\n      will be fired, enabling \"bubbling\" behavior for the event.\n       @event willTransition\n      @param {Transition} transition\n      @since 1.0.0\n      @public\n    */\n\n    /**\n      The `didTransition` action is fired after a transition has\n      successfully been completed. This occurs after the normal model\n      hooks (`beforeModel`, `model`, `afterModel`, `setupController`)\n      have resolved. The `didTransition` action has no arguments,\n      however, it can be useful for tracking page views or resetting\n      state on the controller.\n       ```app/routes/login.js\n      import Route from '@ember/routing/route';\n       export default Route.extend({\n        actions: {\n          didTransition() {\n            this.controller.get('errors.base').clear();\n            return true; // Bubble the didTransition event\n          }\n        }\n      });\n      ```\n       @event didTransition\n      @since 1.2.0\n      @public\n    */\n\n    /**\n      The `loading` action is fired on the route when a route's `model`\n      hook returns a promise that is not already resolved. The current\n      `Transition` object is the first parameter and the route that\n      triggered the loading event is the second parameter.\n       ```app/routes/application.js\n      import Route from '@ember/routing/route';\n       export default Route.extend({\n        actions: {\n          loading(transition, route) {\n            let controller = this.controllerFor('foo');\n            controller.set('currentlyLoading', true);\n             transition.finally(function() {\n              controller.set('currentlyLoading', false);\n            });\n          }\n        }\n      });\n      ```\n       @event loading\n      @param {Transition} transition\n      @param {Route} route The route that triggered the loading event\n      @since 1.2.0\n      @public\n    */\n\n    /**\n      When attempting to transition into a route, any of the hooks\n      may return a promise that rejects, at which point an `error`\n      action will be fired on the partially-entered routes, allowing\n      for per-route error handling logic, or shared error handling\n      logic defined on a parent route.\n       Here is an example of an error handler that will be invoked\n      for rejected promises from the various hooks on the route,\n      as well as any unhandled errors from child routes:\n       ```app/routes/admin.js\n      import { reject } from 'rsvp';\n      import Route from '@ember/routing/route';\n       export default Route.extend({\n        beforeModel() {\n          return reject('bad things!');\n        },\n         actions: {\n          error(error, transition) {\n            // Assuming we got here due to the error in `beforeModel`,\n            // we can expect that error === \"bad things!\",\n            // but a promise model rejecting would also\n            // call this hook, as would any errors encountered\n            // in `afterModel`.\n             // The `error` hook is also provided the failed\n            // `transition`, which can be stored and later\n            // `.retry()`d if desired.\n             this.transitionTo('login');\n          }\n        }\n      });\n      ```\n       `error` actions that bubble up all the way to `ApplicationRoute`\n      will fire a default error handler that logs the error. You can\n      specify your own global default error handler by overriding the\n      `error` handler on `ApplicationRoute`:\n       ```app/routes/application.js\n      import Route from '@ember/routing/route';\n       export default Route.extend({\n        actions: {\n          error(error, transition) {\n            this.controllerFor('banner').displayError(error.message);\n          }\n        }\n      });\n      ```\n      @event error\n      @param {Error} error\n      @param {Transition} transition\n      @since 1.0.0\n      @public\n    */\n\n    /**\n      This event is triggered when the router enters the route. It is\n      not executed when the model for the route changes.\n       ```app/routes/application.js\n      import { on } from '@ember/object/evented';\n      import Route from '@ember/routing/route';\n       export default Route.extend({\n        collectAnalytics: on('activate', function(){\n          collectAnalytics();\n        })\n      });\n      ```\n       @event activate\n      @since 1.9.0\n      @public\n    */\n\n    /**\n      This event is triggered when the router completely exits this\n      route. It is not executed when the model for the route changes.\n       ```app/routes/index.js\n      import { on } from '@ember/object/evented';\n      import Route from '@ember/routing/route';\n       export default Route.extend({\n        trackPageLeaveAnalytics: on('deactivate', function(){\n          trackPageLeaveAnalytics();\n        })\n      });\n      ```\n       @event deactivate\n      @since 1.9.0\n      @public\n    */\n\n    /**\n      The controller associated with this route.\n       Example\n       ```app/routes/form.js\n      import Route from '@ember/routing/route';\n       export default Route.extend({\n        actions: {\n          willTransition(transition) {\n            if (this.controller.get('userHasEnteredData') &&\n                !confirm('Are you sure you want to abandon progress?')) {\n              transition.abort();\n            } else {\n              // Bubble the `willTransition` action so that\n              // parent routes can decide whether or not to abort.\n              return true;\n            }\n          }\n        }\n      });\n      ```\n       @property controller\n      @type Controller\n      @since 1.6.0\n      @public\n    */\n\n    actions: {\n      queryParamsDidChange: function (changed, totalPresent, removed) {\n        var qpMap = (0, _emberMetal.get)(this, '_qp').map;\n\n        var totalChanged = Object.keys(changed).concat(Object.keys(removed));\n        for (var i = 0; i < totalChanged.length; ++i) {\n          var qp = qpMap[totalChanged[i]];\n          if (qp && (0, _emberMetal.get)(this._optionsForQueryParam(qp), 'refreshModel') && this._router.currentState) {\n            this.refresh();\n            break;\n          }\n        }\n\n        return true;\n      },\n      finalizeQueryParamChange: function (params, finalParams, transition) {\n        if (this.fullRouteName !== 'application') {\n          return true;\n        }\n\n        // Transition object is absent for intermediate transitions.\n        if (!transition) {\n          return;\n        }\n\n        var handlerInfos = transition.state.handlerInfos;\n        var router = this._router;\n        var qpMeta = router._queryParamsFor(handlerInfos);\n        var changes = router._qpUpdates;\n        var replaceUrl = void 0;\n\n        (0, _utils.stashParamNames)(router, handlerInfos);\n\n        for (var i = 0; i < qpMeta.qps.length; ++i) {\n          var qp = qpMeta.qps[i];\n          var route = qp.route;\n          var controller = route.controller;\n          var presentKey = qp.urlKey in params && qp.urlKey;\n\n          // Do a reverse lookup to see if the changed query\n          // param URL key corresponds to a QP property on\n          // this controller.\n          var value = void 0,\n              svalue = void 0;\n          if (changes && qp.urlKey in changes) {\n            // Value updated in/before setupController\n            value = (0, _emberMetal.get)(controller, qp.prop);\n            svalue = route.serializeQueryParam(value, qp.urlKey, qp.type);\n          } else {\n            if (presentKey) {\n              svalue = params[presentKey];\n\n              if (svalue !== undefined) {\n                value = route.deserializeQueryParam(svalue, qp.urlKey, qp.type);\n              }\n            } else {\n              // No QP provided; use default value.\n              svalue = qp.serializedDefaultValue;\n              value = copyDefaultValue(qp.defaultValue);\n            }\n          }\n\n          controller._qpDelegate = (0, _emberMetal.get)(route, '_qp.states.inactive');\n\n          var thisQueryParamChanged = svalue !== qp.serializedValue;\n          if (thisQueryParamChanged) {\n            if (transition.queryParamsOnly && replaceUrl !== false) {\n              var options = route._optionsForQueryParam(qp);\n              var replaceConfigValue = (0, _emberMetal.get)(options, 'replace');\n              if (replaceConfigValue) {\n                replaceUrl = true;\n              } else if (replaceConfigValue === false) {\n                // Explicit pushState wins over any other replaceStates.\n                replaceUrl = false;\n              }\n            }\n\n            (0, _emberMetal.set)(controller, qp.prop, value);\n          }\n\n          // Stash current serialized value of controller.\n          qp.serializedValue = svalue;\n\n          var thisQueryParamHasDefaultValue = qp.serializedDefaultValue === svalue;\n          if (!thisQueryParamHasDefaultValue || transition._keepDefaultQueryParamValues) {\n            finalParams.push({\n              value: svalue,\n              visible: true,\n              key: presentKey || qp.urlKey\n            });\n          }\n        }\n\n        if (replaceUrl) {\n          transition.method('replace');\n        }\n\n        qpMeta.qps.forEach(function (qp) {\n          var routeQpMeta = (0, _emberMetal.get)(qp.route, '_qp');\n          var finalizedController = qp.route.controller;\n          finalizedController._qpDelegate = (0, _emberMetal.get)(routeQpMeta, 'states.active');\n        });\n\n        router._qpUpdates = null;\n      }\n    },\n\n    /**\n      This hook is executed when the router completely exits this route. It is\n      not executed when the model for the route changes.\n       @method deactivate\n      @since 1.0.0\n      @public\n    */\n    deactivate: K,\n\n    /**\n      This hook is executed when the router enters the route. It is not executed\n      when the model for the route changes.\n       @method activate\n      @since 1.0.0\n      @public\n    */\n    activate: K,\n\n    transitionTo: function (name, context) {\n      var _router;\n\n      // eslint-disable-line no-unused-vars\n      return (_router = this._router).transitionTo.apply(_router, (0, _utils.prefixRouteNameArg)(this, arguments));\n    },\n    intermediateTransitionTo: function () {\n      var _router2;\n\n      (_router2 = this._router).intermediateTransitionTo.apply(_router2, (0, _utils.prefixRouteNameArg)(this, arguments));\n    },\n    refresh: function () {\n      return this._router._routerMicrolib.refresh(this);\n    },\n    replaceWith: function () {\n      var _router3;\n\n      return (_router3 = this._router).replaceWith.apply(_router3, (0, _utils.prefixRouteNameArg)(this, arguments));\n    },\n    send: function () {\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      if (this._router && this._router._routerMicrolib || !(0, _emberDebug.isTesting)()) {\n        var _router4;\n\n        (_router4 = this._router).send.apply(_router4, args);\n      } else {\n        var name = args.shift();\n        var action = this.actions[name];\n        if (action) {\n          return action.apply(this, args);\n        }\n      }\n    },\n    setup: function (context, transition) {\n      var controller = void 0;\n\n      var controllerName = this.controllerName || this.routeName;\n      var definedController = this.controllerFor(controllerName, true);\n\n      if (definedController) {\n        controller = definedController;\n      } else {\n        controller = this.generateController(controllerName);\n      }\n\n      // Assign the route's controller so that it can more easily be\n      // referenced in action handlers. Side effects. Side effects everywhere.\n      if (!this.controller) {\n        var propNames = (0, _emberMetal.get)(this, '_qp.propertyNames');\n        addQueryParamsObservers(controller, propNames);\n        this.controller = controller;\n      }\n\n      var queryParams = (0, _emberMetal.get)(this, '_qp');\n\n      var states = queryParams.states;\n\n      controller._qpDelegate = states.allowOverrides;\n\n      if (transition) {\n        // Update the model dep values used to calculate cache keys.\n        (0, _utils.stashParamNames)(this._router, transition.state.handlerInfos);\n\n        var cache = this._bucketCache;\n        var params = transition.params;\n        var allParams = queryParams.propertyNames;\n\n        allParams.forEach(function (prop) {\n          var aQp = queryParams.map[prop];\n          aQp.values = params;\n\n          var cacheKey = (0, _utils.calculateCacheKey)(aQp.route.fullRouteName, aQp.parts, aQp.values);\n          var value = cache.lookup(cacheKey, prop, aQp.undecoratedDefaultValue);\n          (0, _emberMetal.set)(controller, prop, value);\n        });\n\n        var qpValues = getQueryParamsFor(this, transition.state);\n        (0, _emberMetal.setProperties)(controller, qpValues);\n      }\n\n      this.setupController(controller, context, transition);\n\n      if (this._environment.options.shouldRender) {\n        this.renderTemplate(controller, context);\n      }\n    },\n    _qpChanged: function (prop, value, qp) {\n      if (!qp) {\n        return;\n      }\n\n      // Update model-dep cache\n      var cache = this._bucketCache;\n      var cacheKey = (0, _utils.calculateCacheKey)(qp.route.fullRouteName, qp.parts, qp.values);\n      cache.stash(cacheKey, prop, value);\n    },\n\n\n    /**\n      This hook is the first of the route entry validation hooks\n      called when an attempt is made to transition into a route\n      or one of its children. It is called before `model` and\n      `afterModel`, and is appropriate for cases when:\n       1) A decision can be made to redirect elsewhere without\n         needing to resolve the model first.\n      2) Any async operations need to occur first before the\n         model is attempted to be resolved.\n       This hook is provided the current `transition` attempt\n      as a parameter, which can be used to `.abort()` the transition,\n      save it for a later `.retry()`, or retrieve values set\n      on it from a previous hook. You can also just call\n      `this.transitionTo` to another route to implicitly\n      abort the `transition`.\n       You can return a promise from this hook to pause the\n      transition until the promise resolves (or rejects). This could\n      be useful, for instance, for retrieving async code from\n      the server that is required to enter a route.\n       @method beforeModel\n      @param {Transition} transition\n      @return {any | Promise<any>} if the value returned from this hook is\n        a promise, the transition will pause until the transition\n        resolves. Otherwise, non-promise return values are not\n        utilized in any way.\n      @since 1.0.0\n      @public\n    */\n    beforeModel: K,\n\n    /**\n      This hook is called after this route's model has resolved.\n      It follows identical async/promise semantics to `beforeModel`\n      but is provided the route's resolved model in addition to\n      the `transition`, and is therefore suited to performing\n      logic that can only take place after the model has already\n      resolved.\n       ```app/routes/posts.js\n      import Route from '@ember/routing/route';\n       export default Route.extend({\n        afterModel(posts, transition) {\n          if (posts.get('length') === 1) {\n            this.transitionTo('post.show', posts.get('firstObject'));\n          }\n        }\n      });\n      ```\n       Refer to documentation for `beforeModel` for a description\n      of transition-pausing semantics when a promise is returned\n      from this hook.\n       @method afterModel\n      @param {Object} resolvedModel the value returned from `model`,\n        or its resolved value if it was a promise\n      @param {Transition} transition\n      @return {any | Promise<any>} if the value returned from this hook is\n        a promise, the transition will pause until the transition\n        resolves. Otherwise, non-promise return values are not\n        utilized in any way.\n      @since 1.0.0\n      @public\n     */\n    afterModel: K,\n\n    /**\n      A hook you can implement to optionally redirect to another route.\n       If you call `this.transitionTo` from inside of this hook, this route\n      will not be entered in favor of the other hook.\n       `redirect` and `afterModel` behave very similarly and are\n      called almost at the same time, but they have an important\n      distinction in the case that, from one of these hooks, a\n      redirect into a child route of this route occurs: redirects\n      from `afterModel` essentially invalidate the current attempt\n      to enter this route, and will result in this route's `beforeModel`,\n      `model`, and `afterModel` hooks being fired again within\n      the new, redirecting transition. Redirects that occur within\n      the `redirect` hook, on the other hand, will _not_ cause\n      these hooks to be fired again the second time around; in\n      other words, by the time the `redirect` hook has been called,\n      both the resolved model and attempted entry into this route\n      are considered to be fully validated.\n       @method redirect\n      @param {Object} model the model for this route\n      @param {Transition} transition the transition object associated with the current transition\n      @since 1.0.0\n      @public\n    */\n    redirect: K,\n\n    contextDidChange: function () {\n      this.currentModel = this.context;\n    },\n    model: function (params, transition) {\n      var name = void 0,\n          sawParams = void 0,\n          value = void 0;\n      var queryParams = (0, _emberMetal.get)(this, '_qp.map');\n\n      for (var prop in params) {\n        if (prop === 'queryParams' || queryParams && prop in queryParams) {\n          continue;\n        }\n\n        var match = prop.match(/^(.*)_id$/);\n        if (match !== null) {\n          name = match[1];\n          value = params[prop];\n        }\n        sawParams = true;\n      }\n\n      if (!name) {\n        if (sawParams) {\n          return (0, _emberRuntime.copy)(params);\n        } else {\n          if (transition.resolveIndex < 1) {\n            return;\n          }\n          return transition.state.handlerInfos[transition.resolveIndex - 1].context;\n        }\n      }\n\n      return this.findModel(name, value);\n    },\n    deserialize: function (params, transition) {\n      return this.model(this.paramsFor(this.routeName), transition);\n    },\n    findModel: function () {\n      var _get;\n\n      return (_get = (0, _emberMetal.get)(this, 'store')).find.apply(_get, arguments);\n    },\n\n\n    /**\n      Store property provides a hook for data persistence libraries to inject themselves.\n       By default, this store property provides the exact same functionality previously\n      in the model hook.\n       Currently, the required interface is:\n       `store.find(modelName, findArguments)`\n       @method store\n      @param {Object} store\n      @private\n    */\n    store: (0, _emberMetal.computed)(function () {\n      var owner = (0, _emberUtils.getOwner)(this);\n      var routeName = this.routeName;\n      var namespace = (0, _emberMetal.get)(this, '_router.namespace');\n\n      return {\n        find: function (name, value) {\n          var modelClass = owner.factoryFor('model:' + name);\n\n          (true && !(!!modelClass) && (0, _emberDebug.assert)('You used the dynamic segment ' + name + '_id in your route ' + routeName + ', but ' + namespace + '.' + _emberRuntime.String.classify(name) + ' did not exist and you did not override your route\\'s `model` hook.', !!modelClass));\n\n\n          if (!modelClass) {\n            return;\n          }\n\n          modelClass = modelClass.class;\n\n          (true && !(typeof modelClass.find === 'function') && (0, _emberDebug.assert)(_emberRuntime.String.classify(name) + ' has no method `find`.', typeof modelClass.find === 'function'));\n\n\n          return modelClass.find(value);\n        }\n      };\n    }),\n\n    /**\n      A hook you can implement to convert the route's model into parameters\n      for the URL.\n       ```app/router.js\n      // ...\n       Router.map(function() {\n        this.route('post', { path: '/posts/:post_id' });\n      });\n       ```\n       ```app/routes/post.js\n      import $ from 'jquery';\n      import Route from '@ember/routing/route';\n       export default Route.extend({\n        model(params) {\n          // the server returns `{ id: 12 }`\n          return $.getJSON('/posts/' + params.post_id);\n        },\n         serialize(model) {\n          // this will make the URL `/posts/12`\n          return { post_id: model.id };\n        }\n      });\n      ```\n       The default `serialize` method will insert the model's `id` into the\n      route's dynamic segment (in this case, `:post_id`) if the segment contains '_id'.\n      If the route has multiple dynamic segments or does not contain '_id', `serialize`\n      will return `getProperties(model, params)`\n       This method is called when `transitionTo` is called with a context\n      in order to populate the URL.\n       @method serialize\n      @param {Object} model the routes model\n      @param {Array} params an Array of parameter names for the current\n        route (in the example, `['post_id']`.\n      @return {Object} the serialized parameters\n      @since 1.0.0\n      @public\n    */\n    serialize: defaultSerialize,\n\n    setupController: function (controller, context, transition) {\n      // eslint-disable-line no-unused-vars\n      if (controller && context !== undefined) {\n        (0, _emberMetal.set)(controller, 'model', context);\n      }\n    },\n    controllerFor: function (name, _skipAssert) {\n      var owner = (0, _emberUtils.getOwner)(this);\n      var route = owner.lookup('route:' + name);\n      var controller = void 0;\n\n      if (route && route.controllerName) {\n        name = route.controllerName;\n      }\n\n      controller = owner.lookup('controller:' + name);\n\n      // NOTE: We're specifically checking that skipAssert is true, because according\n      //   to the old API the second parameter was model. We do not want people who\n      //   passed a model to skip the assertion.\n      (true && !(controller || _skipAssert === true) && (0, _emberDebug.assert)('The controller named \\'' + name + '\\' could not be found. Make sure that this route exists and has already been entered at least once. If you are accessing a controller not associated with a route, make sure the controller class is explicitly defined.', controller || _skipAssert === true));\n\n\n      return controller;\n    },\n    generateController: function (name) {\n      var owner = (0, _emberUtils.getOwner)(this);\n\n      return (0, _generate_controller.default)(owner, name);\n    },\n    modelFor: function (_name) {\n      var name = void 0;\n      var owner = (0, _emberUtils.getOwner)(this);\n      var transition = this._router ? this._router._routerMicrolib.activeTransition : null;\n\n      // Only change the route name when there is an active transition.\n      // Otherwise, use the passed in route name.\n      if (owner.routable && transition !== null) {\n        name = getEngineRouteName(owner, _name);\n      } else {\n        name = _name;\n      }\n\n      var route = owner.lookup('route:' + name);\n      // If we are mid-transition, we want to try and look up\n      // resolved parent contexts on the current transitionEvent.\n      if (transition !== null) {\n        var modelLookupName = route && route.routeName || name;\n        if (transition.resolvedModels.hasOwnProperty(modelLookupName)) {\n          return transition.resolvedModels[modelLookupName];\n        }\n      }\n\n      return route && route.currentModel;\n    },\n    renderTemplate: function (controller, model) {\n      // eslint-disable-line no-unused-vars\n      this.render();\n    },\n    render: function (_name, options) {\n      var name = void 0;\n      var isDefaultRender = arguments.length === 0;\n      if (!isDefaultRender) {\n        if (typeof _name === 'object' && !options) {\n          name = this.templateName || this.routeName;\n          options = _name;\n        } else {\n          (true && !(!(0, _emberMetal.isEmpty)(_name)) && (0, _emberDebug.assert)('The name in the given arguments is undefined or empty string', !(0, _emberMetal.isEmpty)(_name)));\n\n          name = _name;\n        }\n      }\n\n      var renderOptions = buildRenderOptions(this, isDefaultRender, name, options);\n      this.connections.push(renderOptions);\n      _emberMetal.run.once(this._router, '_setOutlets');\n    },\n    disconnectOutlet: function (options) {\n      var outletName = void 0;\n      var parentView = void 0;\n      if (options) {\n        if (typeof options === 'string') {\n          outletName = options;\n        } else {\n          outletName = options.outlet;\n          parentView = options.parentView ? options.parentView.replace(/\\//g, '.') : undefined;\n\n          (true && !(!('outlet' in options && options.outlet === undefined)) && (0, _emberDebug.assert)('You passed undefined as the outlet name.', !('outlet' in options && options.outlet === undefined)));\n        }\n      }\n\n      outletName = outletName || 'main';\n      this._disconnectOutlet(outletName, parentView);\n      var handlerInfos = this._router._routerMicrolib.currentHandlerInfos;\n      for (var i = 0; i < handlerInfos.length; i++) {\n        // This non-local state munging is sadly necessary to maintain\n        // backward compatibility with our existing semantics, which allow\n        // any route to disconnectOutlet things originally rendered by any\n        // other route. This should all get cut in 2.0.\n        handlerInfos[i].handler._disconnectOutlet(outletName, parentView);\n      }\n    },\n    _disconnectOutlet: function (outletName, parentView) {\n      var parent = parentRoute(this);\n      if (parent && parentView === parent.routeName) {\n        parentView = undefined;\n      }\n      for (var i = 0; i < this.connections.length; i++) {\n        var connection = this.connections[i];\n        if (connection.outlet === outletName && connection.into === parentView) {\n          // This neuters the disconnected outlet such that it doesn't\n          // render anything, but it leaves an entry in the outlet\n          // hierarchy so that any existing other renders that target it\n          // don't suddenly blow up. They will still stick themselves\n          // into its outlets, which won't render anywhere. All of this\n          // statefulness should get the machete in 2.0.\n          this.connections[i] = {\n            owner: connection.owner,\n            into: connection.into,\n            outlet: connection.outlet,\n            name: connection.name,\n            controller: undefined,\n            template: undefined\n          };\n          _emberMetal.run.once(this._router, '_setOutlets');\n        }\n      }\n    },\n    willDestroy: function () {\n      this.teardownViews();\n    },\n    teardownViews: function () {\n      if (this.connections && this.connections.length > 0) {\n        this.connections = [];\n        _emberMetal.run.once(this._router, '_setOutlets');\n      }\n    }\n  });\n\n  Route.reopenClass({\n    isRouteFactory: true\n  });\n\n  function parentRoute(route) {\n    var handlerInfo = handlerInfoFor(route, route._router._routerMicrolib.state.handlerInfos, -1);\n    return handlerInfo && handlerInfo.handler;\n  }\n\n  function handlerInfoFor(route, handlerInfos) {\n    var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n\n    if (!handlerInfos) {\n      return;\n    }\n\n    var current = void 0;\n    for (var i = 0; i < handlerInfos.length; i++) {\n      current = handlerInfos[i].handler;\n      if (current === route) {\n        return handlerInfos[i + offset];\n      }\n    }\n  }\n\n  function buildRenderOptions(route, isDefaultRender, _name, options) {\n    (true && !(isDefaultRender || !(options && 'outlet' in options && options.outlet === undefined)) && (0, _emberDebug.assert)('You passed undefined as the outlet name.', isDefaultRender || !(options && 'outlet' in options && options.outlet === undefined)));\n\n\n    var owner = (0, _emberUtils.getOwner)(route);\n    var name = void 0,\n        templateName = void 0,\n        into = void 0,\n        outlet = void 0,\n        controller = void 0,\n        model = void 0;\n    if (options) {\n      into = options.into && options.into.replace(/\\//g, '.');\n      outlet = options.outlet;\n      controller = options.controller;\n      model = options.model;\n    }\n    outlet = outlet || 'main';\n\n    if (isDefaultRender) {\n      name = route.routeName;\n      templateName = route.templateName || name;\n    } else {\n      name = _name.replace(/\\//g, '.');\n      templateName = name;\n    }\n\n    if (!controller) {\n      if (isDefaultRender) {\n        controller = route.controllerName || owner.lookup('controller:' + name);\n      } else {\n        controller = owner.lookup('controller:' + name) || route.controllerName || route.routeName;\n      }\n    }\n\n    if (typeof controller === 'string') {\n      var controllerName = controller;\n      controller = owner.lookup('controller:' + controllerName);\n      (true && !(isDefaultRender || controller) && (0, _emberDebug.assert)('You passed `controller: \\'' + controllerName + '\\'` into the `render` method, but no such controller could be found.', isDefaultRender || controller));\n    }\n\n    if (model) {\n      controller.set('model', model);\n    }\n\n    var template = owner.lookup('template:' + templateName);\n    (true && !(isDefaultRender || template) && (0, _emberDebug.assert)('Could not find \"' + templateName + '\" template, view, or component.', isDefaultRender || template));\n\n\n    var parent = void 0;\n    if (into && (parent = parentRoute(route)) && into === parent.routeName) {\n      into = undefined;\n    }\n\n    var renderOptions = {\n      owner: owner,\n      into: into,\n      outlet: outlet,\n      name: name,\n      controller: controller,\n      template: template || route._topLevelViewTemplate\n    };\n\n    if (true) {\n      var LOG_VIEW_LOOKUPS = (0, _emberMetal.get)(route._router, 'namespace.LOG_VIEW_LOOKUPS');\n      if (LOG_VIEW_LOOKUPS && !template) {\n        (0, _emberDebug.info)('Could not find \"' + name + '\" template. Nothing will be rendered', { fullName: 'template:' + name });\n      }\n    }\n\n    return renderOptions;\n  }\n\n  function getFullQueryParams(router, state) {\n    if (state.fullQueryParams) {\n      return state.fullQueryParams;\n    }\n\n    state.fullQueryParams = {};\n    (0, _emberUtils.assign)(state.fullQueryParams, state.queryParams);\n\n    router._deserializeQueryParams(state.handlerInfos, state.fullQueryParams);\n    return state.fullQueryParams;\n  }\n\n  function getQueryParamsFor(route, state) {\n    state.queryParamsFor = state.queryParamsFor || {};\n    var name = route.fullRouteName;\n\n    if (state.queryParamsFor[name]) {\n      return state.queryParamsFor[name];\n    }\n\n    var fullQueryParams = getFullQueryParams(route._router, state);\n\n    var params = state.queryParamsFor[name] = {};\n\n    // Copy over all the query params for this route/controller into params hash.\n    var qpMeta = (0, _emberMetal.get)(route, '_qp');\n    var qps = qpMeta.qps;\n    for (var i = 0; i < qps.length; ++i) {\n      // Put deserialized qp on params hash.\n      var qp = qps[i];\n\n      var qpValueWasPassedIn = qp.prop in fullQueryParams;\n      params[qp.prop] = qpValueWasPassedIn ? fullQueryParams[qp.prop] : copyDefaultValue(qp.defaultValue);\n    }\n\n    return params;\n  }\n\n  function copyDefaultValue(value) {\n    if (Array.isArray(value)) {\n      return (0, _emberRuntime.A)(value.slice());\n    }\n    return value;\n  }\n\n  /*\n    Merges all query parameters from a controller with those from\n    a route, returning a new object and avoiding any mutations to\n    the existing objects.\n  */\n  function mergeEachQueryParams(controllerQP, routeQP) {\n    var qps = {};\n    var keysAlreadyMergedOrSkippable = {\n      defaultValue: true,\n      type: true,\n      scope: true,\n      as: true\n    };\n\n    // first loop over all controller qps, merging them with any matching route qps\n    // into a new empty object to avoid mutating.\n    for (var cqpName in controllerQP) {\n      if (!controllerQP.hasOwnProperty(cqpName)) {\n        continue;\n      }\n\n      var newControllerParameterConfiguration = {};\n      (0, _emberUtils.assign)(newControllerParameterConfiguration, controllerQP[cqpName], routeQP[cqpName]);\n\n      qps[cqpName] = newControllerParameterConfiguration;\n\n      // allows us to skip this QP when we check route QPs.\n      keysAlreadyMergedOrSkippable[cqpName] = true;\n    }\n\n    // loop over all route qps, skipping those that were merged in the first pass\n    // because they also appear in controller qps\n    for (var rqpName in routeQP) {\n      if (!routeQP.hasOwnProperty(rqpName) || keysAlreadyMergedOrSkippable[rqpName]) {\n        continue;\n      }\n\n      var newRouteParameterConfiguration = {};\n      (0, _emberUtils.assign)(newRouteParameterConfiguration, routeQP[rqpName], controllerQP[rqpName]);\n      qps[rqpName] = newRouteParameterConfiguration;\n    }\n\n    return qps;\n  }\n\n  function addQueryParamsObservers(controller, propNames) {\n    propNames.forEach(function (prop) {\n      controller.addObserver(prop + '.[]', controller, controller._qpChanged);\n    });\n  }\n\n  function getEngineRouteName(engine, routeName) {\n    if (engine.routable) {\n      var prefix = engine.mountPoint;\n\n      if (routeName === 'application') {\n        return prefix;\n      } else {\n        return prefix + '.' + routeName;\n      }\n    }\n\n    return routeName;\n  }\n\n  exports.default = Route;\n});","enifed('ember-routing/system/router', ['exports', 'ember-utils', 'ember-console', 'ember-metal', 'ember-debug', 'ember-runtime', 'ember-routing/system/route', 'ember-routing/system/dsl', 'ember-routing/location/api', 'ember-routing/utils', 'ember-routing/system/router_state', 'router'], function (exports, _emberUtils, _emberConsole, _emberMetal, _emberDebug, _emberRuntime, _route, _dsl, _api, _utils, _router_state, _router) {\n  'use strict';\n\n  exports.triggerEvent = triggerEvent;\n\n\n  function K() {\n    return this;\n  }\n\n  /**\n  @module @ember/routing\n  */\n\n  var slice = Array.prototype.slice;\n\n\n  /**\n    The `EmberRouter` class manages the application state and URLs. Refer to\n    the [routing guide](https://emberjs.com/guides/routing/) for documentation.\n  \n    @class EmberRouter\n    @extends EmberObject\n    @uses Evented\n    @public\n  */\n  var EmberRouter = _emberRuntime.Object.extend(_emberRuntime.Evented, {\n    /**\n      The `location` property determines the type of URL's that your\n      application will use.\n       The following location types are currently available:\n       * `history` - use the browser's history API to make the URLs look just like any standard URL\n      * `hash` - use `#` to separate the server part of the URL from the Ember part: `/blog/#/posts/new`\n      * `none` - do not store the Ember URL in the actual browser URL (mainly used for testing)\n      * `auto` - use the best option based on browser capabilities: `history` if possible, then `hash` if possible, otherwise `none`\n       This value is defaulted to `auto` by the `locationType` setting of `/config/environment.js`\n       @property location\n      @default 'hash'\n      @see {Location}\n      @public\n    */\n    location: 'hash',\n\n    /**\n     Represents the URL of the root of the application, often '/'. This prefix is\n     assumed on all routes defined on this router.\n      @property rootURL\n     @default '/'\n     @public\n    */\n    rootURL: '/',\n\n    _initRouterJs: function () {\n      var routerMicrolib = this._routerMicrolib = new _router.default();\n      routerMicrolib.triggerEvent = triggerEvent.bind(this);\n\n      routerMicrolib._triggerWillChangeContext = K;\n      routerMicrolib._triggerWillLeave = K;\n\n      var dslCallbacks = this.constructor.dslCallbacks || [K];\n      var dsl = this._buildDSL();\n\n      dsl.route('application', { path: '/', resetNamespace: true, overrideNameAssertion: true }, function () {\n        for (var i = 0; i < dslCallbacks.length; i++) {\n          dslCallbacks[i].call(this);\n        }\n      });\n\n      if (true) {\n        if ((0, _emberMetal.get)(this, 'namespace.LOG_TRANSITIONS_INTERNAL')) {\n          routerMicrolib.log = _emberConsole.default.debug;\n        }\n      }\n\n      routerMicrolib.map(dsl.generate());\n    },\n    _buildDSL: function () {\n      var enableLoadingSubstates = this._hasModuleBasedResolver();\n      var options = { enableLoadingSubstates: enableLoadingSubstates };\n\n      var owner = (0, _emberUtils.getOwner)(this);\n      var router = this;\n\n      options.resolveRouteMap = function (name) {\n        return owner.factoryFor('route-map:' + name);\n      };\n\n      options.addRouteForEngine = function (name, engineInfo) {\n        if (!router._engineInfoByRoute[name]) {\n          router._engineInfoByRoute[name] = engineInfo;\n        }\n      };\n\n      return new _dsl.default(null, options);\n    },\n    init: function () {\n      this._super.apply(this, arguments);\n\n      this.currentURL = null;\n      this.currentRouteName = null;\n      this.currentPath = null;\n\n      this._qpCache = Object.create(null);\n      this._resetQueuedQueryParameterChanges();\n      this._handledErrors = new Set();\n      this._engineInstances = Object.create(null);\n      this._engineInfoByRoute = Object.create(null);\n    },\n    _resetQueuedQueryParameterChanges: function () {\n      this._queuedQPChanges = {};\n    },\n\n\n    /**\n      Represents the current URL.\n       @method url\n      @return {String} The current URL.\n      @private\n    */\n    url: (0, _emberMetal.computed)(function () {\n      return (0, _emberMetal.get)(this, 'location').getURL();\n    }),\n\n    _hasModuleBasedResolver: function () {\n      var owner = (0, _emberUtils.getOwner)(this);\n      if (!owner) {\n        return false;\n      }\n\n      var resolver = (0, _emberMetal.get)(owner, 'application.__registry__.resolver.moduleBasedResolver');\n      return !!resolver;\n    },\n    startRouting: function () {\n      var initialURL = (0, _emberMetal.get)(this, 'initialURL');\n\n      if (this.setupRouter()) {\n        if (initialURL === undefined) {\n          initialURL = (0, _emberMetal.get)(this, 'location').getURL();\n        }\n        var initialTransition = this.handleURL(initialURL);\n        if (initialTransition && initialTransition.error) {\n          throw initialTransition.error;\n        }\n      }\n    },\n    setupRouter: function () {\n      var _this = this;\n\n      this._initRouterJs();\n      this._setupLocation();\n\n      var location = (0, _emberMetal.get)(this, 'location');\n\n      // Allow the Location class to cancel the router setup while it refreshes\n      // the page\n      if ((0, _emberMetal.get)(location, 'cancelRouterSetup')) {\n        return false;\n      }\n\n      this._setupRouter(location);\n\n      location.onUpdateURL(function (url) {\n        _this.handleURL(url);\n      });\n\n      return true;\n    },\n    didTransition: function (infos) {\n      updatePaths(this);\n\n      this._cancelSlowTransitionTimer();\n\n      this.notifyPropertyChange('url');\n      this.set('currentState', this.targetState);\n\n      // Put this in the runloop so url will be accurate. Seems\n      // less surprising than didTransition being out of sync.\n      _emberMetal.run.once(this, this.trigger, 'didTransition');\n\n      if (true) {\n        if ((0, _emberMetal.get)(this, 'namespace').LOG_TRANSITIONS) {\n          _emberConsole.default.log('Transitioned into \\'' + EmberRouter._routePath(infos) + '\\'');\n        }\n      }\n    },\n    _setOutlets: function () {\n      // This is triggered async during Route#willDestroy.\n      // If the router is also being destroyed we do not want to\n      // to create another this._toplevelView (and leak the renderer)\n      if (this.isDestroying || this.isDestroyed) {\n        return;\n      }\n\n      var handlerInfos = this._routerMicrolib.currentHandlerInfos;\n      var route = void 0;\n      var defaultParentState = void 0;\n      var liveRoutes = null;\n\n      if (!handlerInfos) {\n        return;\n      }\n\n      for (var i = 0; i < handlerInfos.length; i++) {\n        route = handlerInfos[i].handler;\n        var connections = route.connections;\n        var ownState = void 0;\n        for (var j = 0; j < connections.length; j++) {\n          var appended = appendLiveRoute(liveRoutes, defaultParentState, connections[j]);\n          liveRoutes = appended.liveRoutes;\n          if (appended.ownState.render.name === route.routeName || appended.ownState.render.outlet === 'main') {\n            ownState = appended.ownState;\n          }\n        }\n        if (connections.length === 0) {\n          ownState = representEmptyRoute(liveRoutes, defaultParentState, route);\n        }\n        defaultParentState = ownState;\n      }\n\n      // when a transitionTo happens after the validation phase\n      // during the initial transition _setOutlets is called\n      // when no routes are active. However, it will get called\n      // again with the correct values during the next turn of\n      // the runloop\n      if (!liveRoutes) {\n        return;\n      }\n\n      if (!this._toplevelView) {\n        var owner = (0, _emberUtils.getOwner)(this);\n        var OutletView = owner.factoryFor('view:-outlet');\n        this._toplevelView = OutletView.create();\n        this._toplevelView.setOutletState(liveRoutes);\n        var instance = owner.lookup('-application-instance:main');\n        instance.didCreateRootView(this._toplevelView);\n      } else {\n        this._toplevelView.setOutletState(liveRoutes);\n      }\n    },\n    willTransition: function (oldInfos, newInfos, transition) {\n      _emberMetal.run.once(this, this.trigger, 'willTransition', transition);\n\n      if (true) {\n        if ((0, _emberMetal.get)(this, 'namespace').LOG_TRANSITIONS) {\n          _emberConsole.default.log('Preparing to transition from \\'' + EmberRouter._routePath(oldInfos) + '\\' to \\'' + EmberRouter._routePath(newInfos) + '\\'');\n        }\n      }\n    },\n    handleURL: function (url) {\n      // Until we have an ember-idiomatic way of accessing #hashes, we need to\n      // remove it because router.js doesn't know how to handle it.\n      var _url = url.split(/#(.+)?/)[0];\n      return this._doURLTransition('handleURL', _url);\n    },\n    _doURLTransition: function (routerJsMethod, url) {\n      var transition = this._routerMicrolib[routerJsMethod](url || '/');\n      didBeginTransition(transition, this);\n      return transition;\n    },\n    transitionTo: function () {\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      if ((0, _utils.resemblesURL)(args[0])) {\n        return this._doURLTransition('transitionTo', args[0]);\n      }\n\n      var _extractRouteArgs = (0, _utils.extractRouteArgs)(args),\n          routeName = _extractRouteArgs.routeName,\n          models = _extractRouteArgs.models,\n          queryParams = _extractRouteArgs.queryParams;\n\n      return this._doTransition(routeName, models, queryParams);\n    },\n    intermediateTransitionTo: function () {\n      var _routerMicrolib;\n\n      (_routerMicrolib = this._routerMicrolib).intermediateTransitionTo.apply(_routerMicrolib, arguments);\n\n      updatePaths(this);\n\n      if (true) {\n        var infos = this._routerMicrolib.currentHandlerInfos;\n        if ((0, _emberMetal.get)(this, 'namespace').LOG_TRANSITIONS) {\n          _emberConsole.default.log('Intermediate-transitioned into \\'' + EmberRouter._routePath(infos) + '\\'');\n        }\n      }\n    },\n    replaceWith: function () {\n      return this.transitionTo.apply(this, arguments).method('replace');\n    },\n    generate: function () {\n      var _routerMicrolib2;\n\n      var url = (_routerMicrolib2 = this._routerMicrolib).generate.apply(_routerMicrolib2, arguments);\n      return this.location.formatURL(url);\n    },\n    isActive: function () {\n      var _routerMicrolib3;\n\n      return (_routerMicrolib3 = this._routerMicrolib).isActive.apply(_routerMicrolib3, arguments);\n    },\n    isActiveIntent: function (routeName, models, queryParams) {\n      return this.currentState.isActiveIntent(routeName, models, queryParams);\n    },\n    send: function () {\n      var _routerMicrolib4;\n\n      /*name, context*/\n      (_routerMicrolib4 = this._routerMicrolib).trigger.apply(_routerMicrolib4, arguments);\n    },\n    hasRoute: function (route) {\n      return this._routerMicrolib.hasRoute(route);\n    },\n    reset: function () {\n      if (this._routerMicrolib) {\n        this._routerMicrolib.reset();\n      }\n    },\n    willDestroy: function () {\n      if (this._toplevelView) {\n        this._toplevelView.destroy();\n        this._toplevelView = null;\n      }\n\n      this._super.apply(this, arguments);\n\n      this.reset();\n\n      var instances = this._engineInstances;\n      for (var name in instances) {\n        for (var id in instances[name]) {\n          (0, _emberMetal.run)(instances[name][id], 'destroy');\n        }\n      }\n    },\n    _activeQPChanged: function (queryParameterName, newValue) {\n      this._queuedQPChanges[queryParameterName] = newValue;\n      _emberMetal.run.once(this, this._fireQueryParamTransition);\n    },\n    _updatingQPChanged: function (queryParameterName) {\n      if (!this._qpUpdates) {\n        this._qpUpdates = {};\n      }\n      this._qpUpdates[queryParameterName] = true;\n    },\n    _fireQueryParamTransition: function () {\n      this.transitionTo({ queryParams: this._queuedQPChanges });\n      this._resetQueuedQueryParameterChanges();\n    },\n    _setupLocation: function () {\n      var location = (0, _emberMetal.get)(this, 'location');\n      var rootURL = (0, _emberMetal.get)(this, 'rootURL');\n      var owner = (0, _emberUtils.getOwner)(this);\n\n      if ('string' === typeof location && owner) {\n        var resolvedLocation = owner.lookup('location:' + location);\n\n        if (resolvedLocation !== undefined) {\n          location = (0, _emberMetal.set)(this, 'location', resolvedLocation);\n        } else {\n          // Allow for deprecated registration of custom location API's\n          var options = {\n            implementation: location\n          };\n\n          location = (0, _emberMetal.set)(this, 'location', _api.default.create(options));\n        }\n      }\n\n      if (location !== null && typeof location === 'object') {\n        if (rootURL) {\n          (0, _emberMetal.set)(location, 'rootURL', rootURL);\n        }\n\n        // Allow the location to do any feature detection, such as AutoLocation\n        // detecting history support. This gives it a chance to set its\n        // `cancelRouterSetup` property which aborts routing.\n        if (typeof location.detect === 'function') {\n          location.detect();\n        }\n\n        // ensure that initState is called AFTER the rootURL is set on\n        // the location instance\n        if (typeof location.initState === 'function') {\n          location.initState();\n        }\n      }\n    },\n    _getHandlerFunction: function () {\n      var _this2 = this;\n\n      var seen = Object.create(null);\n      var owner = (0, _emberUtils.getOwner)(this);\n\n      return function (name) {\n        var routeName = name;\n        var routeOwner = owner;\n        var engineInfo = _this2._engineInfoByRoute[routeName];\n\n        if (engineInfo) {\n          var engineInstance = _this2._getEngineInstance(engineInfo);\n\n          routeOwner = engineInstance;\n          routeName = engineInfo.localFullName;\n        }\n\n        var fullRouteName = 'route:' + routeName;\n\n        var handler = routeOwner.lookup(fullRouteName);\n\n        if (seen[name]) {\n          return handler;\n        }\n\n        seen[name] = true;\n\n        if (!handler) {\n          var DefaultRoute = routeOwner.factoryFor('route:basic').class;\n          routeOwner.register(fullRouteName, DefaultRoute.extend());\n          handler = routeOwner.lookup(fullRouteName);\n\n          if (true) {\n            if ((0, _emberMetal.get)(_this2, 'namespace.LOG_ACTIVE_GENERATION')) {\n              (0, _emberDebug.info)('generated -> ' + fullRouteName, { fullName: fullRouteName });\n            }\n          }\n        }\n\n        handler._setRouteName(routeName);\n\n        if (engineInfo && !(0, _route.hasDefaultSerialize)(handler)) {\n          throw new Error('Defining a custom serialize method on an Engine route is not supported.');\n        }\n\n        return handler;\n      };\n    },\n    _getSerializerFunction: function () {\n      var _this3 = this;\n\n      return function (name) {\n        var engineInfo = _this3._engineInfoByRoute[name];\n\n        // If this is not an Engine route, we fall back to the handler for serialization\n        if (!engineInfo) {\n          return;\n        }\n\n        return engineInfo.serializeMethod || _route.defaultSerialize;\n      };\n    },\n    _setupRouter: function (location) {\n      var _this4 = this;\n\n      var lastURL = void 0;\n      var routerMicrolib = this._routerMicrolib;\n\n      routerMicrolib.getHandler = this._getHandlerFunction();\n      routerMicrolib.getSerializer = this._getSerializerFunction();\n\n      var doUpdateURL = function () {\n        location.setURL(lastURL);\n        (0, _emberMetal.set)(_this4, 'currentURL', lastURL);\n      };\n\n      routerMicrolib.updateURL = function (path) {\n        lastURL = path;\n        _emberMetal.run.once(doUpdateURL);\n      };\n\n      if (location.replaceURL) {\n        var doReplaceURL = function () {\n          location.replaceURL(lastURL);\n          (0, _emberMetal.set)(_this4, 'currentURL', lastURL);\n        };\n\n        routerMicrolib.replaceURL = function (path) {\n          lastURL = path;\n          _emberMetal.run.once(doReplaceURL);\n        };\n      }\n\n      routerMicrolib.didTransition = function (infos) {\n        _this4.didTransition(infos);\n      };\n\n      routerMicrolib.willTransition = function (oldInfos, newInfos, transition) {\n        _this4.willTransition(oldInfos, newInfos, transition);\n      };\n    },\n    _serializeQueryParams: function (handlerInfos, queryParams) {\n      var _this5 = this;\n\n      forEachQueryParam(this, handlerInfos, queryParams, function (key, value, qp) {\n        if (qp) {\n          delete queryParams[key];\n          queryParams[qp.urlKey] = qp.route.serializeQueryParam(value, qp.urlKey, qp.type);\n        } else if (value === undefined) {\n          return; // We don't serialize undefined values\n        } else {\n          queryParams[key] = _this5._serializeQueryParam(value, (0, _emberRuntime.typeOf)(value));\n        }\n      });\n    },\n    _serializeQueryParam: function (value, type) {\n      if (value === null || value === undefined) {\n        return value;\n      } else if (type === 'array') {\n        return JSON.stringify(value);\n      }\n\n      return '' + value;\n    },\n    _deserializeQueryParams: function (handlerInfos, queryParams) {\n      forEachQueryParam(this, handlerInfos, queryParams, function (key, value, qp) {\n        // If we don't have QP meta info for a given key, then we do nothing\n        // because all values will be treated as strings\n        if (qp) {\n          delete queryParams[key];\n          queryParams[qp.prop] = qp.route.deserializeQueryParam(value, qp.urlKey, qp.type);\n        }\n      });\n    },\n    _deserializeQueryParam: function (value, defaultType) {\n      if (value === null || value === undefined) {\n        return value;\n      } else if (defaultType === 'boolean') {\n        return value === 'true';\n      } else if (defaultType === 'number') {\n        return Number(value).valueOf();\n      } else if (defaultType === 'array') {\n        return (0, _emberRuntime.A)(JSON.parse(value));\n      }\n      return value;\n    },\n    _pruneDefaultQueryParamValues: function (handlerInfos, queryParams) {\n      var qps = this._queryParamsFor(handlerInfos);\n      for (var key in queryParams) {\n        var qp = qps.map[key];\n        if (qp && qp.serializedDefaultValue === queryParams[key]) {\n          delete queryParams[key];\n        }\n      }\n    },\n    _doTransition: function (_targetRouteName, models, _queryParams, _keepDefaultQueryParamValues) {\n      var _routerMicrolib5;\n\n      var targetRouteName = _targetRouteName || (0, _utils.getActiveTargetName)(this._routerMicrolib);\n      (true && !(targetRouteName && this._routerMicrolib.hasRoute(targetRouteName)) && (0, _emberDebug.assert)('The route ' + targetRouteName + ' was not found', targetRouteName && this._routerMicrolib.hasRoute(targetRouteName)));\n\n\n      var queryParams = {};\n\n      this._processActiveTransitionQueryParams(targetRouteName, models, queryParams, _queryParams);\n\n      (0, _emberUtils.assign)(queryParams, _queryParams);\n      this._prepareQueryParams(targetRouteName, models, queryParams, _keepDefaultQueryParamValues);\n\n      var transition = (_routerMicrolib5 = this._routerMicrolib).transitionTo.apply(_routerMicrolib5, [targetRouteName].concat(models, [{ queryParams: queryParams }]));\n\n      didBeginTransition(transition, this);\n\n      return transition;\n    },\n    _processActiveTransitionQueryParams: function (targetRouteName, models, queryParams, _queryParams) {\n      // merge in any queryParams from the active transition which could include\n      // queryParams from the url on initial load.\n      if (!this._routerMicrolib.activeTransition) {\n        return;\n      }\n\n      var unchangedQPs = {};\n      var qpUpdates = this._qpUpdates || {};\n      var params = this._routerMicrolib.activeTransition.queryParams;\n      for (var key in params) {\n        if (!qpUpdates[key]) {\n          unchangedQPs[key] = params[key];\n        }\n      }\n\n      // We need to fully scope queryParams so that we can create one object\n      // that represents both passed-in queryParams and ones that aren't changed\n      // from the active transition.\n      this._fullyScopeQueryParams(targetRouteName, models, _queryParams);\n      this._fullyScopeQueryParams(targetRouteName, models, unchangedQPs);\n      (0, _emberUtils.assign)(queryParams, unchangedQPs);\n    },\n    _prepareQueryParams: function (targetRouteName, models, queryParams, _fromRouterService) {\n      var state = calculatePostTransitionState(this, targetRouteName, models);\n      this._hydrateUnsuppliedQueryParams(state, queryParams, _fromRouterService);\n      this._serializeQueryParams(state.handlerInfos, queryParams);\n\n      if (!_fromRouterService) {\n        this._pruneDefaultQueryParamValues(state.handlerInfos, queryParams);\n      }\n    },\n    _getQPMeta: function (handlerInfo) {\n      var route = handlerInfo.handler;\n      return route && (0, _emberMetal.get)(route, '_qp');\n    },\n    _queryParamsFor: function (handlerInfos) {\n      var handlerInfoLength = handlerInfos.length;\n      var leafRouteName = handlerInfos[handlerInfoLength - 1].name;\n      var cached = this._qpCache[leafRouteName];\n      if (cached) {\n        return cached;\n      }\n\n      var shouldCache = true;\n      var qpsByUrlKey = {};\n      var map = {};\n      var qps = [];\n\n      for (var i = 0; i < handlerInfoLength; ++i) {\n        var qpMeta = this._getQPMeta(handlerInfos[i]);\n\n        if (!qpMeta) {\n          shouldCache = false;\n          continue;\n        }\n\n        // Loop over each QP to make sure we don't have any collisions by urlKey\n        for (var _i = 0; _i < qpMeta.qps.length; _i++) {\n          var qp = qpMeta.qps[_i];\n          var urlKey = qp.urlKey;\n          var qpOther = qpsByUrlKey[urlKey];\n\n          if (qpOther && qpOther.controllerName !== qp.controllerName) {\n            var otherQP = qpsByUrlKey[urlKey];\n            (true && !(false) && (0, _emberDebug.assert)('You\\'re not allowed to have more than one controller property map to the same query param key, but both `' + otherQP.scopedPropertyName + '` and `' + qp.scopedPropertyName + '` map to `' + urlKey + '`. You can fix this by mapping one of the controller properties to a different query param key via the `as` config option, e.g. `' + otherQP.prop + ': { as: \\'other-' + otherQP.prop + '\\' }`', false));\n          }\n\n          qpsByUrlKey[urlKey] = qp;\n          qps.push(qp);\n        }\n\n        (0, _emberUtils.assign)(map, qpMeta.map);\n      }\n\n      var finalQPMeta = { qps: qps, map: map };\n\n      if (shouldCache) {\n        this._qpCache[leafRouteName] = finalQPMeta;\n      }\n\n      return finalQPMeta;\n    },\n    _fullyScopeQueryParams: function (leafRouteName, contexts, queryParams) {\n      var state = calculatePostTransitionState(this, leafRouteName, contexts);\n      var handlerInfos = state.handlerInfos;\n\n      for (var i = 0, len = handlerInfos.length; i < len; ++i) {\n        var qpMeta = this._getQPMeta(handlerInfos[i]);\n\n        if (!qpMeta) {\n          continue;\n        }\n\n        for (var j = 0, qpLen = qpMeta.qps.length; j < qpLen; ++j) {\n          var qp = qpMeta.qps[j];\n\n          var presentProp = qp.prop in queryParams && qp.prop || qp.scopedPropertyName in queryParams && qp.scopedPropertyName || qp.urlKey in queryParams && qp.urlKey;\n\n          if (presentProp) {\n            if (presentProp !== qp.scopedPropertyName) {\n              queryParams[qp.scopedPropertyName] = queryParams[presentProp];\n              delete queryParams[presentProp];\n            }\n          }\n        }\n      }\n    },\n    _hydrateUnsuppliedQueryParams: function (state, queryParams, _fromRouterService) {\n      var handlerInfos = state.handlerInfos;\n      var appCache = this._bucketCache;\n\n      for (var i = 0; i < handlerInfos.length; ++i) {\n        var qpMeta = this._getQPMeta(handlerInfos[i]);\n\n        if (!qpMeta) {\n          continue;\n        }\n\n        for (var j = 0, qpLen = qpMeta.qps.length; j < qpLen; ++j) {\n          var qp = qpMeta.qps[j];\n\n          var presentProp = qp.prop in queryParams && qp.prop || qp.scopedPropertyName in queryParams && qp.scopedPropertyName || qp.urlKey in queryParams && qp.urlKey;\n\n          (true && !(function () {\n            if (qp.urlKey === presentProp) {\n              return true;\n            }\n\n            if (_fromRouterService && presentProp !== false) {\n              return false;\n            }\n\n            return true;\n          }()) && (0, _emberDebug.assert)('You passed the `' + presentProp + '` query parameter during a transition into ' + qp.route.routeName + ', please update to ' + qp.urlKey, function () {\n            if (qp.urlKey === presentProp) {\n              return true;\n            }if (_fromRouterService && presentProp !== false) {\n              return false;\n            }return true;\n          }()));\n\n\n          if (presentProp) {\n            if (presentProp !== qp.scopedPropertyName) {\n              queryParams[qp.scopedPropertyName] = queryParams[presentProp];\n              delete queryParams[presentProp];\n            }\n          } else {\n            var cacheKey = (0, _utils.calculateCacheKey)(qp.route.fullRouteName, qp.parts, state.params);\n            queryParams[qp.scopedPropertyName] = appCache.lookup(cacheKey, qp.prop, qp.defaultValue);\n          }\n        }\n      }\n    },\n    _scheduleLoadingEvent: function (transition, originRoute) {\n      this._cancelSlowTransitionTimer();\n      this._slowTransitionTimer = _emberMetal.run.scheduleOnce('routerTransitions', this, '_handleSlowTransition', transition, originRoute);\n    },\n\n\n    currentState: null,\n    targetState: null,\n\n    _handleSlowTransition: function (transition, originRoute) {\n      if (!this._routerMicrolib.activeTransition) {\n        // Don't fire an event if we've since moved on from\n        // the transition that put us in a loading state.\n        return;\n      }\n\n      this.set('targetState', _router_state.default.create({\n        emberRouter: this,\n        routerJs: this._routerMicrolib,\n        routerJsState: this._routerMicrolib.activeTransition.state\n      }));\n\n      transition.trigger(true, 'loading', transition, originRoute);\n    },\n    _cancelSlowTransitionTimer: function () {\n      if (this._slowTransitionTimer) {\n        _emberMetal.run.cancel(this._slowTransitionTimer);\n      }\n      this._slowTransitionTimer = null;\n    },\n    _markErrorAsHandled: function (error) {\n      this._handledErrors.add(error);\n    },\n    _isErrorHandled: function (error) {\n      return this._handledErrors.has(error);\n    },\n    _clearHandledError: function (error) {\n      this._handledErrors.delete(error);\n    },\n    _getEngineInstance: function (_ref) {\n      var name = _ref.name,\n          instanceId = _ref.instanceId,\n          mountPoint = _ref.mountPoint;\n\n      var engineInstances = this._engineInstances;\n\n      if (!engineInstances[name]) {\n        engineInstances[name] = Object.create(null);\n      }\n\n      var engineInstance = engineInstances[name][instanceId];\n\n      if (!engineInstance) {\n        var owner = (0, _emberUtils.getOwner)(this);\n\n        (true && !(owner.hasRegistration('engine:' + name)) && (0, _emberDebug.assert)('You attempted to mount the engine \\'' + name + '\\' in your router map, but the engine can not be found.', owner.hasRegistration('engine:' + name)));\n\n\n        engineInstance = owner.buildChildEngineInstance(name, {\n          routable: true,\n          mountPoint: mountPoint\n        });\n\n        engineInstance.boot();\n\n        engineInstances[name][instanceId] = engineInstance;\n      }\n\n      return engineInstance;\n    }\n  });\n\n  /*\n    Helper function for iterating over routes in a set of handlerInfos that are\n    at or above the given origin route. Example: if `originRoute` === 'foo.bar'\n    and the handlerInfos given were for 'foo.bar.baz', then the given callback\n    will be invoked with the routes for 'foo.bar', 'foo', and 'application'\n    individually.\n  \n    If the callback returns anything other than `true`, then iteration will stop.\n  \n    @private\n    @param {Route} originRoute\n    @param {Array<HandlerInfo>} handlerInfos\n    @param {Function} callback\n    @return {Void}\n   */\n  function forEachRouteAbove(handlerInfos, callback) {\n\n    for (var i = handlerInfos.length - 1; i >= 0; --i) {\n      var handlerInfo = handlerInfos[i];\n      var route = handlerInfo.handler;\n\n      // handlerInfo.handler being `undefined` generally means either:\n      //\n      // 1. an error occurred during creation of the route in question\n      // 2. the route is across an async boundary (e.g. within an engine)\n      //\n      // In both of these cases, we cannot invoke the callback on that specific\n      // route, because it just doesn't exist...\n      if (route === undefined) {\n        continue;\n      }\n\n      if (callback(route, handlerInfo) !== true) {\n        return;\n      }\n    }\n  }\n\n  // These get invoked when an action bubbles above ApplicationRoute\n  // and are not meant to be overridable.\n  var defaultActionHandlers = {\n    willResolveModel: function (handlerInfos, transition, originRoute) {\n      this._scheduleLoadingEvent(transition, originRoute);\n    },\n    error: function (handlerInfos, error, transition) {\n      var router = this;\n\n      var handlerInfoWithError = handlerInfos[handlerInfos.length - 1];\n\n      forEachRouteAbove(handlerInfos, function (route, handlerInfo) {\n        // We don't check the leaf most handlerInfo since that would\n        // technically be below where we're at in the route hierarchy.\n        if (handlerInfo !== handlerInfoWithError) {\n          // Check for the existence of an 'error' route.\n          var errorRouteName = findRouteStateName(route, 'error');\n          if (errorRouteName) {\n            router._markErrorAsHandled(error);\n            router.intermediateTransitionTo(errorRouteName, error);\n            return false;\n          }\n        }\n\n        // Check for an 'error' substate route\n        var errorSubstateName = findRouteSubstateName(route, 'error');\n        if (errorSubstateName) {\n          router._markErrorAsHandled(error);\n          router.intermediateTransitionTo(errorSubstateName, error);\n          return false;\n        }\n\n        return true;\n      });\n\n      logError(error, 'Error while processing route: ' + transition.targetName);\n    },\n    loading: function (handlerInfos, transition) {\n      var router = this;\n\n      var handlerInfoWithSlowLoading = handlerInfos[handlerInfos.length - 1];\n\n      forEachRouteAbove(handlerInfos, function (route, handlerInfo) {\n        // We don't check the leaf most handlerInfo since that would\n        // technically be below where we're at in the route hierarchy.\n        if (handlerInfo !== handlerInfoWithSlowLoading) {\n          // Check for the existence of a 'loading' route.\n          var loadingRouteName = findRouteStateName(route, 'loading');\n          if (loadingRouteName) {\n            router.intermediateTransitionTo(loadingRouteName);\n            return false;\n          }\n        }\n\n        // Check for loading substate\n        var loadingSubstateName = findRouteSubstateName(route, 'loading');\n        if (loadingSubstateName) {\n          router.intermediateTransitionTo(loadingSubstateName);\n          return false;\n        }\n\n        // Don't bubble above pivot route.\n        return transition.pivotHandler !== route;\n      });\n    }\n  };\n\n  function logError(_error, initialMessage) {\n    var errorArgs = [];\n    var error = void 0;\n    if (_error && typeof _error === 'object' && typeof _error.errorThrown === 'object') {\n      error = _error.errorThrown;\n    } else {\n      error = _error;\n    }\n\n    if (initialMessage) {\n      errorArgs.push(initialMessage);\n    }\n\n    if (error) {\n      if (error.message) {\n        errorArgs.push(error.message);\n      }\n      if (error.stack) {\n        errorArgs.push(error.stack);\n      }\n\n      if (typeof error === 'string') {\n        errorArgs.push(error);\n      }\n    }\n\n    _emberConsole.default.error.apply(this, errorArgs);\n  }\n\n  /**\n    Finds the name of the substate route if it exists for the given route. A\n    substate route is of the form `route_state`, such as `foo_loading`.\n  \n    @private\n    @param {Route} route\n    @param {String} state\n    @return {String}\n  */\n  function findRouteSubstateName(route, state) {\n    var owner = (0, _emberUtils.getOwner)(route);\n    var routeName = route.routeName,\n        fullRouteName = route.fullRouteName,\n        router = route._router;\n\n\n    var substateName = routeName + '_' + state;\n    var substateNameFull = fullRouteName + '_' + state;\n\n    return routeHasBeenDefined(owner, router, substateName, substateNameFull) ? substateNameFull : '';\n  }\n\n  /**\n    Finds the name of the state route if it exists for the given route. A state\n    route is of the form `route.state`, such as `foo.loading`. Properly Handles\n    `application` named routes.\n  \n    @private\n    @param {Route} route\n    @param {String} state\n    @return {String}\n  */\n  function findRouteStateName(route, state) {\n    var owner = (0, _emberUtils.getOwner)(route);\n    var routeName = route.routeName,\n        fullRouteName = route.fullRouteName,\n        router = route._router;\n\n\n    var stateName = routeName === 'application' ? state : routeName + '.' + state;\n    var stateNameFull = fullRouteName === 'application' ? state : fullRouteName + '.' + state;\n\n    return routeHasBeenDefined(owner, router, stateName, stateNameFull) ? stateNameFull : '';\n  }\n\n  /**\n    Determines whether or not a route has been defined by checking that the route\n    is in the Router's map and the owner has a registration for that route.\n  \n    @private\n    @param {Owner} owner\n    @param {Router} router\n    @param {String} localName\n    @param {String} fullName\n    @return {Boolean}\n  */\n  function routeHasBeenDefined(owner, router, localName, fullName) {\n    var routerHasRoute = router.hasRoute(fullName);\n    var ownerHasRoute = owner.hasRegistration('template:' + localName) || owner.hasRegistration('route:' + localName);\n    return routerHasRoute && ownerHasRoute;\n  }\n\n  function triggerEvent(handlerInfos, ignoreFailure, args) {\n    var name = args.shift();\n\n    if (!handlerInfos) {\n      if (ignoreFailure) {\n        return;\n      }\n      throw new _emberDebug.Error('Can\\'t trigger action \\'' + name + '\\' because your app hasn\\'t finished transitioning into its first route. To trigger an action on destination routes during a transition, you can call `.send()` on the `Transition` object passed to the `model/beforeModel/afterModel` hooks.');\n    }\n\n    var eventWasHandled = false;\n    var handlerInfo = void 0,\n        handler = void 0,\n        actionHandler = void 0;\n\n    for (var i = handlerInfos.length - 1; i >= 0; i--) {\n      handlerInfo = handlerInfos[i];\n      handler = handlerInfo.handler;\n      actionHandler = handler && handler.actions && handler.actions[name];\n      if (actionHandler) {\n        if (actionHandler.apply(handler, args) === true) {\n          eventWasHandled = true;\n        } else {\n          // Should only hit here if a non-bubbling error action is triggered on a route.\n          if (name === 'error') {\n            handler._router._markErrorAsHandled(args[0]);\n          }\n          return;\n        }\n      }\n    }\n\n    var defaultHandler = defaultActionHandlers[name];\n    if (defaultHandler) {\n      defaultHandler.apply(this, [handlerInfos].concat(args));\n      return;\n    }\n\n    if (!eventWasHandled && !ignoreFailure) {\n      throw new _emberDebug.Error('Nothing handled the action \\'' + name + '\\'. If you did handle the action, this error can be caused by returning true from an action handler in a controller, causing the action to bubble.');\n    }\n  }\n\n  function calculatePostTransitionState(emberRouter, leafRouteName, contexts) {\n    var state = emberRouter._routerMicrolib.applyIntent(leafRouteName, contexts);\n    var handlerInfos = state.handlerInfos,\n        params = state.params;\n\n\n    for (var i = 0; i < handlerInfos.length; ++i) {\n      var handlerInfo = handlerInfos[i];\n\n      // If the handlerInfo is not resolved, we serialize the context into params\n      if (!handlerInfo.isResolved) {\n        params[handlerInfo.name] = handlerInfo.serialize(handlerInfo.context);\n      } else {\n        params[handlerInfo.name] = handlerInfo.params;\n      }\n    }\n    return state;\n  }\n\n  function updatePaths(router) {\n    var infos = router._routerMicrolib.currentHandlerInfos;\n    if (infos.length === 0) {\n      return;\n    }\n\n    var path = EmberRouter._routePath(infos);\n    var currentRouteName = infos[infos.length - 1].name;\n    var currentURL = router.get('location').getURL();\n\n    (0, _emberMetal.set)(router, 'currentPath', path);\n    (0, _emberMetal.set)(router, 'currentRouteName', currentRouteName);\n    (0, _emberMetal.set)(router, 'currentURL', currentURL);\n\n    var appController = (0, _emberUtils.getOwner)(router).lookup('controller:application');\n\n    if (!appController) {\n      // appController might not exist when top-level loading/error\n      // substates have been entered since ApplicationRoute hasn't\n      // actually been entered at that point.\n      return;\n    }\n\n    if (!('currentPath' in appController)) {\n      (0, _emberMetal.defineProperty)(appController, 'currentPath');\n    }\n\n    (0, _emberMetal.set)(appController, 'currentPath', path);\n\n    if (!('currentRouteName' in appController)) {\n      (0, _emberMetal.defineProperty)(appController, 'currentRouteName');\n    }\n\n    (0, _emberMetal.set)(appController, 'currentRouteName', currentRouteName);\n  }\n\n  EmberRouter.reopenClass({\n    map: function (callback) {\n      if (!this.dslCallbacks) {\n        this.dslCallbacks = [];\n        this.reopenClass({ dslCallbacks: this.dslCallbacks });\n      }\n\n      this.dslCallbacks.push(callback);\n\n      return this;\n    },\n    _routePath: function (handlerInfos) {\n      var path = [];\n\n      // We have to handle coalescing resource names that\n      // are prefixed with their parent's names, e.g.\n      // ['foo', 'foo.bar.baz'] => 'foo.bar.baz', not 'foo.foo.bar.baz'\n\n      function intersectionMatches(a1, a2) {\n        for (var i = 0; i < a1.length; ++i) {\n          if (a1[i] !== a2[i]) {\n            return false;\n          }\n        }\n        return true;\n      }\n\n      var name = void 0,\n          nameParts = void 0,\n          oldNameParts = void 0;\n      for (var i = 1; i < handlerInfos.length; i++) {\n        name = handlerInfos[i].name;\n        nameParts = name.split('.');\n        oldNameParts = slice.call(path);\n\n        while (oldNameParts.length) {\n          if (intersectionMatches(oldNameParts, nameParts)) {\n            break;\n          }\n          oldNameParts.shift();\n        }\n\n        path.push.apply(path, nameParts.slice(oldNameParts.length));\n      }\n\n      return path.join('.');\n    }\n  });\n\n  function didBeginTransition(transition, router) {\n    var routerState = _router_state.default.create({\n      emberRouter: router,\n      routerJs: router._routerMicrolib,\n      routerJsState: transition.state\n    });\n\n    if (!router.currentState) {\n      router.set('currentState', routerState);\n    }\n    router.set('targetState', routerState);\n\n    transition.promise = transition.catch(function (error) {\n      if (router._isErrorHandled(error)) {\n        router._clearHandledError(error);\n      } else {\n        throw error;\n      }\n    });\n  }\n\n  function forEachQueryParam(router, handlerInfos, queryParams, callback) {\n    var qpCache = router._queryParamsFor(handlerInfos);\n\n    for (var key in queryParams) {\n      if (!queryParams.hasOwnProperty(key)) {\n        continue;\n      }\n      var value = queryParams[key];\n      var qp = qpCache.map[key];\n\n      callback(key, value, qp);\n    }\n  }\n\n  function findLiveRoute(liveRoutes, name) {\n    if (!liveRoutes) {\n      return;\n    }\n    var stack = [liveRoutes];\n    while (stack.length > 0) {\n      var test = stack.shift();\n      if (test.render.name === name) {\n        return test;\n      }\n      var outlets = test.outlets;\n      for (var outletName in outlets) {\n        stack.push(outlets[outletName]);\n      }\n    }\n  }\n\n  function appendLiveRoute(liveRoutes, defaultParentState, renderOptions) {\n    var target = void 0;\n    var myState = {\n      render: renderOptions,\n      outlets: Object.create(null),\n      wasUsed: false\n    };\n    if (renderOptions.into) {\n      target = findLiveRoute(liveRoutes, renderOptions.into);\n    } else {\n      target = defaultParentState;\n    }\n    if (target) {\n      (0, _emberMetal.set)(target.outlets, renderOptions.outlet, myState);\n    } else {\n      if (renderOptions.into) {\n        (true && !(false) && (0, _emberDebug.deprecate)('Rendering into a {{render}} helper that resolves to an {{outlet}} is deprecated.', false, {\n          id: 'ember-routing.top-level-render-helper',\n          until: '3.0.0',\n          url: 'https://emberjs.com/deprecations/v2.x/#toc_rendering-into-a-render-helper-that-resolves-to-an-outlet'\n        }));\n\n\n        // Megahax time. Post-3.0-breaking-changes, we will just assert\n        // right here that the user tried to target a nonexistent\n        // thing. But for now we still need to support the `render`\n        // helper, and people are allowed to target templates rendered\n        // by the render helper. So instead we defer doing anyting with\n        // these orphan renders until afterRender.\n        appendOrphan(liveRoutes, renderOptions.into, myState);\n      } else {\n        liveRoutes = myState;\n      }\n    }\n    return {\n      liveRoutes: liveRoutes,\n      ownState: myState\n    };\n  }\n\n  function appendOrphan(liveRoutes, into, myState) {\n    if (!liveRoutes.outlets.__ember_orphans__) {\n      liveRoutes.outlets.__ember_orphans__ = {\n        render: {\n          name: '__ember_orphans__'\n        },\n        outlets: Object.create(null)\n      };\n    }\n    liveRoutes.outlets.__ember_orphans__.outlets[into] = myState;\n    _emberMetal.run.schedule('afterRender', function () {\n      (true && !(liveRoutes.outlets.__ember_orphans__.outlets[into].wasUsed) && (0, _emberDebug.assert)('You attempted to render into \\'' + into + '\\' but it was not found', liveRoutes.outlets.__ember_orphans__.outlets[into].wasUsed));\n    });\n  }\n\n  function representEmptyRoute(liveRoutes, defaultParentState, route) {\n    // the route didn't render anything\n    var alreadyAppended = findLiveRoute(liveRoutes, route.routeName);\n    if (alreadyAppended) {\n      // But some other route has already rendered our default\n      // template, so that becomes the default target for any\n      // children we may have.\n      return alreadyAppended;\n    } else {\n      // Create an entry to represent our default template name,\n      // just so other routes can target it and inherit its place\n      // in the outlet hierarchy.\n      defaultParentState.outlets.main = {\n        render: {\n          name: route.routeName,\n          outlet: 'main'\n        },\n        outlets: {}\n      };\n      return defaultParentState;\n    }\n  }\n\n  exports.default = EmberRouter;\n});","enifed('ember-routing/system/router_state', ['exports', 'ember-utils', 'ember-routing/utils', 'ember-runtime'], function (exports, _emberUtils, _utils, _emberRuntime) {\n  'use strict';\n\n  exports.default = _emberRuntime.Object.extend({\n    emberRouter: null,\n    routerJs: null,\n    routerJsState: null,\n\n    isActiveIntent: function (routeName, models, queryParams, queryParamsMustMatch) {\n      var state = this.routerJsState;\n      if (!this.routerJs.isActiveIntent(routeName, models, null, state)) {\n        return false;\n      }\n\n      if (queryParamsMustMatch && Object.keys(queryParams).length > 0) {\n        var visibleQueryParams = (0, _emberUtils.assign)({}, queryParams);\n\n        this.emberRouter._prepareQueryParams(routeName, models, visibleQueryParams);\n        return (0, _utils.shallowEqual)(visibleQueryParams, state.queryParams);\n      }\n\n      return true;\n    }\n  });\n});","/**\n  A Transition is a thennable (a promise-like object) that represents\n  an attempt to transition to another route. It can be aborted, either\n  explicitly via `abort` or by attempting another transition while a\n  previous one is still underway. An aborted transition can also\n  be `retry()`d later.\n\n  @class Transition\n  @constructor\n  @param {Object} router\n  @param {Object} intent\n  @param {Object} state\n  @param {Object} error\n  @private\n*/\n\n/**\n  The Transition's internal promise. Calling `.then` on this property\n  is that same as calling `.then` on the Transition object itself, but\n  this property is exposed for when you want to pass around a\n  Transition's promise, but not the Transition object itself, since\n  Transition object can be externally `abort`ed, while the promise\n  cannot.\n\n  @property promise\n  @type {Object}\n  @public\n  */\n\n/**\n  Custom state can be stored on a Transition's `data` object.\n  This can be useful for decorating a Transition within an earlier\n  hook and shared with a later hook. Properties set on `data` will\n  be copied to new transitions generated by calling `retry` on this\n  transition.\n\n  @property data\n  @type {Object}\n  @public\n*/\n\n/**\n  A standard promise hook that resolves if the transition\n  succeeds and rejects if it fails/redirects/aborts.\n\n  Forwards to the internal `promise` property which you can\n  use in situations where you want to pass around a thennable,\n  but not the Transition itself.\n\n  @method then\n  @param {Function} onFulfilled\n  @param {Function} onRejected\n  @param {String} label optional string for labeling the promise.\n  Useful for tooling.\n  @return {Promise}\n  @public\n*/\n\n/**\n\n  Forwards to the internal `promise` property which you can\n  use in situations where you want to pass around a thennable,\n  but not the Transition itself.\n\n  @method catch\n  @param {Function} onRejection\n  @param {String} label optional string for labeling the promise.\n  Useful for tooling.\n  @return {Promise}\n  @public\n*/\n\n/**\n\n  Forwards to the internal `promise` property which you can\n  use in situations where you want to pass around a thennable,\n  but not the Transition itself.\n\n  @method finally\n  @param {Function} callback\n  @param {String} label optional string for labeling the promise.\n  Useful for tooling.\n  @return {Promise}\n  @public\n*/\n\n/**\n  Aborts the Transition. Note you can also implicitly abort a transition\n  by initiating another transition while a previous one is underway.\n\n  @method abort\n  @return {Transition} this transition\n  @public\n*/\n\n/**\n\n  Retries a previously-aborted transition (making sure to abort the\n  transition if it's still active). Returns a new transition that\n  represents the new attempt to transition.\n\n  @method retry\n  @return {Transition} new transition\n  @public\n  */\n\n/**\n\n  Sets the URL-changing method to be employed at the end of a\n  successful transition. By default, a new Transition will just\n  use `updateURL`, but passing 'replace' to this method will\n  cause the URL to update using 'replaceWith' instead. Omitting\n  a parameter will disable the URL change, allowing for transitions\n  that don't update the URL at completion (this is also used for\n  handleURL, since the URL has already changed before the\n  transition took place).\n\n  @method method\n  @param {String} method the type of URL-changing method to use\n    at the end of a transition. Accepted values are 'replace',\n    falsy values, or any other non-falsy value (which is\n    interpreted as an updateURL transition).\n\n  @return {Transition} this transition\n  @public\n*/\n\n/**\n\n  Fires an event on the current list of resolved/resolving\n  handlers within this transition. Useful for firing events\n  on route hierarchies that haven't fully been entered yet.\n\n  Note: This method is also aliased as `send`\n\n  @method trigger\n  @param {Boolean} [ignoreFailure=false] a boolean specifying whether unhandled events throw an error\n  @param {String} name the name of the event to fire\n  @public\n*/\n\n/**\n  Transitions are aborted and their promises rejected\n  when redirects occur; this method returns a promise\n  that will follow any redirects that occur and fulfill\n  with the value fulfilled by any redirecting transitions\n  that occur.\n\n  @method followRedirects\n  @return {Promise} a promise that fulfills with the same\n    value that the final redirecting transition fulfills with\n  @public\n*/\nenifed(\"ember-routing/system/transition\", [], function () {\n  \"use strict\";\n});","enifed('ember-routing/utils', ['exports', 'ember-utils', 'ember-metal', 'ember-debug'], function (exports, _emberUtils, _emberMetal, _emberDebug) {\n  'use strict';\n\n  exports.extractRouteArgs = extractRouteArgs;\n  exports.getActiveTargetName = getActiveTargetName;\n  exports.stashParamNames = stashParamNames;\n  exports.calculateCacheKey = calculateCacheKey;\n  exports.normalizeControllerQueryParams = normalizeControllerQueryParams;\n  exports.resemblesURL = resemblesURL;\n  exports.prefixRouteNameArg = prefixRouteNameArg;\n  exports.shallowEqual = shallowEqual;\n\n\n  var ALL_PERIODS_REGEX = /\\./g;\n\n  function extractRouteArgs(args) {\n    args = args.slice();\n    var possibleQueryParams = args[args.length - 1];\n\n    var queryParams = void 0;\n    if (possibleQueryParams && possibleQueryParams.hasOwnProperty('queryParams')) {\n      queryParams = args.pop().queryParams;\n    } else {\n      queryParams = {};\n    }\n\n    var routeName = args.shift();\n\n    return { routeName: routeName, models: args, queryParams: queryParams };\n  }\n\n  function getActiveTargetName(router) {\n    var handlerInfos = router.activeTransition ? router.activeTransition.state.handlerInfos : router.state.handlerInfos;\n    return handlerInfos[handlerInfos.length - 1].name;\n  }\n\n  function stashParamNames(router, handlerInfos) {\n    if (handlerInfos._namesStashed) {\n      return;\n    }\n\n    // This helper exists because router.js/route-recognizer.js awkwardly\n    // keeps separate a handlerInfo's list of parameter names depending\n    // on whether a URL transition or named transition is happening.\n    // Hopefully we can remove this in the future.\n    var targetRouteName = handlerInfos[handlerInfos.length - 1].name;\n    var recogHandlers = router._routerMicrolib.recognizer.handlersFor(targetRouteName);\n    var dynamicParent = null;\n\n    for (var i = 0; i < handlerInfos.length; ++i) {\n      var handlerInfo = handlerInfos[i];\n      var names = recogHandlers[i].names;\n\n      if (names.length) {\n        dynamicParent = handlerInfo;\n      }\n\n      handlerInfo._names = names;\n\n      var route = handlerInfo.handler;\n      route._stashNames(handlerInfo, dynamicParent);\n    }\n\n    handlerInfos._namesStashed = true;\n  }\n\n  function _calculateCacheValuePrefix(prefix, part) {\n    // calculates the dot separated sections from prefix that are also\n    // at the start of part - which gives us the route name\n\n    // given : prefix = site.article.comments, part = site.article.id\n    //      - returns: site.article (use get(values[site.article], 'id') to get the dynamic part - used below)\n\n    // given : prefix = site.article, part = site.article.id\n    //      - returns: site.article. (use get(values[site.article], 'id') to get the dynamic part - used below)\n\n    var prefixParts = prefix.split('.');\n    var currPrefix = '';\n\n    for (var i = 0; i < prefixParts.length; i++) {\n      var currPart = prefixParts.slice(0, i + 1).join('.');\n      if (part.indexOf(currPart) !== 0) {\n        break;\n      }\n      currPrefix = currPart;\n    }\n\n    return currPrefix;\n  }\n\n  /*\n    Stolen from Controller\n  */\n  function calculateCacheKey(prefix) {\n    var parts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n    var values = arguments[2];\n\n    var suffixes = '';\n    for (var i = 0; i < parts.length; ++i) {\n      var part = parts[i];\n      var cacheValuePrefix = _calculateCacheValuePrefix(prefix, part);\n      var value = void 0;\n      if (values) {\n        if (cacheValuePrefix && cacheValuePrefix in values) {\n          var partRemovedPrefix = part.indexOf(cacheValuePrefix) === 0 ? part.substr(cacheValuePrefix.length + 1) : part;\n          value = (0, _emberMetal.get)(values[cacheValuePrefix], partRemovedPrefix);\n        } else {\n          value = (0, _emberMetal.get)(values, part);\n        }\n      }\n      suffixes += '::' + part + ':' + value;\n    }\n    return prefix + suffixes.replace(ALL_PERIODS_REGEX, '-');\n  }\n\n  /*\n    Controller-defined query parameters can come in three shapes:\n  \n    Array\n      queryParams: ['foo', 'bar']\n    Array of simple objects where value is an alias\n      queryParams: [\n        {\n          'foo': 'rename_foo_to_this'\n        },\n        {\n          'bar': 'call_bar_this_instead'\n        }\n      ]\n    Array of fully defined objects\n      queryParams: [\n        {\n          'foo': {\n            as: 'rename_foo_to_this'\n          },\n        }\n        {\n          'bar': {\n            as: 'call_bar_this_instead',\n            scope: 'controller'\n          }\n        }\n      ]\n  \n    This helper normalizes all three possible styles into the\n    'Array of fully defined objects' style.\n  */\n  function normalizeControllerQueryParams(queryParams) {\n    var qpMap = {};\n\n    for (var i = 0; i < queryParams.length; ++i) {\n      accumulateQueryParamDescriptors(queryParams[i], qpMap);\n    }\n\n    return qpMap;\n  }\n\n  function accumulateQueryParamDescriptors(_desc, accum) {\n    var desc = _desc;\n    var tmp = void 0;\n    if (typeof desc === 'string') {\n      tmp = {};\n      tmp[desc] = { as: null };\n      desc = tmp;\n    }\n\n    for (var key in desc) {\n      if (!desc.hasOwnProperty(key)) {\n        return;\n      }\n\n      var singleDesc = desc[key];\n      if (typeof singleDesc === 'string') {\n        singleDesc = { as: singleDesc };\n      }\n\n      tmp = accum[key] || { as: null, scope: 'model' };\n      (0, _emberUtils.assign)(tmp, singleDesc);\n\n      accum[key] = tmp;\n    }\n  }\n\n  /*\n    Check if a routeName resembles a url instead\n  \n    @private\n  */\n  function resemblesURL(str) {\n    return typeof str === 'string' && (str === '' || str[0] === '/');\n  }\n\n  /*\n    Returns an arguments array where the route name arg is prefixed based on the mount point\n  \n    @private\n  */\n  function prefixRouteNameArg(route, args) {\n    var routeName = args[0];\n    var owner = (0, _emberUtils.getOwner)(route);\n    var prefix = owner.mountPoint;\n\n    // only alter the routeName if it's actually referencing a route.\n    if (owner.routable && typeof routeName === 'string') {\n      if (resemblesURL(routeName)) {\n        throw new _emberDebug.Error('Programmatic transitions by URL cannot be used within an Engine. Please use the route name instead.');\n      } else {\n        routeName = prefix + '.' + routeName;\n        args[0] = routeName;\n      }\n    }\n\n    return args;\n  }\n\n  function shallowEqual(a, b) {\n    var k = void 0;\n    var aCount = 0;\n    var bCount = 0;\n    for (k in a) {\n      if (a.hasOwnProperty(k)) {\n        if (a[k] !== b[k]) {\n          return false;\n        }\n        aCount++;\n      }\n    }\n\n    for (k in b) {\n      if (b.hasOwnProperty(k)) {\n        bCount++;\n      }\n    }\n\n    return aCount === bCount;\n  }\n});","enifed('ember-runtime/compare', ['exports', 'ember-runtime/utils', 'ember-runtime/mixins/comparable'], function (exports, _utils, _comparable) {\n  'use strict';\n\n  exports.default = compare;\n\n\n  var TYPE_ORDER = {\n    'undefined': 0,\n    'null': 1,\n    'boolean': 2,\n    'number': 3,\n    'string': 4,\n    'array': 5,\n    'object': 6,\n    'instance': 7,\n    'function': 8,\n    'class': 9,\n    'date': 10\n  };\n\n  //\n  // the spaceship operator\n  //\n  //                      `. ___\n  //                     __,' __`.                _..----....____\n  //         __...--.'``;.   ,.   ;``--..__     .'    ,-._    _.-'\n  //   _..-''-------'   `'   `'   `'     O ``-''._   (,;') _,'\n  // ,'________________                          \\`-._`-','\n  //  `._              ```````````------...___   '-.._'-:\n  //     ```--.._      ,.                     ````--...__\\-.\n  //             `.--. `-` \"INFINITY IS LESS     ____    |  |`\n  //               `. `.   THAN BEYOND\"        ,'`````.  ;  ;`\n  //                 `._`.        __________   `.      \\'__/`\n  //                    `-:._____/______/___/____`.     \\  `\n  //                                |       `._    `.    \\\n  //                                `._________`-.   `.   `.___\n  //                                              SSt  `------'`\n  function spaceship(a, b) {\n    var diff = a - b;\n    return (diff > 0) - (diff < 0);\n  }\n\n  /**\n   @module @ember/utils\n  */\n\n  /**\n   Compares two javascript values and returns:\n  \n    - -1 if the first is smaller than the second,\n    - 0 if both are equal,\n    - 1 if the first is greater than the second.\n  \n    ```javascript\n    import { compare } from '@ember/utils';\n  \n    compare('hello', 'hello');  // 0\n    compare('abc', 'dfg');      // -1\n    compare(2, 1);              // 1\n    ```\n  \n   If the types of the two objects are different precedence occurs in the\n   following order, with types earlier in the list considered `<` types\n   later in the list:\n  \n    - undefined\n    - null\n    - boolean\n    - number\n    - string\n    - array\n    - object\n    - instance\n    - function\n    - class\n    - date\n  \n    ```javascript\n    import { compare } from '@ember/utils';\n  \n    compare('hello', 50);       // 1\n    compare(50, 'hello');       // -1\n    ```\n  \n   @method compare\n   @for @ember/utils\n   @static\n   @param {Object} v First value to compare\n   @param {Object} w Second value to compare\n   @return {Number} -1 if v < w, 0 if v = w and 1 if v > w.\n   @public\n  */\n  function compare(v, w) {\n    if (v === w) {\n      return 0;\n    }\n\n    var type1 = (0, _utils.typeOf)(v);\n    var type2 = (0, _utils.typeOf)(w);\n\n    if (_comparable.default) {\n      if (type1 === 'instance' && _comparable.default.detect(v) && v.constructor.compare) {\n        return v.constructor.compare(v, w);\n      }\n\n      if (type2 === 'instance' && _comparable.default.detect(w) && w.constructor.compare) {\n        return w.constructor.compare(w, v) * -1;\n      }\n    }\n\n    var res = spaceship(TYPE_ORDER[type1], TYPE_ORDER[type2]);\n\n    if (res !== 0) {\n      return res;\n    }\n\n    // types are equal - so we have to check values now\n    switch (type1) {\n      case 'boolean':\n      case 'number':\n        return spaceship(v, w);\n\n      case 'string':\n        return spaceship(v.localeCompare(w), 0);\n\n      case 'array':\n        {\n          var vLen = v.length;\n          var wLen = w.length;\n          var len = Math.min(vLen, wLen);\n\n          for (var i = 0; i < len; i++) {\n            var r = compare(v[i], w[i]);\n            if (r !== 0) {\n              return r;\n            }\n          }\n\n          // all elements are equal now\n          // shorter array should be ordered first\n          return spaceship(vLen, wLen);\n        }\n      case 'instance':\n        if (_comparable.default && _comparable.default.detect(v)) {\n          return v.compare(v, w);\n        }\n        return 0;\n\n      case 'date':\n        return spaceship(v.getTime(), w.getTime());\n\n      default:\n        return 0;\n    }\n  }\n});","enifed('ember-runtime/computed/computed_macros', ['exports', 'ember-metal', 'ember-debug'], function (exports, _emberMetal, _emberDebug) {\n  'use strict';\n\n  exports.or = exports.and = undefined;\n  exports.empty = empty;\n  exports.notEmpty = notEmpty;\n  exports.none = none;\n  exports.not = not;\n  exports.bool = bool;\n  exports.match = match;\n  exports.equal = equal;\n  exports.gt = gt;\n  exports.gte = gte;\n  exports.lt = lt;\n  exports.lte = lte;\n  exports.oneWay = oneWay;\n  exports.readOnly = readOnly;\n  exports.deprecatingAlias = deprecatingAlias;\n\n\n  /**\n  @module @ember/object\n  */\n\n  function expandPropertiesToArray(predicateName, properties) {\n    var expandedProperties = [];\n\n    function extractProperty(entry) {\n      expandedProperties.push(entry);\n    }\n\n    for (var i = 0; i < properties.length; i++) {\n      var property = properties[i];\n      (true && !(property.indexOf(' ') < 0) && (0, _emberDebug.assert)('Dependent keys passed to computed.' + predicateName + '() can\\'t have spaces.', property.indexOf(' ') < 0));\n\n\n      (0, _emberMetal.expandProperties)(property, extractProperty);\n    }\n\n    return expandedProperties;\n  }\n\n  function generateComputedWithPredicate(name, predicate) {\n    return function () {\n      for (var _len = arguments.length, properties = Array(_len), _key = 0; _key < _len; _key++) {\n        properties[_key] = arguments[_key];\n      }\n\n      var dependentKeys = expandPropertiesToArray(name, properties);\n\n      var computedFunc = new _emberMetal.ComputedProperty(function () {\n        var lastIdx = dependentKeys.length - 1;\n\n        for (var i = 0; i < lastIdx; i++) {\n          var value = (0, _emberMetal.get)(this, dependentKeys[i]);\n          if (!predicate(value)) {\n            return value;\n          }\n        }\n\n        return (0, _emberMetal.get)(this, dependentKeys[lastIdx]);\n      }, { dependentKeys: dependentKeys });\n\n      return computedFunc;\n    };\n  }\n\n  /**\n    A computed property that returns true if the value of the dependent\n    property is null, an empty string, empty array, or empty function.\n  \n    Example\n  \n    ```javascript\n    import { empty } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let ToDoList = EmberObject.extend({\n      isDone: empty('todos')\n    });\n  \n    let todoList = ToDoList.create({\n      todos: ['Unit Test', 'Documentation', 'Release']\n    });\n  \n    todoList.get('isDone'); // false\n    todoList.get('todos').clear();\n    todoList.get('isDone'); // true\n    ```\n  \n    @since 1.6.0\n    @method empty\n    @static\n    @for @ember/object/computed\n    @param {String} dependentKey\n    @return {ComputedProperty} computed property which returns true if\n    the value of the dependent property is null, an empty string, empty array,\n    or empty function and false if the underlying value is not empty.\n  \n    @public\n  */\n  function empty(dependentKey) {\n    return (0, _emberMetal.computed)(dependentKey + '.length', function () {\n      return (0, _emberMetal.isEmpty)((0, _emberMetal.get)(this, dependentKey));\n    });\n  }\n\n  /**\n    A computed property that returns true if the value of the dependent\n    property is NOT null, an empty string, empty array, or empty function.\n  \n    Example\n  \n    ```javascript\n    import { notEmpty } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let Hamster = EmberObject.extend({\n      hasStuff: notEmpty('backpack')\n    });\n  \n    let hamster = Hamster.create({ backpack: ['Food', 'Sleeping Bag', 'Tent'] });\n  \n    hamster.get('hasStuff');         // true\n    hamster.get('backpack').clear(); // []\n    hamster.get('hasStuff');         // false\n    ```\n  \n    @method notEmpty\n    @static\n    @for @ember/object/computed\n    @param {String} dependentKey\n    @return {ComputedProperty} computed property which returns true if\n    original value for property is not empty.\n    @public\n  */\n  function notEmpty(dependentKey) {\n    return (0, _emberMetal.computed)(dependentKey + '.length', function () {\n      return !(0, _emberMetal.isEmpty)((0, _emberMetal.get)(this, dependentKey));\n    });\n  }\n\n  /**\n    A computed property that returns true if the value of the dependent\n    property is null or undefined. This avoids errors from JSLint complaining\n    about use of ==, which can be technically confusing.\n  \n    Example\n  \n    ```javascript\n    import { none } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let Hamster = EmberObject.extend({\n      isHungry: none('food')\n    });\n  \n    let hamster = Hamster.create();\n  \n    hamster.get('isHungry'); // true\n    hamster.set('food', 'Banana');\n    hamster.get('isHungry'); // false\n    hamster.set('food', null);\n    hamster.get('isHungry'); // true\n    ```\n  \n    @method none\n    @static\n    @for @ember/object/computed\n    @param {String} dependentKey\n    @return {ComputedProperty} computed property which\n    returns true if original value for property is null or undefined.\n    @public\n  */\n  function none(dependentKey) {\n    return (0, _emberMetal.computed)(dependentKey, function () {\n      return (0, _emberMetal.isNone)((0, _emberMetal.get)(this, dependentKey));\n    });\n  }\n\n  /**\n    A computed property that returns the inverse boolean value\n    of the original value for the dependent property.\n  \n    Example\n  \n    ```javascript\n    import { not } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let User = EmberObject.extend({\n      isAnonymous: not('loggedIn')\n    });\n  \n    let user = User.create({loggedIn: false});\n  \n    user.get('isAnonymous'); // true\n    user.set('loggedIn', true);\n    user.get('isAnonymous'); // false\n    ```\n  \n    @method not\n    @static\n    @for @ember/object/computed\n    @param {String} dependentKey\n    @return {ComputedProperty} computed property which returns\n    inverse of the original value for property\n    @public\n  */\n  function not(dependentKey) {\n    return (0, _emberMetal.computed)(dependentKey, function () {\n      return !(0, _emberMetal.get)(this, dependentKey);\n    });\n  }\n\n  /**\n    A computed property that converts the provided dependent property\n    into a boolean value.\n  \n    ```javascript\n    import { bool } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let Hamster = EmberObject.extend({\n      hasBananas: bool('numBananas')\n    });\n  \n    let hamster = Hamster.create();\n  \n    hamster.get('hasBananas'); // false\n    hamster.set('numBananas', 0);\n    hamster.get('hasBananas'); // false\n    hamster.set('numBananas', 1);\n    hamster.get('hasBananas'); // true\n    hamster.set('numBananas', null);\n    hamster.get('hasBananas'); // false\n    ```\n  \n    @method bool\n    @static\n    @for @ember/object/computed\n    @param {String} dependentKey\n    @return {ComputedProperty} computed property which converts\n    to boolean the original value for property\n    @public\n  */\n  function bool(dependentKey) {\n    return (0, _emberMetal.computed)(dependentKey, function () {\n      return !!(0, _emberMetal.get)(this, dependentKey);\n    });\n  }\n\n  /**\n    A computed property which matches the original value for the\n    dependent property against a given RegExp, returning `true`\n    if the value matches the RegExp and `false` if it does not.\n  \n    Example\n  \n    ```javascript\n    import { match } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let User = EmberObject.extend({\n      hasValidEmail: match('email', /^.+@.+\\..+$/)\n    });\n  \n    let user = User.create({loggedIn: false});\n  \n    user.get('hasValidEmail'); // false\n    user.set('email', '');\n    user.get('hasValidEmail'); // false\n    user.set('email', 'ember_hamster@example.com');\n    user.get('hasValidEmail'); // true\n    ```\n  \n    @method match\n    @static\n    @for @ember/object/computed\n    @param {String} dependentKey\n    @param {RegExp} regexp\n    @return {ComputedProperty} computed property which match\n    the original value for property against a given RegExp\n    @public\n  */\n  function match(dependentKey, regexp) {\n    return (0, _emberMetal.computed)(dependentKey, function () {\n      var value = (0, _emberMetal.get)(this, dependentKey);\n      return regexp.test(value);\n    });\n  }\n\n  /**\n    A computed property that returns true if the provided dependent property\n    is equal to the given value.\n  \n    Example\n  \n    ```javascript\n    import { equal } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let Hamster = EmberObject.extend({\n      satisfied: equal('percentCarrotsEaten', 100)\n    });\n  \n    let hamster = Hamster.create();\n  \n    hamster.get('satisfied'); // false\n    hamster.set('percentCarrotsEaten', 100);\n    hamster.get('satisfied'); // true\n    hamster.set('percentCarrotsEaten', 50);\n    hamster.get('satisfied'); // false\n    ```\n  \n    @method equal\n    @static\n    @for @ember/object/computed\n    @param {String} dependentKey\n    @param {String|Number|Object} value\n    @return {ComputedProperty} computed property which returns true if\n    the original value for property is equal to the given value.\n    @public\n  */\n  function equal(dependentKey, value) {\n    return (0, _emberMetal.computed)(dependentKey, function () {\n      return (0, _emberMetal.get)(this, dependentKey) === value;\n    });\n  }\n\n  /**\n    A computed property that returns true if the provided dependent property\n    is greater than the provided value.\n  \n    Example\n  \n    ```javascript\n    import { gt } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let Hamster = EmberObject.extend({\n      hasTooManyBananas: gt('numBananas', 10)\n    });\n  \n    let hamster = Hamster.create();\n  \n    hamster.get('hasTooManyBananas'); // false\n    hamster.set('numBananas', 3);\n    hamster.get('hasTooManyBananas'); // false\n    hamster.set('numBananas', 11);\n    hamster.get('hasTooManyBananas'); // true\n    ```\n  \n    @method gt\n    @static\n    @for @ember/object/computed\n    @param {String} dependentKey\n    @param {Number} value\n    @return {ComputedProperty} computed property which returns true if\n    the original value for property is greater than given value.\n    @public\n  */\n  function gt(dependentKey, value) {\n    return (0, _emberMetal.computed)(dependentKey, function () {\n      return (0, _emberMetal.get)(this, dependentKey) > value;\n    });\n  }\n\n  /**\n    A computed property that returns true if the provided dependent property\n    is greater than or equal to the provided value.\n  \n    Example\n  \n    ```javascript\n    import { gte } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let Hamster = EmberObject.extend({\n      hasTooManyBananas: gte('numBananas', 10)\n    });\n  \n    let hamster = Hamster.create();\n  \n    hamster.get('hasTooManyBananas'); // false\n    hamster.set('numBananas', 3);\n    hamster.get('hasTooManyBananas'); // false\n    hamster.set('numBananas', 10);\n    hamster.get('hasTooManyBananas'); // true\n    ```\n  \n    @method gte\n    @static\n    @for @ember/object/computed\n    @param {String} dependentKey\n    @param {Number} value\n    @return {ComputedProperty} computed property which returns true if\n    the original value for property is greater or equal then given value.\n    @public\n  */\n  function gte(dependentKey, value) {\n    return (0, _emberMetal.computed)(dependentKey, function () {\n      return (0, _emberMetal.get)(this, dependentKey) >= value;\n    });\n  }\n\n  /**\n    A computed property that returns true if the provided dependent property\n    is less than the provided value.\n  \n    Example\n  \n    ```javascript\n    import { lt } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let Hamster = EmberObject.extend({\n      needsMoreBananas: lt('numBananas', 3)\n    });\n  \n    let hamster = Hamster.create();\n  \n    hamster.get('needsMoreBananas'); // true\n    hamster.set('numBananas', 3);\n    hamster.get('needsMoreBananas'); // false\n    hamster.set('numBananas', 2);\n    hamster.get('needsMoreBananas'); // true\n    ```\n  \n    @method lt\n    @static\n    @for @ember/object/computed\n    @param {String} dependentKey\n    @param {Number} value\n    @return {ComputedProperty} computed property which returns true if\n    the original value for property is less then given value.\n    @public\n  */\n  function lt(dependentKey, value) {\n    return (0, _emberMetal.computed)(dependentKey, function () {\n      return (0, _emberMetal.get)(this, dependentKey) < value;\n    });\n  }\n\n  /**\n    A computed property that returns true if the provided dependent property\n    is less than or equal to the provided value.\n  \n    Example\n  \n    ```javascript\n    import { lte } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let Hamster = EmberObject.extend({\n      needsMoreBananas: lte('numBananas', 3)\n    });\n  \n    let hamster = Hamster.create();\n  \n    hamster.get('needsMoreBananas'); // true\n    hamster.set('numBananas', 5);\n    hamster.get('needsMoreBananas'); // false\n    hamster.set('numBananas', 3);\n    hamster.get('needsMoreBananas'); // true\n    ```\n  \n    @method lte\n    @static\n    @for @ember/object/computed\n    @param {String} dependentKey\n    @param {Number} value\n    @return {ComputedProperty} computed property which returns true if\n    the original value for property is less or equal than given value.\n    @public\n  */\n  function lte(dependentKey, value) {\n    return (0, _emberMetal.computed)(dependentKey, function () {\n      return (0, _emberMetal.get)(this, dependentKey) <= value;\n    });\n  }\n\n  /**\n    A computed property that performs a logical `and` on the\n    original values for the provided dependent properties.\n  \n    You may pass in more than two properties and even use\n    property brace expansion.  The computed property will\n    return the first falsy value or last truthy value\n    just like JavaScript's `&&` operator.\n  \n    Example\n  \n    ```javascript\n    import { and } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let Hamster = EmberObject.extend({\n      readyForCamp: and('hasTent', 'hasBackpack'),\n      readyForHike: and('hasWalkingStick', 'hasBackpack')\n    });\n  \n    let tomster = Hamster.create();\n  \n    tomster.get('readyForCamp'); // false\n    tomster.set('hasTent', true);\n    tomster.get('readyForCamp'); // false\n    tomster.set('hasBackpack', true);\n    tomster.get('readyForCamp'); // true\n    tomster.set('hasBackpack', 'Yes');\n    tomster.get('readyForCamp'); // 'Yes'\n    tomster.set('hasWalkingStick', null);\n    tomster.get('readyForHike'); // null\n    ```\n  \n    @method and\n    @static\n    @for @ember/object/computed\n    @param {String} dependentKey*\n    @return {ComputedProperty} computed property which performs\n    a logical `and` on the values of all the original values for properties.\n    @public\n  */\n  var and = exports.and = generateComputedWithPredicate('and', function (value) {\n    return value;\n  });\n\n  /**\n    A computed property which performs a logical `or` on the\n    original values for the provided dependent properties.\n  \n    You may pass in more than two properties and even use\n    property brace expansion.  The computed property will\n    return the first truthy value or last falsy value just\n    like JavaScript's `||` operator.\n  \n    Example\n  \n    ```javascript\n    import { or } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let Hamster = EmberObject.extend({\n      readyForRain: or('hasJacket', 'hasUmbrella'),\n      readyForBeach: or('{hasSunscreen,hasUmbrella}')\n    });\n  \n    let tomster = Hamster.create();\n  \n    tomster.get('readyForRain'); // undefined\n    tomster.set('hasUmbrella', true);\n    tomster.get('readyForRain'); // true\n    tomster.set('hasJacket', 'Yes');\n    tomster.get('readyForRain'); // 'Yes'\n    tomster.set('hasSunscreen', 'Check');\n    tomster.get('readyForBeach'); // 'Check'\n    ```\n  \n    @method or\n    @static\n    @for @ember/object/computed\n    @param {String} dependentKey*\n    @return {ComputedProperty} computed property which performs\n    a logical `or` on the values of all the original values for properties.\n    @public\n  */\n  var or = exports.or = generateComputedWithPredicate('or', function (value) {\n    return !value;\n  });\n\n  /**\n    Creates a new property that is an alias for another property\n    on an object. Calls to `get` or `set` this property behave as\n    though they were called on the original property.\n  \n    ```javascript\n    import { alias } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let Person = EmberObject.extend({\n      name: 'Alex Matchneer',\n      nomen: alias('name')\n    });\n  \n    let alex = Person.create();\n  \n    alex.get('nomen'); // 'Alex Matchneer'\n    alex.get('name');  // 'Alex Matchneer'\n  \n    alex.set('nomen', '@machty');\n    alex.get('name');  // '@machty'\n    ```\n  \n    @method alias\n    @static\n    @for @ember/object/computed\n    @param {String} dependentKey\n    @return {ComputedProperty} computed property which creates an\n    alias to the original value for property.\n    @public\n  */\n\n  /**\n    Where `computed.alias` aliases `get` and `set`, and allows for bidirectional\n    data flow, `computed.oneWay` only provides an aliased `get`. The `set` will\n    not mutate the upstream property, rather causes the current property to\n    become the value set. This causes the downstream property to permanently\n    diverge from the upstream property.\n  \n    Example\n  \n    ```javascript\n    import { oneWay } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let User = EmberObject.extend({\n      firstName: null,\n      lastName: null,\n      nickName: oneWay('firstName')\n    });\n  \n    let teddy = User.create({\n      firstName: 'Teddy',\n      lastName: 'Zeenny'\n    });\n  \n    teddy.get('nickName');              // 'Teddy'\n    teddy.set('nickName', 'TeddyBear'); // 'TeddyBear'\n    teddy.get('firstName');             // 'Teddy'\n    ```\n  \n    @method oneWay\n    @static\n    @for @ember/object/computed\n    @param {String} dependentKey\n    @return {ComputedProperty} computed property which creates a\n    one way computed property to the original value for property.\n    @public\n  */\n  function oneWay(dependentKey) {\n    return (0, _emberMetal.alias)(dependentKey).oneWay();\n  }\n\n  /**\n    This is a more semantically meaningful alias of `computed.oneWay`,\n    whose name is somewhat ambiguous as to which direction the data flows.\n  \n    @method reads\n    @static\n    @for @ember/object/computed\n    @param {String} dependentKey\n    @return {ComputedProperty} computed property which creates a\n      one way computed property to the original value for property.\n    @public\n   */\n\n  /**\n    Where `computed.oneWay` provides oneWay bindings, `computed.readOnly` provides\n    a readOnly one way binding. Very often when using `computed.oneWay` one does\n    not also want changes to propagate back up, as they will replace the value.\n  \n    This prevents the reverse flow, and also throws an exception when it occurs.\n  \n    Example\n  \n    ```javascript\n    import { readOnly } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let User = EmberObject.extend({\n      firstName: null,\n      lastName: null,\n      nickName: readOnly('firstName')\n    });\n  \n    let teddy = User.create({\n      firstName: 'Teddy',\n      lastName:  'Zeenny'\n    });\n  \n    teddy.get('nickName');              // 'Teddy'\n    teddy.set('nickName', 'TeddyBear'); // throws Exception\n    // throw new EmberError('Cannot Set: nickName on: <User:ember27288>' );`\n    teddy.get('firstName');             // 'Teddy'\n    ```\n  \n    @method readOnly\n    @static\n    @for @ember/object/computed\n    @param {String} dependentKey\n    @return {ComputedProperty} computed property which creates a\n    one way computed property to the original value for property.\n    @since 1.5.0\n    @public\n  */\n  function readOnly(dependentKey) {\n    return (0, _emberMetal.alias)(dependentKey).readOnly();\n  }\n\n  /**\n    Creates a new property that is an alias for another property\n    on an object. Calls to `get` or `set` this property behave as\n    though they were called on the original property, but also\n    print a deprecation warning.\n  \n    ```javascript\n    import { deprecatingAlias } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let Hamster = EmberObject.extend({\n      bananaCount: deprecatingAlias('cavendishCount', {\n        id: 'hamster.deprecate-banana',\n        until: '3.0.0'\n      })\n    });\n  \n    let hamster = Hamster.create();\n  \n    hamster.set('bananaCount', 5); // Prints a deprecation warning.\n    hamster.get('cavendishCount'); // 5\n    ```\n  \n    @method deprecatingAlias\n    @static\n    @for @ember/object/computed\n    @param {String} dependentKey\n    @param {Object} options Options for `deprecate`.\n    @return {ComputedProperty} computed property which creates an\n    alias with a deprecation to the original value for property.\n    @since 1.7.0\n    @public\n  */\n  function deprecatingAlias(dependentKey, options) {\n    return (0, _emberMetal.computed)(dependentKey, {\n      get: function (key) {\n        (true && !(false) && (0, _emberDebug.deprecate)('Usage of `' + key + '` is deprecated, use `' + dependentKey + '` instead.', false, options));\n\n        return (0, _emberMetal.get)(this, dependentKey);\n      },\n      set: function (key, value) {\n        (true && !(false) && (0, _emberDebug.deprecate)('Usage of `' + key + '` is deprecated, use `' + dependentKey + '` instead.', false, options));\n\n        (0, _emberMetal.set)(this, dependentKey, value);\n        return value;\n      }\n    });\n  }\n});","enifed('ember-runtime/computed/reduce_computed_macros', ['exports', 'ember-debug', 'ember-metal', 'ember-runtime/compare', 'ember-runtime/utils', 'ember-runtime/mixins/array'], function (exports, _emberDebug, _emberMetal, _compare, _utils, _array) {\n  'use strict';\n\n  exports.union = undefined;\n  exports.sum = sum;\n  exports.max = max;\n  exports.min = min;\n  exports.map = map;\n  exports.mapBy = mapBy;\n  exports.filter = filter;\n  exports.filterBy = filterBy;\n  exports.uniq = uniq;\n  exports.uniqBy = uniqBy;\n  exports.intersect = intersect;\n  exports.setDiff = setDiff;\n  exports.collect = collect;\n  exports.sort = sort;\n\n\n  function reduceMacro(dependentKey, callback, initialValue, name) {\n    (true && !(!/[\\[\\]\\{\\}]/g.test(dependentKey)) && (0, _emberDebug.assert)('Dependent key passed to `computed.' + name + '` shouldn\\'t contain brace expanding pattern.', !/[\\[\\]\\{\\}]/g.test(dependentKey)));\n\n\n    var cp = new _emberMetal.ComputedProperty(function () {\n      var arr = (0, _emberMetal.get)(this, dependentKey);\n      if (arr === null || typeof arr !== 'object') {\n        return initialValue;\n      }\n      return arr.reduce(callback, initialValue, this);\n    }, { dependentKeys: [dependentKey + '.[]'], readOnly: true });\n\n    return cp;\n  } /**\n    @module @ember/object\n    */\n\n\n  function arrayMacro(dependentKey, callback) {\n    // This is a bit ugly\n    var propertyName = void 0;\n    if (/@each/.test(dependentKey)) {\n      propertyName = dependentKey.replace(/\\.@each.*$/, '');\n    } else {\n      propertyName = dependentKey;\n      dependentKey += '.[]';\n    }\n\n    var cp = new _emberMetal.ComputedProperty(function () {\n      var value = (0, _emberMetal.get)(this, propertyName);\n      if ((0, _utils.isArray)(value)) {\n        return (0, _array.A)(callback.call(this, value));\n      } else {\n        return (0, _array.A)();\n      }\n    }, { readOnly: true });\n\n    cp.property(dependentKey); // this forces to expand properties GH #15855\n\n    return cp;\n  }\n\n  function multiArrayMacro(_dependentKeys, callback, name) {\n    (true && !(_dependentKeys.every(function (dependentKey) {\n      return !/[\\[\\]\\{\\}]/g.test(dependentKey);\n    })) && (0, _emberDebug.assert)('Dependent keys passed to `computed.' + name + '` shouldn\\'t contain brace expanding pattern.', _dependentKeys.every(function (dependentKey) {\n      return !/[\\[\\]\\{\\}]/g.test(dependentKey);\n    })));\n\n    var dependentKeys = _dependentKeys.map(function (key) {\n      return key + '.[]';\n    });\n\n    var cp = new _emberMetal.ComputedProperty(function () {\n      return (0, _array.A)(callback.call(this, _dependentKeys));\n    }, { dependentKeys: dependentKeys, readOnly: true });\n\n    return cp;\n  }\n\n  /**\n    A computed property that returns the sum of the values\n    in the dependent array.\n  \n    @method sum\n    @for @ember/object/computed\n    @static\n    @param {String} dependentKey\n    @return {ComputedProperty} computes the sum of all values in the dependentKey's array\n    @since 1.4.0\n    @public\n  */\n  function sum(dependentKey) {\n    return reduceMacro(dependentKey, function (sum, item) {\n      return sum + item;\n    }, 0, 'sum');\n  }\n\n  /**\n    A computed property that calculates the maximum value in the\n    dependent array. This will return `-Infinity` when the dependent\n    array is empty.\n  \n    ```javascript\n    import { mapBy, max } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let Person = EmberObject.extend({\n      childAges: mapBy('children', 'age'),\n      maxChildAge: max('childAges')\n    });\n  \n    let lordByron = Person.create({ children: [] });\n  \n    lordByron.get('maxChildAge'); // -Infinity\n    lordByron.get('children').pushObject({\n      name: 'Augusta Ada Byron', age: 7\n    });\n    lordByron.get('maxChildAge'); // 7\n    lordByron.get('children').pushObjects([{\n      name: 'Allegra Byron',\n      age: 5\n    }, {\n      name: 'Elizabeth Medora Leigh',\n      age: 8\n    }]);\n    lordByron.get('maxChildAge'); // 8\n    ```\n  \n    If the types of the arguments are not numbers,\n    they will be converted to numbers and the type\n    of the return value will always be `Number`.\n    For example, the max of a list of Date objects will be\n    the highest timestamp as a `Number`.\n    This behavior is consistent with `Math.max`.\n  \n    @method max\n    @for @ember/object/computed\n    @static\n    @param {String} dependentKey\n    @return {ComputedProperty} computes the largest value in the dependentKey's array\n    @public\n  */\n  function max(dependentKey) {\n    return reduceMacro(dependentKey, function (max, item) {\n      return Math.max(max, item);\n    }, -Infinity, 'max');\n  }\n\n  /**\n    A computed property that calculates the minimum value in the\n    dependent array. This will return `Infinity` when the dependent\n    array is empty.\n  \n    ```javascript\n    import { mapBy, min } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let Person = EmberObject.extend({\n      childAges: mapBy('children', 'age'),\n      minChildAge: min('childAges')\n    });\n  \n    let lordByron = Person.create({ children: [] });\n  \n    lordByron.get('minChildAge'); // Infinity\n    lordByron.get('children').pushObject({\n      name: 'Augusta Ada Byron', age: 7\n    });\n    lordByron.get('minChildAge'); // 7\n    lordByron.get('children').pushObjects([{\n      name: 'Allegra Byron',\n      age: 5\n    }, {\n      name: 'Elizabeth Medora Leigh',\n      age: 8\n    }]);\n    lordByron.get('minChildAge'); // 5\n    ```\n  \n    If the types of the arguments are not numbers,\n    they will be converted to numbers and the type\n    of the return value will always be `Number`.\n    For example, the min of a list of Date objects will be\n    the lowest timestamp as a `Number`.\n    This behavior is consistent with `Math.min`.\n  \n    @method min\n    @for @ember/object/computed\n    @static\n    @param {String} dependentKey\n    @return {ComputedProperty} computes the smallest value in the dependentKey's array\n    @public\n  */\n  function min(dependentKey) {\n    return reduceMacro(dependentKey, function (min, item) {\n      return Math.min(min, item);\n    }, Infinity, 'min');\n  }\n\n  /**\n    Returns an array mapped via the callback\n  \n    The callback method you provide should have the following signature.\n    `item` is the current item in the iteration.\n    `index` is the integer index of the current item in the iteration.\n  \n    ```javascript\n    function(item, index);\n    ```\n  \n    Example\n  \n    ```javascript\n    import { map } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let Hamster = EmberObject.extend({\n      excitingChores: map('chores', function(chore, index) {\n        return chore.toUpperCase() + '!';\n      })\n    });\n  \n    let hamster = Hamster.create({\n      chores: ['clean', 'write more unit tests']\n    });\n  \n    hamster.get('excitingChores'); // ['CLEAN!', 'WRITE MORE UNIT TESTS!']\n    ```\n  \n    @method map\n    @for @ember/object/computed\n    @static\n    @param {String} dependentKey\n    @param {Function} callback\n    @return {ComputedProperty} an array mapped via the callback\n    @public\n  */\n  function map(dependentKey, callback) {\n    return arrayMacro(dependentKey, function (value) {\n      return value.map(callback, this);\n    });\n  }\n\n  /**\n    Returns an array mapped to the specified key.\n  \n    ```javascript\n    import { mapBy } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let Person = EmberObject.extend({\n      childAges: mapBy('children', 'age')\n    });\n  \n    let lordByron = Person.create({ children: [] });\n  \n    lordByron.get('childAges'); // []\n    lordByron.get('children').pushObject({ name: 'Augusta Ada Byron', age: 7 });\n    lordByron.get('childAges'); // [7]\n    lordByron.get('children').pushObjects([{\n      name: 'Allegra Byron',\n      age: 5\n    }, {\n      name: 'Elizabeth Medora Leigh',\n      age: 8\n    }]);\n    lordByron.get('childAges'); // [7, 5, 8]\n    ```\n  \n    @method mapBy\n    @for @ember/object/computed\n    @static\n    @param {String} dependentKey\n    @param {String} propertyKey\n    @return {ComputedProperty} an array mapped to the specified key\n    @public\n  */\n  function mapBy(dependentKey, propertyKey) {\n    (true && !(typeof propertyKey === 'string') && (0, _emberDebug.assert)('\\`computed.mapBy\\` expects a property string for its second argument, ' + 'perhaps you meant to use \"map\"', typeof propertyKey === 'string'));\n    (true && !(!/[\\[\\]\\{\\}]/g.test(dependentKey)) && (0, _emberDebug.assert)('Dependent key passed to `computed.mapBy` shouldn\\'t contain brace expanding pattern.', !/[\\[\\]\\{\\}]/g.test(dependentKey)));\n\n\n    return map(dependentKey + '.@each.' + propertyKey, function (item) {\n      return (0, _emberMetal.get)(item, propertyKey);\n    });\n  }\n\n  /**\n    Filters the array by the callback.\n  \n    The callback method you provide should have the following signature.\n    `item` is the current item in the iteration.\n    `index` is the integer index of the current item in the iteration.\n    `array` is the dependant array itself.\n  \n    ```javascript\n    function(item, index, array);\n    ```\n  \n    ```javascript\n    import { filter } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let Hamster = EmberObject.extend({\n      remainingChores: filter('chores', function(chore, index, array) {\n        return !chore.done;\n      })\n    });\n  \n    let hamster = Hamster.create({\n      chores: [\n        { name: 'cook', done: true },\n        { name: 'clean', done: true },\n        { name: 'write more unit tests', done: false }\n      ]\n    });\n  \n    hamster.get('remainingChores'); // [{name: 'write more unit tests', done: false}]\n    ```\n  \n    You can also use `@each.property` in your dependent key, the callback will still use the underlying array:\n  \n    ```javascript\n    import { A } from '@ember/array';\n    import { filter } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let Hamster = EmberObject.extend({\n      remainingChores: filter('chores.@each.done', function(chore, index, array) {\n        return !chore.get('done');\n      })\n    });\n  \n    let hamster = Hamster.create({\n      chores: A([\n        EmberObject.create({ name: 'cook', done: true }),\n        EmberObject.create({ name: 'clean', done: true }),\n        EmberObject.create({ name: 'write more unit tests', done: false })\n      ])\n    });\n    hamster.get('remainingChores'); // [{name: 'write more unit tests', done: false}]\n    hamster.get('chores').objectAt(2).set('done', true);\n    hamster.get('remainingChores'); // []\n    ```\n  \n  \n    @method filter\n    @for @ember/object/computed\n    @static\n    @param {String} dependentKey\n    @param {Function} callback\n    @return {ComputedProperty} the filtered array\n    @public\n  */\n  function filter(dependentKey, callback) {\n    return arrayMacro(dependentKey, function (value) {\n      return value.filter(callback, this);\n    });\n  }\n\n  /**\n    Filters the array by the property and value\n  \n    ```javascript\n    import { filterBy } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let Hamster = EmberObject.extend({\n      remainingChores: filterBy('chores', 'done', false)\n    });\n  \n    let hamster = Hamster.create({\n      chores: [\n        { name: 'cook', done: true },\n        { name: 'clean', done: true },\n        { name: 'write more unit tests', done: false }\n      ]\n    });\n  \n    hamster.get('remainingChores'); // [{ name: 'write more unit tests', done: false }]\n    ```\n  \n    @method filterBy\n    @for @ember/object/computed\n    @static\n    @param {String} dependentKey\n    @param {String} propertyKey\n    @param {*} value\n    @return {ComputedProperty} the filtered array\n    @public\n  */\n  function filterBy(dependentKey, propertyKey, value) {\n    (true && !(!/[\\[\\]\\{\\}]/g.test(dependentKey)) && (0, _emberDebug.assert)('Dependent key passed to `computed.filterBy` shouldn\\'t contain brace expanding pattern.', !/[\\[\\]\\{\\}]/g.test(dependentKey)));\n\n\n    var callback = void 0;\n    if (arguments.length === 2) {\n      callback = function (item) {\n        return (0, _emberMetal.get)(item, propertyKey);\n      };\n    } else {\n      callback = function (item) {\n        return (0, _emberMetal.get)(item, propertyKey) === value;\n      };\n    }\n\n    return filter(dependentKey + '.@each.' + propertyKey, callback);\n  }\n\n  /**\n    A computed property which returns a new array with all the unique\n    elements from one or more dependent arrays.\n  \n    Example\n  \n    ```javascript\n    import { uniq } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let Hamster = EmberObject.extend({\n      uniqueFruits: uniq('fruits')\n    });\n  \n    let hamster = Hamster.create({\n      fruits: [\n        'banana',\n        'grape',\n        'kale',\n        'banana'\n      ]\n    });\n  \n    hamster.get('uniqueFruits'); // ['banana', 'grape', 'kale']\n    ```\n  \n    @method uniq\n    @for @ember/object/computed\n    @static\n    @param {String} propertyKey*\n    @return {ComputedProperty} computes a new array with all the\n    unique elements from the dependent array\n    @public\n  */\n  function uniq() {\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return multiArrayMacro(args, function (dependentKeys) {\n      var _this = this;\n\n      var uniq = (0, _array.A)();\n      var seen = new Set();\n\n      dependentKeys.forEach(function (dependentKey) {\n        var value = (0, _emberMetal.get)(_this, dependentKey);\n        if ((0, _utils.isArray)(value)) {\n          value.forEach(function (item) {\n            if (!seen.has(item)) {\n              seen.add(item);\n              uniq.push(item);\n            }\n          });\n        }\n      });\n\n      return uniq;\n    }, 'uniq');\n  }\n\n  /**\n    A computed property which returns a new array with all the unique\n    elements from an array, with uniqueness determined by specific key.\n  \n    Example\n  \n    ```javascript\n    import { uniqBy } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let Hamster = EmberObject.extend({\n      uniqueFruits: uniqBy('fruits', 'id')\n    });\n    let hamster = Hamster.create({\n      fruits: [\n        { id: 1, 'banana' },\n        { id: 2, 'grape' },\n        { id: 3, 'peach' },\n        { id: 1, 'banana' }\n      ]\n    });\n    hamster.get('uniqueFruits'); // [ { id: 1, 'banana' }, { id: 2, 'grape' }, { id: 3, 'peach' }]\n    ```\n  \n    @method uniqBy\n    @for @ember/object/computed\n    @static\n    @param {String} dependentKey\n    @param {String} propertyKey\n    @return {ComputedProperty} computes a new array with all the\n    unique elements from the dependent array\n    @public\n  */\n  function uniqBy(dependentKey, propertyKey) {\n    (true && !(!/[\\[\\]\\{\\}]/g.test(dependentKey)) && (0, _emberDebug.assert)('Dependent key passed to `computed.uniqBy` shouldn\\'t contain brace expanding pattern.', !/[\\[\\]\\{\\}]/g.test(dependentKey)));\n\n\n    var cp = new _emberMetal.ComputedProperty(function () {\n      var uniq = (0, _array.A)();\n      var list = (0, _emberMetal.get)(this, dependentKey);\n      if ((0, _utils.isArray)(list)) {\n        var seen = new Set();\n        list.forEach(function (item) {\n          var val = (0, _emberMetal.get)(item, propertyKey);\n          if (!seen.has(val)) {\n            seen.add(val);\n            uniq.push(item);\n          }\n        });\n      }\n      return uniq;\n    }, { dependentKeys: [dependentKey + '.[]'], readOnly: true });\n\n    return cp;\n  }\n\n  /**\n    A computed property which returns a new array with all the unique\n    elements from one or more dependent arrays.\n  \n    Example\n  \n    ```javascript\n    import { union } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let Hamster = EmberObject.extend({\n      uniqueFruits: union('fruits', 'vegetables')\n    });\n  \n    let hamster = Hamster.create({\n      fruits: [\n        'banana',\n        'grape',\n        'kale',\n        'banana',\n        'tomato'\n      ],\n      vegetables: [\n        'tomato',\n        'carrot',\n        'lettuce'\n      ]\n    });\n  \n    hamster.get('uniqueFruits'); // ['banana', 'grape', 'kale', 'tomato', 'carrot', 'lettuce']\n    ```\n  \n    @method union\n    @for @ember/object/computed\n    @static\n    @param {String} propertyKey*\n    @return {ComputedProperty} computes a new array with all the\n    unique elements from the dependent array\n    @public\n  */\n  var union = exports.union = uniq;\n\n  /**\n    A computed property which returns a new array with all the elements\n    two or more dependent arrays have in common.\n  \n    Example\n  \n    ```javascript\n    import { intersect } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let obj = EmberObject.extend({\n      friendsInCommon: intersect('adaFriends', 'charlesFriends')\n    }).create({\n      adaFriends: ['Charles Babbage', 'John Hobhouse', 'William King', 'Mary Somerville'],\n      charlesFriends: ['William King', 'Mary Somerville', 'Ada Lovelace', 'George Peacock']\n    });\n  \n    obj.get('friendsInCommon'); // ['William King', 'Mary Somerville']\n    ```\n  \n    @method intersect\n    @for @ember/object/computed\n    @static\n    @param {String} propertyKey*\n    @return {ComputedProperty} computes a new array with all the\n    duplicated elements from the dependent arrays\n    @public\n  */\n  function intersect() {\n    for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    return multiArrayMacro(args, function (dependentKeys) {\n      var _this2 = this;\n\n      var arrays = dependentKeys.map(function (dependentKey) {\n        var array = (0, _emberMetal.get)(_this2, dependentKey);\n        return (0, _utils.isArray)(array) ? array : [];\n      });\n\n      var results = arrays.pop().filter(function (candidate) {\n        for (var i = 0; i < arrays.length; i++) {\n          var found = false;\n          var array = arrays[i];\n          for (var j = 0; j < array.length; j++) {\n            if (array[j] === candidate) {\n              found = true;\n              break;\n            }\n          }\n\n          if (found === false) {\n            return false;\n          }\n        }\n\n        return true;\n      }, 'intersect');\n\n      return (0, _array.A)(results);\n    });\n  }\n\n  /**\n    A computed property which returns a new array with all the\n    properties from the first dependent array that are not in the second\n    dependent array.\n  \n    Example\n  \n    ```javascript\n    import { setDiff } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let Hamster = EmberObject.extend({\n      likes: ['banana', 'grape', 'kale'],\n      wants: setDiff('likes', 'fruits')\n    });\n  \n    let hamster = Hamster.create({\n      fruits: [\n        'grape',\n        'kale',\n      ]\n    });\n  \n    hamster.get('wants'); // ['banana']\n    ```\n  \n    @method setDiff\n    @for @ember/object/computed\n    @static\n    @param {String} setAProperty\n    @param {String} setBProperty\n    @return {ComputedProperty} computes a new array with all the\n    items from the first dependent array that are not in the second\n    dependent array\n    @public\n  */\n  function setDiff(setAProperty, setBProperty) {\n    (true && !(arguments.length === 2) && (0, _emberDebug.assert)('\\`computed.setDiff\\` requires exactly two dependent arrays.', arguments.length === 2));\n    (true && !(!/[\\[\\]\\{\\}]/g.test(setAProperty) && !/[\\[\\]\\{\\}]/g.test(setBProperty)) && (0, _emberDebug.assert)('Dependent keys passed to `computed.setDiff` shouldn\\'t contain brace expanding pattern.', !/[\\[\\]\\{\\}]/g.test(setAProperty) && !/[\\[\\]\\{\\}]/g.test(setBProperty)));\n\n\n    var cp = new _emberMetal.ComputedProperty(function () {\n      var setA = this.get(setAProperty);\n      var setB = this.get(setBProperty);\n\n      if (!(0, _utils.isArray)(setA)) {\n        return (0, _array.A)();\n      }\n      if (!(0, _utils.isArray)(setB)) {\n        return (0, _array.A)(setA);\n      }\n\n      return setA.filter(function (x) {\n        return setB.indexOf(x) === -1;\n      });\n    }, {\n      dependentKeys: [setAProperty + '.[]', setBProperty + '.[]'],\n      readOnly: true\n    });\n\n    return cp;\n  }\n\n  /**\n    A computed property that returns the array of values\n    for the provided dependent properties.\n  \n    Example\n  \n    ```javascript\n    import { collect } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let Hamster = EmberObject.extend({\n      clothes: collect('hat', 'shirt')\n    });\n  \n    let hamster = Hamster.create();\n  \n    hamster.get('clothes'); // [null, null]\n    hamster.set('hat', 'Camp Hat');\n    hamster.set('shirt', 'Camp Shirt');\n    hamster.get('clothes'); // ['Camp Hat', 'Camp Shirt']\n    ```\n  \n    @method collect\n    @for @ember/object/computed\n    @static\n    @param {String} dependentKey*\n    @return {ComputedProperty} computed property which maps\n    values of all passed in properties to an array.\n    @public\n  */\n  function collect() {\n    for (var _len3 = arguments.length, dependentKeys = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      dependentKeys[_key3] = arguments[_key3];\n    }\n\n    return multiArrayMacro(dependentKeys, function () {\n      var properties = (0, _emberMetal.getProperties)(this, dependentKeys);\n      var res = (0, _array.A)();\n      for (var key in properties) {\n        if (properties.hasOwnProperty(key)) {\n          if (properties[key] === undefined) {\n            res.push(null);\n          } else {\n            res.push(properties[key]);\n          }\n        }\n      }\n      return res;\n    }, 'collect');\n  }\n\n  /**\n    A computed property which returns a new array with all the\n    properties from the first dependent array sorted based on a property\n    or sort function.\n  \n    The callback method you provide should have the following signature:\n  \n    ```javascript\n    function(itemA, itemB);\n    ```\n  \n    - `itemA` the first item to compare.\n    - `itemB` the second item to compare.\n  \n    This function should return negative number (e.g. `-1`) when `itemA` should come before\n    `itemB`. It should return positive number (e.g. `1`) when `itemA` should come after\n    `itemB`. If the `itemA` and `itemB` are equal this function should return `0`.\n  \n    Therefore, if this function is comparing some numeric values, simple `itemA - itemB` or\n    `itemA.get( 'foo' ) - itemB.get( 'foo' )` can be used instead of series of `if`.\n  \n    Example\n  \n    ```javascript\n    import { sort } from '@ember/object/computed';\n    import EmberObject from '@ember/object';\n  \n    let ToDoList = EmberObject.extend({\n      // using standard ascending sort\n      todosSorting: Object.freeze(['name']),\n      sortedTodos: sort('todos', 'todosSorting'),\n  \n      // using descending sort\n      todosSortingDesc: Object.freeze(['name:desc']),\n      sortedTodosDesc: sort('todos', 'todosSortingDesc'),\n  \n      // using a custom sort function\n      priorityTodos: sort('todos', function(a, b){\n        if (a.priority > b.priority) {\n          return 1;\n        } else if (a.priority < b.priority) {\n          return -1;\n        }\n  \n        return 0;\n      })\n    });\n  \n    let todoList = ToDoList.create({todos: [\n      { name: 'Unit Test', priority: 2 },\n      { name: 'Documentation', priority: 3 },\n      { name: 'Release', priority: 1 }\n    ]});\n  \n    todoList.get('sortedTodos');      // [{ name:'Documentation', priority:3 }, { name:'Release', priority:1 }, { name:'Unit Test', priority:2 }]\n    todoList.get('sortedTodosDesc');  // [{ name:'Unit Test', priority:2 }, { name:'Release', priority:1 }, { name:'Documentation', priority:3 }]\n    todoList.get('priorityTodos');    // [{ name:'Release', priority:1 }, { name:'Unit Test', priority:2 }, { name:'Documentation', priority:3 }]\n    ```\n  \n    @method sort\n    @for @ember/object/computed\n    @static\n    @param {String} itemsKey\n    @param {String or Function} sortDefinition a dependent key to an\n    array of sort properties (add `:desc` to the arrays sort properties to sort descending) or a function to use when sorting\n    @return {ComputedProperty} computes a new sorted array based\n    on the sort property array or callback function\n    @public\n  */\n  function sort(itemsKey, sortDefinition) {\n    (true && !(arguments.length === 2) && (0, _emberDebug.assert)('\\`computed.sort\\` requires two arguments: an array key to sort and ' + 'either a sort properties key or sort function', arguments.length === 2));\n\n\n    if (typeof sortDefinition === 'function') {\n      return customSort(itemsKey, sortDefinition);\n    } else {\n      return propertySort(itemsKey, sortDefinition);\n    }\n  }\n\n  function customSort(itemsKey, comparator) {\n    return arrayMacro(itemsKey, function (value) {\n      var _this3 = this;\n\n      return value.slice().sort(function (x, y) {\n        return comparator.call(_this3, x, y);\n      });\n    });\n  }\n\n  // This one needs to dynamically set up and tear down observers on the itemsKey\n  // depending on the sortProperties\n  function propertySort(itemsKey, sortPropertiesKey) {\n    var cp = new _emberMetal.ComputedProperty(function (key) {\n      var _this4 = this;\n\n      var sortProperties = (0, _emberMetal.get)(this, sortPropertiesKey);\n\n      (true && !((0, _utils.isArray)(sortProperties) && sortProperties.every(function (s) {\n        return typeof s === 'string';\n      })) && (0, _emberDebug.assert)('The sort definition for \\'' + key + '\\' on ' + this + ' must be a function or an array of strings', (0, _utils.isArray)(sortProperties) && sortProperties.every(function (s) {\n        return typeof s === 'string';\n      })));\n\n\n      // Add/remove property observers as required.\n      var activeObserversMap = cp._activeObserverMap || (cp._activeObserverMap = new WeakMap());\n      var activeObservers = activeObserversMap.get(this);\n\n      if (activeObservers !== undefined) {\n        activeObservers.forEach(function (args) {\n          return _emberMetal.removeObserver.apply(undefined, args);\n        });\n      }\n\n      function sortPropertyDidChange() {\n        this.notifyPropertyChange(key);\n      }\n\n      var itemsKeyIsAtThis = itemsKey === '@this';\n      var normalizedSortProperties = normalizeSortProperties(sortProperties);\n      activeObservers = normalizedSortProperties.map(function (_ref) {\n        var prop = _ref[0];\n\n        var path = itemsKeyIsAtThis ? '@each.' + prop : itemsKey + '.@each.' + prop;\n        (0, _emberMetal.addObserver)(_this4, path, sortPropertyDidChange);\n        return [_this4, path, sortPropertyDidChange];\n      });\n\n      activeObserversMap.set(this, activeObservers);\n\n      var items = itemsKeyIsAtThis ? this : (0, _emberMetal.get)(this, itemsKey);\n      if (!(0, _utils.isArray)(items)) {\n        return (0, _array.A)();\n      }\n\n      if (normalizedSortProperties.length === 0) {\n        return (0, _array.A)(items.slice());\n      } else {\n        return sortByNormalizedSortProperties(items, normalizedSortProperties);\n      }\n    }, { dependentKeys: [sortPropertiesKey + '.[]'], readOnly: true });\n\n    cp._activeObserverMap = undefined;\n\n    return cp;\n  }\n\n  function normalizeSortProperties(sortProperties) {\n    return sortProperties.map(function (p) {\n      var _p$split = p.split(':'),\n          prop = _p$split[0],\n          direction = _p$split[1];\n\n      direction = direction || 'asc';\n\n      return [prop, direction];\n    });\n  }\n\n  function sortByNormalizedSortProperties(items, normalizedSortProperties) {\n    return (0, _array.A)(items.slice().sort(function (itemA, itemB) {\n      for (var i = 0; i < normalizedSortProperties.length; i++) {\n        var _normalizedSortProper = normalizedSortProperties[i],\n            prop = _normalizedSortProper[0],\n            direction = _normalizedSortProper[1];\n\n        var result = (0, _compare.default)((0, _emberMetal.get)(itemA, prop), (0, _emberMetal.get)(itemB, prop));\n        if (result !== 0) {\n          return direction === 'desc' ? -1 * result : result;\n        }\n      }\n      return 0;\n    }));\n  }\n});","enifed('ember-runtime/controllers/controller', ['exports', 'ember-debug', 'ember-runtime/system/object', 'ember-runtime/mixins/controller', 'ember-runtime/inject'], function (exports, _emberDebug, _object, _controller, _inject) {\n  'use strict';\n\n  /**\n  @module @ember/controller\n  */\n\n  /**\n    @class Controller\n    @extends EmberObject\n    @uses Ember.ControllerMixin\n    @public\n  */\n  var Controller = _object.default.extend(_controller.default);\n\n  function controllerInjectionHelper(factory) {\n    (true && !(_controller.default.detect(factory.PrototypeMixin)) && (0, _emberDebug.assert)('Defining an injected controller property on a ' + 'non-controller is not allowed.', _controller.default.detect(factory.PrototypeMixin)));\n  }\n\n  /**\n    Creates a property that lazily looks up another controller in the container.\n    Can only be used when defining another controller.\n  \n    Example:\n  \n    ```app/controllers/post.js\n    import Controller, {\n      inject as controller\n    } from '@ember/controller';\n  \n    export default Controller.extend({\n      posts: controller()\n    });\n    ```\n  \n    This example will create a `posts` property on the `post` controller that\n    looks up the `posts` controller in the container, making it easy to\n    reference other controllers.\n  \n    @method inject\n    @static\n    @for @ember/controller\n    @since 1.10.0\n    @param {String} name (optional) name of the controller to inject, defaults\n           to the property's name\n    @return {Ember.InjectedProperty} injection descriptor instance\n    @public\n  */\n  (0, _inject.createInjectionHelper)('controller', controllerInjectionHelper);\n\n  exports.default = Controller;\n});","enifed('ember-runtime/copy', ['exports', 'ember-debug', 'ember-runtime/system/object', 'ember-runtime/mixins/copyable'], function (exports, _emberDebug, _object, _copyable) {\n  'use strict';\n\n  exports.default = copy;\n\n  /**\n   @module @ember/object\n  */\n  function _copy(obj, deep, seen, copies) {\n    // primitive data types are immutable, just return them.\n    if (typeof obj !== 'object' || obj === null) {\n      return obj;\n    }\n\n    var ret = void 0,\n        loc = void 0;\n\n    // avoid cyclical loops\n    if (deep && (loc = seen.indexOf(obj)) >= 0) {\n      return copies[loc];\n    }\n\n    (true && !(!(obj instanceof _object.default) || _copyable.default.detect(obj)) && (0, _emberDebug.assert)('Cannot clone an EmberObject that does not implement Copyable', !(obj instanceof _object.default) || _copyable.default.detect(obj)));\n\n\n    // IMPORTANT: this specific test will detect a native array only. Any other\n    // object will need to implement Copyable.\n    if (Array.isArray(obj)) {\n      ret = obj.slice();\n\n      if (deep) {\n        loc = ret.length;\n\n        while (--loc >= 0) {\n          ret[loc] = _copy(ret[loc], deep, seen, copies);\n        }\n      }\n    } else if (_copyable.default.detect(obj)) {\n      ret = obj.copy(deep, seen, copies);\n    } else if (obj instanceof Date) {\n      ret = new Date(obj.getTime());\n    } else {\n      ret = {};\n      var key = void 0;\n      for (key in obj) {\n        // support Null prototype\n        if (!Object.prototype.hasOwnProperty.call(obj, key)) {\n          continue;\n        }\n\n        // Prevents browsers that don't respect non-enumerability from\n        // copying internal Ember properties\n        if (key.substring(0, 2) === '__') {\n          continue;\n        }\n\n        ret[key] = deep ? _copy(obj[key], deep, seen, copies) : obj[key];\n      }\n    }\n\n    if (deep) {\n      seen.push(obj);\n      copies.push(ret);\n    }\n\n    return ret;\n  }\n\n  /**\n    Creates a shallow copy of the passed object. A deep copy of the object is\n    returned if the optional `deep` argument is `true`.\n  \n    If the passed object implements the `Copyable` interface, then this\n    function will delegate to the object's `copy()` method and return the\n    result. See `Copyable` for further details.\n  \n    For primitive values (which are immutable in JavaScript), the passed object\n    is simply returned.\n  \n    @method copy\n    @static\n    @for @ember/object/internals\n    @param {Object} obj The object to clone\n    @param {Boolean} [deep=false] If true, a deep copy of the object is made.\n    @return {Object} The copied object\n    @public\n  */\n  function copy(obj, deep) {\n    // fast paths\n    if ('object' !== typeof obj || obj === null) {\n      return obj; // can't copy primitives\n    }\n\n    if (_copyable.default.detect(obj)) {\n      return obj.copy(deep);\n    }\n\n    return _copy(obj, deep, deep ? [] : null, deep ? [] : null);\n  }\n});","enifed('ember-runtime/ext/function', ['ember-environment', 'ember-metal', 'ember-debug'], function (_emberEnvironment, _emberMetal, _emberDebug) {\n  'use strict';\n\n  var FunctionPrototype = Function.prototype; /**\n                                              @module ember\n                                              */\n\n  if (_emberEnvironment.ENV.EXTEND_PROTOTYPES.Function) {\n    /**\n      The `property` extension of Javascript's Function prototype is available\n      when `EmberENV.EXTEND_PROTOTYPES` or `EmberENV.EXTEND_PROTOTYPES.Function` is\n      `true`, which is the default.\n       Computed properties allow you to treat a function like a property:\n       ```app/utils/president.js\n      import EmberObject from '@ember/object';\n       export default EmberObject.extend({\n        firstName: '',\n        lastName:  '',\n         fullName: function() {\n          return this.get('firstName') + ' ' + this.get('lastName');\n        }.property() // Call this flag to mark the function as a property\n      });\n      ```\n       ```javascript\n      let president = President.create({\n        firstName: 'Barack',\n        lastName: 'Obama'\n      });\n       president.get('fullName'); // 'Barack Obama'\n      ```\n       Treating a function like a property is useful because they can work with\n      bindings, just like any other property.\n       Many computed properties have dependencies on other properties. For\n      example, in the above example, the `fullName` property depends on\n      `firstName` and `lastName` to determine its value. You can tell Ember\n      about these dependencies like this:\n       ```app/utils/president.js\n      import EmberObject from '@ember/object';\n       export default EmberObject.extend({\n        firstName: '',\n        lastName:  '',\n         fullName: function() {\n          return this.get('firstName') + ' ' + this.get('lastName');\n           // Tell Ember.js that this computed property depends on firstName\n          // and lastName\n        }.property('firstName', 'lastName')\n      });\n      ```\n       Make sure you list these dependencies so Ember knows when to update\n      bindings that connect to a computed property. Changing a dependency\n      will not immediately trigger an update of the computed property, but\n      will instead clear the cache so that it is updated when the next `get`\n      is called on the property.\n       See [ComputedProperty](/api/ember/release/classes/ComputedProperty), [@ember/object/computed](/api/ember/release/classes/@ember%2Fobject%2Fcomputed).\n       @method property\n      @for Function\n      @public\n    */\n    Object.defineProperty(FunctionPrototype, 'property', {\n      configurable: true,\n      enumerable: false,\n      writable: true,\n      value: function () {\n        return _emberMetal.computed.apply(undefined, Array.prototype.slice.call(arguments).concat([this]));\n      }\n    });\n\n    /**\n      The `observes` extension of Javascript's Function prototype is available\n      when `EmberENV.EXTEND_PROTOTYPES` or `EmberENV.EXTEND_PROTOTYPES.Function` is\n      true, which is the default.\n       You can observe property changes simply by adding the `observes`\n      call to the end of your method declarations in classes that you write.\n      For example:\n       ```javascript\n      import EmberObject from '@ember/object';\n       EmberObject.extend({\n        valueObserver: function() {\n          // Executes whenever the \"value\" property changes\n        }.observes('value')\n      });\n      ```\n       In the future this method may become asynchronous.\n       See `observer`.\n       @method observes\n      @for Function\n      @public\n    */\n    Object.defineProperty(FunctionPrototype, 'observes', {\n      configurable: true,\n      enumerable: false,\n      writable: true,\n      value: function () {\n        return _emberMetal.observer.apply(undefined, Array.prototype.slice.call(arguments).concat([this]));\n      }\n    });\n\n    Object.defineProperty(FunctionPrototype, '_observesImmediately', {\n      configurable: true,\n      enumerable: false,\n      writable: true,\n      value: function () {\n        (true && !(function checkIsInternalProperty() {\n          for (var i = 0; i < arguments.length; i++) {\n            if (arguments[i].indexOf('.') !== -1) {\n              return false;\n            }\n          }\n          return true;\n        }) && (0, _emberDebug.assert)('Immediate observers must observe internal properties only, ' + 'not properties on other objects.', function checkIsInternalProperty() {\n          for (var i = 0; i < arguments.length; i++) {\n            if (arguments[i].indexOf('.') !== -1) {\n              return false;\n            }\n          }return true;\n        }));\n\n\n        // observes handles property expansion\n        return this.observes.apply(this, arguments);\n      }\n    });\n\n    /**\n      The `on` extension of Javascript's Function prototype is available\n      when `EmberENV.EXTEND_PROTOTYPES` or `EmberENV.EXTEND_PROTOTYPES.Function` is\n      true, which is the default.\n       You can listen for events simply by adding the `on` call to the end of\n      your method declarations in classes or mixins that you write. For example:\n       ```javascript\n      import Mixin from '@ember/mixin';\n       Mixin.create({\n        doSomethingWithElement: function() {\n          // Executes whenever the \"didInsertElement\" event fires\n        }.on('didInsertElement')\n      });\n      ```\n       See `@ember/object/evented/on`.\n       @method on\n      @for Function\n      @public\n    */\n\n    Object.defineProperty(FunctionPrototype, 'on', {\n      configurable: true,\n      enumerable: false,\n      writable: true,\n      value: function () {\n        return _emberMetal.on.apply(undefined, Array.prototype.slice.call(arguments).concat([this]));\n      }\n    });\n  }\n});","enifed('ember-runtime/ext/rsvp', ['exports', 'ember-babel', 'rsvp', 'ember-metal', 'ember-debug', 'container'], function (exports, _emberBabel, _rsvp, _emberMetal, _emberDebug, _container) {\n  'use strict';\n\n  exports.onerrorDefault = onerrorDefault;\n\n  var _templateObject = (0, _emberBabel.taggedTemplateLiteralLoose)(['rsvpAfter'], ['rsvpAfter']);\n\n  var backburner = _emberMetal.run.backburner;\n\n  _rsvp.configure('async', function (callback, promise) {\n    backburner.schedule('actions', null, callback, promise);\n  });\n\n  _rsvp.configure('after', function (cb) {\n    backburner.schedule((0, _container.privatize)(_templateObject), null, cb);\n  });\n\n  _rsvp.on('error', onerrorDefault);\n\n  function onerrorDefault(reason) {\n    var error = errorFor(reason);\n    if (error) {\n      var overrideDispatch = (0, _emberMetal.getDispatchOverride)();\n      if (overrideDispatch) {\n        overrideDispatch(error);\n      } else {\n        throw error;\n      }\n    }\n  }\n\n  function errorFor(reason) {\n    if (!reason) return;\n\n    if (reason.errorThrown) {\n      return unwrapErrorThrown(reason);\n    }\n\n    if (reason.name === 'UnrecognizedURLError') {\n      (true && !(false) && (0, _emberDebug.assert)('The URL \\'' + reason.message + '\\' did not match any routes in your application', false));\n\n      return;\n    }\n\n    if (reason.name === 'TransitionAborted') {\n      return;\n    }\n\n    return reason;\n  }\n\n  function unwrapErrorThrown(reason) {\n    var error = reason.errorThrown;\n    if (typeof error === 'string') {\n      error = new Error(error);\n    }\n    Object.defineProperty(error, '__reason_with_error_thrown__', {\n      value: reason,\n      enumerable: false\n    });\n    return error;\n  }\n\n  exports.default = _rsvp;\n});","enifed('ember-runtime/ext/string', ['ember-environment', 'ember-runtime/system/string'], function (_emberEnvironment, _string) {\n  'use strict';\n\n  /**\n  @module @ember/string\n  */\n\n  var StringPrototype = String.prototype;\n\n  if (_emberEnvironment.ENV.EXTEND_PROTOTYPES.String) {\n    /**\n      See [String.w](/api/ember/release/classes/String/methods/w?anchor=w).\n       @method w\n      @for @ember/string\n      @static\n      @private\n    */\n    Object.defineProperty(StringPrototype, 'w', {\n      configurable: true,\n      enumerable: false,\n      writeable: true,\n      value: function () {\n        return (0, _string.w)(this);\n      }\n    });\n\n    /**\n      See [String.loc](/api/ember/release/classes/String/methods/loc?anchor=loc).\n       @method loc\n      @for @ember/string\n      @static\n      @private\n    */\n    Object.defineProperty(StringPrototype, 'loc', {\n      configurable: true,\n      enumerable: false,\n      writeable: true,\n      value: function () {\n        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n\n        return (0, _string.loc)(this, args);\n      }\n    });\n\n    /**\n      See [String.camelize](/api/ember/release/classes/String/methods/camelize?anchor=camelize).\n       @method camelize\n      @for @ember/string\n      @static\n      @private\n    */\n    Object.defineProperty(StringPrototype, 'camelize', {\n      configurable: true,\n      enumerable: false,\n      writeable: true,\n      value: function () {\n        return (0, _string.camelize)(this);\n      }\n    });\n\n    /**\n      See [String.decamelize](/api/ember/release/classes/String/methods/decamelize?anchor=decamelize).\n       @method decamelize\n      @for @ember/string\n      @static\n      @private\n    */\n    Object.defineProperty(StringPrototype, 'decamelize', {\n      configurable: true,\n      enumerable: false,\n      writeable: true,\n      value: function () {\n        return (0, _string.decamelize)(this);\n      }\n    });\n\n    /**\n      See [String.dasherize](/api/ember/release/classes/String/methods/dasherize?anchor=dasherize).\n       @method dasherize\n      @for @ember/string\n      @static\n      @private\n    */\n    Object.defineProperty(StringPrototype, 'dasherize', {\n      configurable: true,\n      enumerable: false,\n      writeable: true,\n      value: function () {\n        return (0, _string.dasherize)(this);\n      }\n    });\n\n    /**\n      See [String.underscore](/api/ember/release/classes/String/methods/underscore?anchor=underscore).\n       @method underscore\n      @for @ember/string\n      @static\n      @private\n    */\n    Object.defineProperty(StringPrototype, 'underscore', {\n      configurable: true,\n      enumerable: false,\n      writeable: true,\n      value: function () {\n        return (0, _string.underscore)(this);\n      }\n    });\n\n    /**\n      See [String.classify](/api/ember/release/classes/String/methods/classify?anchor=classify).\n       @method classify\n      @for @ember/string\n      @static\n      @private\n    */\n    Object.defineProperty(StringPrototype, 'classify', {\n      configurable: true,\n      enumerable: false,\n      writeable: true,\n      value: function () {\n        return (0, _string.classify)(this);\n      }\n    });\n\n    /**\n      See [String.capitalize](/api/ember/release/classes/String/methods/capitalize?anchor=capitalize).\n       @method capitalize\n      @for @ember/string\n      @static\n      @private\n    */\n    Object.defineProperty(StringPrototype, 'capitalize', {\n      configurable: true,\n      enumerable: false,\n      writeable: true,\n      value: function () {\n        return (0, _string.capitalize)(this);\n      }\n    });\n  }\n});","enifed('ember-runtime/index', ['exports', 'ember-runtime/system/object', 'ember-runtime/system/string', 'ember-runtime/mixins/registry_proxy', 'ember-runtime/mixins/container_proxy', 'ember-runtime/copy', 'ember-runtime/inject', 'ember-runtime/compare', 'ember-runtime/is-equal', 'ember-runtime/mixins/array', 'ember-runtime/mixins/comparable', 'ember-runtime/system/namespace', 'ember-runtime/system/array_proxy', 'ember-runtime/system/object_proxy', 'ember-runtime/system/core_object', 'ember-runtime/mixins/action_handler', 'ember-runtime/mixins/copyable', 'ember-runtime/mixins/enumerable', 'ember-runtime/mixins/-proxy', 'ember-runtime/system/lazy_load', 'ember-runtime/mixins/observable', 'ember-runtime/mixins/mutable_enumerable', 'ember-runtime/mixins/target_action_support', 'ember-runtime/mixins/evented', 'ember-runtime/mixins/promise_proxy', 'ember-runtime/computed/computed_macros', 'ember-runtime/computed/reduce_computed_macros', 'ember-runtime/controllers/controller', 'ember-runtime/mixins/controller', 'ember-runtime/system/service', 'ember-runtime/ext/rsvp', 'ember-runtime/utils', 'ember-runtime/string_registry', 'ember-runtime/ext/string', 'ember-runtime/ext/function'], function (exports, _object, _string, _registry_proxy, _container_proxy, _copy, _inject, _compare, _isEqual, _array, _comparable, _namespace, _array_proxy, _object_proxy, _core_object, _action_handler, _copyable, _enumerable, _proxy, _lazy_load, _observable, _mutable_enumerable, _target_action_support, _evented, _promise_proxy, _computed_macros, _reduce_computed_macros, _controller, _controller2, _service, _rsvp, _utils, _string_registry) {\n  'use strict';\n\n  exports.setStrings = exports.getStrings = exports.typeOf = exports.isArray = exports.onerrorDefault = exports.RSVP = exports.Service = exports.ControllerMixin = exports.Controller = exports.collect = exports.intersect = exports.union = exports.uniqBy = exports.uniq = exports.filterBy = exports.filter = exports.mapBy = exports.setDiff = exports.sort = exports.map = exports.max = exports.min = exports.sum = exports.or = exports.and = exports.deprecatingAlias = exports.readOnly = exports.oneWay = exports.lte = exports.lt = exports.gte = exports.gt = exports.equal = exports.match = exports.bool = exports.not = exports.none = exports.notEmpty = exports.empty = exports.PromiseProxyMixin = exports.Evented = exports.TargetActionSupport = exports.MutableEnumerable = exports.Observable = exports._loaded = exports.runLoadHooks = exports.onLoad = exports._contentFor = exports._ProxyMixin = exports.Enumerable = exports.Copyable = exports.ActionHandler = exports.CoreObject = exports.ObjectProxy = exports.ArrayProxy = exports.setNamespaceSearchDisabled = exports.isNamespaceSearchDisabled = exports.Namespace = exports.Comparable = exports.removeAt = exports.MutableArray = exports.A = exports.NativeArray = exports.removeArrayObserver = exports.addArrayObserver = exports.isEmberArray = exports.Array = exports.isEqual = exports.compare = exports.inject = exports.copy = exports.ContainerProxyMixin = exports.RegistryProxyMixin = exports.String = exports.FrameworkObject = exports.Object = undefined;\n  Object.defineProperty(exports, 'Object', {\n    enumerable: true,\n    get: function () {\n      return _object.default;\n    }\n  });\n  Object.defineProperty(exports, 'FrameworkObject', {\n    enumerable: true,\n    get: function () {\n      return _object.FrameworkObject;\n    }\n  });\n  Object.defineProperty(exports, 'String', {\n    enumerable: true,\n    get: function () {\n      return _string.default;\n    }\n  });\n  Object.defineProperty(exports, 'RegistryProxyMixin', {\n    enumerable: true,\n    get: function () {\n      return _registry_proxy.default;\n    }\n  });\n  Object.defineProperty(exports, 'ContainerProxyMixin', {\n    enumerable: true,\n    get: function () {\n      return _container_proxy.default;\n    }\n  });\n  Object.defineProperty(exports, 'copy', {\n    enumerable: true,\n    get: function () {\n      return _copy.default;\n    }\n  });\n  Object.defineProperty(exports, 'inject', {\n    enumerable: true,\n    get: function () {\n      return _inject.default;\n    }\n  });\n  Object.defineProperty(exports, 'compare', {\n    enumerable: true,\n    get: function () {\n      return _compare.default;\n    }\n  });\n  Object.defineProperty(exports, 'isEqual', {\n    enumerable: true,\n    get: function () {\n      return _isEqual.default;\n    }\n  });\n  Object.defineProperty(exports, 'Array', {\n    enumerable: true,\n    get: function () {\n      return _array.default;\n    }\n  });\n  Object.defineProperty(exports, 'isEmberArray', {\n    enumerable: true,\n    get: function () {\n      return _array.isEmberArray;\n    }\n  });\n  Object.defineProperty(exports, 'addArrayObserver', {\n    enumerable: true,\n    get: function () {\n      return _array.addArrayObserver;\n    }\n  });\n  Object.defineProperty(exports, 'removeArrayObserver', {\n    enumerable: true,\n    get: function () {\n      return _array.removeArrayObserver;\n    }\n  });\n  Object.defineProperty(exports, 'NativeArray', {\n    enumerable: true,\n    get: function () {\n      return _array.NativeArray;\n    }\n  });\n  Object.defineProperty(exports, 'A', {\n    enumerable: true,\n    get: function () {\n      return _array.A;\n    }\n  });\n  Object.defineProperty(exports, 'MutableArray', {\n    enumerable: true,\n    get: function () {\n      return _array.MutableArray;\n    }\n  });\n  Object.defineProperty(exports, 'removeAt', {\n    enumerable: true,\n    get: function () {\n      return _array.removeAt;\n    }\n  });\n  Object.defineProperty(exports, 'Comparable', {\n    enumerable: true,\n    get: function () {\n      return _comparable.default;\n    }\n  });\n  Object.defineProperty(exports, 'Namespace', {\n    enumerable: true,\n    get: function () {\n      return _namespace.default;\n    }\n  });\n  Object.defineProperty(exports, 'isNamespaceSearchDisabled', {\n    enumerable: true,\n    get: function () {\n      return _namespace.isSearchDisabled;\n    }\n  });\n  Object.defineProperty(exports, 'setNamespaceSearchDisabled', {\n    enumerable: true,\n    get: function () {\n      return _namespace.setSearchDisabled;\n    }\n  });\n  Object.defineProperty(exports, 'ArrayProxy', {\n    enumerable: true,\n    get: function () {\n      return _array_proxy.default;\n    }\n  });\n  Object.defineProperty(exports, 'ObjectProxy', {\n    enumerable: true,\n    get: function () {\n      return _object_proxy.default;\n    }\n  });\n  Object.defineProperty(exports, 'CoreObject', {\n    enumerable: true,\n    get: function () {\n      return _core_object.default;\n    }\n  });\n  Object.defineProperty(exports, 'ActionHandler', {\n    enumerable: true,\n    get: function () {\n      return _action_handler.default;\n    }\n  });\n  Object.defineProperty(exports, 'Copyable', {\n    enumerable: true,\n    get: function () {\n      return _copyable.default;\n    }\n  });\n  Object.defineProperty(exports, 'Enumerable', {\n    enumerable: true,\n    get: function () {\n      return _enumerable.default;\n    }\n  });\n  Object.defineProperty(exports, '_ProxyMixin', {\n    enumerable: true,\n    get: function () {\n      return _proxy.default;\n    }\n  });\n  Object.defineProperty(exports, '_contentFor', {\n    enumerable: true,\n    get: function () {\n      return _proxy.contentFor;\n    }\n  });\n  Object.defineProperty(exports, 'onLoad', {\n    enumerable: true,\n    get: function () {\n      return _lazy_load.onLoad;\n    }\n  });\n  Object.defineProperty(exports, 'runLoadHooks', {\n    enumerable: true,\n    get: function () {\n      return _lazy_load.runLoadHooks;\n    }\n  });\n  Object.defineProperty(exports, '_loaded', {\n    enumerable: true,\n    get: function () {\n      return _lazy_load._loaded;\n    }\n  });\n  Object.defineProperty(exports, 'Observable', {\n    enumerable: true,\n    get: function () {\n      return _observable.default;\n    }\n  });\n  Object.defineProperty(exports, 'MutableEnumerable', {\n    enumerable: true,\n    get: function () {\n      return _mutable_enumerable.default;\n    }\n  });\n  Object.defineProperty(exports, 'TargetActionSupport', {\n    enumerable: true,\n    get: function () {\n      return _target_action_support.default;\n    }\n  });\n  Object.defineProperty(exports, 'Evented', {\n    enumerable: true,\n    get: function () {\n      return _evented.default;\n    }\n  });\n  Object.defineProperty(exports, 'PromiseProxyMixin', {\n    enumerable: true,\n    get: function () {\n      return _promise_proxy.default;\n    }\n  });\n  Object.defineProperty(exports, 'empty', {\n    enumerable: true,\n    get: function () {\n      return _computed_macros.empty;\n    }\n  });\n  Object.defineProperty(exports, 'notEmpty', {\n    enumerable: true,\n    get: function () {\n      return _computed_macros.notEmpty;\n    }\n  });\n  Object.defineProperty(exports, 'none', {\n    enumerable: true,\n    get: function () {\n      return _computed_macros.none;\n    }\n  });\n  Object.defineProperty(exports, 'not', {\n    enumerable: true,\n    get: function () {\n      return _computed_macros.not;\n    }\n  });\n  Object.defineProperty(exports, 'bool', {\n    enumerable: true,\n    get: function () {\n      return _computed_macros.bool;\n    }\n  });\n  Object.defineProperty(exports, 'match', {\n    enumerable: true,\n    get: function () {\n      return _computed_macros.match;\n    }\n  });\n  Object.defineProperty(exports, 'equal', {\n    enumerable: true,\n    get: function () {\n      return _computed_macros.equal;\n    }\n  });\n  Object.defineProperty(exports, 'gt', {\n    enumerable: true,\n    get: function () {\n      return _computed_macros.gt;\n    }\n  });\n  Object.defineProperty(exports, 'gte', {\n    enumerable: true,\n    get: function () {\n      return _computed_macros.gte;\n    }\n  });\n  Object.defineProperty(exports, 'lt', {\n    enumerable: true,\n    get: function () {\n      return _computed_macros.lt;\n    }\n  });\n  Object.defineProperty(exports, 'lte', {\n    enumerable: true,\n    get: function () {\n      return _computed_macros.lte;\n    }\n  });\n  Object.defineProperty(exports, 'oneWay', {\n    enumerable: true,\n    get: function () {\n      return _computed_macros.oneWay;\n    }\n  });\n  Object.defineProperty(exports, 'readOnly', {\n    enumerable: true,\n    get: function () {\n      return _computed_macros.readOnly;\n    }\n  });\n  Object.defineProperty(exports, 'deprecatingAlias', {\n    enumerable: true,\n    get: function () {\n      return _computed_macros.deprecatingAlias;\n    }\n  });\n  Object.defineProperty(exports, 'and', {\n    enumerable: true,\n    get: function () {\n      return _computed_macros.and;\n    }\n  });\n  Object.defineProperty(exports, 'or', {\n    enumerable: true,\n    get: function () {\n      return _computed_macros.or;\n    }\n  });\n  Object.defineProperty(exports, 'sum', {\n    enumerable: true,\n    get: function () {\n      return _reduce_computed_macros.sum;\n    }\n  });\n  Object.defineProperty(exports, 'min', {\n    enumerable: true,\n    get: function () {\n      return _reduce_computed_macros.min;\n    }\n  });\n  Object.defineProperty(exports, 'max', {\n    enumerable: true,\n    get: function () {\n      return _reduce_computed_macros.max;\n    }\n  });\n  Object.defineProperty(exports, 'map', {\n    enumerable: true,\n    get: function () {\n      return _reduce_computed_macros.map;\n    }\n  });\n  Object.defineProperty(exports, 'sort', {\n    enumerable: true,\n    get: function () {\n      return _reduce_computed_macros.sort;\n    }\n  });\n  Object.defineProperty(exports, 'setDiff', {\n    enumerable: true,\n    get: function () {\n      return _reduce_computed_macros.setDiff;\n    }\n  });\n  Object.defineProperty(exports, 'mapBy', {\n    enumerable: true,\n    get: function () {\n      return _reduce_computed_macros.mapBy;\n    }\n  });\n  Object.defineProperty(exports, 'filter', {\n    enumerable: true,\n    get: function () {\n      return _reduce_computed_macros.filter;\n    }\n  });\n  Object.defineProperty(exports, 'filterBy', {\n    enumerable: true,\n    get: function () {\n      return _reduce_computed_macros.filterBy;\n    }\n  });\n  Object.defineProperty(exports, 'uniq', {\n    enumerable: true,\n    get: function () {\n      return _reduce_computed_macros.uniq;\n    }\n  });\n  Object.defineProperty(exports, 'uniqBy', {\n    enumerable: true,\n    get: function () {\n      return _reduce_computed_macros.uniqBy;\n    }\n  });\n  Object.defineProperty(exports, 'union', {\n    enumerable: true,\n    get: function () {\n      return _reduce_computed_macros.union;\n    }\n  });\n  Object.defineProperty(exports, 'intersect', {\n    enumerable: true,\n    get: function () {\n      return _reduce_computed_macros.intersect;\n    }\n  });\n  Object.defineProperty(exports, 'collect', {\n    enumerable: true,\n    get: function () {\n      return _reduce_computed_macros.collect;\n    }\n  });\n  Object.defineProperty(exports, 'Controller', {\n    enumerable: true,\n    get: function () {\n      return _controller.default;\n    }\n  });\n  Object.defineProperty(exports, 'ControllerMixin', {\n    enumerable: true,\n    get: function () {\n      return _controller2.default;\n    }\n  });\n  Object.defineProperty(exports, 'Service', {\n    enumerable: true,\n    get: function () {\n      return _service.default;\n    }\n  });\n  Object.defineProperty(exports, 'RSVP', {\n    enumerable: true,\n    get: function () {\n      return _rsvp.default;\n    }\n  });\n  Object.defineProperty(exports, 'onerrorDefault', {\n    enumerable: true,\n    get: function () {\n      return _rsvp.onerrorDefault;\n    }\n  });\n  Object.defineProperty(exports, 'isArray', {\n    enumerable: true,\n    get: function () {\n      return _utils.isArray;\n    }\n  });\n  Object.defineProperty(exports, 'typeOf', {\n    enumerable: true,\n    get: function () {\n      return _utils.typeOf;\n    }\n  });\n  Object.defineProperty(exports, 'getStrings', {\n    enumerable: true,\n    get: function () {\n      return _string_registry.getStrings;\n    }\n  });\n  Object.defineProperty(exports, 'setStrings', {\n    enumerable: true,\n    get: function () {\n      return _string_registry.setStrings;\n    }\n  });\n});","enifed('ember-runtime/inject', ['exports', 'ember-metal', 'ember-debug'], function (exports, _emberMetal, _emberDebug) {\n  'use strict';\n\n  exports.default = inject;\n  exports.createInjectionHelper = createInjectionHelper;\n  exports.validatePropertyInjections = validatePropertyInjections;\n\n  /**\n  @module ember\n  */\n  /**\n    Namespace for injection helper methods.\n  \n    @class inject\n    @namespace Ember\n    @static\n    @public\n  */\n  function inject() {\n    (true && !(false) && (0, _emberDebug.assert)('Injected properties must be created through helpers, see \\'' + Object.keys(inject).map(function (k) {\n      return '\\'inject.' + k + '\\'';\n    }).join(' or ') + '\\''));\n  }\n\n  // Dictionary of injection validations by type, added to by `createInjectionHelper`\n  var typeValidators = {};\n\n  /**\n    This method allows other Ember modules to register injection helpers for a\n    given container type. Helpers are exported to the `inject` namespace as the\n    container type itself.\n  \n    @private\n    @method createInjectionHelper\n    @since 1.10.0\n    @for Ember\n    @param {String} type The container type the helper will inject\n    @param {Function} validator A validation callback that is executed at mixin-time\n  */\n  function createInjectionHelper(type, validator) {\n    typeValidators[type] = validator;\n\n    inject[type] = function (name) {\n      return new _emberMetal.InjectedProperty(type, name);\n    };\n  }\n\n  /**\n    Validation function that runs per-type validation functions once for each\n    injected type encountered.\n  \n    @private\n    @method validatePropertyInjections\n    @since 1.10.0\n    @for Ember\n    @param {Object} factory The factory object\n  */\n  function validatePropertyInjections(factory) {\n    var proto = factory.proto();\n    var types = [];\n\n    for (var key in proto) {\n      var desc = (0, _emberMetal.descriptorFor)(proto, key);\n      if (desc instanceof _emberMetal.InjectedProperty && types.indexOf(desc.type) === -1) {\n        types.push(desc.type);\n      }\n    }\n\n    if (types.length) {\n      for (var i = 0; i < types.length; i++) {\n        var validator = typeValidators[types[i]];\n\n        if (typeof validator === 'function') {\n          validator(factory);\n        }\n      }\n    }\n\n    return true;\n  }\n});","enifed('ember-runtime/is-equal', ['exports'], function (exports) {\n  'use strict';\n\n  exports.default = isEqual;\n  /**\n   @module @ember/utils\n  */\n  /**\n    Compares two objects, returning true if they are equal.\n  \n    ```javascript\n    import { isEqual } from '@ember/utils';\n  \n    isEqual('hello', 'hello');                   // true\n    isEqual(1, 2);                               // false\n    ```\n  \n    `isEqual` is a more specific comparison than a triple equal comparison.\n    It will call the `isEqual` instance method on the objects being\n    compared, allowing finer control over when objects should be considered\n    equal to each other.\n  \n    ```javascript\n    import { isEqual } from '@ember/utils';\n    import EmberObject from '@ember/object';\n  \n    let Person = EmberObject.extend({\n      isEqual(other) { return this.ssn == other.ssn; }\n    });\n  \n    let personA = Person.create({name: 'Muhammad Ali', ssn: '123-45-6789'});\n    let personB = Person.create({name: 'Cassius Clay', ssn: '123-45-6789'});\n  \n    isEqual(personA, personB); // true\n    ```\n  \n    Due to the expense of array comparisons, collections will never be equal to\n    each other even if each of their items are equal to each other.\n  \n    ```javascript\n    import { isEqual } from '@ember/utils';\n  \n    isEqual([4, 2], [4, 2]);                     // false\n    ```\n  \n    @method isEqual\n    @for @ember/utils\n    @static\n    @param {Object} a first object to compare\n    @param {Object} b second object to compare\n    @return {Boolean}\n    @public\n  */\n  function isEqual(a, b) {\n    if (a && typeof a.isEqual === 'function') {\n      return a.isEqual(b);\n    }\n\n    if (a instanceof Date && b instanceof Date) {\n      return a.getTime() === b.getTime();\n    }\n\n    return a === b;\n  }\n});","enifed('ember-runtime/mixins/-proxy', ['exports', '@glimmer/reference', 'ember-metal', 'ember-debug', 'ember-runtime/computed/computed_macros'], function (exports, _reference, _emberMetal, _emberDebug, _computed_macros) {\n  'use strict';\n\n  exports.contentFor = contentFor;\n  /**\n  @module ember\n  */\n\n  function contentPropertyDidChange(content, contentKey) {\n    var key = contentKey.slice(8); // remove \"content.\"\n    if (key in this) {\n      return;\n    } // if shadowed in proxy\n    (0, _emberMetal.notifyPropertyChange)(this, key);\n  }\n\n  function contentFor(proxy, m) {\n    var content = (0, _emberMetal.get)(proxy, 'content');\n    var tag = (m === undefined ? (0, _emberMetal.meta)(proxy) : m).readableTag();\n    if (tag !== undefined) {\n      tag.inner.second.inner.update((0, _emberMetal.tagFor)(content));\n    }\n    return content;\n  }\n\n  /**\n    `Ember.ProxyMixin` forwards all properties not defined by the proxy itself\n    to a proxied `content` object.  See ObjectProxy for more details.\n  \n    @class ProxyMixin\n    @namespace Ember\n    @private\n  */\n  exports.default = _emberMetal.Mixin.create({\n    /**\n      The object whose properties will be forwarded.\n       @property content\n      @type EmberObject\n      @default null\n      @private\n    */\n    content: null,\n\n    init: function () {\n      this._super.apply(this, arguments);\n      var m = (0, _emberMetal.meta)(this);\n      m.setProxy();\n      m.writableTag(function () {\n        return (0, _reference.combine)([_reference.DirtyableTag.create(), _reference.UpdatableTag.create(_reference.CONSTANT_TAG)]);\n      });\n    },\n\n\n    isTruthy: (0, _computed_macros.bool)('content'),\n\n    willWatchProperty: function (key) {\n      var contentKey = 'content.' + key;\n      (0, _emberMetal.addObserver)(this, contentKey, null, contentPropertyDidChange);\n    },\n    didUnwatchProperty: function (key) {\n      var contentKey = 'content.' + key;\n      (0, _emberMetal.removeObserver)(this, contentKey, null, contentPropertyDidChange);\n    },\n    unknownProperty: function (key) {\n      var content = contentFor(this);\n      if (content) {\n        return (0, _emberMetal.get)(content, key);\n      }\n    },\n    setUnknownProperty: function (key, value) {\n      var m = (0, _emberMetal.meta)(this);\n\n      if (m.proto === this) {\n        // if marked as prototype then just defineProperty\n        // rather than delegate\n        (0, _emberMetal.defineProperty)(this, key, null, value);\n        return value;\n      }\n\n      var content = contentFor(this, m);\n\n      (true && !(content) && (0, _emberDebug.assert)('Cannot delegate set(\\'' + key + '\\', ' + value + ') to the \\'content\\' property of object proxy ' + this + ': its \\'content\\' is undefined.', content));\n\n\n      return (0, _emberMetal.set)(content, key, value);\n    }\n  });\n});","enifed('ember-runtime/mixins/action_handler', ['exports', 'ember-metal', 'ember-debug'], function (exports, _emberMetal, _emberDebug) {\n  'use strict';\n\n  /**\n    `Ember.ActionHandler` is available on some familiar classes including\n    `Route`, `Component`, and `Controller`.\n    (Internally the mixin is used by `Ember.CoreView`, `Ember.ControllerMixin`,\n    and `Route` and available to the above classes through\n    inheritance.)\n  \n    @class ActionHandler\n    @namespace Ember\n    @private\n  */\n  /**\n  @module ember\n  */\n\n  var ActionHandler = _emberMetal.Mixin.create({\n    mergedProperties: ['actions'],\n\n    send: function (actionName) {\n      for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      if (this.actions && this.actions[actionName]) {\n        var shouldBubble = this.actions[actionName].apply(this, args) === true;\n        if (!shouldBubble) {\n          return;\n        }\n      }\n\n      var target = (0, _emberMetal.get)(this, 'target');\n      if (target) {\n        (true && !(typeof target.send === 'function') && (0, _emberDebug.assert)('The `target` for ' + this + ' (' + target + ') does not have a `send` method', typeof target.send === 'function'));\n\n        target.send.apply(target, arguments);\n      }\n    }\n  });\n\n  exports.default = ActionHandler;\n});","enifed('ember-runtime/mixins/array', ['exports', 'ember-utils', 'ember-metal', 'ember-debug', 'ember-runtime/mixins/enumerable', 'ember-runtime/compare', 'ember-environment', 'ember-runtime/mixins/observable', 'ember-runtime/mixins/copyable', 'ember-runtime/copy', 'ember-runtime/mixins/mutable_enumerable'], function (exports, _emberUtils, _emberMetal, _emberDebug, _enumerable, _compare, _emberEnvironment, _observable, _copyable, _copy, _mutable_enumerable) {\n  'use strict';\n\n  exports.MutableArray = exports.NativeArray = exports.A = undefined;\n  exports.addArrayObserver = addArrayObserver;\n  exports.removeArrayObserver = removeArrayObserver;\n  exports.arrayContentWillChange = arrayContentWillChange;\n  exports.arrayContentDidChange = arrayContentDidChange;\n  exports.isEmberArray = isEmberArray;\n  exports.removeAt = removeAt;\n\n  var _Mixin$create, _NativeArray;\n\n  function arrayObserversHelper(obj, target, opts, operation, notify) {\n    var willChange = opts && opts.willChange || 'arrayWillChange';\n    var didChange = opts && opts.didChange || 'arrayDidChange';\n    var hasObservers = (0, _emberMetal.get)(obj, 'hasArrayObservers');\n\n    operation(obj, '@array:before', target, willChange);\n    operation(obj, '@array:change', target, didChange);\n\n    if (hasObservers === notify) {\n      (0, _emberMetal.notifyPropertyChange)(obj, 'hasArrayObservers');\n    }\n\n    return obj;\n  }\n\n  function addArrayObserver(array, target, opts) {\n    return arrayObserversHelper(array, target, opts, _emberMetal.addListener, false);\n  }\n\n  function removeArrayObserver(array, target, opts) {\n    return arrayObserversHelper(array, target, opts, _emberMetal.removeListener, true);\n  }\n\n  function arrayContentWillChange(array, startIdx, removeAmt, addAmt) {\n    // if no args are passed assume everything changes\n    if (startIdx === undefined) {\n      startIdx = 0;\n      removeAmt = addAmt = -1;\n    } else {\n      if (removeAmt === undefined) {\n        removeAmt = -1;\n      }\n\n      if (addAmt === undefined) {\n        addAmt = -1;\n      }\n    }\n\n    (0, _emberMetal.eachProxyArrayWillChange)(array, startIdx, removeAmt, addAmt);\n\n    (0, _emberMetal.sendEvent)(array, '@array:before', [array, startIdx, removeAmt, addAmt]);\n\n    return array;\n  }\n\n  function arrayContentDidChange(array, startIdx, removeAmt, addAmt) {\n    // if no args are passed assume everything changes\n    if (startIdx === undefined) {\n      startIdx = 0;\n      removeAmt = addAmt = -1;\n    } else {\n      if (removeAmt === undefined) {\n        removeAmt = -1;\n      }\n\n      if (addAmt === undefined) {\n        addAmt = -1;\n      }\n    }\n\n    if (addAmt < 0 || removeAmt < 0 || addAmt - removeAmt !== 0) {\n      (0, _emberMetal.notifyPropertyChange)(array, 'length');\n    }\n\n    (0, _emberMetal.notifyPropertyChange)(array, '[]');\n\n    (0, _emberMetal.eachProxyArrayDidChange)(array, startIdx, removeAmt, addAmt);\n\n    (0, _emberMetal.sendEvent)(array, '@array:change', [array, startIdx, removeAmt, addAmt]);\n\n    var meta = (0, _emberMetal.peekMeta)(array);\n    var cache = (0, _emberMetal.peekCacheFor)(array);\n    if (cache !== undefined) {\n      var length = (0, _emberMetal.get)(array, 'length');\n      var addedAmount = addAmt === -1 ? 0 : addAmt;\n      var removedAmount = removeAmt === -1 ? 0 : removeAmt;\n      var delta = addedAmount - removedAmount;\n      var previousLength = length - delta;\n\n      var normalStartIdx = startIdx < 0 ? previousLength + startIdx : startIdx;\n      if (cache.has('firstObject') && normalStartIdx === 0) {\n        (0, _emberMetal.notifyPropertyChange)(array, 'firstObject', meta);\n      }\n\n      if (cache.has('lastObject')) {\n        var previousLastIndex = previousLength - 1;\n        var lastAffectedIndex = normalStartIdx + removedAmount;\n        if (previousLastIndex < lastAffectedIndex) {\n          (0, _emberMetal.notifyPropertyChange)(array, 'lastObject', meta);\n        }\n      }\n    }\n\n    return array;\n  }\n\n  var EMBER_ARRAY = (0, _emberUtils.symbol)('EMBER_ARRAY');\n\n  function isEmberArray(obj) {\n    return obj && obj[EMBER_ARRAY];\n  }\n\n  function iter(key, value) {\n    var valueProvided = arguments.length === 2;\n\n    return valueProvided ? function (item) {\n      return value === (0, _emberMetal.get)(item, key);\n    } : function (item) {\n      return !!(0, _emberMetal.get)(item, key);\n    };\n  }\n\n  // ..........................................................\n  // ARRAY\n  //\n  /**\n    This mixin implements Observer-friendly Array-like behavior. It is not a\n    concrete implementation, but it can be used up by other classes that want\n    to appear like arrays.\n  \n    For example, ArrayProxy is a concrete classes that can\n    be instantiated to implement array-like behavior. Both of these classes use\n    the Array Mixin by way of the MutableArray mixin, which allows observable\n    changes to be made to the underlying array.\n  \n    This mixin defines methods specifically for collections that provide\n    index-ordered access to their contents. When you are designing code that\n    needs to accept any kind of Array-like object, you should use these methods\n    instead of Array primitives because these will properly notify observers of\n    changes to the array.\n  \n    Although these methods are efficient, they do add a layer of indirection to\n    your application so it is a good idea to use them only when you need the\n    flexibility of using both true JavaScript arrays and \"virtual\" arrays such\n    as controllers and collections.\n  \n    You can use the methods defined in this module to access and modify array\n    contents in a KVO-friendly way. You can also be notified whenever the\n    membership of an array changes by using `.observes('myArray.[]')`.\n  \n    To support `EmberArray` in your own class, you must override two\n    primitives to use it: `length()` and `objectAt()`.\n  \n    @class EmberArray\n    @uses Enumerable\n    @since Ember 0.9.0\n    @public\n  */\n  var ArrayMixin = _emberMetal.Mixin.create(_enumerable.default, (_Mixin$create = {}, _Mixin$create[EMBER_ARRAY] = true, _Mixin$create.length = null, _Mixin$create.objectAt = function (idx) {\n    if (idx < 0 || idx >= (0, _emberMetal.get)(this, 'length')) {\n      return undefined;\n    }\n\n    return (0, _emberMetal.get)(this, idx);\n  }, _Mixin$create.objectsAt = function (indexes) {\n    var _this = this;\n\n    return indexes.map(function (idx) {\n      return (0, _emberMetal.objectAt)(_this, idx);\n    });\n  }, _Mixin$create['[]'] = (0, _emberMetal.computed)({\n    get: function (key) {\n      // eslint-disable-line no-unused-vars\n      return this;\n    },\n    set: function (key, value) {\n      this.replace(0, (0, _emberMetal.get)(this, 'length'), value);\n      return this;\n    }\n  }), _Mixin$create.firstObject = (0, _emberMetal.computed)(function () {\n    return (0, _emberMetal.objectAt)(this, 0);\n  }).readOnly(), _Mixin$create.lastObject = (0, _emberMetal.computed)(function () {\n    return (0, _emberMetal.objectAt)(this, (0, _emberMetal.get)(this, 'length') - 1);\n  }).readOnly(), _Mixin$create.slice = function (beginIndex, endIndex) {\n    var ret = A();\n    var length = (0, _emberMetal.get)(this, 'length');\n\n    if ((0, _emberMetal.isNone)(beginIndex)) {\n      beginIndex = 0;\n    } else if (beginIndex < 0) {\n      beginIndex = length + beginIndex;\n    }\n\n    if ((0, _emberMetal.isNone)(endIndex) || endIndex > length) {\n      endIndex = length;\n    } else if (endIndex < 0) {\n      endIndex = length + endIndex;\n    }\n\n    while (beginIndex < endIndex) {\n      ret[ret.length] = (0, _emberMetal.objectAt)(this, beginIndex++);\n    }\n\n    return ret;\n  }, _Mixin$create.indexOf = function (object, startAt) {\n    var len = (0, _emberMetal.get)(this, 'length');\n\n    if (startAt === undefined) {\n      startAt = 0;\n    }\n\n    if (startAt < 0) {\n      startAt += len;\n    }\n\n    for (var idx = startAt; idx < len; idx++) {\n      if ((0, _emberMetal.objectAt)(this, idx) === object) {\n        return idx;\n      }\n    }\n\n    return -1;\n  }, _Mixin$create.lastIndexOf = function (object, startAt) {\n    var len = (0, _emberMetal.get)(this, 'length');\n\n    if (startAt === undefined || startAt >= len) {\n      startAt = len - 1;\n    }\n\n    if (startAt < 0) {\n      startAt += len;\n    }\n\n    for (var idx = startAt; idx >= 0; idx--) {\n      if ((0, _emberMetal.objectAt)(this, idx) === object) {\n        return idx;\n      }\n    }\n\n    return -1;\n  }, _Mixin$create.addArrayObserver = function (target, opts) {\n    return addArrayObserver(this, target, opts);\n  }, _Mixin$create.removeArrayObserver = function (target, opts) {\n    return removeArrayObserver(this, target, opts);\n  }, _Mixin$create.hasArrayObservers = (0, _emberMetal.computed)(function () {\n    return (0, _emberMetal.hasListeners)(this, '@array:change') || (0, _emberMetal.hasListeners)(this, '@array:before');\n  }), _Mixin$create.arrayContentWillChange = function (startIdx, removeAmt, addAmt) {\n    return arrayContentWillChange(this, startIdx, removeAmt, addAmt);\n  }, _Mixin$create.arrayContentDidChange = function (startIdx, removeAmt, addAmt) {\n    return arrayContentDidChange(this, startIdx, removeAmt, addAmt);\n  }, _Mixin$create.forEach = function (callback) {\n    var target = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    (true && !(typeof callback === 'function') && (0, _emberDebug.assert)('forEach expects a function as first argument.', typeof callback === 'function'));\n\n\n    var length = (0, _emberMetal.get)(this, 'length');\n\n    for (var index = 0; index < length; index++) {\n      var item = this.objectAt(index);\n      callback.call(target, item, index, this);\n    }\n\n    return this;\n  }, _Mixin$create.getEach = (0, _emberMetal.aliasMethod)('mapBy'), _Mixin$create.setEach = function (key, value) {\n    return this.forEach(function (item) {\n      return (0, _emberMetal.set)(item, key, value);\n    });\n  }, _Mixin$create.map = function (callback, target) {\n    (true && !(typeof callback === 'function') && (0, _emberDebug.assert)('map expects a function as first argument.', typeof callback === 'function'));\n\n\n    var ret = A();\n\n    this.forEach(function (x, idx, i) {\n      return ret[idx] = callback.call(target, x, idx, i);\n    });\n\n    return ret;\n  }, _Mixin$create.mapBy = function (key) {\n    return this.map(function (next) {\n      return (0, _emberMetal.get)(next, key);\n    });\n  }, _Mixin$create.filter = function (callback, target) {\n    (true && !(typeof callback === 'function') && (0, _emberDebug.assert)('filter expects a function as first argument.', typeof callback === 'function'));\n\n\n    var ret = A();\n\n    this.forEach(function (x, idx, i) {\n      if (callback.call(target, x, idx, i)) {\n        ret.push(x);\n      }\n    });\n\n    return ret;\n  }, _Mixin$create.reject = function (callback, target) {\n    (true && !(typeof callback === 'function') && (0, _emberDebug.assert)('reject expects a function as first argument.', typeof callback === 'function'));\n\n\n    return this.filter(function () {\n      return !callback.apply(target, arguments);\n    });\n  }, _Mixin$create.filterBy = function (key, value) {\n    // eslint-disable-line no-unused-vars\n    return this.filter(iter.apply(this, arguments));\n  }, _Mixin$create.rejectBy = function (key, value) {\n    var exactValue = function (item) {\n      return (0, _emberMetal.get)(item, key) === value;\n    };\n    var hasValue = function (item) {\n      return !!(0, _emberMetal.get)(item, key);\n    };\n    var use = arguments.length === 2 ? exactValue : hasValue;\n\n    return this.reject(use);\n  }, _Mixin$create.find = function (callback) {\n    var target = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    (true && !(typeof callback === 'function') && (0, _emberDebug.assert)('find expects a function as first argument.', typeof callback === 'function'));\n\n\n    var length = (0, _emberMetal.get)(this, 'length');\n\n    for (var index = 0; index < length; index++) {\n      var item = this.objectAt(index);\n\n      if (callback.call(target, item, index, this)) {\n        return item;\n      }\n    }\n  }, _Mixin$create.findBy = function (key, value) {\n    // eslint-disable-line no-unused-vars\n    return this.find(iter.apply(this, arguments));\n  }, _Mixin$create.every = function (callback, target) {\n    (true && !(typeof callback === 'function') && (0, _emberDebug.assert)('every expects a function as first argument.', typeof callback === 'function'));\n\n\n    return !this.find(function (x, idx, i) {\n      return !callback.call(target, x, idx, i);\n    });\n  }, _Mixin$create.isEvery = function (key, value) {\n    // eslint-disable-line no-unused-vars\n    return this.every(iter.apply(this, arguments));\n  }, _Mixin$create.any = function (callback) {\n    var target = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n    (true && !(typeof callback === 'function') && (0, _emberDebug.assert)('any expects a function as first argument.', typeof callback === 'function'));\n\n\n    var length = (0, _emberMetal.get)(this, 'length');\n\n    for (var index = 0; index < length; index++) {\n      var item = this.objectAt(index);\n\n      if (callback.call(target, item, index, this)) {\n        return true;\n      }\n    }\n\n    return false;\n  }, _Mixin$create.isAny = function (key, value) {\n    // eslint-disable-line no-unused-vars\n    return this.any(iter.apply(this, arguments));\n  }, _Mixin$create.reduce = function (callback, initialValue, reducerProperty) {\n    (true && !(typeof callback === 'function') && (0, _emberDebug.assert)('reduce expects a function as first argument.', typeof callback === 'function'));\n\n\n    var ret = initialValue;\n\n    this.forEach(function (item, i) {\n      ret = callback(ret, item, i, this, reducerProperty);\n    }, this);\n\n    return ret;\n  }, _Mixin$create.invoke = function (methodName) {\n    for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    var ret = A();\n\n    this.forEach(function (x, idx) {\n      var method = x && x[methodName];\n\n      if ('function' === typeof method) {\n        ret[idx] = args.length ? method.apply(x, args) : x[methodName]();\n      }\n    }, this);\n\n    return ret;\n  }, _Mixin$create.toArray = function () {\n    var ret = A();\n\n    this.forEach(function (o, idx) {\n      return ret[idx] = o;\n    });\n\n    return ret;\n  }, _Mixin$create.compact = function () {\n    return this.filter(function (value) {\n      return value != null;\n    });\n  }, _Mixin$create.includes = function (obj, startAt) {\n    var len = (0, _emberMetal.get)(this, 'length');\n\n    if (startAt === undefined) {\n      startAt = 0;\n    }\n\n    if (startAt < 0) {\n      startAt += len;\n    }\n\n    for (var idx = startAt; idx < len; idx++) {\n      var currentObj = (0, _emberMetal.objectAt)(this, idx);\n\n      // SameValueZero comparison (NaN !== NaN)\n      if (obj === currentObj || obj !== obj && currentObj !== currentObj) {\n        return true;\n      }\n    }\n\n    return false;\n  }, _Mixin$create.sortBy = function () {\n    var sortKeys = arguments;\n\n    return this.toArray().sort(function (a, b) {\n      for (var i = 0; i < sortKeys.length; i++) {\n        var key = sortKeys[i];\n        var propA = (0, _emberMetal.get)(a, key);\n        var propB = (0, _emberMetal.get)(b, key);\n        // return 1 or -1 else continue to the next sortKey\n        var compareValue = (0, _compare.default)(propA, propB);\n\n        if (compareValue) {\n          return compareValue;\n        }\n      }\n      return 0;\n    });\n  }, _Mixin$create.uniq = function () {\n    var ret = A();\n\n    var seen = new Set();\n    this.forEach(function (item) {\n      if (!seen.has(item)) {\n        seen.add(item);\n        ret.push(item);\n      }\n    });\n\n    return ret;\n  }, _Mixin$create.uniqBy = function (key) {\n    var ret = A();\n    var seen = new Set();\n\n    this.forEach(function (item) {\n      var val = (0, _emberMetal.get)(item, key);\n      if (!seen.has(val)) {\n        seen.add(val);\n        ret.push(item);\n      }\n    });\n\n    return ret;\n  }, _Mixin$create.without = function (value) {\n    if (!this.includes(value)) {\n      return this; // nothing to do\n    }\n\n    var ret = A();\n\n    this.forEach(function (k) {\n      // SameValueZero comparison (NaN !== NaN)\n      if (!(k === value || k !== k && value !== value)) {\n        ret[ret.length] = k;\n      }\n    });\n\n    return ret;\n  }, _Mixin$create['@each'] = (0, _emberMetal.computed)(function () {\n    (true && !(false) && (0, _emberDebug.deprecate)('Getting the \\'@each\\' property on object ' + (0, _emberUtils.toString)(this) + ' is deprecated', false, {\n      id: 'ember-metal.getting-each',\n      until: '3.5.0',\n      url: 'https://emberjs.com/deprecations/v3.x#toc_getting-the-each-property'\n    }));\n\n\n    return (0, _emberMetal.eachProxyFor)(this);\n  }).readOnly(), _Mixin$create));\n\n  var OUT_OF_RANGE_EXCEPTION = 'Index out of range';\n  var EMPTY = [];\n\n  function removeAt(array, start, len) {\n    if ('number' === typeof start) {\n      if (start < 0 || start >= (0, _emberMetal.get)(array, 'length')) {\n        throw new _emberDebug.Error(OUT_OF_RANGE_EXCEPTION);\n      }\n\n      // fast case\n      if (len === undefined) {\n        len = 1;\n      }\n\n      array.replace(start, len, EMPTY);\n    }\n\n    return array;\n  }\n\n  /**\n    This mixin defines the API for modifying array-like objects. These methods\n    can be applied only to a collection that keeps its items in an ordered set.\n    It builds upon the Array mixin and adds methods to modify the array.\n    One concrete implementations of this class include ArrayProxy.\n  \n    It is important to use the methods in this class to modify arrays so that\n    changes are observable. This allows the binding system in Ember to function\n    correctly.\n  \n  \n    Note that an Array can change even if it does not implement this mixin.\n    For example, one might implement a SparseArray that cannot be directly\n    modified, but if its underlying enumerable changes, it will change also.\n  \n    @class MutableArray\n    @uses EmberArray\n    @uses MutableEnumerable\n    @public\n  */\n\n  var MutableArray = _emberMetal.Mixin.create(ArrayMixin, _mutable_enumerable.default, {\n\n    /**\n      __Required.__ You must implement this method to apply this mixin.\n       This is one of the primitives you must implement to support `Array`.\n      You should replace amt objects started at idx with the objects in the\n      passed array. You should also call `this.arrayContentDidChange()`\n       Note that this method is expected to validate the type(s) of objects that it expects.\n       @method replace\n      @param {Number} idx Starting index in the array to replace. If\n        idx >= length, then append to the end of the array.\n      @param {Number} amt Number of elements that should be removed from\n        the array, starting at *idx*.\n      @param {EmberArray} objects An array of zero or more objects that should be\n        inserted into the array at *idx*\n      @public\n    */\n    replace: null,\n\n    clear: function () {\n      var len = (0, _emberMetal.get)(this, 'length');\n      if (len === 0) {\n        return this;\n      }\n\n      this.replace(0, len, EMPTY);\n      return this;\n    },\n    insertAt: function (idx, object) {\n      if (idx > (0, _emberMetal.get)(this, 'length')) {\n        throw new _emberDebug.Error(OUT_OF_RANGE_EXCEPTION);\n      }\n\n      this.replace(idx, 0, [object]);\n      return this;\n    },\n    removeAt: function (start, len) {\n      return removeAt(this, start, len);\n    },\n    pushObject: function (obj) {\n      this.insertAt((0, _emberMetal.get)(this, 'length'), obj);\n      return obj;\n    },\n    pushObjects: function (objects) {\n      this.replace((0, _emberMetal.get)(this, 'length'), 0, objects);\n      return this;\n    },\n    popObject: function () {\n      var len = (0, _emberMetal.get)(this, 'length');\n      if (len === 0) {\n        return null;\n      }\n\n      var ret = (0, _emberMetal.objectAt)(this, len - 1);\n      this.removeAt(len - 1, 1);\n      return ret;\n    },\n    shiftObject: function () {\n      if ((0, _emberMetal.get)(this, 'length') === 0) {\n        return null;\n      }\n\n      var ret = (0, _emberMetal.objectAt)(this, 0);\n      this.removeAt(0);\n      return ret;\n    },\n    unshiftObject: function (obj) {\n      this.insertAt(0, obj);\n      return obj;\n    },\n    unshiftObjects: function (objects) {\n      this.replace(0, 0, objects);\n      return this;\n    },\n    reverseObjects: function () {\n      var len = (0, _emberMetal.get)(this, 'length');\n      if (len === 0) {\n        return this;\n      }\n\n      var objects = this.toArray().reverse();\n      this.replace(0, len, objects);\n      return this;\n    },\n    setObjects: function (objects) {\n      if (objects.length === 0) {\n        return this.clear();\n      }\n\n      var len = (0, _emberMetal.get)(this, 'length');\n      this.replace(0, len, objects);\n      return this;\n    },\n    removeObject: function (obj) {\n      var loc = (0, _emberMetal.get)(this, 'length') || 0;\n      while (--loc >= 0) {\n        var curObject = (0, _emberMetal.objectAt)(this, loc);\n\n        if (curObject === obj) {\n          this.removeAt(loc);\n        }\n      }\n      return this;\n    },\n    removeObjects: function (objects) {\n      (0, _emberMetal.beginPropertyChanges)(this);\n      for (var i = objects.length - 1; i >= 0; i--) {\n        this.removeObject(objects[i]);\n      }\n      (0, _emberMetal.endPropertyChanges)(this);\n      return this;\n    },\n    addObject: function (obj) {\n      var included = this.includes(obj);\n\n      if (!included) {\n        this.pushObject(obj);\n      }\n\n      return this;\n    },\n    addObjects: function (objects) {\n      var _this2 = this;\n\n      (0, _emberMetal.beginPropertyChanges)(this);\n      objects.forEach(function (obj) {\n        return _this2.addObject(obj);\n      });\n      (0, _emberMetal.endPropertyChanges)(this);\n      return this;\n    }\n  });\n\n  /**\n    Creates an `Ember.NativeArray` from an Array-like object.\n    Does not modify the original object's contents. `A()` is not needed if\n    `EmberENV.EXTEND_PROTOTYPES` is `true` (the default value). However,\n    it is recommended that you use `A()` when creating addons for\n    ember or when you can not guarantee that `EmberENV.EXTEND_PROTOTYPES`\n    will be `true`.\n  \n    Example\n  \n    ```app/components/my-component.js\n    import Component from '@ember/component';\n    import { A } from '@ember/array';\n  \n    export default Component.extend({\n      tagName: 'ul',\n      classNames: ['pagination'],\n  \n      init() {\n        this._super(...arguments);\n  \n        if (!this.get('content')) {\n          this.set('content', A());\n          this.set('otherContent', A([1,2,3]));\n        }\n      }\n    });\n    ```\n  \n    @method A\n    @static\n    @for @ember/array\n    @return {Ember.NativeArray}\n    @public\n  */\n\n  // Add Ember.Array to Array.prototype. Remove methods with native\n  // implementations and supply some more optimized versions of generic methods\n  // because they are so common.\n  /**\n  @module ember\n  */\n  /**\n    The NativeArray mixin contains the properties needed to make the native\n    Array support MutableArray and all of its dependent APIs. Unless you\n    have `EmberENV.EXTEND_PROTOTYPES` or `EmberENV.EXTEND_PROTOTYPES.Array` set to\n    false, this will be applied automatically. Otherwise you can apply the mixin\n    at anytime by calling `Ember.NativeArray.apply(Array.prototype)`.\n  \n    @class Ember.NativeArray\n    @uses MutableArray\n    @uses Observable\n    @uses Ember.Copyable\n    @public\n  */\n  var NativeArray = _emberMetal.Mixin.create(MutableArray, _observable.default, _copyable.default, {\n    get: function (key) {\n      if ('number' === typeof key) {\n        return this[key];\n      } else {\n        return this._super(key);\n      }\n    },\n    objectAt: function (idx) {\n      return this[idx];\n    },\n    replace: function (idx, amt, objects) {\n      (true && !(objects === null || objects === undefined || Array.isArray(objects)) && (0, _emberDebug.assert)('The third argument to replace needs to be an array.', objects === null || objects === undefined || Array.isArray(objects)));\n\n\n      // if we replaced exactly the same number of items, then pass only the\n      // replaced range. Otherwise, pass the full remaining array length\n      // since everything has shifted\n      var len = objects ? (0, _emberMetal.get)(objects, 'length') : 0;\n      arrayContentWillChange(this, idx, amt, len);\n\n      if (len === 0) {\n        this.splice(idx, amt);\n      } else {\n        (0, _emberMetal.replace)(this, idx, amt, objects);\n      }\n\n      arrayContentDidChange(this, idx, amt, len);\n      return this;\n    },\n    unknownProperty: function (key, value) {\n      var ret = void 0; // = this.reducedProperty(key, value);\n      if (value !== undefined && ret === undefined) {\n        ret = this[key] = value;\n      }\n      return ret;\n    },\n\n\n    indexOf: Array.prototype.indexOf,\n    lastIndexOf: Array.prototype.lastIndexOf,\n\n    copy: function (deep) {\n      if (deep) {\n        return this.map(function (item) {\n          return (0, _copy.default)(item, true);\n        });\n      }\n\n      return this.slice();\n    }\n  });\n\n  // Remove any methods implemented natively so we don't override them\n  var ignore = ['length'];\n  NativeArray.keys().forEach(function (methodName) {\n    if (Array.prototype[methodName]) {\n      ignore.push(methodName);\n    }\n  });\n\n  exports.NativeArray = NativeArray = (_NativeArray = NativeArray).without.apply(_NativeArray, ignore);\n\n  var A = void 0;\n\n  if (_emberEnvironment.ENV.EXTEND_PROTOTYPES.Array) {\n    NativeArray.apply(Array.prototype);\n    exports.A = A = function (arr) {\n      return arr || [];\n    };\n  } else {\n    exports.A = A = function (arr) {\n      if (!arr) {\n        arr = [];\n      }\n      return ArrayMixin.detect(arr) ? arr : NativeArray.apply(arr);\n    };\n  }\n\n  exports.A = A;\n  exports.NativeArray = NativeArray;\n  exports.MutableArray = MutableArray;\n  exports.default = ArrayMixin;\n});","enifed('ember-runtime/mixins/comparable', ['exports', 'ember-metal'], function (exports, _emberMetal) {\n  'use strict';\n\n  exports.default = _emberMetal.Mixin.create({\n\n    /**\n      __Required.__ You must implement this method to apply this mixin.\n       Override to return the result of the comparison of the two parameters. The\n      compare method should return:\n       - `-1` if `a < b`\n      - `0` if `a == b`\n      - `1` if `a > b`\n       Default implementation raises an exception.\n       @method compare\n      @param a {Object} the first object to compare\n      @param b {Object} the second object to compare\n      @return {Number} the result of the comparison\n      @private\n    */\n    compare: null\n  });\n});","enifed('ember-runtime/mixins/container_proxy', ['exports', 'ember-metal'], function (exports, _emberMetal) {\n  'use strict';\n\n  /**\n    ContainerProxyMixin is used to provide public access to specific\n    container functionality.\n  \n    @class ContainerProxyMixin\n    @private\n  */\n  var containerProxyMixin = {\n    /**\n     The container stores state.\n      @private\n     @property {Ember.Container} __container__\n     */\n    __container__: null,\n\n    ownerInjection: function () {\n      return this.__container__.ownerInjection();\n    },\n    lookup: function (fullName, options) {\n      return this.__container__.lookup(fullName, options);\n    },\n    _resolveLocalLookupName: function (name, source) {\n      return this.__container__.registry.expandLocalLookup('component:' + name, {\n        source: source\n      });\n    },\n    destroy: function () {\n      var container = this.__container__;\n\n      if (container) {\n        _emberMetal.run.join(function () {\n          container.destroy();\n          _emberMetal.run.schedule('destroy', container, 'finalizeDestroy');\n        });\n      }\n\n      this._super();\n    },\n    factoryFor: function (fullName) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      return this.__container__.factoryFor(fullName, options);\n    }\n  }; /**\n     @module ember\n     */\n  exports.default = _emberMetal.Mixin.create(containerProxyMixin);\n});","enifed('ember-runtime/mixins/controller', ['exports', 'ember-metal', 'ember-runtime/computed/computed_macros', 'ember-runtime/mixins/action_handler'], function (exports, _emberMetal, _computed_macros, _action_handler) {\n  'use strict';\n\n  exports.default = _emberMetal.Mixin.create(_action_handler.default, {\n    /* ducktype as a controller */\n    isController: true,\n\n    /**\n      The object to which actions from the view should be sent.\n       For example, when a Handlebars template uses the `{{action}}` helper,\n      it will attempt to send the action to the view's controller's `target`.\n       By default, the value of the target property is set to the router, and\n      is injected when a controller is instantiated. This injection is applied\n      as part of the application's initialization process. In most cases the\n      `target` property will automatically be set to the logical consumer of\n      actions for the controller.\n       @property target\n      @default null\n      @public\n    */\n    target: null,\n\n    store: null,\n\n    /**\n      The controller's current model. When retrieving or modifying a controller's\n      model, this property should be used instead of the `content` property.\n       @property model\n      @public\n    */\n    model: null,\n\n    /**\n      @private\n    */\n    content: (0, _computed_macros.deprecatingAlias)('model', {\n      id: 'ember-runtime.controller.content-alias',\n      until: '2.17.0',\n      url: 'https://emberjs.com/deprecations/v2.x/#toc_controller-content-alias'\n    })\n  });\n});","enifed('ember-runtime/mixins/copyable', ['exports', 'ember-metal'], function (exports, _emberMetal) {\n  'use strict';\n\n  exports.default = _emberMetal.Mixin.create({\n    /**\n      __Required.__ You must implement this method to apply this mixin.\n       Override to return a copy of the receiver. Default implementation raises\n      an exception.\n       @method copy\n      @param {Boolean} deep if `true`, a deep copy of the object should be made\n      @return {Object} copy of receiver\n      @private\n    */\n    copy: null\n  });\n});","enifed('ember-runtime/mixins/enumerable', ['exports', 'ember-metal'], function (exports, _emberMetal) {\n  'use strict';\n\n  exports.default = _emberMetal.Mixin.create();\n});","enifed('ember-runtime/mixins/evented', ['exports', 'ember-metal'], function (exports, _emberMetal) {\n  'use strict';\n\n  exports.default = _emberMetal.Mixin.create({\n\n    /**\n      Subscribes to a named event with given function.\n       ```javascript\n      person.on('didLoad', function() {\n        // fired once the person has loaded\n      });\n      ```\n       An optional target can be passed in as the 2nd argument that will\n      be set as the \"this\" for the callback. This is a good way to give your\n      function access to the object triggering the event. When the target\n      parameter is used the callback becomes the third argument.\n       @method on\n      @param {String} name The name of the event\n      @param {Object} [target] The \"this\" binding for the callback\n      @param {Function} method The callback to execute\n      @return this\n      @public\n    */\n    on: function (name, target, method) {\n      (0, _emberMetal.addListener)(this, name, target, method);\n      return this;\n    },\n\n\n    /**\n      Subscribes a function to a named event and then cancels the subscription\n      after the first time the event is triggered. It is good to use ``one`` when\n      you only care about the first time an event has taken place.\n       This function takes an optional 2nd argument that will become the \"this\"\n      value for the callback. If this argument is passed then the 3rd argument\n      becomes the function.\n       @method one\n      @param {String} name The name of the event\n      @param {Object} [target] The \"this\" binding for the callback\n      @param {Function} method The callback to execute\n      @return this\n      @public\n    */\n    one: function (name, target, method) {\n      if (!method) {\n        method = target;\n        target = null;\n      }\n\n      (0, _emberMetal.addListener)(this, name, target, method, true);\n      return this;\n    },\n\n\n    /**\n      Triggers a named event for the object. Any additional arguments\n      will be passed as parameters to the functions that are subscribed to the\n      event.\n       ```javascript\n      person.on('didEat', function(food) {\n        console.log('person ate some ' + food);\n      });\n       person.trigger('didEat', 'broccoli');\n       // outputs: person ate some broccoli\n      ```\n      @method trigger\n      @param {String} name The name of the event\n      @param {Object...} args Optional arguments to pass on\n      @public\n    */\n    trigger: function (name) {\n      for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      (0, _emberMetal.sendEvent)(this, name, args);\n    },\n\n\n    /**\n      Cancels subscription for given name, target, and method.\n       @method off\n      @param {String} name The name of the event\n      @param {Object} target The target of the subscription\n      @param {Function} method The function of the subscription\n      @return this\n      @public\n    */\n    off: function (name, target, method) {\n      (0, _emberMetal.removeListener)(this, name, target, method);\n      return this;\n    },\n\n\n    /**\n      Checks to see if object has any subscriptions for named event.\n       @method has\n      @param {String} name The name of the event\n      @return {Boolean} does the object have a subscription for event\n      @public\n     */\n    has: function (name) {\n      return (0, _emberMetal.hasListeners)(this, name);\n    }\n  });\n});","enifed('ember-runtime/mixins/mutable_enumerable', ['exports', 'ember-runtime/mixins/enumerable', 'ember-metal'], function (exports, _enumerable, _emberMetal) {\n  'use strict';\n\n  exports.default = _emberMetal.Mixin.create(_enumerable.default);\n});","enifed('ember-runtime/mixins/observable', ['exports', 'ember-metal', 'ember-debug'], function (exports, _emberMetal, _emberDebug) {\n  'use strict';\n\n  exports.default = _emberMetal.Mixin.create({\n\n    /**\n      Retrieves the value of a property from the object.\n       This method is usually similar to using `object[keyName]` or `object.keyName`,\n      however it supports both computed properties and the unknownProperty\n      handler.\n       Because `get` unifies the syntax for accessing all these kinds\n      of properties, it can make many refactorings easier, such as replacing a\n      simple property with a computed property, or vice versa.\n       ### Computed Properties\n       Computed properties are methods defined with the `property` modifier\n      declared at the end, such as:\n       ```javascript\n      import { computed } from '@ember/object';\n       fullName: computed('firstName', 'lastName', function() {\n        return this.get('firstName') + ' ' + this.get('lastName');\n      })\n      ```\n       When you call `get` on a computed property, the function will be\n      called and the return value will be returned instead of the function\n      itself.\n       ### Unknown Properties\n       Likewise, if you try to call `get` on a property whose value is\n      `undefined`, the `unknownProperty()` method will be called on the object.\n      If this method returns any value other than `undefined`, it will be returned\n      instead. This allows you to implement \"virtual\" properties that are\n      not defined upfront.\n       @method get\n      @param {String} keyName The property to retrieve\n      @return {Object} The property value or undefined.\n      @public\n    */\n    get: function (keyName) {\n      return (0, _emberMetal.get)(this, keyName);\n    },\n\n\n    /**\n      To get the values of multiple properties at once, call `getProperties`\n      with a list of strings or an array:\n       ```javascript\n      record.getProperties('firstName', 'lastName', 'zipCode');\n      // { firstName: 'John', lastName: 'Doe', zipCode: '10011' }\n      ```\n       is equivalent to:\n       ```javascript\n      record.getProperties(['firstName', 'lastName', 'zipCode']);\n      // { firstName: 'John', lastName: 'Doe', zipCode: '10011' }\n      ```\n       @method getProperties\n      @param {String...|Array} list of keys to get\n      @return {Object}\n      @public\n    */\n    getProperties: function () {\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      return _emberMetal.getProperties.apply(undefined, [this].concat(args));\n    },\n\n\n    /**\n      Sets the provided key or path to the value.\n       ```javascript\n      record.set(\"key\", value);\n      ```\n       This method is generally very similar to calling `object[\"key\"] = value` or\n      `object.key = value`, except that it provides support for computed\n      properties, the `setUnknownProperty()` method and property observers.\n       ### Computed Properties\n       If you try to set a value on a key that has a computed property handler\n      defined (see the `get()` method for an example), then `set()` will call\n      that method, passing both the value and key instead of simply changing\n      the value itself. This is useful for those times when you need to\n      implement a property that is composed of one or more member\n      properties.\n       ### Unknown Properties\n       If you try to set a value on a key that is undefined in the target\n      object, then the `setUnknownProperty()` handler will be called instead. This\n      gives you an opportunity to implement complex \"virtual\" properties that\n      are not predefined on the object. If `setUnknownProperty()` returns\n      undefined, then `set()` will simply set the value on the object.\n       ### Property Observers\n       In addition to changing the property, `set()` will also register a property\n      change with the object. Unless you have placed this call inside of a\n      `beginPropertyChanges()` and `endPropertyChanges(),` any \"local\" observers\n      (i.e. observer methods declared on the same object), will be called\n      immediately. Any \"remote\" observers (i.e. observer methods declared on\n      another object) will be placed in a queue and called at a later time in a\n      coalesced manner.\n       @method set\n      @param {String} keyName The property to set\n      @param {Object} value The value to set or `null`.\n      @return {Object} The passed value\n      @public\n    */\n    set: function (keyName, value) {\n      return (0, _emberMetal.set)(this, keyName, value);\n    },\n\n\n    /**\n      Sets a list of properties at once. These properties are set inside\n      a single `beginPropertyChanges` and `endPropertyChanges` batch, so\n      observers will be buffered.\n       ```javascript\n      record.setProperties({ firstName: 'Charles', lastName: 'Jolley' });\n      ```\n       @method setProperties\n      @param {Object} hash the hash of keys and values to set\n      @return {Object} The passed in hash\n      @public\n    */\n    setProperties: function (hash) {\n      return (0, _emberMetal.setProperties)(this, hash);\n    },\n\n\n    /**\n      Begins a grouping of property changes.\n       You can use this method to group property changes so that notifications\n      will not be sent until the changes are finished. If you plan to make a\n      large number of changes to an object at one time, you should call this\n      method at the beginning of the changes to begin deferring change\n      notifications. When you are done making changes, call\n      `endPropertyChanges()` to deliver the deferred change notifications and end\n      deferring.\n       @method beginPropertyChanges\n      @return {Observable}\n      @private\n    */\n    beginPropertyChanges: function () {\n      (0, _emberMetal.beginPropertyChanges)();\n      return this;\n    },\n\n\n    /**\n      Ends a grouping of property changes.\n       You can use this method to group property changes so that notifications\n      will not be sent until the changes are finished. If you plan to make a\n      large number of changes to an object at one time, you should call\n      `beginPropertyChanges()` at the beginning of the changes to defer change\n      notifications. When you are done making changes, call this method to\n      deliver the deferred change notifications and end deferring.\n       @method endPropertyChanges\n      @return {Observable}\n      @private\n    */\n    endPropertyChanges: function () {\n      (0, _emberMetal.endPropertyChanges)();\n      return this;\n    },\n\n\n    /**\n      @method propertyWillChange\n      @private\n    */\n    propertyWillChange: function (keyName) {\n      (0, _emberMetal.propertyWillChange)(this, keyName);\n      return this;\n    },\n\n\n    /**\n      @method propertyDidChange\n      @private\n    */\n    propertyDidChange: function (keyName) {\n      (0, _emberMetal.propertyDidChange)(this, keyName);\n      return this;\n    },\n\n\n    /**\n      Notify the observer system that a property has just changed.\n       Sometimes you need to change a value directly or indirectly without\n      actually calling `get()` or `set()` on it. In this case, you can use this\n      method instead. Calling this method will notify all observers that the\n      property has potentially changed value.\n       @method notifyPropertyChange\n      @param {String} keyName The property key to be notified about.\n      @return {Observable}\n      @public\n    */\n    notifyPropertyChange: function (keyName) {\n      (0, _emberMetal.notifyPropertyChange)(this, keyName);\n      return this;\n    },\n\n\n    /**\n      Adds an observer on a property.\n       This is the core method used to register an observer for a property.\n       Once you call this method, any time the key's value is set, your observer\n      will be notified. Note that the observers are triggered any time the\n      value is set, regardless of whether it has actually changed. Your\n      observer should be prepared to handle that.\n       ### Observer Methods\n       Observer methods have the following signature:\n       ```app/components/my-component.js\n      import Component from '@ember/component';\n       export default Component.extend({\n        init() {\n          this._super(...arguments);\n          this.addObserver('foo', this, 'fooDidChange');\n        },\n         fooDidChange(sender, key, value, rev) {\n          // your code\n        }\n      });\n      ```\n       The `sender` is the object that changed. The `key` is the property that\n      changes. The `value` property is currently reserved and unused. The `rev`\n      is the last property revision of the object when it changed, which you can\n      use to detect if the key value has really changed or not.\n       Usually you will not need the value or revision parameters at\n      the end. In this case, it is common to write observer methods that take\n      only a sender and key value as parameters or, if you aren't interested in\n      any of these values, to write an observer that has no parameters at all.\n       @method addObserver\n      @param {String} key The key to observe\n      @param {Object} target The target object to invoke\n      @param {String|Function} method The method to invoke\n      @return {Observable}\n      @public\n    */\n    addObserver: function (key, target, method) {\n      (0, _emberMetal.addObserver)(this, key, target, method);\n      return this;\n    },\n\n\n    /**\n      Remove an observer you have previously registered on this object. Pass\n      the same key, target, and method you passed to `addObserver()` and your\n      target will no longer receive notifications.\n       @method removeObserver\n      @param {String} key The key to observe\n      @param {Object} target The target object to invoke\n      @param {String|Function} method The method to invoke\n      @return {Observable}\n      @public\n    */\n    removeObserver: function (key, target, method) {\n      (0, _emberMetal.removeObserver)(this, key, target, method);\n      return this;\n    },\n\n\n    /**\n      Returns `true` if the object currently has observers registered for a\n      particular key. You can use this method to potentially defer performing\n      an expensive action until someone begins observing a particular property\n      on the object.\n       @method hasObserverFor\n      @param {String} key Key to check\n      @return {Boolean}\n      @private\n    */\n    hasObserverFor: function (key) {\n      return (0, _emberMetal.hasListeners)(this, key + ':change');\n    },\n\n\n    /**\n      Retrieves the value of a property, or a default value in the case that the\n      property returns `undefined`.\n       ```javascript\n      person.getWithDefault('lastName', 'Doe');\n      ```\n       @method getWithDefault\n      @param {String} keyName The name of the property to retrieve\n      @param {Object} defaultValue The value to return if the property value is undefined\n      @return {Object} The property value or the defaultValue.\n      @public\n    */\n    getWithDefault: function (keyName, defaultValue) {\n      return (0, _emberMetal.getWithDefault)(this, keyName, defaultValue);\n    },\n\n\n    /**\n      Set the value of a property to the current value plus some amount.\n       ```javascript\n      person.incrementProperty('age');\n      team.incrementProperty('score', 2);\n      ```\n       @method incrementProperty\n      @param {String} keyName The name of the property to increment\n      @param {Number} increment The amount to increment by. Defaults to 1\n      @return {Number} The new property value\n      @public\n    */\n    incrementProperty: function (keyName, increment) {\n      if ((0, _emberMetal.isNone)(increment)) {\n        increment = 1;\n      }\n      (true && !(!isNaN(parseFloat(increment)) && isFinite(increment)) && (0, _emberDebug.assert)('Must pass a numeric value to incrementProperty', !isNaN(parseFloat(increment)) && isFinite(increment)));\n\n      return (0, _emberMetal.set)(this, keyName, (parseFloat((0, _emberMetal.get)(this, keyName)) || 0) + increment);\n    },\n\n\n    /**\n      Set the value of a property to the current value minus some amount.\n       ```javascript\n      player.decrementProperty('lives');\n      orc.decrementProperty('health', 5);\n      ```\n       @method decrementProperty\n      @param {String} keyName The name of the property to decrement\n      @param {Number} decrement The amount to decrement by. Defaults to 1\n      @return {Number} The new property value\n      @public\n    */\n    decrementProperty: function (keyName, decrement) {\n      if ((0, _emberMetal.isNone)(decrement)) {\n        decrement = 1;\n      }\n      (true && !(!isNaN(parseFloat(decrement)) && isFinite(decrement)) && (0, _emberDebug.assert)('Must pass a numeric value to decrementProperty', !isNaN(parseFloat(decrement)) && isFinite(decrement)));\n\n      return (0, _emberMetal.set)(this, keyName, ((0, _emberMetal.get)(this, keyName) || 0) - decrement);\n    },\n\n\n    /**\n      Set the value of a boolean property to the opposite of its\n      current value.\n       ```javascript\n      starship.toggleProperty('warpDriveEngaged');\n      ```\n       @method toggleProperty\n      @param {String} keyName The name of the property to toggle\n      @return {Boolean} The new property value\n      @public\n    */\n    toggleProperty: function (keyName) {\n      return (0, _emberMetal.set)(this, keyName, !(0, _emberMetal.get)(this, keyName));\n    },\n\n\n    /**\n      Returns the cached value of a computed property, if it exists.\n      This allows you to inspect the value of a computed property\n      without accidentally invoking it if it is intended to be\n      generated lazily.\n       @method cacheFor\n      @param {String} keyName\n      @return {Object} The cached value of the computed property, if any\n      @public\n    */\n    cacheFor: function (keyName) {\n      return (0, _emberMetal.getCachedValueFor)(this, keyName);\n    }\n  });\n});","enifed('ember-runtime/mixins/promise_proxy', ['exports', 'ember-metal', 'ember-debug', 'ember-runtime/computed/computed_macros'], function (exports, _emberMetal, _emberDebug, _computed_macros) {\n  'use strict';\n\n  /**\n    @module @ember/object\n  */\n\n  function tap(proxy, promise) {\n    (0, _emberMetal.setProperties)(proxy, {\n      isFulfilled: false,\n      isRejected: false\n    });\n\n    return promise.then(function (value) {\n      if (!proxy.isDestroyed && !proxy.isDestroying) {\n        (0, _emberMetal.setProperties)(proxy, {\n          content: value,\n          isFulfilled: true\n        });\n      }\n      return value;\n    }, function (reason) {\n      if (!proxy.isDestroyed && !proxy.isDestroying) {\n        (0, _emberMetal.setProperties)(proxy, {\n          reason: reason,\n          isRejected: true\n        });\n      }\n      throw reason;\n    }, 'Ember: PromiseProxy');\n  }\n\n  /**\n    A low level mixin making ObjectProxy promise-aware.\n  \n    ```javascript\n    import { resolve } from 'rsvp';\n    import $ from 'jquery';\n    import ObjectProxy from '@ember/object/proxy';\n    import PromiseProxyMixin from '@ember/object/promise-proxy-mixin';\n  \n    let ObjectPromiseProxy = ObjectProxy.extend(PromiseProxyMixin);\n  \n    let proxy = ObjectPromiseProxy.create({\n      promise: resolve($.getJSON('/some/remote/data.json'))\n    });\n  \n    proxy.then(function(json){\n       // the json\n    }, function(reason) {\n       // the reason why you have no json\n    });\n    ```\n  \n    the proxy has bindable attributes which\n    track the promises life cycle\n  \n    ```javascript\n    proxy.get('isPending')   //=> true\n    proxy.get('isSettled')  //=> false\n    proxy.get('isRejected')  //=> false\n    proxy.get('isFulfilled') //=> false\n    ```\n  \n    When the $.getJSON completes, and the promise is fulfilled\n    with json, the life cycle attributes will update accordingly.\n    Note that $.getJSON doesn't return an ECMA specified promise,\n    it is useful to wrap this with an `RSVP.resolve` so that it behaves\n    as a spec compliant promise.\n  \n    ```javascript\n    proxy.get('isPending')   //=> false\n    proxy.get('isSettled')   //=> true\n    proxy.get('isRejected')  //=> false\n    proxy.get('isFulfilled') //=> true\n    ```\n  \n    As the proxy is an ObjectProxy, and the json now its content,\n    all the json properties will be available directly from the proxy.\n  \n    ```javascript\n    // Assuming the following json:\n    {\n      firstName: 'Stefan',\n      lastName: 'Penner'\n    }\n  \n    // both properties will accessible on the proxy\n    proxy.get('firstName') //=> 'Stefan'\n    proxy.get('lastName')  //=> 'Penner'\n    ```\n  \n    @class PromiseProxyMixin\n    @public\n  */\n  exports.default = _emberMetal.Mixin.create({\n    /**\n      If the proxied promise is rejected this will contain the reason\n      provided.\n       @property reason\n      @default null\n      @public\n    */\n    reason: null,\n\n    /**\n      Once the proxied promise has settled this will become `false`.\n       @property isPending\n      @default true\n      @public\n    */\n    isPending: (0, _computed_macros.not)('isSettled').readOnly(),\n\n    /**\n      Once the proxied promise has settled this will become `true`.\n       @property isSettled\n      @default false\n      @public\n    */\n    isSettled: (0, _computed_macros.or)('isRejected', 'isFulfilled').readOnly(),\n\n    /**\n      Will become `true` if the proxied promise is rejected.\n       @property isRejected\n      @default false\n      @public\n    */\n    isRejected: false,\n\n    /**\n      Will become `true` if the proxied promise is fulfilled.\n       @property isFulfilled\n      @default false\n      @public\n    */\n    isFulfilled: false,\n\n    /**\n      The promise whose fulfillment value is being proxied by this object.\n       This property must be specified upon creation, and should not be\n      changed once created.\n       Example:\n       ```javascript\n      import ObjectProxy from '@ember/object/proxy';\n      import PromiseProxyMixin from '@ember/object/promise-proxy-mixin';\n       ObjectProxy.extend(PromiseProxyMixin).create({\n        promise: <thenable>\n      });\n      ```\n       @property promise\n      @public\n    */\n    promise: (0, _emberMetal.computed)({\n      get: function () {\n        throw new _emberDebug.Error('PromiseProxy\\'s promise must be set');\n      },\n      set: function (key, promise) {\n        return tap(this, promise);\n      }\n    }),\n\n    /**\n      An alias to the proxied promise's `then`.\n       See RSVP.Promise.then.\n       @method then\n      @param {Function} callback\n      @return {RSVP.Promise}\n      @public\n    */\n    then: promiseAlias('then'),\n\n    /**\n      An alias to the proxied promise's `catch`.\n       See RSVP.Promise.catch.\n       @method catch\n      @param {Function} callback\n      @return {RSVP.Promise}\n      @since 1.3.0\n      @public\n    */\n    'catch': promiseAlias('catch'),\n\n    /**\n      An alias to the proxied promise's `finally`.\n       See RSVP.Promise.finally.\n       @method finally\n      @param {Function} callback\n      @return {RSVP.Promise}\n      @since 1.3.0\n      @public\n    */\n    'finally': promiseAlias('finally')\n\n  });\n\n\n  function promiseAlias(name) {\n    return function () {\n      var promise = (0, _emberMetal.get)(this, 'promise');\n      return promise[name].apply(promise, arguments);\n    };\n  }\n});","enifed('ember-runtime/mixins/registry_proxy', ['exports', 'ember-metal'], function (exports, _emberMetal) {\n  'use strict';\n\n  exports.default = _emberMetal.Mixin.create({\n    __registry__: null,\n\n    /**\n     Given a fullName return the corresponding factory.\n      @public\n     @method resolveRegistration\n     @param {String} fullName\n     @return {Function} fullName's factory\n     */\n    resolveRegistration: registryAlias('resolve'),\n\n    /**\n      Registers a factory that can be used for dependency injection (with\n      `inject`) or for service lookup. Each factory is registered with\n      a full name including two parts: `type:name`.\n       A simple example:\n       ```javascript\n      import Application from '@ember/application';\n      import EmberObject from '@ember/object';\n       let App = Application.create();\n       App.Orange = EmberObject.extend();\n      App.register('fruit:favorite', App.Orange);\n      ```\n       Ember will resolve factories from the `App` namespace automatically.\n      For example `App.CarsController` will be discovered and returned if\n      an application requests `controller:cars`.\n       An example of registering a controller with a non-standard name:\n       ```javascript\n      import Application from '@ember/application';\n      import Controller from '@ember/controller';\n       let App = Application.create();\n      let Session = Controller.extend();\n       App.register('controller:session', Session);\n       // The Session controller can now be treated like a normal controller,\n      // despite its non-standard name.\n      App.ApplicationController = Controller.extend({\n        needs: ['session']\n      });\n      ```\n       Registered factories are **instantiated** by having `create`\n      called on them. Additionally they are **singletons**, each time\n      they are looked up they return the same instance.\n       Some examples modifying that default behavior:\n       ```javascript\n      import Application from '@ember/application';\n      import EmberObject from '@ember/object';\n       let App = Application.create();\n       App.Person = EmberObject.extend();\n      App.Orange = EmberObject.extend();\n      App.Email = EmberObject.extend();\n      App.session = EmberObject.create();\n       App.register('model:user', App.Person, { singleton: false });\n      App.register('fruit:favorite', App.Orange);\n      App.register('communication:main', App.Email, { singleton: false });\n      App.register('session', App.session, { instantiate: false });\n      ```\n       @method register\n      @param  fullName {String} type:name (e.g., 'model:user')\n      @param  factory {Function} (e.g., App.Person)\n      @param  options {Object} (optional) disable instantiation or singleton usage\n      @public\n     */\n    register: registryAlias('register'),\n\n    /**\n     Unregister a factory.\n      ```javascript\n     import Application from '@ember/application';\n     import EmberObject from '@ember/object';\n      let App = Application.create();\n     let User = EmberObject.extend();\n     App.register('model:user', User);\n      App.resolveRegistration('model:user').create() instanceof User //=> true\n      App.unregister('model:user')\n     App.resolveRegistration('model:user') === undefined //=> true\n     ```\n      @public\n     @method unregister\n     @param {String} fullName\n     */\n    unregister: registryAlias('unregister'),\n\n    /**\n     Check if a factory is registered.\n      @public\n     @method hasRegistration\n     @param {String} fullName\n     @return {Boolean}\n     */\n    hasRegistration: registryAlias('has'),\n\n    /**\n     Return a specific registered option for a particular factory.\n      @public\n     @method registeredOption\n     @param  {String} fullName\n     @param  {String} optionName\n     @return {Object} options\n     */\n    registeredOption: registryAlias('getOption'),\n\n    /**\n     Register options for a particular factory.\n      @public\n     @method registerOptions\n     @param {String} fullName\n     @param {Object} options\n     */\n    registerOptions: registryAlias('options'),\n\n    /**\n     Return registered options for a particular factory.\n      @public\n     @method registeredOptions\n     @param  {String} fullName\n     @return {Object} options\n     */\n    registeredOptions: registryAlias('getOptions'),\n\n    /**\n     Allow registering options for all factories of a type.\n      ```javascript\n     import Application from '@ember/application';\n      let App = Application.create();\n     let appInstance = App.buildInstance();\n      // if all of type `connection` must not be singletons\n     appInstance.registerOptionsForType('connection', { singleton: false });\n      appInstance.register('connection:twitter', TwitterConnection);\n     appInstance.register('connection:facebook', FacebookConnection);\n      let twitter = appInstance.lookup('connection:twitter');\n     let twitter2 = appInstance.lookup('connection:twitter');\n      twitter === twitter2; // => false\n      let facebook = appInstance.lookup('connection:facebook');\n     let facebook2 = appInstance.lookup('connection:facebook');\n      facebook === facebook2; // => false\n     ```\n      @public\n     @method registerOptionsForType\n     @param {String} type\n     @param {Object} options\n     */\n    registerOptionsForType: registryAlias('optionsForType'),\n\n    /**\n     Return the registered options for all factories of a type.\n      @public\n     @method registeredOptionsForType\n     @param {String} type\n     @return {Object} options\n     */\n    registeredOptionsForType: registryAlias('getOptionsForType'),\n\n    /**\n      Define a dependency injection onto a specific factory or all factories\n      of a type.\n       When Ember instantiates a controller, view, or other framework component\n      it can attach a dependency to that component. This is often used to\n      provide services to a set of framework components.\n       An example of providing a session object to all controllers:\n       ```javascript\n      import { alias } from '@ember/object/computed';\n      import Application from '@ember/application';\n      import Controller from '@ember/controller';\n      import EmberObject from '@ember/object';\n       let App = Application.create();\n      let Session = EmberObject.extend({ isAuthenticated: false });\n       // A factory must be registered before it can be injected\n      App.register('session:main', Session);\n       // Inject 'session:main' onto all factories of the type 'controller'\n      // with the name 'session'\n      App.inject('controller', 'session', 'session:main');\n       App.IndexController = Controller.extend({\n        isLoggedIn: alias('session.isAuthenticated')\n      });\n      ```\n       Injections can also be performed on specific factories.\n       ```javascript\n      App.inject(<full_name or type>, <property name>, <full_name>)\n      App.inject('route', 'source', 'source:main')\n      App.inject('route:application', 'email', 'model:email')\n      ```\n       It is important to note that injections can only be performed on\n      classes that are instantiated by Ember itself. Instantiating a class\n      directly (via `create` or `new`) bypasses the dependency injection\n      system.\n       @public\n      @method inject\n      @param  factoryNameOrType {String}\n      @param  property {String}\n      @param  injectionName {String}\n    **/\n    inject: registryAlias('injection')\n  });\n\n\n  function registryAlias(name) {\n    return function () {\n      var _registry__;\n\n      return (_registry__ = this.__registry__)[name].apply(_registry__, arguments);\n    };\n  }\n});","enifed('ember-runtime/mixins/target_action_support', ['exports', 'ember-environment', 'ember-metal', 'ember-debug'], function (exports, _emberEnvironment, _emberMetal, _emberDebug) {\n  'use strict';\n\n  exports.default = _emberMetal.Mixin.create({\n    target: null,\n    targetObject: (0, _emberMetal.descriptor)({\n      configurable: true,\n      enumerable: false,\n      get: function () {\n        var message = this + ' Usage of `targetObject` is deprecated. Please use `target` instead.';\n        var options = { id: 'ember-runtime.using-targetObject', until: '3.5.0' };\n        (true && !(false) && (0, _emberDebug.deprecate)(message, false, options));\n\n        return this._targetObject;\n      },\n      set: function (value) {\n        var message = this + ' Usage of `targetObject` is deprecated. Please use `target` instead.';\n        var options = { id: 'ember-runtime.using-targetObject', until: '3.5.0' };\n        (true && !(false) && (0, _emberDebug.deprecate)(message, false, options));\n\n        this._targetObject = value;\n      }\n    }),\n    action: null,\n    actionContext: null,\n\n    actionContextObject: (0, _emberMetal.computed)('actionContext', function () {\n      var actionContext = (0, _emberMetal.get)(this, 'actionContext');\n\n      if (typeof actionContext === 'string') {\n        var value = (0, _emberMetal.get)(this, actionContext);\n        if (value === undefined) {\n          value = (0, _emberMetal.get)(_emberEnvironment.context.lookup, actionContext);\n        }\n        return value;\n      } else {\n        return actionContext;\n      }\n    }),\n\n    /**\n    Send an `action` with an `actionContext` to a `target`. The action, actionContext\n    and target will be retrieved from properties of the object. For example:\n     ```javascript\n    import { alias } from '@ember/object/computed';\n     App.SaveButtonView = Ember.View.extend(Ember.TargetActionSupport, {\n      target: alias('controller'),\n      action: 'save',\n      actionContext: alias('context'),\n      click() {\n        this.triggerAction(); // Sends the `save` action, along with the current context\n                              // to the current controller\n      }\n    });\n    ```\n     The `target`, `action`, and `actionContext` can be provided as properties of\n    an optional object argument to `triggerAction` as well.\n     ```javascript\n    App.SaveButtonView = Ember.View.extend(Ember.TargetActionSupport, {\n      click() {\n        this.triggerAction({\n          action: 'save',\n          target: this.get('controller'),\n          actionContext: this.get('context')\n        }); // Sends the `save` action, along with the current context\n            // to the current controller\n      }\n    });\n    ```\n     The `actionContext` defaults to the object you are mixing `TargetActionSupport` into.\n    But `target` and `action` must be specified either as properties or with the argument\n    to `triggerAction`, or a combination:\n     ```javascript\n    import { alias } from '@ember/object/computed';\n     App.SaveButtonView = Ember.View.extend(Ember.TargetActionSupport, {\n      target: alias('controller'),\n      click() {\n        this.triggerAction({\n          action: 'save'\n        }); // Sends the `save` action, along with a reference to `this`,\n            // to the current controller\n      }\n    });\n    ```\n     @method triggerAction\n    @param opts {Object} (optional, with the optional keys action, target and/or actionContext)\n    @return {Boolean} true if the action was sent successfully and did not return false\n    @private\n    */\n    triggerAction: function () {\n      var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      var action = opts.action,\n          target = opts.target,\n          actionContext = opts.actionContext;\n\n      action = action || (0, _emberMetal.get)(this, 'action');\n      target = target || getTarget(this);\n\n      if (actionContext === undefined) {\n        actionContext = (0, _emberMetal.get)(this, 'actionContextObject') || this;\n      }\n\n      if (target && action) {\n        var ret = void 0;\n\n        if (target.send) {\n          var _target;\n\n          ret = (_target = target).send.apply(_target, [action].concat(actionContext));\n        } else {\n          var _target2;\n\n          (true && !(typeof target[action] === 'function') && (0, _emberDebug.assert)('The action \\'' + action + '\\' did not exist on ' + target, typeof target[action] === 'function'));\n\n          ret = (_target2 = target)[action].apply(_target2, [].concat(actionContext));\n        }\n\n        if (ret !== false) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n  });\n\n\n  function getTarget(instance) {\n    var target = (0, _emberMetal.get)(instance, 'target');\n    if (target) {\n      if (typeof target === 'string') {\n        var value = (0, _emberMetal.get)(instance, target);\n        if (value === undefined) {\n          value = (0, _emberMetal.get)(_emberEnvironment.context.lookup, target);\n        }\n\n        return value;\n      } else {\n        return target;\n      }\n    }\n\n    // if a `targetObject` CP was provided, use it\n    if (target) {\n      return target;\n    }\n\n    // if _targetObject use it\n    if (instance._targetObject) {\n      return instance._targetObject;\n    }\n\n    return null;\n  }\n});","enifed(\"ember-runtime/string_registry\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.setStrings = setStrings;\n  exports.getStrings = getStrings;\n  exports.get = get;\n  // STATE within a module is frowned upon, this exists\n  // to support Ember.STRINGS but shield ember internals from this legacy global\n  // API.\n  var STRINGS = {};\n\n  function setStrings(strings) {\n    STRINGS = strings;\n  }\n\n  function getStrings() {\n    return STRINGS;\n  }\n\n  function get(name) {\n    return STRINGS[name];\n  }\n});","enifed('ember-runtime/system/application', ['exports', 'ember-runtime/system/namespace'], function (exports, _namespace) {\n  'use strict';\n\n  exports.default = _namespace.default.extend();\n});","enifed('ember-runtime/system/array_proxy', ['exports', 'ember-metal', 'ember-runtime/utils', 'ember-runtime/system/object', 'ember-runtime/mixins/array', 'ember-debug'], function (exports, _emberMetal, _utils, _object, _array, _emberDebug) {\n  'use strict';\n\n  var _EmberObject$extend;\n\n  var ARRAY_OBSERVER_MAPPING = {\n    willChange: '_arrangedContentArrayWillChange',\n    didChange: '_arrangedContentArrayDidChange'\n  };\n\n  /**\n    An ArrayProxy wraps any other object that implements `Array` and/or\n    `MutableArray,` forwarding all requests. This makes it very useful for\n    a number of binding use cases or other cases where being able to swap\n    out the underlying array is useful.\n  \n    A simple example of usage:\n  \n    ```javascript\n    import { A } from '@ember/array';\n    import ArrayProxy from '@ember/array/proxy';\n  \n    let pets = ['dog', 'cat', 'fish'];\n    let ap = ArrayProxy.create({ content: A(pets) });\n  \n    ap.get('firstObject');                        // 'dog'\n    ap.set('content', ['amoeba', 'paramecium']);\n    ap.get('firstObject');                        // 'amoeba'\n    ```\n  \n    This class can also be useful as a layer to transform the contents of\n    an array, as they are accessed. This can be done by overriding\n    `objectAtContent`:\n  \n    ```javascript\n    import { A } from '@ember/array';\n    import ArrayProxy from '@ember/array/proxy';\n  \n    let pets = ['dog', 'cat', 'fish'];\n    let ap = ArrayProxy.create({\n        content: A(pets),\n        objectAtContent: function(idx) {\n            return this.get('content').objectAt(idx).toUpperCase();\n        }\n    });\n  \n    ap.get('firstObject'); // . 'DOG'\n    ```\n  \n    @class ArrayProxy\n    @extends EmberObject\n    @uses MutableArray\n    @public\n  */\n  exports.default = _object.default.extend(_array.MutableArray, (_EmberObject$extend = {\n    init: function () {\n      this._super.apply(this, arguments);\n\n      /*\n        `this._objectsDirtyIndex` determines which indexes in the `this._objects`\n        cache are dirty.\n         If `this._objectsDirtyIndex === -1` then no indexes are dirty.\n        Otherwise, an index `i` is dirty if `i >= this._objectsDirtyIndex`.\n         Calling `objectAt` with a dirty index will cause the `this._objects`\n        cache to be recomputed.\n      */\n      this._objectsDirtyIndex = 0;\n      this._objects = null;\n\n      this._lengthDirty = true;\n      this._length = 0;\n\n      this._arrangedContent = null;\n      this._addArrangedContentArrayObsever();\n    },\n    willDestroy: function () {\n      this._removeArrangedContentArrayObsever();\n    },\n\n\n    /**\n      The content array. Must be an object that implements `Array` and/or\n      `MutableArray.`\n       @property content\n      @type EmberArray\n      @public\n    */\n    content: null,\n\n    /**\n     The array that the proxy pretends to be. In the default `ArrayProxy`\n     implementation, this and `content` are the same. Subclasses of `ArrayProxy`\n     can override this property to provide things like sorting and filtering.\n      @property arrangedContent\n     @public\n    */\n    arrangedContent: (0, _emberMetal.alias)('content'),\n\n    /**\n      Should actually retrieve the object at the specified index from the\n      content. You can override this method in subclasses to transform the\n      content item to something new.\n       This method will only be called if content is non-`null`.\n       @method objectAtContent\n      @param {Number} idx The index to retrieve.\n      @return {Object} the value or undefined if none found\n      @public\n    */\n    objectAtContent: function (idx) {\n      return (0, _emberMetal.objectAt)((0, _emberMetal.get)(this, 'arrangedContent'), idx);\n    },\n\n\n    // See additional docs for `replace` from `MutableArray`:\n    // https://www.emberjs.com/api/ember/3.3/classes/MutableArray/methods/replace?anchor=replace\n    replace: function (idx, amt, objects) {\n      (true && !((0, _emberMetal.get)(this, 'arrangedContent') === (0, _emberMetal.get)(this, 'content')) && (0, _emberDebug.assert)('Mutating an arranged ArrayProxy is not allowed', (0, _emberMetal.get)(this, 'arrangedContent') === (0, _emberMetal.get)(this, 'content')));\n\n      this.replaceContent(idx, amt, objects);\n    },\n\n\n    /**\n      Should actually replace the specified objects on the content array.\n      You can override this method in subclasses to transform the content item\n      into something new.\n       This method will only be called if content is non-`null`.\n       @method replaceContent\n      @param {Number} idx The starting index\n      @param {Number} amt The number of items to remove from the content.\n      @param {EmberArray} objects Optional array of objects to insert or null if no\n        objects.\n      @return {void}\n      @public\n    */\n    replaceContent: function (idx, amt, objects) {\n      (0, _emberMetal.get)(this, 'content').replace(idx, amt, objects);\n    },\n\n\n    // Overriding objectAt is not supported.\n    objectAt: function (idx) {\n      if (this._objects === null) {\n        this._objects = [];\n      }\n\n      if (this._objectsDirtyIndex !== -1 && idx >= this._objectsDirtyIndex) {\n        var arrangedContent = (0, _emberMetal.get)(this, 'arrangedContent');\n        if (arrangedContent) {\n          var length = this._objects.length = (0, _emberMetal.get)(arrangedContent, 'length');\n\n          for (var i = this._objectsDirtyIndex; i < length; i++) {\n            this._objects[i] = this.objectAtContent(i);\n          }\n        } else {\n          this._objects.length = 0;\n        }\n        this._objectsDirtyIndex = -1;\n      }\n\n      return this._objects[idx];\n    },\n\n\n    // Overriding length is not supported.\n    length: (0, _emberMetal.computed)(function () {\n      if (this._lengthDirty) {\n        var arrangedContent = (0, _emberMetal.get)(this, 'arrangedContent');\n        this._length = arrangedContent ? (0, _emberMetal.get)(arrangedContent, 'length') : 0;\n        this._lengthDirty = false;\n      }\n\n      return this._length;\n    }).volatile()\n\n  }, _EmberObject$extend[_emberMetal.PROPERTY_DID_CHANGE] = function (key) {\n    if (key === 'arrangedContent') {\n      var oldLength = this._objects === null ? 0 : this._objects.length;\n      var arrangedContent = (0, _emberMetal.get)(this, 'arrangedContent');\n      var newLength = arrangedContent ? (0, _emberMetal.get)(arrangedContent, 'length') : 0;\n\n      this._removeArrangedContentArrayObsever();\n      this.arrayContentWillChange(0, oldLength, newLength);\n\n      this._objectsDirtyIndex = 0;\n      this._lengthDirty = true;\n\n      this.arrayContentDidChange(0, oldLength, newLength);\n      this._addArrangedContentArrayObsever();\n    }\n  }, _EmberObject$extend._addArrangedContentArrayObsever = function () {\n    var arrangedContent = (0, _emberMetal.get)(this, 'arrangedContent');\n    if (arrangedContent) {\n      (true && !(arrangedContent !== this) && (0, _emberDebug.assert)('Can\\'t set ArrayProxy\\'s content to itself', arrangedContent !== this));\n      (true && !((0, _utils.isArray)(arrangedContent) || arrangedContent.isDestroyed) && (0, _emberDebug.assert)('ArrayProxy expects an Array or ArrayProxy, but you passed ' + typeof arrangedContent, (0, _utils.isArray)(arrangedContent) || arrangedContent.isDestroyed));\n\n\n      (0, _array.addArrayObserver)(arrangedContent, this, ARRAY_OBSERVER_MAPPING);\n\n      this._arrangedContent = arrangedContent;\n    }\n  }, _EmberObject$extend._removeArrangedContentArrayObsever = function () {\n    if (this._arrangedContent) {\n      (0, _array.removeArrayObserver)(this._arrangedContent, this, ARRAY_OBSERVER_MAPPING);\n    }\n  }, _EmberObject$extend._arrangedContentArrayWillChange = function () {}, _EmberObject$extend._arrangedContentArrayDidChange = function (proxy, idx, removedCnt, addedCnt) {\n    this.arrayContentWillChange(idx, removedCnt, addedCnt);\n\n    var dirtyIndex = idx;\n    if (dirtyIndex < 0) {\n      var length = (0, _emberMetal.get)(this._arrangedContent, 'length');\n      dirtyIndex += length + removedCnt - addedCnt;\n    }\n\n    if (this._objectsDirtyIndex === -1) {\n      this._objectsDirtyIndex = dirtyIndex;\n    } else {\n      if (this._objectsDirtyIndex > dirtyIndex) {\n        this._objectsDirtyIndex = dirtyIndex;\n      }\n    }\n\n    this._lengthDirty = true;\n\n    this.arrayContentDidChange(idx, removedCnt, addedCnt);\n  }, _EmberObject$extend));\n});","enifed('ember-runtime/system/core_object', ['exports', 'ember-babel', 'container', 'ember-utils', 'ember-metal', 'ember-runtime/mixins/action_handler', 'ember-runtime/inject', 'ember-debug', 'ember-environment', 'ember/features'], function (exports, _emberBabel, _container, _emberUtils, _emberMetal, _action_handler, _inject, _emberDebug, _emberEnvironment, _features) {\n  'use strict';\n\n  exports.POST_INIT = undefined;\n\n  var _Mixin$create, _ClassMixinProps;\n\n  var schedule = _emberMetal.run.schedule;\n  var applyMixin = _emberMetal.Mixin._apply;\n  var reopen = _emberMetal.Mixin.prototype.reopen;\n\n  var POST_INIT = exports.POST_INIT = (0, _emberUtils.symbol)('POST_INIT');\n\n  function makeCtor() {\n    // Note: avoid accessing any properties on the object since it makes the\n    // method a lot faster. This is glue code so we want it to be as fast as\n    // possible.\n\n    var wasApplied = false;\n    var initFactory = void 0;\n\n    var Class = function () {\n      function Class(properties) {\n        var _self;\n\n        (0, _emberBabel.classCallCheck)(this, Class);\n\n        var self = this;\n\n        if (!wasApplied) {\n          Class.proto(); // prepare prototype...\n        }\n\n        var beforeInitCalled = void 0; // only used in debug builds to enable the proxy trap\n\n        // using DEBUG here to avoid the extraneous variable when not needed\n        if (true) {\n          beforeInitCalled = true;\n        }\n\n        if (true && _features.MANDATORY_GETTER && _features.EMBER_METAL_ES5_GETTERS && _emberUtils.HAS_NATIVE_PROXY && typeof self.unknownProperty === 'function') {\n          var messageFor = function (obj, property) {\n            return 'You attempted to access the `' + String(property) + '` property (of ' + obj + ').\\n' + 'Since Ember 3.1, this is usually fine as you no longer need to use `.get()`\\n' + 'to access computed properties. However, in this case, the object in question\\n' + 'is a special kind of Ember object (a proxy). Therefore, it is still necessary\\n' + ('to use `.get(\\'' + String(property) + '\\')` in this case.\\n\\n') + 'If you encountered this error because of third-party code that you don\\'t control,\\n' + 'there is more information at https://github.com/emberjs/ember.js/issues/16148, and\\n' + 'you can help us improve this error message by telling us more about what happened in\\n' + 'this situation.';\n          };\n\n          /* globals Proxy Reflect */\n          self = new Proxy(this, {\n            get: function (target, property, receiver) {\n              if (property === _emberMetal.PROXY_CONTENT) {\n                return target;\n              } else if (beforeInitCalled || typeof property === 'symbol' || (0, _emberUtils.isInternalSymbol)(property) || property === _emberUtils.GUID_KEY_PROPERTY || property === 'toJSON' || property === 'toString' || property === 'toStringExtension' || property === 'didDefineProperty' || property === 'willWatchProperty' || property === 'didUnwatchProperty' || property === 'didAddListener' || property === 'didRemoveListener' || property === '__DESCRIPTOR__' || property === 'isDescriptor' || property in target) {\n                return Reflect.get(target, property, receiver);\n              }\n\n              var value = target.unknownProperty.call(receiver, property);\n\n              if (typeof value !== 'function') {\n                (true && !(value === undefined || value === null) && (0, _emberDebug.assert)(messageFor(receiver, property), value === undefined || value === null));\n              }\n            }\n          });\n        }\n\n        self.__defineNonEnumerable(_emberUtils.GUID_KEY_PROPERTY);\n        var m = (0, _emberMetal.meta)(self);\n        var proto = m.proto;\n        m.proto = self;\n\n        if (initFactory) {\n          _container.FACTORY_FOR.set(this, initFactory);\n          if (true && self !== this) {\n            _container.FACTORY_FOR.set(self, initFactory);\n          }\n          initFactory = null;\n        }\n\n        if (properties !== undefined) {\n          (true && !(typeof properties === 'object' && properties !== null) && (0, _emberDebug.assert)('EmberObject.create only accepts objects.', typeof properties === 'object' && properties !== null));\n          (true && !(!(properties instanceof _emberMetal.Mixin)) && (0, _emberDebug.assert)('EmberObject.create no longer supports mixing in other ' + 'definitions, use .extend & .create separately instead.', !(properties instanceof _emberMetal.Mixin)));\n\n\n          var concatenatedProperties = self.concatenatedProperties;\n          var mergedProperties = self.mergedProperties;\n          var hasConcatenatedProps = concatenatedProperties !== undefined && concatenatedProperties.length > 0;\n          var hasMergedProps = mergedProperties !== undefined && mergedProperties.length > 0;\n\n          var keyNames = Object.keys(properties);\n\n          for (var i = 0; i < keyNames.length; i++) {\n            var keyName = keyNames[i];\n            var value = properties[keyName];\n\n            if (_emberEnvironment.ENV._ENABLE_BINDING_SUPPORT && _emberMetal.Mixin.detectBinding(keyName)) {\n              m.writeBindings(keyName, value);\n            }\n\n            (true && !(!(value instanceof _emberMetal.ComputedProperty)) && (0, _emberDebug.assert)('EmberObject.create no longer supports defining computed ' + 'properties. Define computed properties using extend() or reopen() ' + 'before calling create().', !(value instanceof _emberMetal.ComputedProperty)));\n            (true && !(!(typeof value === 'function' && value.toString().indexOf('._super') !== -1)) && (0, _emberDebug.assert)('EmberObject.create no longer supports defining methods that call _super.', !(typeof value === 'function' && value.toString().indexOf('._super') !== -1)));\n            (true && !(!(keyName === 'actions' && _action_handler.default.detect(this))) && (0, _emberDebug.assert)('`actions` must be provided at extend time, not at create time, ' + 'when Ember.ActionHandler is used (i.e. views, controllers & routes).', !(keyName === 'actions' && _action_handler.default.detect(this))));\n\n\n            var possibleDesc = (0, _emberMetal.descriptorFor)(self, keyName, m);\n            var isDescriptor = possibleDesc !== undefined;\n\n            if (!isDescriptor) {\n              var baseValue = self[keyName];\n\n              if (hasConcatenatedProps && concatenatedProperties.indexOf(keyName) > -1) {\n                if (baseValue) {\n                  value = (0, _emberUtils.makeArray)(baseValue).concat(value);\n                } else {\n                  value = (0, _emberUtils.makeArray)(value);\n                }\n              }\n\n              if (hasMergedProps && mergedProperties.indexOf(keyName) > -1) {\n                value = (0, _emberUtils.assign)({}, baseValue, value);\n              }\n            }\n\n            if (isDescriptor) {\n              possibleDesc.set(self, keyName, value);\n            } else if (typeof self.setUnknownProperty === 'function' && !(keyName in self)) {\n              self.setUnknownProperty(keyName, value);\n            } else {\n              if (_features.MANDATORY_SETTER) {\n                (0, _emberMetal.defineProperty)(self, keyName, null, value); // setup mandatory setter\n              } else {\n                self[keyName] = value;\n              }\n            }\n          }\n        }\n\n        if (_emberEnvironment.ENV._ENABLE_BINDING_SUPPORT) {\n          _emberMetal.Mixin.finishPartial(self, m);\n        }\n\n        // using DEBUG here to avoid the extraneous variable when not needed\n        if (true) {\n          beforeInitCalled = false;\n        }\n        (_self = self).init.apply(_self, arguments);\n\n        self[POST_INIT]();\n\n        m.proto = proto;\n        (0, _emberMetal.finishChains)(m);\n        (0, _emberMetal.sendEvent)(self, 'init', undefined, undefined, undefined, m);\n\n        // only return when in debug builds and `self` is the proxy created above\n        if (true && self !== this) {\n          return self;\n        }\n      }\n\n      Class.willReopen = function willReopen() {\n        if (wasApplied) {\n          Class.PrototypeMixin = _emberMetal.Mixin.create(Class.PrototypeMixin);\n        }\n\n        wasApplied = false;\n      };\n\n      Class._initFactory = function _initFactory(factory) {\n        initFactory = factory;\n      };\n\n      Class.proto = function proto() {\n        var superclass = Class.superclass;\n        if (superclass) {\n          superclass.proto();\n        }\n\n        if (!wasApplied) {\n          wasApplied = true;\n          Class.PrototypeMixin.applyPartial(Class.prototype);\n        }\n\n        return this.prototype;\n      };\n\n      return Class;\n    }();\n\n    Class.toString = _emberMetal.Mixin.prototype.toString;\n\n    return Class;\n  }\n\n  var IS_DESTROYED = (0, _emberMetal.descriptor)({\n    configurable: true,\n    enumerable: false,\n\n    get: function () {\n      return (0, _emberMetal.peekMeta)(this).isSourceDestroyed();\n    },\n    set: function (value) {\n      (true && !(value === IS_DESTROYED) && (0, _emberDebug.assert)('You cannot set `' + this + '.isDestroyed` directly, please use `.destroy()`.', value === IS_DESTROYED));\n    }\n  });\n\n  var IS_DESTROYING = (0, _emberMetal.descriptor)({\n    configurable: true,\n    enumerable: false,\n\n    get: function () {\n      return (0, _emberMetal.peekMeta)(this).isSourceDestroying();\n    },\n    set: function (value) {\n      (true && !(value === IS_DESTROYING) && (0, _emberDebug.assert)('You cannot set `' + this + '.isDestroying` directly, please use `.destroy()`.', value === IS_DESTROYING));\n    }\n  });\n\n  /**\n    @class CoreObject\n    @public\n  */\n  var CoreObject = makeCtor();\n  CoreObject.toString = function () {\n    return 'Ember.CoreObject';\n  };\n  CoreObject.PrototypeMixin = _emberMetal.Mixin.create((_Mixin$create = {\n    reopen: function () {\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      applyMixin(this, args, true);\n      return this;\n    },\n    init: function () {}\n  }, _Mixin$create[POST_INIT] = function () {}, _Mixin$create.__defineNonEnumerable = function (property) {\n    Object.defineProperty(this, property.name, property.descriptor);\n    //this[property.name] = property.descriptor.value;\n  }, _Mixin$create.concatenatedProperties = null, _Mixin$create.mergedProperties = null, _Mixin$create.isDestroyed = IS_DESTROYED, _Mixin$create.isDestroying = IS_DESTROYING, _Mixin$create.destroy = function () {\n    var m = (0, _emberMetal.peekMeta)(this);\n    if (m.isSourceDestroying()) {\n      return;\n    }\n\n    m.setSourceDestroying();\n\n    schedule('actions', this, this.willDestroy);\n    schedule('destroy', this, this._scheduledDestroy, m);\n\n    return this;\n  }, _Mixin$create.willDestroy = function () {}, _Mixin$create._scheduledDestroy = function (m) {\n    if (m.isSourceDestroyed()) {\n      return;\n    }\n    (0, _emberMetal.deleteMeta)(this);\n    m.setSourceDestroyed();\n  }, _Mixin$create.toString = function () {\n    var hasToStringExtension = typeof this.toStringExtension === 'function';\n    var extension = hasToStringExtension ? ':' + this.toStringExtension() : '';\n\n    var ret = '<' + (this[_emberUtils.NAME_KEY] || _container.FACTORY_FOR.get(this) || this.constructor.toString()) + ':' + (0, _emberUtils.guidFor)(this) + extension + '>';\n\n    return ret;\n  }, _Mixin$create));\n\n  CoreObject.PrototypeMixin.ownerConstructor = CoreObject;\n\n  CoreObject.__super__ = null;\n\n  var ClassMixinProps = (_ClassMixinProps = {\n\n    isClass: true,\n\n    isMethod: false\n  }, _ClassMixinProps[_emberUtils.NAME_KEY] = null, _ClassMixinProps[_emberUtils.GUID_KEY] = null, _ClassMixinProps.extend = function () {\n    var Class = makeCtor();\n    var proto = void 0;\n    Class.ClassMixin = _emberMetal.Mixin.create(this.ClassMixin);\n    Class.PrototypeMixin = _emberMetal.Mixin.create(this.PrototypeMixin);\n\n    Class.ClassMixin.ownerConstructor = Class;\n    Class.PrototypeMixin.ownerConstructor = Class;\n\n    reopen.apply(Class.PrototypeMixin, arguments);\n\n    Class.superclass = this;\n    Class.__super__ = this.prototype;\n\n    proto = Class.prototype = Object.create(this.prototype);\n    proto.constructor = Class;\n    (0, _emberUtils.generateGuid)(proto);\n    (0, _emberMetal.meta)(proto).proto = proto; // this will disable observers on prototype\n\n    Class.ClassMixin.apply(Class);\n    return Class;\n  }, _ClassMixinProps.create = function (props, extra) {\n    var C = this;\n\n    if (extra === undefined) {\n      return new C(props);\n    } else {\n      return new C(flattenProps.apply(this, arguments));\n    }\n  }, _ClassMixinProps.reopen = function () {\n    this.willReopen();\n    reopen.apply(this.PrototypeMixin, arguments);\n    return this;\n  }, _ClassMixinProps.reopenClass = function () {\n    reopen.apply(this.ClassMixin, arguments);\n    applyMixin(this, arguments, false);\n    return this;\n  }, _ClassMixinProps.detect = function (obj) {\n    if ('function' !== typeof obj) {\n      return false;\n    }\n    while (obj) {\n      if (obj === this) {\n        return true;\n      }\n      obj = obj.superclass;\n    }\n    return false;\n  }, _ClassMixinProps.detectInstance = function (obj) {\n    return obj instanceof this;\n  }, _ClassMixinProps.metaForProperty = function (key) {\n    var proto = this.proto();\n    var possibleDesc = (0, _emberMetal.descriptorFor)(proto, key);\n\n    (true && !(possibleDesc !== undefined) && (0, _emberDebug.assert)('metaForProperty() could not find a computed property with key \\'' + key + '\\'.', possibleDesc !== undefined));\n\n    return possibleDesc._meta || {};\n  }, _ClassMixinProps._computedProperties = (0, _emberMetal.computed)(function () {\n    (0, _emberMetal._hasCachedComputedProperties)();\n    var proto = this.proto();\n    var possibleDesc = void 0;\n    var properties = [];\n\n    for (var name in proto) {\n      possibleDesc = (0, _emberMetal.descriptorFor)(proto, name);\n\n      if (possibleDesc !== undefined) {\n        properties.push({\n          name: name,\n          meta: possibleDesc._meta\n        });\n      }\n    }\n    return properties;\n  }).readOnly(), _ClassMixinProps.eachComputedProperty = function (callback, binding) {\n    var property = void 0;\n    var empty = {};\n\n    var properties = (0, _emberMetal.get)(this, '_computedProperties');\n\n    for (var i = 0; i < properties.length; i++) {\n      property = properties[i];\n      callback.call(binding || this, property.name, property.meta || empty);\n    }\n  }, _ClassMixinProps);\n\n  if (_emberEnvironment.ENV._ENABLE_PROPERTY_REQUIRED_SUPPORT) {\n    ClassMixinProps.ClassMixin = _emberMetal.REQUIRED;\n    ClassMixinProps.PrototypeMixin = _emberMetal.REQUIRED;\n  }\n\n  function injectedPropertyAssertion() {\n    (true && !((0, _inject.validatePropertyInjections)(this)) && (0, _emberDebug.assert)('Injected properties are invalid', (0, _inject.validatePropertyInjections)(this)));\n  }\n\n  function flattenProps() {\n    var concatenatedProperties = this.concatenatedProperties,\n        mergedProperties = this.mergedProperties;\n\n    var hasConcatenatedProps = concatenatedProperties !== undefined && concatenatedProperties.length > 0;\n    var hasMergedProps = mergedProperties !== undefined && mergedProperties.length > 0;\n\n    var initProperties = {};\n\n    for (var _len2 = arguments.length, props = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      props[_key2] = arguments[_key2];\n    }\n\n    for (var i = 0; i < props.length; i++) {\n      var properties = props[i];\n\n      (true && !(!(properties instanceof _emberMetal.Mixin)) && (0, _emberDebug.assert)('EmberObject.create no longer supports mixing in other ' + 'definitions, use .extend & .create separately instead.', !(properties instanceof _emberMetal.Mixin)));\n\n\n      var keyNames = Object.keys(properties);\n\n      for (var j = 0, k = keyNames.length; j < k; j++) {\n        var keyName = keyNames[j];\n        var value = properties[keyName];\n\n        if (hasConcatenatedProps && concatenatedProperties.indexOf(keyName) > -1) {\n          var baseValue = initProperties[keyName];\n\n          if (baseValue) {\n            value = (0, _emberUtils.makeArray)(baseValue).concat(value);\n          } else {\n            value = (0, _emberUtils.makeArray)(value);\n          }\n        }\n\n        if (hasMergedProps && mergedProperties.indexOf(keyName) > -1) {\n          var _baseValue = initProperties[keyName];\n\n          value = (0, _emberUtils.assign)({}, _baseValue, value);\n        }\n\n        initProperties[keyName] = value;\n      }\n    }\n\n    return initProperties;\n  }\n\n  if (true) {\n    /**\n      Provides lookup-time type validation for injected properties.\n       @private\n      @method _onLookup\n    */\n    ClassMixinProps._onLookup = injectedPropertyAssertion;\n    /**\n      Returns a hash of property names and container names that injected\n      properties will lookup on the container lazily.\n       @method _lazyInjections\n      @return {Object} Hash of all lazy injected property keys to container names\n      @private\n    */\n    ClassMixinProps._lazyInjections = function () {\n      var injections = {};\n      var proto = this.proto();\n      var key = void 0;\n      var desc = void 0;\n\n      for (key in proto) {\n        desc = (0, _emberMetal.descriptorFor)(proto, key);\n        if (desc instanceof _emberMetal.InjectedProperty) {\n          injections[key] = desc.type + ':' + (desc.name || key);\n        }\n      }\n\n      return injections;\n    };\n  }\n\n  var ClassMixin = _emberMetal.Mixin.create(ClassMixinProps);\n\n  ClassMixin.ownerConstructor = CoreObject;\n\n  CoreObject.ClassMixin = ClassMixin;\n\n  ClassMixin.apply(CoreObject);\n  exports.default = CoreObject;\n});","enifed('ember-runtime/system/lazy_load', ['exports', 'ember-environment'], function (exports, _emberEnvironment) {\n  'use strict';\n\n  exports._loaded = undefined;\n  exports.onLoad = onLoad;\n  exports.runLoadHooks = runLoadHooks;\n\n\n  /**\n    @module @ember/application\n  */\n\n  var loadHooks = _emberEnvironment.ENV.EMBER_LOAD_HOOKS || {}; /*globals CustomEvent */\n\n  var loaded = {};\n  var _loaded = exports._loaded = loaded;\n\n  /**\n    Detects when a specific package of Ember (e.g. 'Application')\n    has fully loaded and is available for extension.\n  \n    The provided `callback` will be called with the `name` passed\n    resolved from a string into the object:\n  \n    ``` javascript\n    import { onLoad } from '@ember/application';\n  \n    onLoad('Ember.Application' function(hbars) {\n      hbars.registerHelper(...);\n    });\n    ```\n  \n    @method onLoad\n    @static\n    @for @ember/application\n    @param name {String} name of hook\n    @param callback {Function} callback to be called\n    @private\n  */\n  function onLoad(name, callback) {\n    var object = loaded[name];\n\n    loadHooks[name] = loadHooks[name] || [];\n    loadHooks[name].push(callback);\n\n    if (object) {\n      callback(object);\n    }\n  }\n\n  /**\n    Called when an Ember.js package (e.g Application) has finished\n    loading. Triggers any callbacks registered for this event.\n  \n    @method runLoadHooks\n    @static\n    @for @ember/application\n    @param name {String} name of hook\n    @param object {Object} object to pass to callbacks\n    @private\n  */\n  function runLoadHooks(name, object) {\n    loaded[name] = object;\n    var window = _emberEnvironment.environment.window;\n\n    if (window && typeof CustomEvent === 'function') {\n      var event = new CustomEvent(name, { detail: object, name: name });\n      window.dispatchEvent(event);\n    }\n\n    if (loadHooks[name]) {\n      loadHooks[name].forEach(function (callback) {\n        return callback(object);\n      });\n    }\n  }\n});","enifed('ember-runtime/system/namespace', ['exports', 'ember-utils', 'ember-metal', 'ember-environment', 'ember-runtime/system/object'], function (exports, _emberUtils, _emberMetal, _emberEnvironment, _object) {\n  'use strict';\n\n  exports.isSearchDisabled = isSearchDisabled;\n  exports.setSearchDisabled = setSearchDisabled;\n\n\n  var searchDisabled = false; // Preloaded into namespaces\n  /**\n  @module ember\n  */\n  function isSearchDisabled() {\n    return searchDisabled;\n  }\n\n  function setSearchDisabled(flag) {\n    searchDisabled = !!flag;\n  }\n\n  /**\n    A Namespace is an object usually used to contain other objects or methods\n    such as an application or framework. Create a namespace anytime you want\n    to define one of these new containers.\n  \n    # Example Usage\n  \n    ```javascript\n    MyFramework = Ember.Namespace.create({\n      VERSION: '1.0.0'\n    });\n    ```\n  \n    @class Namespace\n    @namespace Ember\n    @extends EmberObject\n    @public\n  */\n  var Namespace = _object.default.extend({\n    isNamespace: true,\n\n    init: function () {\n      Namespace.NAMESPACES.push(this);\n      Namespace.PROCESSED = false;\n    },\n    toString: function () {\n      var name = (0, _emberMetal.get)(this, 'name') || (0, _emberMetal.get)(this, 'modulePrefix');\n      if (name) {\n        return name;\n      }\n\n      findNamespaces();\n      return this[_emberUtils.NAME_KEY];\n    },\n    nameClasses: function () {\n      processNamespace([this.toString()], this, {});\n    },\n    destroy: function () {\n      var namespaces = Namespace.NAMESPACES;\n      var toString = this.toString();\n\n      if (toString) {\n        _emberEnvironment.context.lookup[toString] = undefined;\n        delete Namespace.NAMESPACES_BY_ID[toString];\n      }\n      namespaces.splice(namespaces.indexOf(this), 1);\n      this._super.apply(this, arguments);\n    }\n  });\n\n  Namespace.reopenClass({\n    NAMESPACES: [],\n    NAMESPACES_BY_ID: {},\n    PROCESSED: false,\n    processAll: processAllNamespaces,\n    byName: function (name) {\n      if (!searchDisabled) {\n        processAllNamespaces();\n      }\n\n      return NAMESPACES_BY_ID[name];\n    }\n  });\n\n  var NAMESPACES_BY_ID = Namespace.NAMESPACES_BY_ID;\n\n  var hasOwnProp = {}.hasOwnProperty;\n\n  function processNamespace(paths, root, seen) {\n    var idx = paths.length;\n\n    NAMESPACES_BY_ID[paths.join('.')] = root;\n\n    // Loop over all of the keys in the namespace, looking for classes\n    for (var key in root) {\n      if (!hasOwnProp.call(root, key)) {\n        continue;\n      }\n      var obj = root[key];\n\n      // If we are processing the `Ember` namespace, for example, the\n      // `paths` will start with `[\"Ember\"]`. Every iteration through\n      // the loop will update the **second** element of this list with\n      // the key, so processing `Ember.View` will make the Array\n      // `['Ember', 'View']`.\n      paths[idx] = key;\n\n      // If we have found an unprocessed class\n      if (obj && obj.toString === classToString && !obj[_emberUtils.NAME_KEY]) {\n        // Replace the class' `toString` with the dot-separated path\n        // and set its `NAME_KEY`\n        obj[_emberUtils.NAME_KEY] = paths.join('.');\n\n        // Support nested namespaces\n      } else if (obj && obj.isNamespace) {\n        // Skip aliased namespaces\n        if (seen[(0, _emberUtils.guidFor)(obj)]) {\n          continue;\n        }\n        seen[(0, _emberUtils.guidFor)(obj)] = true;\n\n        // Process the child namespace\n        processNamespace(paths, obj, seen);\n      }\n    }\n\n    paths.length = idx; // cut out last item\n  }\n\n  function isUppercase(code) {\n    return code >= 65 && // A\n    code <= 90; // Z\n  }\n\n  function tryIsNamespace(lookup, prop) {\n    try {\n      var obj = lookup[prop];\n      return obj && obj.isNamespace && obj;\n    } catch (e) {\n      // continue\n    }\n  }\n\n  function findNamespaces() {\n    if (Namespace.PROCESSED) {\n      return;\n    }\n    var lookup = _emberEnvironment.context.lookup;\n    var keys = Object.keys(lookup);\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n      // Only process entities that start with uppercase A-Z\n      if (!isUppercase(key.charCodeAt(0))) {\n        continue;\n      }\n      var obj = tryIsNamespace(lookup, key);\n      if (obj) {\n        obj[_emberUtils.NAME_KEY] = key;\n      }\n    }\n  }\n\n  function superClassString(mixin) {\n    var superclass = mixin.superclass;\n    if (superclass) {\n      if (superclass[_emberUtils.NAME_KEY]) {\n        return superclass[_emberUtils.NAME_KEY];\n      }\n      return superClassString(superclass);\n    }\n  }\n\n  function calculateToString(target) {\n    var str = void 0;\n\n    if (!searchDisabled) {\n      processAllNamespaces();\n      // can also be set by processAllNamespaces\n      str = target[_emberUtils.NAME_KEY];\n      if (str) {\n        return str;\n      } else {\n        str = superClassString(target);\n        str = str ? '(subclass of ' + str + ')' : str;\n      }\n    }\n    if (str) {\n      return str;\n    } else {\n      return '(unknown mixin)';\n    }\n  }\n\n  function classToString() {\n    var name = this[_emberUtils.NAME_KEY];\n    if (name) {\n      return name;\n    }\n\n    return this[_emberUtils.NAME_KEY] = calculateToString(this);\n  }\n\n  function processAllNamespaces() {\n    var unprocessedNamespaces = !Namespace.PROCESSED;\n    var unprocessedMixins = (0, _emberMetal.hasUnprocessedMixins)();\n\n    if (unprocessedNamespaces) {\n      findNamespaces();\n      Namespace.PROCESSED = true;\n    }\n\n    if (unprocessedNamespaces || unprocessedMixins) {\n      var namespaces = Namespace.NAMESPACES;\n      var namespace = void 0;\n\n      for (var i = 0; i < namespaces.length; i++) {\n        namespace = namespaces[i];\n        processNamespace([namespace.toString()], namespace, {});\n      }\n\n      (0, _emberMetal.clearUnprocessedMixins)();\n    }\n  }\n\n  _emberMetal.Mixin.prototype.toString = classToString; // ES6TODO: altering imported objects. SBB.\n\n  exports.default = Namespace;\n});","enifed('ember-runtime/system/object', ['exports', 'container', 'ember-utils', 'ember-metal', 'ember-runtime/system/core_object', 'ember-runtime/mixins/observable', 'ember-debug'], function (exports, _container, _emberUtils, _emberMetal, _core_object, _observable, _emberDebug) {\n  'use strict';\n\n  exports.FrameworkObject = undefined;\n\n  var _CoreObject$extend;\n\n  var OVERRIDE_OWNER = (0, _emberUtils.symbol)('OVERRIDE_OWNER');\n\n  /**\n    `EmberObject` is the main base class for all Ember objects. It is a subclass\n    of `CoreObject` with the `Observable` mixin applied. For details,\n    see the documentation for each of these.\n  \n    @class EmberObject\n    @extends CoreObject\n    @uses Observable\n    @public\n  */\n  var EmberObject = _core_object.default.extend(_observable.default, (_CoreObject$extend = {\n    _debugContainerKey: (0, _emberMetal.descriptor)({\n      enumerable: false,\n      get: function () {\n        var factory = _container.FACTORY_FOR.get(this);\n\n        return factory !== undefined && factory.fullName;\n      }\n    })\n\n  }, _CoreObject$extend[_emberUtils.OWNER] = (0, _emberMetal.descriptor)({\n    enumerable: false,\n    get: function () {\n      if (this[OVERRIDE_OWNER]) {\n        return this[OVERRIDE_OWNER];\n      }\n\n      var factory = _container.FACTORY_FOR.get(this);\n\n      return factory !== undefined && factory.owner;\n    },\n    set: function (value) {\n      this[OVERRIDE_OWNER] = value;\n    }\n  }), _CoreObject$extend));\n\n  EmberObject.toString = function () {\n    return 'Ember.Object';\n  };\n\n  var FrameworkObject = exports.FrameworkObject = EmberObject;\n\n  if (true) {\n    var _EmberObject$extend;\n\n    var INIT_WAS_CALLED = (0, _emberUtils.symbol)('INIT_WAS_CALLED');\n    var ASSERT_INIT_WAS_CALLED = (0, _emberUtils.symbol)('ASSERT_INIT_WAS_CALLED');\n\n    exports.FrameworkObject = FrameworkObject = EmberObject.extend((_EmberObject$extend = {\n      init: function () {\n        this._super.apply(this, arguments);\n        this[INIT_WAS_CALLED] = true;\n      }\n    }, _EmberObject$extend[ASSERT_INIT_WAS_CALLED] = (0, _emberMetal.on)('init', function () {\n      (true && !(this[INIT_WAS_CALLED]) && (0, _emberDebug.assert)('You must call `this._super(...arguments);` when overriding `init` on a framework object. Please update ' + this + ' to call `this._super(...arguments);` from `init`.', this[INIT_WAS_CALLED]));\n    }), _EmberObject$extend));\n  }\n\n  exports.default = EmberObject;\n});","enifed('ember-runtime/system/object_proxy', ['exports', 'ember-runtime/system/object', 'ember-runtime/mixins/-proxy'], function (exports, _object, _proxy) {\n  'use strict';\n\n  exports.default = _object.default.extend(_proxy.default);\n});","enifed('ember-runtime/system/service', ['exports', 'ember-runtime/system/object', 'ember-runtime/inject'], function (exports, _object, _inject) {\n  'use strict';\n\n  /**\n   @module @ember/service\n   @public\n   */\n\n  /**\n    Creates a property that lazily looks up a service in the container. There\n    are no restrictions as to what objects a service can be injected into.\n  \n    Example:\n  \n    ```app/routes/application.js\n    import Route from '@ember/routing/route';\n    import { inject as service } from '@ember/service';\n  \n    export default Route.extend({\n      authManager: service('auth'),\n  \n      model() {\n        return this.get('authManager').findCurrentUser();\n      }\n    });\n    ```\n  \n    This example will create an `authManager` property on the application route\n    that looks up the `auth` service in the container, making it easily\n    accessible in the `model` hook.\n  \n    @method inject\n    @static\n    @since 1.10.0\n    @for @ember/service\n    @param {String} name (optional) name of the service to inject, defaults to\n           the property's name\n    @return {Ember.InjectedProperty} injection descriptor instance\n    @public\n  */\n  (0, _inject.createInjectionHelper)('service');\n\n  /**\n    @class Service\n    @extends EmberObject\n    @since 1.10.0\n    @public\n  */\n  var Service = _object.default.extend();\n\n  Service.reopenClass({\n    isServiceFactory: true\n  });\n\n  exports.default = Service;\n});","enifed('ember-runtime/system/string', ['exports', 'ember-metal', 'ember-utils', 'ember-runtime/utils', 'ember-runtime/string_registry'], function (exports, _emberMetal, _emberUtils, _utils, _string_registry) {\n  'use strict';\n\n  exports.capitalize = exports.underscore = exports.classify = exports.camelize = exports.dasherize = exports.decamelize = exports.w = exports.loc = undefined;\n  /**\n  @module @ember/string\n  */\n  var STRING_DASHERIZE_REGEXP = /[ _]/g;\n\n  var STRING_DASHERIZE_CACHE = new _emberMetal.Cache(1000, function (key) {\n    return decamelize(key).replace(STRING_DASHERIZE_REGEXP, '-');\n  });\n\n  var STRING_CAMELIZE_REGEXP_1 = /(\\-|\\_|\\.|\\s)+(.)?/g;\n  var STRING_CAMELIZE_REGEXP_2 = /(^|\\/)([A-Z])/g;\n\n  var CAMELIZE_CACHE = new _emberMetal.Cache(1000, function (key) {\n    return key.replace(STRING_CAMELIZE_REGEXP_1, function (match, separator, chr) {\n      return chr ? chr.toUpperCase() : '';\n    }).replace(STRING_CAMELIZE_REGEXP_2, function (match /*, separator, chr */) {\n      return match.toLowerCase();\n    });\n  });\n\n  var STRING_CLASSIFY_REGEXP_1 = /^(\\-|_)+(.)?/;\n  var STRING_CLASSIFY_REGEXP_2 = /(.)(\\-|\\_|\\.|\\s)+(.)?/g;\n  var STRING_CLASSIFY_REGEXP_3 = /(^|\\/|\\.)([a-z])/g;\n\n  var CLASSIFY_CACHE = new _emberMetal.Cache(1000, function (str) {\n    var replace1 = function (match, separator, chr) {\n      return chr ? '_' + chr.toUpperCase() : '';\n    };\n    var replace2 = function (match, initialChar, separator, chr) {\n      return initialChar + (chr ? chr.toUpperCase() : '');\n    };\n    var parts = str.split('/');\n    for (var i = 0; i < parts.length; i++) {\n      parts[i] = parts[i].replace(STRING_CLASSIFY_REGEXP_1, replace1).replace(STRING_CLASSIFY_REGEXP_2, replace2);\n    }\n    return parts.join('/').replace(STRING_CLASSIFY_REGEXP_3, function (match /*, separator, chr */) {\n      return match.toUpperCase();\n    });\n  });\n\n  var STRING_UNDERSCORE_REGEXP_1 = /([a-z\\d])([A-Z]+)/g;\n  var STRING_UNDERSCORE_REGEXP_2 = /\\-|\\s+/g;\n\n  var UNDERSCORE_CACHE = new _emberMetal.Cache(1000, function (str) {\n    return str.replace(STRING_UNDERSCORE_REGEXP_1, '$1_$2').replace(STRING_UNDERSCORE_REGEXP_2, '_').toLowerCase();\n  });\n\n  var STRING_CAPITALIZE_REGEXP = /(^|\\/)([a-z\\u00C0-\\u024F])/g;\n\n  var CAPITALIZE_CACHE = new _emberMetal.Cache(1000, function (str) {\n    return str.replace(STRING_CAPITALIZE_REGEXP, function (match /*, separator, chr */) {\n      return match.toUpperCase();\n    });\n  });\n\n  var STRING_DECAMELIZE_REGEXP = /([a-z\\d])([A-Z])/g;\n\n  var DECAMELIZE_CACHE = new _emberMetal.Cache(1000, function (str) {\n    return str.replace(STRING_DECAMELIZE_REGEXP, '$1_$2').toLowerCase();\n  });\n\n  function _fmt(str, formats) {\n    var cachedFormats = formats;\n\n    if (!(0, _utils.isArray)(cachedFormats) || arguments.length > 2) {\n      cachedFormats = new Array(arguments.length - 1);\n\n      for (var i = 1; i < arguments.length; i++) {\n        cachedFormats[i - 1] = arguments[i];\n      }\n    }\n\n    // first, replace any ORDERED replacements.\n    var idx = 0; // the current index for non-numerical replacements\n    return str.replace(/%@([0-9]+)?/g, function (s, argIndex) {\n      argIndex = argIndex ? parseInt(argIndex, 10) - 1 : idx++;\n      s = cachedFormats[argIndex];\n      return s === null ? '(null)' : s === undefined ? '' : (0, _emberUtils.inspect)(s);\n    });\n  }\n\n  function loc(str, formats) {\n    if (!(0, _utils.isArray)(formats) || arguments.length > 2) {\n      formats = Array.prototype.slice.call(arguments, 1);\n    }\n\n    str = (0, _string_registry.get)(str) || str;\n    return _fmt(str, formats);\n  }\n\n  function w(str) {\n    return str.split(/\\s+/);\n  }\n\n  function decamelize(str) {\n    return DECAMELIZE_CACHE.get(str);\n  }\n\n  function dasherize(str) {\n    return STRING_DASHERIZE_CACHE.get(str);\n  }\n\n  function camelize(str) {\n    return CAMELIZE_CACHE.get(str);\n  }\n\n  function classify(str) {\n    return CLASSIFY_CACHE.get(str);\n  }\n\n  function underscore(str) {\n    return UNDERSCORE_CACHE.get(str);\n  }\n\n  function capitalize(str) {\n    return CAPITALIZE_CACHE.get(str);\n  }\n\n  /**\n    Defines string helper methods including string formatting and localization.\n    Unless `EmberENV.EXTEND_PROTOTYPES.String` is `false` these methods will also be\n    added to the `String.prototype` as well.\n  \n    @class String\n    @public\n  */\n  exports.default = {\n    /**\n      Formats the passed string, but first looks up the string in the localized\n      strings hash. This is a convenient way to localize text.\n       Note that it is traditional but not required to prefix localized string\n      keys with an underscore or other character so you can easily identify\n      localized strings.\n       ```javascript\n      import { loc } from '@ember/string';\n       Ember.STRINGS = {\n        '_Hello World': 'Bonjour le monde',\n        '_Hello %@ %@': 'Bonjour %@ %@'\n      };\n       loc(\"_Hello World\");  // 'Bonjour le monde';\n      loc(\"_Hello %@ %@\", [\"John\", \"Smith\"]);  // \"Bonjour John Smith\";\n      ```\n       @method loc\n      @param {String} str The string to format\n      @param {Array} formats Optional array of parameters to interpolate into string.\n      @return {String} formatted string\n      @public\n    */\n    loc: loc,\n\n    /**\n      Splits a string into separate units separated by spaces, eliminating any\n      empty strings in the process. This is a convenience method for split that\n      is mostly useful when applied to the `String.prototype`.\n       ```javascript\n      import { w } from '@ember/string';\n       w(\"alpha beta gamma\").forEach(function(key) {\n        console.log(key);\n      });\n       // > alpha\n      // > beta\n      // > gamma\n      ```\n       @method w\n      @param {String} str The string to split\n      @return {Array} array containing the split strings\n      @public\n    */\n    w: w,\n\n    /**\n      Converts a camelized string into all lower case separated by underscores.\n       ```javascript\n      'innerHTML'.decamelize();           // 'inner_html'\n      'action_name'.decamelize();        // 'action_name'\n      'css-class-name'.decamelize();     // 'css-class-name'\n      'my favorite items'.decamelize();  // 'my favorite items'\n      ```\n       @method decamelize\n      @param {String} str The string to decamelize.\n      @return {String} the decamelized string.\n      @public\n    */\n    decamelize: decamelize,\n\n    /**\n      Replaces underscores, spaces, or camelCase with dashes.\n       ```javascript\n      'innerHTML'.dasherize();          // 'inner-html'\n      'action_name'.dasherize();        // 'action-name'\n      'css-class-name'.dasherize();     // 'css-class-name'\n      'my favorite items'.dasherize();  // 'my-favorite-items'\n      'privateDocs/ownerInvoice'.dasherize(); // 'private-docs/owner-invoice'\n      ```\n       @method dasherize\n      @param {String} str The string to dasherize.\n      @return {String} the dasherized string.\n      @public\n    */\n    dasherize: dasherize,\n\n    /**\n      Returns the lowerCamelCase form of a string.\n       ```javascript\n      'innerHTML'.camelize();          // 'innerHTML'\n      'action_name'.camelize();        // 'actionName'\n      'css-class-name'.camelize();     // 'cssClassName'\n      'my favorite items'.camelize();  // 'myFavoriteItems'\n      'My Favorite Items'.camelize();  // 'myFavoriteItems'\n      'private-docs/owner-invoice'.camelize(); // 'privateDocs/ownerInvoice'\n      ```\n       @method camelize\n      @param {String} str The string to camelize.\n      @return {String} the camelized string.\n      @public\n    */\n    camelize: camelize,\n\n    /**\n      Returns the UpperCamelCase form of a string.\n       ```javascript\n      'innerHTML'.classify();          // 'InnerHTML'\n      'action_name'.classify();        // 'ActionName'\n      'css-class-name'.classify();     // 'CssClassName'\n      'my favorite items'.classify();  // 'MyFavoriteItems'\n      'private-docs/owner-invoice'.classify(); // 'PrivateDocs/OwnerInvoice'\n      ```\n       @method classify\n      @param {String} str the string to classify\n      @return {String} the classified string\n      @public\n    */\n    classify: classify,\n\n    /**\n      More general than decamelize. Returns the lower\\_case\\_and\\_underscored\n      form of a string.\n       ```javascript\n      'innerHTML'.underscore();          // 'inner_html'\n      'action_name'.underscore();        // 'action_name'\n      'css-class-name'.underscore();     // 'css_class_name'\n      'my favorite items'.underscore();  // 'my_favorite_items'\n      'privateDocs/ownerInvoice'.underscore(); // 'private_docs/owner_invoice'\n      ```\n       @method underscore\n      @param {String} str The string to underscore.\n      @return {String} the underscored string.\n      @public\n    */\n    underscore: underscore,\n\n    /**\n      Returns the Capitalized form of a string\n       ```javascript\n      'innerHTML'.capitalize()         // 'InnerHTML'\n      'action_name'.capitalize()       // 'Action_name'\n      'css-class-name'.capitalize()    // 'Css-class-name'\n      'my favorite items'.capitalize() // 'My favorite items'\n      'privateDocs/ownerInvoice'.capitalize(); // 'PrivateDocs/ownerInvoice'\n      ```\n       @method capitalize\n      @param {String} str The string to capitalize.\n      @return {String} The capitalized string.\n      @public\n    */\n    capitalize: capitalize\n  };\n  exports.loc = loc;\n  exports.w = w;\n  exports.decamelize = decamelize;\n  exports.dasherize = dasherize;\n  exports.camelize = camelize;\n  exports.classify = classify;\n  exports.underscore = underscore;\n  exports.capitalize = capitalize;\n});","enifed('ember-runtime/utils', ['exports', 'ember-metal', 'ember-utils', 'ember-runtime/mixins/array', 'ember-runtime/system/object'], function (exports, _emberMetal, _emberUtils, _array, _object) {\n  'use strict';\n\n  exports.isArray = isArray;\n  exports.typeOf = typeOf;\n\n\n  // ........................................\n  // TYPING & ARRAY MESSAGING\n  //\n  var TYPE_MAP = {\n    '[object Boolean]': 'boolean',\n    '[object Number]': 'number',\n    '[object String]': 'string',\n    '[object Function]': 'function',\n    '[object Array]': 'array',\n    '[object Date]': 'date',\n    '[object RegExp]': 'regexp',\n    '[object Object]': 'object',\n    '[object FileList]': 'filelist'\n  };\n\n  var toString = Object.prototype.toString;\n\n  /**\n   @module @ember/array\n  */\n  /**\n    Returns true if the passed object is an array or Array-like.\n  \n    Objects are considered Array-like if any of the following are true:\n  \n      - the object is a native Array\n      - the object has an objectAt property\n      - the object is an Object, and has a length property\n  \n    Unlike `typeOf` this method returns true even if the passed object is\n    not formally an array but appears to be array-like (i.e. implements `Array`)\n  \n    ```javascript\n    import { isArray } from '@ember/array';\n    import ArrayProxy from '@ember/array/proxy';\n  \n    isArray();                                      // false\n    isArray([]);                                    // true\n    isArray(ArrayProxy.create({ content: [] }));    // true\n    ```\n  \n    @method isArray\n    @static\n    @for @ember/array\n    @param {Object} obj The object to test\n    @return {Boolean} true if the passed object is an array or Array-like\n    @public\n  */\n  function isArray(_obj) {\n    var obj = _obj;\n    if (true && _emberUtils.HAS_NATIVE_PROXY && typeof _obj === 'object' && _obj !== null) {\n      var possibleProxyContent = _obj[_emberMetal.PROXY_CONTENT];\n      if (possibleProxyContent !== undefined) {\n        obj = possibleProxyContent;\n      }\n    }\n\n    if (!obj || obj.setInterval) {\n      return false;\n    }\n    if (Array.isArray(obj)) {\n      return true;\n    }\n    if (_array.default.detect(obj)) {\n      return true;\n    }\n\n    var type = typeOf(obj);\n    if ('array' === type) {\n      return true;\n    }\n    var length = obj.length;\n    if (typeof length === 'number' && length === length && 'object' === type) {\n      return true;\n    }\n    return false;\n  }\n  /**\n   @module @ember/utils\n  */\n  /**\n    Returns a consistent type for the passed object.\n  \n    Use this instead of the built-in `typeof` to get the type of an item.\n    It will return the same result across all browsers and includes a bit\n    more detail. Here is what will be returned:\n  \n        | Return Value  | Meaning                                              |\n        |---------------|------------------------------------------------------|\n        | 'string'      | String primitive or String object.                   |\n        | 'number'      | Number primitive or Number object.                   |\n        | 'boolean'     | Boolean primitive or Boolean object.                 |\n        | 'null'        | Null value                                           |\n        | 'undefined'   | Undefined value                                      |\n        | 'function'    | A function                                           |\n        | 'array'       | An instance of Array                                 |\n        | 'regexp'      | An instance of RegExp                                |\n        | 'date'        | An instance of Date                                  |\n        | 'filelist'    | An instance of FileList                              |\n        | 'class'       | An Ember class (created using EmberObject.extend())  |\n        | 'instance'    | An Ember object instance                             |\n        | 'error'       | An instance of the Error object                      |\n        | 'object'      | A JavaScript object not inheriting from EmberObject  |\n  \n    Examples:\n  \n    ```javascript\n    import { A } from '@ember/array';\n    import { typeOf } from '@ember/utils';\n    import EmberObject from '@ember/object';\n  \n    typeOf();                       // 'undefined'\n    typeOf(null);                   // 'null'\n    typeOf(undefined);              // 'undefined'\n    typeOf('michael');              // 'string'\n    typeOf(new String('michael'));  // 'string'\n    typeOf(101);                    // 'number'\n    typeOf(new Number(101));        // 'number'\n    typeOf(true);                   // 'boolean'\n    typeOf(new Boolean(true));      // 'boolean'\n    typeOf(A);                      // 'function'\n    typeOf([1, 2, 90]);             // 'array'\n    typeOf(/abc/);                  // 'regexp'\n    typeOf(new Date());             // 'date'\n    typeOf(event.target.files);     // 'filelist'\n    typeOf(EmberObject.extend());   // 'class'\n    typeOf(EmberObject.create());   // 'instance'\n    typeOf(new Error('teamocil'));  // 'error'\n  \n    // 'normal' JavaScript object\n    typeOf({ a: 'b' });             // 'object'\n    ```\n  \n    @method typeOf\n    @for @ember/utils\n    @param {Object} item the item to check\n    @return {String} the type\n    @public\n    @static\n  */\n  function typeOf(item) {\n    if (item === null) {\n      return 'null';\n    }\n    if (item === undefined) {\n      return 'undefined';\n    }\n    var ret = TYPE_MAP[toString.call(item)] || 'object';\n\n    if (ret === 'function') {\n      if (_object.default.detect(item)) {\n        ret = 'class';\n      }\n    } else if (ret === 'object') {\n      if (item instanceof Error) {\n        ret = 'error';\n      } else if (item instanceof _object.default) {\n        ret = 'instance';\n      } else if (item instanceof Date) {\n        ret = 'date';\n      }\n    }\n\n    return ret;\n  }\n});","enifed('ember-template-compiler/compat', ['ember-metal', 'ember-template-compiler/system/precompile', 'ember-template-compiler/system/compile', 'ember-template-compiler/system/compile-options'], function (_emberMetal, _precompile, _compile, _compileOptions) {\n  'use strict';\n\n  var EmberHandlebars = _emberMetal.default.Handlebars = _emberMetal.default.Handlebars || {}; // reexports\n\n  var EmberHTMLBars = _emberMetal.default.HTMLBars = _emberMetal.default.HTMLBars || {};\n\n  EmberHTMLBars.precompile = EmberHandlebars.precompile = _precompile.default;\n  EmberHTMLBars.compile = EmberHandlebars.compile = _compile.default;\n  EmberHTMLBars.registerPlugin = _compileOptions.registerPlugin;\n});","enifed('ember-template-compiler/index', ['exports', 'ember-template-compiler/system/precompile', 'ember-template-compiler/system/compile', 'ember-template-compiler/system/compile-options', 'ember-template-compiler/plugins', 'ember-metal', 'ember/features', 'ember-environment', 'ember/version', 'ember-template-compiler/compat', 'ember-template-compiler/system/bootstrap'], function (exports, _precompile, _compile, _compileOptions, _plugins, _emberMetal, _features, _emberEnvironment, _version) {\n  'use strict';\n\n  exports.defaultPlugins = exports.unregisterPlugin = exports.registerPlugin = exports.compileOptions = exports.compile = exports.precompile = exports._Ember = undefined;\n  Object.defineProperty(exports, 'precompile', {\n    enumerable: true,\n    get: function () {\n      return _precompile.default;\n    }\n  });\n  Object.defineProperty(exports, 'compile', {\n    enumerable: true,\n    get: function () {\n      return _compile.default;\n    }\n  });\n  Object.defineProperty(exports, 'compileOptions', {\n    enumerable: true,\n    get: function () {\n      return _compileOptions.default;\n    }\n  });\n  Object.defineProperty(exports, 'registerPlugin', {\n    enumerable: true,\n    get: function () {\n      return _compileOptions.registerPlugin;\n    }\n  });\n  Object.defineProperty(exports, 'unregisterPlugin', {\n    enumerable: true,\n    get: function () {\n      return _compileOptions.unregisterPlugin;\n    }\n  });\n  Object.defineProperty(exports, 'defaultPlugins', {\n    enumerable: true,\n    get: function () {\n      return _plugins.default;\n    }\n  });\n\n\n  // private API used by ember-cli-htmlbars to setup ENV and FEATURES\n  if (!_emberMetal.default.ENV) {\n    _emberMetal.default.ENV = _emberEnvironment.ENV;\n  }\n  if (!_emberMetal.default.FEATURES) {\n    _emberMetal.default.FEATURES = _features.FEATURES;\n  }\n  if (!_emberMetal.default.VERSION) {\n    _emberMetal.default.VERSION = _version.default;\n  }\n\n  exports._Ember = _emberMetal.default;\n});","enifed('ember-template-compiler/plugins/assert-if-helper-without-arguments', ['exports', 'ember-debug', 'ember-template-compiler/system/calculate-location-display'], function (exports, _emberDebug, _calculateLocationDisplay) {\n  'use strict';\n\n  exports.default = assertIfHelperWithoutArguments;\n  function assertIfHelperWithoutArguments(env) {\n    var moduleName = env.meta.moduleName;\n\n\n    return {\n      name: 'assert-if-helper-without-arguments',\n\n      visitor: {\n        BlockStatement: function (node) {\n          if (isInvalidBlockIf(node)) {\n            (true && !(false) && (0, _emberDebug.assert)(blockAssertMessage(node.path.original) + ' ' + (0, _calculateLocationDisplay.default)(moduleName, node.loc)));\n          }\n        },\n        MustacheStatement: function (node) {\n          if (isInvalidInlineIf(node)) {\n            (true && !(false) && (0, _emberDebug.assert)(inlineAssertMessage(node.path.original) + ' ' + (0, _calculateLocationDisplay.default)(moduleName, node.loc)));\n          }\n        },\n        SubExpression: function (node) {\n          if (isInvalidInlineIf(node)) {\n            (true && !(false) && (0, _emberDebug.assert)(inlineAssertMessage(node.path.original) + ' ' + (0, _calculateLocationDisplay.default)(moduleName, node.loc)));\n          }\n        }\n      }\n    };\n  }\n\n  function blockAssertMessage(original) {\n    return '#' + original + ' requires a single argument.';\n  }\n\n  function inlineAssertMessage(original) {\n    return 'The inline form of the \\'' + original + '\\' helper expects two or three arguments.';\n  }\n\n  function isInvalidInlineIf(node) {\n    return node.path.original === 'if' && (!node.params || node.params.length < 2 || node.params.length > 3);\n  }\n\n  function isInvalidBlockIf(node) {\n    return node.path.original === 'if' && (!node.params || node.params.length !== 1);\n  }\n});","enifed('ember-template-compiler/plugins/assert-input-helper-without-block', ['exports', 'ember-debug', 'ember-template-compiler/system/calculate-location-display'], function (exports, _emberDebug, _calculateLocationDisplay) {\n  'use strict';\n\n  exports.default = errorOnInputWithContent;\n  function errorOnInputWithContent(env) {\n    var moduleName = env.meta.moduleName;\n\n\n    return {\n      name: 'assert-input-helper-without-block',\n\n      visitor: {\n        BlockStatement: function (node) {\n          if (node.path.original !== 'input') {\n            return;\n          }\n\n          (true && !(false) && (0, _emberDebug.assert)(assertMessage(moduleName, node)));\n        }\n      }\n    };\n  }\n\n  function assertMessage(moduleName, node) {\n    var sourceInformation = (0, _calculateLocationDisplay.default)(moduleName, node.loc);\n\n    return 'The {{input}} helper cannot be used in block form. ' + sourceInformation;\n  }\n});","enifed('ember-template-compiler/plugins/assert-reserved-named-arguments', ['exports', 'ember-debug', 'ember/features', 'ember-template-compiler/system/calculate-location-display'], function (exports, _emberDebug, _features, _calculateLocationDisplay) {\n  'use strict';\n\n  exports.default = assertReservedNamedArguments;\n\n\n  var RESERVED = ['@arguments', '@args', '@block', '@else'];\n\n  var isReserved = void 0,\n      assertMessage = void 0;\n\n  function assertReservedNamedArguments(env) {\n    var moduleName = env.meta.moduleName;\n\n\n    return {\n      name: 'assert-reserved-named-arguments',\n\n      visitor: {\n        PathExpression: function (_ref) {\n          var original = _ref.original,\n              loc = _ref.loc;\n\n          if (isReserved(original)) {\n            (true && !(false) && (0, _emberDebug.assert)(assertMessage(original) + ' ' + (0, _calculateLocationDisplay.default)(moduleName, loc)));\n          }\n        }\n      }\n    };\n  }\n\n  if (_features.EMBER_GLIMMER_NAMED_ARGUMENTS) {\n    isReserved = function (name) {\n      return RESERVED.indexOf(name) !== -1 || name.match(/^@[^a-z]/);\n    };\n    assertMessage = function (name) {\n      return '\\'' + name + '\\' is reserved.';\n    };\n  } else {\n    isReserved = function (name) {\n      return name[0] === '@';\n    };\n    assertMessage = function (name) {\n      return '\\'' + name + '\\' is not a valid path.';\n    };\n  }\n});","enifed('ember-template-compiler/plugins/deprecate-render-model', ['exports', 'ember-debug', 'ember-template-compiler/system/calculate-location-display'], function (exports, _emberDebug, _calculateLocationDisplay) {\n  'use strict';\n\n  exports.default = deprecateRenderModel;\n\n\n  // Remove after 3.4 once _ENABLE_RENDER_SUPPORT flag is no longer needed.\n  function deprecateRenderModel(env) {\n    var moduleName = env.meta.moduleName;\n\n\n    return {\n      name: 'deprecate-render-model',\n\n      visitor: {\n        MustacheStatement: function (node) {\n          if (node.path.original === 'render' && node.params.length > 1) {\n            node.params.forEach(function (param) {\n              if (param.type !== 'PathExpression') {\n                return;\n              }\n\n              (true && !(false) && (0, _emberDebug.deprecate)(deprecationMessage(moduleName, node, param), false, {\n                id: 'ember-template-compiler.deprecate-render-model',\n                until: '3.0.0',\n                url: 'https://emberjs.com/deprecations/v2.x#toc_model-param-in-code-render-code-helper'\n              }));\n            });\n          }\n        }\n      }\n    };\n  }\n\n  function deprecationMessage(moduleName, node, param) {\n    var sourceInformation = (0, _calculateLocationDisplay.default)(moduleName, node.loc);\n    var componentName = node.params[0].original;\n    var modelName = param.original;\n    var original = '{{render \"' + componentName + '\" ' + modelName + '}}';\n    var preferred = '{{' + componentName + ' model=' + modelName + '}}';\n\n    return 'Please refactor `' + original + '` to a component and invoke via' + (' `' + preferred + '`. ' + sourceInformation);\n  }\n});","enifed('ember-template-compiler/plugins/deprecate-render', ['exports', 'ember-debug', 'ember-template-compiler/system/calculate-location-display'], function (exports, _emberDebug, _calculateLocationDisplay) {\n  'use strict';\n\n  exports.default = deprecateRender;\n\n\n  // Remove after 3.4 once _ENABLE_RENDER_SUPPORT flag is no longer needed.\n  function deprecateRender(env) {\n    var moduleName = env.meta.moduleName;\n\n\n    return {\n      name: 'deprecate-render',\n\n      visitor: {\n        MustacheStatement: function (node) {\n          if (node.path.original !== 'render') {\n            return;\n          }\n          if (node.params.length !== 1) {\n            return;\n          }\n\n          each(node.params, function (param) {\n            if (param.type !== 'StringLiteral') {\n              return;\n            }\n\n            (true && !(false) && (0, _emberDebug.deprecate)(deprecationMessage(moduleName, node), false, {\n              id: 'ember-template-compiler.deprecate-render',\n              until: '3.0.0',\n              url: 'https://emberjs.com/deprecations/v2.x#toc_code-render-code-helper'\n            }));\n          });\n        }\n      }\n    };\n  }\n\n  function each(list, callback) {\n    for (var i = 0, l = list.length; i < l; i++) {\n      callback(list[i]);\n    }\n  }\n\n  function deprecationMessage(moduleName, node) {\n    var sourceInformation = (0, _calculateLocationDisplay.default)(moduleName, node.loc);\n    var componentName = node.params[0].original;\n    var original = '{{render \"' + componentName + '\"}}';\n    var preferred = '{{' + componentName + '}}';\n\n    return 'Please refactor `' + original + '` to a component and invoke via' + (' `' + preferred + '`. ' + sourceInformation);\n  }\n});","enifed('ember-template-compiler/plugins/extract-pragma-tag', ['exports'], function (exports) {\n  'use strict';\n\n  exports.default = extractPragmaTag;\n  var PRAGMA_TAG = 'use-component-manager';\n\n  function extractPragmaTag(env) {\n    var meta = env.meta;\n\n\n    return {\n      name: 'exract-pragma-tag',\n\n      visitor: {\n        MustacheStatement: {\n          enter: function (node) {\n            if (node.path.type === 'PathExpression' && node.path.original === PRAGMA_TAG) {\n              meta.managerId = node.params[0].value;\n              return null;\n            }\n          }\n        }\n      }\n    };\n  }\n});","enifed('ember-template-compiler/plugins/index', ['exports', 'ember-template-compiler/plugins/transform-old-binding-syntax', 'ember-template-compiler/plugins/transform-angle-bracket-components', 'ember-template-compiler/plugins/transform-top-level-components', 'ember-template-compiler/plugins/transform-inline-link-to', 'ember-template-compiler/plugins/transform-old-class-binding-syntax', 'ember-template-compiler/plugins/transform-quoted-bindings-into-just-bindings', 'ember-template-compiler/plugins/deprecate-render-model', 'ember-template-compiler/plugins/deprecate-render', 'ember-template-compiler/plugins/assert-reserved-named-arguments', 'ember-template-compiler/plugins/transform-action-syntax', 'ember-template-compiler/plugins/transform-input-type-syntax', 'ember-template-compiler/plugins/transform-attrs-into-args', 'ember-template-compiler/plugins/transform-each-in-into-each', 'ember-template-compiler/plugins/transform-has-block-syntax', 'ember-template-compiler/plugins/transform-dot-component-invocation', 'ember-template-compiler/plugins/extract-pragma-tag', 'ember-template-compiler/plugins/assert-input-helper-without-block', 'ember-template-compiler/plugins/transform-in-element', 'ember/features', 'ember-template-compiler/plugins/assert-if-helper-without-arguments'], function (exports, _transformOldBindingSyntax, _transformAngleBracketComponents, _transformTopLevelComponents, _transformInlineLinkTo, _transformOldClassBindingSyntax, _transformQuotedBindingsIntoJustBindings, _deprecateRenderModel, _deprecateRender, _assertReservedNamedArguments, _transformActionSyntax, _transformInputTypeSyntax, _transformAttrsIntoArgs, _transformEachInIntoEach, _transformHasBlockSyntax, _transformDotComponentInvocation, _extractPragmaTag, _assertInputHelperWithoutBlock, _transformInElement, _features, _assertIfHelperWithoutArguments) {\n  'use strict';\n\n  var transforms = [_transformDotComponentInvocation.default, _transformOldBindingSyntax.default, _transformAngleBracketComponents.default, _transformTopLevelComponents.default, _transformInlineLinkTo.default, _transformOldClassBindingSyntax.default, _transformQuotedBindingsIntoJustBindings.default, _deprecateRenderModel.default, _deprecateRender.default, _assertReservedNamedArguments.default, _transformActionSyntax.default, _transformInputTypeSyntax.default, _transformAttrsIntoArgs.default, _transformEachInIntoEach.default, _transformHasBlockSyntax.default, _assertInputHelperWithoutBlock.default, _transformInElement.default, _assertIfHelperWithoutArguments.default];\n\n  if (_features.GLIMMER_CUSTOM_COMPONENT_MANAGER) {\n    transforms.push(_extractPragmaTag.default);\n  }\n\n  exports.default = Object.freeze(transforms);\n});","enifed('ember-template-compiler/plugins/transform-action-syntax', ['exports'], function (exports) {\n  'use strict';\n\n  exports.default = transformActionSyntax;\n  /**\n   @module ember\n  */\n\n  /**\n    A Glimmer2 AST transformation that replaces all instances of\n  \n    ```handlebars\n   <button {{action 'foo'}}>\n   <button onblur={{action 'foo'}}>\n   <button onblur={{action (action 'foo') 'bar'}}>\n    ```\n  \n    with\n  \n    ```handlebars\n   <button {{action this 'foo'}}>\n   <button onblur={{action this 'foo'}}>\n   <button onblur={{action this (action this 'foo') 'bar'}}>\n    ```\n  \n    @private\n    @class TransformActionSyntax\n  */\n\n  function transformActionSyntax(_ref) {\n    var syntax = _ref.syntax;\n    var b = syntax.builders;\n\n\n    return {\n      name: 'transform-action-syntax',\n\n      visitor: {\n        ElementModifierStatement: function (node) {\n          if (isAction(node)) {\n            insertThisAsFirstParam(node, b);\n          }\n        },\n        MustacheStatement: function (node) {\n          if (isAction(node)) {\n            insertThisAsFirstParam(node, b);\n          }\n        },\n        SubExpression: function (node) {\n          if (isAction(node)) {\n            insertThisAsFirstParam(node, b);\n          }\n        }\n      }\n    };\n  }\n\n  function isAction(node) {\n    return node.path.original === 'action';\n  }\n\n  function insertThisAsFirstParam(node, builders) {\n    node.params.unshift(builders.path('this'));\n  }\n});","enifed('ember-template-compiler/plugins/transform-angle-bracket-components', ['exports'], function (exports) {\n  'use strict';\n\n  exports.default = transformAngleBracketComponents;\n  function transformAngleBracketComponents() /* env */{\n    return {\n      name: 'transform-angle-bracket-components',\n\n      visitor: {\n        ComponentNode: function (node) {\n          node.tag = '<' + node.tag + '>';\n        }\n      }\n    };\n  }\n});","enifed('ember-template-compiler/plugins/transform-attrs-into-args', ['exports'], function (exports) {\n  'use strict';\n\n  exports.default = transformAttrsIntoArgs;\n  /**\n   @module ember\n  */\n\n  /**\n    A Glimmer2 AST transformation that replaces all instances of\n  \n    ```handlebars\n   {{attrs.foo.bar}}\n    ```\n  \n    to\n  \n    ```handlebars\n   {{@foo.bar}}\n    ```\n  \n    as well as `{{#if attrs.foo}}`, `{{deeply (nested attrs.foobar.baz)}}`,\n    `{{this.attrs.foo}}` etc\n  \n    @private\n    @class TransformAttrsToProps\n  */\n\n  function transformAttrsIntoArgs(env) {\n    var b = env.syntax.builders;\n\n\n    var stack = [[]];\n\n    return {\n      name: 'transform-attrs-into-args',\n\n      visitor: {\n        Program: {\n          enter: function (node) {\n            var parent = stack[stack.length - 1];\n            stack.push(parent.concat(node.blockParams));\n          },\n          exit: function () {\n            stack.pop();\n          }\n        },\n\n        PathExpression: function (node) {\n          if (isAttrs(node, stack[stack.length - 1])) {\n            var path = b.path(node.original.substr(6));\n            path.original = '@' + path.original;\n            path.data = true;\n            return path;\n          }\n        }\n      }\n    };\n  }\n\n  function isAttrs(node, symbols) {\n    var name = node.parts[0];\n\n    if (symbols.indexOf(name) !== -1) {\n      return false;\n    }\n\n    if (name === 'attrs') {\n      if (node.this === true) {\n        node.parts.shift();\n        node.original = node.original.slice(5);\n      }\n\n      return true;\n    }\n\n    return false;\n  }\n});","enifed('ember-template-compiler/plugins/transform-dot-component-invocation', ['exports'], function (exports) {\n  'use strict';\n\n  exports.default = transformDotComponentInvocation;\n\n  /**\n    Transforms dot invocation of closure components to be wrapped\n    with the component helper. This allows for a more static invocation\n    of the component.\n  \n    ```handlebars\n   {{#my-component as |comps|}}\n    {{comp.dropdown isOpen=false}}\n   {{/my-component}}\n    ```\n  \n    with\n  \n    ```handlebars\n    {{#my-component as |comps|}}\n      {{component comp.dropdown isOpen=false}}\n    {{/my-component}}\n    ```\n    and\n  \n    ```handlebars\n   {{#my-component as |comps|}}\n    {{comp.dropdown isOpen}}\n   {{/my-component}}\n    ```\n  \n    with\n  \n    ```handlebars\n    {{#my-component as |comps|}}\n      {{component comp.dropdown isOpen}}\n    {{/my-component}}\n    ```\n  \n    and\n  \n    ```handlebars\n    {{#my-component as |comps|}}\n      {{#comp.dropdown}}Open{{/comp.dropdown}}\n    {{/my-component}}\n    ```\n  \n    with\n  \n    ```handlebars\n    {{#my-component as |comps|}}\n      {{#component comp.dropdown}}Open{{/component}}\n    {{/my-component}}\n    ```\n  \n    @private\n    @class TransFormDotComponentInvocation\n  */\n  function transformDotComponentInvocation(env) {\n    var b = env.syntax.builders;\n\n\n    return {\n      name: 'transform-dot-component-invocation',\n\n      visitor: {\n        MustacheStatement: function (node) {\n          if (isInlineInvocation(node.path, node.params, node.hash)) {\n            wrapInComponent(node, b);\n          }\n        },\n        BlockStatement: function (node) {\n          if (isMultipartPath(node.path)) {\n            wrapInComponent(node, b);\n          }\n        }\n      }\n    };\n  }\n\n  function isMultipartPath(path) {\n    return path.parts && path.parts.length > 1;\n  }\n\n  function isInlineInvocation(path, params, hash) {\n    if (isMultipartPath(path)) {\n      if (params.length > 0 || hash.pairs.length > 0) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  function wrapInComponent(node, builder) {\n    var component = node.path;\n    var componentHelper = builder.path('component');\n    node.path = componentHelper;\n    node.params.unshift(component);\n  }\n});","enifed('ember-template-compiler/plugins/transform-each-in-into-each', ['exports'], function (exports) {\n  'use strict';\n\n  exports.default = transformEachInIntoEach;\n  /**\n   @module ember\n  */\n\n  /**\n    A Glimmer2 AST transformation that replaces all instances of\n  \n    ```handlebars\n   {{#each-in iterableThing as |key value|}}\n    ```\n  \n    with\n  \n    ```handlebars\n   {{#each (-each-in iterableThing) as |key value|}}\n    ```\n  \n    @private\n    @class TransformHasBlockSyntax\n  */\n  function transformEachInIntoEach(env) {\n    var b = env.syntax.builders;\n\n\n    return {\n      name: 'transform-each-in-into-each',\n\n      visitor: {\n        BlockStatement: function (node) {\n          if (node.path.original === 'each-in') {\n            node.params[0] = b.sexpr(b.path('-each-in'), [node.params[0]]);\n            return b.block(b.path('each'), node.params, node.hash, node.program, node.inverse, node.loc);\n          }\n        }\n      }\n    };\n  }\n});","enifed('ember-template-compiler/plugins/transform-has-block-syntax', ['exports'], function (exports) {\n  'use strict';\n\n  exports.default = transformHasBlockSyntax;\n  /**\n   @module ember\n  */\n\n  /**\n    A Glimmer2 AST transformation that replaces all instances of\n  \n    ```handlebars\n   {{hasBlock}}\n    ```\n  \n    with\n  \n    ```handlebars\n   {{has-block}}\n    ```\n  \n    @private\n    @class TransformHasBlockSyntax\n  */\n\n  var TRANSFORMATIONS = {\n    hasBlock: 'has-block',\n    hasBlockParams: 'has-block-params'\n  };\n\n  function transformHasBlockSyntax(env) {\n    var b = env.syntax.builders;\n\n\n    return {\n      name: 'transform-has-block-syntax',\n\n      visitor: {\n        PathExpression: function (node) {\n          if (TRANSFORMATIONS[node.original]) {\n            return b.sexpr(b.path(TRANSFORMATIONS[node.original]));\n          }\n        },\n        MustacheStatement: function (node) {\n          if (TRANSFORMATIONS[node.path.original]) {\n            return b.mustache(b.path(TRANSFORMATIONS[node.path.original]), node.params, node.hash, null, node.loc);\n          }\n        },\n        SubExpression: function (node) {\n          if (TRANSFORMATIONS[node.path.original]) {\n            return b.sexpr(b.path(TRANSFORMATIONS[node.path.original]), node.params, node.hash);\n          }\n        }\n      }\n    };\n  }\n});","enifed('ember-template-compiler/plugins/transform-in-element', ['exports', 'ember-debug', 'ember-template-compiler/system/calculate-location-display'], function (exports, _emberDebug, _calculateLocationDisplay) {\n  'use strict';\n\n  exports.default = transformInElement;\n\n\n  /**\n   @module ember\n  */\n\n  /**\n    glimmer-vm has made the `in-element` API public from its perspective (in\n    https://github.com/glimmerjs/glimmer-vm/pull/619) so in glimmer-vm the\n    correct keyword to use is `in-element`, however Ember is still working through\n    its form of `in-element` (see https://github.com/emberjs/rfcs/pull/287).\n  \n    There are enough usages of the pre-existing private API (`{{-in-element`) in\n    the wild that we need to transform `{{-in-element` into `{{in-element` during\n    template transpilation, but since RFC#287 is not landed and enabled by default we _also_ need\n    to prevent folks from starting to use `{{in-element` \"for realz\".\n  \n  \n    Tranforms:\n  \n    ```handlebars\n    {{#-in-element someElement}}\n      {{modal-display text=text}}\n    {{/-in-element}}\n    ```\n  \n    into:\n  \n    ```handlebars\n    {{#in-element someElement}}\n      {{modal-display text=text}}\n    {{/in-element}}\n    ```\n  \n    And issues a build time assertion for:\n  \n    ```handlebars\n    {{#in-element someElement}}\n      {{modal-display text=text}}\n    {{/in-element}}\n    ```\n  \n    @private\n    @class TransformHasBlockSyntax\n  */\n  function transformInElement(env) {\n    var moduleName = env.meta.moduleName;\n    var b = env.syntax.builders;\n\n    var cursorCount = 0;\n\n    return {\n      name: 'transform-in-element',\n\n      visitor: {\n        BlockStatement: function (node) {\n          if (node.path.original === 'in-element') {\n            (true && !(false) && (0, _emberDebug.assert)(assertMessage(moduleName, node)));\n          } else if (node.path.original === '-in-element') {\n            node.path.original = 'in-element';\n            node.path.parts = ['in-element'];\n\n            // replicate special hash arguments added here:\n            // https://github.com/glimmerjs/glimmer-vm/blob/ba9b37d44b85fa1385eeeea71910ff5798198c8e/packages/%40glimmer/syntax/lib/parser/handlebars-node-visitors.ts#L340-L363\n            var hasNextSibling = false;\n            var hash = node.hash;\n            hash.pairs.forEach(function (pair) {\n              if (pair.key === 'nextSibling') {\n                hasNextSibling = true;\n              }\n            });\n\n            var guid = b.literal('StringLiteral', '%cursor:' + cursorCount++ + '%');\n            var guidPair = b.pair('guid', guid);\n            hash.pairs.unshift(guidPair);\n\n            if (!hasNextSibling) {\n              var nullLiteral = b.literal('NullLiteral', null);\n              var nextSibling = b.pair('nextSibling', nullLiteral);\n              hash.pairs.push(nextSibling);\n            }\n          }\n        }\n      }\n    };\n  }\n\n  function assertMessage(moduleName, node) {\n    var sourceInformation = (0, _calculateLocationDisplay.default)(moduleName, node.loc);\n\n    return 'The {{in-element}} helper cannot be used. ' + sourceInformation;\n  }\n});","enifed('ember-template-compiler/plugins/transform-inline-link-to', ['exports'], function (exports) {\n  'use strict';\n\n  exports.default = transformInlineLinkTo;\n  function buildProgram(b, content, loc) {\n    return b.program([buildStatement(b, content, loc)], null, loc);\n  }\n\n  function buildStatement(b, content, loc) {\n    switch (content.type) {\n      case 'PathExpression':\n        return b.mustache(content, null, null, null, loc);\n\n      case 'SubExpression':\n        return b.mustache(content.path, content.params, content.hash, null, loc);\n\n      // The default case handles literals.\n      default:\n        return b.text('' + content.value, loc);\n    }\n  }\n\n  function unsafeHtml(b, expr) {\n    return b.sexpr('-html-safe', [expr]);\n  }\n\n  function transformInlineLinkTo(env) {\n    var b = env.syntax.builders;\n\n\n    return {\n      name: 'transform-inline-link-to',\n\n      visitor: {\n        MustacheStatement: function (node) {\n          if (node.path.original === 'link-to') {\n            var content = node.escaped ? node.params[0] : unsafeHtml(b, node.params[0]);\n            return b.block('link-to', node.params.slice(1), node.hash, buildProgram(b, content, node.loc), null, node.loc);\n          }\n        }\n      }\n    };\n  }\n});","enifed('ember-template-compiler/plugins/transform-input-type-syntax', ['exports'], function (exports) {\n  'use strict';\n\n  exports.default = transformInputTypeSyntax;\n  /**\n   @module ember\n  */\n\n  /**\n    A Glimmer2 AST transformation that replaces all instances of\n  \n    ```handlebars\n   {{input type=boundType}}\n    ```\n  \n    with\n  \n    ```handlebars\n   {{input (-input-type boundType) type=boundType}}\n    ```\n  \n    Note that the type parameters is not removed as the -input-type helpers\n    is only used to select the component class. The component still needs\n    the type parameter to function.\n  \n    @private\n    @class TransformInputTypeSyntax\n  */\n\n  function transformInputTypeSyntax(env) {\n    var b = env.syntax.builders;\n\n    return {\n      name: 'transform-input-type-syntax',\n\n      visitor: {\n        MustacheStatement: function (node) {\n          if (isInput(node)) {\n            insertTypeHelperParameter(node, b);\n          }\n        }\n      }\n    };\n  }\n\n  function isInput(node) {\n    return node.path.original === 'input';\n  }\n\n  function insertTypeHelperParameter(node, builders) {\n    var pairs = node.hash.pairs;\n    var pair = null;\n    for (var i = 0; i < pairs.length; i++) {\n      if (pairs[i].key === 'type') {\n        pair = pairs[i];\n        break;\n      }\n    }\n    if (pair && pair.value.type !== 'StringLiteral') {\n      node.params.unshift(builders.sexpr('-input-type', [pair.value], null, pair.loc));\n    }\n  }\n});","enifed('ember-template-compiler/plugins/transform-old-binding-syntax', ['exports', 'ember-debug', 'ember-template-compiler/system/calculate-location-display'], function (exports, _emberDebug, _calculateLocationDisplay) {\n  'use strict';\n\n  exports.default = transformOldBindingSyntax;\n  function transformOldBindingSyntax(env) {\n    var moduleName = env.meta.moduleName;\n\n    var b = env.syntax.builders;\n\n    return {\n      name: 'transform-old-binding-syntax',\n\n      visitor: {\n        BlockStatement: function (node) {\n          processHash(b, node, moduleName);\n        },\n        MustacheStatement: function (node) {\n          processHash(b, node, moduleName);\n        }\n      }\n    };\n  }\n\n  function processHash(b, node, moduleName) {\n    for (var i = 0; i < node.hash.pairs.length; i++) {\n      var pair = node.hash.pairs[i];\n      var key = pair.key,\n          value = pair.value;\n\n\n      var sourceInformation = (0, _calculateLocationDisplay.default)(moduleName, pair.loc);\n\n      if (key === 'classBinding') {\n        return;\n      }\n\n      (true && !(key !== 'attributeBindings') && (0, _emberDebug.assert)('Setting \\'attributeBindings\\' via template helpers is not allowed ' + sourceInformation, key !== 'attributeBindings'));\n\n\n      if (key.substr(-7) === 'Binding') {\n        var newKey = key.slice(0, -7);\n\n        (true && !(false) && (0, _emberDebug.deprecate)('You\\'re using legacy binding syntax: ' + key + '=' + exprToString(value) + ' ' + sourceInformation + '. Please replace with ' + newKey + '=' + value.original, false, { id: 'ember-template-compiler.transform-old-binding-syntax', until: '3.0.0' }));\n\n\n        pair.key = newKey;\n        if (value.type === 'StringLiteral') {\n          pair.value = b.path(value.original);\n        }\n      }\n    }\n  }\n\n  function exprToString(expr) {\n    switch (expr.type) {\n      case 'StringLiteral':\n        return '\"' + expr.original + '\"';\n      case 'PathExpression':\n        return expr.original;\n    }\n  }\n});","enifed('ember-template-compiler/plugins/transform-old-class-binding-syntax', ['exports'], function (exports) {\n  'use strict';\n\n  exports.default = transformOldClassBindingSyntax;\n  function transformOldClassBindingSyntax(env) {\n    var b = env.syntax.builders;\n\n    return {\n      name: 'transform-old-class-binding-syntax',\n\n      visitor: {\n        MustacheStatement: function (node) {\n          process(b, node);\n        },\n        BlockStatement: function (node) {\n          process(b, node);\n        }\n      }\n    };\n  }\n\n  function process(b, node) {\n    var allOfTheMicrosyntaxes = [];\n    var allOfTheMicrosyntaxIndexes = [];\n    var classPair = void 0;\n\n    each(node.hash.pairs, function (pair, index) {\n      var key = pair.key;\n\n\n      if (key === 'classBinding' || key === 'classNameBindings') {\n        allOfTheMicrosyntaxIndexes.push(index);\n        allOfTheMicrosyntaxes.push(pair);\n      } else if (key === 'class') {\n        classPair = pair;\n      }\n    });\n\n    if (allOfTheMicrosyntaxes.length === 0) {\n      return;\n    }\n\n    var classValue = [];\n\n    if (classPair) {\n      classValue.push(classPair.value);\n      classValue.push(b.string(' '));\n    } else {\n      classPair = b.pair('class', null);\n      node.hash.pairs.push(classPair);\n    }\n\n    each(allOfTheMicrosyntaxIndexes, function (index) {\n      node.hash.pairs.splice(index, 1);\n    });\n\n    each(allOfTheMicrosyntaxes, function (_ref) {\n      var value = _ref.value;\n\n      var sexprs = [];\n      // TODO: add helpful deprecation when both `classNames` and `classNameBindings` can\n      // be removed.\n\n      if (value.type === 'StringLiteral') {\n        var microsyntax = parseMicrosyntax(value.original);\n\n        buildSexprs(microsyntax, sexprs, b);\n\n        classValue.push.apply(classValue, sexprs);\n      }\n    });\n\n    var hash = b.hash();\n    classPair.value = b.sexpr(b.path('concat'), classValue, hash);\n  }\n\n  function buildSexprs(microsyntax, sexprs, b) {\n    for (var i = 0; i < microsyntax.length; i++) {\n      var _microsyntax$i = microsyntax[i],\n          propName = _microsyntax$i[0],\n          activeClass = _microsyntax$i[1],\n          inactiveClass = _microsyntax$i[2];\n\n      var sexpr = void 0;\n\n      // :my-class-name microsyntax for static values\n      if (propName === '') {\n        sexpr = b.string(activeClass);\n      } else {\n        var params = [b.path(propName)];\n\n        if (activeClass || activeClass === '') {\n          params.push(b.string(activeClass));\n        } else {\n          var sexprParams = [b.string(propName), b.path(propName)];\n\n          var hash = b.hash();\n          if (activeClass !== undefined) {\n            hash.pairs.push(b.pair('activeClass', b.string(activeClass)));\n          }\n\n          if (inactiveClass !== undefined) {\n            hash.pairs.push(b.pair('inactiveClass', b.string(inactiveClass)));\n          }\n\n          params.push(b.sexpr(b.path('-normalize-class'), sexprParams, hash));\n        }\n\n        if (inactiveClass || inactiveClass === '') {\n          params.push(b.string(inactiveClass));\n        }\n\n        sexpr = b.sexpr(b.path('if'), params);\n      }\n\n      sexprs.push(sexpr);\n      sexprs.push(b.string(' '));\n    }\n  }\n\n  function each(list, callback) {\n    for (var i = 0; i < list.length; i++) {\n      callback(list[i], i);\n    }\n  }\n\n  function parseMicrosyntax(string) {\n    var segments = string.split(' ');\n\n    for (var i = 0; i < segments.length; i++) {\n      segments[i] = segments[i].split(':');\n    }\n\n    return segments;\n  }\n});","enifed('ember-template-compiler/plugins/transform-quoted-bindings-into-just-bindings', ['exports'], function (exports) {\n  'use strict';\n\n  exports.default = transformQuotedBindingsIntoJustBindings;\n  function transformQuotedBindingsIntoJustBindings() /* env */{\n\n    return {\n      name: 'transform-quoted-bindings-into-just-bindings',\n\n      visitor: {\n        ElementNode: function (node) {\n          var styleAttr = getStyleAttr(node);\n\n          if (!validStyleAttr(styleAttr)) {\n            return;\n          }\n\n          styleAttr.value = styleAttr.value.parts[0];\n        }\n      }\n    };\n  }\n\n  function validStyleAttr(attr) {\n    if (!attr) {\n      return false;\n    }\n\n    var value = attr.value;\n\n    if (!value || value.type !== 'ConcatStatement' || value.parts.length !== 1) {\n      return false;\n    }\n\n    var onlyPart = value.parts[0];\n\n    return onlyPart.type === 'MustacheStatement';\n  }\n\n  function getStyleAttr(node) {\n    var attributes = node.attributes;\n\n    for (var i = 0; i < attributes.length; i++) {\n      if (attributes[i].name === 'style') {\n        return attributes[i];\n      }\n    }\n  }\n});","enifed('ember-template-compiler/plugins/transform-top-level-components', ['exports'], function (exports) {\n  'use strict';\n\n  exports.default = transformTopLevelComponent;\n  function transformTopLevelComponent() /* env */{\n    return {\n      name: 'transform-top-level-component',\n\n      visitor: {\n        Program: function (node) {\n          hasSingleComponentNode(node, function (component) {\n            component.tag = '@' + component.tag;\n            component.isStatic = true;\n          });\n        }\n      }\n    };\n  }\n\n  function hasSingleComponentNode(program, componentCallback) {\n    var loc = program.loc,\n        body = program.body;\n\n    if (!loc || loc.start.line !== 1 || loc.start.column !== 0) {\n      return;\n    }\n\n    var lastComponentNode = void 0;\n    var nodeCount = 0;\n\n    for (var i = 0; i < body.length; i++) {\n      var curr = body[i];\n\n      // text node with whitespace only\n      if (curr.type === 'TextNode' && /^[\\s]*$/.test(curr.chars)) {\n        continue;\n      }\n\n      // has multiple root elements if we've been here before\n      if (nodeCount++ > 0) {\n        return false;\n      }\n\n      if (curr.type === 'ComponentNode' || curr.type === 'ElementNode') {\n        lastComponentNode = curr;\n      }\n    }\n\n    if (!lastComponentNode) {\n      return;\n    }\n\n    if (lastComponentNode.type === 'ComponentNode') {\n      componentCallback(lastComponentNode);\n    }\n  }\n});","enifed('ember-template-compiler/system/bootstrap', ['exports', 'ember-debug', 'ember-template-compiler/system/compile'], function (exports, _emberDebug, _compile) {\n  'use strict';\n\n  /**\n    Find templates stored in the head tag as script tags and make them available\n    to `Ember.CoreView` in the global `Ember.TEMPLATES` object.\n  \n    Script tags with `text/x-handlebars` will be compiled\n    with Ember's template compiler and are suitable for use as a view's template.\n  \n    @private\n    @method bootstrap\n    @for Ember.HTMLBars\n    @static\n    @param ctx\n  */\n  /**\n  @module ember\n  */\n\n  function bootstrap(_ref) {\n    var context = _ref.context,\n        hasTemplate = _ref.hasTemplate,\n        setTemplate = _ref.setTemplate;\n\n    if (!context) {\n      context = document;\n    }\n\n    var selector = 'script[type=\"text/x-handlebars\"]';\n\n    var elements = context.querySelectorAll(selector);\n\n    for (var i = 0; i < elements.length; i++) {\n      var script = elements[i];\n\n      // Get the name of the script\n      // First look for data-template-name attribute, then fall back to its\n      // id if no name is found.\n      var templateName = script.getAttribute('data-template-name') || script.getAttribute('id') || 'application';\n      var template = void 0;\n\n      template = (0, _compile.default)(script.innerHTML, {\n        moduleName: templateName\n      });\n\n      // Check if template of same name already exists.\n      if (hasTemplate(templateName)) {\n        throw new _emberDebug.Error('Template named \"' + templateName + '\" already exists.');\n      }\n\n      // For templates which have a name, we save them and then remove them from the DOM.\n      setTemplate(templateName, template);\n\n      // Remove script tag from DOM.\n      script.parentNode.removeChild(script);\n    }\n  }\n\n  exports.default = bootstrap;\n});","enifed('ember-template-compiler/system/calculate-location-display', ['exports'], function (exports) {\n  'use strict';\n\n  exports.default = calculateLocationDisplay;\n  function calculateLocationDisplay(moduleName) {\n    var loc = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    var _ref = loc.start || {},\n        column = _ref.column,\n        line = _ref.line;\n\n    var moduleInfo = '';\n    if (moduleName) {\n      moduleInfo += '\\'' + moduleName + '\\' ';\n    }\n\n    if (line !== undefined && column !== undefined) {\n      if (moduleName) {\n        // only prepend @ if the moduleName was present\n        moduleInfo += '@ ';\n      }\n      moduleInfo += 'L' + line + ':C' + column;\n    }\n\n    if (moduleInfo) {\n      moduleInfo = '(' + moduleInfo + ') ';\n    }\n\n    return moduleInfo;\n  }\n});","enifed('ember-template-compiler/system/compile-options', ['exports', 'ember-utils', 'ember-template-compiler/plugins'], function (exports, _emberUtils, _plugins) {\n  'use strict';\n\n  exports.default = compileOptions;\n  exports.registerPlugin = registerPlugin;\n  exports.unregisterPlugin = unregisterPlugin;\n\n\n  var USER_PLUGINS = [];\n\n  function compileOptions(_options) {\n    var options = (0, _emberUtils.assign)({ meta: {} }, _options);\n\n    // move `moduleName` into `meta` property\n    if (options.moduleName) {\n      var meta = options.meta;\n      meta.moduleName = options.moduleName;\n    }\n\n    if (!options.plugins) {\n      options.plugins = { ast: [].concat(USER_PLUGINS, _plugins.default) };\n    } else {\n      var potententialPugins = [].concat(USER_PLUGINS, _plugins.default);\n      var providedPlugins = options.plugins.ast.map(function (plugin) {\n        return wrapLegacyPluginIfNeeded(plugin);\n      });\n      var pluginsToAdd = potententialPugins.filter(function (plugin) {\n        return options.plugins.ast.indexOf(plugin) === -1;\n      });\n      options.plugins.ast = providedPlugins.concat(pluginsToAdd);\n    }\n\n    return options;\n  }\n\n  function wrapLegacyPluginIfNeeded(_plugin) {\n    var plugin = _plugin;\n    if (_plugin.prototype && _plugin.prototype.transform) {\n      plugin = function (env) {\n        var pluginInstantiated = false;\n\n        return {\n          name: _plugin.constructor && _plugin.constructor.name,\n\n          visitor: {\n            Program: function (node) {\n              if (!pluginInstantiated) {\n\n                pluginInstantiated = true;\n                var _plugin2 = new _plugin(env);\n\n                _plugin2.syntax = env.syntax;\n\n                return _plugin2.transform(node);\n              }\n            }\n          }\n        };\n      };\n\n      plugin.__raw = _plugin;\n    }\n\n    return plugin;\n  }\n\n  function registerPlugin(type, _plugin) {\n    if (type !== 'ast') {\n      throw new Error('Attempting to register ' + _plugin + ' as \"' + type + '\" which is not a valid Glimmer plugin type.');\n    }\n\n    for (var i = 0; i < USER_PLUGINS.length; i++) {\n      var PLUGIN = USER_PLUGINS[i];\n      if (PLUGIN === _plugin || PLUGIN.__raw === _plugin) {\n        return;\n      }\n    }\n\n    var plugin = wrapLegacyPluginIfNeeded(_plugin);\n\n    USER_PLUGINS = [plugin].concat(USER_PLUGINS);\n  }\n\n  function unregisterPlugin(type, PluginClass) {\n    if (type !== 'ast') {\n      throw new Error('Attempting to unregister ' + PluginClass + ' as \"' + type + '\" which is not a valid Glimmer plugin type.');\n    }\n\n    USER_PLUGINS = USER_PLUGINS.filter(function (plugin) {\n      return plugin !== PluginClass && plugin.__raw !== PluginClass;\n    });\n  }\n});","enifed('ember-template-compiler/system/compile', ['exports', 'require', 'ember-template-compiler/system/precompile'], function (exports, _require2, _precompile) {\n  'use strict';\n\n  exports.default = compile;\n  /**\n  @module ember\n  */\n  var template = void 0;\n\n  /**\n    Uses HTMLBars `compile` function to process a string into a compiled template.\n  \n    This is not present in production builds.\n  \n    @private\n    @method compile\n    @param {String} templateString This is the string to be compiled by HTMLBars.\n    @param {Object} options This is an options hash to augment the compiler options.\n  */\n  function compile(templateString, options) {\n    if (!template && (0, _require2.has)('ember-glimmer')) {\n      template = (0, _require2.default)('ember-glimmer').template;\n    }\n\n    if (!template) {\n      throw new Error('Cannot call `compile` with only the template compiler loaded. Please load `ember.debug.js` or `ember.prod.js` prior to calling `compile`.');\n    }\n\n    var precompiledTemplateString = (0, _precompile.default)(templateString, options);\n    var templateJS = new Function('return ' + precompiledTemplateString)();\n    return template(templateJS);\n  }\n});","enifed('ember-template-compiler/system/precompile', ['exports', 'ember-template-compiler/system/compile-options', 'require'], function (exports, _compileOptions, _require2) {\n  'use strict';\n\n  exports.default = precompile;\n  /**\n  @module ember\n  */\n\n  var glimmerPrecompile = void 0;\n\n  /**\n    Uses HTMLBars `compile` function to process a string into a compiled template string.\n    The returned string must be passed through `Ember.HTMLBars.template`.\n  \n    This is not present in production builds.\n  \n    @private\n    @method precompile\n    @param {String} templateString This is the string to be compiled by HTMLBars.\n  */\n  function precompile(templateString, options) {\n    if (!glimmerPrecompile && (0, _require2.has)('@glimmer/compiler')) {\n      glimmerPrecompile = (0, _require2.default)('@glimmer/compiler').precompile;\n    }\n\n    if (!glimmerPrecompile) {\n      throw new Error('Cannot call `compile` without the template compiler loaded. Please load `ember-template-compiler.js` prior to calling `compile`.');\n    }\n\n    return glimmerPrecompile(templateString, (0, _compileOptions.default)(options));\n  }\n});","enifed('ember-testing/adapters/adapter', ['exports', 'ember-runtime'], function (exports, _emberRuntime) {\n  'use strict';\n\n  function K() {\n    return this;\n  }\n\n  /**\n   @module @ember/test\n  */\n\n  /**\n    The primary purpose of this class is to create hooks that can be implemented\n    by an adapter for various test frameworks.\n  \n    @class TestAdapter\n    @public\n  */\n  exports.default = _emberRuntime.Object.extend({\n    /**\n      This callback will be called whenever an async operation is about to start.\n       Override this to call your framework's methods that handle async\n      operations.\n       @public\n      @method asyncStart\n    */\n    asyncStart: K,\n\n    /**\n      This callback will be called whenever an async operation has completed.\n       @public\n      @method asyncEnd\n    */\n    asyncEnd: K,\n\n    /**\n      Override this method with your testing framework's false assertion.\n      This function is called whenever an exception occurs causing the testing\n      promise to fail.\n       QUnit example:\n       ```javascript\n        exception: function(error) {\n          ok(false, error);\n        };\n      ```\n       @public\n      @method exception\n      @param {String} error The exception to be raised.\n    */\n    exception: function (error) {\n      throw error;\n    }\n  });\n});","enifed('ember-testing/adapters/qunit', ['exports', 'ember-utils', 'ember-testing/adapters/adapter'], function (exports, _emberUtils, _adapter) {\n  'use strict';\n\n  exports.default = _adapter.default.extend({\n    init: function () {\n      this.doneCallbacks = [];\n    },\n    asyncStart: function () {\n      if (typeof QUnit.stop === 'function') {\n        // very old QUnit version\n        QUnit.stop();\n      } else {\n        this.doneCallbacks.push(QUnit.config.current ? QUnit.config.current.assert.async() : null);\n      }\n    },\n    asyncEnd: function () {\n      // checking for QUnit.stop here (even though we _need_ QUnit.start) because\n      // QUnit.start() still exists in QUnit 2.x (it just throws an error when calling\n      // inside a test context)\n      if (typeof QUnit.stop === 'function') {\n        QUnit.start();\n      } else {\n        var done = this.doneCallbacks.pop();\n        // This can be null if asyncStart() was called outside of a test\n        if (done) {\n          done();\n        }\n      }\n    },\n    exception: function (error) {\n      QUnit.config.current.assert.ok(false, (0, _emberUtils.inspect)(error));\n    }\n  });\n});","enifed('ember-testing/events', ['exports', 'ember-metal', 'ember-utils', 'ember-testing/helpers/-is-form-control'], function (exports, _emberMetal, _emberUtils, _isFormControl) {\n  'use strict';\n\n  exports.focus = focus;\n  exports.fireEvent = fireEvent;\n\n\n  var DEFAULT_EVENT_OPTIONS = { canBubble: true, cancelable: true };\n  var KEYBOARD_EVENT_TYPES = ['keydown', 'keypress', 'keyup'];\n  var MOUSE_EVENT_TYPES = ['click', 'mousedown', 'mouseup', 'dblclick', 'mouseenter', 'mouseleave', 'mousemove', 'mouseout', 'mouseover'];\n\n  function focus(el) {\n    if (!el) {\n      return;\n    }\n    if (el.isContentEditable || (0, _isFormControl.default)(el)) {\n      var type = el.getAttribute('type');\n      if (type !== 'checkbox' && type !== 'radio' && type !== 'hidden') {\n        (0, _emberMetal.run)(null, function () {\n          var browserIsNotFocused = document.hasFocus && !document.hasFocus();\n\n          // makes `document.activeElement` be `element`. If the browser is focused, it also fires a focus event\n          el.focus();\n\n          // Firefox does not trigger the `focusin` event if the window\n          // does not have focus. If the document does not have focus then\n          // fire `focusin` event as well.\n          if (browserIsNotFocused) {\n            // if the browser is not focused the previous `el.focus()` didn't fire an event, so we simulate it\n            fireEvent(el, 'focus', {\n              bubbles: false\n            });\n\n            fireEvent(el, 'focusin');\n          }\n        });\n      }\n    }\n  }\n\n  function fireEvent(element, type) {\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n    if (!element) {\n      return;\n    }\n    var event = void 0;\n    if (KEYBOARD_EVENT_TYPES.indexOf(type) > -1) {\n      event = buildKeyboardEvent(type, options);\n    } else if (MOUSE_EVENT_TYPES.indexOf(type) > -1) {\n      var rect = element.getBoundingClientRect();\n      var x = rect.left + 1;\n      var y = rect.top + 1;\n      var simulatedCoordinates = {\n        screenX: x + 5,\n        screenY: y + 95,\n        clientX: x,\n        clientY: y\n      };\n      event = buildMouseEvent(type, (0, _emberUtils.assign)(simulatedCoordinates, options));\n    } else {\n      event = buildBasicEvent(type, options);\n    }\n    element.dispatchEvent(event);\n  }\n\n  function buildBasicEvent(type) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    var event = document.createEvent('Events');\n\n    // Event.bubbles is read only\n    var bubbles = options.bubbles !== undefined ? options.bubbles : true;\n    var cancelable = options.cancelable !== undefined ? options.cancelable : true;\n\n    delete options.bubbles;\n    delete options.cancelable;\n\n    event.initEvent(type, bubbles, cancelable);\n    (0, _emberUtils.assign)(event, options);\n    return event;\n  }\n\n  function buildMouseEvent(type) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    var event = void 0;\n    try {\n      event = document.createEvent('MouseEvents');\n      var eventOpts = (0, _emberUtils.assign)({}, DEFAULT_EVENT_OPTIONS, options);\n      event.initMouseEvent(type, eventOpts.canBubble, eventOpts.cancelable, window, eventOpts.detail, eventOpts.screenX, eventOpts.screenY, eventOpts.clientX, eventOpts.clientY, eventOpts.ctrlKey, eventOpts.altKey, eventOpts.shiftKey, eventOpts.metaKey, eventOpts.button, eventOpts.relatedTarget);\n    } catch (e) {\n      event = buildBasicEvent(type, options);\n    }\n    return event;\n  }\n\n  function buildKeyboardEvent(type) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    var event = void 0;\n    try {\n      event = document.createEvent('KeyEvents');\n      var eventOpts = (0, _emberUtils.assign)({}, DEFAULT_EVENT_OPTIONS, options);\n      event.initKeyEvent(type, eventOpts.canBubble, eventOpts.cancelable, window, eventOpts.ctrlKey, eventOpts.altKey, eventOpts.shiftKey, eventOpts.metaKey, eventOpts.keyCode, eventOpts.charCode);\n    } catch (e) {\n      event = buildBasicEvent(type, options);\n    }\n    return event;\n  }\n});","enifed('ember-testing/ext/application', ['ember-application', 'ember-testing/setup_for_testing', 'ember-testing/test/helpers', 'ember-testing/test/promise', 'ember-testing/test/run', 'ember-testing/test/on_inject_helpers', 'ember-testing/test/adapter'], function (_emberApplication, _setup_for_testing, _helpers, _promise, _run, _on_inject_helpers, _adapter) {\n  'use strict';\n\n  _emberApplication.Application.reopen({\n    /**\n     This property contains the testing helpers for the current application. These\n     are created once you call `injectTestHelpers` on your `Application`\n     instance. The included helpers are also available on the `window` object by\n     default, but can be used from this object on the individual application also.\n       @property testHelpers\n      @type {Object}\n      @default {}\n      @public\n    */\n    testHelpers: {},\n\n    /**\n     This property will contain the original methods that were registered\n     on the `helperContainer` before `injectTestHelpers` is called.\n      When `removeTestHelpers` is called, these methods are restored to the\n     `helperContainer`.\n       @property originalMethods\n      @type {Object}\n      @default {}\n      @private\n      @since 1.3.0\n    */\n    originalMethods: {},\n\n    /**\n    This property indicates whether or not this application is currently in\n    testing mode. This is set when `setupForTesting` is called on the current\n    application.\n     @property testing\n    @type {Boolean}\n    @default false\n    @since 1.3.0\n    @public\n    */\n    testing: false,\n\n    setupForTesting: function () {\n      (0, _setup_for_testing.default)();\n\n      this.testing = true;\n\n      this.resolveRegistration('router:main').reopen({\n        location: 'none'\n      });\n    },\n\n\n    /**\n      This will be used as the container to inject the test helpers into. By\n      default the helpers are injected into `window`.\n       @property helperContainer\n      @type {Object} The object to be used for test helpers.\n      @default window\n      @since 1.2.0\n      @private\n    */\n    helperContainer: null,\n\n    injectTestHelpers: function (helperContainer) {\n      if (helperContainer) {\n        this.helperContainer = helperContainer;\n      } else {\n        this.helperContainer = window;\n      }\n\n      this.reopen({\n        willDestroy: function () {\n          this._super.apply(this, arguments);\n          this.removeTestHelpers();\n        }\n      });\n\n      this.testHelpers = {};\n      for (var name in _helpers.helpers) {\n        this.originalMethods[name] = this.helperContainer[name];\n        this.testHelpers[name] = this.helperContainer[name] = helper(this, name);\n        protoWrap(_promise.default.prototype, name, helper(this, name), _helpers.helpers[name].meta.wait);\n      }\n\n      (0, _on_inject_helpers.invokeInjectHelpersCallbacks)(this);\n    },\n    removeTestHelpers: function () {\n      if (!this.helperContainer) {\n        return;\n      }\n\n      for (var name in _helpers.helpers) {\n        this.helperContainer[name] = this.originalMethods[name];\n        delete _promise.default.prototype[name];\n        delete this.testHelpers[name];\n        delete this.originalMethods[name];\n      }\n    }\n  });\n\n  // This method is no longer needed\n  // But still here for backwards compatibility\n  // of helper chaining\n  function protoWrap(proto, name, callback, isAsync) {\n    proto[name] = function () {\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      if (isAsync) {\n        return callback.apply(this, args);\n      } else {\n        return this.then(function () {\n          return callback.apply(this, args);\n        });\n      }\n    };\n  }\n\n  function helper(app, name) {\n    var fn = _helpers.helpers[name].method;\n    var meta = _helpers.helpers[name].meta;\n    if (!meta.wait) {\n      return function () {\n        for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n          args[_key2] = arguments[_key2];\n        }\n\n        return fn.apply(app, [app].concat(args));\n      };\n    }\n\n    return function () {\n      for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        args[_key3] = arguments[_key3];\n      }\n\n      var lastPromise = (0, _run.default)(function () {\n        return (0, _promise.resolve)((0, _promise.getLastPromise)());\n      });\n\n      // wait for last helper's promise to resolve and then\n      // execute. To be safe, we need to tell the adapter we're going\n      // asynchronous here, because fn may not be invoked before we\n      // return.\n      (0, _adapter.asyncStart)();\n      return lastPromise.then(function () {\n        return fn.apply(app, [app].concat(args));\n      }).finally(_adapter.asyncEnd);\n    };\n  }\n});","enifed('ember-testing/ext/rsvp', ['exports', 'ember-runtime', 'ember-metal', 'ember-debug', 'ember-testing/test/adapter'], function (exports, _emberRuntime, _emberMetal, _emberDebug, _adapter) {\n  'use strict';\n\n  _emberRuntime.RSVP.configure('async', function (callback, promise) {\n    // if schedule will cause autorun, we need to inform adapter\n    if ((0, _emberDebug.isTesting)() && !_emberMetal.run.backburner.currentInstance) {\n      (0, _adapter.asyncStart)();\n      _emberMetal.run.backburner.schedule('actions', function () {\n        (0, _adapter.asyncEnd)();\n        callback(promise);\n      });\n    } else {\n      _emberMetal.run.backburner.schedule('actions', function () {\n        return callback(promise);\n      });\n    }\n  });\n\n  exports.default = _emberRuntime.RSVP;\n});","enifed('ember-testing/helpers', ['ember-testing/test/helpers', 'ember-testing/helpers/and_then', 'ember-testing/helpers/click', 'ember-testing/helpers/current_path', 'ember-testing/helpers/current_route_name', 'ember-testing/helpers/current_url', 'ember-testing/helpers/fill_in', 'ember-testing/helpers/find', 'ember-testing/helpers/find_with_assert', 'ember-testing/helpers/key_event', 'ember-testing/helpers/pause_test', 'ember-testing/helpers/trigger_event', 'ember-testing/helpers/visit', 'ember-testing/helpers/wait'], function (_helpers, _and_then, _click, _current_path, _current_route_name, _current_url, _fill_in, _find, _find_with_assert, _key_event, _pause_test, _trigger_event, _visit, _wait) {\n  'use strict';\n\n  (0, _helpers.registerAsyncHelper)('visit', _visit.default);\n  (0, _helpers.registerAsyncHelper)('click', _click.default);\n  (0, _helpers.registerAsyncHelper)('keyEvent', _key_event.default);\n  (0, _helpers.registerAsyncHelper)('fillIn', _fill_in.default);\n  (0, _helpers.registerAsyncHelper)('wait', _wait.default);\n  (0, _helpers.registerAsyncHelper)('andThen', _and_then.default);\n  (0, _helpers.registerAsyncHelper)('pauseTest', _pause_test.pauseTest);\n  (0, _helpers.registerAsyncHelper)('triggerEvent', _trigger_event.default);\n\n  (0, _helpers.registerHelper)('find', _find.default);\n  (0, _helpers.registerHelper)('findWithAssert', _find_with_assert.default);\n  (0, _helpers.registerHelper)('currentRouteName', _current_route_name.default);\n  (0, _helpers.registerHelper)('currentPath', _current_path.default);\n  (0, _helpers.registerHelper)('currentURL', _current_url.default);\n  (0, _helpers.registerHelper)('resumeTest', _pause_test.resumeTest);\n});","enifed('ember-testing/helpers/-is-form-control', ['exports'], function (exports) {\n  'use strict';\n\n  exports.default = isFormControl;\n  var FORM_CONTROL_TAGS = ['INPUT', 'BUTTON', 'SELECT', 'TEXTAREA'];\n\n  /**\n    @private\n    @param {Element} element the element to check\n    @returns {boolean} `true` when the element is a form control, `false` otherwise\n  */\n  function isFormControl(element) {\n    var tagName = element.tagName,\n        type = element.type;\n\n\n    if (type === 'hidden') {\n      return false;\n    }\n\n    return FORM_CONTROL_TAGS.indexOf(tagName) > -1;\n  }\n});","enifed(\"ember-testing/helpers/and_then\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.default = andThen;\n  function andThen(app, callback) {\n    return app.testHelpers.wait(callback(app));\n  }\n});","enifed('ember-testing/helpers/click', ['exports', 'ember-testing/events'], function (exports, _events) {\n  'use strict';\n\n  exports.default = click;\n\n\n  /**\n    Clicks an element and triggers any actions triggered by the element's `click`\n    event.\n  \n    Example:\n  \n    ```javascript\n    click('.some-jQuery-selector').then(function() {\n      // assert something\n    });\n    ```\n  \n    @method click\n    @param {String} selector jQuery selector for finding element on the DOM\n    @param {Object} context A DOM Element, Document, or jQuery to use as context\n    @return {RSVP.Promise<undefined>}\n    @public\n  */\n  function click(app, selector, context) {\n    var $el = app.testHelpers.findWithAssert(selector, context);\n    var el = $el[0];\n\n    (0, _events.fireEvent)(el, 'mousedown');\n\n    (0, _events.focus)(el);\n\n    (0, _events.fireEvent)(el, 'mouseup');\n    (0, _events.fireEvent)(el, 'click');\n\n    return app.testHelpers.wait();\n  } /**\n    @module ember\n    */\n});","enifed('ember-testing/helpers/current_path', ['exports', 'ember-metal'], function (exports, _emberMetal) {\n  'use strict';\n\n  exports.default = currentPath;\n\n\n  /**\n    Returns the current path.\n  \n  Example:\n  \n  ```javascript\n  function validateURL() {\n    equal(currentPath(), 'some.path.index', \"correct path was transitioned into.\");\n  }\n  \n  click('#some-link-id').then(validateURL);\n  ```\n  \n  @method currentPath\n  @return {Object} The currently active path.\n  @since 1.5.0\n  @public\n  */\n  function currentPath(app) {\n    var routingService = app.__container__.lookup('service:-routing');\n    return (0, _emberMetal.get)(routingService, 'currentPath');\n  } /**\n    @module ember\n    */\n});","enifed('ember-testing/helpers/current_route_name', ['exports', 'ember-metal'], function (exports, _emberMetal) {\n  'use strict';\n\n  exports.default = currentRouteName;\n\n  /**\n    Returns the currently active route name.\n  \n  Example:\n  \n  ```javascript\n  function validateRouteName() {\n    equal(currentRouteName(), 'some.path', \"correct route was transitioned into.\");\n  }\n  visit('/some/path').then(validateRouteName)\n  ```\n  \n  @method currentRouteName\n  @return {Object} The name of the currently active route.\n  @since 1.5.0\n  @public\n  */\n  function currentRouteName(app) {\n    var routingService = app.__container__.lookup('service:-routing');\n    return (0, _emberMetal.get)(routingService, 'currentRouteName');\n  } /**\n    @module ember\n    */\n});","enifed('ember-testing/helpers/current_url', ['exports', 'ember-metal'], function (exports, _emberMetal) {\n  'use strict';\n\n  exports.default = currentURL;\n\n\n  /**\n    Returns the current URL.\n  \n  Example:\n  \n  ```javascript\n  function validateURL() {\n    equal(currentURL(), '/some/path', \"correct URL was transitioned into.\");\n  }\n  \n  click('#some-link-id').then(validateURL);\n  ```\n  \n  @method currentURL\n  @return {Object} The currently active URL.\n  @since 1.5.0\n  @public\n  */\n  function currentURL(app) {\n    var router = app.__container__.lookup('router:main');\n    return (0, _emberMetal.get)(router, 'location').getURL();\n  } /**\n    @module ember\n    */\n});","enifed('ember-testing/helpers/fill_in', ['exports', 'ember-testing/events', 'ember-testing/helpers/-is-form-control'], function (exports, _events, _isFormControl) {\n  'use strict';\n\n  exports.default = fillIn;\n\n\n  /**\n    Fills in an input element with some text.\n  \n    Example:\n  \n    ```javascript\n    fillIn('#email', 'you@example.com').then(function() {\n      // assert something\n    });\n    ```\n  \n    @method fillIn\n    @param {String} selector jQuery selector finding an input element on the DOM\n    to fill text with\n    @param {String} text text to place inside the input element\n    @return {RSVP.Promise<undefined>}\n    @public\n  */\n  /**\n  @module ember\n  */\n  function fillIn(app, selector, contextOrText, text) {\n    var $el = void 0,\n        el = void 0,\n        context = void 0;\n    if (text === undefined) {\n      text = contextOrText;\n    } else {\n      context = contextOrText;\n    }\n    $el = app.testHelpers.findWithAssert(selector, context);\n    el = $el[0];\n    (0, _events.focus)(el);\n\n    if ((0, _isFormControl.default)(el)) {\n      el.value = text;\n    } else {\n      el.innerHTML = text;\n    }\n\n    (0, _events.fireEvent)(el, 'input');\n    (0, _events.fireEvent)(el, 'change');\n\n    return app.testHelpers.wait();\n  }\n});","enifed('ember-testing/helpers/find', ['exports', 'ember-metal', 'ember-debug', 'ember-views'], function (exports, _emberMetal, _emberDebug, _emberViews) {\n  'use strict';\n\n  exports.default = find;\n\n\n  /**\n    Finds an element in the context of the app's container element. A simple alias\n    for `app.$(selector)`.\n  \n    Example:\n  \n    ```javascript\n    var $el = find('.my-selector');\n    ```\n  \n    With the `context` param:\n  \n    ```javascript\n    var $el = find('.my-selector', '.parent-element-class');\n    ```\n  \n    @method find\n    @param {String} selector jQuery selector for element lookup\n    @param {String} [context] (optional) jQuery selector that will limit the selector\n                              argument to find only within the context's children\n    @return {Object} DOM element representing the results of the query\n    @public\n  */\n  function find(app, selector, context) {\n    if (_emberViews.jQueryDisabled) {\n      (true && !(false) && (0, _emberDebug.assert)('If jQuery is disabled, please import and use helpers from @ember/test-helpers [https://github.com/emberjs/ember-test-helpers]. Note: `find` is not an available helper.'));\n    }\n    var $el = void 0;\n    context = context || (0, _emberMetal.get)(app, 'rootElement');\n    $el = app.$(selector, context);\n    return $el;\n  } /**\n    @module ember\n    */\n});","enifed('ember-testing/helpers/find_with_assert', ['exports'], function (exports) {\n  'use strict';\n\n  exports.default = findWithAssert;\n  /**\n  @module ember\n  */\n  /**\n    Like `find`, but throws an error if the element selector returns no results.\n  \n    Example:\n  \n    ```javascript\n    var $el = findWithAssert('.doesnt-exist'); // throws error\n    ```\n  \n    With the `context` param:\n  \n    ```javascript\n    var $el = findWithAssert('.selector-id', '.parent-element-class'); // assert will pass\n    ```\n  \n    @method findWithAssert\n    @param {String} selector jQuery selector string for finding an element within\n    the DOM\n    @param {String} [context] (optional) jQuery selector that will limit the\n    selector argument to find only within the context's children\n    @return {Object} jQuery object representing the results of the query\n    @throws {Error} throws error if object returned has a length of 0\n    @public\n  */\n  function findWithAssert(app, selector, context) {\n    var $el = app.testHelpers.find(selector, context);\n    if ($el.length === 0) {\n      throw new Error('Element ' + selector + ' not found.');\n    }\n    return $el;\n  }\n});","enifed(\"ember-testing/helpers/key_event\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.default = keyEvent;\n  /**\n  @module ember\n  */\n  /**\n    Simulates a key event, e.g. `keypress`, `keydown`, `keyup` with the desired keyCode\n    Example:\n    ```javascript\n    keyEvent('.some-jQuery-selector', 'keypress', 13).then(function() {\n     // assert something\n    });\n    ```\n    @method keyEvent\n    @param {String} selector jQuery selector for finding element on the DOM\n    @param {String} type the type of key event, e.g. `keypress`, `keydown`, `keyup`\n    @param {Number} keyCode the keyCode of the simulated key event\n    @return {RSVP.Promise<undefined>}\n    @since 1.5.0\n    @public\n  */\n  function keyEvent(app, selector, contextOrType, typeOrKeyCode, keyCode) {\n    var context = void 0,\n        type = void 0;\n\n    if (keyCode === undefined) {\n      context = null;\n      keyCode = typeOrKeyCode;\n      type = contextOrType;\n    } else {\n      context = contextOrType;\n      type = typeOrKeyCode;\n    }\n\n    return app.testHelpers.triggerEvent(selector, context, type, { keyCode: keyCode, which: keyCode });\n  }\n});","enifed('ember-testing/helpers/pause_test', ['exports', 'ember-runtime', 'ember-console', 'ember-debug'], function (exports, _emberRuntime, _emberConsole, _emberDebug) {\n  'use strict';\n\n  exports.resumeTest = resumeTest;\n  exports.pauseTest = pauseTest;\n\n\n  var resume = void 0;\n\n  /**\n   Resumes a test paused by `pauseTest`.\n  \n   @method resumeTest\n   @return {void}\n   @public\n  */\n  /**\n  @module ember\n  */\n  function resumeTest() {\n    (true && !(resume) && (0, _emberDebug.assert)('Testing has not been paused. There is nothing to resume.', resume));\n\n    resume();\n    resume = undefined;\n  }\n\n  /**\n   Pauses the current test - this is useful for debugging while testing or for test-driving.\n   It allows you to inspect the state of your application at any point.\n   Example (The test will pause before clicking the button):\n  \n   ```javascript\n   visit('/')\n   return pauseTest();\n   click('.btn');\n   ```\n  \n   You may want to turn off the timeout before pausing.\n  \n   qunit (as of 2.4.0):\n  \n   ```\n   visit('/');\n   assert.timeout(0);\n   return pauseTest();\n   click('.btn');\n   ```\n  \n   mocha:\n  \n   ```\n   visit('/');\n   this.timeout(0);\n   return pauseTest();\n   click('.btn');\n   ```\n  \n  \n   @since 1.9.0\n   @method pauseTest\n   @return {Object} A promise that will never resolve\n   @public\n  */\n  function pauseTest() {\n    _emberConsole.default.info('Testing paused. Use `resumeTest()` to continue.');\n\n    return new _emberRuntime.RSVP.Promise(function (resolve) {\n      resume = resolve;\n    }, 'TestAdapter paused promise');\n  }\n});","enifed('ember-testing/helpers/trigger_event', ['exports', 'ember-testing/events'], function (exports, _events) {\n  'use strict';\n\n  exports.default = triggerEvent;\n\n  /**\n    Triggers the given DOM event on the element identified by the provided selector.\n    Example:\n    ```javascript\n    triggerEvent('#some-elem-id', 'blur');\n    ```\n    This is actually used internally by the `keyEvent` helper like so:\n    ```javascript\n    triggerEvent('#some-elem-id', 'keypress', { keyCode: 13 });\n    ```\n   @method triggerEvent\n   @param {String} selector jQuery selector for finding element on the DOM\n   @param {String} [context] jQuery selector that will limit the selector\n                             argument to find only within the context's children\n   @param {String} type The event type to be triggered.\n   @param {Object} [options] The options to be passed to jQuery.Event.\n   @return {RSVP.Promise<undefined>}\n   @since 1.5.0\n   @public\n  */\n  function triggerEvent(app, selector, contextOrType, typeOrOptions, possibleOptions) {\n    var arity = arguments.length;\n    var context = void 0,\n        type = void 0,\n        options = void 0;\n\n    if (arity === 3) {\n      // context and options are optional, so this is\n      // app, selector, type\n      context = null;\n      type = contextOrType;\n      options = {};\n    } else if (arity === 4) {\n      // context and options are optional, so this is\n      if (typeof typeOrOptions === 'object') {\n        // either\n        // app, selector, type, options\n        context = null;\n        type = contextOrType;\n        options = typeOrOptions;\n      } else {\n        // or\n        // app, selector, context, type\n        context = contextOrType;\n        type = typeOrOptions;\n        options = {};\n      }\n    } else {\n      context = contextOrType;\n      type = typeOrOptions;\n      options = possibleOptions;\n    }\n\n    var $el = app.testHelpers.findWithAssert(selector, context);\n    var el = $el[0];\n\n    (0, _events.fireEvent)(el, type, options);\n\n    return app.testHelpers.wait();\n  } /**\n    @module ember\n    */\n});","enifed('ember-testing/helpers/visit', ['exports', 'ember-metal'], function (exports, _emberMetal) {\n  'use strict';\n\n  exports.default = visit;\n\n\n  /**\n    Loads a route, sets up any controllers, and renders any templates associated\n    with the route as though a real user had triggered the route change while\n    using your app.\n  \n    Example:\n  \n    ```javascript\n    visit('posts/index').then(function() {\n      // assert something\n    });\n    ```\n  \n    @method visit\n    @param {String} url the name of the route\n    @return {RSVP.Promise<undefined>}\n    @public\n  */\n  function visit(app, url) {\n    var router = app.__container__.lookup('router:main');\n    var shouldHandleURL = false;\n\n    app.boot().then(function () {\n      router.location.setURL(url);\n\n      if (shouldHandleURL) {\n        (0, _emberMetal.run)(app.__deprecatedInstance__, 'handleURL', url);\n      }\n    });\n\n    if (app._readinessDeferrals > 0) {\n      router['initialURL'] = url;\n      (0, _emberMetal.run)(app, 'advanceReadiness');\n      delete router['initialURL'];\n    } else {\n      shouldHandleURL = true;\n    }\n\n    return app.testHelpers.wait();\n  } /**\n    @module ember\n    */\n});","enifed('ember-testing/helpers/wait', ['exports', 'ember-testing/test/waiters', 'ember-runtime', 'ember-metal', 'ember-testing/test/pending_requests'], function (exports, _waiters, _emberRuntime, _emberMetal, _pending_requests) {\n  'use strict';\n\n  exports.default = wait;\n\n\n  /**\n    Causes the run loop to process any pending events. This is used to ensure that\n    any async operations from other helpers (or your assertions) have been processed.\n  \n    This is most often used as the return value for the helper functions (see 'click',\n    'fillIn','visit',etc). However, there is a method to register a test helper which\n    utilizes this method without the need to actually call `wait()` in your helpers.\n  \n    The `wait` helper is built into `registerAsyncHelper` by default. You will not need\n    to `return app.testHelpers.wait();` - the wait behavior is provided for you.\n  \n    Example:\n  \n    ```javascript\n    import { registerAsyncHelper } from '@ember/test';\n  \n    registerAsyncHelper('loginUser', function(app, username, password) {\n      visit('secured/path/here')\n        .fillIn('#username', username)\n        .fillIn('#password', password)\n        .click('.submit');\n    });\n    ```\n  \n    @method wait\n    @param {Object} value The value to be returned.\n    @return {RSVP.Promise<any>} Promise that resolves to the passed value.\n    @public\n    @since 1.0.0\n  */\n  /**\n  @module ember\n  */\n  function wait(app, value) {\n    return new _emberRuntime.RSVP.Promise(function (resolve) {\n      var router = app.__container__.lookup('router:main');\n\n      // Every 10ms, poll for the async thing to have finished\n      var watcher = setInterval(function () {\n        // 1. If the router is loading, keep polling\n        var routerIsLoading = router._routerMicrolib && !!router._routerMicrolib.activeTransition;\n        if (routerIsLoading) {\n          return;\n        }\n\n        // 2. If there are pending Ajax requests, keep polling\n        if ((0, _pending_requests.pendingRequests)()) {\n          return;\n        }\n\n        // 3. If there are scheduled timers or we are inside of a run loop, keep polling\n        if (_emberMetal.run.hasScheduledTimers() || _emberMetal.run.currentRunLoop) {\n          return;\n        }\n\n        if ((0, _waiters.checkWaiters)()) {\n          return;\n        }\n\n        // Stop polling\n        clearInterval(watcher);\n\n        // Synchronously resolve the promise\n        (0, _emberMetal.run)(null, resolve, value);\n      }, 10);\n    });\n  }\n});","enifed('ember-testing/index', ['exports', 'ember-testing/test', 'ember-testing/adapters/adapter', 'ember-testing/setup_for_testing', 'ember-testing/adapters/qunit', 'ember-testing/support', 'ember-testing/ext/application', 'ember-testing/ext/rsvp', 'ember-testing/helpers', 'ember-testing/initializers'], function (exports, _test, _adapter, _setup_for_testing, _qunit) {\n  'use strict';\n\n  exports.QUnitAdapter = exports.setupForTesting = exports.Adapter = exports.Test = undefined;\n  Object.defineProperty(exports, 'Test', {\n    enumerable: true,\n    get: function () {\n      return _test.default;\n    }\n  });\n  Object.defineProperty(exports, 'Adapter', {\n    enumerable: true,\n    get: function () {\n      return _adapter.default;\n    }\n  });\n  Object.defineProperty(exports, 'setupForTesting', {\n    enumerable: true,\n    get: function () {\n      return _setup_for_testing.default;\n    }\n  });\n  Object.defineProperty(exports, 'QUnitAdapter', {\n    enumerable: true,\n    get: function () {\n      return _qunit.default;\n    }\n  });\n});","enifed('ember-testing/initializers', ['ember-runtime'], function (_emberRuntime) {\n  'use strict';\n\n  var name = 'deferReadiness in `testing` mode';\n\n  (0, _emberRuntime.onLoad)('Ember.Application', function (Application) {\n    if (!Application.initializers[name]) {\n      Application.initializer({\n        name: name,\n\n        initialize: function (application) {\n          if (application.testing) {\n            application.deferReadiness();\n          }\n        }\n      });\n    }\n  });\n});","enifed('ember-testing/setup_for_testing', ['exports', 'ember-debug', 'ember-views', 'ember-testing/test/adapter', 'ember-testing/test/pending_requests', 'ember-testing/adapters/adapter', 'ember-testing/adapters/qunit'], function (exports, _emberDebug, _emberViews, _adapter, _pending_requests, _adapter2, _qunit) {\n  'use strict';\n\n  exports.default = setupForTesting;\n\n\n  /**\n    Sets Ember up for testing. This is useful to perform\n    basic setup steps in order to unit test.\n  \n    Use `App.setupForTesting` to perform integration tests (full\n    application testing).\n  \n    @method setupForTesting\n    @namespace Ember\n    @since 1.5.0\n    @private\n  */\n  /* global self */\n\n  function setupForTesting() {\n    (0, _emberDebug.setTesting)(true);\n\n    var adapter = (0, _adapter.getAdapter)();\n    // if adapter is not manually set default to QUnit\n    if (!adapter) {\n      (0, _adapter.setAdapter)(typeof self.QUnit === 'undefined' ? new _adapter2.default() : new _qunit.default());\n    }\n\n    if (_emberViews.jQuery) {\n      (0, _emberViews.jQuery)(document).off('ajaxSend', _pending_requests.incrementPendingRequests);\n      (0, _emberViews.jQuery)(document).off('ajaxComplete', _pending_requests.decrementPendingRequests);\n\n      (0, _pending_requests.clearPendingRequests)();\n\n      (0, _emberViews.jQuery)(document).on('ajaxSend', _pending_requests.incrementPendingRequests);\n      (0, _emberViews.jQuery)(document).on('ajaxComplete', _pending_requests.decrementPendingRequests);\n    }\n  }\n});","enifed('ember-testing/support', ['ember-debug', 'ember-views', 'ember-environment'], function (_emberDebug, _emberViews, _emberEnvironment) {\n  'use strict';\n\n  /**\n    @module ember\n  */\n\n  var $ = _emberViews.jQuery;\n\n  /**\n    This method creates a checkbox and triggers the click event to fire the\n    passed in handler. It is used to correct for a bug in older versions\n    of jQuery (e.g 1.8.3).\n  \n    @private\n    @method testCheckboxClick\n  */\n  function testCheckboxClick(handler) {\n    var input = document.createElement('input');\n    $(input).attr('type', 'checkbox').css({ position: 'absolute', left: '-1000px', top: '-1000px' }).appendTo('body').on('click', handler).trigger('click').remove();\n  }\n\n  if (_emberEnvironment.environment.hasDOM && !_emberViews.jQueryDisabled) {\n    $(function () {\n      /*\n        Determine whether a checkbox checked using jQuery's \"click\" method will have\n        the correct value for its checked property.\n         If we determine that the current jQuery version exhibits this behavior,\n        patch it to work correctly as in the commit for the actual fix:\n        https://github.com/jquery/jquery/commit/1fb2f92.\n      */\n      testCheckboxClick(function () {\n        if (!this.checked && !$.event.special.click) {\n          $.event.special.click = {\n            trigger: function () {\n              if (this.nodeName === 'INPUT' && this.type === 'checkbox' && this.click) {\n                this.click();\n                return false;\n              }\n            }\n          };\n        }\n      });\n\n      // Try again to verify that the patch took effect or blow up.\n      testCheckboxClick(function () {\n        (true && (0, _emberDebug.warn)('clicked checkboxes should be checked! the jQuery patch didn\\'t work', this.checked, { id: 'ember-testing.test-checkbox-click' }));\n      });\n    });\n  }\n});","enifed('ember-testing/test', ['exports', 'ember-testing/test/helpers', 'ember-testing/test/on_inject_helpers', 'ember-testing/test/promise', 'ember-testing/test/waiters', 'ember-testing/test/adapter'], function (exports, _helpers, _on_inject_helpers, _promise, _waiters, _adapter) {\n  'use strict';\n\n  /**\n    This is a container for an assortment of testing related functionality:\n  \n    * Choose your default test adapter (for your framework of choice).\n    * Register/Unregister additional test helpers.\n    * Setup callbacks to be fired when the test helpers are injected into\n      your application.\n  \n    @class Test\n    @namespace Ember\n    @public\n  */\n  var Test = {\n    /**\n      Hash containing all known test helpers.\n       @property _helpers\n      @private\n      @since 1.7.0\n    */\n    _helpers: _helpers.helpers,\n\n    registerHelper: _helpers.registerHelper,\n    registerAsyncHelper: _helpers.registerAsyncHelper,\n    unregisterHelper: _helpers.unregisterHelper,\n    onInjectHelpers: _on_inject_helpers.onInjectHelpers,\n    Promise: _promise.default,\n    promise: _promise.promise,\n    resolve: _promise.resolve,\n    registerWaiter: _waiters.registerWaiter,\n    unregisterWaiter: _waiters.unregisterWaiter,\n    checkWaiters: _waiters.checkWaiters\n  };\n\n  /**\n   Used to allow ember-testing to communicate with a specific testing\n   framework.\n  \n   You can manually set it before calling `App.setupForTesting()`.\n  \n   Example:\n  \n   ```javascript\n   Ember.Test.adapter = MyCustomAdapter.create()\n   ```\n  \n   If you do not set it, ember-testing will default to `Ember.Test.QUnitAdapter`.\n  \n   @public\n   @for Ember.Test\n   @property adapter\n   @type {Class} The adapter to be used.\n   @default Ember.Test.QUnitAdapter\n  */\n  /**\n    @module ember\n  */\n  Object.defineProperty(Test, 'adapter', {\n    get: _adapter.getAdapter,\n    set: _adapter.setAdapter\n  });\n\n  exports.default = Test;\n});","enifed('ember-testing/test/adapter', ['exports', 'ember-console', 'ember-metal'], function (exports, _emberConsole, _emberMetal) {\n  'use strict';\n\n  exports.getAdapter = getAdapter;\n  exports.setAdapter = setAdapter;\n  exports.asyncStart = asyncStart;\n  exports.asyncEnd = asyncEnd;\n\n\n  var adapter = void 0;\n  function getAdapter() {\n    return adapter;\n  }\n\n  function setAdapter(value) {\n    adapter = value;\n    if (value && typeof value.exception === 'function') {\n      (0, _emberMetal.setDispatchOverride)(adapterDispatch);\n    } else {\n      (0, _emberMetal.setDispatchOverride)(null);\n    }\n  }\n\n  function asyncStart() {\n    if (adapter) {\n      adapter.asyncStart();\n    }\n  }\n\n  function asyncEnd() {\n    if (adapter) {\n      adapter.asyncEnd();\n    }\n  }\n\n  function adapterDispatch(error) {\n    adapter.exception(error);\n    _emberConsole.default.error(error.stack);\n  }\n});","enifed('ember-testing/test/helpers', ['exports', 'ember-testing/test/promise'], function (exports, _promise) {\n  'use strict';\n\n  exports.helpers = undefined;\n  exports.registerHelper = registerHelper;\n  exports.registerAsyncHelper = registerAsyncHelper;\n  exports.unregisterHelper = unregisterHelper;\n  var helpers = exports.helpers = {};\n  /**\n   @module @ember/test\n  */\n\n  /**\n    `registerHelper` is used to register a test helper that will be injected\n    when `App.injectTestHelpers` is called.\n  \n    The helper method will always be called with the current Application as\n    the first parameter.\n  \n    For example:\n  \n    ```javascript\n    import { registerHelper } from '@ember/test';\n    import { run } from '@ember/runloop';\n  \n    registerHelper('boot', function(app) {\n      run(app, app.advanceReadiness);\n    });\n    ```\n  \n    This helper can later be called without arguments because it will be\n    called with `app` as the first parameter.\n  \n    ```javascript\n    import Application from '@ember/application';\n  \n    App = Application.create();\n    App.injectTestHelpers();\n    boot();\n    ```\n  \n    @public\n    @for @ember/test\n    @static\n    @method registerHelper\n    @param {String} name The name of the helper method to add.\n    @param {Function} helperMethod\n    @param options {Object}\n  */\n  function registerHelper(name, helperMethod) {\n    helpers[name] = {\n      method: helperMethod,\n      meta: { wait: false }\n    };\n  }\n\n  /**\n    `registerAsyncHelper` is used to register an async test helper that will be injected\n    when `App.injectTestHelpers` is called.\n  \n    The helper method will always be called with the current Application as\n    the first parameter.\n  \n    For example:\n  \n    ```javascript\n    import { registerAsyncHelper } from '@ember/test';\n    import { run } from '@ember/runloop';\n  \n    registerAsyncHelper('boot', function(app) {\n      run(app, app.advanceReadiness);\n    });\n    ```\n  \n    The advantage of an async helper is that it will not run\n    until the last async helper has completed.  All async helpers\n    after it will wait for it complete before running.\n  \n  \n    For example:\n  \n    ```javascript\n    import { registerAsyncHelper } from '@ember/test';\n  \n    registerAsyncHelper('deletePost', function(app, postId) {\n      click('.delete-' + postId);\n    });\n  \n    // ... in your test\n    visit('/post/2');\n    deletePost(2);\n    visit('/post/3');\n    deletePost(3);\n    ```\n  \n    @public\n    @for @ember/test\n    @method registerAsyncHelper\n    @param {String} name The name of the helper method to add.\n    @param {Function} helperMethod\n    @since 1.2.0\n  */\n  function registerAsyncHelper(name, helperMethod) {\n    helpers[name] = {\n      method: helperMethod,\n      meta: { wait: true }\n    };\n  }\n\n  /**\n    Remove a previously added helper method.\n  \n    Example:\n  \n    ```javascript\n    import { unregisterHelper } from '@ember/test';\n  \n    unregisterHelper('wait');\n    ```\n  \n    @public\n    @method unregisterHelper\n    @static\n    @for @ember/test\n    @param {String} name The helper to remove.\n  */\n  function unregisterHelper(name) {\n    delete helpers[name];\n    delete _promise.default.prototype[name];\n  }\n});","enifed(\"ember-testing/test/on_inject_helpers\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.onInjectHelpers = onInjectHelpers;\n  exports.invokeInjectHelpersCallbacks = invokeInjectHelpersCallbacks;\n  var callbacks = exports.callbacks = [];\n\n  /**\n    Used to register callbacks to be fired whenever `App.injectTestHelpers`\n    is called.\n  \n    The callback will receive the current application as an argument.\n  \n    Example:\n  \n    ```javascript\n    import $ from 'jquery';\n  \n    Ember.Test.onInjectHelpers(function() {\n      $(document).ajaxSend(function() {\n        Test.pendingRequests++;\n      });\n  \n      $(document).ajaxComplete(function() {\n        Test.pendingRequests--;\n      });\n    });\n    ```\n  \n    @public\n    @for Ember.Test\n    @method onInjectHelpers\n    @param {Function} callback The function to be called.\n  */\n  function onInjectHelpers(callback) {\n    callbacks.push(callback);\n  }\n\n  function invokeInjectHelpersCallbacks(app) {\n    for (var i = 0; i < callbacks.length; i++) {\n      callbacks[i](app);\n    }\n  }\n});","enifed(\"ember-testing/test/pending_requests\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.pendingRequests = pendingRequests;\n  exports.clearPendingRequests = clearPendingRequests;\n  exports.incrementPendingRequests = incrementPendingRequests;\n  exports.decrementPendingRequests = decrementPendingRequests;\n  var requests = [];\n\n  function pendingRequests() {\n    return requests.length;\n  }\n\n  function clearPendingRequests() {\n    requests.length = 0;\n  }\n\n  function incrementPendingRequests(_, xhr) {\n    requests.push(xhr);\n  }\n\n  function decrementPendingRequests(_, xhr) {\n    for (var i = 0; i < requests.length; i++) {\n      if (xhr === requests[i]) {\n        requests.splice(i, 1);\n        break;\n      }\n    }\n  }\n});","enifed('ember-testing/test/promise', ['exports', 'ember-babel', 'ember-runtime', 'ember-testing/test/run'], function (exports, _emberBabel, _emberRuntime, _run) {\n  'use strict';\n\n  exports.promise = promise;\n  exports.resolve = resolve;\n  exports.getLastPromise = getLastPromise;\n\n\n  var lastPromise = void 0;\n\n  var TestPromise = function (_RSVP$Promise) {\n    (0, _emberBabel.inherits)(TestPromise, _RSVP$Promise);\n\n    function TestPromise() {\n      (0, _emberBabel.classCallCheck)(this, TestPromise);\n\n      var _this = (0, _emberBabel.possibleConstructorReturn)(this, _RSVP$Promise.apply(this, arguments));\n\n      lastPromise = _this;\n      return _this;\n    }\n\n    TestPromise.prototype.then = function then(_onFulfillment) {\n      var _RSVP$Promise$prototy;\n\n      var onFulfillment = typeof _onFulfillment === 'function' ? function (result) {\n        return isolate(_onFulfillment, result);\n      } : undefined;\n\n      for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      return (_RSVP$Promise$prototy = _RSVP$Promise.prototype.then).call.apply(_RSVP$Promise$prototy, [this, onFulfillment].concat(args));\n    };\n\n    return TestPromise;\n  }(_emberRuntime.RSVP.Promise);\n\n  exports.default = TestPromise;\n\n\n  /**\n    This returns a thenable tailored for testing.  It catches failed\n    `onSuccess` callbacks and invokes the `Ember.Test.adapter.exception`\n    callback in the last chained then.\n  \n    This method should be returned by async helpers such as `wait`.\n  \n    @public\n    @for Ember.Test\n    @method promise\n    @param {Function} resolver The function used to resolve the promise.\n    @param {String} label An optional string for identifying the promise.\n  */\n  function promise(resolver, label) {\n    var fullLabel = 'Ember.Test.promise: ' + (label || '<Unknown Promise>');\n    return new TestPromise(resolver, fullLabel);\n  }\n\n  /**\n    Replacement for `Ember.RSVP.resolve`\n    The only difference is this uses\n    an instance of `Ember.Test.Promise`\n  \n    @public\n    @for Ember.Test\n    @method resolve\n    @param {Mixed} The value to resolve\n    @since 1.2.0\n  */\n  function resolve(result, label) {\n    return TestPromise.resolve(result, label);\n  }\n\n  function getLastPromise() {\n    return lastPromise;\n  }\n\n  // This method isolates nested async methods\n  // so that they don't conflict with other last promises.\n  //\n  // 1. Set `Ember.Test.lastPromise` to null\n  // 2. Invoke method\n  // 3. Return the last promise created during method\n  function isolate(onFulfillment, result) {\n    // Reset lastPromise for nested helpers\n    lastPromise = null;\n\n    var value = onFulfillment(result);\n\n    var promise = lastPromise;\n    lastPromise = null;\n\n    // If the method returned a promise\n    // return that promise. If not,\n    // return the last async helper's promise\n    if (value && value instanceof TestPromise || !promise) {\n      return value;\n    } else {\n      return (0, _run.default)(function () {\n        return resolve(promise).then(function () {\n          return value;\n        });\n      });\n    }\n  }\n});","enifed('ember-testing/test/run', ['exports', 'ember-metal'], function (exports, _emberMetal) {\n  'use strict';\n\n  exports.default = run;\n  function run(fn) {\n    if (!_emberMetal.run.currentRunLoop) {\n      return (0, _emberMetal.run)(fn);\n    } else {\n      return fn();\n    }\n  }\n});","enifed(\"ember-testing/test/waiters\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.registerWaiter = registerWaiter;\n  exports.unregisterWaiter = unregisterWaiter;\n  exports.checkWaiters = checkWaiters;\n  /**\n   @module @ember/test\n  */\n  var contexts = [];\n  var callbacks = [];\n\n  /**\n     This allows ember-testing to play nicely with other asynchronous\n     events, such as an application that is waiting for a CSS3\n     transition or an IndexDB transaction. The waiter runs periodically\n     after each async helper (i.e. `click`, `andThen`, `visit`, etc) has executed,\n     until the returning result is truthy. After the waiters finish, the next async helper\n     is executed and the process repeats.\n  \n     For example:\n  \n     ```javascript\n     import { registerWaiter } from '@ember/test';\n  \n     registerWaiter(function() {\n       return myPendingTransactions() == 0;\n     });\n     ```\n     The `context` argument allows you to optionally specify the `this`\n     with which your callback will be invoked.\n  \n     For example:\n  \n     ```javascript\n     import { registerWaiter } from '@ember/test';\n  \n     registerWaiter(MyDB, MyDB.hasPendingTransactions);\n     ```\n  \n     @public\n     @for @ember/test\n     @static\n     @method registerWaiter\n     @param {Object} context (optional)\n     @param {Function} callback\n     @since 1.2.0\n  */\n  function registerWaiter(context, callback) {\n    if (arguments.length === 1) {\n      callback = context;\n      context = null;\n    }\n    if (indexOf(context, callback) > -1) {\n      return;\n    }\n    contexts.push(context);\n    callbacks.push(callback);\n  }\n\n  /**\n     `unregisterWaiter` is used to unregister a callback that was\n     registered with `registerWaiter`.\n  \n     @public\n     @for @ember/test\n     @static\n     @method unregisterWaiter\n     @param {Object} context (optional)\n     @param {Function} callback\n     @since 1.2.0\n  */\n  function unregisterWaiter(context, callback) {\n    if (!callbacks.length) {\n      return;\n    }\n    if (arguments.length === 1) {\n      callback = context;\n      context = null;\n    }\n    var i = indexOf(context, callback);\n    if (i === -1) {\n      return;\n    }\n    contexts.splice(i, 1);\n    callbacks.splice(i, 1);\n  }\n\n  /**\n    Iterates through each registered test waiter, and invokes\n    its callback. If any waiter returns false, this method will return\n    true indicating that the waiters have not settled yet.\n  \n    This is generally used internally from the acceptance/integration test\n    infrastructure.\n  \n    @public\n    @for @ember/test\n    @static\n    @method checkWaiters\n  */\n  function checkWaiters() {\n    if (!callbacks.length) {\n      return false;\n    }\n    for (var i = 0; i < callbacks.length; i++) {\n      var context = contexts[i];\n      var callback = callbacks[i];\n      if (!callback.call(context)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  function indexOf(context, callback) {\n    for (var i = 0; i < callbacks.length; i++) {\n      if (callbacks[i] === callback && contexts[i] === context) {\n        return i;\n      }\n    }\n    return -1;\n  }\n});","enifed('ember-utils', ['exports'], function (exports) {\n  'use strict';\n\n  /**\n    Strongly hint runtimes to intern the provided string.\n  \n    When do I need to use this function?\n  \n    For the most part, never. Pre-mature optimization is bad, and often the\n    runtime does exactly what you need it to, and more often the trade-off isn't\n    worth it.\n  \n    Why?\n  \n    Runtimes store strings in at least 2 different representations:\n    Ropes and Symbols (interned strings). The Rope provides a memory efficient\n    data-structure for strings created from concatenation or some other string\n    manipulation like splitting.\n  \n    Unfortunately checking equality of different ropes can be quite costly as\n    runtimes must resort to clever string comparison algorithms. These\n    algorithms typically cost in proportion to the length of the string.\n    Luckily, this is where the Symbols (interned strings) shine. As Symbols are\n    unique by their string content, equality checks can be done by pointer\n    comparison.\n  \n    How do I know if my string is a rope or symbol?\n  \n    Typically (warning general sweeping statement, but truthy in runtimes at\n    present) static strings created as part of the JS source are interned.\n    Strings often used for comparisons can be interned at runtime if some\n    criteria are met.  One of these criteria can be the size of the entire rope.\n    For example, in chrome 38 a rope longer then 12 characters will not\n    intern, nor will segments of that rope.\n  \n    Some numbers: http://jsperf.com/eval-vs-keys/8\n  \n    Known Trick™\n  \n    @private\n    @return {String} interned version of the provided string\n  */\n  function intern(str) {\n    var obj = {};\n    obj[str] = 1;\n    for (var key in obj) {\n      if (key === str) {\n        return key;\n      }\n    }\n    return str;\n  }\n\n  /**\n   @module @ember/object\n  */\n\n  /**\n   Previously we used `Ember.$.uuid`, however `$.uuid` has been removed from\n   jQuery master. We'll just bootstrap our own uuid now.\n  \n   @private\n   @return {Number} the uuid\n   */\n  var _uuid = 0;\n\n  /**\n   Generates a universally unique identifier. This method\n   is used internally by Ember for assisting with\n   the generation of GUID's and other unique identifiers.\n  \n   @public\n   @return {Number} [description]\n   */\n  function uuid() {\n    return ++_uuid;\n  }\n\n  /**\n   Prefix used for guids through out Ember.\n   @private\n   @property GUID_PREFIX\n   @for Ember\n   @type String\n   @final\n   */\n  var GUID_PREFIX = 'ember';\n\n  // Used for guid generation...\n  var numberCache = [];\n  var stringCache = {};\n\n  /**\n    A unique key used to assign guids and other private metadata to objects.\n    If you inspect an object in your browser debugger you will often see these.\n    They can be safely ignored.\n  \n    On browsers that support it, these properties are added with enumeration\n    disabled so they won't show up when you iterate over your properties.\n  \n    @private\n    @property GUID_KEY\n    @for Ember\n    @type String\n    @final\n  */\n  var GUID_KEY = intern('__ember' + +new Date());\n\n  var GUID_DESC = {\n    writable: true,\n    configurable: true,\n    enumerable: false,\n    value: null\n  };\n\n  var nullDescriptor = {\n    configurable: true,\n    writable: true,\n    enumerable: false,\n    value: null\n  };\n\n  var GUID_KEY_PROPERTY = {\n    name: GUID_KEY,\n    descriptor: nullDescriptor\n  };\n\n  /**\n    Generates a new guid, optionally saving the guid to the object that you\n    pass in. You will rarely need to use this method. Instead you should\n    call `guidFor(obj)`, which return an existing guid if available.\n  \n    @private\n    @method generateGuid\n    @static\n    @for @ember/object/internals\n    @param {Object} [obj] Object the guid will be used for. If passed in, the guid will\n      be saved on the object and reused whenever you pass the same object\n      again.\n  \n      If no object is passed, just generate a new guid.\n    @param {String} [prefix] Prefix to place in front of the guid. Useful when you want to\n      separate the guid into separate namespaces.\n    @return {String} the guid\n  */\n  function generateGuid(obj) {\n    var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : GUID_PREFIX;\n\n    var ret = prefix + uuid();\n    if (obj !== undefined && obj !== null) {\n      if (obj[GUID_KEY] === null) {\n        obj[GUID_KEY] = ret;\n      } else {\n        GUID_DESC.value = ret;\n        if (obj.__defineNonEnumerable) {\n          obj.__defineNonEnumerable(GUID_KEY_PROPERTY);\n        } else {\n          Object.defineProperty(obj, GUID_KEY, GUID_DESC);\n        }\n      }\n    }\n    return ret;\n  }\n\n  /**\n    Returns a unique id for the object. If the object does not yet have a guid,\n    one will be assigned to it. You can call this on any object,\n    `EmberObject`-based or not, but be aware that it will add a `_guid`\n    property.\n  \n    You can also use this method on DOM Element objects.\n  \n    @public\n    @static\n    @method guidFor\n    @for @ember/object/internals\n    @param {Object} obj any object, string, number, Element, or primitive\n    @return {String} the unique guid for this instance.\n  */\n  function guidFor(obj) {\n    // special cases where we don't want to add a key to object\n    if (obj === undefined) {\n      return '(undefined)';\n    }\n\n    if (obj === null) {\n      return '(null)';\n    }\n\n    var type = typeof obj;\n    if ((type === 'object' || type === 'function') && obj[GUID_KEY]) {\n      return obj[GUID_KEY];\n    }\n\n    var ret = void 0;\n    // Don't allow prototype changes to String etc. to change the guidFor\n    switch (type) {\n      case 'number':\n        ret = numberCache[obj];\n\n        if (!ret) {\n          ret = numberCache[obj] = 'nu' + obj;\n        }\n\n        return ret;\n\n      case 'string':\n        ret = stringCache[obj];\n\n        if (!ret) {\n          ret = stringCache[obj] = 'st' + uuid();\n        }\n\n        return ret;\n\n      case 'boolean':\n        return obj ? '(true)' : '(false)';\n\n      default:\n        if (obj === Object) {\n          return '(Object)';\n        }\n\n        if (obj === Array) {\n          return '(Array)';\n        }\n\n        return generateGuid(obj);\n    }\n  }\n\n  var GENERATED_SYMBOLS = [];\n\n  function isInternalSymbol(possibleSymbol) {\n    return GENERATED_SYMBOLS.indexOf(possibleSymbol) > -1;\n  }\n\n  function symbol(debugName) {\n    // TODO: Investigate using platform symbols, but we do not\n    // want to require non-enumerability for this API, which\n    // would introduce a large cost.\n    var id = GUID_KEY + Math.floor(Math.random() * new Date());\n    var symbol = intern('__' + debugName + id + '__');\n    GENERATED_SYMBOLS.push(symbol);\n    return symbol;\n  }\n\n  /**\n  @module @ember/application\n  */\n\n  var OWNER = symbol('OWNER');\n\n  /**\n    Framework objects in an Ember application (components, services, routes, etc.)\n    are created via a factory and dependency injection system. Each of these\n    objects is the responsibility of an \"owner\", which handled its\n    instantiation and manages its lifetime.\n  \n    `getOwner` fetches the owner object responsible for an instance. This can\n    be used to lookup or resolve other class instances, or register new factories\n    into the owner.\n  \n    For example, this component dynamically looks up a service based on the\n    `audioType` passed as an attribute:\n  \n    ```app/components/play-audio.js\n    import Component from '@ember/component';\n    import { computed } from '@ember/object';\n    import { getOwner } from '@ember/application';\n  \n    // Usage:\n    //\n    //   {{play-audio audioType=model.audioType audioFile=model.file}}\n    //\n    export default Component.extend({\n      audioService: computed('audioType', function() {\n        let owner = getOwner(this);\n        return owner.lookup(`service:${this.get('audioType')}`);\n      }),\n  \n      click() {\n        let player = this.get('audioService');\n        player.play(this.get('audioFile'));\n      }\n    });\n    ```\n  \n    @method getOwner\n    @static\n    @for @ember/application\n    @param {Object} object An object with an owner.\n    @return {Object} An owner object.\n    @since 2.3.0\n    @public\n  */\n  function getOwner(object) {\n    return object[OWNER];\n  }\n\n  /**\n    `setOwner` forces a new owner on a given object instance. This is primarily\n    useful in some testing cases.\n  \n    @method setOwner\n    @static\n    @for @ember/application\n    @param {Object} object An object instance.\n    @param {Object} object The new owner object of the object instance.\n    @since 2.3.0\n    @public\n  */\n  function setOwner(object, owner) {\n    object[OWNER] = owner;\n  }\n\n  /**\n   @module @ember/polyfills\n  */\n  /**\n    Copy properties from a source object to a target object.\n  \n    ```javascript\n    import { assign } from '@ember/polyfills';\n  \n    var a = { first: 'Yehuda' };\n    var b = { last: 'Katz' };\n    var c = { company: 'Tilde Inc.' };\n    assign(a, b, c); // a === { first: 'Yehuda', last: 'Katz', company: 'Tilde Inc.' }, b === { last: 'Katz' }, c === { company: 'Tilde Inc.' }\n    ```\n  \n    @method assign\n    @for @ember/polyfills\n    @param {Object} original The object to assign into\n    @param {Object} ...args The objects to copy properties from\n    @return {Object}\n    @public\n    @static\n  */\n  function assign(original) {\n    for (var i = 1; i < arguments.length; i++) {\n      var arg = arguments[i];\n      if (!arg) {\n        continue;\n      }\n\n      var updates = Object.keys(arg);\n\n      for (var _i = 0; _i < updates.length; _i++) {\n        var prop = updates[_i];\n        original[prop] = arg[prop];\n      }\n    }\n\n    return original;\n  }\n\n  var assign$1 = Object.assign || assign;\n\n  // the delete is meant to hint at runtimes that this object should remain in\n  // dictionary mode. This is clearly a runtime specific hack, but currently it\n  // appears worthwhile in some usecases. Please note, these deletes do increase\n  // the cost of creation dramatically over a plain Object.create. And as this\n  // only makes sense for long-lived dictionaries that aren't instantiated often.\n  function makeDictionary(parent) {\n    var dict = Object.create(parent);\n    dict['_dict'] = null;\n    delete dict['_dict'];\n    return dict;\n  }\n\n  var HAS_SUPER_PATTERN = /\\.(_super|call\\(this|apply\\(this)/;\n  var fnToString = Function.prototype.toString;\n\n  var checkHasSuper = function () {\n    var sourceAvailable = fnToString.call(function () {\n      return this;\n    }).indexOf('return this') > -1;\n\n    if (sourceAvailable) {\n      return function checkHasSuper(func) {\n        return HAS_SUPER_PATTERN.test(fnToString.call(func));\n      };\n    }\n\n    return function checkHasSuper() {\n      return true;\n    };\n  }();\n\n  function ROOT() {}\n  ROOT.__hasSuper = false;\n\n  function hasSuper(func) {\n    if (func.__hasSuper === undefined) {\n      func.__hasSuper = checkHasSuper(func);\n    }\n    return func.__hasSuper;\n  }\n\n  /**\n    Wraps the passed function so that `this._super` will point to the superFunc\n    when the function is invoked. This is the primitive we use to implement\n    calls to super.\n  \n    @private\n    @method wrap\n    @for Ember\n    @param {Function} func The function to call\n    @param {Function} superFunc The super function.\n    @return {Function} wrapped function.\n  */\n  function wrap(func, superFunc) {\n    if (!hasSuper(func)) {\n      return func;\n    }\n    // ensure an unwrapped super that calls _super is wrapped with a terminal _super\n    if (!superFunc.wrappedFunction && hasSuper(superFunc)) {\n      return _wrap(func, _wrap(superFunc, ROOT));\n    }\n    return _wrap(func, superFunc);\n  }\n\n  function _wrap(func, superFunc) {\n    function superWrapper() {\n      var orig = this._super;\n      this._super = superFunc;\n      var ret = func.apply(this, arguments);\n      this._super = orig;\n      return ret;\n    }\n\n    superWrapper.wrappedFunction = func;\n    superWrapper.__ember_observes__ = func.__ember_observes__;\n    superWrapper.__ember_observesBefore__ = func.__ember_observesBefore__;\n    superWrapper.__ember_listens__ = func.__ember_listens__;\n\n    return superWrapper;\n  }\n\n  var objectToString = Object.prototype.toString;\n  /**\n   @module @ember/debug\n  */\n  /**\n    Convenience method to inspect an object. This method will attempt to\n    convert the object into a useful string description.\n  \n    It is a pretty simple implementation. If you want something more robust,\n    use something like JSDump: https://github.com/NV/jsDump\n  \n    @method inspect\n    @static\n    @param {Object} obj The object you want to inspect.\n    @return {String} A description of the object\n    @since 1.4.0\n    @private\n  */\n  function inspect(obj) {\n    if (obj === null) {\n      return 'null';\n    }\n    if (obj === undefined) {\n      return 'undefined';\n    }\n    if (Array.isArray(obj)) {\n      return '[' + obj + ']';\n    }\n    // for non objects\n    var type = typeof obj;\n    if (type !== 'object' && type !== 'symbol') {\n      return '' + obj;\n    }\n    // overridden toString\n    if (typeof obj.toString === 'function' && obj.toString !== objectToString) {\n      return obj.toString();\n    }\n\n    // Object.prototype.toString === {}.toString\n    var v = void 0;\n    var ret = [];\n    for (var key in obj) {\n      if (obj.hasOwnProperty(key)) {\n        v = obj[key];\n        if (v === 'toString') {\n          continue;\n        } // ignore useless items\n        if (typeof v === 'function') {\n          v = 'function() { ... }';\n        }\n\n        if (v && typeof v.toString !== 'function') {\n          ret.push(key + ': ' + objectToString.call(v));\n        } else {\n          ret.push(key + ': ' + v);\n        }\n      }\n    }\n    return '{' + ret.join(', ') + '}';\n  }\n\n  function lookupDescriptor(obj, keyName) {\n    var current = obj;\n    while (current) {\n      var descriptor = Object.getOwnPropertyDescriptor(current, keyName);\n\n      if (descriptor) {\n        return descriptor;\n      }\n\n      current = Object.getPrototypeOf(current);\n    }\n\n    return null;\n  }\n\n  /**\n    Checks to see if the `methodName` exists on the `obj`.\n  \n    ```javascript\n    let foo = { bar: function() { return 'bar'; }, baz: null };\n  \n    Ember.canInvoke(foo, 'bar'); // true\n    Ember.canInvoke(foo, 'baz'); // false\n    Ember.canInvoke(foo, 'bat'); // false\n    ```\n  \n    @method canInvoke\n    @for Ember\n    @param {Object} obj The object to check for the method\n    @param {String} methodName The method name to check for\n    @return {Boolean}\n    @private\n  */\n  function canInvoke(obj, methodName) {\n    return obj !== null && obj !== undefined && typeof obj[methodName] === 'function';\n  }\n\n  /**\n    @module @ember/utils\n  */\n\n  /**\n    Checks to see if the `methodName` exists on the `obj`,\n    and if it does, invokes it with the arguments passed.\n  \n    ```javascript\n    import { tryInvoke } from '@ember/utils';\n  \n    let d = new Date('03/15/2013');\n  \n    tryInvoke(d, 'getTime');              // 1363320000000\n    tryInvoke(d, 'setFullYear', [2014]);  // 1394856000000\n    tryInvoke(d, 'noSuchMethod', [2014]); // undefined\n    ```\n  \n    @method tryInvoke\n    @for @ember/utils\n    @static\n    @param {Object} obj The object to check for the method\n    @param {String} methodName The method name to check for\n    @param {Array} [args] The arguments to pass to the method\n    @return {*} the return value of the invoked method or undefined if it cannot be invoked\n    @public\n  */\n  function tryInvoke(obj, methodName, args) {\n    if (canInvoke(obj, methodName)) {\n      var method = obj[methodName];\n      return method.apply(obj, args);\n    }\n  }\n\n  var isArray = Array.isArray;\n\n  /**\n   @module @ember/array\n  */\n  /**\n   Forces the passed object to be part of an array. If the object is already\n   an array, it will return the object. Otherwise, it will add the object to\n   an array. If object is `null` or `undefined`, it will return an empty array.\n  \n   ```javascript\n   import { makeArray } from '@ember/array';\n   import ArrayProxy from '@ember/array/proxy';\n  \n   makeArray();            // []\n   makeArray(null);        // []\n   makeArray(undefined);   // []\n   makeArray('lindsay');   // ['lindsay']\n   makeArray([1, 2, 42]);  // [1, 2, 42]\n  \n   let proxy = ArrayProxy.create({ content: [] });\n  \n   makeArray(proxy) === proxy;  // false\n   ```\n  \n   @method makeArray\n   @static\n   @for @ember/array\n   @param {Object} obj the object\n   @return {Array}\n   @private\n   */\n  function makeArray(obj) {\n    if (obj === null || obj === undefined) {\n      return [];\n    }\n    return isArray(obj) ? obj : [obj];\n  }\n\n  var name = symbol('NAME_KEY');\n\n  var objectToString$1 = Object.prototype.toString;\n\n  function isNone(obj) {\n    return obj === null || obj === undefined;\n  }\n\n  /*\n   A `toString` util function that supports objects without a `toString`\n   method, e.g. an object created with `Object.create(null)`.\n  */\n  function toString(obj) {\n    var type = typeof obj;\n    if (type === \"string\") {\n      return obj;\n    }\n\n    if (Array.isArray(obj)) {\n      // Reimplement Array.prototype.join according to spec (22.1.3.13)\n      // Changing ToString(element) with this safe version of ToString.\n      var len = obj.length;\n      var r = '';\n\n      for (var k = 0; k < len; k++) {\n        if (k > 0) {\n          r += ',';\n        }\n\n        if (!isNone(obj[k])) {\n          r += toString(obj[k]);\n        }\n      }\n\n      return r;\n    } else if (obj != null && typeof obj.toString === 'function') {\n      return obj.toString();\n    } else {\n      return objectToString$1.call(obj);\n    }\n  }\n\n  var HAS_NATIVE_PROXY = typeof Proxy === 'function';\n\n  /*\n   This package will be eagerly parsed and should have no dependencies on external\n   packages.\n  \n   It is intended to be used to share utility methods that will be needed\n   by every Ember application (and is **not** a dumping ground of useful utilities).\n  \n   Utility methods that are needed in < 80% of cases should be placed\n   elsewhere (so they can be lazily evaluated / parsed).\n  */\n\n  exports.symbol = symbol;\n  exports.isInternalSymbol = isInternalSymbol;\n  exports.getOwner = getOwner;\n  exports.setOwner = setOwner;\n  exports.OWNER = OWNER;\n  exports.assign = assign$1;\n  exports.assignPolyfill = assign;\n  exports.dictionary = makeDictionary;\n  exports.uuid = uuid;\n  exports.GUID_KEY = GUID_KEY;\n  exports.GUID_DESC = GUID_DESC;\n  exports.GUID_KEY_PROPERTY = GUID_KEY_PROPERTY;\n  exports.generateGuid = generateGuid;\n  exports.guidFor = guidFor;\n  exports.intern = intern;\n  exports.checkHasSuper = checkHasSuper;\n  exports.ROOT = ROOT;\n  exports.wrap = wrap;\n  exports.inspect = inspect;\n  exports.lookupDescriptor = lookupDescriptor;\n  exports.canInvoke = canInvoke;\n  exports.tryInvoke = tryInvoke;\n  exports.makeArray = makeArray;\n  exports.NAME_KEY = name;\n  exports.toString = toString;\n  exports.HAS_NATIVE_PROXY = HAS_NATIVE_PROXY;\n});","enifed('ember-views/compat/attrs', ['exports', 'ember-utils'], function (exports, _emberUtils) {\n  'use strict';\n\n  exports.MUTABLE_CELL = undefined;\n  var MUTABLE_CELL = exports.MUTABLE_CELL = (0, _emberUtils.symbol)('MUTABLE_CELL');\n});","enifed('ember-views/compat/fallback-view-registry', ['exports', 'ember-utils'], function (exports, _emberUtils) {\n  'use strict';\n\n  exports.default = (0, _emberUtils.dictionary)(null);\n});","enifed('ember-views/component_lookup', ['exports', 'ember-debug', 'ember-runtime'], function (exports, _emberDebug, _emberRuntime) {\n  'use strict';\n\n  exports.default = _emberRuntime.Object.extend({\n    componentFor: function (name, owner, options) {\n      (true && !(~name.indexOf('-')) && (0, _emberDebug.assert)('You cannot use \\'' + name + '\\' as a component name. Component names must contain a hyphen.', ~name.indexOf('-')));\n\n      var fullName = 'component:' + name;\n      return owner.factoryFor(fullName, options);\n    },\n    layoutFor: function (name, owner, options) {\n      (true && !(~name.indexOf('-')) && (0, _emberDebug.assert)('You cannot use \\'' + name + '\\' as a component name. Component names must contain a hyphen.', ~name.indexOf('-')));\n\n\n      var templateFullName = 'template:components/' + name;\n      return owner.lookup(templateFullName, options);\n    }\n  });\n});","enifed('ember-views/index', ['exports', 'ember-views/system/jquery', 'ember-views/system/utils', 'ember-views/system/event_dispatcher', 'ember-views/component_lookup', 'ember-views/mixins/text_support', 'ember-views/views/core_view', 'ember-views/mixins/class_names_support', 'ember-views/mixins/child_views_support', 'ember-views/mixins/view_state_support', 'ember-views/mixins/view_support', 'ember-views/mixins/action_support', 'ember-views/compat/attrs', 'ember-views/system/lookup_partial', 'ember-views/utils/lookup-component', 'ember-views/system/action_manager', 'ember-views/compat/fallback-view-registry'], function (exports, _jquery, _utils, _event_dispatcher, _component_lookup, _text_support, _core_view, _class_names_support, _child_views_support, _view_state_support, _view_support, _action_support, _attrs, _lookup_partial, _lookupComponent, _action_manager, _fallbackViewRegistry) {\n  'use strict';\n\n  Object.defineProperty(exports, 'jQuery', {\n    enumerable: true,\n    get: function () {\n      return _jquery.default;\n    }\n  });\n  Object.defineProperty(exports, 'jQueryDisabled', {\n    enumerable: true,\n    get: function () {\n      return _jquery.jQueryDisabled;\n    }\n  });\n  Object.defineProperty(exports, 'isSimpleClick', {\n    enumerable: true,\n    get: function () {\n      return _utils.isSimpleClick;\n    }\n  });\n  Object.defineProperty(exports, 'getViewBounds', {\n    enumerable: true,\n    get: function () {\n      return _utils.getViewBounds;\n    }\n  });\n  Object.defineProperty(exports, 'getViewClientRects', {\n    enumerable: true,\n    get: function () {\n      return _utils.getViewClientRects;\n    }\n  });\n  Object.defineProperty(exports, 'getViewBoundingClientRect', {\n    enumerable: true,\n    get: function () {\n      return _utils.getViewBoundingClientRect;\n    }\n  });\n  Object.defineProperty(exports, 'getRootViews', {\n    enumerable: true,\n    get: function () {\n      return _utils.getRootViews;\n    }\n  });\n  Object.defineProperty(exports, 'getChildViews', {\n    enumerable: true,\n    get: function () {\n      return _utils.getChildViews;\n    }\n  });\n  Object.defineProperty(exports, 'getViewId', {\n    enumerable: true,\n    get: function () {\n      return _utils.getViewId;\n    }\n  });\n  Object.defineProperty(exports, 'getViewElement', {\n    enumerable: true,\n    get: function () {\n      return _utils.getViewElement;\n    }\n  });\n  Object.defineProperty(exports, 'setViewElement', {\n    enumerable: true,\n    get: function () {\n      return _utils.setViewElement;\n    }\n  });\n  Object.defineProperty(exports, 'constructStyleDeprecationMessage', {\n    enumerable: true,\n    get: function () {\n      return _utils.constructStyleDeprecationMessage;\n    }\n  });\n  Object.defineProperty(exports, 'EventDispatcher', {\n    enumerable: true,\n    get: function () {\n      return _event_dispatcher.default;\n    }\n  });\n  Object.defineProperty(exports, 'ComponentLookup', {\n    enumerable: true,\n    get: function () {\n      return _component_lookup.default;\n    }\n  });\n  Object.defineProperty(exports, 'TextSupport', {\n    enumerable: true,\n    get: function () {\n      return _text_support.default;\n    }\n  });\n  Object.defineProperty(exports, 'CoreView', {\n    enumerable: true,\n    get: function () {\n      return _core_view.default;\n    }\n  });\n  Object.defineProperty(exports, 'ClassNamesSupport', {\n    enumerable: true,\n    get: function () {\n      return _class_names_support.default;\n    }\n  });\n  Object.defineProperty(exports, 'ChildViewsSupport', {\n    enumerable: true,\n    get: function () {\n      return _child_views_support.default;\n    }\n  });\n  Object.defineProperty(exports, 'ViewStateSupport', {\n    enumerable: true,\n    get: function () {\n      return _view_state_support.default;\n    }\n  });\n  Object.defineProperty(exports, 'ViewMixin', {\n    enumerable: true,\n    get: function () {\n      return _view_support.default;\n    }\n  });\n  Object.defineProperty(exports, 'ActionSupport', {\n    enumerable: true,\n    get: function () {\n      return _action_support.default;\n    }\n  });\n  Object.defineProperty(exports, 'MUTABLE_CELL', {\n    enumerable: true,\n    get: function () {\n      return _attrs.MUTABLE_CELL;\n    }\n  });\n  Object.defineProperty(exports, 'lookupPartial', {\n    enumerable: true,\n    get: function () {\n      return _lookup_partial.default;\n    }\n  });\n  Object.defineProperty(exports, 'hasPartial', {\n    enumerable: true,\n    get: function () {\n      return _lookup_partial.hasPartial;\n    }\n  });\n  Object.defineProperty(exports, 'lookupComponent', {\n    enumerable: true,\n    get: function () {\n      return _lookupComponent.default;\n    }\n  });\n  Object.defineProperty(exports, 'ActionManager', {\n    enumerable: true,\n    get: function () {\n      return _action_manager.default;\n    }\n  });\n  Object.defineProperty(exports, 'fallbackViewRegistry', {\n    enumerable: true,\n    get: function () {\n      return _fallbackViewRegistry.default;\n    }\n  });\n});","enifed('ember-views/mixins/action_support', ['exports', 'ember-utils', 'ember-metal', 'ember-debug', 'ember-views/compat/attrs'], function (exports, _emberUtils, _emberMetal, _emberDebug, _attrs) {\n  'use strict';\n\n  /**\n   @module ember\n  */\n  function validateAction(component, actionName) {\n    if (actionName && actionName[_attrs.MUTABLE_CELL]) {\n      actionName = actionName.value;\n    }\n\n    (true && !((0, _emberMetal.isNone)(actionName) || typeof actionName === 'string' || typeof actionName === 'function') && (0, _emberDebug.assert)('The default action was triggered on the component ' + component.toString() + ', but the action name (' + actionName + ') was not a string.', (0, _emberMetal.isNone)(actionName) || typeof actionName === 'string' || typeof actionName === 'function'));\n\n    return actionName;\n  }\n\n  /**\n   @class ActionSupport\n   @namespace Ember\n   @private\n  */\n  exports.default = _emberMetal.Mixin.create({\n    /**\n      Calls an action passed to a component.\n       For example a component for playing or pausing music may translate click events\n      into action notifications of \"play\" or \"stop\" depending on some internal state\n      of the component:\n       ```app/components/play-button.js\n      import Component from '@ember/component';\n       export default Component.extend({\n        click() {\n          if (this.get('isPlaying')) {\n            this.sendAction('play');\n          } else {\n            this.sendAction('stop');\n          }\n        }\n      });\n      ```\n       The actions \"play\" and \"stop\" must be passed to this `play-button` component:\n       ```handlebars\n      {{! app/templates/application.hbs }}\n      {{play-button play=(action \"musicStarted\") stop=(action \"musicStopped\")}}\n      ```\n       When the component receives a browser `click` event it translate this\n      interaction into application-specific semantics (\"play\" or \"stop\") and\n      calls the specified action.\n       ```app/controller/application.js\n      import Controller from '@ember/controller';\n       export default Controller.extend({\n        actions: {\n          musicStarted() {\n            // called when the play button is clicked\n            // and the music started playing\n          },\n          musicStopped() {\n            // called when the play button is clicked\n            // and the music stopped playing\n          }\n        }\n      });\n      ```\n       If no action is passed to `sendAction` a default name of \"action\"\n      is assumed.\n       ```app/components/next-button.js\n      import Component from '@ember/component';\n       export default Component.extend({\n        click() {\n          this.sendAction();\n        }\n      });\n      ```\n       ```handlebars\n      {{! app/templates/application.hbs }}\n      {{next-button action=(action \"playNextSongInAlbum\")}}\n      ```\n       ```app/controllers/application.js\n      import Controller from '@ember/controller';\n       export default Controller.extend({\n        actions: {\n          playNextSongInAlbum() {\n            ...\n          }\n        }\n      });\n      ```\n       @method sendAction\n      @param [action] {String} the action to call\n      @param [params] {*} arguments for the action\n      @public\n    */\n    sendAction: function (action) {\n      for (var _len = arguments.length, contexts = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        contexts[_key - 1] = arguments[_key];\n      }\n\n      var actionName = void 0;\n\n      // Send the default action\n      if (action === undefined) {\n        action = 'action';\n      }\n      actionName = (0, _emberMetal.get)(this, 'attrs.' + action) || (0, _emberMetal.get)(this, action);\n      actionName = validateAction(this, actionName);\n\n      // If no action name for that action could be found, just abort.\n      if (actionName === undefined) {\n        return;\n      }\n\n      if (typeof actionName === 'function') {\n        actionName.apply(undefined, contexts);\n      } else {\n        this.triggerAction({\n          action: actionName,\n          actionContext: contexts\n        });\n      }\n    },\n    send: function (actionName) {\n      for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n\n      var action = this.actions && this.actions[actionName];\n\n      if (action) {\n        var shouldBubble = action.apply(this, args) === true;\n        if (!shouldBubble) {\n          return;\n        }\n      }\n\n      var target = (0, _emberMetal.get)(this, 'target');\n      if (target) {\n        (true && !(typeof target.send === 'function') && (0, _emberDebug.assert)('The `target` for ' + this + ' (' + target + ') does not have a `send` method', typeof target.send === 'function'));\n\n        target.send.apply(target, arguments);\n      } else {\n        (true && !(action) && (0, _emberDebug.assert)((0, _emberUtils.inspect)(this) + ' had no action handler for: ' + actionName, action));\n      }\n    }\n  });\n});","enifed('ember-views/mixins/child_views_support', ['exports', 'ember-utils', 'ember-metal', 'ember-views/system/utils'], function (exports, _emberUtils, _emberMetal, _utils) {\n  'use strict';\n\n  exports.default = _emberMetal.Mixin.create({\n    init: function () {\n      this._super.apply(this, arguments);\n      (0, _utils.initChildViews)(this);\n    },\n\n\n    /**\n      Array of child views. You should never edit this array directly.\n       @property childViews\n      @type Array\n      @default []\n      @private\n    */\n    childViews: (0, _emberMetal.descriptor)({\n      configurable: false,\n      enumerable: false,\n      get: function () {\n        return (0, _utils.getChildViews)(this);\n      }\n    }),\n\n    appendChild: function (view) {\n      this.linkChild(view);\n      (0, _utils.addChildView)(this, view);\n    },\n    linkChild: function (instance) {\n      if (!(0, _emberUtils.getOwner)(instance)) {\n        (0, _emberUtils.setOwner)(instance, (0, _emberUtils.getOwner)(this));\n      }\n    }\n  });\n});","enifed('ember-views/mixins/class_names_support', ['exports', 'ember-metal', 'ember-debug'], function (exports, _emberMetal, _emberDebug) {\n  'use strict';\n\n  /**\n  @module ember\n  */\n\n  var EMPTY_ARRAY = Object.freeze([]);\n\n  /**\n    @class ClassNamesSupport\n    @namespace Ember\n    @private\n  */\n  exports.default = _emberMetal.Mixin.create({\n    concatenatedProperties: ['classNames', 'classNameBindings'],\n\n    init: function () {\n      this._super.apply(this, arguments);\n\n      (true && !((0, _emberMetal.descriptorFor)(this, 'classNameBindings') === undefined && Array.isArray(this.classNameBindings)) && (0, _emberDebug.assert)('Only arrays are allowed for \\'classNameBindings\\'', (0, _emberMetal.descriptorFor)(this, 'classNameBindings') === undefined && Array.isArray(this.classNameBindings)));\n      (true && !((0, _emberMetal.descriptorFor)(this, 'classNames') === undefined && Array.isArray(this.classNames)) && (0, _emberDebug.assert)('Only arrays of static class strings are allowed for \\'classNames\\'. For dynamic classes, use \\'classNameBindings\\'.', (0, _emberMetal.descriptorFor)(this, 'classNames') === undefined && Array.isArray(this.classNames)));\n    },\n\n\n    /**\n      Standard CSS class names to apply to the view's outer element. This\n      property automatically inherits any class names defined by the view's\n      superclasses as well.\n       @property classNames\n      @type Array\n      @default ['ember-view']\n      @public\n    */\n    classNames: EMPTY_ARRAY,\n\n    /**\n      A list of properties of the view to apply as class names. If the property\n      is a string value, the value of that string will be applied as a class\n      name.\n       ```javascript\n      // Applies the 'high' class to the view element\n      import Component from '@ember/component';\n      Component.extend({\n        classNameBindings: ['priority'],\n        priority: 'high'\n      });\n      ```\n       If the value of the property is a Boolean, the name of that property is\n      added as a dasherized class name.\n       ```javascript\n      // Applies the 'is-urgent' class to the view element\n      import Component from '@ember/component';\n      Component.extend({\n        classNameBindings: ['isUrgent'],\n        isUrgent: true\n      });\n      ```\n       If you would prefer to use a custom value instead of the dasherized\n      property name, you can pass a binding like this:\n       ```javascript\n      // Applies the 'urgent' class to the view element\n      import Component from '@ember/component';\n      Component.extend({\n        classNameBindings: ['isUrgent:urgent'],\n        isUrgent: true\n      });\n      ```\n       This list of properties is inherited from the component's superclasses as well.\n       @property classNameBindings\n      @type Array\n      @default []\n      @public\n    */\n    classNameBindings: EMPTY_ARRAY\n  });\n});","enifed('ember-views/mixins/text_support', ['exports', 'ember-metal', 'ember-runtime'], function (exports, _emberMetal, _emberRuntime) {\n  'use strict';\n\n  /**\n  @module ember\n  */\n\n  var KEY_EVENTS = {\n    13: 'insertNewline',\n    27: 'cancel'\n  };\n\n  /**\n    `TextSupport` is a shared mixin used by both `TextField` and\n    `TextArea`. `TextSupport` adds a number of methods that allow you to\n    specify a controller action to invoke when a certain event is fired on your\n    text field or textarea. The specified controller action would get the current\n    value of the field passed in as the only argument unless the value of\n    the field is empty. In that case, the instance of the field itself is passed\n    in as the only argument.\n  \n    Let's use the pressing of the escape key as an example. If you wanted to\n    invoke a controller action when a user presses the escape key while on your\n    field, you would use the `escape-press` attribute on your field like so:\n  \n    ```handlebars\n      {{! application.hbs}}\n  \n      {{input escape-press='alertUser'}}\n    ```\n  \n    ```javascript\n        import Application from '@ember/application';\n        import Controller from '@ember/controller';\n        App = Application.create();\n  \n        App.ApplicationController = Controller.extend({\n          actions: {\n            alertUser: function ( currentValue ) {\n              alert( 'escape pressed, current value: ' + currentValue );\n            }\n          }\n        });\n    ```\n  \n    The following chart is a visual representation of what takes place when the\n    escape key is pressed in this scenario:\n  \n    ```\n    The Template\n    +---------------------------+\n    |                           |\n    | escape-press='alertUser'  |\n    |                           |          TextSupport Mixin\n    +----+----------------------+          +-------------------------------+\n         |                                 | cancel method                 |\n         |      escape button pressed      |                               |\n         +-------------------------------> | checks for the `escape-press` |\n                                           | attribute and pulls out the   |\n         +-------------------------------+ | `alertUser` value             |\n         |     action name 'alertUser'     +-------------------------------+\n         |     sent to controller\n         v\n    Controller\n    +------------------------------------------ +\n    |                                           |\n    |  actions: {                               |\n    |     alertUser: function( currentValue ){  |\n    |       alert( 'the esc key was pressed!' ) |\n    |     }                                     |\n    |  }                                        |\n    |                                           |\n    +-------------------------------------------+\n    ```\n  \n    Here are the events that we currently support along with the name of the\n    attribute you would need to use on your field. To reiterate, you would use the\n    attribute name like so:\n  \n    ```handlebars\n      {{input attribute-name='controllerAction'}}\n    ```\n  \n    ```\n    +--------------------+----------------+\n    |                    |                |\n    | event              | attribute name |\n    +--------------------+----------------+\n    | new line inserted  | insert-newline |\n    |                    |                |\n    | enter key pressed  | insert-newline |\n    |                    |                |\n    | cancel key pressed | escape-press   |\n    |                    |                |\n    | focusin            | focus-in       |\n    |                    |                |\n    | focusout           | focus-out      |\n    |                    |                |\n    | keypress           | key-press      |\n    |                    |                |\n    | keyup              | key-up         |\n    |                    |                |\n    | keydown            | key-down       |\n    +--------------------+----------------+\n    ```\n  \n    @class TextSupport\n    @namespace Ember\n    @uses Ember.TargetActionSupport\n    @extends Mixin\n    @private\n  */\n  exports.default = _emberMetal.Mixin.create(_emberRuntime.TargetActionSupport, {\n    value: '',\n\n    attributeBindings: ['autocapitalize', 'autocorrect', 'autofocus', 'disabled', 'form', 'maxlength', 'minlength', 'placeholder', 'readonly', 'required', 'selectionDirection', 'spellcheck', 'tabindex', 'title'],\n    placeholder: null,\n    disabled: false,\n    maxlength: null,\n\n    init: function () {\n      this._super.apply(this, arguments);\n      this.on('paste', this, this._elementValueDidChange);\n      this.on('cut', this, this._elementValueDidChange);\n      this.on('input', this, this._elementValueDidChange);\n    },\n\n\n    /**\n      Whether the `keyUp` event that triggers an `action` to be sent continues\n      propagating to other views.\n       By default, when the user presses the return key on their keyboard and\n      the text field has an `action` set, the action will be sent to the view's\n      controller and the key event will stop propagating.\n       If you would like parent views to receive the `keyUp` event even after an\n      action has been dispatched, set `bubbles` to true.\n       @property bubbles\n      @type Boolean\n      @default false\n      @private\n    */\n    bubbles: false,\n\n    interpretKeyEvents: function (event) {\n      var map = KEY_EVENTS;\n      var method = map[event.keyCode];\n\n      this._elementValueDidChange();\n      if (method) {\n        return this[method](event);\n      }\n    },\n    _elementValueDidChange: function () {\n      (0, _emberMetal.set)(this, 'value', this.element.value);\n    },\n    change: function (event) {\n      this._elementValueDidChange(event);\n    },\n\n\n    /**\n      Allows you to specify a controller action to invoke when either the `enter`\n      key is pressed or, in the case of the field being a textarea, when a newline\n      is inserted. To use this method, give your field an `insert-newline`\n      attribute. The value of that attribute should be the name of the action\n      in your controller that you wish to invoke.\n       For an example on how to use the `insert-newline` attribute, please\n      reference the example near the top of this file.\n       @method insertNewline\n      @param {Event} event\n      @private\n    */\n    insertNewline: function (event) {\n      sendAction('enter', this, event);\n      sendAction('insert-newline', this, event);\n    },\n\n\n    /**\n      Allows you to specify a controller action to invoke when the escape button\n      is pressed. To use this method, give your field an `escape-press`\n      attribute. The value of that attribute should be the name of the action\n      in your controller that you wish to invoke.\n       For an example on how to use the `escape-press` attribute, please reference\n      the example near the top of this file.\n       @method cancel\n      @param {Event} event\n      @private\n    */\n    cancel: function (event) {\n      sendAction('escape-press', this, event);\n    },\n\n\n    /**\n      Allows you to specify a controller action to invoke when a field receives\n      focus. To use this method, give your field a `focus-in` attribute. The value\n      of that attribute should be the name of the action in your controller\n      that you wish to invoke.\n       For an example on how to use the `focus-in` attribute, please reference the\n      example near the top of this file.\n       @method focusIn\n      @param {Event} event\n      @private\n    */\n    focusIn: function (event) {\n      sendAction('focus-in', this, event);\n    },\n\n\n    /**\n      Allows you to specify a controller action to invoke when a field loses\n      focus. To use this method, give your field a `focus-out` attribute. The value\n      of that attribute should be the name of the action in your controller\n      that you wish to invoke.\n       For an example on how to use the `focus-out` attribute, please reference the\n      example near the top of this file.\n       @method focusOut\n      @param {Event} event\n      @private\n    */\n    focusOut: function (event) {\n      this._elementValueDidChange(event);\n      sendAction('focus-out', this, event);\n    },\n\n\n    /**\n      Allows you to specify a controller action to invoke when a key is pressed.\n      To use this method, give your field a `key-press` attribute. The value of\n      that attribute should be the name of the action in your controller you\n      that wish to invoke.\n       For an example on how to use the `key-press` attribute, please reference the\n      example near the top of this file.\n       @method keyPress\n      @param {Event} event\n      @private\n    */\n    keyPress: function (event) {\n      sendAction('key-press', this, event);\n    },\n\n\n    /**\n      Allows you to specify a controller action to invoke when a key-up event is\n      fired. To use this method, give your field a `key-up` attribute. The value\n      of that attribute should be the name of the action in your controller\n      that you wish to invoke.\n       For an example on how to use the `key-up` attribute, please reference the\n      example near the top of this file.\n       @method keyUp\n      @param {Event} event\n      @private\n    */\n    keyUp: function (event) {\n      this.interpretKeyEvents(event);\n\n      this.sendAction('key-up', (0, _emberMetal.get)(this, 'value'), event);\n    },\n\n\n    /**\n      Allows you to specify a controller action to invoke when a key-down event is\n      fired. To use this method, give your field a `key-down` attribute. The value\n      of that attribute should be the name of the action in your controller that\n      you wish to invoke.\n       For an example on how to use the `key-down` attribute, please reference the\n      example near the top of this file.\n       @method keyDown\n      @param {Event} event\n      @private\n    */\n    keyDown: function (event) {\n      this.sendAction('key-down', (0, _emberMetal.get)(this, 'value'), event);\n    }\n  });\n\n\n  // In principle, this shouldn't be necessary, but the legacy\n  // sendAction semantics for TextField are different from\n  // the component semantics so this method normalizes them.\n  function sendAction(eventName, view, event) {\n    var action = (0, _emberMetal.get)(view, 'attrs.' + eventName) || (0, _emberMetal.get)(view, eventName);\n    var value = (0, _emberMetal.get)(view, 'value');\n\n    view.sendAction(eventName, value);\n\n    if (action && !(0, _emberMetal.get)(view, 'bubbles')) {\n      event.stopPropagation();\n    }\n  }\n});","enifed('ember-views/mixins/view_state_support', ['exports', 'ember-metal'], function (exports, _emberMetal) {\n  'use strict';\n\n  exports.default = _emberMetal.Mixin.create({\n    _transitionTo: function (state) {\n      var priorState = this._currentState;\n      var currentState = this._currentState = this._states[state];\n      this._state = state;\n\n      if (priorState && priorState.exit) {\n        priorState.exit(this);\n      }\n      if (currentState.enter) {\n        currentState.enter(this);\n      }\n    }\n  });\n});","enifed('ember-views/mixins/view_support', ['exports', 'ember-utils', 'ember-metal', 'ember-debug', 'ember-environment', 'ember-views/system/utils', 'ember-runtime/system/core_object', 'ember-views/system/jquery'], function (exports, _emberUtils, _emberMetal, _emberDebug, _emberEnvironment, _utils, _core_object, _jquery) {\n  'use strict';\n\n  var _Mixin$create;\n\n  function K() {\n    return this;\n  }\n\n  /**\n   @class ViewMixin\n   @namespace Ember\n   @private\n  */\n  exports.default = _emberMetal.Mixin.create((_Mixin$create = {\n    /**\n      A list of properties of the view to apply as attributes. If the property\n      is a string value, the value of that string will be applied as the value\n      for an attribute of the property's name.\n       The following example creates a tag like `<div priority=\"high\" />`.\n       ```app/components/my-component.js\n      import Component from '@ember/component';\n       export default Component.extend({\n        attributeBindings: ['priority'],\n        priority: 'high'\n      });\n      ```\n       If the value of the property is a Boolean, the attribute is treated as\n      an HTML Boolean attribute. It will be present if the property is `true`\n      and omitted if the property is `false`.\n       The following example creates markup like `<div visible />`.\n       ```app/components/my-component.js\n      import Component from '@ember/component';\n       export default Component.extend({\n        attributeBindings: ['visible'],\n        visible: true\n      });\n      ```\n       If you would prefer to use a custom value instead of the property name,\n      you can create the same markup as the last example with a binding like\n      this:\n       ```app/components/my-component.js\n      import Component from '@ember/component';\n       export default Component.extend({\n        attributeBindings: ['isVisible:visible'],\n        isVisible: true\n      });\n      ```\n       This list of attributes is inherited from the component's superclasses,\n      as well.\n       @property attributeBindings\n      @type Array\n      @default []\n      @public\n     */\n    concatenatedProperties: ['attributeBindings']\n\n  }, _Mixin$create[_core_object.POST_INIT] = function () {\n    if (_emberEnvironment.ENV._ENABLE_DID_INIT_ATTRS_SUPPORT === true) {\n      this.trigger('didInitAttrs');\n    }\n    this.trigger('didReceiveAttrs');\n  }, _Mixin$create.nearestOfType = function (klass) {\n    var view = this.parentView;\n    var isOfType = klass instanceof _emberMetal.Mixin ? function (view) {\n      return klass.detect(view);\n    } : function (view) {\n      return klass.detect(view.constructor);\n    };\n\n    while (view) {\n      if (isOfType(view)) {\n        return view;\n      }\n      view = view.parentView;\n    }\n  }, _Mixin$create.nearestWithProperty = function (property) {\n    var view = this.parentView;\n\n    while (view) {\n      if (property in view) {\n        return view;\n      }\n      view = view.parentView;\n    }\n  }, _Mixin$create.rerender = function () {\n    return this._currentState.rerender(this);\n  }, _Mixin$create.element = (0, _emberMetal.descriptor)({\n    configurable: false,\n    enumerable: false,\n    get: function () {\n      return this.renderer.getElement(this);\n    }\n  }), _Mixin$create.$ = function (sel) {\n    (true && !(this.tagName !== '') && (0, _emberDebug.assert)('You cannot access this.$() on a component with `tagName: \\'\\'` specified.', this.tagName !== ''));\n    (true && !(!_jquery.jQueryDisabled) && (0, _emberDebug.assert)('You cannot access this.$() with `jQuery` disabled.', !_jquery.jQueryDisabled));\n\n    if (this.element) {\n      return sel ? (0, _jquery.default)(sel, this.element) : (0, _jquery.default)(this.element);\n    }\n  }, _Mixin$create.appendTo = function (selector) {\n    var env = this._environment || _emberEnvironment.environment;\n    var target = void 0;\n\n    if (env.hasDOM) {\n      target = typeof selector === 'string' ? document.querySelector(selector) : selector;\n\n      (true && !(target) && (0, _emberDebug.assert)('You tried to append to (' + selector + ') but that isn\\'t in the DOM', target));\n      (true && !(!(0, _utils.matches)(target, '.ember-view')) && (0, _emberDebug.assert)('You cannot append to an existing Ember.View.', !(0, _utils.matches)(target, '.ember-view')));\n      (true && !(function () {\n        var node = target.parentNode;\n        while (node) {\n          if (node.nodeType !== 9 && (0, _utils.matches)(node, '.ember-view')) {\n            return false;\n          }\n\n          node = node.parentNode;\n        }\n\n        return true;\n      }()) && (0, _emberDebug.assert)('You cannot append to an existing Ember.View.', function () {\n        var node = target.parentNode;while (node) {\n          if (node.nodeType !== 9 && (0, _utils.matches)(node, '.ember-view')) {\n            return false;\n          }node = node.parentNode;\n        }return true;\n      }()));\n    } else {\n      target = selector;\n\n      (true && !(typeof target !== 'string') && (0, _emberDebug.assert)('You tried to append to a selector string (' + selector + ') in an environment without jQuery', typeof target !== 'string'));\n      (true && !(typeof selector.appendChild === 'function') && (0, _emberDebug.assert)('You tried to append to a non-Element (' + selector + ') in an environment without jQuery', typeof selector.appendChild === 'function'));\n    }\n\n    this.renderer.appendTo(this, target);\n\n    return this;\n  }, _Mixin$create.append = function () {\n    return this.appendTo(document.body);\n  }, _Mixin$create.elementId = null, _Mixin$create.findElementInParentElement = function (parentElem) {\n    var id = '#' + this.elementId;\n    return (0, _jquery.default)(id)[0] || (0, _jquery.default)(id, parentElem)[0];\n  }, _Mixin$create.willInsertElement = K, _Mixin$create.didInsertElement = K, _Mixin$create.willClearRender = K, _Mixin$create.destroy = function () {\n    this._super.apply(this, arguments);\n    this._currentState.destroy(this);\n  }, _Mixin$create.willDestroyElement = K, _Mixin$create.parentViewDidChange = K, _Mixin$create.tagName = null, _Mixin$create.init = function () {\n    this._super.apply(this, arguments);\n\n    // tslint:disable-next-line:max-line-length\n    (true && !((0, _emberMetal.descriptorFor)(this, 'elementId') === undefined) && (0, _emberDebug.assert)('You cannot use a computed property for the component\\'s `elementId` (' + this + ').', (0, _emberMetal.descriptorFor)(this, 'elementId') === undefined));\n\n    // tslint:disable-next-line:max-line-length\n\n    (true && !((0, _emberMetal.descriptorFor)(this, 'tagName') === undefined) && (0, _emberDebug.assert)('You cannot use a computed property for the component\\'s `tagName` (' + this + ').', (0, _emberMetal.descriptorFor)(this, 'tagName') === undefined));\n\n\n    if (!this.elementId && this.tagName !== '') {\n      this.elementId = (0, _emberUtils.guidFor)(this);\n    }\n\n    if (_emberEnvironment.environment._ENABLE_DID_INIT_ATTRS_SUPPORT) {\n      (true && !(typeof this.didInitAttrs !== 'function') && (0, _emberDebug.deprecate)('[DEPRECATED] didInitAttrs called in ' + this.toString() + '.', typeof this.didInitAttrs !== 'function', {\n        id: 'ember-views.did-init-attrs',\n        until: '3.0.0',\n        url: 'https://emberjs.com/deprecations/v2.x#toc_ember-component-didinitattrs'\n      }));\n    } else {\n      (true && !(typeof this.didInitAttrs !== 'function') && (0, _emberDebug.assert)('didInitAttrs called in ' + this.toString() + ' is no longer supported.', typeof this.didInitAttrs !== 'function'));\n    }\n\n    (true && !(!this.render) && (0, _emberDebug.assert)('Using a custom `.render` function is no longer supported.', !this.render));\n  }, _Mixin$create.__defineNonEnumerable = function (property) {\n    this[property.name] = property.descriptor.value;\n  }, _Mixin$create.handleEvent = function (eventName, evt) {\n    return this._currentState.handleEvent(this, eventName, evt);\n  }, _Mixin$create));\n});","enifed(\"ember-views/system/action_manager\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.default = ActionManager;\n  /**\n  @module ember\n  */\n\n  function ActionManager() {}\n\n  /**\n    Global action id hash.\n  \n    @private\n    @property registeredActions\n    @type Object\n  */\n  ActionManager.registeredActions = {};\n});","enifed('ember-views/system/event_dispatcher', ['exports', 'ember-utils', 'ember-debug', 'ember-metal', 'ember-runtime', 'ember-views/system/jquery', 'ember-views/system/action_manager', 'ember-views/compat/fallback-view-registry'], function (exports, _emberUtils, _emberDebug, _emberMetal, _emberRuntime, _jquery, _action_manager, _fallbackViewRegistry) {\n  'use strict';\n\n  var HAS_JQUERY = _jquery.default !== undefined; /**\n                                                  @module ember\n                                                  */\n\n  var ROOT_ELEMENT_CLASS = 'ember-application';\n  var ROOT_ELEMENT_SELECTOR = '.' + ROOT_ELEMENT_CLASS;\n\n  /**\n    `Ember.EventDispatcher` handles delegating browser events to their\n    corresponding `Ember.Views.` For example, when you click on a view,\n    `Ember.EventDispatcher` ensures that that view's `mouseDown` method gets\n    called.\n  \n    @class EventDispatcher\n    @namespace Ember\n    @private\n    @extends Ember.Object\n  */\n  exports.default = _emberRuntime.Object.extend({\n\n    /**\n      The set of events names (and associated handler function names) to be setup\n      and dispatched by the `EventDispatcher`. Modifications to this list can be done\n      at setup time, generally via the `Application.customEvents` hash.\n       To add new events to be listened to:\n       ```javascript\n      import Application from '@ember/application';\n       let App = Application.create({\n        customEvents: {\n          paste: 'paste'\n        }\n      });\n      ```\n       To prevent default events from being listened to:\n       ```javascript\n      import Application from '@ember/application';\n       let App = Application.create({\n        customEvents: {\n          mouseenter: null,\n          mouseleave: null\n        }\n      });\n      ```\n      @property events\n      @type Object\n      @private\n    */\n    events: {\n      touchstart: 'touchStart',\n      touchmove: 'touchMove',\n      touchend: 'touchEnd',\n      touchcancel: 'touchCancel',\n      keydown: 'keyDown',\n      keyup: 'keyUp',\n      keypress: 'keyPress',\n      mousedown: 'mouseDown',\n      mouseup: 'mouseUp',\n      contextmenu: 'contextMenu',\n      click: 'click',\n      dblclick: 'doubleClick',\n      mousemove: 'mouseMove',\n      focusin: 'focusIn',\n      focusout: 'focusOut',\n      mouseenter: 'mouseEnter',\n      mouseleave: 'mouseLeave',\n      submit: 'submit',\n      input: 'input',\n      change: 'change',\n      dragstart: 'dragStart',\n      drag: 'drag',\n      dragenter: 'dragEnter',\n      dragleave: 'dragLeave',\n      dragover: 'dragOver',\n      drop: 'drop',\n      dragend: 'dragEnd'\n    },\n\n    /**\n      The root DOM element to which event listeners should be attached. Event\n      listeners will be attached to the document unless this is overridden.\n       Can be specified as a DOMElement or a selector string.\n       The default body is a string since this may be evaluated before document.body\n      exists in the DOM.\n       @private\n      @property rootElement\n      @type DOMElement\n      @default 'body'\n    */\n    rootElement: 'body',\n\n    init: function () {\n      var _this = this;\n\n      this._super();\n\n      (true && !(function () {\n        var owner = (0, _emberUtils.getOwner)(_this);\n        var environment = owner.lookup('-environment:main');\n\n        return environment.isInteractive;\n      }()) && (0, _emberDebug.assert)('EventDispatcher should never be instantiated in fastboot mode. Please report this as an Ember bug.', function () {\n        var owner = (0, _emberUtils.getOwner)(_this);var environment = owner.lookup('-environment:main');return environment.isInteractive;\n      }()));\n\n\n      this._eventHandlers = Object.create(null);\n    },\n\n\n    /**\n      Sets up event listeners for standard browser events.\n       This will be called after the browser sends a `DOMContentReady` event. By\n      default, it will set up all of the listeners on the document body. If you\n      would like to register the listeners on a different element, set the event\n      dispatcher's `root` property.\n       @private\n      @method setup\n      @param addedEvents {Object}\n    */\n    setup: function (addedEvents, _rootElement) {\n      var event = void 0,\n          rootElement = void 0;\n      var events = this._finalEvents = (0, _emberUtils.assign)({}, (0, _emberMetal.get)(this, 'events'), addedEvents);\n\n      if (!(0, _emberMetal.isNone)(_rootElement)) {\n        (0, _emberMetal.set)(this, 'rootElement', _rootElement);\n      }\n\n      var rootElementSelector = (0, _emberMetal.get)(this, 'rootElement');\n      if (HAS_JQUERY) {\n        rootElement = (0, _jquery.default)(rootElementSelector);\n        (true && !(!rootElement.is(ROOT_ELEMENT_SELECTOR)) && (0, _emberDebug.assert)('You cannot use the same root element (' + (rootElement.selector || rootElement[0].tagName) + ') multiple times in an Ember.Application', !rootElement.is(ROOT_ELEMENT_SELECTOR)));\n        (true && !(!rootElement.closest(ROOT_ELEMENT_SELECTOR).length) && (0, _emberDebug.assert)('You cannot make a new Ember.Application using a root element that is a descendent of an existing Ember.Application', !rootElement.closest(ROOT_ELEMENT_SELECTOR).length));\n        (true && !(!rootElement.find(ROOT_ELEMENT_SELECTOR).length) && (0, _emberDebug.assert)('You cannot make a new Ember.Application using a root element that is an ancestor of an existing Ember.Application', !rootElement.find(ROOT_ELEMENT_SELECTOR).length));\n\n\n        rootElement.addClass(ROOT_ELEMENT_CLASS);\n\n        if (!rootElement.is(ROOT_ELEMENT_SELECTOR)) {\n          throw new TypeError('Unable to add \\'' + ROOT_ELEMENT_CLASS + '\\' class to root element (' + (rootElement.selector || rootElement[0].tagName) + '). Make sure you set rootElement to the body or an element in the body.');\n        }\n      } else {\n        if (typeof rootElementSelector !== 'string') {\n          rootElement = rootElementSelector;\n        } else {\n          rootElement = document.querySelector(rootElementSelector);\n        }\n\n        (true && !(!rootElement.classList.contains(ROOT_ELEMENT_CLASS)) && (0, _emberDebug.assert)('You cannot use the same root element (' + ((0, _emberMetal.get)(this, 'rootElement') || rootElement.tagName) + ') multiple times in an Ember.Application', !rootElement.classList.contains(ROOT_ELEMENT_CLASS)));\n        (true && !(function () {\n          var target = rootElement.parentNode;\n          do {\n            if (target.classList.contains(ROOT_ELEMENT_CLASS)) {\n              return false;\n            }\n\n            target = target.parentNode;\n          } while (target && target.nodeType === 1);\n\n          return true;\n        }()) && (0, _emberDebug.assert)('You cannot make a new Ember.Application using a root element that is a descendent of an existing Ember.Application', function () {\n          var target = rootElement.parentNode;do {\n            if (target.classList.contains(ROOT_ELEMENT_CLASS)) {\n              return false;\n            }target = target.parentNode;\n          } while (target && target.nodeType === 1);return true;\n        }()));\n        (true && !(!rootElement.querySelector(ROOT_ELEMENT_SELECTOR)) && (0, _emberDebug.assert)('You cannot make a new Ember.Application using a root element that is an ancestor of an existing Ember.Application', !rootElement.querySelector(ROOT_ELEMENT_SELECTOR)));\n\n\n        rootElement.classList.add(ROOT_ELEMENT_CLASS);\n\n        (true && !(rootElement.classList.contains(ROOT_ELEMENT_CLASS)) && (0, _emberDebug.assert)('Unable to add \\'' + ROOT_ELEMENT_CLASS + '\\' class to root element (' + ((0, _emberMetal.get)(this, 'rootElement') || rootElement.tagName) + '). Make sure you set rootElement to the body or an element in the body.', rootElement.classList.contains(ROOT_ELEMENT_CLASS)));\n      }\n\n      var viewRegistry = this._getViewRegistry();\n\n      for (event in events) {\n        if (events.hasOwnProperty(event)) {\n          this.setupHandler(rootElement, event, events[event], viewRegistry);\n        }\n      }\n    },\n\n\n    /**\n      Registers an event listener on the rootElement. If the given event is\n      triggered, the provided event handler will be triggered on the target view.\n       If the target view does not implement the event handler, or if the handler\n      returns `false`, the parent view will be called. The event will continue to\n      bubble to each successive parent view until it reaches the top.\n       @private\n      @method setupHandler\n      @param {Element} rootElement\n      @param {String} event the browser-originated event to listen to\n      @param {String} eventName the name of the method to call on the view\n      @param {Object} viewRegistry\n    */\n    setupHandler: function (rootElement, event, eventName, viewRegistry) {\n      if (eventName === null) {\n        return;\n      }\n\n      if (HAS_JQUERY) {\n        rootElement.on(event + '.ember', '.ember-view', function (evt) {\n          var view = viewRegistry[this.id];\n          var result = true;\n\n          if (view) {\n            result = view.handleEvent(eventName, evt);\n          }\n\n          return result;\n        });\n\n        rootElement.on(event + '.ember', '[data-ember-action]', function (evt) {\n          var attributes = evt.currentTarget.attributes;\n          var handledActions = [];\n\n          for (var i = 0; i < attributes.length; i++) {\n            var attr = attributes.item(i);\n            var attrName = attr.name;\n\n            if (attrName.lastIndexOf('data-ember-action-', 0) !== -1) {\n              var action = _action_manager.default.registeredActions[attr.value];\n\n              // We have to check for action here since in some cases, jQuery will trigger\n              // an event on `removeChild` (i.e. focusout) after we've already torn down the\n              // action handlers for the view.\n              if (action && action.eventName === eventName && handledActions.indexOf(action) === -1) {\n                action.handler(evt);\n                // Action handlers can mutate state which in turn creates new attributes on the element.\n                // This effect could cause the `data-ember-action` attribute to shift down and be invoked twice.\n                // To avoid this, we keep track of which actions have been handled.\n                handledActions.push(action);\n              }\n            }\n          }\n        });\n      } else {\n        var viewHandler = function (target, event) {\n          var view = viewRegistry[target.id];\n          var result = true;\n\n          if (view) {\n            result = view.handleEvent(eventName, event);\n          }\n\n          return result;\n        };\n\n        var actionHandler = function (target, event) {\n          var actionId = target.getAttribute('data-ember-action');\n          var actions = _action_manager.default.registeredActions[actionId];\n\n          // In Glimmer2 this attribute is set to an empty string and an additional\n          // attribute it set for each action on a given element. In this case, the\n          // attributes need to be read so that a proper set of action handlers can\n          // be coalesced.\n          if (actionId === '') {\n            var attributes = target.attributes;\n            var attributeCount = attributes.length;\n\n            actions = [];\n\n            for (var i = 0; i < attributeCount; i++) {\n              var attr = attributes.item(i);\n              var attrName = attr.name;\n\n              if (attrName.indexOf('data-ember-action-') === 0) {\n                actions = actions.concat(_action_manager.default.registeredActions[attr.value]);\n              }\n            }\n          }\n\n          // We have to check for actions here since in some cases, jQuery will trigger\n          // an event on `removeChild` (i.e. focusout) after we've already torn down the\n          // action handlers for the view.\n          if (!actions) {\n            return;\n          }\n\n          for (var index = 0; index < actions.length; index++) {\n            var action = actions[index];\n\n            if (action && action.eventName === eventName) {\n              return action.handler(event);\n            }\n          }\n        };\n\n        var handleEvent = this._eventHandlers[event] = function (event) {\n          var target = event.target;\n\n          do {\n            if (viewRegistry[target.id]) {\n              if (viewHandler(target, event) === false) {\n                event.preventDefault();\n                event.stopPropagation();\n                break;\n              }\n            } else if (target.hasAttribute('data-ember-action')) {\n              if (actionHandler(target, event) === false) {\n                break;\n              }\n            }\n\n            target = target.parentNode;\n          } while (target && target.nodeType === 1);\n        };\n\n        rootElement.addEventListener(event, handleEvent);\n      }\n    },\n    _getViewRegistry: function () {\n      var owner = (0, _emberUtils.getOwner)(this);\n      var viewRegistry = owner && owner.lookup('-view-registry:main') || _fallbackViewRegistry.default;\n\n      return viewRegistry;\n    },\n    destroy: function () {\n      var rootElementSelector = (0, _emberMetal.get)(this, 'rootElement');\n      var rootElement = void 0;\n      if (rootElementSelector.nodeType) {\n        rootElement = rootElementSelector;\n      } else {\n        rootElement = document.querySelector(rootElementSelector);\n      }\n\n      if (!rootElement) {\n        return;\n      }\n\n      if (HAS_JQUERY) {\n        (0, _jquery.default)(rootElementSelector).off('.ember', '**');\n      } else {\n        for (var event in this._eventHandlers) {\n          rootElement.removeEventListener(event, this._eventHandlers[event]);\n        }\n      }\n\n      rootElement.classList.remove(ROOT_ELEMENT_CLASS);\n\n      return this._super.apply(this, arguments);\n    },\n    toString: function () {\n      return '(EventDispatcher)';\n    }\n  });\n});","enifed('ember-views/system/jquery', ['exports', 'ember-environment'], function (exports, _emberEnvironment) {\n  'use strict';\n\n  exports.jQueryDisabled = undefined;\n\n\n  var jQuery = void 0;\n  var jQueryDisabled = exports.jQueryDisabled = false;\n\n  if (_emberEnvironment.environment.hasDOM) {\n    jQuery = _emberEnvironment.context.imports.jQuery;\n\n    if (jQuery) {\n      if (jQuery.event.addProp) {\n        jQuery.event.addProp('dataTransfer');\n      } else {\n        // http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#dndevents\n        ['dragstart', 'drag', 'dragenter', 'dragleave', 'dragover', 'drop', 'dragend'].forEach(function (eventName) {\n          jQuery.event.fixHooks[eventName] = {\n            props: ['dataTransfer']\n          };\n        });\n      }\n    } else {\n      exports.jQueryDisabled = jQueryDisabled = true;\n    }\n  }\n\n  exports.default = jQuery;\n});","enifed('ember-views/system/lookup_partial', ['exports', 'ember-debug'], function (exports, _emberDebug) {\n  'use strict';\n\n  exports.default = lookupPartial;\n  exports.hasPartial = hasPartial;\n\n\n  function parseUnderscoredName(templateName) {\n    var nameParts = templateName.split('/');\n    var lastPart = nameParts[nameParts.length - 1];\n\n    nameParts[nameParts.length - 1] = '_' + lastPart;\n\n    return nameParts.join('/');\n  }\n\n  function lookupPartial(templateName, owner) {\n    if (templateName == null) {\n      return;\n    }\n\n    var template = templateFor(owner, parseUnderscoredName(templateName), templateName);\n\n    (true && !(!!template) && (0, _emberDebug.assert)('Unable to find partial with name \"' + templateName + '\"', !!template));\n\n\n    return template;\n  }\n\n  function hasPartial(name, owner) {\n    if (!owner) {\n      throw new _emberDebug.Error('Container was not found when looking up a views template. ' + 'This is most likely due to manually instantiating an Ember.View. ' + 'See: http://git.io/EKPpnA');\n    }\n\n    return owner.hasRegistration('template:' + parseUnderscoredName(name)) || owner.hasRegistration('template:' + name);\n  }\n\n  function templateFor(owner, underscored, name) {\n    if (!name) {\n      return;\n    }\n    (true && !(name.indexOf('.') === -1) && (0, _emberDebug.assert)('templateNames are not allowed to contain periods: ' + name, name.indexOf('.') === -1));\n\n\n    if (!owner) {\n      throw new _emberDebug.Error('Container was not found when looking up a views template. ' + 'This is most likely due to manually instantiating an Ember.View. ' + 'See: http://git.io/EKPpnA');\n    }\n\n    return owner.lookup('template:' + underscored) || owner.lookup('template:' + name);\n  }\n});","enifed('ember-views/system/utils', ['exports', 'ember-utils'], function (exports, _emberUtils) {\n  'use strict';\n\n  exports.elMatches = undefined;\n  exports.isSimpleClick = isSimpleClick;\n  exports.constructStyleDeprecationMessage = constructStyleDeprecationMessage;\n  exports.getRootViews = getRootViews;\n  exports.getViewId = getViewId;\n  exports.getViewElement = getViewElement;\n  exports.initViewElement = initViewElement;\n  exports.setViewElement = setViewElement;\n  exports.getChildViews = getChildViews;\n  exports.initChildViews = initChildViews;\n  exports.addChildView = addChildView;\n  exports.collectChildViews = collectChildViews;\n  exports.getViewBounds = getViewBounds;\n  exports.getViewRange = getViewRange;\n  exports.getViewClientRects = getViewClientRects;\n  exports.getViewBoundingClientRect = getViewBoundingClientRect;\n  exports.matches = matches;\n\n\n  /**\n  @module ember\n  */\n\n  function isSimpleClick(event) {\n    var modifier = event.shiftKey || event.metaKey || event.altKey || event.ctrlKey;\n    var secondaryClick = event.which > 1; // IE9 may return undefined\n\n    return !modifier && !secondaryClick;\n  } /* globals Element */\n  function constructStyleDeprecationMessage(affectedStyle) {\n    return '' + 'Binding style attributes may introduce cross-site scripting vulnerabilities; ' + 'please ensure that values being bound are properly escaped. For more information, ' + 'including how to disable this warning, see ' + 'https://emberjs.com/deprecations/v1.x/#toc_binding-style-attributes. ' + 'Style affected: \"' + affectedStyle + '\"';\n  }\n\n  /**\n    @private\n    @method getRootViews\n    @param {Object} owner\n  */\n  function getRootViews(owner) {\n    var registry = owner.lookup('-view-registry:main');\n\n    var rootViews = [];\n\n    Object.keys(registry).forEach(function (id) {\n      var view = registry[id];\n\n      if (view.parentView === null) {\n        rootViews.push(view);\n      }\n    });\n\n    return rootViews;\n  }\n\n  /**\n    @private\n    @method getViewId\n    @param {Ember.View} view\n   */\n  function getViewId(view) {\n    if (view.tagName === '') {\n      return (0, _emberUtils.guidFor)(view);\n    } else {\n      return view.elementId || (0, _emberUtils.guidFor)(view);\n    }\n  }\n\n  var VIEW_ELEMENT = (0, _emberUtils.symbol)('VIEW_ELEMENT');\n\n  /**\n    @private\n    @method getViewElement\n    @param {Ember.View} view\n   */\n  function getViewElement(view) {\n    return view[VIEW_ELEMENT];\n  }\n\n  function initViewElement(view) {\n    view[VIEW_ELEMENT] = null;\n  }\n\n  function setViewElement(view, element) {\n    return view[VIEW_ELEMENT] = element;\n  }\n\n  var CHILD_VIEW_IDS = (0, _emberUtils.symbol)('CHILD_VIEW_IDS');\n\n  /**\n    @private\n    @method getChildViews\n    @param {Ember.View} view\n  */\n  function getChildViews(view) {\n    var owner = (0, _emberUtils.getOwner)(view);\n    var registry = owner.lookup('-view-registry:main');\n    return collectChildViews(view, registry);\n  }\n\n  function initChildViews(view) {\n    view[CHILD_VIEW_IDS] = [];\n  }\n\n  function addChildView(parent, child) {\n    parent[CHILD_VIEW_IDS].push(getViewId(child));\n  }\n\n  function collectChildViews(view, registry) {\n    var ids = [];\n    var views = [];\n\n    view[CHILD_VIEW_IDS].forEach(function (id) {\n      var view = registry[id];\n\n      if (view && !view.isDestroying && !view.isDestroyed && ids.indexOf(id) === -1) {\n        ids.push(id);\n        views.push(view);\n      }\n    });\n\n    view[CHILD_VIEW_IDS] = ids;\n\n    return views;\n  }\n\n  /**\n    @private\n    @method getViewBounds\n    @param {Ember.View} view\n  */\n  function getViewBounds(view) {\n    return view.renderer.getBounds(view);\n  }\n\n  /**\n    @private\n    @method getViewRange\n    @param {Ember.View} view\n  */\n  function getViewRange(view) {\n    var bounds = getViewBounds(view);\n\n    var range = document.createRange();\n    range.setStartBefore(bounds.firstNode);\n    range.setEndAfter(bounds.lastNode);\n\n    return range;\n  }\n\n  /**\n    `getViewClientRects` provides information about the position of the border\n    box edges of a view relative to the viewport.\n  \n    It is only intended to be used by development tools like the Ember Inspector\n    and may not work on older browsers.\n  \n    @private\n    @method getViewClientRects\n    @param {Ember.View} view\n  */\n  function getViewClientRects(view) {\n    var range = getViewRange(view);\n    return range.getClientRects();\n  }\n\n  /**\n    `getViewBoundingClientRect` provides information about the position of the\n    bounding border box edges of a view relative to the viewport.\n  \n    It is only intended to be used by development tools like the Ember Inspector\n    and may not work on older browsers.\n  \n    @private\n    @method getViewBoundingClientRect\n    @param {Ember.View} view\n  */\n  function getViewBoundingClientRect(view) {\n    var range = getViewRange(view);\n    return range.getBoundingClientRect();\n  }\n\n  /**\n    Determines if the element matches the specified selector.\n  \n    @private\n    @method matches\n    @param {DOMElement} el\n    @param {String} selector\n  */\n  var elMatches = exports.elMatches = typeof Element !== 'undefined' && (Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector);\n\n  function matches(el, selector) {\n    return elMatches.call(el, selector);\n  }\n});","enifed('ember-views/utils/lookup-component', ['exports', 'ember/features'], function (exports, _features) {\n  'use strict';\n\n  exports.default = lookupComponent;\n\n\n  function lookupModuleUnificationComponentPair(componentLookup, owner, name, options) {\n    var localComponent = componentLookup.componentFor(name, owner, options);\n    var localLayout = componentLookup.layoutFor(name, owner, options);\n\n    var globalComponent = componentLookup.componentFor(name, owner);\n    var globalLayout = componentLookup.layoutFor(name, owner);\n\n    // TODO: we shouldn't have to recheck fallback, we should have a lookup that doesn't fallback\n    if (localComponent !== undefined && globalComponent !== undefined && globalComponent.class === localComponent.class) {\n      localComponent = undefined;\n    }\n    if (localLayout !== undefined && globalLayout !== undefined && localLayout.referrer.moduleName === globalLayout.referrer.moduleName) {\n      localLayout = undefined;\n    }\n\n    if (localLayout !== undefined || localComponent !== undefined) {\n      return { layout: localLayout, component: localComponent };\n    }\n\n    return { layout: globalLayout, component: globalComponent };\n  }\n\n  function lookupComponentPair(componentLookup, owner, name, options) {\n    if (_features.EMBER_MODULE_UNIFICATION) {\n      return lookupModuleUnificationComponentPair(componentLookup, owner, name, options);\n    }\n\n    var component = componentLookup.componentFor(name, owner, options);\n    var layout = componentLookup.layoutFor(name, owner, options);\n\n    var result = { layout: layout, component: component };\n\n    return result;\n  }\n\n  function lookupComponent(owner, name, options) {\n    var componentLookup = owner.lookup('component-lookup:main');\n\n    if (options && (options.source || options.namespace)) {\n      var localResult = lookupComponentPair(componentLookup, owner, name, options);\n\n      if (localResult.component || localResult.layout) {\n        return localResult;\n      }\n    }\n\n    return lookupComponentPair(componentLookup, owner, name);\n  }\n});","enifed('ember-views/views/core_view', ['exports', 'ember-runtime', 'ember-views/system/utils', 'ember-views/views/states'], function (exports, _emberRuntime, _utils, _states) {\n  'use strict';\n\n  /**\n    `Ember.CoreView` is an abstract class that exists to give view-like behavior\n    to both Ember's main view class `Component` and other classes that don't need\n    the full functionality of `Component`.\n  \n    Unless you have specific needs for `CoreView`, you will use `Component`\n    in your applications.\n  \n    @class CoreView\n    @namespace Ember\n    @extends EmberObject\n    @deprecated Use `Component` instead.\n    @uses Evented\n    @uses Ember.ActionHandler\n    @private\n  */\n  var CoreView = _emberRuntime.FrameworkObject.extend(_emberRuntime.Evented, _emberRuntime.ActionHandler, {\n    isView: true,\n\n    _states: (0, _states.cloneStates)(_states.states),\n\n    init: function () {\n      this._super.apply(this, arguments);\n      this._state = 'preRender';\n      this._currentState = this._states.preRender;\n\n      (0, _utils.initViewElement)(this);\n\n      if (!this.renderer) {\n        throw new Error('Cannot instantiate a component without a renderer. Please ensure that you are creating ' + this + ' with a proper container/registry.');\n      }\n    },\n\n\n    /**\n      If the view is currently inserted into the DOM of a parent view, this\n      property will point to the parent of the view.\n       @property parentView\n      @type Ember.View\n      @default null\n      @private\n    */\n    parentView: null,\n\n    instrumentDetails: function (hash) {\n      hash.object = this.toString();\n      hash.containerKey = this._debugContainerKey;\n      hash.view = this;\n      return hash;\n    },\n    trigger: function (name) {\n      for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n\n      this._super.apply(this, arguments);\n      var method = this[name];\n      if (typeof method === 'function') {\n        return method.apply(this, args);\n      }\n    },\n    has: function (name) {\n      return typeof this[name] === 'function' || this._super(name);\n    }\n  });\n\n  CoreView.reopenClass({\n    isViewFactory: true\n  });\n\n  exports.default = CoreView;\n});","enifed('ember-views/views/states', ['exports', 'ember-utils', 'ember-views/views/states/default', 'ember-views/views/states/pre_render', 'ember-views/views/states/has_element', 'ember-views/views/states/in_dom', 'ember-views/views/states/destroying'], function (exports, _emberUtils, _default2, _pre_render, _has_element, _in_dom, _destroying) {\n  'use strict';\n\n  exports.states = undefined;\n  exports.cloneStates = cloneStates;\n  function cloneStates(from) {\n    var into = {};\n\n    into._default = {};\n    into.preRender = Object.create(into._default);\n    into.destroying = Object.create(into._default);\n    into.hasElement = Object.create(into._default);\n    into.inDOM = Object.create(into.hasElement);\n\n    for (var stateName in from) {\n      if (!from.hasOwnProperty(stateName)) {\n        continue;\n      }\n      (0, _emberUtils.assign)(into[stateName], from[stateName]);\n    }\n\n    return into;\n  }\n\n  /*\n    Describe how the specified actions should behave in the various\n    states that a view can exist in. Possible states:\n  \n    * preRender: when a view is first instantiated, and after its\n      element was destroyed, it is in the preRender state\n    * hasElement: the DOM representation of the view is created,\n      and is ready to be inserted\n    * inDOM: once a view has been inserted into the DOM it is in\n      the inDOM state. A view spends the vast majority of its\n      existence in this state.\n    * destroyed: once a view has been destroyed (using the destroy\n      method), it is in this state. No further actions can be invoked\n      on a destroyed view.\n  */\n  var states = exports.states = {\n    _default: _default2.default,\n    preRender: _pre_render.default,\n    inDOM: _in_dom.default,\n    hasElement: _has_element.default,\n    destroying: _destroying.default\n  };\n});","enifed('ember-views/views/states/default', ['exports', 'ember-debug'], function (exports, _emberDebug) {\n  'use strict';\n\n  exports.default = {\n    // appendChild is only legal while rendering the buffer.\n    appendChild: function () {\n      throw new _emberDebug.EmberError('You can\\'t use appendChild outside of the rendering process');\n    },\n\n\n    // Handle events from `Ember.EventDispatcher`\n    handleEvent: function () {\n      return true; // continue event propagation\n    },\n    rerender: function () {},\n    destroy: function () {}\n  };\n});","enifed('ember-views/views/states/destroying', ['exports', 'ember-utils', 'ember-debug', 'ember-views/views/states/default'], function (exports, _emberUtils, _emberDebug, _default2) {\n  'use strict';\n\n  var destroying = Object.create(_default2.default);\n\n  (0, _emberUtils.assign)(destroying, {\n    appendChild: function () {\n      throw new _emberDebug.Error('You can\\'t call appendChild on a view being destroyed');\n    },\n    rerender: function () {\n      throw new _emberDebug.Error('You can\\'t call rerender on a view being destroyed');\n    }\n  });\n\n  exports.default = destroying;\n});","enifed('ember-views/views/states/has_element', ['exports', 'ember-utils', 'ember-views/views/states/default', 'ember-metal'], function (exports, _emberUtils, _default2, _emberMetal) {\n  'use strict';\n\n  var hasElement = Object.create(_default2.default);\n\n  (0, _emberUtils.assign)(hasElement, {\n    rerender: function (view) {\n      view.renderer.rerender(view);\n    },\n    destroy: function (view) {\n      view.renderer.remove(view);\n    },\n    handleEvent: function (view, eventName, event) {\n      if (view.has(eventName)) {\n        // Handler should be able to re-dispatch events, so we don't\n        // preventDefault or stopPropagation.\n        return (0, _emberMetal.flaggedInstrument)('interaction.' + eventName, { event: event, view: view }, function () {\n          return _emberMetal.run.join(view, view.trigger, eventName, event);\n        });\n      } else {\n        return true; // continue event propagation\n      }\n    }\n  });\n\n  exports.default = hasElement;\n});","enifed('ember-views/views/states/in_dom', ['exports', 'ember-utils', 'ember-metal', 'ember-debug', 'ember-views/views/states/has_element'], function (exports, _emberUtils, _emberMetal, _emberDebug, _has_element) {\n  'use strict';\n\n  var inDOM = Object.create(_has_element.default);\n\n  (0, _emberUtils.assign)(inDOM, {\n    enter: function (view) {\n      // Register the view for event handling. This hash is used by\n      // Ember.EventDispatcher to dispatch incoming events.\n      view.renderer.register(view);\n\n      if (true) {\n        (0, _emberMetal.addObserver)(view, 'elementId', function () {\n          throw new _emberDebug.Error('Changing a view\\'s elementId after creation is not allowed');\n        });\n      }\n    },\n    exit: function (view) {\n      view.renderer.unregister(view);\n    }\n  });\n\n  exports.default = inDOM;\n});","enifed('ember-views/views/states/pre_render', ['exports', 'ember-views/views/states/default'], function (exports, _default2) {\n  'use strict';\n\n  exports.default = Object.create(_default2.default);\n});","enifed('ember/features', ['exports', 'ember-environment', 'ember-utils'], function (exports, _emberEnvironment, _emberUtils) {\n    'use strict';\n\n    exports.EMBER_GLIMMER_DETECT_BACKTRACKING_RERENDER = exports.MANDATORY_SETTER = exports.MANDATORY_GETTER = exports.DESCRIPTOR_TRAP = exports.EMBER_TEMPLATE_BLOCK_LET_HELPER = exports.GLIMMER_CUSTOM_COMPONENT_MANAGER = exports.EMBER_MODULE_UNIFICATION = exports.EMBER_ENGINES_MOUNT_PARAMS = exports.EMBER_ROUTING_ROUTER_SERVICE = exports.EMBER_METAL_ES5_GETTERS = exports.EMBER_GLIMMER_NAMED_ARGUMENTS = exports.EMBER_IMPROVED_INSTRUMENTATION = exports.EMBER_LIBRARIES_ISREGISTERED = exports.FEATURES_STRIPPED_TEST = exports.FEATURES = exports.DEFAULT_FEATURES = undefined;\n    var DEFAULT_FEATURES = exports.DEFAULT_FEATURES = { \"features-stripped-test\": false, \"ember-libraries-isregistered\": false, \"ember-improved-instrumentation\": false, \"ember-glimmer-named-arguments\": true, \"ember-metal-es5-getters\": true, \"ember-routing-router-service\": true, \"ember-engines-mount-params\": true, \"ember-module-unification\": false, \"glimmer-custom-component-manager\": false, \"ember-template-block-let-helper\": false, \"descriptor-trap\": true, \"mandatory-getter\": true, \"mandatory-setter\": true, \"ember-glimmer-detect-backtracking-rerender\": true };\n    var FEATURES = exports.FEATURES = (0, _emberUtils.assign)(DEFAULT_FEATURES, _emberEnvironment.ENV.FEATURES);\n\n    var FEATURES_STRIPPED_TEST = exports.FEATURES_STRIPPED_TEST = FEATURES[\"features-stripped-test\"];\n    var EMBER_LIBRARIES_ISREGISTERED = exports.EMBER_LIBRARIES_ISREGISTERED = FEATURES[\"ember-libraries-isregistered\"];\n    var EMBER_IMPROVED_INSTRUMENTATION = exports.EMBER_IMPROVED_INSTRUMENTATION = FEATURES[\"ember-improved-instrumentation\"];\n    var EMBER_GLIMMER_NAMED_ARGUMENTS = exports.EMBER_GLIMMER_NAMED_ARGUMENTS = FEATURES[\"ember-glimmer-named-arguments\"];\n    var EMBER_METAL_ES5_GETTERS = exports.EMBER_METAL_ES5_GETTERS = FEATURES[\"ember-metal-es5-getters\"];\n    var EMBER_ROUTING_ROUTER_SERVICE = exports.EMBER_ROUTING_ROUTER_SERVICE = FEATURES[\"ember-routing-router-service\"];\n    var EMBER_ENGINES_MOUNT_PARAMS = exports.EMBER_ENGINES_MOUNT_PARAMS = FEATURES[\"ember-engines-mount-params\"];\n    var EMBER_MODULE_UNIFICATION = exports.EMBER_MODULE_UNIFICATION = FEATURES[\"ember-module-unification\"];\n    var GLIMMER_CUSTOM_COMPONENT_MANAGER = exports.GLIMMER_CUSTOM_COMPONENT_MANAGER = FEATURES[\"glimmer-custom-component-manager\"];\n    var EMBER_TEMPLATE_BLOCK_LET_HELPER = exports.EMBER_TEMPLATE_BLOCK_LET_HELPER = FEATURES[\"ember-template-block-let-helper\"];\n    var DESCRIPTOR_TRAP = exports.DESCRIPTOR_TRAP = FEATURES[\"descriptor-trap\"];\n    var MANDATORY_GETTER = exports.MANDATORY_GETTER = FEATURES[\"mandatory-getter\"];\n    var MANDATORY_SETTER = exports.MANDATORY_SETTER = FEATURES[\"mandatory-setter\"];\n    var EMBER_GLIMMER_DETECT_BACKTRACKING_RERENDER = exports.EMBER_GLIMMER_DETECT_BACKTRACKING_RERENDER = FEATURES[\"ember-glimmer-detect-backtracking-rerender\"];\n});","enifed('ember/index', ['exports', 'require', 'ember-environment', 'node-module', 'ember-utils', 'container', 'ember-metal', 'ember/features', 'ember-debug', 'backburner', 'ember-console', 'ember-runtime', 'ember-glimmer', 'ember/version', 'ember-views', 'ember-routing', 'ember-application', 'ember-extension-support'], function (exports, _require2, _emberEnvironment, _nodeModule, _emberUtils, _container, _emberMetal, _features, _emberDebug, _backburner, _emberConsole, _emberRuntime, _emberGlimmer, _version, _emberViews, _emberRouting, _emberApplication, _emberExtensionSupport) {\n  'use strict';\n\n  exports.VERSION = undefined;\n\n\n  // ember-utils exports\n\n\n  // ****ember-metal****\n\n\n  // ****ember-environment****\n  _emberMetal.default.getOwner = _emberUtils.getOwner;\n  _emberMetal.default.setOwner = _emberUtils.setOwner;\n  _emberMetal.default.generateGuid = _emberUtils.generateGuid;\n  _emberMetal.default.GUID_KEY = _emberUtils.GUID_KEY;\n  _emberMetal.default.guidFor = _emberUtils.guidFor;\n  _emberMetal.default.inspect = _emberUtils.inspect;\n  _emberMetal.default.makeArray = _emberUtils.makeArray;\n  _emberMetal.default.canInvoke = _emberUtils.canInvoke;\n  _emberMetal.default.tryInvoke = _emberUtils.tryInvoke;\n  _emberMetal.default.wrap = _emberUtils.wrap;\n  _emberMetal.default.uuid = _emberUtils.uuid;\n  _emberMetal.default.assign = _emberUtils.assign;\n\n  // container exports\n  _emberMetal.default.Container = _container.Container;\n  _emberMetal.default.Registry = _container.Registry;\n\n  // need to import this directly, to ensure the babel feature\n  // flag plugin works properly\n\n\n  var computed = _emberMetal.computed;\n  computed.alias = _emberMetal.alias;\n  _emberMetal.default.computed = computed;\n  _emberMetal.default.ComputedProperty = _emberMetal.ComputedProperty;\n  _emberMetal.default.cacheFor = _emberMetal.getCachedValueFor;\n\n  _emberMetal.default.assert = _emberDebug.assert;\n  _emberMetal.default.warn = _emberDebug.warn;\n  _emberMetal.default.debug = _emberDebug.debug;\n  _emberMetal.default.deprecate = _emberDebug.deprecate;\n  _emberMetal.default.deprecateFunc = _emberDebug.deprecateFunc;\n  _emberMetal.default.runInDebug = _emberDebug.runInDebug;\n  /**\n    @public\n    @class Ember.Debug\n  */\n  _emberMetal.default.Debug = {\n    registerDeprecationHandler: _emberDebug.registerDeprecationHandler,\n    registerWarnHandler: _emberDebug.registerWarnHandler\n  };\n  _emberMetal.default.merge = _emberMetal.merge;\n\n  _emberMetal.default.instrument = _emberMetal.instrument;\n  _emberMetal.default.subscribe = _emberMetal.instrumentationSubscribe;\n  _emberMetal.default.Instrumentation = {\n    instrument: _emberMetal.instrument,\n    subscribe: _emberMetal.instrumentationSubscribe,\n    unsubscribe: _emberMetal.instrumentationUnsubscribe,\n    reset: _emberMetal.instrumentationReset\n  };\n\n  _emberMetal.default.Error = _emberDebug.Error;\n  _emberMetal.default.meta = _emberMetal.meta;\n  _emberMetal.default.get = _emberMetal.get;\n  _emberMetal.default.getWithDefault = _emberMetal.getWithDefault;\n  _emberMetal.default._getPath = _emberMetal._getPath;\n  _emberMetal.default.set = _emberMetal.set;\n  _emberMetal.default.trySet = _emberMetal.trySet;\n  _emberMetal.default.FEATURES = _features.FEATURES;\n  _emberMetal.default.FEATURES.isEnabled = _emberDebug.isFeatureEnabled;\n  _emberMetal.default._Cache = _emberMetal.Cache;\n  _emberMetal.default.on = _emberMetal.on;\n  _emberMetal.default.addListener = _emberMetal.addListener;\n  _emberMetal.default.removeListener = _emberMetal.removeListener;\n  _emberMetal.default.sendEvent = _emberMetal.sendEvent;\n  _emberMetal.default.hasListeners = _emberMetal.hasListeners;\n  _emberMetal.default.isNone = _emberMetal.isNone;\n  _emberMetal.default.isEmpty = _emberMetal.isEmpty;\n  _emberMetal.default.isBlank = _emberMetal.isBlank;\n  _emberMetal.default.isPresent = _emberMetal.isPresent;\n  _emberMetal.default.run = _emberMetal.run;\n  _emberMetal.default.propertyWillChange = _emberMetal.propertyWillChange;\n  _emberMetal.default.propertyDidChange = _emberMetal.propertyDidChange;\n  _emberMetal.default.notifyPropertyChange = _emberMetal.notifyPropertyChange;\n  _emberMetal.default.overrideChains = _emberMetal.overrideChains;\n  _emberMetal.default.beginPropertyChanges = _emberMetal.beginPropertyChanges;\n  _emberMetal.default.endPropertyChanges = _emberMetal.endPropertyChanges;\n  _emberMetal.default.changeProperties = _emberMetal.changeProperties;\n  _emberMetal.default.platform = {\n    defineProperty: true,\n    hasPropertyAccessors: true\n  };\n  _emberMetal.default.defineProperty = _emberMetal.defineProperty;\n  _emberMetal.default.watchKey = _emberMetal.watchKey;\n  _emberMetal.default.unwatchKey = _emberMetal.unwatchKey;\n  _emberMetal.default.removeChainWatcher = _emberMetal.removeChainWatcher;\n  _emberMetal.default._ChainNode = _emberMetal.ChainNode;\n  _emberMetal.default.finishChains = _emberMetal.finishChains;\n  _emberMetal.default.watchPath = _emberMetal.watchPath;\n  _emberMetal.default.unwatchPath = _emberMetal.unwatchPath;\n  _emberMetal.default.watch = _emberMetal.watch;\n  _emberMetal.default.isWatching = _emberMetal.isWatching;\n  _emberMetal.default.unwatch = _emberMetal.unwatch;\n  _emberMetal.default.destroy = _emberMetal.deleteMeta;\n  _emberMetal.default.libraries = _emberMetal.libraries;\n  _emberMetal.default.OrderedSet = _emberMetal.OrderedSet;\n  _emberMetal.default.Map = _emberMetal.Map;\n  _emberMetal.default.MapWithDefault = _emberMetal.MapWithDefault;\n  _emberMetal.default.getProperties = _emberMetal.getProperties;\n  _emberMetal.default.setProperties = _emberMetal.setProperties;\n  _emberMetal.default.expandProperties = _emberMetal.expandProperties;\n  _emberMetal.default.NAME_KEY = _emberUtils.NAME_KEY;\n  _emberMetal.default.addObserver = _emberMetal.addObserver;\n  _emberMetal.default.removeObserver = _emberMetal.removeObserver;\n  if (_emberEnvironment.ENV._ENABLE_PROPERTY_REQUIRED_SUPPORT) {\n    _emberMetal.default.required = _emberMetal.required;\n  }\n  _emberMetal.default.aliasMethod = _emberMetal.aliasMethod;\n  _emberMetal.default.observer = _emberMetal.observer;\n  _emberMetal.default.mixin = _emberMetal.mixin;\n  _emberMetal.default.Mixin = _emberMetal.Mixin;\n  _emberMetal.default.bind = _emberMetal.bind;\n  _emberMetal.default.Binding = _emberMetal.Binding;\n\n  Object.defineProperty(_emberMetal.default, 'ENV', {\n    get: function () {\n      return _emberEnvironment.ENV;\n    },\n\n    enumerable: false\n  });\n\n  /**\n   The context that Ember searches for namespace instances on.\n  \n   @private\n   */\n  Object.defineProperty(_emberMetal.default, 'lookup', {\n    get: function () {\n      return _emberEnvironment.context.lookup;\n    },\n    set: function (value) {\n      _emberEnvironment.context.lookup = value;\n    },\n\n    enumerable: false\n  });\n\n  _emberMetal.default.EXTEND_PROTOTYPES = _emberEnvironment.ENV.EXTEND_PROTOTYPES;\n\n  // BACKWARDS COMPAT ACCESSORS FOR ENV FLAGS\n  Object.defineProperty(_emberMetal.default, 'LOG_STACKTRACE_ON_DEPRECATION', {\n    get: function () {\n      return _emberEnvironment.ENV.LOG_STACKTRACE_ON_DEPRECATION;\n    },\n    set: function (value) {\n      _emberEnvironment.ENV.LOG_STACKTRACE_ON_DEPRECATION = !!value;\n    },\n\n    enumerable: false\n  });\n\n  Object.defineProperty(_emberMetal.default, 'LOG_VERSION', {\n    get: function () {\n      return _emberEnvironment.ENV.LOG_VERSION;\n    },\n    set: function (value) {\n      _emberEnvironment.ENV.LOG_VERSION = !!value;\n    },\n\n    enumerable: false\n  });\n\n  if (true) {\n    Object.defineProperty(_emberMetal.default, 'MODEL_FACTORY_INJECTIONS', {\n      get: function () {\n        return false;\n      },\n      set: function () {\n        (true && !(false) && (0, _emberDebug.deprecate)('Ember.MODEL_FACTORY_INJECTIONS is no longer required', false, {\n          id: 'ember-metal.model_factory_injections',\n          until: '2.17.0',\n          url: 'https://emberjs.com/deprecations/v2.x/#toc_id-ember-metal-model_factory_injections'\n        }));\n      },\n\n      enumerable: false\n    });\n  }\n\n  Object.defineProperty(_emberMetal.default, 'LOG_BINDINGS', {\n    get: function () {\n      return _emberEnvironment.ENV.LOG_BINDINGS;\n    },\n    set: function (value) {\n      _emberEnvironment.ENV.LOG_BINDINGS = !!value;\n    },\n\n    enumerable: false\n  });\n\n  /**\n    A function may be assigned to `Ember.onerror` to be called when Ember\n    internals encounter an error. This is useful for specialized error handling\n    and reporting code.\n  \n    ```javascript\n    import $ from 'jquery';\n  \n    Ember.onerror = function(error) {\n      $.ajax('/report-error', 'POST', {\n        stack: error.stack,\n        otherInformation: 'whatever app state you want to provide'\n      });\n    };\n    ```\n  \n    Internally, `Ember.onerror` is used as Backburner's error handler.\n  \n    @event onerror\n    @for Ember\n    @param {Exception} error the error object\n    @public\n  */\n  Object.defineProperty(_emberMetal.default, 'onerror', {\n    get: _emberMetal.getOnerror,\n    set: _emberMetal.setOnerror,\n    enumerable: false\n  });\n\n  Object.defineProperty(_emberMetal.default, 'testing', {\n    get: _emberDebug.isTesting,\n    set: _emberDebug.setTesting,\n    enumerable: false\n  });\n\n  _emberMetal.default._Backburner = _backburner.default;\n\n  _emberMetal.default.Logger = _emberConsole.default;\n\n  // ****ember-runtime****\n\n  _emberMetal.default.A = _emberRuntime.A;\n  _emberMetal.default.String = _emberRuntime.String;\n  _emberMetal.default.Object = _emberRuntime.Object;\n  _emberMetal.default._RegistryProxyMixin = _emberRuntime.RegistryProxyMixin;\n  _emberMetal.default._ContainerProxyMixin = _emberRuntime.ContainerProxyMixin;\n  _emberMetal.default.compare = _emberRuntime.compare;\n  _emberMetal.default.copy = _emberRuntime.copy;\n  _emberMetal.default.isEqual = _emberRuntime.isEqual;\n  _emberMetal.default.inject = _emberRuntime.inject;\n  _emberMetal.default.Array = _emberRuntime.Array;\n  _emberMetal.default.Comparable = _emberRuntime.Comparable;\n  _emberMetal.default.Enumerable = _emberRuntime.Enumerable;\n  _emberMetal.default.ArrayProxy = _emberRuntime.ArrayProxy;\n  _emberMetal.default.ObjectProxy = _emberRuntime.ObjectProxy;\n  _emberMetal.default.ActionHandler = _emberRuntime.ActionHandler;\n  _emberMetal.default.CoreObject = _emberRuntime.CoreObject;\n  _emberMetal.default.NativeArray = _emberRuntime.NativeArray;\n  _emberMetal.default.Copyable = _emberRuntime.Copyable;\n  _emberMetal.default.MutableEnumerable = _emberRuntime.MutableEnumerable;\n  _emberMetal.default.MutableArray = _emberRuntime.MutableArray;\n  _emberMetal.default.TargetActionSupport = _emberRuntime.TargetActionSupport;\n  _emberMetal.default.Evented = _emberRuntime.Evented;\n  _emberMetal.default.PromiseProxyMixin = _emberRuntime.PromiseProxyMixin;\n  _emberMetal.default.Observable = _emberRuntime.Observable;\n  _emberMetal.default.typeOf = _emberRuntime.typeOf;\n  _emberMetal.default.isArray = _emberRuntime.isArray;\n  _emberMetal.default.Object = _emberRuntime.Object;\n  _emberMetal.default.onLoad = _emberRuntime.onLoad;\n  _emberMetal.default.runLoadHooks = _emberRuntime.runLoadHooks;\n  _emberMetal.default.Controller = _emberRuntime.Controller;\n  _emberMetal.default.ControllerMixin = _emberRuntime.ControllerMixin;\n  _emberMetal.default.Service = _emberRuntime.Service;\n  _emberMetal.default._ProxyMixin = _emberRuntime._ProxyMixin;\n  _emberMetal.default.RSVP = _emberRuntime.RSVP;\n  _emberMetal.default.Namespace = _emberRuntime.Namespace;\n\n  // ES6TODO: this seems a less than ideal way/place to add properties to Ember.computed\n  computed.empty = _emberRuntime.empty;\n  computed.notEmpty = _emberRuntime.notEmpty;\n  computed.none = _emberRuntime.none;\n  computed.not = _emberRuntime.not;\n  computed.bool = _emberRuntime.bool;\n  computed.match = _emberRuntime.match;\n  computed.equal = _emberRuntime.equal;\n  computed.gt = _emberRuntime.gt;\n  computed.gte = _emberRuntime.gte;\n  computed.lt = _emberRuntime.lt;\n  computed.lte = _emberRuntime.lte;\n  computed.oneWay = _emberRuntime.oneWay;\n  computed.reads = _emberRuntime.oneWay;\n  computed.readOnly = _emberRuntime.readOnly;\n  computed.deprecatingAlias = _emberRuntime.deprecatingAlias;\n  computed.and = _emberRuntime.and;\n  computed.or = _emberRuntime.or;\n  computed.any = _emberRuntime.any;\n\n  computed.sum = _emberRuntime.sum;\n  computed.min = _emberRuntime.min;\n  computed.max = _emberRuntime.max;\n  computed.map = _emberRuntime.map;\n  computed.sort = _emberRuntime.sort;\n  computed.setDiff = _emberRuntime.setDiff;\n  computed.mapBy = _emberRuntime.mapBy;\n  computed.filter = _emberRuntime.filter;\n  computed.filterBy = _emberRuntime.filterBy;\n  computed.uniq = _emberRuntime.uniq;\n\n  computed.uniqBy = _emberRuntime.uniqBy;\n  computed.union = _emberRuntime.union;\n  computed.intersect = _emberRuntime.intersect;\n  computed.collect = _emberRuntime.collect;\n\n  /**\n    Defines the hash of localized strings for the current language. Used by\n    the `String.loc` helper. To localize, add string values to this\n    hash.\n  \n    @property STRINGS\n    @for Ember\n    @type Object\n    @private\n  */\n  Object.defineProperty(_emberMetal.default, 'STRINGS', {\n    configurable: false,\n    get: _emberRuntime.getStrings,\n    set: _emberRuntime.setStrings\n  });\n\n  /**\n    Whether searching on the global for new Namespace instances is enabled.\n  \n    This is only exported here as to not break any addons.  Given the new\n    visit API, you will have issues if you treat this as a indicator of\n    booted.\n  \n    Internally this is only exposing a flag in Namespace.\n  \n    @property BOOTED\n    @for Ember\n    @type Boolean\n    @private\n  */\n  Object.defineProperty(_emberMetal.default, 'BOOTED', {\n    configurable: false,\n    enumerable: false,\n    get: _emberRuntime.isNamespaceSearchDisabled,\n    set: _emberRuntime.setNamespaceSearchDisabled\n  });\n\n  _emberMetal.default.Component = _emberGlimmer.Component;\n  _emberGlimmer.Helper.helper = _emberGlimmer.helper;\n  _emberMetal.default.Helper = _emberGlimmer.Helper;\n  _emberMetal.default.Checkbox = _emberGlimmer.Checkbox;\n  _emberMetal.default.TextField = _emberGlimmer.TextField;\n  _emberMetal.default.TextArea = _emberGlimmer.TextArea;\n  _emberMetal.default.LinkComponent = _emberGlimmer.LinkComponent;\n\n  if (_emberEnvironment.ENV.EXTEND_PROTOTYPES.String) {\n    String.prototype.htmlSafe = function () {\n      return (0, _emberGlimmer.htmlSafe)(this);\n    };\n  }\n\n  var EmberHandlebars = _emberMetal.default.Handlebars = _emberMetal.default.Handlebars || {};\n  var EmberHTMLBars = _emberMetal.default.HTMLBars = _emberMetal.default.HTMLBars || {};\n  var EmberHandleBarsUtils = EmberHandlebars.Utils = EmberHandlebars.Utils || {};\n\n  EmberHTMLBars.template = EmberHandlebars.template = _emberGlimmer.template;\n  EmberHandleBarsUtils.escapeExpression = _emberGlimmer.escapeExpression;\n  _emberRuntime.String.htmlSafe = _emberGlimmer.htmlSafe;\n\n  _emberRuntime.String.isHTMLSafe = _emberGlimmer.isHTMLSafe;\n\n  /**\n    Global hash of shared templates. This will automatically be populated\n    by the build tools so that you can store your Handlebars templates in\n    separate files that get loaded into JavaScript at buildtime.\n  \n    @property TEMPLATES\n    @for Ember\n    @type Object\n    @private\n  */\n  Object.defineProperty(_emberMetal.default, 'TEMPLATES', {\n    get: _emberGlimmer.getTemplates,\n    set: _emberGlimmer.setTemplates,\n    configurable: false,\n    enumerable: false\n  });\n\n  exports.VERSION = _version.default;\n\n\n  /**\n    The semantic version\n  \n    @property VERSION\n    @type String\n    @public\n  */\n  _emberMetal.default.VERSION = _version.default;\n\n  _emberMetal.libraries.registerCoreLibrary('Ember', _version.default);\n\n  // require the main entry points for each of these packages\n  // this is so that the global exports occur properly\n\n\n  _emberMetal.default.$ = _emberViews.jQuery;\n\n  _emberMetal.default.ViewTargetActionSupport = _emberViews.ViewTargetActionSupport;\n\n  _emberMetal.default.ViewUtils = {\n    isSimpleClick: _emberViews.isSimpleClick,\n    getViewElement: _emberViews.getViewElement,\n    getViewBounds: _emberViews.getViewBounds,\n    getViewClientRects: _emberViews.getViewClientRects,\n    getViewBoundingClientRect: _emberViews.getViewBoundingClientRect,\n    getRootViews: _emberViews.getRootViews,\n    getChildViews: _emberViews.getChildViews\n  };\n\n  _emberMetal.default.TextSupport = _emberViews.TextSupport;\n  _emberMetal.default.ComponentLookup = _emberViews.ComponentLookup;\n  _emberMetal.default.EventDispatcher = _emberViews.EventDispatcher;\n\n  _emberMetal.default.Location = _emberRouting.Location;\n  _emberMetal.default.AutoLocation = _emberRouting.AutoLocation;\n  _emberMetal.default.HashLocation = _emberRouting.HashLocation;\n  _emberMetal.default.HistoryLocation = _emberRouting.HistoryLocation;\n  _emberMetal.default.NoneLocation = _emberRouting.NoneLocation;\n  _emberMetal.default.controllerFor = _emberRouting.controllerFor;\n  _emberMetal.default.generateControllerFactory = _emberRouting.generateControllerFactory;\n  _emberMetal.default.generateController = _emberRouting.generateController;\n  _emberMetal.default.RouterDSL = _emberRouting.RouterDSL;\n  _emberMetal.default.Router = _emberRouting.Router;\n  _emberMetal.default.Route = _emberRouting.Route;\n\n  _emberMetal.default.Application = _emberApplication.Application;\n  _emberMetal.default.ApplicationInstance = _emberApplication.ApplicationInstance;\n  _emberMetal.default.Engine = _emberApplication.Engine;\n  _emberMetal.default.EngineInstance = _emberApplication.EngineInstance;\n  _emberMetal.default.DefaultResolver = _emberMetal.default.Resolver = _emberApplication.Resolver;\n\n  (0, _emberRuntime.runLoadHooks)('Ember.Application', _emberApplication.Application);\n\n  _emberMetal.default.DataAdapter = _emberExtensionSupport.DataAdapter;\n  _emberMetal.default.ContainerDebugAdapter = _emberExtensionSupport.ContainerDebugAdapter;\n\n  if ((0, _require2.has)('ember-template-compiler')) {\n    (0, _require2.default)('ember-template-compiler');\n  }\n\n  // do this to ensure that Ember.Test is defined properly on the global\n  // if it is present.\n  if ((0, _require2.has)('ember-testing')) {\n    var testing = (0, _require2.default)('ember-testing');\n\n    _emberMetal.default.Test = testing.Test;\n    _emberMetal.default.Test.Adapter = testing.Adapter;\n    _emberMetal.default.Test.QUnitAdapter = testing.QUnitAdapter;\n    _emberMetal.default.setupForTesting = testing.setupForTesting;\n  }\n\n  (0, _emberRuntime.runLoadHooks)('Ember');\n\n  /**\n    @module ember\n    @private\n  */\n  exports.default = _emberMetal.default;\n\n\n  /* globals module */\n  if (_nodeModule.IS_NODE) {\n    _nodeModule.module.exports = _emberMetal.default;\n  } else {\n    _emberEnvironment.context.exports.Ember = _emberEnvironment.context.exports.Em = _emberMetal.default;\n  }\n\n  /**\n   @module jquery\n   @public\n   */\n\n  /**\n   @class jquery\n   @public\n   @static\n   */\n\n  /**\n    Alias for jQuery\n  \n    @for jquery\n    @method $\n    @static\n    @public\n  */\n});","enifed(\"ember/version\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.default = \"3.1.4-release-3-1+bc8d50e2\";\n});","enifed(\"handlebars\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  // File ignored in coverage tests via setting in .istanbul.yml\n  /* Jison generated parser */\n  var handlebars = function () {\n    var parser = { trace: function trace() {},\n      yy: {},\n      symbols_: { \"error\": 2, \"root\": 3, \"program\": 4, \"EOF\": 5, \"program_repetition0\": 6, \"statement\": 7, \"mustache\": 8, \"block\": 9, \"rawBlock\": 10, \"partial\": 11, \"partialBlock\": 12, \"content\": 13, \"COMMENT\": 14, \"CONTENT\": 15, \"openRawBlock\": 16, \"rawBlock_repetition_plus0\": 17, \"END_RAW_BLOCK\": 18, \"OPEN_RAW_BLOCK\": 19, \"helperName\": 20, \"openRawBlock_repetition0\": 21, \"openRawBlock_option0\": 22, \"CLOSE_RAW_BLOCK\": 23, \"openBlock\": 24, \"block_option0\": 25, \"closeBlock\": 26, \"openInverse\": 27, \"block_option1\": 28, \"OPEN_BLOCK\": 29, \"openBlock_repetition0\": 30, \"openBlock_option0\": 31, \"openBlock_option1\": 32, \"CLOSE\": 33, \"OPEN_INVERSE\": 34, \"openInverse_repetition0\": 35, \"openInverse_option0\": 36, \"openInverse_option1\": 37, \"openInverseChain\": 38, \"OPEN_INVERSE_CHAIN\": 39, \"openInverseChain_repetition0\": 40, \"openInverseChain_option0\": 41, \"openInverseChain_option1\": 42, \"inverseAndProgram\": 43, \"INVERSE\": 44, \"inverseChain\": 45, \"inverseChain_option0\": 46, \"OPEN_ENDBLOCK\": 47, \"OPEN\": 48, \"mustache_repetition0\": 49, \"mustache_option0\": 50, \"OPEN_UNESCAPED\": 51, \"mustache_repetition1\": 52, \"mustache_option1\": 53, \"CLOSE_UNESCAPED\": 54, \"OPEN_PARTIAL\": 55, \"partialName\": 56, \"partial_repetition0\": 57, \"partial_option0\": 58, \"openPartialBlock\": 59, \"OPEN_PARTIAL_BLOCK\": 60, \"openPartialBlock_repetition0\": 61, \"openPartialBlock_option0\": 62, \"param\": 63, \"sexpr\": 64, \"OPEN_SEXPR\": 65, \"sexpr_repetition0\": 66, \"sexpr_option0\": 67, \"CLOSE_SEXPR\": 68, \"hash\": 69, \"hash_repetition_plus0\": 70, \"hashSegment\": 71, \"ID\": 72, \"EQUALS\": 73, \"blockParams\": 74, \"OPEN_BLOCK_PARAMS\": 75, \"blockParams_repetition_plus0\": 76, \"CLOSE_BLOCK_PARAMS\": 77, \"path\": 78, \"dataName\": 79, \"STRING\": 80, \"NUMBER\": 81, \"BOOLEAN\": 82, \"UNDEFINED\": 83, \"NULL\": 84, \"DATA\": 85, \"pathSegments\": 86, \"SEP\": 87, \"$accept\": 0, \"$end\": 1 },\n      terminals_: { 2: \"error\", 5: \"EOF\", 14: \"COMMENT\", 15: \"CONTENT\", 18: \"END_RAW_BLOCK\", 19: \"OPEN_RAW_BLOCK\", 23: \"CLOSE_RAW_BLOCK\", 29: \"OPEN_BLOCK\", 33: \"CLOSE\", 34: \"OPEN_INVERSE\", 39: \"OPEN_INVERSE_CHAIN\", 44: \"INVERSE\", 47: \"OPEN_ENDBLOCK\", 48: \"OPEN\", 51: \"OPEN_UNESCAPED\", 54: \"CLOSE_UNESCAPED\", 55: \"OPEN_PARTIAL\", 60: \"OPEN_PARTIAL_BLOCK\", 65: \"OPEN_SEXPR\", 68: \"CLOSE_SEXPR\", 72: \"ID\", 73: \"EQUALS\", 75: \"OPEN_BLOCK_PARAMS\", 77: \"CLOSE_BLOCK_PARAMS\", 80: \"STRING\", 81: \"NUMBER\", 82: \"BOOLEAN\", 83: \"UNDEFINED\", 84: \"NULL\", 85: \"DATA\", 87: \"SEP\" },\n      productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 5], [8, 5], [11, 5], [12, 3], [59, 5], [63, 1], [63, 1], [64, 5], [69, 1], [71, 3], [74, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [56, 1], [56, 1], [79, 2], [78, 1], [86, 3], [86, 1], [6, 0], [6, 2], [17, 1], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [49, 0], [49, 2], [50, 0], [50, 1], [52, 0], [52, 2], [53, 0], [53, 1], [57, 0], [57, 2], [58, 0], [58, 1], [61, 0], [61, 2], [62, 0], [62, 1], [66, 0], [66, 2], [67, 0], [67, 1], [70, 1], [70, 2], [76, 1], [76, 2]],\n      performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$\n      /**/) {\n\n        var $0 = $$.length - 1;\n        switch (yystate) {\n          case 1:\n            return $$[$0 - 1];\n            break;\n          case 2:\n            this.$ = yy.prepareProgram($$[$0]);\n            break;\n          case 3:\n            this.$ = $$[$0];\n            break;\n          case 4:\n            this.$ = $$[$0];\n            break;\n          case 5:\n            this.$ = $$[$0];\n            break;\n          case 6:\n            this.$ = $$[$0];\n            break;\n          case 7:\n            this.$ = $$[$0];\n            break;\n          case 8:\n            this.$ = $$[$0];\n            break;\n          case 9:\n            this.$ = {\n              type: 'CommentStatement',\n              value: yy.stripComment($$[$0]),\n              strip: yy.stripFlags($$[$0], $$[$0]),\n              loc: yy.locInfo(this._$)\n            };\n\n            break;\n          case 10:\n            this.$ = {\n              type: 'ContentStatement',\n              original: $$[$0],\n              value: $$[$0],\n              loc: yy.locInfo(this._$)\n            };\n\n            break;\n          case 11:\n            this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n            break;\n          case 12:\n            this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1] };\n            break;\n          case 13:\n            this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$);\n            break;\n          case 14:\n            this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$);\n            break;\n          case 15:\n            this.$ = { open: $$[$0 - 5], path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n            break;\n          case 16:\n            this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n            break;\n          case 17:\n            this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };\n            break;\n          case 18:\n            this.$ = { strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]), program: $$[$0] };\n            break;\n          case 19:\n            var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$),\n                program = yy.prepareProgram([inverse], $$[$0 - 1].loc);\n            program.chained = true;\n\n            this.$ = { strip: $$[$0 - 2].strip, program: program, chain: true };\n\n            break;\n          case 20:\n            this.$ = $$[$0];\n            break;\n          case 21:\n            this.$ = { path: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 2], $$[$0]) };\n            break;\n          case 22:\n            this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);\n            break;\n          case 23:\n            this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);\n            break;\n          case 24:\n            this.$ = {\n              type: 'PartialStatement',\n              name: $$[$0 - 3],\n              params: $$[$0 - 2],\n              hash: $$[$0 - 1],\n              indent: '',\n              strip: yy.stripFlags($$[$0 - 4], $$[$0]),\n              loc: yy.locInfo(this._$)\n            };\n\n            break;\n          case 25:\n            this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n            break;\n          case 26:\n            this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 4], $$[$0]) };\n            break;\n          case 27:\n            this.$ = $$[$0];\n            break;\n          case 28:\n            this.$ = $$[$0];\n            break;\n          case 29:\n            this.$ = {\n              type: 'SubExpression',\n              path: $$[$0 - 3],\n              params: $$[$0 - 2],\n              hash: $$[$0 - 1],\n              loc: yy.locInfo(this._$)\n            };\n\n            break;\n          case 30:\n            this.$ = { type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$) };\n            break;\n          case 31:\n            this.$ = { type: 'HashPair', key: yy.id($$[$0 - 2]), value: $$[$0], loc: yy.locInfo(this._$) };\n            break;\n          case 32:\n            this.$ = yy.id($$[$0 - 1]);\n            break;\n          case 33:\n            this.$ = $$[$0];\n            break;\n          case 34:\n            this.$ = $$[$0];\n            break;\n          case 35:\n            this.$ = { type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$) };\n            break;\n          case 36:\n            this.$ = { type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$) };\n            break;\n          case 37:\n            this.$ = { type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$) };\n            break;\n          case 38:\n            this.$ = { type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$) };\n            break;\n          case 39:\n            this.$ = { type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$) };\n            break;\n          case 40:\n            this.$ = $$[$0];\n            break;\n          case 41:\n            this.$ = $$[$0];\n            break;\n          case 42:\n            this.$ = yy.preparePath(true, $$[$0], this._$);\n            break;\n          case 43:\n            this.$ = yy.preparePath(false, $$[$0], this._$);\n            break;\n          case 44:\n            $$[$0 - 2].push({ part: yy.id($$[$0]), original: $$[$0], separator: $$[$0 - 1] });this.$ = $$[$0 - 2];\n            break;\n          case 45:\n            this.$ = [{ part: yy.id($$[$0]), original: $$[$0] }];\n            break;\n          case 46:\n            this.$ = [];\n            break;\n          case 47:\n            $$[$0 - 1].push($$[$0]);\n            break;\n          case 48:\n            this.$ = [$$[$0]];\n            break;\n          case 49:\n            $$[$0 - 1].push($$[$0]);\n            break;\n          case 50:\n            this.$ = [];\n            break;\n          case 51:\n            $$[$0 - 1].push($$[$0]);\n            break;\n          case 58:\n            this.$ = [];\n            break;\n          case 59:\n            $$[$0 - 1].push($$[$0]);\n            break;\n          case 64:\n            this.$ = [];\n            break;\n          case 65:\n            $$[$0 - 1].push($$[$0]);\n            break;\n          case 70:\n            this.$ = [];\n            break;\n          case 71:\n            $$[$0 - 1].push($$[$0]);\n            break;\n          case 78:\n            this.$ = [];\n            break;\n          case 79:\n            $$[$0 - 1].push($$[$0]);\n            break;\n          case 82:\n            this.$ = [];\n            break;\n          case 83:\n            $$[$0 - 1].push($$[$0]);\n            break;\n          case 86:\n            this.$ = [];\n            break;\n          case 87:\n            $$[$0 - 1].push($$[$0]);\n            break;\n          case 90:\n            this.$ = [];\n            break;\n          case 91:\n            $$[$0 - 1].push($$[$0]);\n            break;\n          case 94:\n            this.$ = [];\n            break;\n          case 95:\n            $$[$0 - 1].push($$[$0]);\n            break;\n          case 98:\n            this.$ = [$$[$0]];\n            break;\n          case 99:\n            $$[$0 - 1].push($$[$0]);\n            break;\n          case 100:\n            this.$ = [$$[$0]];\n            break;\n          case 101:\n            $$[$0 - 1].push($$[$0]);\n            break;\n        }\n      },\n      table: [{ 3: 1, 4: 2, 5: [2, 46], 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 1: [3] }, { 5: [1, 4] }, { 5: [2, 2], 7: 5, 8: 6, 9: 7, 10: 8, 11: 9, 12: 10, 13: 11, 14: [1, 12], 15: [1, 20], 16: 17, 19: [1, 23], 24: 15, 27: 16, 29: [1, 21], 34: [1, 22], 39: [2, 2], 44: [2, 2], 47: [2, 2], 48: [1, 13], 51: [1, 14], 55: [1, 18], 59: 19, 60: [1, 24] }, { 1: [2, 1] }, { 5: [2, 47], 14: [2, 47], 15: [2, 47], 19: [2, 47], 29: [2, 47], 34: [2, 47], 39: [2, 47], 44: [2, 47], 47: [2, 47], 48: [2, 47], 51: [2, 47], 55: [2, 47], 60: [2, 47] }, { 5: [2, 3], 14: [2, 3], 15: [2, 3], 19: [2, 3], 29: [2, 3], 34: [2, 3], 39: [2, 3], 44: [2, 3], 47: [2, 3], 48: [2, 3], 51: [2, 3], 55: [2, 3], 60: [2, 3] }, { 5: [2, 4], 14: [2, 4], 15: [2, 4], 19: [2, 4], 29: [2, 4], 34: [2, 4], 39: [2, 4], 44: [2, 4], 47: [2, 4], 48: [2, 4], 51: [2, 4], 55: [2, 4], 60: [2, 4] }, { 5: [2, 5], 14: [2, 5], 15: [2, 5], 19: [2, 5], 29: [2, 5], 34: [2, 5], 39: [2, 5], 44: [2, 5], 47: [2, 5], 48: [2, 5], 51: [2, 5], 55: [2, 5], 60: [2, 5] }, { 5: [2, 6], 14: [2, 6], 15: [2, 6], 19: [2, 6], 29: [2, 6], 34: [2, 6], 39: [2, 6], 44: [2, 6], 47: [2, 6], 48: [2, 6], 51: [2, 6], 55: [2, 6], 60: [2, 6] }, { 5: [2, 7], 14: [2, 7], 15: [2, 7], 19: [2, 7], 29: [2, 7], 34: [2, 7], 39: [2, 7], 44: [2, 7], 47: [2, 7], 48: [2, 7], 51: [2, 7], 55: [2, 7], 60: [2, 7] }, { 5: [2, 8], 14: [2, 8], 15: [2, 8], 19: [2, 8], 29: [2, 8], 34: [2, 8], 39: [2, 8], 44: [2, 8], 47: [2, 8], 48: [2, 8], 51: [2, 8], 55: [2, 8], 60: [2, 8] }, { 5: [2, 9], 14: [2, 9], 15: [2, 9], 19: [2, 9], 29: [2, 9], 34: [2, 9], 39: [2, 9], 44: [2, 9], 47: [2, 9], 48: [2, 9], 51: [2, 9], 55: [2, 9], 60: [2, 9] }, { 20: 25, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 36, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 37, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 4: 38, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 13: 40, 15: [1, 20], 17: 39 }, { 20: 42, 56: 41, 64: 43, 65: [1, 44], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 45, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 5: [2, 10], 14: [2, 10], 15: [2, 10], 18: [2, 10], 19: [2, 10], 29: [2, 10], 34: [2, 10], 39: [2, 10], 44: [2, 10], 47: [2, 10], 48: [2, 10], 51: [2, 10], 55: [2, 10], 60: [2, 10] }, { 20: 46, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 47, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 48, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 42, 56: 49, 64: 43, 65: [1, 44], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [2, 78], 49: 50, 65: [2, 78], 72: [2, 78], 80: [2, 78], 81: [2, 78], 82: [2, 78], 83: [2, 78], 84: [2, 78], 85: [2, 78] }, { 23: [2, 33], 33: [2, 33], 54: [2, 33], 65: [2, 33], 68: [2, 33], 72: [2, 33], 75: [2, 33], 80: [2, 33], 81: [2, 33], 82: [2, 33], 83: [2, 33], 84: [2, 33], 85: [2, 33] }, { 23: [2, 34], 33: [2, 34], 54: [2, 34], 65: [2, 34], 68: [2, 34], 72: [2, 34], 75: [2, 34], 80: [2, 34], 81: [2, 34], 82: [2, 34], 83: [2, 34], 84: [2, 34], 85: [2, 34] }, { 23: [2, 35], 33: [2, 35], 54: [2, 35], 65: [2, 35], 68: [2, 35], 72: [2, 35], 75: [2, 35], 80: [2, 35], 81: [2, 35], 82: [2, 35], 83: [2, 35], 84: [2, 35], 85: [2, 35] }, { 23: [2, 36], 33: [2, 36], 54: [2, 36], 65: [2, 36], 68: [2, 36], 72: [2, 36], 75: [2, 36], 80: [2, 36], 81: [2, 36], 82: [2, 36], 83: [2, 36], 84: [2, 36], 85: [2, 36] }, { 23: [2, 37], 33: [2, 37], 54: [2, 37], 65: [2, 37], 68: [2, 37], 72: [2, 37], 75: [2, 37], 80: [2, 37], 81: [2, 37], 82: [2, 37], 83: [2, 37], 84: [2, 37], 85: [2, 37] }, { 23: [2, 38], 33: [2, 38], 54: [2, 38], 65: [2, 38], 68: [2, 38], 72: [2, 38], 75: [2, 38], 80: [2, 38], 81: [2, 38], 82: [2, 38], 83: [2, 38], 84: [2, 38], 85: [2, 38] }, { 23: [2, 39], 33: [2, 39], 54: [2, 39], 65: [2, 39], 68: [2, 39], 72: [2, 39], 75: [2, 39], 80: [2, 39], 81: [2, 39], 82: [2, 39], 83: [2, 39], 84: [2, 39], 85: [2, 39] }, { 23: [2, 43], 33: [2, 43], 54: [2, 43], 65: [2, 43], 68: [2, 43], 72: [2, 43], 75: [2, 43], 80: [2, 43], 81: [2, 43], 82: [2, 43], 83: [2, 43], 84: [2, 43], 85: [2, 43], 87: [1, 51] }, { 72: [1, 35], 86: 52 }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 52: 53, 54: [2, 82], 65: [2, 82], 72: [2, 82], 80: [2, 82], 81: [2, 82], 82: [2, 82], 83: [2, 82], 84: [2, 82], 85: [2, 82] }, { 25: 54, 38: 56, 39: [1, 58], 43: 57, 44: [1, 59], 45: 55, 47: [2, 54] }, { 28: 60, 43: 61, 44: [1, 59], 47: [2, 56] }, { 13: 63, 15: [1, 20], 18: [1, 62] }, { 15: [2, 48], 18: [2, 48] }, { 33: [2, 86], 57: 64, 65: [2, 86], 72: [2, 86], 80: [2, 86], 81: [2, 86], 82: [2, 86], 83: [2, 86], 84: [2, 86], 85: [2, 86] }, { 33: [2, 40], 65: [2, 40], 72: [2, 40], 80: [2, 40], 81: [2, 40], 82: [2, 40], 83: [2, 40], 84: [2, 40], 85: [2, 40] }, { 33: [2, 41], 65: [2, 41], 72: [2, 41], 80: [2, 41], 81: [2, 41], 82: [2, 41], 83: [2, 41], 84: [2, 41], 85: [2, 41] }, { 20: 65, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 66, 47: [1, 67] }, { 30: 68, 33: [2, 58], 65: [2, 58], 72: [2, 58], 75: [2, 58], 80: [2, 58], 81: [2, 58], 82: [2, 58], 83: [2, 58], 84: [2, 58], 85: [2, 58] }, { 33: [2, 64], 35: 69, 65: [2, 64], 72: [2, 64], 75: [2, 64], 80: [2, 64], 81: [2, 64], 82: [2, 64], 83: [2, 64], 84: [2, 64], 85: [2, 64] }, { 21: 70, 23: [2, 50], 65: [2, 50], 72: [2, 50], 80: [2, 50], 81: [2, 50], 82: [2, 50], 83: [2, 50], 84: [2, 50], 85: [2, 50] }, { 33: [2, 90], 61: 71, 65: [2, 90], 72: [2, 90], 80: [2, 90], 81: [2, 90], 82: [2, 90], 83: [2, 90], 84: [2, 90], 85: [2, 90] }, { 20: 75, 33: [2, 80], 50: 72, 63: 73, 64: 76, 65: [1, 44], 69: 74, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 72: [1, 80] }, { 23: [2, 42], 33: [2, 42], 54: [2, 42], 65: [2, 42], 68: [2, 42], 72: [2, 42], 75: [2, 42], 80: [2, 42], 81: [2, 42], 82: [2, 42], 83: [2, 42], 84: [2, 42], 85: [2, 42], 87: [1, 51] }, { 20: 75, 53: 81, 54: [2, 84], 63: 82, 64: 76, 65: [1, 44], 69: 83, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 84, 47: [1, 67] }, { 47: [2, 55] }, { 4: 85, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 47: [2, 20] }, { 20: 86, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 87, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 26: 88, 47: [1, 67] }, { 47: [2, 57] }, { 5: [2, 11], 14: [2, 11], 15: [2, 11], 19: [2, 11], 29: [2, 11], 34: [2, 11], 39: [2, 11], 44: [2, 11], 47: [2, 11], 48: [2, 11], 51: [2, 11], 55: [2, 11], 60: [2, 11] }, { 15: [2, 49], 18: [2, 49] }, { 20: 75, 33: [2, 88], 58: 89, 63: 90, 64: 76, 65: [1, 44], 69: 91, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 65: [2, 94], 66: 92, 68: [2, 94], 72: [2, 94], 80: [2, 94], 81: [2, 94], 82: [2, 94], 83: [2, 94], 84: [2, 94], 85: [2, 94] }, { 5: [2, 25], 14: [2, 25], 15: [2, 25], 19: [2, 25], 29: [2, 25], 34: [2, 25], 39: [2, 25], 44: [2, 25], 47: [2, 25], 48: [2, 25], 51: [2, 25], 55: [2, 25], 60: [2, 25] }, { 20: 93, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 31: 94, 33: [2, 60], 63: 95, 64: 76, 65: [1, 44], 69: 96, 70: 77, 71: 78, 72: [1, 79], 75: [2, 60], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 33: [2, 66], 36: 97, 63: 98, 64: 76, 65: [1, 44], 69: 99, 70: 77, 71: 78, 72: [1, 79], 75: [2, 66], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 22: 100, 23: [2, 52], 63: 101, 64: 76, 65: [1, 44], 69: 102, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 33: [2, 92], 62: 103, 63: 104, 64: 76, 65: [1, 44], 69: 105, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 106] }, { 33: [2, 79], 65: [2, 79], 72: [2, 79], 80: [2, 79], 81: [2, 79], 82: [2, 79], 83: [2, 79], 84: [2, 79], 85: [2, 79] }, { 33: [2, 81] }, { 23: [2, 27], 33: [2, 27], 54: [2, 27], 65: [2, 27], 68: [2, 27], 72: [2, 27], 75: [2, 27], 80: [2, 27], 81: [2, 27], 82: [2, 27], 83: [2, 27], 84: [2, 27], 85: [2, 27] }, { 23: [2, 28], 33: [2, 28], 54: [2, 28], 65: [2, 28], 68: [2, 28], 72: [2, 28], 75: [2, 28], 80: [2, 28], 81: [2, 28], 82: [2, 28], 83: [2, 28], 84: [2, 28], 85: [2, 28] }, { 23: [2, 30], 33: [2, 30], 54: [2, 30], 68: [2, 30], 71: 107, 72: [1, 108], 75: [2, 30] }, { 23: [2, 98], 33: [2, 98], 54: [2, 98], 68: [2, 98], 72: [2, 98], 75: [2, 98] }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 73: [1, 109], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 23: [2, 44], 33: [2, 44], 54: [2, 44], 65: [2, 44], 68: [2, 44], 72: [2, 44], 75: [2, 44], 80: [2, 44], 81: [2, 44], 82: [2, 44], 83: [2, 44], 84: [2, 44], 85: [2, 44], 87: [2, 44] }, { 54: [1, 110] }, { 54: [2, 83], 65: [2, 83], 72: [2, 83], 80: [2, 83], 81: [2, 83], 82: [2, 83], 83: [2, 83], 84: [2, 83], 85: [2, 83] }, { 54: [2, 85] }, { 5: [2, 13], 14: [2, 13], 15: [2, 13], 19: [2, 13], 29: [2, 13], 34: [2, 13], 39: [2, 13], 44: [2, 13], 47: [2, 13], 48: [2, 13], 51: [2, 13], 55: [2, 13], 60: [2, 13] }, { 38: 56, 39: [1, 58], 43: 57, 44: [1, 59], 45: 112, 46: 111, 47: [2, 76] }, { 33: [2, 70], 40: 113, 65: [2, 70], 72: [2, 70], 75: [2, 70], 80: [2, 70], 81: [2, 70], 82: [2, 70], 83: [2, 70], 84: [2, 70], 85: [2, 70] }, { 47: [2, 18] }, { 5: [2, 14], 14: [2, 14], 15: [2, 14], 19: [2, 14], 29: [2, 14], 34: [2, 14], 39: [2, 14], 44: [2, 14], 47: [2, 14], 48: [2, 14], 51: [2, 14], 55: [2, 14], 60: [2, 14] }, { 33: [1, 114] }, { 33: [2, 87], 65: [2, 87], 72: [2, 87], 80: [2, 87], 81: [2, 87], 82: [2, 87], 83: [2, 87], 84: [2, 87], 85: [2, 87] }, { 33: [2, 89] }, { 20: 75, 63: 116, 64: 76, 65: [1, 44], 67: 115, 68: [2, 96], 69: 117, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 118] }, { 32: 119, 33: [2, 62], 74: 120, 75: [1, 121] }, { 33: [2, 59], 65: [2, 59], 72: [2, 59], 75: [2, 59], 80: [2, 59], 81: [2, 59], 82: [2, 59], 83: [2, 59], 84: [2, 59], 85: [2, 59] }, { 33: [2, 61], 75: [2, 61] }, { 33: [2, 68], 37: 122, 74: 123, 75: [1, 121] }, { 33: [2, 65], 65: [2, 65], 72: [2, 65], 75: [2, 65], 80: [2, 65], 81: [2, 65], 82: [2, 65], 83: [2, 65], 84: [2, 65], 85: [2, 65] }, { 33: [2, 67], 75: [2, 67] }, { 23: [1, 124] }, { 23: [2, 51], 65: [2, 51], 72: [2, 51], 80: [2, 51], 81: [2, 51], 82: [2, 51], 83: [2, 51], 84: [2, 51], 85: [2, 51] }, { 23: [2, 53] }, { 33: [1, 125] }, { 33: [2, 91], 65: [2, 91], 72: [2, 91], 80: [2, 91], 81: [2, 91], 82: [2, 91], 83: [2, 91], 84: [2, 91], 85: [2, 91] }, { 33: [2, 93] }, { 5: [2, 22], 14: [2, 22], 15: [2, 22], 19: [2, 22], 29: [2, 22], 34: [2, 22], 39: [2, 22], 44: [2, 22], 47: [2, 22], 48: [2, 22], 51: [2, 22], 55: [2, 22], 60: [2, 22] }, { 23: [2, 99], 33: [2, 99], 54: [2, 99], 68: [2, 99], 72: [2, 99], 75: [2, 99] }, { 73: [1, 109] }, { 20: 75, 63: 126, 64: 76, 65: [1, 44], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 23], 14: [2, 23], 15: [2, 23], 19: [2, 23], 29: [2, 23], 34: [2, 23], 39: [2, 23], 44: [2, 23], 47: [2, 23], 48: [2, 23], 51: [2, 23], 55: [2, 23], 60: [2, 23] }, { 47: [2, 19] }, { 47: [2, 77] }, { 20: 75, 33: [2, 72], 41: 127, 63: 128, 64: 76, 65: [1, 44], 69: 129, 70: 77, 71: 78, 72: [1, 79], 75: [2, 72], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 24], 14: [2, 24], 15: [2, 24], 19: [2, 24], 29: [2, 24], 34: [2, 24], 39: [2, 24], 44: [2, 24], 47: [2, 24], 48: [2, 24], 51: [2, 24], 55: [2, 24], 60: [2, 24] }, { 68: [1, 130] }, { 65: [2, 95], 68: [2, 95], 72: [2, 95], 80: [2, 95], 81: [2, 95], 82: [2, 95], 83: [2, 95], 84: [2, 95], 85: [2, 95] }, { 68: [2, 97] }, { 5: [2, 21], 14: [2, 21], 15: [2, 21], 19: [2, 21], 29: [2, 21], 34: [2, 21], 39: [2, 21], 44: [2, 21], 47: [2, 21], 48: [2, 21], 51: [2, 21], 55: [2, 21], 60: [2, 21] }, { 33: [1, 131] }, { 33: [2, 63] }, { 72: [1, 133], 76: 132 }, { 33: [1, 134] }, { 33: [2, 69] }, { 15: [2, 12] }, { 14: [2, 26], 15: [2, 26], 19: [2, 26], 29: [2, 26], 34: [2, 26], 47: [2, 26], 48: [2, 26], 51: [2, 26], 55: [2, 26], 60: [2, 26] }, { 23: [2, 31], 33: [2, 31], 54: [2, 31], 68: [2, 31], 72: [2, 31], 75: [2, 31] }, { 33: [2, 74], 42: 135, 74: 136, 75: [1, 121] }, { 33: [2, 71], 65: [2, 71], 72: [2, 71], 75: [2, 71], 80: [2, 71], 81: [2, 71], 82: [2, 71], 83: [2, 71], 84: [2, 71], 85: [2, 71] }, { 33: [2, 73], 75: [2, 73] }, { 23: [2, 29], 33: [2, 29], 54: [2, 29], 65: [2, 29], 68: [2, 29], 72: [2, 29], 75: [2, 29], 80: [2, 29], 81: [2, 29], 82: [2, 29], 83: [2, 29], 84: [2, 29], 85: [2, 29] }, { 14: [2, 15], 15: [2, 15], 19: [2, 15], 29: [2, 15], 34: [2, 15], 39: [2, 15], 44: [2, 15], 47: [2, 15], 48: [2, 15], 51: [2, 15], 55: [2, 15], 60: [2, 15] }, { 72: [1, 138], 77: [1, 137] }, { 72: [2, 100], 77: [2, 100] }, { 14: [2, 16], 15: [2, 16], 19: [2, 16], 29: [2, 16], 34: [2, 16], 44: [2, 16], 47: [2, 16], 48: [2, 16], 51: [2, 16], 55: [2, 16], 60: [2, 16] }, { 33: [1, 139] }, { 33: [2, 75] }, { 33: [2, 32] }, { 72: [2, 101], 77: [2, 101] }, { 14: [2, 17], 15: [2, 17], 19: [2, 17], 29: [2, 17], 34: [2, 17], 39: [2, 17], 44: [2, 17], 47: [2, 17], 48: [2, 17], 51: [2, 17], 55: [2, 17], 60: [2, 17] }],\n      defaultActions: { 4: [2, 1], 55: [2, 55], 57: [2, 20], 61: [2, 57], 74: [2, 81], 83: [2, 85], 87: [2, 18], 91: [2, 89], 102: [2, 53], 105: [2, 93], 111: [2, 19], 112: [2, 77], 117: [2, 97], 120: [2, 63], 123: [2, 69], 124: [2, 12], 136: [2, 75], 137: [2, 32] },\n      parseError: function parseError(str, hash) {\n        throw new Error(str);\n      },\n      parse: function parse(input) {\n        var self = this,\n            stack = [0],\n            vstack = [null],\n            lstack = [],\n            table = this.table,\n            yytext = \"\",\n            yylineno = 0,\n            yyleng = 0,\n            recovering = 0;\n        this.lexer.setInput(input);\n        this.lexer.yy = this.yy;\n        this.yy.lexer = this.lexer;\n        this.yy.parser = this;\n        if (typeof this.lexer.yylloc == \"undefined\") this.lexer.yylloc = {};\n        var yyloc = this.lexer.yylloc;\n        lstack.push(yyloc);\n        var ranges = this.lexer.options && this.lexer.options.ranges;\n        if (typeof this.yy.parseError === \"function\") this.parseError = this.yy.parseError;\n        function lex() {\n          var token;\n          token = self.lexer.lex() || 1;\n          if (typeof token !== \"number\") {\n            token = self.symbols_[token] || token;\n          }\n          return token;\n        }\n        var symbol,\n            preErrorSymbol,\n            state,\n            action,\n            a,\n            r,\n            yyval = {},\n            p,\n            len,\n            newState,\n            expected;\n        while (true) {\n          state = stack[stack.length - 1];\n          if (this.defaultActions[state]) {\n            action = this.defaultActions[state];\n          } else {\n            if (symbol === null || typeof symbol == \"undefined\") {\n              symbol = lex();\n            }\n            action = table[state] && table[state][symbol];\n          }\n          if (typeof action === \"undefined\" || !action.length || !action[0]) {\n            var errStr = \"\";\n            if (!recovering) {\n              expected = [];\n              for (p in table[state]) {\n                if (this.terminals_[p] && p > 2) {\n                  expected.push(\"'\" + this.terminals_[p] + \"'\");\n                }\n              }if (this.lexer.showPosition) {\n                errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + this.lexer.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n              } else {\n                errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == 1 ? \"end of input\" : \"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n              }\n              this.parseError(errStr, { text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected });\n            }\n          }\n          if (action[0] instanceof Array && action.length > 1) {\n            throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n          }\n          switch (action[0]) {\n            case 1:\n              stack.push(symbol);\n              vstack.push(this.lexer.yytext);\n              lstack.push(this.lexer.yylloc);\n              stack.push(action[1]);\n              symbol = null;\n              if (!preErrorSymbol) {\n                yyleng = this.lexer.yyleng;\n                yytext = this.lexer.yytext;\n                yylineno = this.lexer.yylineno;\n                yyloc = this.lexer.yylloc;\n                if (recovering > 0) recovering--;\n              } else {\n                symbol = preErrorSymbol;\n                preErrorSymbol = null;\n              }\n              break;\n            case 2:\n              len = this.productions_[action[1]][1];\n              yyval.$ = vstack[vstack.length - len];\n              yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column };\n              if (ranges) {\n                yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n              }\n              r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);\n              if (typeof r !== \"undefined\") {\n                return r;\n              }\n              if (len) {\n                stack = stack.slice(0, -1 * len * 2);\n                vstack = vstack.slice(0, -1 * len);\n                lstack = lstack.slice(0, -1 * len);\n              }\n              stack.push(this.productions_[action[1]][0]);\n              vstack.push(yyval.$);\n              lstack.push(yyval._$);\n              newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n              stack.push(newState);\n              break;\n            case 3:\n              return true;\n          }\n        }\n        return true;\n      }\n    };\n    /* Jison generated lexer */\n    var lexer = function () {\n      var lexer = { EOF: 1,\n        parseError: function parseError(str, hash) {\n          if (this.yy.parser) {\n            this.yy.parser.parseError(str, hash);\n          } else {\n            throw new Error(str);\n          }\n        },\n        setInput: function (input) {\n          this._input = input;\n          this._more = this._less = this.done = false;\n          this.yylineno = this.yyleng = 0;\n          this.yytext = this.matched = this.match = '';\n          this.conditionStack = ['INITIAL'];\n          this.yylloc = { first_line: 1, first_column: 0, last_line: 1, last_column: 0 };\n          if (this.options.ranges) this.yylloc.range = [0, 0];\n          this.offset = 0;\n          return this;\n        },\n        input: function () {\n          var ch = this._input[0];\n          this.yytext += ch;\n          this.yyleng++;\n          this.offset++;\n          this.match += ch;\n          this.matched += ch;\n          var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n          if (lines) {\n            this.yylineno++;\n            this.yylloc.last_line++;\n          } else {\n            this.yylloc.last_column++;\n          }\n          if (this.options.ranges) this.yylloc.range[1]++;\n\n          this._input = this._input.slice(1);\n          return ch;\n        },\n        unput: function (ch) {\n          var len = ch.length;\n          var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n          this._input = ch + this._input;\n          this.yytext = this.yytext.substr(0, this.yytext.length - len - 1);\n          //this.yyleng -= len;\n          this.offset -= len;\n          var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n          this.match = this.match.substr(0, this.match.length - 1);\n          this.matched = this.matched.substr(0, this.matched.length - 1);\n\n          if (lines.length - 1) this.yylineno -= lines.length - 1;\n          var r = this.yylloc.range;\n\n          this.yylloc = { first_line: this.yylloc.first_line,\n            last_line: this.yylineno + 1,\n            first_column: this.yylloc.first_column,\n            last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n          };\n\n          if (this.options.ranges) {\n            this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n          }\n          return this;\n        },\n        more: function () {\n          this._more = true;\n          return this;\n        },\n        less: function (n) {\n          this.unput(this.match.slice(n));\n        },\n        pastInput: function () {\n          var past = this.matched.substr(0, this.matched.length - this.match.length);\n          return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, \"\");\n        },\n        upcomingInput: function () {\n          var next = this.match;\n          if (next.length < 20) {\n            next += this._input.substr(0, 20 - next.length);\n          }\n          return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n        },\n        showPosition: function () {\n          var pre = this.pastInput();\n          var c = new Array(pre.length + 1).join(\"-\");\n          return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n        },\n        next: function () {\n          if (this.done) {\n            return this.EOF;\n          }\n          if (!this._input) this.done = true;\n\n          var token, match, tempMatch, index, col, lines;\n          if (!this._more) {\n            this.yytext = '';\n            this.match = '';\n          }\n          var rules = this._currentRules();\n          for (var i = 0; i < rules.length; i++) {\n            tempMatch = this._input.match(this.rules[rules[i]]);\n            if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n              match = tempMatch;\n              index = i;\n              if (!this.options.flex) break;\n            }\n          }\n          if (match) {\n            lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n            if (lines) this.yylineno += lines.length;\n            this.yylloc = { first_line: this.yylloc.last_line,\n              last_line: this.yylineno + 1,\n              first_column: this.yylloc.last_column,\n              last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length };\n            this.yytext += match[0];\n            this.match += match[0];\n            this.matches = match;\n            this.yyleng = this.yytext.length;\n            if (this.options.ranges) {\n              this.yylloc.range = [this.offset, this.offset += this.yyleng];\n            }\n            this._more = false;\n            this._input = this._input.slice(match[0].length);\n            this.matched += match[0];\n            token = this.performAction.call(this, this.yy, this, rules[index], this.conditionStack[this.conditionStack.length - 1]);\n            if (this.done && this._input) this.done = false;\n            if (token) return token;else return;\n          }\n          if (this._input === \"\") {\n            return this.EOF;\n          } else {\n            return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), { text: \"\", token: null, line: this.yylineno });\n          }\n        },\n        lex: function lex() {\n          var r = this.next();\n          if (typeof r !== 'undefined') {\n            return r;\n          } else {\n            return this.lex();\n          }\n        },\n        begin: function begin(condition) {\n          this.conditionStack.push(condition);\n        },\n        popState: function popState() {\n          return this.conditionStack.pop();\n        },\n        _currentRules: function _currentRules() {\n          return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n        },\n        topState: function () {\n          return this.conditionStack[this.conditionStack.length - 2];\n        },\n        pushState: function begin(condition) {\n          this.begin(condition);\n        } };\n      lexer.options = {};\n      lexer.performAction = function anonymous(yy, yy_, $avoiding_name_collisions, YY_START\n      /**/) {\n\n        function strip(start, end) {\n          return yy_.yytext = yy_.yytext.substr(start, yy_.yyleng - end);\n        }\n\n        switch ($avoiding_name_collisions) {\n          case 0:\n            if (yy_.yytext.slice(-2) === \"\\\\\\\\\") {\n              strip(0, 1);\n              this.begin(\"mu\");\n            } else if (yy_.yytext.slice(-1) === \"\\\\\") {\n              strip(0, 1);\n              this.begin(\"emu\");\n            } else {\n              this.begin(\"mu\");\n            }\n            if (yy_.yytext) return 15;\n\n            break;\n          case 1:\n            return 15;\n            break;\n          case 2:\n            this.popState();\n            return 15;\n\n            break;\n          case 3:\n            this.begin('raw');return 15;\n            break;\n          case 4:\n            this.popState();\n            // Should be using `this.topState()` below, but it currently\n            // returns the second top instead of the first top. Opened an\n            // issue about it at https://github.com/zaach/jison/issues/291\n            if (this.conditionStack[this.conditionStack.length - 1] === 'raw') {\n              return 15;\n            } else {\n              yy_.yytext = yy_.yytext.substr(5, yy_.yyleng - 9);\n              return 'END_RAW_BLOCK';\n            }\n\n            break;\n          case 5:\n            return 15;\n            break;\n          case 6:\n            this.popState();\n            return 14;\n\n            break;\n          case 7:\n            return 65;\n            break;\n          case 8:\n            return 68;\n            break;\n          case 9:\n            return 19;\n            break;\n          case 10:\n            this.popState();\n            this.begin('raw');\n            return 23;\n\n            break;\n          case 11:\n            return 55;\n            break;\n          case 12:\n            return 60;\n            break;\n          case 13:\n            return 29;\n            break;\n          case 14:\n            return 47;\n            break;\n          case 15:\n            this.popState();return 44;\n            break;\n          case 16:\n            this.popState();return 44;\n            break;\n          case 17:\n            return 34;\n            break;\n          case 18:\n            return 39;\n            break;\n          case 19:\n            return 51;\n            break;\n          case 20:\n            return 48;\n            break;\n          case 21:\n            this.unput(yy_.yytext);\n            this.popState();\n            this.begin('com');\n\n            break;\n          case 22:\n            this.popState();\n            return 14;\n\n            break;\n          case 23:\n            return 48;\n            break;\n          case 24:\n            return 73;\n            break;\n          case 25:\n            return 72;\n            break;\n          case 26:\n            return 72;\n            break;\n          case 27:\n            return 87;\n            break;\n          case 28:\n            // ignore whitespace\n            break;\n          case 29:\n            this.popState();return 54;\n            break;\n          case 30:\n            this.popState();return 33;\n            break;\n          case 31:\n            yy_.yytext = strip(1, 2).replace(/\\\\\"/g, '\"');return 80;\n            break;\n          case 32:\n            yy_.yytext = strip(1, 2).replace(/\\\\'/g, \"'\");return 80;\n            break;\n          case 33:\n            return 85;\n            break;\n          case 34:\n            return 82;\n            break;\n          case 35:\n            return 82;\n            break;\n          case 36:\n            return 83;\n            break;\n          case 37:\n            return 84;\n            break;\n          case 38:\n            return 81;\n            break;\n          case 39:\n            return 75;\n            break;\n          case 40:\n            return 77;\n            break;\n          case 41:\n            return 72;\n            break;\n          case 42:\n            yy_.yytext = yy_.yytext.replace(/\\\\([\\\\\\]])/g, '$1');return 72;\n            break;\n          case 43:\n            return 'INVALID';\n            break;\n          case 44:\n            return 5;\n            break;\n        }\n      };\n      lexer.rules = [/^(?:[^\\x00]*?(?=(\\{\\{)))/, /^(?:[^\\x00]+)/, /^(?:[^\\x00]{2,}?(?=(\\{\\{|\\\\\\{\\{|\\\\\\\\\\{\\{|$)))/, /^(?:\\{\\{\\{\\{(?=[^\\/]))/, /^(?:\\{\\{\\{\\{\\/[^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=[=}\\s\\/.])\\}\\}\\}\\})/, /^(?:[^\\x00]*?(?=(\\{\\{\\{\\{)))/, /^(?:[\\s\\S]*?--(~)?\\}\\})/, /^(?:\\()/, /^(?:\\))/, /^(?:\\{\\{\\{\\{)/, /^(?:\\}\\}\\}\\})/, /^(?:\\{\\{(~)?>)/, /^(?:\\{\\{(~)?#>)/, /^(?:\\{\\{(~)?#\\*?)/, /^(?:\\{\\{(~)?\\/)/, /^(?:\\{\\{(~)?\\^\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\s*else\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\^)/, /^(?:\\{\\{(~)?\\s*else\\b)/, /^(?:\\{\\{(~)?\\{)/, /^(?:\\{\\{(~)?&)/, /^(?:\\{\\{(~)?!--)/, /^(?:\\{\\{(~)?![\\s\\S]*?\\}\\})/, /^(?:\\{\\{(~)?\\*?)/, /^(?:=)/, /^(?:\\.\\.)/, /^(?:\\.(?=([=~}\\s\\/.)|])))/, /^(?:[\\/.])/, /^(?:\\s+)/, /^(?:\\}(~)?\\}\\})/, /^(?:(~)?\\}\\})/, /^(?:\"(\\\\[\"]|[^\"])*\")/, /^(?:'(\\\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\\s)])))/, /^(?:false(?=([~}\\s)])))/, /^(?:undefined(?=([~}\\s)])))/, /^(?:null(?=([~}\\s)])))/, /^(?:-?[0-9]+(?:\\.[0-9]+)?(?=([~}\\s)])))/, /^(?:as\\s+\\|)/, /^(?:\\|)/, /^(?:([^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=([=~}\\s\\/.)|]))))/, /^(?:\\[(\\\\\\]|[^\\]])*\\])/, /^(?:.)/, /^(?:$)/];\n      lexer.conditions = { \"mu\": { \"rules\": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44], \"inclusive\": false }, \"emu\": { \"rules\": [2], \"inclusive\": false }, \"com\": { \"rules\": [6], \"inclusive\": false }, \"raw\": { \"rules\": [3, 4, 5], \"inclusive\": false }, \"INITIAL\": { \"rules\": [0, 1, 44], \"inclusive\": true } };\n      return lexer;\n    }();\n    parser.lexer = lexer;\n    function Parser() {\n      this.yy = {};\n    }Parser.prototype = parser;parser.Parser = Parser;\n    return new Parser();\n  }();\n\n  var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];\n\n  function Exception(message, node) {\n    var loc = node && node.loc,\n        line = void 0,\n        column = void 0;\n    if (loc) {\n      line = loc.start.line;\n      column = loc.start.column;\n\n      message += ' - ' + line + ':' + column;\n    }\n\n    var tmp = Error.prototype.constructor.call(this, message);\n\n    // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n    for (var idx = 0; idx < errorProps.length; idx++) {\n      this[errorProps[idx]] = tmp[errorProps[idx]];\n    }\n\n    /* istanbul ignore else */\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, Exception);\n    }\n\n    try {\n      if (loc) {\n        this.lineNumber = line;\n\n        // Work around issue under safari where we can't directly set the column value\n        /* istanbul ignore next */\n        if (Object.defineProperty) {\n          Object.defineProperty(this, 'column', {\n            value: column,\n            enumerable: true\n          });\n        } else {\n          this.column = column;\n        }\n      }\n    } catch (nop) {\n      /* Ignore if the browser is very particular */\n    }\n  }\n\n  Exception.prototype = new Error();\n\n  function Visitor() {\n    this.parents = [];\n  }\n\n  Visitor.prototype = {\n    constructor: Visitor,\n    mutating: false,\n\n    // Visits a given value. If mutating, will replace the value if necessary.\n    acceptKey: function (node, name) {\n      var value = this.accept(node[name]);\n      if (this.mutating) {\n        // Hacky sanity check: This may have a few false positives for type for the helper\n        // methods but will generally do the right thing without a lot of overhead.\n        if (value && !Visitor.prototype[value.type]) {\n          throw new Exception('Unexpected node type \"' + value.type + '\" found when accepting ' + name + ' on ' + node.type);\n        }\n        node[name] = value;\n      }\n    },\n\n    // Performs an accept operation with added sanity check to ensure\n    // required keys are not removed.\n    acceptRequired: function (node, name) {\n      this.acceptKey(node, name);\n\n      if (!node[name]) {\n        throw new Exception(node.type + ' requires ' + name);\n      }\n    },\n\n    // Traverses a given array. If mutating, empty respnses will be removed\n    // for child elements.\n    acceptArray: function (array) {\n      for (var i = 0, l = array.length; i < l; i++) {\n        this.acceptKey(array, i);\n\n        if (!array[i]) {\n          array.splice(i, 1);\n          i--;\n          l--;\n        }\n      }\n    },\n\n    accept: function (object) {\n      if (!object) {\n        return;\n      }\n\n      /* istanbul ignore next: Sanity code */\n      if (!this[object.type]) {\n        throw new Exception('Unknown type: ' + object.type, object);\n      }\n\n      if (this.current) {\n        this.parents.unshift(this.current);\n      }\n      this.current = object;\n\n      var ret = this[object.type](object);\n\n      this.current = this.parents.shift();\n\n      if (!this.mutating || ret) {\n        return ret;\n      } else if (ret !== false) {\n        return object;\n      }\n    },\n\n    Program: function (program) {\n      this.acceptArray(program.body);\n    },\n\n    MustacheStatement: visitSubExpression,\n    Decorator: visitSubExpression,\n\n    BlockStatement: visitBlock,\n    DecoratorBlock: visitBlock,\n\n    PartialStatement: visitPartial,\n    PartialBlockStatement: function (partial) {\n      visitPartial.call(this, partial);\n\n      this.acceptKey(partial, 'program');\n    },\n\n    ContentStatement: function () /* content */{},\n    CommentStatement: function () /* comment */{},\n\n    SubExpression: visitSubExpression,\n\n    PathExpression: function () /* path */{},\n\n    StringLiteral: function () /* string */{},\n    NumberLiteral: function () /* number */{},\n    BooleanLiteral: function () /* bool */{},\n    UndefinedLiteral: function () /* literal */{},\n    NullLiteral: function () /* literal */{},\n\n    Hash: function (hash) {\n      this.acceptArray(hash.pairs);\n    },\n    HashPair: function (pair) {\n      this.acceptRequired(pair, 'value');\n    }\n  };\n\n  function visitSubExpression(mustache) {\n    this.acceptRequired(mustache, 'path');\n    this.acceptArray(mustache.params);\n    this.acceptKey(mustache, 'hash');\n  }\n  function visitBlock(block) {\n    visitSubExpression.call(this, block);\n\n    this.acceptKey(block, 'program');\n    this.acceptKey(block, 'inverse');\n  }\n  function visitPartial(partial) {\n    this.acceptRequired(partial, 'name');\n    this.acceptArray(partial.params);\n    this.acceptKey(partial, 'hash');\n  }\n\n  function WhitespaceControl() {\n    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    this.options = options;\n  }\n  WhitespaceControl.prototype = new Visitor();\n\n  WhitespaceControl.prototype.Program = function (program) {\n    var doStandalone = !this.options.ignoreStandalone;\n\n    var isRoot = !this.isRootSeen;\n    this.isRootSeen = true;\n\n    var body = program.body;\n    for (var i = 0, l = body.length; i < l; i++) {\n      var current = body[i],\n          strip = this.accept(current);\n\n      if (!strip) {\n        continue;\n      }\n\n      var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot),\n          _isNextWhitespace = isNextWhitespace(body, i, isRoot),\n          openStandalone = strip.openStandalone && _isPrevWhitespace,\n          closeStandalone = strip.closeStandalone && _isNextWhitespace,\n          inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace;\n\n      if (strip.close) {\n        omitRight(body, i, true);\n      }\n      if (strip.open) {\n        omitLeft(body, i, true);\n      }\n\n      if (doStandalone && inlineStandalone) {\n        omitRight(body, i);\n\n        if (omitLeft(body, i)) {\n          // If we are on a standalone node, save the indent info for partials\n          if (current.type === 'PartialStatement') {\n            // Pull out the whitespace from the final line\n            current.indent = /([ \\t]+$)/.exec(body[i - 1].original)[1];\n          }\n        }\n      }\n      if (doStandalone && openStandalone) {\n        omitRight((current.program || current.inverse).body);\n\n        // Strip out the previous content node if it's whitespace only\n        omitLeft(body, i);\n      }\n      if (doStandalone && closeStandalone) {\n        // Always strip the next node\n        omitRight(body, i);\n\n        omitLeft((current.inverse || current.program).body);\n      }\n    }\n\n    return program;\n  };\n\n  WhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function (block) {\n    this.accept(block.program);\n    this.accept(block.inverse);\n\n    // Find the inverse program that is involed with whitespace stripping.\n    var program = block.program || block.inverse,\n        inverse = block.program && block.inverse,\n        firstInverse = inverse,\n        lastInverse = inverse;\n\n    if (inverse && inverse.chained) {\n      firstInverse = inverse.body[0].program;\n\n      // Walk the inverse chain to find the last inverse that is actually in the chain.\n      while (lastInverse.chained) {\n        lastInverse = lastInverse.body[lastInverse.body.length - 1].program;\n      }\n    }\n\n    var strip = {\n      open: block.openStrip.open,\n      close: block.closeStrip.close,\n\n      // Determine the standalone candiacy. Basically flag our content as being possibly standalone\n      // so our parent can determine if we actually are standalone\n      openStandalone: isNextWhitespace(program.body),\n      closeStandalone: isPrevWhitespace((firstInverse || program).body)\n    };\n\n    if (block.openStrip.close) {\n      omitRight(program.body, null, true);\n    }\n\n    if (inverse) {\n      var inverseStrip = block.inverseStrip;\n\n      if (inverseStrip.open) {\n        omitLeft(program.body, null, true);\n      }\n\n      if (inverseStrip.close) {\n        omitRight(firstInverse.body, null, true);\n      }\n      if (block.closeStrip.open) {\n        omitLeft(lastInverse.body, null, true);\n      }\n\n      // Find standalone else statments\n      if (!this.options.ignoreStandalone && isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) {\n        omitLeft(program.body);\n        omitRight(firstInverse.body);\n      }\n    } else if (block.closeStrip.open) {\n      omitLeft(program.body, null, true);\n    }\n\n    return strip;\n  };\n\n  WhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function (mustache) {\n    return mustache.strip;\n  };\n\n  WhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) {\n    /* istanbul ignore next */\n    var strip = node.strip || {};\n    return {\n      inlineStandalone: true,\n      open: strip.open,\n      close: strip.close\n    };\n  };\n\n  function isPrevWhitespace(body, i, isRoot) {\n    if (i === undefined) {\n      i = body.length;\n    }\n\n    // Nodes that end with newlines are considered whitespace (but are special\n    // cased for strip operations)\n    var prev = body[i - 1],\n        sibling = body[i - 2];\n    if (!prev) {\n      return isRoot;\n    }\n\n    if (prev.type === 'ContentStatement') {\n      return (sibling || !isRoot ? /\\r?\\n\\s*?$/ : /(^|\\r?\\n)\\s*?$/).test(prev.original);\n    }\n  }\n  function isNextWhitespace(body, i, isRoot) {\n    if (i === undefined) {\n      i = -1;\n    }\n\n    var next = body[i + 1],\n        sibling = body[i + 2];\n    if (!next) {\n      return isRoot;\n    }\n\n    if (next.type === 'ContentStatement') {\n      return (sibling || !isRoot ? /^\\s*?\\r?\\n/ : /^\\s*?(\\r?\\n|$)/).test(next.original);\n    }\n  }\n\n  // Marks the node to the right of the position as omitted.\n  // I.e. {{foo}}' ' will mark the ' ' node as omitted.\n  //\n  // If i is undefined, then the first child will be marked as such.\n  //\n  // If mulitple is truthy then all whitespace will be stripped out until non-whitespace\n  // content is met.\n  function omitRight(body, i, multiple) {\n    var current = body[i == null ? 0 : i + 1];\n    if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) {\n      return;\n    }\n\n    var original = current.value;\n    current.value = current.value.replace(multiple ? /^\\s+/ : /^[ \\t]*\\r?\\n?/, '');\n    current.rightStripped = current.value !== original;\n  }\n\n  // Marks the node to the left of the position as omitted.\n  // I.e. ' '{{foo}} will mark the ' ' node as omitted.\n  //\n  // If i is undefined then the last child will be marked as such.\n  //\n  // If mulitple is truthy then all whitespace will be stripped out until non-whitespace\n  // content is met.\n  function omitLeft(body, i, multiple) {\n    var current = body[i == null ? body.length - 1 : i - 1];\n    if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) {\n      return;\n    }\n\n    // We omit the last node if it's whitespace only and not preceeded by a non-content node.\n    var original = current.value;\n    current.value = current.value.replace(multiple ? /\\s+$/ : /[ \\t]+$/, '');\n    current.leftStripped = current.value !== original;\n    return current.leftStripped;\n  }\n\n  function validateClose(open, close) {\n    close = close.path ? close.path.original : close;\n\n    if (open.path.original !== close) {\n      var errorNode = { loc: open.path.loc };\n\n      throw new Exception(open.path.original + \" doesn't match \" + close, errorNode);\n    }\n  }\n\n  function SourceLocation(source, locInfo) {\n    this.source = source;\n    this.start = {\n      line: locInfo.first_line,\n      column: locInfo.first_column\n    };\n    this.end = {\n      line: locInfo.last_line,\n      column: locInfo.last_column\n    };\n  }\n\n  function id(token) {\n    if (/^\\[.*\\]$/.test(token)) {\n      return token.substr(1, token.length - 2);\n    } else {\n      return token;\n    }\n  }\n\n  function stripFlags(open, close) {\n    return {\n      open: open.charAt(2) === '~',\n      close: close.charAt(close.length - 3) === '~'\n    };\n  }\n\n  function stripComment(comment) {\n    return comment.replace(/^\\{\\{~?\\!-?-?/, '').replace(/-?-?~?\\}\\}$/, '');\n  }\n\n  function preparePath(data, parts, loc) {\n    loc = this.locInfo(loc);\n\n    var original = data ? '@' : '',\n        dig = [],\n        depth = 0;\n\n    for (var i = 0, l = parts.length; i < l; i++) {\n      var part = parts[i].part,\n\n      // If we have [] syntax then we do not treat path references as operators,\n      // i.e. foo.[this] resolves to approximately context.foo['this']\n      isLiteral = parts[i].original !== part;\n      original += (parts[i].separator || '') + part;\n\n      if (!isLiteral && (part === '..' || part === '.' || part === 'this')) {\n        if (dig.length > 0) {\n          throw new Exception('Invalid path: ' + original, { loc: loc });\n        } else if (part === '..') {\n          depth++;\n        }\n      } else {\n        dig.push(part);\n      }\n    }\n\n    return {\n      type: 'PathExpression',\n      data: data,\n      depth: depth,\n      parts: dig,\n      original: original,\n      loc: loc\n    };\n  }\n\n  function prepareMustache(path, params, hash, open, strip, locInfo) {\n    // Must use charAt to support IE pre-10\n    var escapeFlag = open.charAt(3) || open.charAt(2),\n        escaped = escapeFlag !== '{' && escapeFlag !== '&';\n\n    var decorator = /\\*/.test(open);\n    return {\n      type: decorator ? 'Decorator' : 'MustacheStatement',\n      path: path,\n      params: params,\n      hash: hash,\n      escaped: escaped,\n      strip: strip,\n      loc: this.locInfo(locInfo)\n    };\n  }\n\n  function prepareRawBlock(openRawBlock, contents, close, locInfo) {\n    validateClose(openRawBlock, close);\n\n    locInfo = this.locInfo(locInfo);\n    var program = {\n      type: 'Program',\n      body: contents,\n      strip: {},\n      loc: locInfo\n    };\n\n    return {\n      type: 'BlockStatement',\n      path: openRawBlock.path,\n      params: openRawBlock.params,\n      hash: openRawBlock.hash,\n      program: program,\n      openStrip: {},\n      inverseStrip: {},\n      closeStrip: {},\n      loc: locInfo\n    };\n  }\n\n  function prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) {\n    if (close && close.path) {\n      validateClose(openBlock, close);\n    }\n\n    var decorator = /\\*/.test(openBlock.open);\n\n    program.blockParams = openBlock.blockParams;\n\n    var inverse = void 0,\n        inverseStrip = void 0;\n\n    if (inverseAndProgram) {\n      if (decorator) {\n        throw new Exception('Unexpected inverse block on decorator', inverseAndProgram);\n      }\n\n      if (inverseAndProgram.chain) {\n        inverseAndProgram.program.body[0].closeStrip = close.strip;\n      }\n\n      inverseStrip = inverseAndProgram.strip;\n      inverse = inverseAndProgram.program;\n    }\n\n    if (inverted) {\n      inverted = inverse;\n      inverse = program;\n      program = inverted;\n    }\n\n    return {\n      type: decorator ? 'DecoratorBlock' : 'BlockStatement',\n      path: openBlock.path,\n      params: openBlock.params,\n      hash: openBlock.hash,\n      program: program,\n      inverse: inverse,\n      openStrip: openBlock.strip,\n      inverseStrip: inverseStrip,\n      closeStrip: close && close.strip,\n      loc: this.locInfo(locInfo)\n    };\n  }\n\n  function prepareProgram(statements, loc) {\n    if (!loc && statements.length) {\n      var firstLoc = statements[0].loc,\n          lastLoc = statements[statements.length - 1].loc;\n\n      /* istanbul ignore else */\n      if (firstLoc && lastLoc) {\n        loc = {\n          source: firstLoc.source,\n          start: {\n            line: firstLoc.start.line,\n            column: firstLoc.start.column\n          },\n          end: {\n            line: lastLoc.end.line,\n            column: lastLoc.end.column\n          }\n        };\n      }\n    }\n\n    return {\n      type: 'Program',\n      body: statements,\n      strip: {},\n      loc: loc\n    };\n  }\n\n  function preparePartialBlock(open, program, close, locInfo) {\n    validateClose(open, close);\n\n    return {\n      type: 'PartialBlockStatement',\n      name: open.path,\n      params: open.params,\n      hash: open.hash,\n      program: program,\n      openStrip: open.strip,\n      closeStrip: close && close.strip,\n      loc: this.locInfo(locInfo)\n    };\n  }\n\n  var Helpers = Object.freeze({\n    SourceLocation: SourceLocation,\n    id: id,\n    stripFlags: stripFlags,\n    stripComment: stripComment,\n    preparePath: preparePath,\n    prepareMustache: prepareMustache,\n    prepareRawBlock: prepareRawBlock,\n    prepareBlock: prepareBlock,\n    prepareProgram: prepareProgram,\n    preparePartialBlock: preparePartialBlock\n  });\n\n  function extend(obj /* , ...source */) {\n    for (var i = 1; i < arguments.length; i++) {\n      for (var key in arguments[i]) {\n        if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n          obj[key] = arguments[i][key];\n        }\n      }\n    }\n\n    return obj;\n  }\n\n  var toString = Object.prototype.toString;\n\n  // Sourced from lodash\n  // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n  /* eslint-disable func-style */\n  var isFunction = function (value) {\n    return typeof value === 'function';\n  };\n  // fallback for older versions of Chrome and Safari\n  /* istanbul ignore next */\n  if (isFunction(/x/)) {\n    isFunction = function (value) {\n      return typeof value === 'function' && toString.call(value) === '[object Function]';\n    };\n  }\n  /* eslint-enable func-style */\n\n  /* istanbul ignore next */\n\n  // Older IE versions do not directly support indexOf so we must implement our own, sadly.\n\n  var yy = {};\n  extend(yy, Helpers);\n\n  function parse(input, options) {\n    // Just return if an already-compiled AST was passed in.\n    if (input.type === 'Program') {\n      return input;\n    }\n\n    handlebars.yy = yy;\n\n    // Altering the shared object here, but this is ok as parser is a sync operation\n    yy.locInfo = function (locInfo) {\n      return new yy.SourceLocation(options && options.srcName, locInfo);\n    };\n\n    var strip = new WhitespaceControl(options);\n    return strip.accept(handlebars.parse(input));\n  }\n\n  exports.parser = handlebars;\n  exports.parse = parse;\n});","/*global enifed */\nenifed('node-module', ['exports'], function(_exports) {\n  var IS_NODE = typeof module === 'object' && typeof module.require === 'function';\n  if (IS_NODE) {\n    _exports.require = module.require;\n    _exports.module = module;\n    _exports.IS_NODE = IS_NODE;\n  } else {\n    _exports.require = null;\n    _exports.module = null;\n    _exports.IS_NODE = IS_NODE;\n  }\n});","enifed(\"route-recognizer\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    var createObject = Object.create;\n    function createMap() {\n        var map = createObject(null);\n        map[\"__\"] = undefined;\n        delete map[\"__\"];\n        return map;\n    }\n\n    var Target = function Target(path, matcher, delegate) {\n        this.path = path;\n        this.matcher = matcher;\n        this.delegate = delegate;\n    };\n    Target.prototype.to = function to(target, callback) {\n        var delegate = this.delegate;\n        if (delegate && delegate.willAddRoute) {\n            target = delegate.willAddRoute(this.matcher.target, target);\n        }\n        this.matcher.add(this.path, target);\n        if (callback) {\n            if (callback.length === 0) {\n                throw new Error(\"You must have an argument in the function passed to `to`\");\n            }\n            this.matcher.addChild(this.path, target, callback, this.delegate);\n        }\n    };\n    var Matcher = function Matcher(target) {\n        this.routes = createMap();\n        this.children = createMap();\n        this.target = target;\n    };\n    Matcher.prototype.add = function add(path, target) {\n        this.routes[path] = target;\n    };\n    Matcher.prototype.addChild = function addChild(path, target, callback, delegate) {\n        var matcher = new Matcher(target);\n        this.children[path] = matcher;\n        var match = generateMatch(path, matcher, delegate);\n        if (delegate && delegate.contextEntered) {\n            delegate.contextEntered(target, match);\n        }\n        callback(match);\n    };\n    function generateMatch(startingPath, matcher, delegate) {\n        function match(path, callback) {\n            var fullPath = startingPath + path;\n            if (callback) {\n                callback(generateMatch(fullPath, matcher, delegate));\n            } else {\n                return new Target(fullPath, matcher, delegate);\n            }\n        }\n\n        return match;\n    }\n    function addRoute(routeArray, path, handler) {\n        var len = 0;\n        for (var i = 0; i < routeArray.length; i++) {\n            len += routeArray[i].path.length;\n        }\n        path = path.substr(len);\n        var route = { path: path, handler: handler };\n        routeArray.push(route);\n    }\n    function eachRoute(baseRoute, matcher, callback, binding) {\n        var routes = matcher.routes;\n        var paths = Object.keys(routes);\n        for (var i = 0; i < paths.length; i++) {\n            var path = paths[i];\n            var routeArray = baseRoute.slice();\n            addRoute(routeArray, path, routes[path]);\n            var nested = matcher.children[path];\n            if (nested) {\n                eachRoute(routeArray, nested, callback, binding);\n            } else {\n                callback.call(binding, routeArray);\n            }\n        }\n    }\n    var map = function (callback, addRouteCallback) {\n        var matcher = new Matcher();\n        callback(generateMatch(\"\", matcher, this.delegate));\n        eachRoute([], matcher, function (routes) {\n            if (addRouteCallback) {\n                addRouteCallback(this, routes);\n            } else {\n                this.add(routes);\n            }\n        }, this);\n    };\n\n    // Normalizes percent-encoded values in `path` to upper-case and decodes percent-encoded\n    // values that are not reserved (i.e., unicode characters, emoji, etc). The reserved\n    // chars are \"/\" and \"%\".\n    // Safe to call multiple times on the same path.\n    // Normalizes percent-encoded values in `path` to upper-case and decodes percent-encoded\n    function normalizePath(path) {\n        return path.split(\"/\").map(normalizeSegment).join(\"/\");\n    }\n    // We want to ensure the characters \"%\" and \"/\" remain in percent-encoded\n    // form when normalizing paths, so replace them with their encoded form after\n    // decoding the rest of the path\n    var SEGMENT_RESERVED_CHARS = /%|\\//g;\n    function normalizeSegment(segment) {\n        if (segment.length < 3 || segment.indexOf(\"%\") === -1) {\n            return segment;\n        }\n        return decodeURIComponent(segment).replace(SEGMENT_RESERVED_CHARS, encodeURIComponent);\n    }\n    // We do not want to encode these characters when generating dynamic path segments\n    // See https://tools.ietf.org/html/rfc3986#section-3.3\n    // sub-delims: \"!\", \"$\", \"&\", \"'\", \"(\", \")\", \"*\", \"+\", \",\", \";\", \"=\"\n    // others allowed by RFC 3986: \":\", \"@\"\n    //\n    // First encode the entire path segment, then decode any of the encoded special chars.\n    //\n    // The chars \"!\", \"'\", \"(\", \")\", \"*\" do not get changed by `encodeURIComponent`,\n    // so the possible encoded chars are:\n    // ['%24', '%26', '%2B', '%2C', '%3B', '%3D', '%3A', '%40'].\n    var PATH_SEGMENT_ENCODINGS = /%(?:2(?:4|6|B|C)|3(?:B|D|A)|40)/g;\n    function encodePathSegment(str) {\n        return encodeURIComponent(str).replace(PATH_SEGMENT_ENCODINGS, decodeURIComponent);\n    }\n\n    var escapeRegex = /(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\)/g;\n    var isArray = Array.isArray;\n    var hasOwnProperty = Object.prototype.hasOwnProperty;\n    function getParam(params, key) {\n        if (typeof params !== \"object\" || params === null) {\n            throw new Error(\"You must pass an object as the second argument to `generate`.\");\n        }\n        if (!hasOwnProperty.call(params, key)) {\n            throw new Error(\"You must provide param `\" + key + \"` to `generate`.\");\n        }\n        var value = params[key];\n        var str = typeof value === \"string\" ? value : \"\" + value;\n        if (str.length === 0) {\n            throw new Error(\"You must provide a param `\" + key + \"`.\");\n        }\n        return str;\n    }\n    var eachChar = [];\n    eachChar[0 /* Static */] = function (segment, currentState) {\n        var state = currentState;\n        var value = segment.value;\n        for (var i = 0; i < value.length; i++) {\n            var ch = value.charCodeAt(i);\n            state = state.put(ch, false, false);\n        }\n        return state;\n    };\n    eachChar[1 /* Dynamic */] = function (_, currentState) {\n        return currentState.put(47 /* SLASH */, true, true);\n    };\n    eachChar[2 /* Star */] = function (_, currentState) {\n        return currentState.put(-1 /* ANY */, false, true);\n    };\n    eachChar[4 /* Epsilon */] = function (_, currentState) {\n        return currentState;\n    };\n    var regex = [];\n    regex[0 /* Static */] = function (segment) {\n        return segment.value.replace(escapeRegex, \"\\\\$1\");\n    };\n    regex[1 /* Dynamic */] = function () {\n        return \"([^/]+)\";\n    };\n    regex[2 /* Star */] = function () {\n        return \"(.+)\";\n    };\n    regex[4 /* Epsilon */] = function () {\n        return \"\";\n    };\n    var generate = [];\n    generate[0 /* Static */] = function (segment) {\n        return segment.value;\n    };\n    generate[1 /* Dynamic */] = function (segment, params) {\n        var value = getParam(params, segment.value);\n        if (RouteRecognizer.ENCODE_AND_DECODE_PATH_SEGMENTS) {\n            return encodePathSegment(value);\n        } else {\n            return value;\n        }\n    };\n    generate[2 /* Star */] = function (segment, params) {\n        return getParam(params, segment.value);\n    };\n    generate[4 /* Epsilon */] = function () {\n        return \"\";\n    };\n    var EmptyObject = Object.freeze({});\n    var EmptyArray = Object.freeze([]);\n    // The `names` will be populated with the paramter name for each dynamic/star\n    // segment. `shouldDecodes` will be populated with a boolean for each dyanamic/star\n    // segment, indicating whether it should be decoded during recognition.\n    function parse(segments, route, types) {\n        // normalize route as not starting with a \"/\". Recognition will\n        // also normalize.\n        if (route.length > 0 && route.charCodeAt(0) === 47 /* SLASH */) {\n                route = route.substr(1);\n            }\n        var parts = route.split(\"/\");\n        var names = undefined;\n        var shouldDecodes = undefined;\n        for (var i = 0; i < parts.length; i++) {\n            var part = parts[i];\n            var flags = 0;\n            var type = 0;\n            if (part === \"\") {\n                type = 4 /* Epsilon */;\n            } else if (part.charCodeAt(0) === 58 /* COLON */) {\n                    type = 1 /* Dynamic */;\n                } else if (part.charCodeAt(0) === 42 /* STAR */) {\n                    type = 2 /* Star */;\n                } else {\n                type = 0 /* Static */;\n            }\n            flags = 2 << type;\n            if (flags & 12 /* Named */) {\n                    part = part.slice(1);\n                    names = names || [];\n                    names.push(part);\n                    shouldDecodes = shouldDecodes || [];\n                    shouldDecodes.push((flags & 4 /* Decoded */) !== 0);\n                }\n            if (flags & 14 /* Counted */) {\n                    types[type]++;\n                }\n            segments.push({\n                type: type,\n                value: normalizeSegment(part)\n            });\n        }\n        return {\n            names: names || EmptyArray,\n            shouldDecodes: shouldDecodes || EmptyArray\n        };\n    }\n    function isEqualCharSpec(spec, char, negate) {\n        return spec.char === char && spec.negate === negate;\n    }\n    // A State has a character specification and (`charSpec`) and a list of possible\n    // subsequent states (`nextStates`).\n    //\n    // If a State is an accepting state, it will also have several additional\n    // properties:\n    //\n    // * `regex`: A regular expression that is used to extract parameters from paths\n    //   that reached this accepting state.\n    // * `handlers`: Information on how to convert the list of captures into calls\n    //   to registered handlers with the specified parameters\n    // * `types`: How many static, dynamic or star segments in this route. Used to\n    //   decide which route to use if multiple registered routes match a path.\n    //\n    // Currently, State is implemented naively by looping over `nextStates` and\n    // comparing a character specification against a character. A more efficient\n    // implementation would use a hash of keys pointing at one or more next states.\n    var State = function State(states, id, char, negate, repeat) {\n        this.states = states;\n        this.id = id;\n        this.char = char;\n        this.negate = negate;\n        this.nextStates = repeat ? id : null;\n        this.pattern = \"\";\n        this._regex = undefined;\n        this.handlers = undefined;\n        this.types = undefined;\n    };\n    State.prototype.regex = function regex$1() {\n        if (!this._regex) {\n            this._regex = new RegExp(this.pattern);\n        }\n        return this._regex;\n    };\n    State.prototype.get = function get(char, negate) {\n        var this$1 = this;\n\n        var nextStates = this.nextStates;\n        if (nextStates === null) {\n            return;\n        }\n        if (isArray(nextStates)) {\n            for (var i = 0; i < nextStates.length; i++) {\n                var child = this$1.states[nextStates[i]];\n                if (isEqualCharSpec(child, char, negate)) {\n                    return child;\n                }\n            }\n        } else {\n            var child$1 = this.states[nextStates];\n            if (isEqualCharSpec(child$1, char, negate)) {\n                return child$1;\n            }\n        }\n    };\n    State.prototype.put = function put(char, negate, repeat) {\n        var state;\n        // If the character specification already exists in a child of the current\n        // state, just return that state.\n        if (state = this.get(char, negate)) {\n            return state;\n        }\n        // Make a new state for the character spec\n        var states = this.states;\n        state = new State(states, states.length, char, negate, repeat);\n        states[states.length] = state;\n        // Insert the new state as a child of the current state\n        if (this.nextStates == null) {\n            this.nextStates = state.id;\n        } else if (isArray(this.nextStates)) {\n            this.nextStates.push(state.id);\n        } else {\n            this.nextStates = [this.nextStates, state.id];\n        }\n        // Return the new state\n        return state;\n    };\n    // Find a list of child states matching the next character\n    State.prototype.match = function match(ch) {\n        var this$1 = this;\n\n        var nextStates = this.nextStates;\n        if (!nextStates) {\n            return [];\n        }\n        var returned = [];\n        if (isArray(nextStates)) {\n            for (var i = 0; i < nextStates.length; i++) {\n                var child = this$1.states[nextStates[i]];\n                if (isMatch(child, ch)) {\n                    returned.push(child);\n                }\n            }\n        } else {\n            var child$1 = this.states[nextStates];\n            if (isMatch(child$1, ch)) {\n                returned.push(child$1);\n            }\n        }\n        return returned;\n    };\n    function isMatch(spec, char) {\n        return spec.negate ? spec.char !== char && spec.char !== -1 /* ANY */ : spec.char === char || spec.char === -1 /* ANY */;\n    }\n    // This is a somewhat naive strategy, but should work in a lot of cases\n    // A better strategy would properly resolve /posts/:id/new and /posts/edit/:id.\n    //\n    // This strategy generally prefers more static and less dynamic matching.\n    // Specifically, it\n    //\n    //  * prefers fewer stars to more, then\n    //  * prefers using stars for less of the match to more, then\n    //  * prefers fewer dynamic segments to more, then\n    //  * prefers more static segments to more\n    function sortSolutions(states) {\n        return states.sort(function (a, b) {\n            var ref = a.types || [0, 0, 0];\n            var astatics = ref[0];\n            var adynamics = ref[1];\n            var astars = ref[2];\n            var ref$1 = b.types || [0, 0, 0];\n            var bstatics = ref$1[0];\n            var bdynamics = ref$1[1];\n            var bstars = ref$1[2];\n            if (astars !== bstars) {\n                return astars - bstars;\n            }\n            if (astars) {\n                if (astatics !== bstatics) {\n                    return bstatics - astatics;\n                }\n                if (adynamics !== bdynamics) {\n                    return bdynamics - adynamics;\n                }\n            }\n            if (adynamics !== bdynamics) {\n                return adynamics - bdynamics;\n            }\n            if (astatics !== bstatics) {\n                return bstatics - astatics;\n            }\n            return 0;\n        });\n    }\n    function recognizeChar(states, ch) {\n        var nextStates = [];\n        for (var i = 0, l = states.length; i < l; i++) {\n            var state = states[i];\n            nextStates = nextStates.concat(state.match(ch));\n        }\n        return nextStates;\n    }\n    var RecognizeResults = function RecognizeResults(queryParams) {\n        this.length = 0;\n        this.queryParams = queryParams || {};\n    };\n\n    RecognizeResults.prototype.splice = Array.prototype.splice;\n    RecognizeResults.prototype.slice = Array.prototype.slice;\n    RecognizeResults.prototype.push = Array.prototype.push;\n    function findHandler(state, originalPath, queryParams) {\n        var handlers = state.handlers;\n        var regex = state.regex();\n        if (!regex || !handlers) {\n            throw new Error(\"state not initialized\");\n        }\n        var captures = originalPath.match(regex);\n        var currentCapture = 1;\n        var result = new RecognizeResults(queryParams);\n        result.length = handlers.length;\n        for (var i = 0; i < handlers.length; i++) {\n            var handler = handlers[i];\n            var names = handler.names;\n            var shouldDecodes = handler.shouldDecodes;\n            var params = EmptyObject;\n            var isDynamic = false;\n            if (names !== EmptyArray && shouldDecodes !== EmptyArray) {\n                for (var j = 0; j < names.length; j++) {\n                    isDynamic = true;\n                    var name = names[j];\n                    var capture = captures && captures[currentCapture++];\n                    if (params === EmptyObject) {\n                        params = {};\n                    }\n                    if (RouteRecognizer.ENCODE_AND_DECODE_PATH_SEGMENTS && shouldDecodes[j]) {\n                        params[name] = capture && decodeURIComponent(capture);\n                    } else {\n                        params[name] = capture;\n                    }\n                }\n            }\n            result[i] = {\n                handler: handler.handler,\n                params: params,\n                isDynamic: isDynamic\n            };\n        }\n        return result;\n    }\n    function decodeQueryParamPart(part) {\n        // http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1\n        part = part.replace(/\\+/gm, \"%20\");\n        var result;\n        try {\n            result = decodeURIComponent(part);\n        } catch (error) {\n            result = \"\";\n        }\n        return result;\n    }\n    var RouteRecognizer = function RouteRecognizer() {\n        this.names = createMap();\n        var states = [];\n        var state = new State(states, 0, -1 /* ANY */, true, false);\n        states[0] = state;\n        this.states = states;\n        this.rootState = state;\n    };\n    RouteRecognizer.prototype.add = function add(routes, options) {\n        var currentState = this.rootState;\n        var pattern = \"^\";\n        var types = [0, 0, 0];\n        var handlers = new Array(routes.length);\n        var allSegments = [];\n        var isEmpty = true;\n        var j = 0;\n        for (var i = 0; i < routes.length; i++) {\n            var route = routes[i];\n            var ref = parse(allSegments, route.path, types);\n            var names = ref.names;\n            var shouldDecodes = ref.shouldDecodes;\n            // preserve j so it points to the start of newly added segments\n            for (; j < allSegments.length; j++) {\n                var segment = allSegments[j];\n                if (segment.type === 4 /* Epsilon */) {\n                        continue;\n                    }\n                isEmpty = false;\n                // Add a \"/\" for the new segment\n                currentState = currentState.put(47 /* SLASH */, false, false);\n                pattern += \"/\";\n                // Add a representation of the segment to the NFA and regex\n                currentState = eachChar[segment.type](segment, currentState);\n                pattern += regex[segment.type](segment);\n            }\n            handlers[i] = {\n                handler: route.handler,\n                names: names,\n                shouldDecodes: shouldDecodes\n            };\n        }\n        if (isEmpty) {\n            currentState = currentState.put(47 /* SLASH */, false, false);\n            pattern += \"/\";\n        }\n        currentState.handlers = handlers;\n        currentState.pattern = pattern + \"$\";\n        currentState.types = types;\n        var name;\n        if (typeof options === \"object\" && options !== null && options.as) {\n            name = options.as;\n        }\n        if (name) {\n            // if (this.names[name]) {\n            //   throw new Error(\"You may not add a duplicate route named `\" + name + \"`.\");\n            // }\n            this.names[name] = {\n                segments: allSegments,\n                handlers: handlers\n            };\n        }\n    };\n    RouteRecognizer.prototype.handlersFor = function handlersFor(name) {\n        var route = this.names[name];\n        if (!route) {\n            throw new Error(\"There is no route named \" + name);\n        }\n        var result = new Array(route.handlers.length);\n        for (var i = 0; i < route.handlers.length; i++) {\n            var handler = route.handlers[i];\n            result[i] = handler;\n        }\n        return result;\n    };\n    RouteRecognizer.prototype.hasRoute = function hasRoute(name) {\n        return !!this.names[name];\n    };\n    RouteRecognizer.prototype.generate = function generate$1(name, params) {\n        var route = this.names[name];\n        var output = \"\";\n        if (!route) {\n            throw new Error(\"There is no route named \" + name);\n        }\n        var segments = route.segments;\n        for (var i = 0; i < segments.length; i++) {\n            var segment = segments[i];\n            if (segment.type === 4 /* Epsilon */) {\n                    continue;\n                }\n            output += \"/\";\n            output += generate[segment.type](segment, params);\n        }\n        if (output.charAt(0) !== \"/\") {\n            output = \"/\" + output;\n        }\n        if (params && params.queryParams) {\n            output += this.generateQueryString(params.queryParams);\n        }\n        return output;\n    };\n    RouteRecognizer.prototype.generateQueryString = function generateQueryString(params) {\n        var pairs = [];\n        var keys = Object.keys(params);\n        keys.sort();\n        for (var i = 0; i < keys.length; i++) {\n            var key = keys[i];\n            var value = params[key];\n            if (value == null) {\n                continue;\n            }\n            var pair = encodeURIComponent(key);\n            if (isArray(value)) {\n                for (var j = 0; j < value.length; j++) {\n                    var arrayPair = key + \"[]\" + \"=\" + encodeURIComponent(value[j]);\n                    pairs.push(arrayPair);\n                }\n            } else {\n                pair += \"=\" + encodeURIComponent(value);\n                pairs.push(pair);\n            }\n        }\n        if (pairs.length === 0) {\n            return \"\";\n        }\n        return \"?\" + pairs.join(\"&\");\n    };\n    RouteRecognizer.prototype.parseQueryString = function parseQueryString(queryString) {\n        var pairs = queryString.split(\"&\");\n        var queryParams = {};\n        for (var i = 0; i < pairs.length; i++) {\n            var pair = pairs[i].split(\"=\"),\n                key = decodeQueryParamPart(pair[0]),\n                keyLength = key.length,\n                isArray = false,\n                value = void 0;\n            if (pair.length === 1) {\n                value = \"true\";\n            } else {\n                // Handle arrays\n                if (keyLength > 2 && key.slice(keyLength - 2) === \"[]\") {\n                    isArray = true;\n                    key = key.slice(0, keyLength - 2);\n                    if (!queryParams[key]) {\n                        queryParams[key] = [];\n                    }\n                }\n                value = pair[1] ? decodeQueryParamPart(pair[1]) : \"\";\n            }\n            if (isArray) {\n                queryParams[key].push(value);\n            } else {\n                queryParams[key] = value;\n            }\n        }\n        return queryParams;\n    };\n    RouteRecognizer.prototype.recognize = function recognize(path) {\n        var results;\n        var states = [this.rootState];\n        var queryParams = {};\n        var isSlashDropped = false;\n        var hashStart = path.indexOf(\"#\");\n        if (hashStart !== -1) {\n            path = path.substr(0, hashStart);\n        }\n        var queryStart = path.indexOf(\"?\");\n        if (queryStart !== -1) {\n            var queryString = path.substr(queryStart + 1, path.length);\n            path = path.substr(0, queryStart);\n            queryParams = this.parseQueryString(queryString);\n        }\n        if (path.charAt(0) !== \"/\") {\n            path = \"/\" + path;\n        }\n        var originalPath = path;\n        if (RouteRecognizer.ENCODE_AND_DECODE_PATH_SEGMENTS) {\n            path = normalizePath(path);\n        } else {\n            path = decodeURI(path);\n            originalPath = decodeURI(originalPath);\n        }\n        var pathLen = path.length;\n        if (pathLen > 1 && path.charAt(pathLen - 1) === \"/\") {\n            path = path.substr(0, pathLen - 1);\n            originalPath = originalPath.substr(0, originalPath.length - 1);\n            isSlashDropped = true;\n        }\n        for (var i = 0; i < path.length; i++) {\n            states = recognizeChar(states, path.charCodeAt(i));\n            if (!states.length) {\n                break;\n            }\n        }\n        var solutions = [];\n        for (var i$1 = 0; i$1 < states.length; i$1++) {\n            if (states[i$1].handlers) {\n                solutions.push(states[i$1]);\n            }\n        }\n        states = sortSolutions(solutions);\n        var state = solutions[0];\n        if (state && state.handlers) {\n            // if a trailing slash was dropped and a star segment is the last segment\n            // specified, put the trailing slash back\n            if (isSlashDropped && state.pattern && state.pattern.slice(-5) === \"(.+)$\") {\n                originalPath = originalPath + \"/\";\n            }\n            results = findHandler(state, originalPath, queryParams);\n        }\n        return results;\n    };\n    RouteRecognizer.VERSION = \"0.3.3\";\n    // Set to false to opt-out of encoding and decoding path segments.\n    // See https://github.com/tildeio/route-recognizer/pull/55\n    RouteRecognizer.ENCODE_AND_DECODE_PATH_SEGMENTS = true;\n    RouteRecognizer.Normalizer = {\n        normalizeSegment: normalizeSegment, normalizePath: normalizePath, encodePathSegment: encodePathSegment\n    };\n    RouteRecognizer.prototype.map = map;\n\n    exports.default = RouteRecognizer;\n});","enifed('router', ['exports', 'ember-babel', 'route-recognizer', 'rsvp'], function (exports, _emberBabel, _routeRecognizer, _rsvp) {\n  'use strict';\n\n  exports.Transition = undefined;\n\n\n  var slice = Array.prototype.slice;\n  var hasOwnProperty = Object.prototype.hasOwnProperty;\n\n  /**\n    Determines if an object is Promise by checking if it is \"thenable\".\n  **/\n  function isPromise(obj) {\n    return (typeof obj === 'object' && obj !== null || typeof obj === 'function') && typeof obj.then === 'function';\n  }\n\n  function merge(hash, other) {\n    for (var prop in other) {\n      if (hasOwnProperty.call(other, prop)) {\n        hash[prop] = other[prop];\n      }\n    }\n  }\n\n  /**\n    @private\n  \n    Extracts query params from the end of an array\n  **/\n  function extractQueryParams(array) {\n    var len = array && array.length,\n        head = void 0,\n        queryParams = void 0;\n\n    if (len && len > 0 && array[len - 1] && array[len - 1].hasOwnProperty('queryParams')) {\n      queryParams = array[len - 1].queryParams;\n      head = slice.call(array, 0, len - 1);\n      return [head, queryParams];\n    } else {\n      return [array, null];\n    }\n  }\n\n  /**\n    @private\n  \n    Coerces query param properties and array elements into strings.\n  **/\n  function coerceQueryParamsToString(queryParams) {\n    for (var key in queryParams) {\n      var val = queryParams[key];\n      if (typeof val === 'number') {\n        queryParams[key] = '' + val;\n      } else if (Array.isArray(val)) {\n        for (var i = 0, l = val.length; i < l; i++) {\n          val[i] = '' + val[i];\n        }\n      }\n    }\n  }\n  /**\n    @private\n   */\n  function _log(router, sequence, msg) {\n    if (!router.log) {\n      return;\n    }\n\n    if (arguments.length === 3) {\n      router.log('Transition #' + sequence + ': ' + msg);\n    } else {\n      msg = sequence;\n      router.log(msg);\n    }\n  }\n\n  function isParam(object) {\n    return typeof object === 'string' || object instanceof String || typeof object === 'number' || object instanceof Number;\n  }\n\n  function forEach(array, callback) {\n    for (var i = 0, l = array.length; i < l && false !== callback(array[i]); i++) {\n      // empty intentionally\n    }\n  }\n\n  function _trigger(router, handlerInfos, ignoreFailure, args) {\n    if (router.triggerEvent) {\n      router.triggerEvent(handlerInfos, ignoreFailure, args);\n      return;\n    }\n\n    var name = args.shift();\n\n    if (!handlerInfos) {\n      if (ignoreFailure) {\n        return;\n      }\n      throw new Error(\"Could not trigger event '\" + name + \"'. There are no active handlers\");\n    }\n\n    var eventWasHandled = false;\n\n    function delayedEvent(name, args, handler) {\n      handler.events[name].apply(handler, args);\n    }\n\n    for (var i = handlerInfos.length - 1; i >= 0; i--) {\n      var handlerInfo = handlerInfos[i],\n          handler = handlerInfo.handler;\n\n      // If there is no handler, it means the handler hasn't resolved yet which\n      // means that we should trigger the event later when the handler is available\n      if (!handler) {\n        handlerInfo.handlerPromise.then(delayedEvent.bind(null, name, args));\n        continue;\n      }\n\n      if (handler.events && handler.events[name]) {\n        if (handler.events[name].apply(handler, args) === true) {\n          eventWasHandled = true;\n        } else {\n          return;\n        }\n      }\n    }\n\n    // In the case that we got an UnrecognizedURLError as an event with no handler,\n    // let it bubble up\n    if (name === 'error' && args[0].name === 'UnrecognizedURLError') {\n      throw args[0];\n    } else if (!eventWasHandled && !ignoreFailure) {\n      throw new Error(\"Nothing handled the event '\" + name + \"'.\");\n    }\n  }\n\n  function getChangelist(oldObject, newObject) {\n    var key = void 0;\n    var results = {\n      all: {},\n      changed: {},\n      removed: {}\n    };\n\n    merge(results.all, newObject);\n\n    var didChange = false;\n    coerceQueryParamsToString(oldObject);\n    coerceQueryParamsToString(newObject);\n\n    // Calculate removals\n    for (key in oldObject) {\n      if (hasOwnProperty.call(oldObject, key)) {\n        if (!hasOwnProperty.call(newObject, key)) {\n          didChange = true;\n          results.removed[key] = oldObject[key];\n        }\n      }\n    }\n\n    // Calculate changes\n    for (key in newObject) {\n      if (hasOwnProperty.call(newObject, key)) {\n        if (Array.isArray(oldObject[key]) && Array.isArray(newObject[key])) {\n          if (oldObject[key].length !== newObject[key].length) {\n            results.changed[key] = newObject[key];\n            didChange = true;\n          } else {\n            for (var i = 0, l = oldObject[key].length; i < l; i++) {\n              if (oldObject[key][i] !== newObject[key][i]) {\n                results.changed[key] = newObject[key];\n                didChange = true;\n              }\n            }\n          }\n        } else if (oldObject[key] !== newObject[key]) {\n          results.changed[key] = newObject[key];\n          didChange = true;\n        }\n      }\n    }\n\n    return didChange ? results : undefined;\n  }\n\n  function _promiseLabel(label) {\n    return 'Router: ' + label;\n  }\n\n  function resolveHook(obj, hookName) {\n    if (!obj) {\n      return;\n    }\n    var underscored = '_' + hookName;\n    return obj[underscored] && underscored || obj[hookName] && hookName;\n  }\n\n  function callHook(obj, _hookName, arg1, arg2) {\n    var hookName = resolveHook(obj, _hookName);\n    return hookName && obj[hookName].call(obj, arg1, arg2);\n  }\n\n  function applyHook(obj, _hookName, args) {\n    var hookName = resolveHook(obj, _hookName);\n    if (hookName) {\n      if (args.length === 0) {\n        return obj[hookName].call(obj);\n      } else if (args.length === 1) {\n        return obj[hookName].call(obj, args[0]);\n      } else if (args.length === 2) {\n        return obj[hookName].call(obj, args[0], args[1]);\n      } else {\n        return obj[hookName].apply(obj, args);\n      }\n    }\n  }\n\n  var TransitionState = function () {\n    function TransitionState() {\n      (0, _emberBabel.classCallCheck)(this, TransitionState);\n\n      this.handlerInfos = [];\n      this.queryParams = {};\n      this.params = {};\n    }\n\n    TransitionState.prototype.promiseLabel = function promiseLabel(label) {\n      var targetName = '';\n      forEach(this.handlerInfos, function (handlerInfo) {\n        if (targetName !== '') {\n          targetName += '.';\n        }\n        targetName += handlerInfo.name;\n      });\n      return _promiseLabel(\"'\" + targetName + \"': \" + label);\n    };\n\n    TransitionState.prototype.resolve = function resolve(shouldContinue) {\n      var payload = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      // First, calculate params for this state. This is useful\n      // information to provide to the various route hooks.\n      var params = this.params;\n      forEach(this.handlerInfos, function (handlerInfo) {\n        params[handlerInfo.name] = handlerInfo.params || {};\n      });\n\n      payload.resolveIndex = 0;\n\n      var currentState = this;\n      var wasAborted = false;\n\n      // The prelude RSVP.resolve() asyncs us into the promise land.\n      return _rsvp.Promise.resolve(null, this.promiseLabel('Start transition')).then(resolveOneHandlerInfo, null, this.promiseLabel('Resolve handler')).catch(handleError, this.promiseLabel('Handle error'));\n\n      function innerShouldContinue() {\n        return _rsvp.Promise.resolve(shouldContinue(), currentState.promiseLabel('Check if should continue')).catch(function (reason) {\n          // We distinguish between errors that occurred\n          // during resolution (e.g. before\"Model/model/afterModel),\n          // and aborts due to a rejecting promise from shouldContinue().\n          wasAborted = true;\n          return _rsvp.Promise.reject(reason);\n        }, currentState.promiseLabel('Handle abort'));\n      }\n\n      function handleError(error) {\n        // This is the only possible\n        // reject value of TransitionState#resolve\n        var handlerInfos = currentState.handlerInfos;\n        var errorHandlerIndex = payload.resolveIndex >= handlerInfos.length ? handlerInfos.length - 1 : payload.resolveIndex;\n        return _rsvp.Promise.reject({\n          error: error,\n          handlerWithError: currentState.handlerInfos[errorHandlerIndex].handler,\n          wasAborted: wasAborted,\n          state: currentState\n        });\n      }\n\n      function proceed(resolvedHandlerInfo) {\n        var wasAlreadyResolved = currentState.handlerInfos[payload.resolveIndex].isResolved;\n\n        // Swap the previously unresolved handlerInfo with\n        // the resolved handlerInfo\n        currentState.handlerInfos[payload.resolveIndex++] = resolvedHandlerInfo;\n\n        if (!wasAlreadyResolved) {\n          // Call the redirect hook. The reason we call it here\n          // vs. afterModel is so that redirects into child\n          // routes don't re-run the model hooks for this\n          // already-resolved route.\n          var handler = resolvedHandlerInfo.handler;\n          callHook(handler, 'redirect', resolvedHandlerInfo.context, payload);\n        }\n\n        // Proceed after ensuring that the redirect hook\n        // didn't abort this transition by transitioning elsewhere.\n        return innerShouldContinue().then(resolveOneHandlerInfo, null, currentState.promiseLabel('Resolve handler'));\n      }\n\n      function resolveOneHandlerInfo() {\n        if (payload.resolveIndex === currentState.handlerInfos.length) {\n          // This is is the only possible\n          // fulfill value of TransitionState#resolve\n          return {\n            error: null,\n            state: currentState\n          };\n        }\n\n        var handlerInfo = currentState.handlerInfos[payload.resolveIndex];\n\n        return handlerInfo.resolve(innerShouldContinue, payload).then(proceed, null, currentState.promiseLabel('Proceed'));\n      }\n    };\n\n    return TransitionState;\n  }();\n\n  function TransitionAbortedError(message) {\n    if (!(this instanceof TransitionAbortedError)) {\n      return new TransitionAbortedError(message);\n    }\n\n    var error = Error.call(this, message);\n\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, TransitionAbortedError);\n    } else {\n      this.stack = error.stack;\n    }\n\n    this.description = error.description;\n    this.fileName = error.fileName;\n    this.lineNumber = error.lineNumber;\n    this.message = error.message || 'TransitionAborted';\n    this.name = 'TransitionAborted';\n    this.number = error.number;\n    this.code = error.code;\n  }\n\n  TransitionAbortedError.prototype = Object.create(Error.prototype);\n\n  /**\n    A Transition is a thennable (a promise-like object) that represents\n    an attempt to transition to another route. It can be aborted, either\n    explicitly via `abort` or by attempting another transition while a\n    previous one is still underway. An aborted transition can also\n    be `retry()`d later.\n  \n    @class Transition\n    @constructor\n    @param {Object} router\n    @param {Object} intent\n    @param {Object} state\n    @param {Object} error\n    @private\n   */\n\n  var Transition = function () {\n    function Transition(router, intent, state, error, previousTransition) {\n      var _this = this;\n\n      (0, _emberBabel.classCallCheck)(this, Transition);\n\n      this.state = state || router.state;\n      this.intent = intent;\n      this.router = router;\n      this.data = this.intent && this.intent.data || {};\n      this.resolvedModels = {};\n      this.queryParams = {};\n      this.promise = undefined;\n      this.error = undefined;\n      this.params = undefined;\n      this.handlerInfos = undefined;\n      this.targetName = undefined;\n      this.pivotHandler = undefined;\n      this.sequence = undefined;\n      this.isAborted = false;\n      this.isActive = true;\n      this.urlMethod = 'update';\n      this.resolveIndex = 0;\n      this.queryParamsOnly = false;\n      this.isTransition = true;\n\n      if (error) {\n        this.promise = _rsvp.Promise.reject(error);\n        this.error = error;\n        return;\n      }\n\n      // if you're doing multiple redirects, need the new transition to know if it\n      // is actually part of the first transition or not. Any further redirects\n      // in the initial transition also need to know if they are part of the\n      // initial transition\n      this.isCausedByAbortingTransition = !!previousTransition;\n      this.isCausedByInitialTransition = previousTransition && (previousTransition.isCausedByInitialTransition || previousTransition.sequence === 0);\n      // Every transition in the chain is a replace\n      this.isCausedByAbortingReplaceTransition = previousTransition && previousTransition.urlMethod == 'replace' && (!previousTransition.isCausedByAbortingTransition || previousTransition.isCausedByAbortingReplaceTransition);\n\n      if (state) {\n        this.params = state.params;\n        this.queryParams = state.queryParams;\n        this.handlerInfos = state.handlerInfos;\n\n        var len = state.handlerInfos.length;\n        if (len) {\n          this.targetName = state.handlerInfos[len - 1].name;\n        }\n\n        for (var i = 0; i < len; ++i) {\n          var handlerInfo = state.handlerInfos[i];\n\n          // TODO: this all seems hacky\n          if (!handlerInfo.isResolved) {\n            break;\n          }\n          this.pivotHandler = handlerInfo.handler;\n        }\n\n        this.sequence = router.currentSequence++;\n        this.promise = state.resolve(function () {\n          if (_this.isAborted) {\n            return _rsvp.Promise.reject(undefined, _promiseLabel('Transition aborted - reject'));\n          }\n        }, this).catch(function (result) {\n          if (result.wasAborted || _this.isAborted) {\n            return _rsvp.Promise.reject(logAbort(_this));\n          } else {\n            _this.trigger('error', result.error, _this, result.handlerWithError);\n            _this.abort();\n            return _rsvp.Promise.reject(result.error);\n          }\n        }, _promiseLabel('Handle Abort'));\n      } else {\n        this.promise = _rsvp.Promise.resolve(this.state);\n        this.params = {};\n      }\n    }\n\n    Transition.prototype.isExiting = function isExiting(handler) {\n      var handlerInfos = this.handlerInfos;\n      for (var i = 0, len = handlerInfos.length; i < len; ++i) {\n        var handlerInfo = handlerInfos[i];\n        if (handlerInfo.name === handler || handlerInfo.handler === handler) {\n          return false;\n        }\n      }\n      return true;\n    };\n\n    Transition.prototype.then = function then(onFulfilled, onRejected, label) {\n      return this.promise.then(onFulfilled, onRejected, label);\n    };\n\n    Transition.prototype.catch = function _catch(onRejection, label) {\n      return this.promise.catch(onRejection, label);\n    };\n\n    Transition.prototype.finally = function _finally(callback, label) {\n      return this.promise.finally(callback, label);\n    };\n\n    Transition.prototype.abort = function abort() {\n      if (this.isAborted) {\n        return this;\n      }\n      _log(this.router, this.sequence, this.targetName + ': transition was aborted');\n      this.intent.preTransitionState = this.router.state;\n      this.isAborted = true;\n      this.isActive = false;\n      this.router.activeTransition = null;\n      return this;\n    };\n\n    Transition.prototype.retry = function retry() {\n      // TODO: add tests for merged state retry()s\n      this.abort();\n      var newTransition = this.router.transitionByIntent(this.intent, false);\n\n      // inheriting a `null` urlMethod is not valid\n      // the urlMethod is only set to `null` when\n      // the transition is initiated *after* the url\n      // has been updated (i.e. `router.handleURL`)\n      //\n      // in that scenario, the url method cannot be\n      // inherited for a new transition because then\n      // the url would not update even though it should\n      if (this.urlMethod !== null) {\n        newTransition.method(this.urlMethod);\n      }\n      return newTransition;\n    };\n\n    Transition.prototype.method = function method(_method) {\n      this.urlMethod = _method;\n      return this;\n    };\n\n    Transition.prototype.trigger = function trigger(ignoreFailure) {\n      var args = slice.call(arguments);\n      if (typeof ignoreFailure === 'boolean') {\n        args.shift();\n      } else {\n        // Throw errors on unhandled trigger events by default\n        ignoreFailure = false;\n      }\n      _trigger(this.router, this.state.handlerInfos.slice(0, this.resolveIndex + 1), ignoreFailure, args);\n    };\n\n    Transition.prototype.followRedirects = function followRedirects() {\n      var router = this.router;\n      return this.promise.catch(function (reason) {\n        if (router.activeTransition) {\n          return router.activeTransition.followRedirects();\n        }\n        return _rsvp.Promise.reject(reason);\n      });\n    };\n\n    Transition.prototype.toString = function toString() {\n      return 'Transition (sequence ' + this.sequence + ')';\n    };\n\n    Transition.prototype.log = function log(message) {\n      _log(this.router, this.sequence, message);\n    };\n\n    return Transition;\n  }();\n\n  // Alias 'trigger' as 'send'\n  Transition.prototype.send = Transition.prototype.trigger;\n\n  /**\n    @private\n  \n    Logs and returns an instance of TransitionAborted.\n   */\n  function logAbort(transition) {\n    _log(transition.router, transition.sequence, 'detected abort.');\n    return new TransitionAbortedError();\n  }\n\n  var TransitionIntent = function TransitionIntent() {\n    (0, _emberBabel.classCallCheck)(this, TransitionIntent);\n\n    this.data = this.data || {};\n  };\n\n  var DEFAULT_HANDLER = Object.freeze({});\n\n  var HandlerInfo = function () {\n    function HandlerInfo() {\n      var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      (0, _emberBabel.classCallCheck)(this, HandlerInfo);\n\n      // initialize local properties to ensure consistent object shape\n      this._handler = DEFAULT_HANDLER;\n      this._handlerPromise = null;\n      this.factory = null; // Injected by the handler info factory\n      this.name = props.name;\n\n      for (var prop in props) {\n        if (prop === 'handler') {\n          this._processHandler(props.handler);\n        } else {\n          this[prop] = props[prop];\n        }\n      }\n    }\n\n    HandlerInfo.prototype.getHandler = function getHandler() {};\n\n    HandlerInfo.prototype.fetchHandler = function fetchHandler() {\n      var handler = this.getHandler(this.name);\n      return this._processHandler(handler);\n    };\n\n    HandlerInfo.prototype._processHandler = function _processHandler(handler) {\n      var _this2 = this;\n\n      // Setup a handlerPromise so that we can wait for asynchronously loaded handlers\n      this.handlerPromise = _rsvp.Promise.resolve(handler);\n\n      // Wait until the 'handler' property has been updated when chaining to a handler\n      // that is a promise\n      if (isPromise(handler)) {\n        this.handlerPromise = this.handlerPromise.then(function (h) {\n          return _this2.updateHandler(h);\n        });\n        // set to undefined to avoid recursive loop in the handler getter\n        return this.handler = undefined;\n      } else if (handler) {\n        return this.updateHandler(handler);\n      }\n    };\n\n    HandlerInfo.prototype.log = function log(payload, message) {\n      if (payload.log) {\n        payload.log(this.name + ': ' + message);\n      }\n    };\n\n    HandlerInfo.prototype.promiseLabel = function promiseLabel(label) {\n      return _promiseLabel(\"'\" + this.name + \"' \" + label);\n    };\n\n    HandlerInfo.prototype.getUnresolved = function getUnresolved() {\n      return this;\n    };\n\n    HandlerInfo.prototype.serialize = function serialize() {\n      return this.params || {};\n    };\n\n    HandlerInfo.prototype.updateHandler = function updateHandler(handler) {\n      // Store the name of the handler on the handler for easy checks later\n      handler._handlerName = this.name;\n      return this.handler = handler;\n    };\n\n    HandlerInfo.prototype.resolve = function resolve(shouldContinue, payload) {\n      var checkForAbort = this.checkForAbort.bind(this, shouldContinue);\n      var beforeModel = this.runBeforeModelHook.bind(this, payload);\n      var model = this.getModel.bind(this, payload);\n      var afterModel = this.runAfterModelHook.bind(this, payload);\n      var becomeResolved = this.becomeResolved.bind(this, payload);\n\n      return _rsvp.Promise.resolve(this.handlerPromise, this.promiseLabel('Start handler')).then(checkForAbort, null, this.promiseLabel('Check for abort')).then(beforeModel, null, this.promiseLabel('Before model')).then(checkForAbort, null, this.promiseLabel(\"Check if aborted during 'beforeModel' hook\")).then(model, null, this.promiseLabel('Model')).then(checkForAbort, null, this.promiseLabel(\"Check if aborted in 'model' hook\")).then(afterModel, null, this.promiseLabel('After model')).then(checkForAbort, null, this.promiseLabel(\"Check if aborted in 'afterModel' hook\")).then(becomeResolved, null, this.promiseLabel('Become resolved'));\n    };\n\n    HandlerInfo.prototype.runBeforeModelHook = function runBeforeModelHook(payload) {\n      if (payload.trigger) {\n        payload.trigger(true, 'willResolveModel', payload, this.handler);\n      }\n      return this.runSharedModelHook(payload, 'beforeModel', []);\n    };\n\n    HandlerInfo.prototype.runAfterModelHook = function runAfterModelHook(payload, resolvedModel) {\n      // Stash the resolved model on the payload.\n      // This makes it possible for users to swap out\n      // the resolved model in afterModel.\n      var name = this.name;\n      this.stashResolvedModel(payload, resolvedModel);\n\n      return this.runSharedModelHook(payload, 'afterModel', [resolvedModel]).then(function () {\n        // Ignore the fulfilled value returned from afterModel.\n        // Return the value stashed in resolvedModels, which\n        // might have been swapped out in afterModel.\n        return payload.resolvedModels[name];\n      }, null, this.promiseLabel('Ignore fulfillment value and return model value'));\n    };\n\n    HandlerInfo.prototype.runSharedModelHook = function runSharedModelHook(payload, hookName, args) {\n      this.log(payload, 'calling ' + hookName + ' hook');\n\n      if (this.queryParams) {\n        args.push(this.queryParams);\n      }\n      args.push(payload);\n\n      var result = applyHook(this.handler, hookName, args);\n\n      if (result && result.isTransition) {\n        result = null;\n      }\n\n      return _rsvp.Promise.resolve(result, this.promiseLabel('Resolve value returned from one of the model hooks'));\n    };\n\n    HandlerInfo.prototype.getModel = function getModel() {};\n\n    HandlerInfo.prototype.checkForAbort = function checkForAbort(shouldContinue, promiseValue) {\n      return _rsvp.Promise.resolve(shouldContinue(), this.promiseLabel('Check for abort')).then(function () {\n        // We don't care about shouldContinue's resolve value;\n        // pass along the original value passed to this fn.\n        return promiseValue;\n      }, null, this.promiseLabel('Ignore fulfillment value and continue'));\n    };\n\n    HandlerInfo.prototype.stashResolvedModel = function stashResolvedModel(payload, resolvedModel) {\n      payload.resolvedModels = payload.resolvedModels || {};\n      payload.resolvedModels[this.name] = resolvedModel;\n    };\n\n    HandlerInfo.prototype.becomeResolved = function becomeResolved(payload, resolvedContext) {\n      var params = this.serialize(resolvedContext);\n\n      if (payload) {\n        this.stashResolvedModel(payload, resolvedContext);\n        payload.params = payload.params || {};\n        payload.params[this.name] = params;\n      }\n\n      return this.factory('resolved', {\n        context: resolvedContext,\n        name: this.name,\n        handler: this.handler,\n        params: params\n      });\n    };\n\n    HandlerInfo.prototype.shouldSupercede = function shouldSupercede(other) {\n      // Prefer this newer handlerInfo over `other` if:\n      // 1) The other one doesn't exist\n      // 2) The names don't match\n      // 3) This handler has a context that doesn't match\n      //    the other one (or the other one doesn't have one).\n      // 4) This handler has parameters that don't match the other.\n      if (!other) {\n        return true;\n      }\n\n      var contextsMatch = other.context === this.context;\n      return other.name !== this.name || this.hasOwnProperty('context') && !contextsMatch || this.hasOwnProperty('params') && !paramsMatch(this.params, other.params);\n    };\n\n    (0, _emberBabel.createClass)(HandlerInfo, [{\n      key: 'handler',\n      get: function () {\n        // _handler could be set to either a handler object or undefined, so we\n        // compare against a default reference to know when it's been set\n        if (this._handler !== DEFAULT_HANDLER) {\n          return this._handler;\n        }\n\n        return this.fetchHandler();\n      },\n      set: function (handler) {\n        return this._handler = handler;\n      }\n    }, {\n      key: 'handlerPromise',\n      get: function () {\n        if (this._handlerPromise !== null) {\n          return this._handlerPromise;\n        }\n\n        this.fetchHandler();\n\n        return this._handlerPromise;\n      },\n      set: function (handlerPromise) {\n        this._handlerPromise = handlerPromise;\n\n        return handlerPromise;\n      }\n    }]);\n    return HandlerInfo;\n  }();\n\n  // this is bonkers, we require that `context` be set on on the\n  // HandlerInfo prototype to null because the checks in\n  // `NamedTransitionIntent.prototype.applyToHandlers` here\n  // https://github.com/tildeio/router.js/blob/v1.2.8/lib/router/transition-intent/named-transition-intent.js#L76-L81\n  // check of `oldHandlerInfo.context === newHandlerInfo.context` and assumes\n  // that the params _must_ match also in that case.\n  //\n  // The only reason `oldHandlerInfo.context` and `newHandlerInfo.context` did not\n  // match in prior versions is because if the context isn't set yet (on newHandlerInfo)\n  // is because it inherits the `null` from the prototype vs `undefined` (on\n  // the oldHandlerInfo).\n  //\n  // A future refactoring should remove that conditional, and fix the hand full of\n  // failing tests.\n  HandlerInfo.prototype.context = null;\n\n  function paramsMatch(a, b) {\n    if (!a ^ !b) {\n      // Only one is null.\n      return false;\n    }\n\n    if (!a) {\n      // Both must be null.\n      return true;\n    }\n\n    // Note: this assumes that both params have the same\n    // number of keys, but since we're comparing the\n    // same handlers, they should.\n    for (var k in a) {\n      if (a.hasOwnProperty(k) && a[k] !== b[k]) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  var ResolvedHandlerInfo = function (_HandlerInfo) {\n    (0, _emberBabel.inherits)(ResolvedHandlerInfo, _HandlerInfo);\n\n    function ResolvedHandlerInfo(props) {\n      (0, _emberBabel.classCallCheck)(this, ResolvedHandlerInfo);\n\n      var _this3 = (0, _emberBabel.possibleConstructorReturn)(this, _HandlerInfo.call(this, props));\n\n      _this3.isResolved = true;\n      return _this3;\n    }\n\n    ResolvedHandlerInfo.prototype.resolve = function resolve(shouldContinue, payload) {\n      // A ResolvedHandlerInfo just resolved with itself.\n      if (payload && payload.resolvedModels) {\n        payload.resolvedModels[this.name] = this.context;\n      }\n      return _rsvp.Promise.resolve(this, this.promiseLabel('Resolve'));\n    };\n\n    ResolvedHandlerInfo.prototype.getUnresolved = function getUnresolved() {\n      return this.factory('param', {\n        name: this.name,\n        handler: this.handler,\n        params: this.params\n      });\n    };\n\n    return ResolvedHandlerInfo;\n  }(HandlerInfo);\n\n  var UnresolvedHandlerInfoByObject = function (_HandlerInfo2) {\n    (0, _emberBabel.inherits)(UnresolvedHandlerInfoByObject, _HandlerInfo2);\n\n    function UnresolvedHandlerInfoByObject(props) {\n      (0, _emberBabel.classCallCheck)(this, UnresolvedHandlerInfoByObject);\n\n      var _this4 = (0, _emberBabel.possibleConstructorReturn)(this, _HandlerInfo2.call(this, props));\n\n      _this4.names = _this4.names || [];\n      return _this4;\n    }\n\n    UnresolvedHandlerInfoByObject.prototype.getModel = function getModel(payload) {\n      this.log(payload, this.name + ': resolving provided model');\n      return _rsvp.Promise.resolve(this.context);\n    };\n\n    UnresolvedHandlerInfoByObject.prototype.serialize = function serialize(_model) {\n      var model = _model || this.context,\n          names = this.names;\n\n      var object = {};\n      if (isParam(model)) {\n        object[names[0]] = model;\n        return object;\n      }\n\n      // Use custom serialize if it exists.\n      if (this.serializer) {\n        // invoke this.serializer unbound (getSerializer returns a stateless function)\n        return this.serializer.call(null, model, names);\n      } else if (this.handler && this.handler.serialize) {\n        return this.handler.serialize(model, names);\n      }\n\n      if (names.length !== 1) {\n        return;\n      }\n\n      var name = names[0];\n\n      if (/_id$/.test(name)) {\n        object[name] = model.id;\n      } else {\n        object[name] = model;\n      }\n      return object;\n    };\n\n    return UnresolvedHandlerInfoByObject;\n  }(HandlerInfo);\n\n  var UnresolvedHandlerInfoByParam = function (_HandlerInfo3) {\n    (0, _emberBabel.inherits)(UnresolvedHandlerInfoByParam, _HandlerInfo3);\n\n    function UnresolvedHandlerInfoByParam(props) {\n      (0, _emberBabel.classCallCheck)(this, UnresolvedHandlerInfoByParam);\n\n      var _this5 = (0, _emberBabel.possibleConstructorReturn)(this, _HandlerInfo3.call(this, props));\n\n      _this5.params = _this5.params || {};\n      return _this5;\n    }\n\n    UnresolvedHandlerInfoByParam.prototype.getModel = function getModel(payload) {\n      var fullParams = this.params;\n      if (payload && payload.queryParams) {\n        fullParams = {};\n        merge(fullParams, this.params);\n        fullParams.queryParams = payload.queryParams;\n      }\n\n      var handler = this.handler;\n      var hookName = resolveHook(handler, 'deserialize') || resolveHook(handler, 'model');\n\n      return this.runSharedModelHook(payload, hookName, [fullParams]);\n    };\n\n    return UnresolvedHandlerInfoByParam;\n  }(HandlerInfo);\n\n  handlerInfoFactory.klasses = {\n    resolved: ResolvedHandlerInfo,\n    param: UnresolvedHandlerInfoByParam,\n    object: UnresolvedHandlerInfoByObject\n  };\n\n  function handlerInfoFactory(name, props) {\n    var klass = handlerInfoFactory.klasses[name];\n    var handlerInfo = new klass(props || {});\n    handlerInfo.factory = handlerInfoFactory;\n    return handlerInfo;\n  }\n\n  var NamedTransitionIntent = function (_TransitionIntent) {\n    (0, _emberBabel.inherits)(NamedTransitionIntent, _TransitionIntent);\n\n    function NamedTransitionIntent(props) {\n      (0, _emberBabel.classCallCheck)(this, NamedTransitionIntent);\n\n      var _this6 = (0, _emberBabel.possibleConstructorReturn)(this, _TransitionIntent.call(this, props));\n\n      _this6.name = props.name;\n      _this6.pivotHandler = props.pivotHandler;\n      _this6.contexts = props.contexts || [];\n      _this6.queryParams = props.queryParams;\n      return _this6;\n    }\n\n    NamedTransitionIntent.prototype.applyToState = function applyToState(oldState, recognizer, getHandler, isIntermediate, getSerializer) {\n      var partitionedArgs = extractQueryParams([this.name].concat(this.contexts)),\n          pureArgs = partitionedArgs[0],\n          handlers = recognizer.handlersFor(pureArgs[0]);\n\n      var targetRouteName = handlers[handlers.length - 1].handler;\n\n      return this.applyToHandlers(oldState, handlers, getHandler, targetRouteName, isIntermediate, null, getSerializer);\n    };\n\n    NamedTransitionIntent.prototype.applyToHandlers = function applyToHandlers(oldState, handlers, getHandler, targetRouteName, isIntermediate, checkingIfActive, getSerializer) {\n      var i, len;\n      var newState = new TransitionState();\n      var objects = this.contexts.slice(0);\n\n      var invalidateIndex = handlers.length;\n\n      // Pivot handlers are provided for refresh transitions\n      if (this.pivotHandler) {\n        for (i = 0, len = handlers.length; i < len; ++i) {\n          if (handlers[i].handler === this.pivotHandler._handlerName) {\n            invalidateIndex = i;\n            break;\n          }\n        }\n      }\n\n      for (i = handlers.length - 1; i >= 0; --i) {\n        var result = handlers[i];\n        var name = result.handler;\n\n        var oldHandlerInfo = oldState.handlerInfos[i];\n        var newHandlerInfo = null;\n\n        if (result.names.length > 0) {\n          if (i >= invalidateIndex) {\n            newHandlerInfo = this.createParamHandlerInfo(name, getHandler, result.names, objects, oldHandlerInfo);\n          } else {\n            var serializer = getSerializer(name);\n            newHandlerInfo = this.getHandlerInfoForDynamicSegment(name, getHandler, result.names, objects, oldHandlerInfo, targetRouteName, i, serializer);\n          }\n        } else {\n          // This route has no dynamic segment.\n          // Therefore treat as a param-based handlerInfo\n          // with empty params. This will cause the `model`\n          // hook to be called with empty params, which is desirable.\n          newHandlerInfo = this.createParamHandlerInfo(name, getHandler, result.names, objects, oldHandlerInfo);\n        }\n\n        if (checkingIfActive) {\n          // If we're performing an isActive check, we want to\n          // serialize URL params with the provided context, but\n          // ignore mismatches between old and new context.\n          newHandlerInfo = newHandlerInfo.becomeResolved(null, newHandlerInfo.context);\n          var oldContext = oldHandlerInfo && oldHandlerInfo.context;\n          if (result.names.length > 0 && newHandlerInfo.context === oldContext) {\n            // If contexts match in isActive test, assume params also match.\n            // This allows for flexibility in not requiring that every last\n            // handler provide a `serialize` method\n            newHandlerInfo.params = oldHandlerInfo && oldHandlerInfo.params;\n          }\n          newHandlerInfo.context = oldContext;\n        }\n\n        var handlerToUse = oldHandlerInfo;\n        if (i >= invalidateIndex || newHandlerInfo.shouldSupercede(oldHandlerInfo)) {\n          invalidateIndex = Math.min(i, invalidateIndex);\n          handlerToUse = newHandlerInfo;\n        }\n\n        if (isIntermediate && !checkingIfActive) {\n          handlerToUse = handlerToUse.becomeResolved(null, handlerToUse.context);\n        }\n\n        newState.handlerInfos.unshift(handlerToUse);\n      }\n\n      if (objects.length > 0) {\n        throw new Error('More context objects were passed than there are dynamic segments for the route: ' + targetRouteName);\n      }\n\n      if (!isIntermediate) {\n        this.invalidateChildren(newState.handlerInfos, invalidateIndex);\n      }\n\n      merge(newState.queryParams, this.queryParams || {});\n\n      return newState;\n    };\n\n    NamedTransitionIntent.prototype.invalidateChildren = function invalidateChildren(handlerInfos, invalidateIndex) {\n      for (var i = invalidateIndex, l = handlerInfos.length; i < l; ++i) {\n        var handlerInfo = handlerInfos[i];\n        handlerInfos[i] = handlerInfo.getUnresolved();\n      }\n    };\n\n    NamedTransitionIntent.prototype.getHandlerInfoForDynamicSegment = function getHandlerInfoForDynamicSegment(name, getHandler, names, objects, oldHandlerInfo, targetRouteName, i, serializer) {\n      var objectToUse;\n      if (objects.length > 0) {\n        // Use the objects provided for this transition.\n        objectToUse = objects[objects.length - 1];\n        if (isParam(objectToUse)) {\n          return this.createParamHandlerInfo(name, getHandler, names, objects, oldHandlerInfo);\n        } else {\n          objects.pop();\n        }\n      } else if (oldHandlerInfo && oldHandlerInfo.name === name) {\n        // Reuse the matching oldHandlerInfo\n        return oldHandlerInfo;\n      } else {\n        if (this.preTransitionState) {\n          var preTransitionHandlerInfo = this.preTransitionState.handlerInfos[i];\n          objectToUse = preTransitionHandlerInfo && preTransitionHandlerInfo.context;\n        } else {\n          // Ideally we should throw this error to provide maximal\n          // information to the user that not enough context objects\n          // were provided, but this proves too cumbersome in Ember\n          // in cases where inner template helpers are evaluated\n          // before parent helpers un-render, in which cases this\n          // error somewhat prematurely fires.\n          //throw new Error(\"Not enough context objects were provided to complete a transition to \" + targetRouteName + \". Specifically, the \" + name + \" route needs an object that can be serialized into its dynamic URL segments [\" + names.join(', ') + \"]\");\n          return oldHandlerInfo;\n        }\n      }\n\n      return handlerInfoFactory('object', {\n        name: name,\n        getHandler: getHandler,\n        serializer: serializer,\n        context: objectToUse,\n        names: names\n      });\n    };\n\n    NamedTransitionIntent.prototype.createParamHandlerInfo = function createParamHandlerInfo(name, getHandler, names, objects, oldHandlerInfo) {\n      var params = {};\n\n      // Soak up all the provided string/numbers\n      var numNames = names.length;\n      while (numNames--) {\n        // Only use old params if the names match with the new handler\n        var oldParams = oldHandlerInfo && name === oldHandlerInfo.name && oldHandlerInfo.params || {};\n\n        var peek = objects[objects.length - 1];\n        var paramName = names[numNames];\n        if (isParam(peek)) {\n          params[paramName] = '' + objects.pop();\n        } else {\n          // If we're here, this means only some of the params\n          // were string/number params, so try and use a param\n          // value from a previous handler.\n          if (oldParams.hasOwnProperty(paramName)) {\n            params[paramName] = oldParams[paramName];\n          } else {\n            throw new Error(\"You didn't provide enough string/numeric parameters to satisfy all of the dynamic segments for route \" + name);\n          }\n        }\n      }\n\n      return handlerInfoFactory('param', {\n        name: name,\n        getHandler: getHandler,\n        params: params\n      });\n    };\n\n    return NamedTransitionIntent;\n  }(TransitionIntent);\n\n  function UnrecognizedURLError(message) {\n    if (!(this instanceof UnrecognizedURLError)) {\n      return new UnrecognizedURLError(message);\n    }\n\n    var error = Error.call(this, message);\n\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, UnrecognizedURLError);\n    } else {\n      this.stack = error.stack;\n    }\n\n    this.description = error.description;\n    this.fileName = error.fileName;\n    this.lineNumber = error.lineNumber;\n    this.message = error.message || 'UnrecognizedURL';\n    this.name = 'UnrecognizedURLError';\n    this.number = error.number;\n    this.code = error.code;\n  }\n\n  UnrecognizedURLError.prototype = Object.create(Error.prototype);\n\n  var URLTransitionIntent = function (_TransitionIntent2) {\n    (0, _emberBabel.inherits)(URLTransitionIntent, _TransitionIntent2);\n\n    function URLTransitionIntent(props) {\n      (0, _emberBabel.classCallCheck)(this, URLTransitionIntent);\n\n      var _this7 = (0, _emberBabel.possibleConstructorReturn)(this, _TransitionIntent2.call(this, props));\n\n      _this7.url = props.url;\n      return _this7;\n    }\n\n    URLTransitionIntent.prototype.applyToState = function applyToState(oldState, recognizer, getHandler) {\n      var newState = new TransitionState();\n\n      var results = recognizer.recognize(this.url),\n          i,\n          len;\n\n      if (!results) {\n        throw new UnrecognizedURLError(this.url);\n      }\n\n      var statesDiffer = false;\n      var url = this.url;\n\n      // Checks if a handler is accessible by URL. If it is not, an error is thrown.\n      // For the case where the handler is loaded asynchronously, the error will be\n      // thrown once it is loaded.\n      function checkHandlerAccessibility(handler) {\n        if (handler && handler.inaccessibleByURL) {\n          throw new UnrecognizedURLError(url);\n        }\n\n        return handler;\n      }\n\n      for (i = 0, len = results.length; i < len; ++i) {\n        var result = results[i];\n        var name = result.handler;\n        var newHandlerInfo = handlerInfoFactory('param', {\n          name: name,\n          getHandler: getHandler,\n          params: result.params\n        });\n        var handler = newHandlerInfo.handler;\n\n        if (handler) {\n          checkHandlerAccessibility(handler);\n        } else {\n          // If the hanlder is being loaded asynchronously, check if we can\n          // access it after it has resolved\n          newHandlerInfo.handlerPromise = newHandlerInfo.handlerPromise.then(checkHandlerAccessibility);\n        }\n\n        var oldHandlerInfo = oldState.handlerInfos[i];\n        if (statesDiffer || newHandlerInfo.shouldSupercede(oldHandlerInfo)) {\n          statesDiffer = true;\n          newState.handlerInfos[i] = newHandlerInfo;\n        } else {\n          newState.handlerInfos[i] = oldHandlerInfo;\n        }\n      }\n\n      merge(newState.queryParams, results.queryParams);\n\n      return newState;\n    };\n\n    return URLTransitionIntent;\n  }(TransitionIntent);\n\n  var pop = Array.prototype.pop;\n\n  var Router = function () {\n    function Router() {\n      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      (0, _emberBabel.classCallCheck)(this, Router);\n\n      this.getHandler = options.getHandler || this.getHandler;\n      this.getSerializer = options.getSerializer || this.getSerializer;\n      this.updateURL = options.updateURL || this.updateURL;\n      this.replaceURL = options.replaceURL || this.replaceURL;\n      this.didTransition = options.didTransition || this.didTransition;\n      this.willTransition = options.willTransition || this.willTransition;\n      this.delegate = options.delegate || this.delegate;\n      this.triggerEvent = options.triggerEvent || this.triggerEvent;\n      this.log = options.log || this.log;\n      this.dslCallBacks = []; // NOTE: set by Ember\n\n      this.state = undefined;\n      this.activeTransition = undefined;\n      this._changedQueryParams = undefined;\n      this.oldState = undefined;\n      this.currentHandlerInfos = undefined;\n      this.currentSequence = 0;\n\n      this.recognizer = new _routeRecognizer.default();\n      this.reset();\n    }\n\n    /**\n      The main entry point into the router. The API is essentially\n      the same as the `map` method in `route-recognizer`.\n       This method extracts the String handler at the last `.to()`\n      call and uses it as the name of the whole route.\n       @param {Function} callback\n    */\n\n\n    Router.prototype.map = function map(callback) {\n      this.recognizer.delegate = this.delegate;\n\n      this.recognizer.map(callback, function (recognizer, routes) {\n        for (var i = routes.length - 1, proceed = true; i >= 0 && proceed; --i) {\n          var route = routes[i];\n          recognizer.add(routes, { as: route.handler });\n          proceed = route.path === '/' || route.path === '' || route.handler.slice(-6) === '.index';\n        }\n      });\n    };\n\n    Router.prototype.hasRoute = function hasRoute(route) {\n      return this.recognizer.hasRoute(route);\n    };\n\n    Router.prototype.getHandler = function getHandler() {};\n\n    Router.prototype.getSerializer = function getSerializer() {};\n\n    Router.prototype.queryParamsTransition = function queryParamsTransition(changelist, wasTransitioning, oldState, newState) {\n      var router = this;\n\n      fireQueryParamDidChange(this, newState, changelist);\n\n      if (!wasTransitioning && this.activeTransition) {\n        // One of the handlers in queryParamsDidChange\n        // caused a transition. Just return that transition.\n        return this.activeTransition;\n      } else {\n        // Running queryParamsDidChange didn't change anything.\n        // Just update query params and be on our way.\n\n        // We have to return a noop transition that will\n        // perform a URL update at the end. This gives\n        // the user the ability to set the url update\n        // method (default is replaceState).\n        var newTransition = new Transition(this);\n        newTransition.queryParamsOnly = true;\n\n        oldState.queryParams = finalizeQueryParamChange(this, newState.handlerInfos, newState.queryParams, newTransition);\n\n        newTransition.promise = newTransition.promise.then(function (result) {\n          updateURL(newTransition, oldState, true);\n          if (router.didTransition) {\n            router.didTransition(router.currentHandlerInfos);\n          }\n          return result;\n        }, null, _promiseLabel('Transition complete'));\n        return newTransition;\n      }\n    };\n\n    Router.prototype.transitionByIntent = function transitionByIntent(intent /*, isIntermediate*/) {\n      try {\n        return getTransitionByIntent.apply(this, arguments);\n      } catch (e) {\n        return new Transition(this, intent, null, e);\n      }\n    };\n\n    Router.prototype.reset = function reset() {\n      if (this.state) {\n        forEach(this.state.handlerInfos.slice().reverse(), function (handlerInfo) {\n          var handler = handlerInfo.handler;\n          callHook(handler, 'exit');\n        });\n      }\n\n      this.oldState = undefined;\n      this.state = new TransitionState();\n      this.currentHandlerInfos = null;\n    };\n\n    Router.prototype.handleURL = function handleURL() {\n      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      // Perform a URL-based transition, but don't change\n      // the URL afterward, since it already happened.\n      var url = args[0];\n      if (url.charAt(0) !== '/') {\n        args[0] = '/' + url;\n      }\n\n      return doTransition(this, args).method(null);\n    };\n\n    Router.prototype.updateURL = function updateURL() {\n      throw new Error('updateURL is not implemented');\n    };\n\n    Router.prototype.replaceURL = function replaceURL(url) {\n      this.updateURL(url);\n    };\n\n    Router.prototype.transitionTo = function transitionTo() /*name*/{\n      return doTransition(this, arguments);\n    };\n\n    Router.prototype.intermediateTransitionTo = function intermediateTransitionTo() /*name*/{\n      return doTransition(this, arguments, true);\n    };\n\n    Router.prototype.refresh = function refresh(pivotHandler) {\n      var previousTransition = this.activeTransition;\n      var state = previousTransition ? previousTransition.state : this.state;\n      var handlerInfos = state.handlerInfos;\n\n      _log(this, 'Starting a refresh transition');\n      var intent = new NamedTransitionIntent({\n        name: handlerInfos[handlerInfos.length - 1].name,\n        pivotHandler: pivotHandler || handlerInfos[0].handler,\n        contexts: [], // TODO collect contexts...?\n        queryParams: this._changedQueryParams || state.queryParams || {}\n      });\n\n      var newTransition = this.transitionByIntent(intent, false);\n\n      // if the previous transition is a replace transition, that needs to be preserved\n      if (previousTransition && previousTransition.urlMethod === 'replace') {\n        newTransition.method(previousTransition.urlMethod);\n      }\n\n      return newTransition;\n    };\n\n    Router.prototype.replaceWith = function replaceWith() /*name*/{\n      return doTransition(this, arguments).method('replace');\n    };\n\n    Router.prototype.generate = function generate(handlerName) {\n      var partitionedArgs = extractQueryParams(slice.call(arguments, 1)),\n          suppliedParams = partitionedArgs[0],\n          queryParams = partitionedArgs[1];\n\n      // Construct a TransitionIntent with the provided params\n      // and apply it to the present state of the router.\n      var intent = new NamedTransitionIntent({\n        name: handlerName,\n        contexts: suppliedParams\n      });\n      var state = intent.applyToState(this.state, this.recognizer, this.getHandler, null, this.getSerializer);\n\n      var params = {};\n      for (var i = 0, len = state.handlerInfos.length; i < len; ++i) {\n        var handlerInfo = state.handlerInfos[i];\n        var handlerParams = handlerInfo.serialize();\n        merge(params, handlerParams);\n      }\n      params.queryParams = queryParams;\n\n      return this.recognizer.generate(handlerName, params);\n    };\n\n    Router.prototype.applyIntent = function applyIntent(handlerName, contexts) {\n      var intent = new NamedTransitionIntent({\n        name: handlerName,\n        contexts: contexts\n      });\n\n      var state = this.activeTransition && this.activeTransition.state || this.state;\n\n      return intent.applyToState(state, this.recognizer, this.getHandler, null, this.getSerializer);\n    };\n\n    Router.prototype.isActiveIntent = function isActiveIntent(handlerName, contexts, queryParams, _state) {\n      var state = _state || this.state,\n          targetHandlerInfos = state.handlerInfos,\n          handlerInfo = void 0,\n          len = void 0;\n\n      if (!targetHandlerInfos.length) {\n        return false;\n      }\n\n      var targetHandler = targetHandlerInfos[targetHandlerInfos.length - 1].name;\n      var recogHandlers = this.recognizer.handlersFor(targetHandler);\n\n      var index = 0;\n      for (len = recogHandlers.length; index < len; ++index) {\n        handlerInfo = targetHandlerInfos[index];\n        if (handlerInfo.name === handlerName) {\n          break;\n        }\n      }\n\n      if (index === recogHandlers.length) {\n        // The provided route name isn't even in the route hierarchy.\n        return false;\n      }\n\n      var testState = new TransitionState();\n      testState.handlerInfos = targetHandlerInfos.slice(0, index + 1);\n      recogHandlers = recogHandlers.slice(0, index + 1);\n\n      var intent = new NamedTransitionIntent({\n        name: targetHandler,\n        contexts: contexts\n      });\n\n      var newState = intent.applyToHandlers(testState, recogHandlers, this.getHandler, targetHandler, true, true, this.getSerializer);\n\n      var handlersEqual = handlerInfosEqual(newState.handlerInfos, testState.handlerInfos);\n      if (!queryParams || !handlersEqual) {\n        return handlersEqual;\n      }\n\n      // Get a hash of QPs that will still be active on new route\n      var activeQPsOnNewHandler = {};\n      merge(activeQPsOnNewHandler, queryParams);\n\n      var activeQueryParams = state.queryParams;\n      for (var key in activeQueryParams) {\n        if (activeQueryParams.hasOwnProperty(key) && activeQPsOnNewHandler.hasOwnProperty(key)) {\n          activeQPsOnNewHandler[key] = activeQueryParams[key];\n        }\n      }\n\n      return handlersEqual && !getChangelist(activeQPsOnNewHandler, queryParams);\n    };\n\n    Router.prototype.isActive = function isActive(handlerName) {\n      for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n\n      var partitionedArgs = extractQueryParams(args);\n      return this.isActiveIntent(handlerName, partitionedArgs[0], partitionedArgs[1]);\n    };\n\n    Router.prototype.trigger = function trigger() {\n      for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        args[_key3] = arguments[_key3];\n      }\n\n      _trigger(this, this.currentHandlerInfos, false, args);\n    };\n\n    return Router;\n  }();\n\n  function getTransitionByIntent(intent, isIntermediate) {\n    var wasTransitioning = !!this.activeTransition;\n    var oldState = wasTransitioning ? this.activeTransition.state : this.state;\n    var newTransition;\n\n    var newState = intent.applyToState(oldState, this.recognizer, this.getHandler, isIntermediate, this.getSerializer);\n    var queryParamChangelist = getChangelist(oldState.queryParams, newState.queryParams);\n\n    if (handlerInfosEqual(newState.handlerInfos, oldState.handlerInfos)) {\n      // This is a no-op transition. See if query params changed.\n      if (queryParamChangelist) {\n        newTransition = this.queryParamsTransition(queryParamChangelist, wasTransitioning, oldState, newState);\n        if (newTransition) {\n          newTransition.queryParamsOnly = true;\n          return newTransition;\n        }\n      }\n\n      // No-op. No need to create a new transition.\n      return this.activeTransition || new Transition(this);\n    }\n\n    if (isIntermediate) {\n      setupContexts(this, newState);\n      return;\n    }\n\n    // Create a new transition to the destination route.\n    newTransition = new Transition(this, intent, newState, undefined, this.activeTransition);\n\n    // transition is to same route with same params, only query params differ.\n    // not caught above probably because refresh() has been used\n    if (handlerInfosSameExceptQueryParams(newState.handlerInfos, oldState.handlerInfos)) {\n      newTransition.queryParamsOnly = true;\n    }\n\n    // Abort and usurp any previously active transition.\n    if (this.activeTransition) {\n      this.activeTransition.abort();\n    }\n    this.activeTransition = newTransition;\n\n    // Transition promises by default resolve with resolved state.\n    // For our purposes, swap out the promise to resolve\n    // after the transition has been finalized.\n    newTransition.promise = newTransition.promise.then(function (result) {\n      return finalizeTransition(newTransition, result.state);\n    }, null, _promiseLabel('Settle transition promise when transition is finalized'));\n\n    if (!wasTransitioning) {\n      notifyExistingHandlers(this, newState, newTransition);\n    }\n\n    fireQueryParamDidChange(this, newState, queryParamChangelist);\n\n    return newTransition;\n  }\n\n  /**\n    @private\n  \n    Fires queryParamsDidChange event\n  */\n  function fireQueryParamDidChange(router, newState, queryParamChangelist) {\n    // If queryParams changed trigger event\n    if (queryParamChangelist) {\n      // This is a little hacky but we need some way of storing\n      // changed query params given that no activeTransition\n      // is guaranteed to have occurred.\n      router._changedQueryParams = queryParamChangelist.all;\n      _trigger(router, newState.handlerInfos, true, ['queryParamsDidChange', queryParamChangelist.changed, queryParamChangelist.all, queryParamChangelist.removed]);\n      router._changedQueryParams = null;\n    }\n  }\n\n  /**\n    @private\n  \n    Takes an Array of `HandlerInfo`s, figures out which ones are\n    exiting, entering, or changing contexts, and calls the\n    proper handler hooks.\n  \n    For example, consider the following tree of handlers. Each handler is\n    followed by the URL segment it handles.\n  \n    ```\n    |~index (\"/\")\n    | |~posts (\"/posts\")\n    | | |-showPost (\"/:id\")\n    | | |-newPost (\"/new\")\n    | | |-editPost (\"/edit\")\n    | |~about (\"/about/:id\")\n    ```\n  \n    Consider the following transitions:\n  \n    1. A URL transition to `/posts/1`.\n       1. Triggers the `*model` callbacks on the\n          `index`, `posts`, and `showPost` handlers\n       2. Triggers the `enter` callback on the same\n       3. Triggers the `setup` callback on the same\n    2. A direct transition to `newPost`\n       1. Triggers the `exit` callback on `showPost`\n       2. Triggers the `enter` callback on `newPost`\n       3. Triggers the `setup` callback on `newPost`\n    3. A direct transition to `about` with a specified\n       context object\n       1. Triggers the `exit` callback on `newPost`\n          and `posts`\n       2. Triggers the `serialize` callback on `about`\n       3. Triggers the `enter` callback on `about`\n       4. Triggers the `setup` callback on `about`\n  \n    @param {Router} transition\n    @param {TransitionState} newState\n  */\n  function setupContexts(router, newState, transition) {\n    var partition = partitionHandlers(router.state, newState);\n    var i, l, handler;\n\n    for (i = 0, l = partition.exited.length; i < l; i++) {\n      handler = partition.exited[i].handler;\n      delete handler.context;\n\n      callHook(handler, 'reset', true, transition);\n      callHook(handler, 'exit', transition);\n    }\n\n    var oldState = router.oldState = router.state;\n    router.state = newState;\n    var currentHandlerInfos = router.currentHandlerInfos = partition.unchanged.slice();\n\n    try {\n      for (i = 0, l = partition.reset.length; i < l; i++) {\n        handler = partition.reset[i].handler;\n        callHook(handler, 'reset', false, transition);\n      }\n\n      for (i = 0, l = partition.updatedContext.length; i < l; i++) {\n        handlerEnteredOrUpdated(currentHandlerInfos, partition.updatedContext[i], false, transition);\n      }\n\n      for (i = 0, l = partition.entered.length; i < l; i++) {\n        handlerEnteredOrUpdated(currentHandlerInfos, partition.entered[i], true, transition);\n      }\n    } catch (e) {\n      router.state = oldState;\n      router.currentHandlerInfos = oldState.handlerInfos;\n      throw e;\n    }\n\n    router.state.queryParams = finalizeQueryParamChange(router, currentHandlerInfos, newState.queryParams, transition);\n  }\n\n  /**\n    @private\n  \n    Helper method used by setupContexts. Handles errors or redirects\n    that may happen in enter/setup.\n  */\n  function handlerEnteredOrUpdated(currentHandlerInfos, handlerInfo, enter, transition) {\n    var handler = handlerInfo.handler,\n        context = handlerInfo.context;\n\n    function _handlerEnteredOrUpdated(handler) {\n      if (enter) {\n        callHook(handler, 'enter', transition);\n      }\n\n      if (transition && transition.isAborted) {\n        throw new TransitionAbortedError();\n      }\n\n      handler.context = context;\n      callHook(handler, 'contextDidChange');\n\n      callHook(handler, 'setup', context, transition);\n      if (transition && transition.isAborted) {\n        throw new TransitionAbortedError();\n      }\n\n      currentHandlerInfos.push(handlerInfo);\n    }\n\n    // If the handler doesn't exist, it means we haven't resolved the handler promise yet\n    if (!handler) {\n      handlerInfo.handlerPromise = handlerInfo.handlerPromise.then(_handlerEnteredOrUpdated);\n    } else {\n      _handlerEnteredOrUpdated(handler);\n    }\n\n    return true;\n  }\n\n  /**\n    @private\n  \n    This function is called when transitioning from one URL to\n    another to determine which handlers are no longer active,\n    which handlers are newly active, and which handlers remain\n    active but have their context changed.\n  \n    Take a list of old handlers and new handlers and partition\n    them into four buckets:\n  \n    * unchanged: the handler was active in both the old and\n      new URL, and its context remains the same\n    * updated context: the handler was active in both the\n      old and new URL, but its context changed. The handler's\n      `setup` method, if any, will be called with the new\n      context.\n    * exited: the handler was active in the old URL, but is\n      no longer active.\n    * entered: the handler was not active in the old URL, but\n      is now active.\n  \n    The PartitionedHandlers structure has four fields:\n  \n    * `updatedContext`: a list of `HandlerInfo` objects that\n      represent handlers that remain active but have a changed\n      context\n    * `entered`: a list of `HandlerInfo` objects that represent\n      handlers that are newly active\n    * `exited`: a list of `HandlerInfo` objects that are no\n      longer active.\n    * `unchanged`: a list of `HanderInfo` objects that remain active.\n  \n    @param {Array[HandlerInfo]} oldHandlers a list of the handler\n      information for the previous URL (or `[]` if this is the\n      first handled transition)\n    @param {Array[HandlerInfo]} newHandlers a list of the handler\n      information for the new URL\n  \n    @return {Partition}\n  */\n  function partitionHandlers(oldState, newState) {\n    var oldHandlers = oldState.handlerInfos;\n    var newHandlers = newState.handlerInfos;\n\n    var handlers = {\n      updatedContext: [],\n      exited: [],\n      entered: [],\n      unchanged: [],\n      reset: undefined\n    };\n\n    var handlerChanged,\n        contextChanged = false,\n        i,\n        l;\n\n    for (i = 0, l = newHandlers.length; i < l; i++) {\n      var oldHandler = oldHandlers[i],\n          newHandler = newHandlers[i];\n\n      if (!oldHandler || oldHandler.handler !== newHandler.handler) {\n        handlerChanged = true;\n      }\n\n      if (handlerChanged) {\n        handlers.entered.push(newHandler);\n        if (oldHandler) {\n          handlers.exited.unshift(oldHandler);\n        }\n      } else if (contextChanged || oldHandler.context !== newHandler.context) {\n        contextChanged = true;\n        handlers.updatedContext.push(newHandler);\n      } else {\n        handlers.unchanged.push(oldHandler);\n      }\n    }\n\n    for (i = newHandlers.length, l = oldHandlers.length; i < l; i++) {\n      handlers.exited.unshift(oldHandlers[i]);\n    }\n\n    handlers.reset = handlers.updatedContext.slice();\n    handlers.reset.reverse();\n\n    return handlers;\n  }\n\n  function updateURL(transition, state /*, inputUrl*/) {\n    var urlMethod = transition.urlMethod;\n\n    if (!urlMethod) {\n      return;\n    }\n\n    var router = transition.router,\n        handlerInfos = state.handlerInfos,\n        handlerName = handlerInfos[handlerInfos.length - 1].name,\n        params = {};\n\n    for (var i = handlerInfos.length - 1; i >= 0; --i) {\n      var handlerInfo = handlerInfos[i];\n      merge(params, handlerInfo.params);\n      if (handlerInfo.handler.inaccessibleByURL) {\n        urlMethod = null;\n      }\n    }\n\n    if (urlMethod) {\n      params.queryParams = transition._visibleQueryParams || state.queryParams;\n      var url = router.recognizer.generate(handlerName, params);\n\n      // transitions during the initial transition must always use replaceURL.\n      // When the app boots, you are at a url, e.g. /foo. If some handler\n      // redirects to bar as part of the initial transition, you don't want to\n      // add a history entry for /foo. If you do, pressing back will immediately\n      // hit the redirect again and take you back to /bar, thus killing the back\n      // button\n      var initial = transition.isCausedByInitialTransition;\n\n      // say you are at / and you click a link to route /foo. In /foo's\n      // handler, the transition is aborted using replacewith('/bar').\n      // Because the current url is still /, the history entry for / is\n      // removed from the history. Clicking back will take you to the page\n      // you were on before /, which is often not even the app, thus killing\n      // the back button. That's why updateURL is always correct for an\n      // aborting transition that's not the initial transition\n      var replaceAndNotAborting = urlMethod === 'replace' && !transition.isCausedByAbortingTransition;\n\n      // because calling refresh causes an aborted transition, this needs to be\n      // special cased - if the initial transition is a replace transition, the\n      // urlMethod should be honored here.\n      var isQueryParamsRefreshTransition = transition.queryParamsOnly && urlMethod === 'replace';\n\n      // say you are at / and you a `replaceWith(/foo)` is called. Then, that\n      // transition is aborted with `replaceWith(/bar)`. At the end, we should\n      // end up with /bar replacing /. We are replacing the replace. We only\n      // will replace the initial route if all subsequent aborts are also\n      // replaces. However, there is some ambiguity around the correct behavior\n      // here.\n      var replacingReplace = urlMethod === 'replace' && transition.isCausedByAbortingReplaceTransition;\n\n      if (initial || replaceAndNotAborting || isQueryParamsRefreshTransition || replacingReplace) {\n        router.replaceURL(url);\n      } else {\n        router.updateURL(url);\n      }\n    }\n  }\n\n  /**\n    @private\n  \n    Updates the URL (if necessary) and calls `setupContexts`\n    to update the router's array of `currentHandlerInfos`.\n   */\n  function finalizeTransition(transition, newState) {\n    try {\n      _log(transition.router, transition.sequence, 'Resolved all models on destination route; finalizing transition.');\n\n      var router = transition.router,\n          handlerInfos = newState.handlerInfos;\n\n      // Run all the necessary enter/setup/exit hooks\n      setupContexts(router, newState, transition);\n\n      // Check if a redirect occurred in enter/setup\n      if (transition.isAborted) {\n        // TODO: cleaner way? distinguish b/w targetHandlerInfos?\n        router.state.handlerInfos = router.currentHandlerInfos;\n        return _rsvp.Promise.reject(logAbort(transition));\n      }\n\n      updateURL(transition, newState, transition.intent.url);\n\n      transition.isActive = false;\n      router.activeTransition = null;\n\n      _trigger(router, router.currentHandlerInfos, true, ['didTransition']);\n\n      if (router.didTransition) {\n        router.didTransition(router.currentHandlerInfos);\n      }\n\n      _log(router, transition.sequence, 'TRANSITION COMPLETE.');\n\n      // Resolve with the final handler.\n      return handlerInfos[handlerInfos.length - 1].handler;\n    } catch (e) {\n      if (!(e instanceof TransitionAbortedError)) {\n        //var erroneousHandler = handlerInfos.pop();\n        var infos = transition.state.handlerInfos;\n        transition.trigger(true, 'error', e, transition, infos[infos.length - 1].handler);\n        transition.abort();\n      }\n\n      throw e;\n    }\n  }\n\n  /**\n    @private\n  \n    Begins and returns a Transition based on the provided\n    arguments. Accepts arguments in the form of both URL\n    transitions and named transitions.\n  \n    @param {Router} router\n    @param {Array[Object]} args arguments passed to transitionTo,\n      replaceWith, or handleURL\n  */\n  function doTransition(router, args, isIntermediate) {\n    // Normalize blank transitions to root URL transitions.\n    var name = args[0] || '/';\n\n    var lastArg = args[args.length - 1];\n    var queryParams = {};\n    if (lastArg && lastArg.hasOwnProperty('queryParams')) {\n      queryParams = pop.call(args).queryParams;\n    }\n\n    var intent;\n    if (args.length === 0) {\n      _log(router, 'Updating query params');\n\n      // A query param update is really just a transition\n      // into the route you're already on.\n      var handlerInfos = router.state.handlerInfos;\n      intent = new NamedTransitionIntent({\n        name: handlerInfos[handlerInfos.length - 1].name,\n        contexts: [],\n        queryParams: queryParams\n      });\n    } else if (name.charAt(0) === '/') {\n      _log(router, 'Attempting URL transition to ' + name);\n      intent = new URLTransitionIntent({ url: name });\n    } else {\n      _log(router, 'Attempting transition to ' + name);\n      intent = new NamedTransitionIntent({\n        name: args[0],\n        contexts: slice.call(args, 1),\n        queryParams: queryParams\n      });\n    }\n\n    return router.transitionByIntent(intent, isIntermediate);\n  }\n\n  function handlerInfosEqual(handlerInfos, otherHandlerInfos) {\n    if (handlerInfos.length !== otherHandlerInfos.length) {\n      return false;\n    }\n\n    for (var i = 0, len = handlerInfos.length; i < len; ++i) {\n      if (handlerInfos[i] !== otherHandlerInfos[i]) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function handlerInfosSameExceptQueryParams(handlerInfos, otherHandlerInfos) {\n    if (handlerInfos.length !== otherHandlerInfos.length) {\n      return false;\n    }\n\n    for (var i = 0, len = handlerInfos.length; i < len; ++i) {\n      if (handlerInfos[i].name !== otherHandlerInfos[i].name) {\n        return false;\n      }\n\n      if (!paramsEqual(handlerInfos[i].params, otherHandlerInfos[i].params)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  function paramsEqual(params, otherParams) {\n    if (!params && !otherParams) {\n      return true;\n    } else if (!params && !!otherParams || !!params && !otherParams) {\n      // one is falsy but other is not;\n      return false;\n    }\n    var keys = Object.keys(params);\n    var otherKeys = Object.keys(otherParams);\n\n    if (keys.length !== otherKeys.length) {\n      return false;\n    }\n\n    for (var i = 0, len = keys.length; i < len; ++i) {\n      var key = keys[i];\n\n      if (params[key] !== otherParams[key]) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  function finalizeQueryParamChange(router, resolvedHandlers, newQueryParams, transition) {\n    // We fire a finalizeQueryParamChange event which\n    // gives the new route hierarchy a chance to tell\n    // us which query params it's consuming and what\n    // their final values are. If a query param is\n    // no longer consumed in the final route hierarchy,\n    // its serialized segment will be removed\n    // from the URL.\n\n    for (var k in newQueryParams) {\n      if (newQueryParams.hasOwnProperty(k) && newQueryParams[k] === null) {\n        delete newQueryParams[k];\n      }\n    }\n\n    var finalQueryParamsArray = [];\n    _trigger(router, resolvedHandlers, true, ['finalizeQueryParamChange', newQueryParams, finalQueryParamsArray, transition]);\n\n    if (transition) {\n      transition._visibleQueryParams = {};\n    }\n\n    var finalQueryParams = {};\n    for (var i = 0, len = finalQueryParamsArray.length; i < len; ++i) {\n      var qp = finalQueryParamsArray[i];\n      finalQueryParams[qp.key] = qp.value;\n      if (transition && qp.visible !== false) {\n        transition._visibleQueryParams[qp.key] = qp.value;\n      }\n    }\n    return finalQueryParams;\n  }\n\n  function notifyExistingHandlers(router, newState, newTransition) {\n    var oldHandlers = router.state.handlerInfos,\n        changing = [],\n        i,\n        oldHandlerLen,\n        oldHandler,\n        newHandler;\n\n    oldHandlerLen = oldHandlers.length;\n    for (i = 0; i < oldHandlerLen; i++) {\n      oldHandler = oldHandlers[i];\n      newHandler = newState.handlerInfos[i];\n\n      if (!newHandler || oldHandler.name !== newHandler.name) {\n        break;\n      }\n\n      if (!newHandler.isResolved) {\n        changing.push(oldHandler);\n      }\n    }\n\n    _trigger(router, oldHandlers, true, ['willTransition', newTransition]);\n\n    if (router.willTransition) {\n      router.willTransition(oldHandlers, newState.handlerInfos, newTransition);\n    }\n  }\n\n  exports.Transition = Transition;\n  exports.default = Router;\n});","enifed('rsvp', ['exports', 'ember-babel', 'node-module'], function (exports, _emberBabel, _nodeModule) {\n  'use strict';\n\n  exports.filter = exports.async = exports.map = exports.reject = exports.resolve = exports.off = exports.on = exports.configure = exports.denodeify = exports.defer = exports.rethrow = exports.hashSettled = exports.hash = exports.race = exports.allSettled = exports.all = exports.EventTarget = exports.Promise = exports.cast = exports.asap = undefined;\n  function callbacksFor(object) {\n    var callbacks = object._promiseCallbacks;\n\n    if (!callbacks) {\n      callbacks = object._promiseCallbacks = {};\n    }\n\n    return callbacks;\n  }\n\n  /**\n    @class RSVP.EventTarget\n  */\n  var EventTarget = {\n    mixin: function (object) {\n      object.on = this.on;\n      object.off = this.off;\n      object.trigger = this.trigger;\n      object._promiseCallbacks = undefined;\n      return object;\n    },\n    on: function (eventName, callback) {\n      if (typeof callback !== 'function') {\n        throw new TypeError('Callback must be a function');\n      }\n\n      var allCallbacks = callbacksFor(this);\n      var callbacks = allCallbacks[eventName];\n\n      if (!callbacks) {\n        callbacks = allCallbacks[eventName] = [];\n      }\n\n      if (callbacks.indexOf(callback) === -1) {\n        callbacks.push(callback);\n      }\n    },\n    off: function (eventName, callback) {\n      var allCallbacks = callbacksFor(this);\n\n      if (!callback) {\n        allCallbacks[eventName] = [];\n        return;\n      }\n\n      var callbacks = allCallbacks[eventName];\n      var index = callbacks.indexOf(callback);\n\n      if (index !== -1) {\n        callbacks.splice(index, 1);\n      }\n    },\n    trigger: function (eventName, options, label) {\n      var allCallbacks = callbacksFor(this);\n\n      var callbacks = allCallbacks[eventName];\n      if (callbacks) {\n        // Don't cache the callbacks.length since it may grow\n        var callback = void 0;\n        for (var i = 0; i < callbacks.length; i++) {\n          callback = callbacks[i];\n          callback(options, label);\n        }\n      }\n    }\n  };\n\n  var config = {\n    instrument: false\n  };\n\n  EventTarget['mixin'](config);\n\n  function configure(name, value) {\n    if (arguments.length === 2) {\n      config[name] = value;\n    } else {\n      return config[name];\n    }\n  }\n\n  var queue = [];\n\n  function scheduleFlush() {\n    setTimeout(function () {\n      for (var i = 0; i < queue.length; i++) {\n        var entry = queue[i];\n\n        var payload = entry.payload;\n\n        payload.guid = payload.key + payload.id;\n        payload.childGuid = payload.key + payload.childId;\n        if (payload.error) {\n          payload.stack = payload.error.stack;\n        }\n\n        config['trigger'](entry.name, entry.payload);\n      }\n      queue.length = 0;\n    }, 50);\n  }\n\n  function instrument(eventName, promise, child) {\n    if (1 === queue.push({\n      name: eventName,\n      payload: {\n        key: promise._guidKey,\n        id: promise._id,\n        eventName: eventName,\n        detail: promise._result,\n        childId: child && child._id,\n        label: promise._label,\n        timeStamp: Date.now(),\n        error: config[\"instrument-with-stack\"] ? new Error(promise._label) : null\n      } })) {\n      scheduleFlush();\n    }\n  }\n\n  /**\n    `RSVP.Promise.resolve` returns a promise that will become resolved with the\n    passed `value`. It is shorthand for the following:\n  \n    ```javascript\n    let promise = new RSVP.Promise(function(resolve, reject){\n      resolve(1);\n    });\n  \n    promise.then(function(value){\n      // value === 1\n    });\n    ```\n  \n    Instead of writing the above, your code now simply becomes the following:\n  \n    ```javascript\n    let promise = RSVP.Promise.resolve(1);\n  \n    promise.then(function(value){\n      // value === 1\n    });\n    ```\n  \n    @method resolve\n    @static\n    @param {*} object value that the returned promise will be resolved with\n    @param {String} label optional string for identifying the returned promise.\n    Useful for tooling.\n    @return {Promise} a promise that will become fulfilled with the given\n    `value`\n  */\n  function resolve$1(object, label) {\n    /*jshint validthis:true */\n    var Constructor = this;\n\n    if (object && typeof object === 'object' && object.constructor === Constructor) {\n      return object;\n    }\n\n    var promise = new Constructor(noop, label);\n    resolve(promise, object);\n    return promise;\n  }\n\n  function withOwnPromise() {\n    return new TypeError('A promises callback cannot return that same promise.');\n  }\n\n  function objectOrFunction(x) {\n    var type = typeof x;\n    return x !== null && (type === 'object' || type === 'function');\n  }\n\n  function noop() {}\n\n  var PENDING = void 0;\n  var FULFILLED = 1;\n  var REJECTED = 2;\n\n  var TRY_CATCH_ERROR = { error: null };\n\n  function getThen(promise) {\n    try {\n      return promise.then;\n    } catch (error) {\n      TRY_CATCH_ERROR.error = error;\n      return TRY_CATCH_ERROR;\n    }\n  }\n\n  var tryCatchCallback = void 0;\n  function tryCatcher() {\n    try {\n      var target = tryCatchCallback;\n      tryCatchCallback = null;\n      return target.apply(this, arguments);\n    } catch (e) {\n      TRY_CATCH_ERROR.error = e;\n      return TRY_CATCH_ERROR;\n    }\n  }\n\n  function tryCatch(fn) {\n    tryCatchCallback = fn;\n    return tryCatcher;\n  }\n\n  function handleForeignThenable(promise, thenable, then$$1) {\n    config.async(function (promise) {\n      var sealed = false;\n      var result = tryCatch(then$$1).call(thenable, function (value) {\n        if (sealed) {\n          return;\n        }\n        sealed = true;\n        if (thenable === value) {\n          fulfill(promise, value);\n        } else {\n          resolve(promise, value);\n        }\n      }, function (reason) {\n        if (sealed) {\n          return;\n        }\n        sealed = true;\n\n        reject(promise, reason);\n      }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n      if (!sealed && result === TRY_CATCH_ERROR) {\n        sealed = true;\n        var error = TRY_CATCH_ERROR.error;\n        TRY_CATCH_ERROR.error = null;\n        reject(promise, error);\n      }\n    }, promise);\n  }\n\n  function handleOwnThenable(promise, thenable) {\n    if (thenable._state === FULFILLED) {\n      fulfill(promise, thenable._result);\n    } else if (thenable._state === REJECTED) {\n      thenable._onError = null;\n      reject(promise, thenable._result);\n    } else {\n      subscribe(thenable, undefined, function (value) {\n        if (thenable === value) {\n          fulfill(promise, value);\n        } else {\n          resolve(promise, value);\n        }\n      }, function (reason) {\n        return reject(promise, reason);\n      });\n    }\n  }\n\n  function handleMaybeThenable(promise, maybeThenable, then$$1) {\n    var isOwnThenable = maybeThenable.constructor === promise.constructor && then$$1 === then && promise.constructor.resolve === resolve$1;\n\n    if (isOwnThenable) {\n      handleOwnThenable(promise, maybeThenable);\n    } else if (then$$1 === TRY_CATCH_ERROR) {\n      var error = TRY_CATCH_ERROR.error;\n      TRY_CATCH_ERROR.error = null;\n      reject(promise, error);\n    } else if (typeof then$$1 === 'function') {\n      handleForeignThenable(promise, maybeThenable, then$$1);\n    } else {\n      fulfill(promise, maybeThenable);\n    }\n  }\n\n  function resolve(promise, value) {\n    if (promise === value) {\n      fulfill(promise, value);\n    } else if (objectOrFunction(value)) {\n      handleMaybeThenable(promise, value, getThen(value));\n    } else {\n      fulfill(promise, value);\n    }\n  }\n\n  function publishRejection(promise) {\n    if (promise._onError) {\n      promise._onError(promise._result);\n    }\n\n    publish(promise);\n  }\n\n  function fulfill(promise, value) {\n    if (promise._state !== PENDING) {\n      return;\n    }\n\n    promise._result = value;\n    promise._state = FULFILLED;\n\n    if (promise._subscribers.length === 0) {\n      if (config.instrument) {\n        instrument('fulfilled', promise);\n      }\n    } else {\n      config.async(publish, promise);\n    }\n  }\n\n  function reject(promise, reason) {\n    if (promise._state !== PENDING) {\n      return;\n    }\n    promise._state = REJECTED;\n    promise._result = reason;\n    config.async(publishRejection, promise);\n  }\n\n  function subscribe(parent, child, onFulfillment, onRejection) {\n    var subscribers = parent._subscribers;\n    var length = subscribers.length;\n\n    parent._onError = null;\n\n    subscribers[length] = child;\n    subscribers[length + FULFILLED] = onFulfillment;\n    subscribers[length + REJECTED] = onRejection;\n\n    if (length === 0 && parent._state) {\n      config.async(publish, parent);\n    }\n  }\n\n  function publish(promise) {\n    var subscribers = promise._subscribers;\n    var settled = promise._state;\n\n    if (config.instrument) {\n      instrument(settled === FULFILLED ? 'fulfilled' : 'rejected', promise);\n    }\n\n    if (subscribers.length === 0) {\n      return;\n    }\n\n    var child = void 0,\n        callback = void 0,\n        result = promise._result;\n\n    for (var i = 0; i < subscribers.length; i += 3) {\n      child = subscribers[i];\n      callback = subscribers[i + settled];\n\n      if (child) {\n        invokeCallback(settled, child, callback, result);\n      } else {\n        callback(result);\n      }\n    }\n\n    promise._subscribers.length = 0;\n  }\n\n  function invokeCallback(state, promise, callback, result) {\n    var hasCallback = typeof callback === 'function';\n    var value = void 0;\n\n    if (hasCallback) {\n      value = tryCatch(callback)(result);\n    } else {\n      value = result;\n    }\n\n    if (promise._state !== PENDING) {\n      // noop\n    } else if (value === promise) {\n      reject(promise, withOwnPromise());\n    } else if (value === TRY_CATCH_ERROR) {\n      var error = TRY_CATCH_ERROR.error;\n      TRY_CATCH_ERROR.error = null; // release\n      reject(promise, error);\n    } else if (hasCallback) {\n      resolve(promise, value);\n    } else if (state === FULFILLED) {\n      fulfill(promise, value);\n    } else if (state === REJECTED) {\n      reject(promise, value);\n    }\n  }\n\n  function initializePromise(promise, resolver) {\n    var resolved = false;\n    try {\n      resolver(function (value) {\n        if (resolved) {\n          return;\n        }\n        resolved = true;\n        resolve(promise, value);\n      }, function (reason) {\n        if (resolved) {\n          return;\n        }\n        resolved = true;\n        reject(promise, reason);\n      });\n    } catch (e) {\n      reject(promise, e);\n    }\n  }\n\n  function then(onFulfillment, onRejection, label) {\n    var parent = this;\n    var state = parent._state;\n\n    if (state === FULFILLED && !onFulfillment || state === REJECTED && !onRejection) {\n      config.instrument && instrument('chained', parent, parent);\n      return parent;\n    }\n\n    parent._onError = null;\n\n    var child = new parent.constructor(noop, label);\n    var result = parent._result;\n\n    config.instrument && instrument('chained', parent, child);\n\n    if (state === PENDING) {\n      subscribe(parent, child, onFulfillment, onRejection);\n    } else {\n      var callback = state === FULFILLED ? onFulfillment : onRejection;\n      config.async(function () {\n        return invokeCallback(state, child, callback, result);\n      });\n    }\n\n    return child;\n  }\n\n  var Enumerator = function () {\n    function Enumerator(Constructor, input, abortOnReject, label) {\n      (0, _emberBabel.classCallCheck)(this, Enumerator);\n\n      this._instanceConstructor = Constructor;\n      this.promise = new Constructor(noop, label);\n      this._abortOnReject = abortOnReject;\n      this._isUsingOwnPromise = Constructor === Promise;\n      this._isUsingOwnResolve = Constructor.resolve === resolve$1;\n\n      this._init.apply(this, arguments);\n    }\n\n    Enumerator.prototype._init = function _init(Constructor, input) {\n      var len = input.length || 0;\n      this.length = len;\n      this._remaining = len;\n      this._result = new Array(len);\n\n      this._enumerate(input);\n    };\n\n    Enumerator.prototype._enumerate = function _enumerate(input) {\n      var length = this.length;\n      var promise = this.promise;\n\n      for (var i = 0; promise._state === PENDING && i < length; i++) {\n        this._eachEntry(input[i], i, true);\n      }\n      this._checkFullfillment();\n    };\n\n    Enumerator.prototype._checkFullfillment = function _checkFullfillment() {\n      if (this._remaining === 0) {\n        var result = this._result;\n        fulfill(this.promise, result);\n        this._result = null;\n      }\n    };\n\n    Enumerator.prototype._settleMaybeThenable = function _settleMaybeThenable(entry, i, firstPass) {\n      var c = this._instanceConstructor;\n\n      if (this._isUsingOwnResolve) {\n        var then$$1 = getThen(entry);\n\n        if (then$$1 === then && entry._state !== PENDING) {\n          entry._onError = null;\n          this._settledAt(entry._state, i, entry._result, firstPass);\n        } else if (typeof then$$1 !== 'function') {\n          this._settledAt(FULFILLED, i, entry, firstPass);\n        } else if (this._isUsingOwnPromise) {\n          var promise = new c(noop);\n          handleMaybeThenable(promise, entry, then$$1);\n          this._willSettleAt(promise, i, firstPass);\n        } else {\n          this._willSettleAt(new c(function (resolve$$1) {\n            return resolve$$1(entry);\n          }), i, firstPass);\n        }\n      } else {\n        this._willSettleAt(c.resolve(entry), i, firstPass);\n      }\n    };\n\n    Enumerator.prototype._eachEntry = function _eachEntry(entry, i, firstPass) {\n      if (entry !== null && typeof entry === 'object') {\n        this._settleMaybeThenable(entry, i, firstPass);\n      } else {\n        this._setResultAt(FULFILLED, i, entry, firstPass);\n      }\n    };\n\n    Enumerator.prototype._settledAt = function _settledAt(state, i, value, firstPass) {\n      var promise = this.promise;\n\n      if (promise._state === PENDING) {\n        if (this._abortOnReject && state === REJECTED) {\n          reject(promise, value);\n        } else {\n          this._setResultAt(state, i, value, firstPass);\n          this._checkFullfillment();\n        }\n      }\n    };\n\n    Enumerator.prototype._setResultAt = function _setResultAt(state, i, value, firstPass) {\n      this._remaining--;\n      this._result[i] = value;\n    };\n\n    Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i, firstPass) {\n      var _this = this;\n\n      subscribe(promise, undefined, function (value) {\n        return _this._settledAt(FULFILLED, i, value, firstPass);\n      }, function (reason) {\n        return _this._settledAt(REJECTED, i, reason, firstPass);\n      });\n    };\n\n    return Enumerator;\n  }();\n\n  function setSettledResult(state, i, value) {\n    this._remaining--;\n    if (state === FULFILLED) {\n      this._result[i] = {\n        state: 'fulfilled',\n        value: value\n      };\n    } else {\n      this._result[i] = {\n        state: 'rejected',\n        reason: value\n      };\n    }\n  }\n\n  /**\n    `RSVP.Promise.all` accepts an array of promises, and returns a new promise which\n    is fulfilled with an array of fulfillment values for the passed promises, or\n    rejected with the reason of the first passed promise to be rejected. It casts all\n    elements of the passed iterable to promises as it runs this algorithm.\n  \n    Example:\n  \n    ```javascript\n    let promise1 = RSVP.resolve(1);\n    let promise2 = RSVP.resolve(2);\n    let promise3 = RSVP.resolve(3);\n    let promises = [ promise1, promise2, promise3 ];\n  \n    RSVP.Promise.all(promises).then(function(array){\n      // The array here would be [ 1, 2, 3 ];\n    });\n    ```\n  \n    If any of the `promises` given to `RSVP.all` are rejected, the first promise\n    that is rejected will be given as an argument to the returned promises's\n    rejection handler. For example:\n  \n    Example:\n  \n    ```javascript\n    let promise1 = RSVP.resolve(1);\n    let promise2 = RSVP.reject(new Error(\"2\"));\n    let promise3 = RSVP.reject(new Error(\"3\"));\n    let promises = [ promise1, promise2, promise3 ];\n  \n    RSVP.Promise.all(promises).then(function(array){\n      // Code here never runs because there are rejected promises!\n    }, function(error) {\n      // error.message === \"2\"\n    });\n    ```\n  \n    @method all\n    @static\n    @param {Array} entries array of promises\n    @param {String} label optional string for labeling the promise.\n    Useful for tooling.\n    @return {Promise} promise that is fulfilled when all `promises` have been\n    fulfilled, or rejected if any of them become rejected.\n    @static\n  */\n  function all(entries, label) {\n    if (!Array.isArray(entries)) {\n      return this.reject(new TypeError(\"Promise.all must be called with an array\"), label);\n    }\n    return new Enumerator(this, entries, true /* abort on reject */, label).promise;\n  }\n\n  /**\n    `RSVP.Promise.race` returns a new promise which is settled in the same way as the\n    first passed promise to settle.\n  \n    Example:\n  \n    ```javascript\n    let promise1 = new RSVP.Promise(function(resolve, reject){\n      setTimeout(function(){\n        resolve('promise 1');\n      }, 200);\n    });\n  \n    let promise2 = new RSVP.Promise(function(resolve, reject){\n      setTimeout(function(){\n        resolve('promise 2');\n      }, 100);\n    });\n  \n    RSVP.Promise.race([promise1, promise2]).then(function(result){\n      // result === 'promise 2' because it was resolved before promise1\n      // was resolved.\n    });\n    ```\n  \n    `RSVP.Promise.race` is deterministic in that only the state of the first\n    settled promise matters. For example, even if other promises given to the\n    `promises` array argument are resolved, but the first settled promise has\n    become rejected before the other promises became fulfilled, the returned\n    promise will become rejected:\n  \n    ```javascript\n    let promise1 = new RSVP.Promise(function(resolve, reject){\n      setTimeout(function(){\n        resolve('promise 1');\n      }, 200);\n    });\n  \n    let promise2 = new RSVP.Promise(function(resolve, reject){\n      setTimeout(function(){\n        reject(new Error('promise 2'));\n      }, 100);\n    });\n  \n    RSVP.Promise.race([promise1, promise2]).then(function(result){\n      // Code here never runs\n    }, function(reason){\n      // reason.message === 'promise 2' because promise 2 became rejected before\n      // promise 1 became fulfilled\n    });\n    ```\n  \n    An example real-world use case is implementing timeouts:\n  \n    ```javascript\n    RSVP.Promise.race([ajax('foo.json'), timeout(5000)])\n    ```\n  \n    @method race\n    @static\n    @param {Array} entries array of promises to observe\n    @param {String} label optional string for describing the promise returned.\n    Useful for tooling.\n    @return {Promise} a promise which settles in the same way as the first passed\n    promise to settle.\n  */\n  function race(entries, label) {\n    /*jshint validthis:true */\n    var Constructor = this;\n\n    var promise = new Constructor(noop, label);\n\n    if (!Array.isArray(entries)) {\n      reject(promise, new TypeError('Promise.race must be called with an array'));\n      return promise;\n    }\n\n    for (var i = 0; promise._state === PENDING && i < entries.length; i++) {\n      subscribe(Constructor.resolve(entries[i]), undefined, function (value) {\n        return resolve(promise, value);\n      }, function (reason) {\n        return reject(promise, reason);\n      });\n    }\n\n    return promise;\n  }\n\n  /**\n    `RSVP.Promise.reject` returns a promise rejected with the passed `reason`.\n    It is shorthand for the following:\n  \n    ```javascript\n    let promise = new RSVP.Promise(function(resolve, reject){\n      reject(new Error('WHOOPS'));\n    });\n  \n    promise.then(function(value){\n      // Code here doesn't run because the promise is rejected!\n    }, function(reason){\n      // reason.message === 'WHOOPS'\n    });\n    ```\n  \n    Instead of writing the above, your code now simply becomes the following:\n  \n    ```javascript\n    let promise = RSVP.Promise.reject(new Error('WHOOPS'));\n  \n    promise.then(function(value){\n      // Code here doesn't run because the promise is rejected!\n    }, function(reason){\n      // reason.message === 'WHOOPS'\n    });\n    ```\n  \n    @method reject\n    @static\n    @param {*} reason value that the returned promise will be rejected with.\n    @param {String} label optional string for identifying the returned promise.\n    Useful for tooling.\n    @return {Promise} a promise rejected with the given `reason`.\n  */\n  function reject$1(reason, label) {\n    /*jshint validthis:true */\n    var Constructor = this;\n    var promise = new Constructor(noop, label);\n    reject(promise, reason);\n    return promise;\n  }\n\n  var guidKey = 'rsvp_' + Date.now() + '-';\n  var counter = 0;\n\n  function needsResolver() {\n    throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n  }\n\n  function needsNew() {\n    throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n  }\n\n  /**\n    Promise objects represent the eventual result of an asynchronous operation. The\n    primary way of interacting with a promise is through its `then` method, which\n    registers callbacks to receive either a promise’s eventual value or the reason\n    why the promise cannot be fulfilled.\n  \n    Terminology\n    -----------\n  \n    - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n    - `thenable` is an object or function that defines a `then` method.\n    - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n    - `exception` is a value that is thrown using the throw statement.\n    - `reason` is a value that indicates why a promise was rejected.\n    - `settled` the final resting state of a promise, fulfilled or rejected.\n  \n    A promise can be in one of three states: pending, fulfilled, or rejected.\n  \n    Promises that are fulfilled have a fulfillment value and are in the fulfilled\n    state.  Promises that are rejected have a rejection reason and are in the\n    rejected state.  A fulfillment value is never a thenable.\n  \n    Promises can also be said to *resolve* a value.  If this value is also a\n    promise, then the original promise's settled state will match the value's\n    settled state.  So a promise that *resolves* a promise that rejects will\n    itself reject, and a promise that *resolves* a promise that fulfills will\n    itself fulfill.\n  \n  \n    Basic Usage:\n    ------------\n  \n    ```js\n    let promise = new Promise(function(resolve, reject) {\n      // on success\n      resolve(value);\n  \n      // on failure\n      reject(reason);\n    });\n  \n    promise.then(function(value) {\n      // on fulfillment\n    }, function(reason) {\n      // on rejection\n    });\n    ```\n  \n    Advanced Usage:\n    ---------------\n  \n    Promises shine when abstracting away asynchronous interactions such as\n    `XMLHttpRequest`s.\n  \n    ```js\n    function getJSON(url) {\n      return new Promise(function(resolve, reject){\n        let xhr = new XMLHttpRequest();\n  \n        xhr.open('GET', url);\n        xhr.onreadystatechange = handler;\n        xhr.responseType = 'json';\n        xhr.setRequestHeader('Accept', 'application/json');\n        xhr.send();\n  \n        function handler() {\n          if (this.readyState === this.DONE) {\n            if (this.status === 200) {\n              resolve(this.response);\n            } else {\n              reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n            }\n          }\n        };\n      });\n    }\n  \n    getJSON('/posts.json').then(function(json) {\n      // on fulfillment\n    }, function(reason) {\n      // on rejection\n    });\n    ```\n  \n    Unlike callbacks, promises are great composable primitives.\n  \n    ```js\n    Promise.all([\n      getJSON('/posts'),\n      getJSON('/comments')\n    ]).then(function(values){\n      values[0] // => postsJSON\n      values[1] // => commentsJSON\n  \n      return values;\n    });\n    ```\n  \n    @class RSVP.Promise\n    @param {function} resolver\n    @param {String} label optional string for labeling the promise.\n    Useful for tooling.\n    @constructor\n  */\n\n  var Promise = function () {\n    function Promise(resolver, label) {\n      (0, _emberBabel.classCallCheck)(this, Promise);\n\n      this._id = counter++;\n      this._label = label;\n      this._state = undefined;\n      this._result = undefined;\n      this._subscribers = [];\n\n      config.instrument && instrument('created', this);\n\n      if (noop !== resolver) {\n        typeof resolver !== 'function' && needsResolver();\n        this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n      }\n    }\n\n    Promise.prototype._onError = function _onError(reason) {\n      var _this2 = this;\n\n      config.after(function () {\n        if (_this2._onError) {\n          config.trigger('error', reason, _this2._label);\n        }\n      });\n    };\n\n    Promise.prototype.catch = function _catch(onRejection, label) {\n      return this.then(undefined, onRejection, label);\n    };\n\n    Promise.prototype.finally = function _finally(callback, label) {\n      var promise = this;\n      var constructor = promise.constructor;\n\n      return promise.then(function (value) {\n        return constructor.resolve(callback()).then(function () {\n          return value;\n        });\n      }, function (reason) {\n        return constructor.resolve(callback()).then(function () {\n          throw reason;\n        });\n      }, label);\n    };\n\n    return Promise;\n  }();\n\n  Promise.cast = resolve$1; // deprecated\n  Promise.all = all;\n  Promise.race = race;\n  Promise.resolve = resolve$1;\n  Promise.reject = reject$1;\n\n  Promise.prototype._guidKey = guidKey;\n\n  /**\n    The primary way of interacting with a promise is through its `then` method,\n    which registers callbacks to receive either a promise's eventual value or the\n    reason why the promise cannot be fulfilled.\n  \n    ```js\n    findUser().then(function(user){\n      // user is available\n    }, function(reason){\n      // user is unavailable, and you are given the reason why\n    });\n    ```\n  \n    Chaining\n    --------\n  \n    The return value of `then` is itself a promise.  This second, 'downstream'\n    promise is resolved with the return value of the first promise's fulfillment\n    or rejection handler, or rejected if the handler throws an exception.\n  \n    ```js\n    findUser().then(function (user) {\n      return user.name;\n    }, function (reason) {\n      return 'default name';\n    }).then(function (userName) {\n      // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n      // will be `'default name'`\n    });\n  \n    findUser().then(function (user) {\n      throw new Error('Found user, but still unhappy');\n    }, function (reason) {\n      throw new Error('`findUser` rejected and we\\'re unhappy');\n    }).then(function (value) {\n      // never reached\n    }, function (reason) {\n      // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n      // If `findUser` rejected, `reason` will be '`findUser` rejected and we\\'re unhappy'.\n    });\n    ```\n    If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n  \n    ```js\n    findUser().then(function (user) {\n      throw new PedagogicalException('Upstream error');\n    }).then(function (value) {\n      // never reached\n    }).then(function (value) {\n      // never reached\n    }, function (reason) {\n      // The `PedgagocialException` is propagated all the way down to here\n    });\n    ```\n  \n    Assimilation\n    ------------\n  \n    Sometimes the value you want to propagate to a downstream promise can only be\n    retrieved asynchronously. This can be achieved by returning a promise in the\n    fulfillment or rejection handler. The downstream promise will then be pending\n    until the returned promise is settled. This is called *assimilation*.\n  \n    ```js\n    findUser().then(function (user) {\n      return findCommentsByAuthor(user);\n    }).then(function (comments) {\n      // The user's comments are now available\n    });\n    ```\n  \n    If the assimliated promise rejects, then the downstream promise will also reject.\n  \n    ```js\n    findUser().then(function (user) {\n      return findCommentsByAuthor(user);\n    }).then(function (comments) {\n      // If `findCommentsByAuthor` fulfills, we'll have the value here\n    }, function (reason) {\n      // If `findCommentsByAuthor` rejects, we'll have the reason here\n    });\n    ```\n  \n    Simple Example\n    --------------\n  \n    Synchronous Example\n  \n    ```javascript\n    let result;\n  \n    try {\n      result = findResult();\n      // success\n    } catch(reason) {\n      // failure\n    }\n    ```\n  \n    Errback Example\n  \n    ```js\n    findResult(function(result, err){\n      if (err) {\n        // failure\n      } else {\n        // success\n      }\n    });\n    ```\n  \n    Promise Example;\n  \n    ```javascript\n    findResult().then(function(result){\n      // success\n    }, function(reason){\n      // failure\n    });\n    ```\n  \n    Advanced Example\n    --------------\n  \n    Synchronous Example\n  \n    ```javascript\n    let author, books;\n  \n    try {\n      author = findAuthor();\n      books  = findBooksByAuthor(author);\n      // success\n    } catch(reason) {\n      // failure\n    }\n    ```\n  \n    Errback Example\n  \n    ```js\n  \n    function foundBooks(books) {\n  \n    }\n  \n    function failure(reason) {\n  \n    }\n  \n    findAuthor(function(author, err){\n      if (err) {\n        failure(err);\n        // failure\n      } else {\n        try {\n          findBoooksByAuthor(author, function(books, err) {\n            if (err) {\n              failure(err);\n            } else {\n              try {\n                foundBooks(books);\n              } catch(reason) {\n                failure(reason);\n              }\n            }\n          });\n        } catch(error) {\n          failure(err);\n        }\n        // success\n      }\n    });\n    ```\n  \n    Promise Example;\n  \n    ```javascript\n    findAuthor().\n      then(findBooksByAuthor).\n      then(function(books){\n        // found books\n    }).catch(function(reason){\n      // something went wrong\n    });\n    ```\n  \n    @method then\n    @param {Function} onFulfillment\n    @param {Function} onRejection\n    @param {String} label optional string for labeling the promise.\n    Useful for tooling.\n    @return {Promise}\n  */\n  Promise.prototype.then = then;\n\n  function makeObject(_, argumentNames) {\n    var obj = {};\n    var length = _.length;\n    var args = new Array(length);\n\n    for (var x = 0; x < length; x++) {\n      args[x] = _[x];\n    }\n\n    for (var i = 0; i < argumentNames.length; i++) {\n      var name = argumentNames[i];\n      obj[name] = args[i + 1];\n    }\n\n    return obj;\n  }\n\n  function arrayResult(_) {\n    var length = _.length;\n    var args = new Array(length - 1);\n\n    for (var i = 1; i < length; i++) {\n      args[i - 1] = _[i];\n    }\n\n    return args;\n  }\n\n  function wrapThenable(then, promise) {\n    return {\n      then: function (onFulFillment, onRejection) {\n        return then.call(promise, onFulFillment, onRejection);\n      }\n    };\n  }\n\n  /**\n    `RSVP.denodeify` takes a 'node-style' function and returns a function that\n    will return an `RSVP.Promise`. You can use `denodeify` in Node.js or the\n    browser when you'd prefer to use promises over using callbacks. For example,\n    `denodeify` transforms the following:\n  \n    ```javascript\n    let fs = require('fs');\n  \n    fs.readFile('myfile.txt', function(err, data){\n      if (err) return handleError(err);\n      handleData(data);\n    });\n    ```\n  \n    into:\n  \n    ```javascript\n    let fs = require('fs');\n    let readFile = RSVP.denodeify(fs.readFile);\n  \n    readFile('myfile.txt').then(handleData, handleError);\n    ```\n  \n    If the node function has multiple success parameters, then `denodeify`\n    just returns the first one:\n  \n    ```javascript\n    let request = RSVP.denodeify(require('request'));\n  \n    request('http://example.com').then(function(res) {\n      // ...\n    });\n    ```\n  \n    However, if you need all success parameters, setting `denodeify`'s\n    second parameter to `true` causes it to return all success parameters\n    as an array:\n  \n    ```javascript\n    let request = RSVP.denodeify(require('request'), true);\n  \n    request('http://example.com').then(function(result) {\n      // result[0] -> res\n      // result[1] -> body\n    });\n    ```\n  \n    Or if you pass it an array with names it returns the parameters as a hash:\n  \n    ```javascript\n    let request = RSVP.denodeify(require('request'), ['res', 'body']);\n  \n    request('http://example.com').then(function(result) {\n      // result.res\n      // result.body\n    });\n    ```\n  \n    Sometimes you need to retain the `this`:\n  \n    ```javascript\n    let app = require('express')();\n    let render = RSVP.denodeify(app.render.bind(app));\n    ```\n  \n    The denodified function inherits from the original function. It works in all\n    environments, except IE 10 and below. Consequently all properties of the original\n    function are available to you. However, any properties you change on the\n    denodeified function won't be changed on the original function. Example:\n  \n    ```javascript\n    let request = RSVP.denodeify(require('request')),\n        cookieJar = request.jar(); // <- Inheritance is used here\n  \n    request('http://example.com', {jar: cookieJar}).then(function(res) {\n      // cookieJar.cookies holds now the cookies returned by example.com\n    });\n    ```\n  \n    Using `denodeify` makes it easier to compose asynchronous operations instead\n    of using callbacks. For example, instead of:\n  \n    ```javascript\n    let fs = require('fs');\n  \n    fs.readFile('myfile.txt', function(err, data){\n      if (err) { ... } // Handle error\n      fs.writeFile('myfile2.txt', data, function(err){\n        if (err) { ... } // Handle error\n        console.log('done')\n      });\n    });\n    ```\n  \n    you can chain the operations together using `then` from the returned promise:\n  \n    ```javascript\n    let fs = require('fs');\n    let readFile = RSVP.denodeify(fs.readFile);\n    let writeFile = RSVP.denodeify(fs.writeFile);\n  \n    readFile('myfile.txt').then(function(data){\n      return writeFile('myfile2.txt', data);\n    }).then(function(){\n      console.log('done')\n    }).catch(function(error){\n      // Handle error\n    });\n    ```\n  \n    @method denodeify\n    @static\n    @for RSVP\n    @param {Function} nodeFunc a 'node-style' function that takes a callback as\n    its last argument. The callback expects an error to be passed as its first\n    argument (if an error occurred, otherwise null), and the value from the\n    operation as its second argument ('function(err, value){ }').\n    @param {Boolean|Array} [options] An optional paramter that if set\n    to `true` causes the promise to fulfill with the callback's success arguments\n    as an array. This is useful if the node function has multiple success\n    paramters. If you set this paramter to an array with names, the promise will\n    fulfill with a hash with these names as keys and the success parameters as\n    values.\n    @return {Function} a function that wraps `nodeFunc` to return an\n    `RSVP.Promise`\n    @static\n  */\n  function denodeify(nodeFunc, options) {\n    var fn = function () {\n      var l = arguments.length;\n      var args = new Array(l + 1);\n      var promiseInput = false;\n\n      for (var i = 0; i < l; ++i) {\n        var arg = arguments[i];\n\n        if (!promiseInput) {\n          // TODO: clean this up\n          promiseInput = needsPromiseInput(arg);\n          if (promiseInput === TRY_CATCH_ERROR) {\n            var error = TRY_CATCH_ERROR.error;\n            TRY_CATCH_ERROR.error = null;\n            var p = new Promise(noop);\n            reject(p, error);\n            return p;\n          } else if (promiseInput && promiseInput !== true) {\n            arg = wrapThenable(promiseInput, arg);\n          }\n        }\n        args[i] = arg;\n      }\n\n      var promise = new Promise(noop);\n\n      args[l] = function (err, val) {\n        if (err) {\n          reject(promise, err);\n        } else if (options === undefined) {\n          resolve(promise, val);\n        } else if (options === true) {\n          resolve(promise, arrayResult(arguments));\n        } else if (Array.isArray(options)) {\n          resolve(promise, makeObject(arguments, options));\n        } else {\n          resolve(promise, val);\n        }\n      };\n\n      if (promiseInput) {\n        return handlePromiseInput(promise, args, nodeFunc, this);\n      } else {\n        return handleValueInput(promise, args, nodeFunc, this);\n      }\n    };\n\n    (0, _emberBabel.defaults)(fn, nodeFunc);\n\n\n    return fn;\n  }\n\n  function handleValueInput(promise, args, nodeFunc, self) {\n    var result = tryCatch(nodeFunc).apply(self, args);\n    if (result === TRY_CATCH_ERROR) {\n      var error = TRY_CATCH_ERROR.error;\n      TRY_CATCH_ERROR.error = null;\n      reject(promise, error);\n    }\n    return promise;\n  }\n\n  function handlePromiseInput(promise, args, nodeFunc, self) {\n    return Promise.all(args).then(function (args) {\n      return handleValueInput(promise, args, nodeFunc, self);\n    });\n  }\n\n  function needsPromiseInput(arg) {\n    if (arg !== null && typeof arg === 'object') {\n      if (arg.constructor === Promise) {\n        return true;\n      } else {\n        return getThen(arg);\n      }\n    } else {\n      return false;\n    }\n  }\n\n  /**\n    This is a convenient alias for `RSVP.Promise.all`.\n  \n    @method all\n    @static\n    @for RSVP\n    @param {Array} array Array of promises.\n    @param {String} label An optional label. This is useful\n    for tooling.\n  */\n  function all$1(array, label) {\n    return Promise.all(array, label);\n  }\n\n  var AllSettled = function (_Enumerator) {\n    (0, _emberBabel.inherits)(AllSettled, _Enumerator);\n\n    function AllSettled(Constructor, entries, label) {\n      (0, _emberBabel.classCallCheck)(this, AllSettled);\n      return (0, _emberBabel.possibleConstructorReturn)(this, _Enumerator.call(this, Constructor, entries, false /* don't abort on reject */, label));\n    }\n\n    return AllSettled;\n  }(Enumerator);\n\n  AllSettled.prototype._setResultAt = setSettledResult;\n\n  /**\n  `RSVP.allSettled` is similar to `RSVP.all`, but instead of implementing\n  a fail-fast method, it waits until all the promises have returned and\n  shows you all the results. This is useful if you want to handle multiple\n  promises' failure states together as a set.\n   Returns a promise that is fulfilled when all the given promises have been\n  settled. The return promise is fulfilled with an array of the states of\n  the promises passed into the `promises` array argument.\n   Each state object will either indicate fulfillment or rejection, and\n  provide the corresponding value or reason. The states will take one of\n  the following formats:\n   ```javascript\n  { state: 'fulfilled', value: value }\n    or\n  { state: 'rejected', reason: reason }\n  ```\n   Example:\n   ```javascript\n  let promise1 = RSVP.Promise.resolve(1);\n  let promise2 = RSVP.Promise.reject(new Error('2'));\n  let promise3 = RSVP.Promise.reject(new Error('3'));\n  let promises = [ promise1, promise2, promise3 ];\n   RSVP.allSettled(promises).then(function(array){\n    // array == [\n    //   { state: 'fulfilled', value: 1 },\n    //   { state: 'rejected', reason: Error },\n    //   { state: 'rejected', reason: Error }\n    // ]\n    // Note that for the second item, reason.message will be '2', and for the\n    // third item, reason.message will be '3'.\n  }, function(error) {\n    // Not run. (This block would only be called if allSettled had failed,\n    // for instance if passed an incorrect argument type.)\n  });\n  ```\n   @method allSettled\n  @static\n  @for RSVP\n  @param {Array} entries\n  @param {String} label - optional string that describes the promise.\n  Useful for tooling.\n  @return {Promise} promise that is fulfilled with an array of the settled\n  states of the constituent promises.\n  */\n\n  function allSettled(entries, label) {\n    if (!Array.isArray(entries)) {\n      return Promise.reject(new TypeError(\"Promise.allSettled must be called with an array\"), label);\n    }\n\n    return new AllSettled(Promise, entries, label).promise;\n  }\n\n  /**\n    This is a convenient alias for `RSVP.Promise.race`.\n  \n    @method race\n    @static\n    @for RSVP\n    @param {Array} array Array of promises.\n    @param {String} label An optional label. This is useful\n    for tooling.\n   */\n  function race$1(array, label) {\n    return Promise.race(array, label);\n  }\n\n  var PromiseHash = function (_Enumerator2) {\n    (0, _emberBabel.inherits)(PromiseHash, _Enumerator2);\n\n    function PromiseHash(Constructor, object) {\n      var abortOnReject = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n      var label = arguments[3];\n      (0, _emberBabel.classCallCheck)(this, PromiseHash);\n      return (0, _emberBabel.possibleConstructorReturn)(this, _Enumerator2.call(this, Constructor, object, abortOnReject, label));\n    }\n\n    PromiseHash.prototype._init = function _init(Constructor, object) {\n      this._result = {};\n      this._enumerate(object);\n    };\n\n    PromiseHash.prototype._enumerate = function _enumerate(input) {\n      var keys = Object.keys(input);\n\n      var length = keys.length;\n      var promise = this.promise;\n      this._remaining = length;\n\n      var key = void 0,\n          val = void 0;\n      for (var i = 0; promise._state === PENDING && i < length; i++) {\n        key = keys[i];\n        val = input[key];\n        this._eachEntry(val, key, true);\n      }\n\n      this._checkFullfillment();\n    };\n\n    return PromiseHash;\n  }(Enumerator);\n\n  /**\n    `RSVP.hash` is similar to `RSVP.all`, but takes an object instead of an array\n    for its `promises` argument.\n  \n    Returns a promise that is fulfilled when all the given promises have been\n    fulfilled, or rejected if any of them become rejected. The returned promise\n    is fulfilled with a hash that has the same key names as the `promises` object\n    argument. If any of the values in the object are not promises, they will\n    simply be copied over to the fulfilled object.\n  \n    Example:\n  \n    ```javascript\n    let promises = {\n      myPromise: RSVP.resolve(1),\n      yourPromise: RSVP.resolve(2),\n      theirPromise: RSVP.resolve(3),\n      notAPromise: 4\n    };\n  \n    RSVP.hash(promises).then(function(hash){\n      // hash here is an object that looks like:\n      // {\n      //   myPromise: 1,\n      //   yourPromise: 2,\n      //   theirPromise: 3,\n      //   notAPromise: 4\n      // }\n    });\n    ````\n  \n    If any of the `promises` given to `RSVP.hash` are rejected, the first promise\n    that is rejected will be given as the reason to the rejection handler.\n  \n    Example:\n  \n    ```javascript\n    let promises = {\n      myPromise: RSVP.resolve(1),\n      rejectedPromise: RSVP.reject(new Error('rejectedPromise')),\n      anotherRejectedPromise: RSVP.reject(new Error('anotherRejectedPromise')),\n    };\n  \n    RSVP.hash(promises).then(function(hash){\n      // Code here never runs because there are rejected promises!\n    }, function(reason) {\n      // reason.message === 'rejectedPromise'\n    });\n    ```\n  \n    An important note: `RSVP.hash` is intended for plain JavaScript objects that\n    are just a set of keys and values. `RSVP.hash` will NOT preserve prototype\n    chains.\n  \n    Example:\n  \n    ```javascript\n    function MyConstructor(){\n      this.example = RSVP.resolve('Example');\n    }\n  \n    MyConstructor.prototype = {\n      protoProperty: RSVP.resolve('Proto Property')\n    };\n  \n    let myObject = new MyConstructor();\n  \n    RSVP.hash(myObject).then(function(hash){\n      // protoProperty will not be present, instead you will just have an\n      // object that looks like:\n      // {\n      //   example: 'Example'\n      // }\n      //\n      // hash.hasOwnProperty('protoProperty'); // false\n      // 'undefined' === typeof hash.protoProperty\n    });\n    ```\n  \n    @method hash\n    @static\n    @for RSVP\n    @param {Object} object\n    @param {String} label optional string that describes the promise.\n    Useful for tooling.\n    @return {Promise} promise that is fulfilled when all properties of `promises`\n    have been fulfilled, or rejected if any of them become rejected.\n  */\n  function hash(object, label) {\n    if (object === null || typeof object !== 'object') {\n      return Promise.reject(new TypeError(\"Promise.hash must be called with an object\"), label);\n    }\n\n    return new PromiseHash(Promise, object, label).promise;\n  }\n\n  var HashSettled = function (_PromiseHash) {\n    (0, _emberBabel.inherits)(HashSettled, _PromiseHash);\n\n    function HashSettled(Constructor, object, label) {\n      (0, _emberBabel.classCallCheck)(this, HashSettled);\n      return (0, _emberBabel.possibleConstructorReturn)(this, _PromiseHash.call(this, Constructor, object, false, label));\n    }\n\n    return HashSettled;\n  }(PromiseHash);\n\n  HashSettled.prototype._setResultAt = setSettledResult;\n\n  /**\n    `RSVP.hashSettled` is similar to `RSVP.allSettled`, but takes an object\n    instead of an array for its `promises` argument.\n  \n    Unlike `RSVP.all` or `RSVP.hash`, which implement a fail-fast method,\n    but like `RSVP.allSettled`, `hashSettled` waits until all the\n    constituent promises have returned and then shows you all the results\n    with their states and values/reasons. This is useful if you want to\n    handle multiple promises' failure states together as a set.\n  \n    Returns a promise that is fulfilled when all the given promises have been\n    settled, or rejected if the passed parameters are invalid.\n  \n    The returned promise is fulfilled with a hash that has the same key names as\n    the `promises` object argument. If any of the values in the object are not\n    promises, they will be copied over to the fulfilled object and marked with state\n    'fulfilled'.\n  \n    Example:\n  \n    ```javascript\n    let promises = {\n      myPromise: RSVP.Promise.resolve(1),\n      yourPromise: RSVP.Promise.resolve(2),\n      theirPromise: RSVP.Promise.resolve(3),\n      notAPromise: 4\n    };\n  \n    RSVP.hashSettled(promises).then(function(hash){\n      // hash here is an object that looks like:\n      // {\n      //   myPromise: { state: 'fulfilled', value: 1 },\n      //   yourPromise: { state: 'fulfilled', value: 2 },\n      //   theirPromise: { state: 'fulfilled', value: 3 },\n      //   notAPromise: { state: 'fulfilled', value: 4 }\n      // }\n    });\n    ```\n  \n    If any of the `promises` given to `RSVP.hash` are rejected, the state will\n    be set to 'rejected' and the reason for rejection provided.\n  \n    Example:\n  \n    ```javascript\n    let promises = {\n      myPromise: RSVP.Promise.resolve(1),\n      rejectedPromise: RSVP.Promise.reject(new Error('rejection')),\n      anotherRejectedPromise: RSVP.Promise.reject(new Error('more rejection')),\n    };\n  \n    RSVP.hashSettled(promises).then(function(hash){\n      // hash here is an object that looks like:\n      // {\n      //   myPromise:              { state: 'fulfilled', value: 1 },\n      //   rejectedPromise:        { state: 'rejected', reason: Error },\n      //   anotherRejectedPromise: { state: 'rejected', reason: Error },\n      // }\n      // Note that for rejectedPromise, reason.message == 'rejection',\n      // and for anotherRejectedPromise, reason.message == 'more rejection'.\n    });\n    ```\n  \n    An important note: `RSVP.hashSettled` is intended for plain JavaScript objects that\n    are just a set of keys and values. `RSVP.hashSettled` will NOT preserve prototype\n    chains.\n  \n    Example:\n  \n    ```javascript\n    function MyConstructor(){\n      this.example = RSVP.Promise.resolve('Example');\n    }\n  \n    MyConstructor.prototype = {\n      protoProperty: RSVP.Promise.resolve('Proto Property')\n    };\n  \n    let myObject = new MyConstructor();\n  \n    RSVP.hashSettled(myObject).then(function(hash){\n      // protoProperty will not be present, instead you will just have an\n      // object that looks like:\n      // {\n      //   example: { state: 'fulfilled', value: 'Example' }\n      // }\n      //\n      // hash.hasOwnProperty('protoProperty'); // false\n      // 'undefined' === typeof hash.protoProperty\n    });\n    ```\n  \n    @method hashSettled\n    @for RSVP\n    @param {Object} object\n    @param {String} label optional string that describes the promise.\n    Useful for tooling.\n    @return {Promise} promise that is fulfilled when when all properties of `promises`\n    have been settled.\n    @static\n  */\n\n  function hashSettled(object, label) {\n    if (object === null || typeof object !== 'object') {\n      return Promise.reject(new TypeError(\"RSVP.hashSettled must be called with an object\"), label);\n    }\n\n    return new HashSettled(Promise, object, false, label).promise;\n  }\n\n  /**\n    `RSVP.rethrow` will rethrow an error on the next turn of the JavaScript event\n    loop in order to aid debugging.\n  \n    Promises A+ specifies that any exceptions that occur with a promise must be\n    caught by the promises implementation and bubbled to the last handler. For\n    this reason, it is recommended that you always specify a second rejection\n    handler function to `then`. However, `RSVP.rethrow` will throw the exception\n    outside of the promise, so it bubbles up to your console if in the browser,\n    or domain/cause uncaught exception in Node. `rethrow` will also throw the\n    error again so the error can be handled by the promise per the spec.\n  \n    ```javascript\n    function throws(){\n      throw new Error('Whoops!');\n    }\n  \n    let promise = new RSVP.Promise(function(resolve, reject){\n      throws();\n    });\n  \n    promise.catch(RSVP.rethrow).then(function(){\n      // Code here doesn't run because the promise became rejected due to an\n      // error!\n    }, function (err){\n      // handle the error here\n    });\n    ```\n  \n    The 'Whoops' error will be thrown on the next turn of the event loop\n    and you can watch for it in your console. You can also handle it using a\n    rejection handler given to `.then` or `.catch` on the returned promise.\n  \n    @method rethrow\n    @static\n    @for RSVP\n    @param {Error} reason reason the promise became rejected.\n    @throws Error\n    @static\n  */\n  function rethrow(reason) {\n    setTimeout(function () {\n      throw reason;\n    });\n    throw reason;\n  }\n\n  /**\n    `RSVP.defer` returns an object similar to jQuery's `$.Deferred`.\n    `RSVP.defer` should be used when porting over code reliant on `$.Deferred`'s\n    interface. New code should use the `RSVP.Promise` constructor instead.\n  \n    The object returned from `RSVP.defer` is a plain object with three properties:\n  \n    * promise - an `RSVP.Promise`.\n    * reject - a function that causes the `promise` property on this object to\n      become rejected\n    * resolve - a function that causes the `promise` property on this object to\n      become fulfilled.\n  \n    Example:\n  \n     ```javascript\n     let deferred = RSVP.defer();\n  \n     deferred.resolve(\"Success!\");\n  \n     deferred.promise.then(function(value){\n       // value here is \"Success!\"\n     });\n     ```\n  \n    @method defer\n    @static\n    @for RSVP\n    @param {String} label optional string for labeling the promise.\n    Useful for tooling.\n    @return {Object}\n   */\n\n  function defer(label) {\n    var deferred = { resolve: undefined, reject: undefined };\n\n    deferred.promise = new Promise(function (resolve, reject) {\n      deferred.resolve = resolve;\n      deferred.reject = reject;\n    }, label);\n\n    return deferred;\n  }\n\n  var MapEnumerator = function (_Enumerator3) {\n    (0, _emberBabel.inherits)(MapEnumerator, _Enumerator3);\n\n    function MapEnumerator(Constructor, entries, mapFn, label) {\n      (0, _emberBabel.classCallCheck)(this, MapEnumerator);\n      return (0, _emberBabel.possibleConstructorReturn)(this, _Enumerator3.call(this, Constructor, entries, true, label, mapFn));\n    }\n\n    MapEnumerator.prototype._init = function _init(Constructor, input, bool, label, mapFn) {\n      var len = input.length || 0;\n      this.length = len;\n      this._remaining = len;\n      this._result = new Array(len);\n      this._mapFn = mapFn;\n\n      this._enumerate(input);\n    };\n\n    MapEnumerator.prototype._setResultAt = function _setResultAt(state, i, value, firstPass) {\n      if (firstPass) {\n        var val = tryCatch(this._mapFn)(value, i);\n        if (val === TRY_CATCH_ERROR) {\n          this._settledAt(REJECTED, i, val.error, false);\n        } else {\n          this._eachEntry(val, i, false);\n        }\n      } else {\n        this._remaining--;\n        this._result[i] = value;\n      }\n    };\n\n    return MapEnumerator;\n  }(Enumerator);\n\n  /**\n   `RSVP.map` is similar to JavaScript's native `map` method. `mapFn` is eagerly called\n    meaning that as soon as any promise resolves its value will be passed to `mapFn`.\n    `RSVP.map` returns a promise that will become fulfilled with the result of running\n    `mapFn` on the values the promises become fulfilled with.\n  \n    For example:\n  \n    ```javascript\n  \n    let promise1 = RSVP.resolve(1);\n    let promise2 = RSVP.resolve(2);\n    let promise3 = RSVP.resolve(3);\n    let promises = [ promise1, promise2, promise3 ];\n  \n    let mapFn = function(item){\n      return item + 1;\n    };\n  \n    RSVP.map(promises, mapFn).then(function(result){\n      // result is [ 2, 3, 4 ]\n    });\n    ```\n  \n    If any of the `promises` given to `RSVP.map` are rejected, the first promise\n    that is rejected will be given as an argument to the returned promise's\n    rejection handler. For example:\n  \n    ```javascript\n    let promise1 = RSVP.resolve(1);\n    let promise2 = RSVP.reject(new Error('2'));\n    let promise3 = RSVP.reject(new Error('3'));\n    let promises = [ promise1, promise2, promise3 ];\n  \n    let mapFn = function(item){\n      return item + 1;\n    };\n  \n    RSVP.map(promises, mapFn).then(function(array){\n      // Code here never runs because there are rejected promises!\n    }, function(reason) {\n      // reason.message === '2'\n    });\n    ```\n  \n    `RSVP.map` will also wait if a promise is returned from `mapFn`. For example,\n    say you want to get all comments from a set of blog posts, but you need\n    the blog posts first because they contain a url to those comments.\n  \n    ```javscript\n  \n    let mapFn = function(blogPost){\n      // getComments does some ajax and returns an RSVP.Promise that is fulfilled\n      // with some comments data\n      return getComments(blogPost.comments_url);\n    };\n  \n    // getBlogPosts does some ajax and returns an RSVP.Promise that is fulfilled\n    // with some blog post data\n    RSVP.map(getBlogPosts(), mapFn).then(function(comments){\n      // comments is the result of asking the server for the comments\n      // of all blog posts returned from getBlogPosts()\n    });\n    ```\n  \n    @method map\n    @static\n    @for RSVP\n    @param {Array} promises\n    @param {Function} mapFn function to be called on each fulfilled promise.\n    @param {String} label optional string for labeling the promise.\n    Useful for tooling.\n    @return {Promise} promise that is fulfilled with the result of calling\n    `mapFn` on each fulfilled promise or value when they become fulfilled.\n     The promise will be rejected if any of the given `promises` become rejected.\n    @static\n  */\n  function map(promises, mapFn, label) {\n    if (!Array.isArray(promises)) {\n      return Promise.reject(new TypeError(\"RSVP.map must be called with an array\"), label);\n    }\n\n    if (typeof mapFn !== 'function') {\n      return Promise.reject(new TypeError(\"RSVP.map expects a function as a second argument\"), label);\n    }\n\n    return new MapEnumerator(Promise, promises, mapFn, label).promise;\n  }\n\n  /**\n    This is a convenient alias for `RSVP.Promise.resolve`.\n  \n    @method resolve\n    @static\n    @for RSVP\n    @param {*} value value that the returned promise will be resolved with\n    @param {String} label optional string for identifying the returned promise.\n    Useful for tooling.\n    @return {Promise} a promise that will become fulfilled with the given\n    `value`\n  */\n  function resolve$2(value, label) {\n    return Promise.resolve(value, label);\n  }\n\n  /**\n    This is a convenient alias for `RSVP.Promise.reject`.\n  \n    @method reject\n    @static\n    @for RSVP\n    @param {*} reason value that the returned promise will be rejected with.\n    @param {String} label optional string for identifying the returned promise.\n    Useful for tooling.\n    @return {Promise} a promise rejected with the given `reason`.\n  */\n  function reject$2(reason, label) {\n    return Promise.reject(reason, label);\n  }\n\n  var EMPTY_OBJECT = {};\n\n  var FilterEnumerator = function (_MapEnumerator) {\n    (0, _emberBabel.inherits)(FilterEnumerator, _MapEnumerator);\n\n    function FilterEnumerator() {\n      (0, _emberBabel.classCallCheck)(this, FilterEnumerator);\n      return (0, _emberBabel.possibleConstructorReturn)(this, _MapEnumerator.apply(this, arguments));\n    }\n\n    FilterEnumerator.prototype._checkFullfillment = function _checkFullfillment() {\n      if (this._remaining === 0 && this._result !== null) {\n        var result = this._result.filter(function (val) {\n          return val !== EMPTY_OBJECT;\n        });\n        fulfill(this.promise, result);\n        this._result = null;\n      }\n    };\n\n    FilterEnumerator.prototype._setResultAt = function _setResultAt(state, i, value, firstPass) {\n      if (firstPass) {\n        this._result[i] = value;\n        var val = tryCatch(this._mapFn)(value, i);\n        if (val === TRY_CATCH_ERROR) {\n          this._settledAt(REJECTED, i, val.error, false);\n        } else {\n          this._eachEntry(val, i, false);\n        }\n      } else {\n        this._remaining--;\n        if (!value) {\n          this._result[i] = EMPTY_OBJECT;\n        }\n      }\n    };\n\n    return FilterEnumerator;\n  }(MapEnumerator);\n\n  /**\n   `RSVP.filter` is similar to JavaScript's native `filter` method.\n   `filterFn` is eagerly called meaning that as soon as any promise\n    resolves its value will be passed to `filterFn`. `RSVP.filter` returns\n    a promise that will become fulfilled with the result of running\n    `filterFn` on the values the promises become fulfilled with.\n  \n    For example:\n  \n    ```javascript\n  \n    let promise1 = RSVP.resolve(1);\n    let promise2 = RSVP.resolve(2);\n    let promise3 = RSVP.resolve(3);\n  \n    let promises = [promise1, promise2, promise3];\n  \n    let filterFn = function(item){\n      return item > 1;\n    };\n  \n    RSVP.filter(promises, filterFn).then(function(result){\n      // result is [ 2, 3 ]\n    });\n    ```\n  \n    If any of the `promises` given to `RSVP.filter` are rejected, the first promise\n    that is rejected will be given as an argument to the returned promise's\n    rejection handler. For example:\n  \n    ```javascript\n    let promise1 = RSVP.resolve(1);\n    let promise2 = RSVP.reject(new Error('2'));\n    let promise3 = RSVP.reject(new Error('3'));\n    let promises = [ promise1, promise2, promise3 ];\n  \n    let filterFn = function(item){\n      return item > 1;\n    };\n  \n    RSVP.filter(promises, filterFn).then(function(array){\n      // Code here never runs because there are rejected promises!\n    }, function(reason) {\n      // reason.message === '2'\n    });\n    ```\n  \n    `RSVP.filter` will also wait for any promises returned from `filterFn`.\n    For instance, you may want to fetch a list of users then return a subset\n    of those users based on some asynchronous operation:\n  \n    ```javascript\n  \n    let alice = { name: 'alice' };\n    let bob   = { name: 'bob' };\n    let users = [ alice, bob ];\n  \n    let promises = users.map(function(user){\n      return RSVP.resolve(user);\n    });\n  \n    let filterFn = function(user){\n      // Here, Alice has permissions to create a blog post, but Bob does not.\n      return getPrivilegesForUser(user).then(function(privs){\n        return privs.can_create_blog_post === true;\n      });\n    };\n    RSVP.filter(promises, filterFn).then(function(users){\n      // true, because the server told us only Alice can create a blog post.\n      users.length === 1;\n      // false, because Alice is the only user present in `users`\n      users[0] === bob;\n    });\n    ```\n  \n    @method filter\n    @static\n    @for RSVP\n    @param {Array} promises\n    @param {Function} filterFn - function to be called on each resolved value to\n    filter the final results.\n    @param {String} label optional string describing the promise. Useful for\n    tooling.\n    @return {Promise}\n  */\n\n  function filter(promises, filterFn, label) {\n    if (typeof filterFn !== 'function') {\n      return Promise.reject(new TypeError(\"RSVP.filter expects function as a second argument\"), label);\n    }\n\n    return Promise.resolve(promises, label).then(function (promises) {\n      if (!Array.isArray(promises)) {\n        throw new TypeError(\"RSVP.filter must be called with an array\");\n      }\n      return new FilterEnumerator(Promise, promises, filterFn, label).promise;\n    });\n  }\n\n  var len = 0;\n  var vertxNext = void 0;\n  function asap(callback, arg) {\n    queue$1[len] = callback;\n    queue$1[len + 1] = arg;\n    len += 2;\n    if (len === 2) {\n      // If len is 1, that means that we need to schedule an async flush.\n      // If additional callbacks are queued before the queue is flushed, they\n      // will be processed by this flush that we are scheduling.\n      scheduleFlush$1();\n    }\n  }\n\n  var browserWindow = typeof window !== 'undefined' ? window : undefined;\n  var browserGlobal = browserWindow || {};\n  var BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\n  var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n  // test for web worker but not in IE10\n  var isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n  // node\n  function useNextTick() {\n    var nextTick = process.nextTick;\n    // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n    // setImmediate should be used instead instead\n    var version = process.versions.node.match(/^(?:(\\d+)\\.)?(?:(\\d+)\\.)?(\\*|\\d+)$/);\n    if (Array.isArray(version) && version[1] === '0' && version[2] === '10') {\n      nextTick = setImmediate;\n    }\n    return function () {\n      return nextTick(flush);\n    };\n  }\n\n  // vertx\n  function useVertxTimer() {\n    if (typeof vertxNext !== 'undefined') {\n      return function () {\n        vertxNext(flush);\n      };\n    }\n    return useSetTimeout();\n  }\n\n  function useMutationObserver() {\n    var iterations = 0;\n    var observer = new BrowserMutationObserver(flush);\n    var node = document.createTextNode('');\n    observer.observe(node, { characterData: true });\n\n    return function () {\n      return node.data = iterations = ++iterations % 2;\n    };\n  }\n\n  // web worker\n  function useMessageChannel() {\n    var channel = new MessageChannel();\n    channel.port1.onmessage = flush;\n    return function () {\n      return channel.port2.postMessage(0);\n    };\n  }\n\n  function useSetTimeout() {\n    return function () {\n      return setTimeout(flush, 1);\n    };\n  }\n\n  var queue$1 = new Array(1000);\n\n  function flush() {\n    for (var i = 0; i < len; i += 2) {\n      var callback = queue$1[i];\n      var arg = queue$1[i + 1];\n\n      callback(arg);\n\n      queue$1[i] = undefined;\n      queue$1[i + 1] = undefined;\n    }\n\n    len = 0;\n  }\n\n  function attemptVertex() {\n    try {\n      var vertx = Function('return this')().require('vertx');\n      vertxNext = vertx.runOnLoop || vertx.runOnContext;\n      return useVertxTimer();\n    } catch (e) {\n      return useSetTimeout();\n    }\n  }\n\n  var scheduleFlush$1 = void 0;\n  // Decide what async method to use to triggering processing of queued callbacks:\n  if (isNode) {\n    scheduleFlush$1 = useNextTick();\n  } else if (BrowserMutationObserver) {\n    scheduleFlush$1 = useMutationObserver();\n  } else if (isWorker) {\n    scheduleFlush$1 = useMessageChannel();\n  } else if (browserWindow === undefined && typeof _nodeModule.require === 'function') {\n    scheduleFlush$1 = attemptVertex();\n  } else {\n    scheduleFlush$1 = useSetTimeout();\n  }\n\n  // defaults\n  config.async = asap;\n  config.after = function (cb) {\n    return setTimeout(cb, 0);\n  };\n  var cast = resolve$2;\n\n  var async = function (callback, arg) {\n    return config.async(callback, arg);\n  };\n\n  function on() {\n    config.on.apply(config, arguments);\n  }\n\n  function off() {\n    config.off.apply(config, arguments);\n  }\n\n  // Set up instrumentation through `window.__PROMISE_INTRUMENTATION__`\n  if (typeof window !== 'undefined' && typeof window['__PROMISE_INSTRUMENTATION__'] === 'object') {\n    var callbacks = window['__PROMISE_INSTRUMENTATION__'];\n    configure('instrument', true);\n    for (var eventName in callbacks) {\n      if (callbacks.hasOwnProperty(eventName)) {\n        on(eventName, callbacks[eventName]);\n      }\n    }\n  }\n\n  // the default export here is for backwards compat:\n  //   https://github.com/tildeio/rsvp.js/issues/434\n  var rsvp = {\n    asap: asap,\n    cast: cast,\n    Promise: Promise,\n    EventTarget: EventTarget,\n    all: all$1,\n    allSettled: allSettled,\n    race: race$1,\n    hash: hash,\n    hashSettled: hashSettled,\n    rethrow: rethrow,\n    defer: defer,\n    denodeify: denodeify,\n    configure: configure,\n    on: on,\n    off: off,\n    resolve: resolve$2,\n    reject: reject$2,\n    map: map,\n    async: async,\n    filter: filter\n  };\n\n  exports.asap = asap;\n  exports.cast = cast;\n  exports.Promise = Promise;\n  exports.EventTarget = EventTarget;\n  exports.all = all$1;\n  exports.allSettled = allSettled;\n  exports.race = race$1;\n  exports.hash = hash;\n  exports.hashSettled = hashSettled;\n  exports.rethrow = rethrow;\n  exports.defer = defer;\n  exports.denodeify = denodeify;\n  exports.configure = configure;\n  exports.on = on;\n  exports.off = off;\n  exports.resolve = resolve$2;\n  exports.reject = reject$2;\n  exports.map = map;\n  exports.async = async;\n  exports.filter = filter;\n  exports.default = rsvp;\n});","requireModule('ember')","(function() {\n  define('ember-cli-shims/deprecations', [], function() {\n    var values = {\"ember-application\":{\"default\":[\"@ember/application\"]},\"ember-array\":{\"default\":[\"@ember/array\"]},\"ember-array/mutable\":{\"default\":[\"@ember/array/mutable\"]},\"ember-array/utils\":{\"A\":[\"@ember/array\",\"A\"],\"isEmberArray\":[\"@ember/array\",\"isArray\"],\"wrap\":[\"@ember/array\",\"makeArray\"]},\"ember-component\":{\"default\":[\"@ember/component\"]},\"ember-components/checkbox\":{\"default\":[\"@ember/component/checkbox\"]},\"ember-components/text-area\":{\"default\":[\"@ember/component/text-area\"]},\"ember-components/text-field\":{\"default\":[\"@ember/component/text-field\"]},\"ember-computed\":{\"default\":[\"@ember/object\",\"computed\"],\"alias\":[\"@ember/object/computed\",\"alias\"],\"and\":[\"@ember/object/computed\",\"and\"],\"bool\":[\"@ember/object/computed\",\"bool\"],\"collect\":[\"@ember/object/computed\",\"collect\"],\"deprecatingAlias\":[\"@ember/object/computed\",\"deprecatingAlias\"],\"empty\":[\"@ember/object/computed\",\"empty\"],\"equal\":[\"@ember/object/computed\",\"equal\"],\"filter\":[\"@ember/object/computed\",\"filter\"],\"filterBy\":[\"@ember/object/computed\",\"filterBy\"],\"filterProperty\":[\"@ember/object/computed\",\"filterProperty\"],\"gt\":[\"@ember/object/computed\",\"gt\"],\"gte\":[\"@ember/object/computed\",\"gte\"],\"intersect\":[\"@ember/object/computed\",\"intersect\"],\"lt\":[\"@ember/object/computed\",\"lt\"],\"lte\":[\"@ember/object/computed\",\"lte\"],\"map\":[\"@ember/object/computed\",\"map\"],\"mapBy\":[\"@ember/object/computed\",\"mapBy\"],\"mapProperty\":[\"@ember/object/computed\",\"mapProperty\"],\"match\":[\"@ember/object/computed\",\"match\"],\"max\":[\"@ember/object/computed\",\"max\"],\"min\":[\"@ember/object/computed\",\"min\"],\"none\":[\"@ember/object/computed\",\"none\"],\"not\":[\"@ember/object/computed\",\"not\"],\"notEmpty\":[\"@ember/object/computed\",\"notEmpty\"],\"oneWay\":[\"@ember/object/computed\",\"oneWay\"],\"or\":[\"@ember/object/computed\",\"or\"],\"readOnly\":[\"@ember/object/computed\",\"readOnly\"],\"reads\":[\"@ember/object/computed\",\"reads\"],\"setDiff\":[\"@ember/object/computed\",\"setDiff\"],\"sort\":[\"@ember/object/computed\",\"sort\"],\"sum\":[\"@ember/object/computed\",\"sum\"],\"union\":[\"@ember/object/computed\",\"union\"],\"uniq\":[\"@ember/object/computed\",\"uniq\"]},\"ember-controller\":{\"default\":[\"@ember/controller\"]},\"ember-controller/inject\":{\"default\":[\"@ember/controller\",\"inject\"]},\"ember-controller/proxy\":{\"default\":[\"@ember/array/proxy\"]},\"ember-debug\":{\"inspect\":[\"@ember/debug\",\"inspect\"],\"log\":[\"@ember/debug\",\"debug\"],\"run\":[\"@ember/debug\",\"runInDebug\"],\"warn\":[\"@ember/debug\",\"warn\"]},\"ember-debug/container-debug-adapter\":{\"default\":[\"@ember/debug/container-debug-adapter\"]},\"ember-debug/data-adapter\":{\"default\":[\"@ember/debug/data-adapter\"]},\"ember-deprecations\":{\"deprecate\":[\"@ember/application/deprecations\",\"deprecate\"],\"deprecateFunc\":[\"@ember/application/deprecations\",\"deprecateFunc\"]},\"ember-enumerable\":{\"default\":[\"@ember/enumerable\"]},\"ember-evented\":{\"default\":[\"@ember/object/evented\"]},\"ember-evented/on\":{\"default\":[\"@ember/object/evented\",\"on\"]},\"ember-globals-resolver\":{\"default\":[\"@ember/application/globals-resolver\"]},\"ember-helper\":{\"default\":[\"@ember/component/helper\"],\"helper\":[\"@ember/component/helper\",\"helper\"]},\"ember-instrumentation\":{\"instrument\":[\"@ember/instrumentation\",\"instrument\"],\"reset\":[\"@ember/instrumentation\",\"reset\"],\"subscribe\":[\"@ember/instrumentation\",\"subscribe\"],\"unsubscribe\":[\"@ember/instrumentation\",\"unsubscribe\"]},\"ember-locations/hash\":{\"default\":[\"@ember/routing/hash-location\"]},\"ember-locations/history\":{\"default\":[\"@ember/routing/history-location\"]},\"ember-locations/none\":{\"default\":[\"@ember/routing/none-location\"]},\"ember-map\":{\"default\":[\"@ember/map\"],\"withDefault\":[\"@ember/map/with-default\"]},\"ember-metal/events\":{\"addListener\":[\"@ember/object/events\",\"addListener\"],\"removeListener\":[\"@ember/object/events\",\"removeListener\"],\"send\":[\"@ember/object/events\",\"sendEvent\"]},\"ember-metal/get\":{\"default\":[\"@ember/object\",\"get\"],\"getProperties\":[\"@ember/object\",\"getProperties\"]},\"ember-metal/mixin\":{\"default\":[\"@ember/object/mixin\"]},\"ember-metal/observer\":{\"default\":[\"@ember/object\",\"observer\"],\"addObserver\":[\"@ember/object/observers\",\"addObserver\"],\"removeObserver\":[\"@ember/object/observers\",\"removeObserver\"]},\"ember-metal/on-load\":{\"default\":[\"@ember/application\",\"onLoad\"],\"run\":[\"@ember/application\",\"runLoadHooks\"]},\"ember-metal/set\":{\"default\":[\"@ember/object\",\"set\"],\"setProperties\":[\"@ember/object\",\"setProperties\"],\"trySet\":[\"@ember/object\",\"trySet\"]},\"ember-metal/utils\":{\"aliasMethod\":[\"@ember/object\",\"aliasMethod\"],\"assert\":[\"@ember/debug\",\"assert\"],\"cacheFor\":[\"@ember/object/internals\",\"cacheFor\"],\"copy\":[\"@ember/object/internals\",\"copy\"],\"guidFor\":[\"@ember/object/internals\",\"guidFor\"]},\"ember-object\":{\"default\":[\"@ember/object\"]},\"ember-owner/get\":{\"default\":[\"@ember/application\",\"getOwner\"]},\"ember-owner/set\":{\"default\":[\"@ember/application\",\"setOwner\"]},\"ember-platform\":{\"assign\":[\"@ember/polyfills\",\"assign\"],\"create\":[\"@ember/polyfills\",\"create\"],\"hasAccessors\":[\"@ember/polyfills\",\"hasPropertyAccessors\"],\"keys\":[\"@ember/polyfills\",\"keys\"]},\"ember-route\":{\"default\":[\"@ember/routing/route\"]},\"ember-router\":{\"default\":[\"@ember/routing/router\"]},\"ember-runloop\":{\"default\":[\"@ember/runloop\",\"run\"],\"begin\":[\"@ember/runloop\",\"begin\"],\"bind\":[\"@ember/runloop\",\"bind\"],\"cancel\":[\"@ember/runloop\",\"cancel\"],\"debounce\":[\"@ember/runloop\",\"debounce\"],\"end\":[\"@ember/runloop\",\"end\"],\"join\":[\"@ember/runloop\",\"join\"],\"later\":[\"@ember/runloop\",\"later\"],\"next\":[\"@ember/runloop\",\"next\"],\"once\":[\"@ember/runloop\",\"once\"],\"schedule\":[\"@ember/runloop\",\"schedule\"],\"scheduleOnce\":[\"@ember/runloop\",\"scheduleOnce\"],\"throttle\":[\"@ember/runloop\",\"throttle\"]},\"ember-service\":{\"default\":[\"@ember/service\"]},\"ember-service/inject\":{\"default\":[\"@ember/service\",\"inject\"]},\"ember-string\":{\"camelize\":[\"@ember/string\",\"camelize\"],\"capitalize\":[\"@ember/string\",\"capitalize\"],\"classify\":[\"@ember/string\",\"classify\"],\"dasherize\":[\"@ember/string\",\"dasherize\"],\"decamelize\":[\"@ember/string\",\"decamelize\"],\"fmt\":[\"@ember/string\",\"fmt\"],\"htmlSafe\":[\"@ember/string\",\"htmlSafe\"],\"loc\":[\"@ember/string\",\"loc\"],\"underscore\":[\"@ember/string\",\"underscore\"],\"w\":[\"@ember/string\",\"w\"]},\"ember-test/adapter\":{\"default\":[\"@ember/test/adapter\"]},\"ember-utils\":{\"isBlank\":[\"@ember/utils\",\"isBlank\"],\"isEmpty\":[\"@ember/utils\",\"isEmpty\"],\"isNone\":[\"@ember/utils\",\"isNone\"],\"isPresent\":[\"@ember/utils\",\"isPresent\"],\"tryInvoke\":[\"@ember/utils\",\"tryInvoke\"],\"typeOf\":[\"@ember/utils\",\"typeOf\"]}};\n    \n    Object.defineProperty(values, '__esModule', {\n      value: true\n    });\n\n    return values;\n  });\n})();","(function() {\n/* globals define, Ember, jQuery */\n\n  function processEmberShims() {\n    var shims = {\n      'ember-application': {\n        'default': Ember.Application\n      },\n      'ember-array': {\n        'default': Ember.Array\n      },\n      'ember-array/mutable': {\n        'default': Ember.MutableArray\n      },\n      'ember-array/utils': {\n        'A':            Ember.A,\n        'isEmberArray': Ember.isArray,\n        'wrap':         Ember.makeArray\n      },\n      'ember-component': {\n        'default': Ember.Component\n      },\n      'ember-components/checkbox': {\n        'default': Ember.Checkbox\n      },\n      'ember-components/text-area': {\n        'default': Ember.TextArea\n      },\n      'ember-components/text-field': {\n        'default': Ember.TextField\n      },\n      'ember-controller': {\n        'default': Ember.Controller\n      },\n      'ember-controller/inject': {\n        'default': Ember.inject.controller\n      },\n      'ember-controller/proxy': {\n        'default': Ember.ArrayProxy\n      },\n      'ember-controllers/sortable': {\n        'default': Ember.SortableMixin\n      },\n      'ember-debug': {\n        'log':      Ember.debug,\n        'inspect':  Ember.inspect,\n        'run':      Ember.runInDebug,\n        'warn':     Ember.warn\n      },\n      'ember-debug/container-debug-adapter': {\n        'default': Ember.ContainerDebugAdapter\n      },\n      'ember-debug/data-adapter': {\n        'default': Ember.DataAdapter\n      },\n      'ember-deprecations': {\n        'deprecate':      Ember.deprecate,\n        'deprecateFunc':  Ember.deprecateFunc\n      },\n      'ember-enumerable': {\n        'default': Ember.Enumerable\n      },\n      'ember-evented': {\n        'default': Ember.Evented\n      },\n      'ember-evented/on': {\n        'default': Ember.on\n      },\n      'ember-globals-resolver': {\n        'default': Ember.DefaultResolver\n      },\n      'ember-helper': {\n        'default':  Ember.Helper,\n        'helper':   Ember.Helper && Ember.Helper.helper\n      },\n      'ember-instrumentation': {\n        'instrument':   Ember.Instrumentation.instrument,\n        'reset':        Ember.Instrumentation.reset,\n        'subscribe':    Ember.Instrumentation.subscribe,\n        'unsubscribe':  Ember.Instrumentation.unsubscribe\n      },\n      'ember-locations/hash': {\n        'default': Ember.HashLocation\n      },\n      'ember-locations/history': {\n        'default': Ember.HistoryLocation\n      },\n      'ember-locations/none': {\n        'default': Ember.NoneLocation\n      },\n      'ember-map': {\n        'default':      Ember.Map,\n        'withDefault':  Ember.MapWithDefault\n      },\n      'ember-metal/destroy': {\n        'default': Ember.destroy\n      },\n      'ember-metal/events': {\n        'addListener':    Ember.addListener,\n        'removeListener': Ember.removeListener,\n        'send':           Ember.sendEvent\n      },\n      'ember-metal/get': {\n        'default': Ember.get,\n        'getProperties': Ember.getProperties\n      },\n      'ember-metal/mixin': {\n        'default': Ember.Mixin\n      },\n      'ember-metal/observer': {\n        'default':        Ember.observer,\n        'addObserver':    Ember.addObserver,\n        'removeObserver': Ember.removeObserver\n      },\n      'ember-metal/on-load': {\n        'default':  Ember.onLoad,\n        'run':      Ember.runLoadHooks\n      },\n      'ember-metal/set': {\n        'default':        Ember.set,\n        'setProperties':  Ember.setProperties,\n        'trySet':         Ember.trySet\n      },\n      'ember-metal/utils': {\n        'aliasMethod':  Ember.aliasMethod,\n        'assert':       Ember.assert,\n        'cacheFor':     Ember.cacheFor,\n        'copy':         Ember.copy,\n        'guidFor':      Ember.guidFor\n      },\n      'ember-object': {\n        'default': Ember.Object\n      },\n      'ember-owner/get': {\n        'default': Ember.getOwner\n      },\n      'ember-owner/set': {\n        'default': Ember.setOwner\n      },\n      'ember-platform': {\n        'assign':         Ember.assign || Ember.merge,\n        'create':         Ember.create,\n        'defineProperty': Ember.platform.defineProperty,\n        'hasAccessors':   Ember.platform.hasPropertyAccessors,\n        'keys':           Ember.keys\n      },\n      'ember-route': {\n        'default': Ember.Route\n      },\n      'ember-router': {\n        'default': Ember.Router\n      },\n      'ember-runloop': {\n        'default':      Ember.run,\n        'begin':        Ember.run.begin,\n        'bind':         Ember.run.bind,\n        'cancel':       Ember.run.cancel,\n        'debounce':     Ember.run.debounce,\n        'end':          Ember.run.end,\n        'join':         Ember.run.join,\n        'later':        Ember.run.later,\n        'next':         Ember.run.next,\n        'once':         Ember.run.once,\n        'schedule':     Ember.run.schedule,\n        'scheduleOnce': Ember.run.scheduleOnce,\n        'throttle':     Ember.run.throttle\n      },\n      'ember-service': {\n        'default': Ember.Service\n      },\n      'ember-service/inject': {\n        'default': Ember.inject.service\n      },\n      'ember-set/ordered': {\n        'default': Ember.OrderedSet\n      },\n      'ember-string': {\n        'camelize':     Ember.String.camelize,\n        'capitalize':   Ember.String.capitalize,\n        'classify':     Ember.String.classify,\n        'dasherize':    Ember.String.dasherize,\n        'decamelize':   Ember.String.decamelize,\n        'fmt':          Ember.String.fmt,\n        'htmlSafe':     Ember.String.htmlSafe,\n        'loc':          Ember.String.loc,\n        'underscore':   Ember.String.underscore,\n        'w':            Ember.String.w\n      },\n      'ember-utils': {\n        'isBlank':    Ember.isBlank,\n        'isEmpty':    Ember.isEmpty,\n        'isNone':     Ember.isNone,\n        'isPresent':  Ember.isPresent,\n        'tryInvoke':  Ember.tryInvoke,\n        'typeOf':     Ember.typeOf\n      }\n    };\n\n    // populate `ember/computed` named exports\n    shims['ember-computed'] = {\n      'default': Ember.computed\n    };\n    var computedMacros = [\n      \"empty\",\"notEmpty\", \"none\", \"not\", \"bool\", \"match\",\n      \"equal\", \"gt\", \"gte\", \"lt\", \"lte\", \"alias\", \"oneWay\",\n      \"reads\", \"readOnly\", \"deprecatingAlias\",\n      \"and\", \"or\", \"collect\", \"sum\", \"min\", \"max\",\n      \"map\", \"sort\", \"setDiff\", \"mapBy\", \"mapProperty\",\n      \"filter\", \"filterBy\", \"filterProperty\", \"uniq\",\n      \"union\", \"intersect\"\n    ];\n    for (var i = 0, l = computedMacros.length; i < l; i++) {\n      var key = computedMacros[i];\n      shims['ember-computed'][key] = Ember.computed[key];\n    }\n\n    for (var moduleName in shims) {\n      generateModule(moduleName, shims[moduleName], true);\n    }\n  }\n\n  function processTestShims() {\n    if (Ember.Test) {\n      var testShims = {\n        'ember-test': {\n          'default': Ember.Test\n        },\n        'ember-test/adapter': {\n          'default': Ember.Test.Adapter\n        },\n        'ember-test/qunit-adapter': {\n          'default': Ember.Test.QUnitAdapter\n        }\n      };\n\n      for (var moduleName in testShims) {\n        generateModule(moduleName, testShims[moduleName]);\n      }\n    }\n  }\n\n  function generateModule(name, values, deprecated) {\n    define(name, ['ember-cli-shims/deprecations'], function(deprecations) {\n      'use strict';\n\n      if (deprecated) {\n        var moduleDeprecations = deprecations[name];\n\n        var message = 'Importing from the `' + name + '` module has been deprecated. ';\n        if (moduleDeprecations) {\n          message += 'Please use the new module imports:\\n\\n';\n          Object.keys(moduleDeprecations).forEach(function(key) {\n            var newImport = moduleDeprecations[key];\n            if (newImport[1]) {\n              message += 'import { ' + newImport[1] + ' } from \\'' + newImport[0] + '\\'\\n';\n            } else {\n              var importName = Ember.String.classify(newImport[0].split('/').pop());\n              message += 'import ' + importName + ' from \\'' + newImport[0] + '\\'\\n';\n            }\n          });\n          message += '\\n';\n\n        } else {\n          message += 'Please use globals instead.';\n        }\n\n        Ember.deprecate(message, false, {\n          id: 'ember-cli-shims.deprecated-shims',\n          until: '3.0.0',\n          url: 'https://github.com/emberjs/rfcs/blob/master/text/0176-javascript-module-api.md'\n        });\n      }\n\n      Object.defineProperty(values, '__esModule', {\n        value: true\n      });\n\n      return values;\n    });\n  }\n\n  generateModule('ember', { default: Ember });\n  processEmberShims();\n  processTestShims();\n  generateModule('jquery', { 'default': self.jQuery });\n  generateModule('rsvp', { 'default': Ember.RSVP });\n})();\n","/* globals define */\n\nfunction createDeprecatedModule(moduleId) {\n  define(moduleId, ['exports', 'ember-resolver/resolver', 'ember'], function(exports, Resolver, Ember) {\n    Ember['default'].deprecate(\n      'Usage of `' + moduleId + '` module is deprecated, please update to `ember-resolver`.',\n      false,\n      { id: 'ember-resolver.legacy-shims', until: '3.0.0' }\n    );\n\n    exports['default'] = Resolver['default'];\n  });\n}\n\ncreateDeprecatedModule('ember/resolver');\ncreateDeprecatedModule('resolver');\n","/**\n * @license\n * Lodash (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE\n * Build: `lodash core -o ./dist/lodash.core.js`\n */\n;(function(){function n(n){return K(n)&&pn.call(n,\"callee\")&&!bn.call(n,\"callee\")}function t(n,t){return n.push.apply(n,t),n}function r(n){return function(t){return null==t?nn:t[n]}}function e(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function u(n,t){return d(t,function(t){return n[t]})}function o(n){return n instanceof i?n:new i(n)}function i(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t}function c(n,t,r,e){return n===nn||M(n,ln[r])&&!pn.call(e,r)?t:n}function f(n,t,r){\nif(typeof n!=\"function\")throw new TypeError(\"Expected a function\");return setTimeout(function(){n.apply(nn,r)},t)}function a(n,t){var r=true;return mn(n,function(n,e,u){return r=!!t(n,e,u)}),r}function l(n,t,r){for(var e=-1,u=n.length;++e<u;){var o=n[e],i=t(o);if(null!=i&&(c===nn?i===i:r(i,c)))var c=i,f=o}return f}function p(n,t){var r=[];return mn(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function s(n,r,e,u,o){var i=-1,c=n.length;for(e||(e=D),o||(o=[]);++i<c;){var f=n[i];0<r&&e(f)?1<r?s(f,r-1,e,u,o):t(o,f):u||(o[o.length]=f);\n}return o}function h(n,t){return n&&On(n,t,In)}function v(n,t){return p(t,function(t){return V(n[t])})}function y(n,t){return n>t}function b(n,t,r,e,u){return n===t||(null==n||null==t||!H(n)&&!K(t)?n!==n&&t!==t:g(n,t,r,e,b,u))}function g(n,t,r,e,u,o){var i=Nn(n),c=Nn(t),f=\"[object Array]\",a=\"[object Array]\";i||(f=hn.call(n),f=\"[object Arguments]\"==f?\"[object Object]\":f),c||(a=hn.call(t),a=\"[object Arguments]\"==a?\"[object Object]\":a);var l=\"[object Object]\"==f,c=\"[object Object]\"==a,a=f==a;o||(o=[]);\nvar p=An(o,function(t){return t[0]==n}),s=An(o,function(n){return n[0]==t});if(p&&s)return p[1]==t;if(o.push([n,t]),o.push([t,n]),a&&!l){if(i)r=B(n,t,r,e,u,o);else n:{switch(f){case\"[object Boolean]\":case\"[object Date]\":case\"[object Number]\":r=M(+n,+t);break n;case\"[object Error]\":r=n.name==t.name&&n.message==t.message;break n;case\"[object RegExp]\":case\"[object String]\":r=n==t+\"\";break n}r=false}return o.pop(),r}return 1&r||(i=l&&pn.call(n,\"__wrapped__\"),f=c&&pn.call(t,\"__wrapped__\"),!i&&!f)?!!a&&(r=R(n,t,r,e,u,o),\no.pop(),r):(i=i?n.value():n,f=f?t.value():t,r=u(i,f,r,e,o),o.pop(),r)}function _(n){return typeof n==\"function\"?n:null==n?Y:(typeof n==\"object\"?m:r)(n)}function j(n,t){return n<t}function d(n,t){var r=-1,e=U(n)?Array(n.length):[];return mn(n,function(n,u,o){e[++r]=t(n,u,o)}),e}function m(n){var t=_n(n);return function(r){var e=t.length;if(null==r)return!e;for(r=Object(r);e--;){var u=t[e];if(!(u in r&&b(n[u],r[u],3)))return false}return true}}function O(n,t){return n=Object(n),G(t,function(t,r){return r in n&&(t[r]=n[r]),\nt},{})}function x(n){return xn(q(n,void 0,Y),n+\"\")}function A(n,t,r){var e=-1,u=n.length;for(0>t&&(t=-t>u?0:u+t),r=r>u?u:r,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Array(u);++e<u;)r[e]=n[e+t];return r}function E(n){return A(n,0,n.length)}function w(n,t){var r;return mn(n,function(n,e,u){return r=t(n,e,u),!r}),!!r}function k(n,r){return G(r,function(n,r){return r.func.apply(r.thisArg,t([n],r.args))},n)}function N(n,t,r,e){var u=!r;r||(r={});for(var o=-1,i=t.length;++o<i;){var c=t[o],f=e?e(r[c],n[c],c,r,n):nn;\nif(f===nn&&(f=n[c]),u)r[c]=f;else{var a=r,l=a[c];pn.call(a,c)&&M(l,f)&&(f!==nn||c in a)||(a[c]=f)}}return r}function F(n){return x(function(t,r){var e=-1,u=r.length,o=1<u?r[u-1]:nn,o=3<n.length&&typeof o==\"function\"?(u--,o):nn;for(t=Object(t);++e<u;){var i=r[e];i&&n(t,i,e,o)}return t})}function S(n){return function(){var t=arguments,r=dn(n.prototype),t=n.apply(r,t);return H(t)?t:r}}function T(n,t,r){function e(){for(var o=-1,i=arguments.length,c=-1,f=r.length,a=Array(f+i),l=this&&this!==on&&this instanceof e?u:n;++c<f;)a[c]=r[c];\nfor(;i--;)a[c++]=arguments[++o];return l.apply(t,a)}if(typeof n!=\"function\")throw new TypeError(\"Expected a function\");var u=S(n);return e}function B(n,t,r,e,u,o){var i=n.length,c=t.length;if(i!=c&&!(1&r&&c>i))return false;for(var c=-1,f=true,a=2&r?[]:nn;++c<i;){var l=n[c],p=t[c];if(void 0!==nn){f=false;break}if(a){if(!w(t,function(n,t){if(!z(a,t)&&(l===n||u(l,n,r,e,o)))return a.push(t)})){f=false;break}}else if(l!==p&&!u(l,p,r,e,o)){f=false;break}}return f}function R(n,t,r,e,u,o){var i=1&r,c=In(n),f=c.length,a=In(t).length;\nif(f!=a&&!i)return false;for(var l=f;l--;){var p=c[l];if(!(i?p in t:pn.call(t,p)))return false}for(a=true;++l<f;){var p=c[l],s=n[p],h=t[p];if(void 0!==nn||s!==h&&!u(s,h,r,e,o)){a=false;break}i||(i=\"constructor\"==p)}return a&&!i&&(r=n.constructor,e=t.constructor,r!=e&&\"constructor\"in n&&\"constructor\"in t&&!(typeof r==\"function\"&&r instanceof r&&typeof e==\"function\"&&e instanceof e)&&(a=false)),a}function D(t){return Nn(t)||n(t)}function I(n){var t=[];if(null!=n)for(var r in Object(n))t.push(r);return t}function q(n,t,r){\nreturn t=jn(t===nn?n.length-1:t,0),function(){for(var e=arguments,u=-1,o=jn(e.length-t,0),i=Array(o);++u<o;)i[u]=e[t+u];for(u=-1,o=Array(t+1);++u<t;)o[u]=e[u];return o[t]=r(i),n.apply(this,o)}}function $(n){return(null==n?0:n.length)?s(n,1):[]}function P(n){return n&&n.length?n[0]:nn}function z(n,t,r){var e=null==n?0:n.length;r=typeof r==\"number\"?0>r?jn(e+r,0):r:0,r=(r||0)-1;for(var u=t===t;++r<e;){var o=n[r];if(u?o===t:o!==o)return r}return-1}function C(n,t){return mn(n,_(t))}function G(n,t,r){return e(n,_(t),r,3>arguments.length,mn);\n}function J(n,t){var r;if(typeof t!=\"function\")throw new TypeError(\"Expected a function\");return n=Fn(n),function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=nn),r}}function M(n,t){return n===t||n!==n&&t!==t}function U(n){var t;return(t=null!=n)&&(t=n.length,t=typeof t==\"number\"&&-1<t&&0==t%1&&9007199254740991>=t),t&&!V(n)}function V(n){return!!H(n)&&(n=hn.call(n),\"[object Function]\"==n||\"[object GeneratorFunction]\"==n||\"[object AsyncFunction]\"==n||\"[object Proxy]\"==n)}function H(n){var t=typeof n;\nreturn null!=n&&(\"object\"==t||\"function\"==t)}function K(n){return null!=n&&typeof n==\"object\"}function L(n){return typeof n==\"number\"||K(n)&&\"[object Number]\"==hn.call(n)}function Q(n){return typeof n==\"string\"||!Nn(n)&&K(n)&&\"[object String]\"==hn.call(n)}function W(n){return typeof n==\"string\"?n:null==n?\"\":n+\"\"}function X(n){return null==n?[]:u(n,In(n))}function Y(n){return n}function Z(n,r,e){var u=In(r),o=v(r,u);null!=e||H(r)&&(o.length||!u.length)||(e=r,r=n,n=this,o=v(r,In(r)));var i=!(H(e)&&\"chain\"in e&&!e.chain),c=V(n);\nreturn mn(o,function(e){var u=r[e];n[e]=u,c&&(n.prototype[e]=function(){var r=this.__chain__;if(i||r){var e=n(this.__wrapped__);return(e.__actions__=E(this.__actions__)).push({func:u,args:arguments,thisArg:n}),e.__chain__=r,e}return u.apply(n,t([this.value()],arguments))})}),n}var nn,tn=1/0,rn=/[&<>\"']/g,en=RegExp(rn.source),un=typeof self==\"object\"&&self&&self.Object===Object&&self,on=typeof global==\"object\"&&global&&global.Object===Object&&global||un||Function(\"return this\")(),cn=(un=typeof exports==\"object\"&&exports&&!exports.nodeType&&exports)&&typeof module==\"object\"&&module&&!module.nodeType&&module,fn=function(n){\nreturn function(t){return null==n?nn:n[t]}}({\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"}),an=Array.prototype,ln=Object.prototype,pn=ln.hasOwnProperty,sn=0,hn=ln.toString,vn=on._,yn=Object.create,bn=ln.propertyIsEnumerable,gn=on.isFinite,_n=function(n,t){return function(r){return n(t(r))}}(Object.keys,Object),jn=Math.max,dn=function(){function n(){}return function(t){return H(t)?yn?yn(t):(n.prototype=t,t=new n,n.prototype=nn,t):{}}}();i.prototype=dn(o.prototype),i.prototype.constructor=i;\nvar mn=function(n,t){return function(r,e){if(null==r)return r;if(!U(r))return n(r,e);for(var u=r.length,o=t?u:-1,i=Object(r);(t?o--:++o<u)&&false!==e(i[o],o,i););return r}}(h),On=function(n){return function(t,r,e){var u=-1,o=Object(t);e=e(t);for(var i=e.length;i--;){var c=e[n?i:++u];if(false===r(o[c],c,o))break}return t}}(),xn=Y,An=function(n){return function(t,r,e){var u=Object(t);if(!U(t)){var o=_(r);t=In(t),r=function(n){return o(u[n],n,u)}}return r=n(t,r,e),-1<r?u[o?t[r]:r]:nn}}(function(n,t,r){var e=null==n?0:n.length;\nif(!e)return-1;r=null==r?0:Fn(r),0>r&&(r=jn(e+r,0));n:{for(t=_(t),e=n.length,r+=-1;++r<e;)if(t(n[r],r,n)){n=r;break n}n=-1}return n}),En=x(function(n,t,r){return T(n,t,r)}),wn=x(function(n,t){return f(n,1,t)}),kn=x(function(n,t,r){return f(n,Sn(t)||0,r)}),Nn=Array.isArray,Fn=Number,Sn=Number,Tn=F(function(n,t){N(t,_n(t),n)}),Bn=F(function(n,t){N(t,I(t),n)}),Rn=F(function(n,t,r,e){N(t,qn(t),n,e)}),Dn=x(function(n){return n.push(nn,c),Rn.apply(nn,n)}),In=_n,qn=I,$n=function(n){return xn(q(n,nn,$),n+\"\");\n}(function(n,t){return null==n?{}:O(n,t)});o.assignIn=Bn,o.before=J,o.bind=En,o.chain=function(n){return n=o(n),n.__chain__=true,n},o.compact=function(n){return p(n,Boolean)},o.concat=function(){var n=arguments.length;if(!n)return[];for(var r=Array(n-1),e=arguments[0];n--;)r[n-1]=arguments[n];return t(Nn(e)?E(e):[e],s(r,1))},o.create=function(n,t){var r=dn(n);return null==t?r:Tn(r,t)},o.defaults=Dn,o.defer=wn,o.delay=kn,o.filter=function(n,t){return p(n,_(t))},o.flatten=$,o.flattenDeep=function(n){\nreturn(null==n?0:n.length)?s(n,tn):[]},o.iteratee=_,o.keys=In,o.map=function(n,t){return d(n,_(t))},o.matches=function(n){return m(Tn({},n))},o.mixin=Z,o.negate=function(n){if(typeof n!=\"function\")throw new TypeError(\"Expected a function\");return function(){return!n.apply(this,arguments)}},o.once=function(n){return J(2,n)},o.pick=$n,o.slice=function(n,t,r){var e=null==n?0:n.length;return r=r===nn?e:+r,e?A(n,null==t?0:+t,r):[]},o.sortBy=function(n,t){var e=0;return t=_(t),d(d(n,function(n,r,u){return{\nvalue:n,index:e++,criteria:t(n,r,u)}}).sort(function(n,t){var r;n:{r=n.criteria;var e=t.criteria;if(r!==e){var u=r!==nn,o=null===r,i=r===r,c=e!==nn,f=null===e,a=e===e;if(!f&&r>e||o&&c&&a||!u&&a||!i){r=1;break n}if(!o&&r<e||f&&u&&i||!c&&i||!a){r=-1;break n}}r=0}return r||n.index-t.index}),r(\"value\"))},o.tap=function(n,t){return t(n),n},o.thru=function(n,t){return t(n)},o.toArray=function(n){return U(n)?n.length?E(n):[]:X(n)},o.values=X,o.extend=Bn,Z(o,o),o.clone=function(n){return H(n)?Nn(n)?E(n):N(n,_n(n)):n;\n},o.escape=function(n){return(n=W(n))&&en.test(n)?n.replace(rn,fn):n},o.every=function(n,t,r){return t=r?nn:t,a(n,_(t))},o.find=An,o.forEach=C,o.has=function(n,t){return null!=n&&pn.call(n,t)},o.head=P,o.identity=Y,o.indexOf=z,o.isArguments=n,o.isArray=Nn,o.isBoolean=function(n){return true===n||false===n||K(n)&&\"[object Boolean]\"==hn.call(n)},o.isDate=function(n){return K(n)&&\"[object Date]\"==hn.call(n)},o.isEmpty=function(t){return U(t)&&(Nn(t)||Q(t)||V(t.splice)||n(t))?!t.length:!_n(t).length},o.isEqual=function(n,t){\nreturn b(n,t)},o.isFinite=function(n){return typeof n==\"number\"&&gn(n)},o.isFunction=V,o.isNaN=function(n){return L(n)&&n!=+n},o.isNull=function(n){return null===n},o.isNumber=L,o.isObject=H,o.isRegExp=function(n){return K(n)&&\"[object RegExp]\"==hn.call(n)},o.isString=Q,o.isUndefined=function(n){return n===nn},o.last=function(n){var t=null==n?0:n.length;return t?n[t-1]:nn},o.max=function(n){return n&&n.length?l(n,Y,y):nn},o.min=function(n){return n&&n.length?l(n,Y,j):nn},o.noConflict=function(){return on._===this&&(on._=vn),\nthis},o.noop=function(){},o.reduce=G,o.result=function(n,t,r){return t=null==n?nn:n[t],t===nn&&(t=r),V(t)?t.call(n):t},o.size=function(n){return null==n?0:(n=U(n)?n:_n(n),n.length)},o.some=function(n,t,r){return t=r?nn:t,w(n,_(t))},o.uniqueId=function(n){var t=++sn;return W(n)+t},o.each=C,o.first=P,Z(o,function(){var n={};return h(o,function(t,r){pn.call(o.prototype,r)||(n[r]=t)}),n}(),{chain:false}),o.VERSION=\"4.17.2\",mn(\"pop join replace reverse split push shift sort splice unshift\".split(\" \"),function(n){\nvar t=(/^(?:replace|split)$/.test(n)?String.prototype:an)[n],r=/^(?:push|sort|unshift)$/.test(n)?\"tap\":\"thru\",e=/^(?:pop|join|replace|shift)$/.test(n);o.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(Nn(u)?u:[],n)}return this[r](function(r){return t.apply(Nn(r)?r:[],n)})}}),o.prototype.toJSON=o.prototype.valueOf=o.prototype.value=function(){return k(this.__wrapped__,this.__actions__)},typeof define==\"function\"&&typeof define.amd==\"object\"&&define.amd?(on._=o,\ndefine(function(){return o})):cn?((cn.exports=o)._=o,un._=o):on._=o}).call(this);","var a24Core = {\n    /**\n     * Checks if the value passed in is empty or not\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since  7 June 2016\n     *\n     * @param objValue - The value to to check if it is empty\n     *\n     * @return Boolean - If the object is empty or not\n     */\n    isEmpty: function(objValue) {\n        if (\n            typeof(objValue) === \"undefined\" ||\n            objValue === null ||\n            (typeof(objValue) === \"string\" && objValue.trim().length === 0) ||\n            (objValue instanceof Array && objValue.length === 0) ||\n            // Ember components that are being removed from the dom, may partially exist\n            // this code detects when there were dom changes, but the ember js object is still in memory\n            // previously doing a get would have given a console error\n            // doing \"get\" on a null\n            (\n                objValue instanceof Object &&\n                (\n                    objValue.isDestroyed ||\n                    objValue.isDestroying\n                )\n            ) ||\n            (\n                objValue instanceof Object &&\n                (\n                    objValue.constructor.prototype.jquery &&\n                    objValue.length === 0\n                )\n            )\n        ) {\n            return true;\n        }\n        return false;\n    },\n    /**\n     * This function will replace the tokens in the string with values sent in and return the replaced tokens string\n     *\n     * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n     * @since  16 January 2018\n     *\n     * @param sString - The string with the tokens to be replaced\n     * @param arrTokens - The values the tokens should change\n     * @param sOpenTag - The opening tag for the token regex check\n     * @param sCloseTag - The closing tag for the token regex check\n     *\n     * @return String - The un-escaped locale html string\n     */\n    replaceTokensInString: function(sString, arrTokens, sOpenTag, sCloseTag) {\n\n        if (a24Core.isEmpty(sOpenTag)) {\n            sOpenTag = \"{\";\n        }\n        if (a24Core.isEmpty(sCloseTag)) {\n            sCloseTag = \"}\";\n        }\n\n        var iTokenCount = arrTokens.length;\n\n        // We have tokens, that need to be replaced\n        for (var i = 0; i < iTokenCount; i++) {\n            // replace tokens\n            sString = sString.replace(\n                new RegExp(\"\\\\\" + sOpenTag + i + \"\\\\\" + sCloseTag, \"g\"),\n                arrTokens[i]\n            );\n        }\n\n        return sString;\n    },\n    /**\n     * This function will compare two object and return true if equals else will return false\n     *\n     * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n     * @since  16 January 2018\n     *\n     * @param objEmber - Ember object so we can copy the object\n     * @param objInitial - The initial object to compare\n     * @param objAfterwards - The object to compare with\n     * @param bSetEmptyToNull - A flag to set the empty values to null (defaults to true)\n     *\n     * @return Boolean - true or false depending on equal or not\n     */\n    compareObjects: function(objEmber, objInitial, objAfterwards, bSetEmptyToNull) {\n        bSetEmptyToNull = typeof bSetEmptyToNull !== \"undefined\" ? bSetEmptyToNull : true;\n        objInitial = objEmber.copy(objInitial);\n        objAfterwards = objEmber.copy(objAfterwards);\n\n        if (bSetEmptyToNull) {\n            objInitial = this.setEmptyValuesToNull(objInitial);\n            objAfterwards = this.setEmptyValuesToNull(objAfterwards);\n        }\n\n        return _.isEqual(objInitial, objAfterwards);\n    },\n    /**\n     * This function will replace any empty values with null\n     *\n     * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n     * @since  16 January 2018\n     *\n     * @param mData - The data to replace empty values with null\n     *\n     * @return Mixed - The value sent in with empty values set to null or return just null\n     */\n    setEmptyValuesToNull: function(mData) {\n\n        // Check the type of the mData\n        if (mData !== null && mData instanceof Array) {\n            // If the mData is type of array\n            for (var i = 0; i < mData.length; i++) {\n                // Recursive call for each of the array items\n                mData[i] = a24Core.setEmptyValuesToNull(mData[i]);\n            }\n            // Return the modified array\n            return mData;\n        } else if (mData !== null && mData instanceof Object) {\n            // If the mData is type of object\n            for (var sProperty in mData) {\n                if (mData.hasOwnProperty(sProperty)) {\n                    // Recursive call for each of the object keys\n                    mData[sProperty] = a24Core.setEmptyValuesToNull(mData[sProperty]);\n                }\n            }\n            // Return the modified object\n            return mData;\n        } else if (typeof mData === \"string\") {\n            return a24Core.getTrimedValue(mData, true);\n        }\n\n        if (a24Core.isEmpty(mData)) {\n            // Return null if the item is empty\n            return null;\n        }\n        // Return value if item is not empty\n        return mData;\n    },\n    /**\n     * Gets the trimmed value of a string\n     *\n     * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n     * @since  16 January 2018\n     *\n     * @param sStringToTrim - The string to trim\n     * @param bReturnNull - If the string is empty will return either null or empty string\n     *\n     * @returns String - The string trimmed value\n     */\n    getTrimedValue: function(sStringToTrim, bReturnNull) {\n\n        // If the string is not empty\n        if (!a24Core.isEmpty(sStringToTrim)) {\n            return sStringToTrim.trim();\n        }\n\n        // Return null or \"\" depending on bReturnNull flag\n        if (bReturnNull) {\n            return null;\n        } else {\n            return \"\";\n        }\n    },\n    /**\n     * This will generate an array of value/label objects that can be used for dropdowns\n     *\n     * This method will allow you to generate ascending or descending lists depending on the order of the arguments\n     *\n     * @author Jacques Slabber <jacques.slabber@a24group.com>\n     * @since  21 December 2016\n     *\n     * @param iFrom - The from value\n     * @param iTo - The to value\n     *\n     * @return Array - The array with the value and label object pairs\n     */\n    generateRangeOptions: function(iFrom, iTo) {\n        var arrResult = [];\n\n        var iFinalValue = 0;\n        var bAscending = false;\n        if (iFrom > iTo) {\n            iFinalValue = iTo - 1;\n        } else {\n            bAscending = true;\n            iFinalValue = iTo + 1;\n        }\n        while (iFrom !== iFinalValue) {\n            arrResult.push({sValue: iFrom.toString(), sLabel: iFrom.toString()});\n            (!bAscending) ? iFrom-- : iFrom++;\n        }\n        return arrResult;\n    },\n    /**\n     * This function will check if a value is an number\n     *\n     * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n     * @since  16 January 2018\n     *\n     * @param mNumber - The value to check if it is a number\n     *\n     * @return Boolean - If the value is a number or not\n     */\n    isNumber: function(mNumber) {\n        return !isNaN(parseInt(mNumber)) && isFinite(mNumber);\n    },\n    /**\n     * Checks if the haystack passed in ends with the needle\n     *\n     * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n     * @since  16 January 2018\n     *\n     * @param sHaystack - The haystack to check\n     * @param sNeedle - The needle to match\n     *\n     * @returns Boolean - If the value ends with needle\n     */\n    endsWith: function(sHaystack, sNeedle) {\n        var iNeedleLength = sNeedle.length;\n        if (sHaystack.length >= iNeedleLength) {\n            return sHaystack.substr(sHaystack.length - iNeedleLength, iNeedleLength) === sNeedle;\n        } else {\n            return false;\n        }\n    },\n    /**\n     * This function will remove ember id query params from the url, but only the ones that have been set up to be\n     * removed, for instance the popups that add query params to allow back button closing the popup.\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since  17 May 2017\n     *\n     * @param sUrlPopupConstant - The constant for the 'r-pop' to be passed in\n     * @param sUrl (optional) When supplied it will strip from that string otherwise it will use the current url\n     *\n     * @returns The stripped string\n     */\n    stripEmberIdsFromUrl: function(sUrlPopupConstant, sUrl) {\n        var sStripedUrl = sUrl;\n        if (a24Core.isEmpty(sStripedUrl)) {\n            sStripedUrl = window.location.href;\n        }\n\n        //Trim open popup url params from the url\n        var sPopupReplace1 = \"ember\\\\d{1,}=\" + encodeURI(sUrlPopupConstant) + \"&\";\n        var sPopupReplace2 = \"[?]ember\\\\d{1,}=\" + encodeURI(sUrlPopupConstant);\n        var sPopupReplace3 = \"&ember\\\\d{1,}=\" + encodeURI(sUrlPopupConstant);\n        var objPopupReplace1 = new RegExp(sPopupReplace1, \"g\");\n        var objPopupReplace2 = new RegExp(sPopupReplace2, \"g\");\n        var objPopupReplace3 = new RegExp(sPopupReplace3, \"g\");\n\n        //First replace all with trailing &\n        sStripedUrl = sStripedUrl.replace(objPopupReplace1, \"\");\n        //Now we only have 2 case left, the one right in front(starting with ?) or right at the back (starting with &)\n        sStripedUrl = sStripedUrl.replace(objPopupReplace2, \"\");\n        sStripedUrl = sStripedUrl.replace(objPopupReplace3, \"\");\n\n        return sStripedUrl;\n    },\n    /**\n     * This function is to return the current url. This is here because this is a browser function and we can not mock\n     * it. This is so that we can at least mock this function in the tests\n     *\n     * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n     * @since  04 May 2017\n     *\n     * @return String - The current url\n     */\n    getCurrentUrl: function() {\n        return window.location.href;\n    },\n    /**\n     * This function is just a simple copy of whatever is selected. This function is here because we can not mock\n     * a browser function so this is so we can at least mock this function in tests\n     *\n     * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n     * @since  04 May 2017\n     *\n     * @return Boolean - If the execute copy command executed successfully\n     */\n    copySelected: function() {\n        return document.execCommand(\"copy\");\n    },\n    /**\n     * This function will check the mixed value for null values and remove them\n     *\n     * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n     * @since  09 August 2017\n     *\n     * @param objEmber - The Ember object\n     * @param mValue - The value to remove the null values from\n     *\n     * @return Mixed - Object/Array with the null values removed\n     */\n    removeNullsFromValue: function (objEmber, mValue) {\n        var mData = objEmber.copy(mValue, true);\n        for (var sProp in mData) {\n            if (a24Core.isEmpty(mData[sProp])) {\n                delete mData[sProp];\n            } else if (mData[sProp] instanceof Array) {\n                for (var i = 0; i < mData[sProp].length; i++) {\n                    if (a24Core.isEmpty(mData[sProp][i])) {\n                        mData[sProp].splice(i, 1);\n                    } else {\n                        mData[sProp][i] = a24Core.removeNullsFromValue(objEmber, mData[sProp][i]);\n\n                        // This is to check if the removal did not make the array empty\n                        if (a24Core.isEmpty(mData[sProp][i])) {\n                            mData[sProp].splice(i, 1);\n                        } else if (\n                            typeof mData[sProp][i] === \"object\" &&\n                            !Object.keys(mData[sProp][i]).length\n                        ) {\n                            mData[sProp].splice(i, 1);\n                        }\n                    }\n                }\n            } else if (mData[sProp] !== null && typeof mData[sProp] === \"object\") {\n                for (var sInnerProp in mData[sProp]) {\n                    if (a24Core.isEmpty(mData[sProp][sInnerProp])) {\n                        delete mData[sProp][sInnerProp];\n                    } else {\n                        mData[sProp][sInnerProp] = a24Core.removeNullsFromValue(objEmber, mData[sProp][sInnerProp]);\n\n                        // This is to check if the removal did not make the object null\n                        if (\n                            typeof mData[sProp][sInnerProp] === \"object\" &&\n                            !Object.keys(mData[sProp][sInnerProp]).length\n                        ) {\n                            delete mData[sProp][sInnerProp];\n                        }\n                    }\n                }\n            }\n        }\n\n        return mData;\n    },\n    /**\n     * This function return a safe string href for links\n     *\n     * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n     * @since  16 January 2018\n     *\n     * @param objEmber - The Ember object\n     * @param sValue - The display value\n     * @param sLink - The actual link\n     * @param sHref - The type of href it needs to be\n     *\n     * @return String - The safe string href\n     */\n    getSafeStringLink: function (objEmber, sValue, sLink, sHref) {\n        if (a24Core.isEmpty(sHref)) {\n            sHref = \"\";\n        }\n        if (a24Core.isEmpty(sLink)) {\n            sLink = sValue;\n        }\n\n        var sLabel = \"\";\n\n        switch (sHref) {\n            case \"email\":\n                sLabel = \"<a href='mailto:\" +\n                    sLink +\n                    \"' class='a24-strings-html-link-aps' target='_top'>\" +\n                    sValue +\n                    \"</a>\";\n                break;\n            case \"phone\":\n                sLabel = \"<a href='tel:\" +\n                    sLink +\n                    \"' class='a24-strings-html-link-aps' target='_top'>\" +\n                    sValue +\n                    \"</a>\";\n                break;\n            case \"link\":\n                sLabel = \"<a href='\" +\n                    sLink +\n                    \"' class='a24-strings-html-link-aps' target='_top'>\" +\n                    sValue +\n                    \"</a>\";\n                break;\n            case \"address\":\n                sLabel = \"<a href='//maps.google.com/maps?q=\" +\n                    sLink +\n                    \"' class='a24-strings-html-link-aps' target='_blank'>\" +\n                    sValue +\n                    \"</a>\";\n                break;\n            case \"externalLink\":\n                sLabel = \"<a href='\" +\n                    sLink +\n                    \"' class='a24-strings-html-link-aps' target='_blank'>\" +\n                    sValue +\n                    \"</a>\";\n                break;\n            default:\n                sLabel = sValue;\n        }\n\n        return objEmber.String.htmlSafe(sLabel);\n    }\n};\n","/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */\n!function(a,b){\"use strict\";\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error(\"jQuery requires a window with a document\");return b(a)}:b(a)}(\"undefined\"!=typeof window?window:this,function(a,b){\"use strict\";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement(\"script\");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q=\"3.2.1\",r=function(a,b){return new r.fn.init(a,b)},s=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for(\"boolean\"==typeof g&&(j=g,g=arguments[h]||{},h++),\"object\"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=Array.isArray(d)))?(e?(e=!1,f=c&&Array.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:\"jQuery\"+(q+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return\"function\"===r.type(a)},isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return(\"number\"===b||\"string\"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||\"[object Object]\"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,\"constructor\")&&b.constructor,\"function\"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+\"\":\"object\"==typeof a||\"function\"==typeof a?j[k.call(a)]||\"object\":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,\"ms-\").replace(u,v)},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?\"\":(a+\"\").replace(s,\"\")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,\"string\"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if(\"string\"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),\"function\"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(a,b){j[\"[object \"+b+\"]\"]=b.toLowerCase()});function w(a){var b=!!a&&\"length\"in a&&a.length,c=r.type(a);return\"function\"!==c&&!r.isWindow(a)&&(\"array\"===c||0===b||\"number\"==typeof b&&b>0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u=\"sizzle\"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",K=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",L=\"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",M=\"\\\\[\"+K+\"*(\"+L+\")(?:\"+K+\"*([*^$|!~]?=)\"+K+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+L+\"))|)\"+K+\"*\\\\]\",N=\":(\"+L+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+M+\")*)|.*)\\\\)|)\",O=new RegExp(K+\"+\",\"g\"),P=new RegExp(\"^\"+K+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+K+\"+$\",\"g\"),Q=new RegExp(\"^\"+K+\"*,\"+K+\"*\"),R=new RegExp(\"^\"+K+\"*([>+~]|\"+K+\")\"+K+\"*\"),S=new RegExp(\"=\"+K+\"*([^\\\\]'\\\"]*?)\"+K+\"*\\\\]\",\"g\"),T=new RegExp(N),U=new RegExp(\"^\"+L+\"$\"),V={ID:new RegExp(\"^#(\"+L+\")\"),CLASS:new RegExp(\"^\\\\.(\"+L+\")\"),TAG:new RegExp(\"^(\"+L+\"|[*])\"),ATTR:new RegExp(\"^\"+M),PSEUDO:new RegExp(\"^\"+N),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+K+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+K+\"*(?:([+-]|)\"+K+\"*(\\\\d+)|))\"+K+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+J+\")$\",\"i\"),needsContext:new RegExp(\"^\"+K+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+K+\"*((?:-\\\\d)?\\\\d*)\"+K+\"*\\\\)|)(?=[^-]|$)\",\"i\")},W=/^(?:input|select|textarea|button)$/i,X=/^h\\d$/i,Y=/^[^{]+\\{\\s*\\[native \\w/,Z=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,$=/[+~]/,_=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+K+\"?|(\"+K+\")|.)\",\"ig\"),aa=function(a,b,c){var d=\"0x\"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,ca=function(a,b){return b?\"\\0\"===a?\"\\ufffd\":a.slice(0,-1)+\"\\\\\"+a.charCodeAt(a.length-1).toString(16)+\" \":\"\\\\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&(\"form\"in a||\"label\"in a)},{dir:\"parentNode\",next:\"legend\"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],\"string\"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+\" \"]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if(\"object\"!==b.nodeName.toLowerCase()){(k=b.getAttribute(\"id\"))?k=k.replace(ba,ca):b.setAttribute(\"id\",k=u),o=g(a),h=o.length;while(h--)o[h]=\"#\"+k+\" \"+sa(o[h]);r=o.join(\",\"),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute(\"id\")}}}return i(a.replace(P,\"$1\"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+\" \")>d.cacheLength&&delete b[a.shift()],b[c+\" \"]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement(\"fieldset\");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split(\"|\"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return\"input\"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return(\"input\"===c||\"button\"===c)&&b.type===a}}function oa(a){return function(b){return\"form\"in b?b.parentNode&&b.disabled===!1?\"label\"in b?\"label\"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:\"label\"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&\"undefined\"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&\"HTML\"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener(\"unload\",da,!1):e.attachEvent&&e.attachEvent(\"onunload\",da)),c.attributes=ja(function(a){return a.className=\"i\",!a.getAttribute(\"className\")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment(\"\")),!a.getElementsByTagName(\"*\").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute(\"id\")===b}},d.find.ID=function(a,b){if(\"undefined\"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c=\"undefined\"!=typeof a.getAttributeNode&&a.getAttributeNode(\"id\");return c&&c.value===b}},d.find.ID=function(a,b){if(\"undefined\"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode(\"id\"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode(\"id\"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return\"undefined\"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if(\"*\"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if(\"undefined\"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML=\"<a id='\"+u+\"'></a><select id='\"+u+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",a.querySelectorAll(\"[msallowcapture^='']\").length&&q.push(\"[*^$]=\"+K+\"*(?:''|\\\"\\\")\"),a.querySelectorAll(\"[selected]\").length||q.push(\"\\\\[\"+K+\"*(?:value|\"+J+\")\"),a.querySelectorAll(\"[id~=\"+u+\"-]\").length||q.push(\"~=\"),a.querySelectorAll(\":checked\").length||q.push(\":checked\"),a.querySelectorAll(\"a#\"+u+\"+*\").length||q.push(\".#.+[+~]\")}),ja(function(a){a.innerHTML=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";var b=n.createElement(\"input\");b.setAttribute(\"type\",\"hidden\"),a.appendChild(b).setAttribute(\"name\",\"D\"),a.querySelectorAll(\"[name=d]\").length&&q.push(\"name\"+K+\"*[*^$|!~]?=\"),2!==a.querySelectorAll(\":enabled\").length&&q.push(\":enabled\",\":disabled\"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(\":disabled\").length&&q.push(\":enabled\",\":disabled\"),a.querySelectorAll(\"*,:x\"),q.push(\",.*:\")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,\"*\"),s.call(a,\"[s!='']:x\"),r.push(\"!=\",N)}),q=q.length&&new RegExp(q.join(\"|\")),r=r.length&&new RegExp(r.join(\"|\")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,\"='$1']\"),c.matchesSelector&&p&&!A[b+\" \"]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+\"\").replace(ba,ca)},ga.error=function(a){throw new Error(\"Syntax error, unrecognized expression: \"+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c=\"\",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if(\"string\"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||\"\").replace(_,aa),\"~=\"===a[2]&&(a[3]=\" \"+a[3]+\" \"),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),\"nth\"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*(\"even\"===a[3]||\"odd\"===a[3])),a[5]=+(a[7]+a[8]||\"odd\"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||\"\":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(\")\",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return\"*\"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+\" \"];return b||(b=new RegExp(\"(^|\"+K+\")\"+a+\"(\"+K+\"|$)\"))&&y(a,function(a){return b.test(\"string\"==typeof a.className&&a.className||\"undefined\"!=typeof a.getAttribute&&a.getAttribute(\"class\")||\"\")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?\"!=\"===b:!b||(e+=\"\",\"=\"===b?e===c:\"!=\"===b?e!==c:\"^=\"===b?c&&0===e.indexOf(c):\"*=\"===b?c&&e.indexOf(c)>-1:\"$=\"===b?c&&e.slice(-c.length)===c:\"~=\"===b?(\" \"+e.replace(O,\" \")+\" \").indexOf(c)>-1:\"|=\"===b&&(e===c||e.slice(0,c.length+1)===c+\"-\"))}},CHILD:function(a,b,c,d,e){var f=\"nth\"!==a.slice(0,3),g=\"last\"!==a.slice(-4),h=\"of-type\"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?\"nextSibling\":\"previousSibling\",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p=\"only\"===a&&!o&&\"nextSibling\"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error(\"unsupported pseudo: \"+a);return e[u]?e(b):e.length>1?(c=[a,a,\"\",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,\"$1\"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||\"\")||ga.error(\"unsupported lang: \"+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute(\"xml:lang\")||b.getAttribute(\"lang\"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+\"-\");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return\"input\"===b&&!!a.checked||\"option\"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return\"input\"===b&&\"button\"===a.type||\"button\"===b},text:function(a){var b;return\"input\"===a.nodeName.toLowerCase()&&\"text\"===a.type&&(null==(b=a.getAttribute(\"type\"))||\"text\"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+\" \"];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P,\" \")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d=\"\";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&\"parentNode\"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||\"*\",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[\" \"],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:\" \"===a[i-2].type?\"*\":\"\"})).replace(P,\"$1\"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s=\"0\",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG(\"*\",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+\" \"];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m=\"function\"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&\"ID\"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split(\"\").sort(B).join(\"\")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement(\"fieldset\"))}),ja(function(a){return a.innerHTML=\"<a href='#'></a>\",\"#\"===a.firstChild.getAttribute(\"href\")})||ka(\"type|href|height|width\",function(a,b,c){if(!c)return a.getAttribute(b,\"type\"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML=\"<input/>\",a.firstChild.setAttribute(\"value\",\"\"),\"\"===a.firstChild.getAttribute(\"value\")})||ka(\"value\",function(a,b,c){if(!c&&\"input\"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute(\"disabled\")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[\":\"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i,D=/^.[^:#\\[\\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):\"string\"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=\":not(\"+a+\")\"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if(\"string\"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,\"string\"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,\"string\"==typeof a){if(e=\"<\"===a[0]&&\">\"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g=\"string\"!=typeof a&&r(a);if(!A.test(a))for(;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?\"string\"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,\"parentNode\")},parentsUntil:function(a,b,c){return y(a,\"parentNode\",c)},next:function(a){return K(a,\"nextSibling\")},prev:function(a){return K(a,\"previousSibling\")},nextAll:function(a){return y(a,\"nextSibling\")},prevAll:function(a){return y(a,\"previousSibling\")},nextUntil:function(a,b,c){return y(a,\"nextSibling\",c)},prevUntil:function(a,b,c){return y(a,\"previousSibling\",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,\"iframe\")?a.contentDocument:(B(a,\"template\")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return\"Until\"!==a.slice(-5)&&(d=c),d&&\"string\"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\\x20\\t\\r\\n\\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a=\"string\"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:\"\")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&\"string\"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c=\"\",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=\"\"),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[[\"notify\",\"progress\",r.Callbacks(\"memory\"),r.Callbacks(\"memory\"),2],[\"resolve\",\"done\",r.Callbacks(\"once memory\"),r.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",r.Callbacks(\"once memory\"),r.Callbacks(\"once memory\"),1,\"rejected\"]],d=\"pending\",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},\"catch\":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+\"With\"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError(\"Thenable self-resolution\");j=a&&(\"object\"==typeof a||\"function\"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,N,e),g(f,c,O,e)):(f++,j.call(a,g(f,c,N,e),g(f,c,O,e),g(f,c,N,c.notifyWith))):(d!==N&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+\"With\"](this===f?void 0:this,arguments),this},f[b[0]+\"With\"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),\"pending\"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn(\"jQuery.Deferred exception: \"+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)[\"catch\"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener(\"DOMContentLoaded\",S),\na.removeEventListener(\"load\",S),r.ready()}\"complete\"===d.readyState||\"loading\"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener(\"DOMContentLoaded\",S),a.addEventListener(\"load\",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if(\"object\"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},U=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function V(){this.expando=r.expando+V.uid++}V.uid=1,V.prototype={cache:function(a){var b=a[this.expando];return b||(b={},U(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if(\"string\"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&\"string\"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){Array.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(L)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var W=new V,X=new V,Y=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,Z=/[A-Z]/g;function $(a){return\"true\"===a||\"false\"!==a&&(\"null\"===a?null:a===+a+\"\"?+a:Y.test(a)?JSON.parse(a):a)}function _(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d=\"data-\"+b.replace(Z,\"-$&\").toLowerCase(),c=a.getAttribute(d),\"string\"==typeof c){try{c=$(c)}catch(e){}X.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return X.hasData(a)||W.hasData(a)},data:function(a,b,c){return X.access(a,b,c)},removeData:function(a,b){X.remove(a,b)},_data:function(a,b,c){return W.access(a,b,c)},_removeData:function(a,b){W.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=X.get(f),1===f.nodeType&&!W.get(f,\"hasDataAttrs\"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf(\"data-\")&&(d=r.camelCase(d.slice(5)),_(f,d,e[d])));W.set(f,\"hasDataAttrs\",!0)}return e}return\"object\"==typeof a?this.each(function(){X.set(this,a)}):T(this,function(b){var c;if(f&&void 0===b){if(c=X.get(f,a),void 0!==c)return c;if(c=_(f,a),void 0!==c)return c}else this.each(function(){X.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||\"fx\")+\"queue\",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||\"fx\";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};\"inprogress\"===e&&(e=c.shift(),d--),e&&(\"fx\"===b&&c.unshift(\"inprogress\"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+\"queueHooks\";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks(\"once memory\").add(function(){W.remove(a,[b+\"queue\",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return\"string\"!=typeof a&&(b=a,a=\"fx\",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),\"fx\"===a&&\"inprogress\"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||\"fx\",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};\"string\"!=typeof a&&(b=a,a=void 0),a=a||\"fx\";while(g--)c=W.get(f[g],a+\"queueHooks\"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var aa=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,ba=new RegExp(\"^(?:([+-])=|)(\"+aa+\")([a-z%]*)$\",\"i\"),ca=[\"Top\",\"Right\",\"Bottom\",\"Left\"],da=function(a,b){return a=b||a,\"none\"===a.style.display||\"\"===a.style.display&&r.contains(a.ownerDocument,a)&&\"none\"===r.css(a,\"display\")},ea=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function fa(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,\"\")},i=h(),j=c&&c[3]||(r.cssNumber[b]?\"\":\"px\"),k=(r.cssNumber[b]||\"px\"!==j&&+i)&&ba.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||\".5\",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var ga={};function ha(a){var b,c=a.ownerDocument,d=a.nodeName,e=ga[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,\"display\"),b.parentNode.removeChild(b),\"none\"===e&&(e=\"block\"),ga[d]=e,e)}function ia(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?(\"none\"===c&&(e[f]=W.get(d,\"display\")||null,e[f]||(d.style.display=\"\")),\"\"===d.style.display&&da(d)&&(e[f]=ha(d))):\"none\"!==c&&(e[f]=\"none\",W.set(d,\"display\",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ia(this,!0)},hide:function(){return ia(this)},toggle:function(a){return\"boolean\"==typeof a?a?this.show():this.hide():this.each(function(){da(this)?r(this).show():r(this).hide()})}});var ja=/^(?:checkbox|radio)$/i,ka=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i,la=/^$|\\/(?:java|ecma)script/i,ma={option:[1,\"<select multiple='multiple'>\",\"</select>\"],thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c=\"undefined\"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||\"*\"):\"undefined\"!=typeof a.querySelectorAll?a.querySelectorAll(b||\"*\"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c<d;c++)W.set(a[c],\"globalEval\",!b||W.get(b[c],\"globalEval\"))}var pa=/<|&#?\\w+;/;function qa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if(\"object\"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(pa.test(f)){g=g||l.appendChild(b.createElement(\"div\")),h=(ka.exec(f)||[\"\",\"\"])[1].toLowerCase(),i=ma[h]||ma._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=\"\"}else m.push(b.createTextNode(f));l.textContent=\"\",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),\"script\"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||\"\")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement(\"div\")),c=d.createElement(\"input\");c.setAttribute(\"type\",\"radio\"),c.setAttribute(\"checked\",\"checked\"),c.setAttribute(\"name\",\"t\"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML=\"<textarea>x</textarea>\",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if(\"object\"==typeof b){\"string\"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&(\"string\"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return\"undefined\"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||\"\").match(L)||[\"\"],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||\"\").split(\".\").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(\".\")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||\"\").match(L)||[\"\"],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||\"\").split(\".\").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp(\"(^|\\\\.)\"+o.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&(\"**\"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,\"handle events\")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,\"events\")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g,h=[],i=b.delegateCount,j=a.target;if(i&&j.nodeType&&!(\"click\"===a.type&&a.button>=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&(\"click\"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c<i;c++)d=b[c],e=d.selector+\" \",void 0===g[e]&&(g[e]=d.needsContext?r(e,this).index(j)>-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i<b.length&&h.push({elem:j,handlers:b.slice(i)}),h},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==xa()&&this.focus)return this.focus(),!1},delegateType:\"focusin\"},blur:{trigger:function(){if(this===xa()&&this.blur)return this.blur(),!1},delegateType:\"focusout\"},click:{trigger:function(){if(\"checkbox\"===this.type&&this.click&&B(this,\"input\"))return this.click(),!1},_default:function(a){return B(a.target,\"a\")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?va:wa,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:wa,isPropagationStopped:wa,isImmediatePropagationStopped:wa,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=va,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=va,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=va,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,\"char\":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&sa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ta.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return ya(this,a,b,c,d)},one:function(a,b,c,d){return ya(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+\".\"+d.namespace:d.origType,d.selector,d.handler),this;if(\"object\"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&\"function\"!=typeof b||(c=b,b=void 0),c===!1&&(c=wa),this.each(function(){r.event.remove(this,a,c,b)})}});var za=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,Aa=/<script|<style|<link/i,Ba=/checked\\s*(?:[^=]|=\\s*.checked.)/i,Ca=/^true\\/(.*)/,Da=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;function Ea(a,b){return B(a,\"table\")&&B(11!==b.nodeType?b:b.firstChild,\"tr\")?r(\">tbody\",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute(\"type\"))+\"/\"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute(\"type\"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}X.hasData(a)&&(h=X.access(a),i=r.extend({},h),X.set(b,i))}}function Ia(a,b){var c=b.nodeName.toLowerCase();\"input\"===c&&ja.test(a.type)?b.checked=a.checked:\"input\"!==c&&\"textarea\"!==c||(b.defaultValue=a.defaultValue)}function Ja(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&\"string\"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,\"script\"),Fa),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,na(j,\"script\"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ga),l=0;l<i;l++)j=h[l],la.test(j.type||\"\")&&!W.access(j,\"globalEval\")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Da,\"\"),k))}return a}function Ka(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(na(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&oa(na(d,\"script\")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(za,\"<$1></$2>\")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d<e;d++)Ia(f[d],g[d]);if(b)if(c)for(f=f||na(a),g=g||na(h),d=0,e=f.length;d<e;d++)Ha(f[d],g[d]);else Ha(a,h);return g=na(h,\"script\"),g.length>0&&oa(g,!i&&na(a,\"script\")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent=\"\");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if(\"string\"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||[\"\",\"\"])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(na(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ja(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(na(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var La=/^margin/,Ma=new RegExp(\"^(\"+aa+\")(?!px)[a-z%]+$\",\"i\"),Na=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText=\"box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%\",i.innerHTML=\"\",ra.appendChild(h);var b=a.getComputedStyle(i);c=\"1%\"!==b.top,g=\"2px\"===b.marginLeft,e=\"4px\"===b.width,i.style.marginRight=\"50%\",f=\"4px\"===b.marginRight,ra.removeChild(h),i=null}}var c,e,f,g,h=d.createElement(\"div\"),i=d.createElement(\"div\");i.style&&(i.style.backgroundClip=\"content-box\",i.cloneNode(!0).style.backgroundClip=\"\",o.clearCloneStyle=\"content-box\"===i.style.backgroundClip,h.style.cssText=\"border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute\",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Oa(a,b,c){var d,e,f,g,h=a.style;return c=c||Na(a),c&&(g=c.getPropertyValue(b)||c[b],\"\"!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ma.test(g)&&La.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+\"\":g}function Pa(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Qa=/^(none|table(?!-c[ea]).+)/,Ra=/^--/,Sa={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Ta={letterSpacing:\"0\",fontWeight:\"400\"},Ua=[\"Webkit\",\"Moz\",\"ms\"],Va=d.createElement(\"div\").style;function Wa(a){if(a in Va)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ua.length;while(c--)if(a=Ua[c]+b,a in Va)return a}function Xa(a){var b=r.cssProps[a];return b||(b=r.cssProps[a]=Wa(a)||a),b}function Ya(a,b,c){var d=ba.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||\"px\"):b}function Za(a,b,c,d,e){var f,g=0;for(f=c===(d?\"border\":\"content\")?4:\"width\"===b?1:0;f<4;f+=2)\"margin\"===c&&(g+=r.css(a,c+ca[f],!0,e)),d?(\"content\"===c&&(g-=r.css(a,\"padding\"+ca[f],!0,e)),\"margin\"!==c&&(g-=r.css(a,\"border\"+ca[f]+\"Width\",!0,e))):(g+=r.css(a,\"padding\"+ca[f],!0,e),\"padding\"!==c&&(g+=r.css(a,\"border\"+ca[f]+\"Width\",!0,e)));return g}function $a(a,b,c){var d,e=Na(a),f=Oa(a,b,e),g=\"border-box\"===r.css(a,\"boxSizing\",!1,e);return Ma.test(f)?f:(d=g&&(o.boxSizingReliable()||f===a.style[b]),\"auto\"===f&&(f=a[\"offset\"+b[0].toUpperCase()+b.slice(1)]),f=parseFloat(f)||0,f+Za(a,b,c||(g?\"border\":\"content\"),d,e)+\"px\")}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Oa(a,\"opacity\");return\"\"===c?\"1\":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{\"float\":\"cssFloat\"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=Ra.test(b),j=a.style;return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&\"get\"in g&&void 0!==(e=g.get(a,!1,d))?e:j[b]:(f=typeof c,\"string\"===f&&(e=ba.exec(c))&&e[1]&&(c=fa(a,b,e),f=\"number\"),null!=c&&c===c&&(\"number\"===f&&(c+=e&&e[3]||(r.cssNumber[h]?\"\":\"px\")),o.clearCloneStyle||\"\"!==c||0!==b.indexOf(\"background\")||(j[b]=\"inherit\"),g&&\"set\"in g&&void 0===(c=g.set(a,c,d))||(i?j.setProperty(b,c):j[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b),i=Ra.test(b);return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],g&&\"get\"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Oa(a,b,d)),\"normal\"===e&&b in Ta&&(e=Ta[b]),\"\"===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each([\"height\",\"width\"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Qa.test(r.css(a,\"display\"))||a.getClientRects().length&&a.getBoundingClientRect().width?$a(a,b,d):ea(a,Sa,function(){return $a(a,b,d)})},set:function(a,c,d){var e,f=d&&Na(a),g=d&&Za(a,b,d,\"border-box\"===r.css(a,\"boxSizing\",!1,f),f);return g&&(e=ba.exec(c))&&\"px\"!==(e[3]||\"px\")&&(a.style[b]=c,c=r.css(a,b)),Ya(a,c,g)}}}),r.cssHooks.marginLeft=Pa(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Oa(a,\"marginLeft\"))||a.getBoundingClientRect().left-ea(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+\"px\"}),r.each({margin:\"\",padding:\"\",border:\"Width\"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f=\"string\"==typeof c?c.split(\" \"):[c];d<4;d++)e[a+ca[d]+b]=f[d]||f[d-2]||f[0];return e}},La.test(a)||(r.cssHooks[a+b].set=Ya)}),r.fn.extend({css:function(a,b){return T(this,function(a,b,c){var d,e,f={},g=0;if(Array.isArray(b)){for(d=Na(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?\"\":\"px\")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,\"\"),b&&\"auto\"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:\"swing\"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e[\"margin\"+c]=e[\"padding\"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners[\"*\"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,k,l=\"width\"in b||\"height\"in b,m=this,n={},o=a.style,p=a.nodeType&&da(a),q=W.get(a,\"fxshow\");c.queue||(g=r._queueHooks(a,\"fx\"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,\"fx\").length||g.empty.fire()})}));for(d in b)if(e=b[d],cb.test(e)){if(delete b[d],f=f||\"toggle\"===e,e===(p?\"hide\":\"show\")){if(\"show\"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=W.get(a,\"display\")),k=r.css(a,\"display\"),\"none\"===k&&(j?k=j:(ia([a],!0),j=a.style.display||j,k=r.css(a,\"display\"),ia([a]))),(\"inline\"===k||\"inline-block\"===k&&null!=j)&&\"none\"===r.css(a,\"float\")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j=\"none\"===k?\"\":k)),o.display=\"inline-block\")),c.overflow&&(o.overflow=\"hidden\",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?\"hidden\"in q&&(p=q.hidden):q=W.access(a,\"fxshow\",{display:j}),f&&(q.hidden=!p),p&&ia([a],!0),m.done(function(){p||ia([a]),W.remove(a,\"fxshow\");for(d in n)r.style(a,d,n[d])})),i=hb(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],Array.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.cssHooks[d],g&&\"expand\"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=kb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=ab||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;g<i;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),f<1&&i?c:(i||h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:ab||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;c<d;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);f<g;f++)if(d=kb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,hb,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j}r.Animation=r.extend(kb,{tweeners:{\"*\":[function(a,b){var c=this.createTween(a,b);return fa(c.elem,a,ba.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=[\"*\"]):a=a.match(L);for(var c,d=0,e=a.length;d<e;d++)c=a[d],kb.tweeners[c]=kb.tweeners[c]||[],kb.tweeners[c].unshift(b)},prefilters:[ib],prefilter:function(a,b){b?kb.prefilters.unshift(a):kb.prefilters.push(a)}}),r.speed=function(a,b,c){var d=a&&\"object\"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off?d.duration=0:\"number\"!=typeof d.duration&&(d.duration in r.fx.speeds?d.duration=r.fx.speeds[d.duration]:d.duration=r.fx.speeds._default),null!=d.queue&&d.queue!==!0||(d.queue=\"fx\"),d.old=d.complete,d.complete=function(){r.isFunction(d.old)&&d.old.call(this),d.queue&&r.dequeue(this,d.queue)},d},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(da).css(\"opacity\",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=kb(this,r.extend({},a),f);(e||W.get(this,\"finish\"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return\"string\"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||\"fx\",[]),this.each(function(){var b=!0,e=null!=a&&a+\"queueHooks\",f=r.timers,g=W.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&db.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||\"fx\"),this.each(function(){var b,c=W.get(this),d=c[a+\"queue\"],e=c[a+\"queueHooks\"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;b<g;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),r.each([\"toggle\",\"show\",\"hide\"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||\"boolean\"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),r.each({slideDown:gb(\"show\"),slideUp:gb(\"hide\"),slideToggle:gb(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(ab=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),ab=void 0},r.fx.timer=function(a){r.timers.push(a),r.fx.start()},r.fx.interval=13,r.fx.start=function(){bb||(bb=!0,eb())},r.fx.stop=function(){bb=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||\"fx\",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement(\"input\"),b=d.createElement(\"select\"),c=b.appendChild(d.createElement(\"option\"));a.type=\"checkbox\",o.checkOn=\"\"!==a.value,o.optSelected=c.selected,a=d.createElement(\"input\"),a.value=\"t\",a.type=\"radio\",o.radioValue=\"t\"===a.value}();var lb,mb=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return T(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return\"undefined\"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&\"set\"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+\"\"),c):e&&\"get\"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),\nnull==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&\"radio\"===b&&B(a,\"input\")){var c=a.value;return a.setAttribute(\"type\",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&\"set\"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&\"get\"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,\"tabindex\");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(\" \")}function qb(a){return a.getAttribute&&a.getAttribute(\"class\")||\"\"}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if(\"string\"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&\" \"+pb(e)+\" \"){g=0;while(f=b[g++])d.indexOf(\" \"+f+\" \")<0&&(d+=f+\" \");h=pb(d),e!==h&&c.setAttribute(\"class\",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if(\"string\"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&\" \"+pb(e)+\" \"){g=0;while(f=b[g++])while(d.indexOf(\" \"+f+\" \")>-1)d=d.replace(\" \"+f+\" \",\" \");h=pb(d),e!==h&&c.setAttribute(\"class\",h)}}return this},toggleClass:function(a,b){var c=typeof a;return\"boolean\"==typeof b&&\"string\"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if(\"string\"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&\"boolean\"!==c||(b=qb(this),b&&W.set(this,\"__className__\",b),this.setAttribute&&this.setAttribute(\"class\",b||a===!1?\"\":W.get(this,\"__className__\")||\"\"))})},hasClass:function(a){var b,c,d=0;b=\" \"+a+\" \";while(c=this[d++])if(1===c.nodeType&&(\" \"+pb(qb(c))+\" \").indexOf(b)>-1)return!0;return!1}});var rb=/\\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e=\"\":\"number\"==typeof e?e+=\"\":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?\"\":a+\"\"})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&\"set\"in b&&void 0!==b.set(this,e,\"value\")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&\"get\"in b&&void 0!==(c=b.get(e,\"value\"))?c:(c=e.value,\"string\"==typeof c?c.replace(rb,\"\"):null==c?\"\":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,\"value\");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g=\"select-one\"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d<i;d++)if(c=e[d],(c.selected||d===f)&&!c.disabled&&(!c.parentNode.disabled||!B(c.parentNode,\"optgroup\"))){if(b=r(c).val(),g)return b;h.push(b)}return h},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each([\"radio\",\"checkbox\"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute(\"value\")?\"on\":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,\"type\")?b.type:b,q=l.call(b,\"namespace\")?b.namespace.split(\".\"):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(\".\")>-1&&(q=p.split(\".\"),p=q.shift(),q.sort()),k=p.indexOf(\":\")<0&&\"on\"+p,b=b[r.expando]?b:new r.Event(p,\"object\"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join(\".\"),b.rnamespace=b.namespace?new RegExp(\"(^|\\\\.)\"+q.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,\"events\")||{})[b.type]&&W.get(h,\"handle\"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin=\"onfocusin\"in a,o.focusin||r.each({focus:\"focusin\",blur:\"focusout\"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\\?/;r.parseXML=function(b){var c;if(!b||\"string\"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,\"text/xml\")}catch(d){c=void 0}return c&&!c.getElementsByTagName(\"parsererror\").length||r.error(\"Invalid XML: \"+b),c};var wb=/\\[\\]$/,xb=/\\r?\\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+\"[\"+(\"object\"==typeof e&&null!=e?b:\"\")+\"]\",e,c,d)});else if(c||\"object\"!==r.type(b))d(a,b);else for(e in b)Ab(a+\"[\"+e+\"]\",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+\"=\"+encodeURIComponent(null==c?\"\":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join(\"&\")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,\"elements\");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(\":disabled\")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,\"\\r\\n\")}}):{name:b.name,value:c.replace(xb,\"\\r\\n\")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\\/\\//,Ib={},Jb={},Kb=\"*/\".concat(\"*\"),Lb=d.createElement(\"a\");Lb.href=tb.href;function Mb(a){return function(b,c){\"string\"!=typeof b&&(c=b,b=\"*\");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])\"+\"===d[0]?(d=d.slice(1)||\"*\",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return\"string\"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e[\"*\"]&&g(\"*\")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while(\"*\"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader(\"Content-Type\"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+\" \"+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if(\"*\"===f)f=i;else if(\"*\"!==i&&i!==f){if(g=j[i+\" \"+f]||j[\"* \"+f],!g)for(e in j)if(h=e.split(\" \"),h[1]===f&&(g=j[i+\" \"+h[0]]||j[\"* \"+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a[\"throws\"])b=g(b);else try{b=g(b)}catch(l){return{state:\"parsererror\",error:g?l:\"No conversion from \"+i+\" to \"+f}}}return{state:\"success\",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:\"GET\",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Kb,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){\"object\"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks(\"once memory\"),u=o.statusCode||{},v={},w={},x=\"canceled\",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+\"\").replace(Hb,tb.protocol+\"//\"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||\"*\").toLowerCase().match(L)||[\"\"],null==o.crossDomain){j=d.createElement(\"a\");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+\"//\"+Lb.host!=j.protocol+\"//\"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&\"string\"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger(\"ajaxStart\"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,\"\"),o.hasContent?o.data&&o.processData&&0===(o.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(o.data=o.data.replace(Bb,\"+\")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?\"&\":\"?\")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,\"$1\"),n=(vb.test(f)?\"&\":\"?\")+\"_=\"+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader(\"If-Modified-Since\",r.lastModified[f]),r.etag[f]&&y.setRequestHeader(\"If-None-Match\",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader(\"Content-Type\",o.contentType),y.setRequestHeader(\"Accept\",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+(\"*\"!==o.dataTypes[0]?\", \"+Kb+\"; q=0.01\":\"\"):o.accepts[\"*\"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x=\"abort\",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger(\"ajaxSend\",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort(\"timeout\")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,\"No Transport\");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||\"\",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader(\"Last-Modified\"),w&&(r.lastModified[f]=w),w=y.getResponseHeader(\"etag\"),w&&(r.etag[f]=w)),204===b||\"HEAD\"===o.type?x=\"nocontent\":304===b?x=\"notmodified\":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x=\"error\",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+\"\",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?\"ajaxSuccess\":\"ajaxError\",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger(\"ajaxComplete\",[y,o]),--r.active||r.event.trigger(\"ajaxStop\")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,\"json\")},getScript:function(a,b){return r.get(a,void 0,b,\"script\")}}),r.each([\"get\",\"post\"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,\"throws\":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not(\"body\").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&\"withCredentials\"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e[\"X-Requested-With\"]||(e[\"X-Requested-With\"]=\"XMLHttpRequest\");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,\"abort\"===a?h.abort():\"error\"===a?\"number\"!=typeof h.status?f(0,\"error\"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,\"text\"!==(h.responseType||\"text\")||\"string\"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c(\"error\"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c(\"abort\");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter(\"script\",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type=\"GET\")}),r.ajaxTransport(\"script\",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r(\"<script>\").prop({charset:a.scriptCharset,src:a.url}).on(\"load error\",c=function(a){b.remove(),c=null,a&&f(\"error\"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Tb=[],Ub=/(=)\\?(?=&|$)|\\?\\?/;r.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var a=Tb.pop()||r.expando+\"_\"+ub++;return this[a]=!0,a}}),r.ajaxPrefilter(\"json jsonp\",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Ub.test(b.url)?\"url\":\"string\"==typeof b.data&&0===(b.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Ub.test(b.data)&&\"data\");if(h||\"jsonp\"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Ub,\"$1\"+e):b.jsonp!==!1&&(b.url+=(vb.test(b.url)?\"&\":\"?\")+b.jsonp+\"=\"+e),b.converters[\"script json\"]=function(){return g||r.error(e+\" was not called\"),g[0]},b.dataTypes[0]=\"json\",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Tb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),\"script\"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument(\"\").body;return a.innerHTML=\"<form></form><form></form>\",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if(\"string\"!=typeof a)return[];\"boolean\"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(\"\"),e=b.createElement(\"base\"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=C.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=qa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(\" \");return h>-1&&(d=pb(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&\"object\"==typeof b&&(e=\"POST\"),g.length>0&&r.ajax({url:a,type:e||\"GET\",dataType:\"html\",data:b}).done(function(a){f=arguments,g.html(d?r(\"<div>\").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length},r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,\"position\"),l=r(a),m={};\"static\"===k&&(a.style.position=\"relative\"),h=l.offset(),f=r.css(a,\"top\"),i=r.css(a,\"left\"),j=(\"absolute\"===k||\"fixed\"===k)&&(f+i).indexOf(\"auto\")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),\"using\"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),b=f.ownerDocument,c=b.documentElement,e=b.defaultView,{top:d.top+e.pageYOffset-c.clientTop,left:d.left+e.pageXOffset-c.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return\"fixed\"===r.css(c,\"position\")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),B(a[0],\"html\")||(d=a.offset()),d={top:d.top+r.css(a[0],\"borderTopWidth\",!0),left:d.left+r.css(a[0],\"borderLeftWidth\",!0)}),{top:b.top-d.top-r.css(c,\"marginTop\",!0),left:b.left-d.left-r.css(c,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&\"static\"===r.css(a,\"position\"))a=a.offsetParent;return a||ra})}}),r.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(a,b){var c=\"pageYOffset\"===b;r.fn[a]=function(d){return T(this,function(a,d,e){var f;return r.isWindow(a)?f=a:9===a.nodeType&&(f=a.defaultView),void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each([\"top\",\"left\"],function(a,b){r.cssHooks[b]=Pa(o.pixelPosition,function(a,c){if(c)return c=Oa(a,b),Ma.test(c)?r(a).position()[b]+\"px\":c})}),r.each({Height:\"height\",Width:\"width\"},function(a,b){r.each({padding:\"inner\"+a,content:b,\"\":\"outer\"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||\"boolean\"!=typeof e),h=c||(e===!0||f===!0?\"margin\":\"border\");return T(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf(\"outer\")?b[\"inner\"+a]:b.document.documentElement[\"client\"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body[\"scroll\"+a],f[\"scroll\"+a],b.body[\"offset\"+a],f[\"offset\"+a],f[\"client\"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,\"**\"):this.off(b,a||\"**\",c)}}),r.holdReady=function(a){a?r.readyWait++:r.ready(!0)},r.isArray=Array.isArray,r.parseJSON=JSON.parse,r.nodeName=B,\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return r});var Vb=a.jQuery,Wb=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Wb),b&&a.jQuery===r&&(a.jQuery=Vb),r},b||(a.jQuery=a.$=r),r});\n","/*\n Copyright (C) Federico Zivolo 2017\n Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT).\n */(function(e,t){'object'==typeof exports&&'undefined'!=typeof module?module.exports=t():'function'==typeof define&&define.amd?define(t):e.Popper=t()})(this,function(){'use strict';function e(e){return e&&'[object Function]'==={}.toString.call(e)}function t(e,t){if(1!==e.nodeType)return[];var o=window.getComputedStyle(e,null);return t?o[t]:o}function o(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}function n(e){if(!e||-1!==['HTML','BODY','#document'].indexOf(e.nodeName))return window.document.body;var i=t(e),r=i.overflow,p=i.overflowX,s=i.overflowY;return /(auto|scroll)/.test(r+s+p)?e:n(o(e))}function r(e){var o=e&&e.offsetParent,i=o&&o.nodeName;return i&&'BODY'!==i&&'HTML'!==i?-1!==['TD','TABLE'].indexOf(o.nodeName)&&'static'===t(o,'position')?r(o):o:window.document.documentElement}function p(e){var t=e.nodeName;return'BODY'!==t&&('HTML'===t||r(e.firstElementChild)===e)}function s(e){return null===e.parentNode?e:s(e.parentNode)}function d(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return window.document.documentElement;var o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,i=o?e:t,n=o?t:e,a=document.createRange();a.setStart(i,0),a.setEnd(n,0);var l=a.commonAncestorContainer;if(e!==l&&t!==l||i.contains(n))return p(l)?l:r(l);var f=s(e);return f.host?d(f.host,t):d(e,s(t).host)}function a(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:'top',o='top'===t?'scrollTop':'scrollLeft',i=e.nodeName;if('BODY'===i||'HTML'===i){var n=window.document.documentElement,r=window.document.scrollingElement||n;return r[o]}return e[o]}function l(e,t){var o=2<arguments.length&&void 0!==arguments[2]&&arguments[2],i=a(t,'top'),n=a(t,'left'),r=o?-1:1;return e.top+=i*r,e.bottom+=i*r,e.left+=n*r,e.right+=n*r,e}function f(e,t){var o='x'===t?'Left':'Top',i='Left'==o?'Right':'Bottom';return+e['border'+o+'Width'].split('px')[0]+ +e['border'+i+'Width'].split('px')[0]}function m(e,t,o,i){return X(t['offset'+e],t['scroll'+e],o['client'+e],o['offset'+e],o['scroll'+e],ne()?o['offset'+e]+i['margin'+('Height'===e?'Top':'Left')]+i['margin'+('Height'===e?'Bottom':'Right')]:0)}function c(){var e=window.document.body,t=window.document.documentElement,o=ne()&&window.getComputedStyle(t);return{height:m('Height',e,t,o),width:m('Width',e,t,o)}}function h(e){return de({},e,{right:e.left+e.width,bottom:e.top+e.height})}function g(e){var o={};if(ne())try{o=e.getBoundingClientRect();var i=a(e,'top'),n=a(e,'left');o.top+=i,o.left+=n,o.bottom+=i,o.right+=n}catch(e){}else o=e.getBoundingClientRect();var r={left:o.left,top:o.top,width:o.right-o.left,height:o.bottom-o.top},p='HTML'===e.nodeName?c():{},s=p.width||e.clientWidth||r.right-r.left,d=p.height||e.clientHeight||r.bottom-r.top,l=e.offsetWidth-s,m=e.offsetHeight-d;if(l||m){var g=t(e);l-=f(g,'x'),m-=f(g,'y'),r.width-=l,r.height-=m}return h(r)}function u(e,o){var i=ne(),r='HTML'===o.nodeName,p=g(e),s=g(o),d=n(e),a=t(o),f=+a.borderTopWidth.split('px')[0],m=+a.borderLeftWidth.split('px')[0],c=h({top:p.top-s.top-f,left:p.left-s.left-m,width:p.width,height:p.height});if(c.marginTop=0,c.marginLeft=0,!i&&r){var u=+a.marginTop.split('px')[0],b=+a.marginLeft.split('px')[0];c.top-=f-u,c.bottom-=f-u,c.left-=m-b,c.right-=m-b,c.marginTop=u,c.marginLeft=b}return(i?o.contains(d):o===d&&'BODY'!==d.nodeName)&&(c=l(c,o)),c}function b(e){var t=window.document.documentElement,o=u(e,t),i=X(t.clientWidth,window.innerWidth||0),n=X(t.clientHeight,window.innerHeight||0),r=a(t),p=a(t,'left'),s={top:r-o.top+o.marginTop,left:p-o.left+o.marginLeft,width:i,height:n};return h(s)}function y(e){var i=e.nodeName;return'BODY'===i||'HTML'===i?!1:'fixed'===t(e,'position')||y(o(e))}function w(e,t,i,r){var p={top:0,left:0},s=d(e,t);if('viewport'===r)p=b(s);else{var a;'scrollParent'===r?(a=n(o(e)),'BODY'===a.nodeName&&(a=window.document.documentElement)):'window'===r?a=window.document.documentElement:a=r;var l=u(a,s);if('HTML'===a.nodeName&&!y(s)){var f=c(),m=f.height,h=f.width;p.top+=l.top-l.marginTop,p.bottom=m+l.top,p.left+=l.left-l.marginLeft,p.right=h+l.left}else p=l}return p.left+=i,p.top+=i,p.right-=i,p.bottom-=i,p}function E(e){var t=e.width,o=e.height;return t*o}function v(e,t,o,i,n){var r=5<arguments.length&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf('auto'))return e;var p=w(o,i,r,n),s={top:{width:p.width,height:t.top-p.top},right:{width:p.right-t.right,height:p.height},bottom:{width:p.width,height:p.bottom-t.bottom},left:{width:t.left-p.left,height:p.height}},d=Object.keys(s).map(function(e){return de({key:e},s[e],{area:E(s[e])})}).sort(function(e,t){return t.area-e.area}),a=d.filter(function(e){var t=e.width,i=e.height;return t>=o.clientWidth&&i>=o.clientHeight}),l=0<a.length?a[0].key:d[0].key,f=e.split('-')[1];return l+(f?'-'+f:'')}function x(e,t,o){var i=d(t,o);return u(o,i)}function O(e){var t=window.getComputedStyle(e),o=parseFloat(t.marginTop)+parseFloat(t.marginBottom),i=parseFloat(t.marginLeft)+parseFloat(t.marginRight),n={width:e.offsetWidth+i,height:e.offsetHeight+o};return n}function L(e){var t={left:'right',right:'left',bottom:'top',top:'bottom'};return e.replace(/left|right|bottom|top/g,function(e){return t[e]})}function S(e,t,o){o=o.split('-')[0];var i=O(e),n={width:i.width,height:i.height},r=-1!==['right','left'].indexOf(o),p=r?'top':'left',s=r?'left':'top',d=r?'height':'width',a=r?'width':'height';return n[p]=t[p]+t[d]/2-i[d]/2,n[s]=o===s?t[s]-i[a]:t[L(s)],n}function T(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function C(e,t,o){if(Array.prototype.findIndex)return e.findIndex(function(e){return e[t]===o});var i=T(e,function(e){return e[t]===o});return e.indexOf(i)}function N(t,o,i){var n=void 0===i?t:t.slice(0,C(t,'name',i));return n.forEach(function(t){t.function&&console.warn('`modifier.function` is deprecated, use `modifier.fn`!');var i=t.function||t.fn;t.enabled&&e(i)&&(o.offsets.popper=h(o.offsets.popper),o.offsets.reference=h(o.offsets.reference),o=i(o,t))}),o}function k(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=x(this.state,this.popper,this.reference),e.placement=v(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.offsets.popper=S(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position='absolute',e=N(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}function W(e,t){return e.some(function(e){var o=e.name,i=e.enabled;return i&&o===t})}function B(e){for(var t=[!1,'ms','Webkit','Moz','O'],o=e.charAt(0).toUpperCase()+e.slice(1),n=0;n<t.length-1;n++){var i=t[n],r=i?''+i+o:e;if('undefined'!=typeof window.document.body.style[r])return r}return null}function P(){return this.state.isDestroyed=!0,W(this.modifiers,'applyStyle')&&(this.popper.removeAttribute('x-placement'),this.popper.style.left='',this.popper.style.position='',this.popper.style.top='',this.popper.style[B('transform')]=''),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}function D(e,t,o,i){var r='BODY'===e.nodeName,p=r?window:e;p.addEventListener(t,o,{passive:!0}),r||D(n(p.parentNode),t,o,i),i.push(p)}function H(e,t,o,i){o.updateBound=i,window.addEventListener('resize',o.updateBound,{passive:!0});var r=n(e);return D(r,'scroll',o.updateBound,o.scrollParents),o.scrollElement=r,o.eventsEnabled=!0,o}function A(){this.state.eventsEnabled||(this.state=H(this.reference,this.options,this.state,this.scheduleUpdate))}function M(e,t){return window.removeEventListener('resize',t.updateBound),t.scrollParents.forEach(function(e){e.removeEventListener('scroll',t.updateBound)}),t.updateBound=null,t.scrollParents=[],t.scrollElement=null,t.eventsEnabled=!1,t}function I(){this.state.eventsEnabled&&(window.cancelAnimationFrame(this.scheduleUpdate),this.state=M(this.reference,this.state))}function R(e){return''!==e&&!isNaN(parseFloat(e))&&isFinite(e)}function U(e,t){Object.keys(t).forEach(function(o){var i='';-1!==['width','height','top','right','bottom','left'].indexOf(o)&&R(t[o])&&(i='px'),e.style[o]=t[o]+i})}function Y(e,t){Object.keys(t).forEach(function(o){var i=t[o];!1===i?e.removeAttribute(o):e.setAttribute(o,t[o])})}function F(e,t,o){var i=T(e,function(e){var o=e.name;return o===t}),n=!!i&&e.some(function(e){return e.name===o&&e.enabled&&e.order<i.order});if(!n){var r='`'+t+'`';console.warn('`'+o+'`'+' modifier is required by '+r+' modifier in order to work, be sure to include it before '+r+'!')}return n}function j(e){return'end'===e?'start':'start'===e?'end':e}function K(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1],o=le.indexOf(e),i=le.slice(o+1).concat(le.slice(0,o));return t?i.reverse():i}function q(e,t,o,i){var n=e.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/),r=+n[1],p=n[2];if(!r)return e;if(0===p.indexOf('%')){var s;switch(p){case'%p':s=o;break;case'%':case'%r':default:s=i;}var d=h(s);return d[t]/100*r}if('vh'===p||'vw'===p){var a;return a='vh'===p?X(document.documentElement.clientHeight,window.innerHeight||0):X(document.documentElement.clientWidth,window.innerWidth||0),a/100*r}return r}function G(e,t,o,i){var n=[0,0],r=-1!==['right','left'].indexOf(i),p=e.split(/(\\+|\\-)/).map(function(e){return e.trim()}),s=p.indexOf(T(p,function(e){return-1!==e.search(/,|\\s/)}));p[s]&&-1===p[s].indexOf(',')&&console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');var d=/\\s*,\\s*|\\s+/,a=-1===s?[p]:[p.slice(0,s).concat([p[s].split(d)[0]]),[p[s].split(d)[1]].concat(p.slice(s+1))];return a=a.map(function(e,i){var n=(1===i?!r:r)?'height':'width',p=!1;return e.reduce(function(e,t){return''===e[e.length-1]&&-1!==['+','-'].indexOf(t)?(e[e.length-1]=t,p=!0,e):p?(e[e.length-1]+=t,p=!1,e):e.concat(t)},[]).map(function(e){return q(e,n,t,o)})}),a.forEach(function(e,t){e.forEach(function(o,i){R(o)&&(n[t]+=o*('-'===e[i-1]?-1:1))})}),n}function z(e,t){var o,i=t.offset,n=e.placement,r=e.offsets,p=r.popper,s=r.reference,d=n.split('-')[0];return o=R(+i)?[+i,0]:G(i,p,s,d),'left'===d?(p.top+=o[0],p.left-=o[1]):'right'===d?(p.top+=o[0],p.left+=o[1]):'top'===d?(p.left+=o[0],p.top-=o[1]):'bottom'===d&&(p.left+=o[0],p.top+=o[1]),e.popper=p,e}for(var V=Math.min,_=Math.floor,X=Math.max,Q=['native code','[object MutationObserverConstructor]'],J=function(e){return Q.some(function(t){return-1<(e||'').toString().indexOf(t)})},Z='undefined'!=typeof window,$=['Edge','Trident','Firefox'],ee=0,te=0;te<$.length;te+=1)if(Z&&0<=navigator.userAgent.indexOf($[te])){ee=1;break}var i,oe=Z&&J(window.MutationObserver),ie=oe?function(e){var t=!1,o=0,i=document.createElement('span'),n=new MutationObserver(function(){e(),t=!1});return n.observe(i,{attributes:!0}),function(){t||(t=!0,i.setAttribute('x-index',o),++o)}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout(function(){t=!1,e()},ee))}},ne=function(){return void 0==i&&(i=-1!==navigator.appVersion.indexOf('MSIE 10')),i},re=function(e,t){if(!(e instanceof t))throw new TypeError('Cannot call a class as a function')},pe=function(){function e(e,t){for(var o,n=0;n<t.length;n++)o=t[n],o.enumerable=o.enumerable||!1,o.configurable=!0,'value'in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}return function(t,o,i){return o&&e(t.prototype,o),i&&e(t,i),t}}(),se=function(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e},de=Object.assign||function(e){for(var t,o=1;o<arguments.length;o++)for(var i in t=arguments[o],t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},ae=['auto-start','auto','auto-end','top-start','top','top-end','right-start','right','right-end','bottom-end','bottom','bottom-start','left-end','left','left-start'],le=ae.slice(3),fe={FLIP:'flip',CLOCKWISE:'clockwise',COUNTERCLOCKWISE:'counterclockwise'},me=function(){function t(o,i){var n=this,r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};re(this,t),this.scheduleUpdate=function(){return requestAnimationFrame(n.update)},this.update=ie(this.update.bind(this)),this.options=de({},t.Defaults,r),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=o.jquery?o[0]:o,this.popper=i.jquery?i[0]:i,this.options.modifiers={},Object.keys(de({},t.Defaults.modifiers,r.modifiers)).forEach(function(e){n.options.modifiers[e]=de({},t.Defaults.modifiers[e]||{},r.modifiers?r.modifiers[e]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(e){return de({name:e},n.options.modifiers[e])}).sort(function(e,t){return e.order-t.order}),this.modifiers.forEach(function(t){t.enabled&&e(t.onLoad)&&t.onLoad(n.reference,n.popper,n.options,t,n.state)}),this.update();var p=this.options.eventsEnabled;p&&this.enableEventListeners(),this.state.eventsEnabled=p}return pe(t,[{key:'update',value:function(){return k.call(this)}},{key:'destroy',value:function(){return P.call(this)}},{key:'enableEventListeners',value:function(){return A.call(this)}},{key:'disableEventListeners',value:function(){return I.call(this)}}]),t}();return me.Utils=('undefined'==typeof window?global:window).PopperUtils,me.placements=ae,me.Defaults={placement:'bottom',eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(e){var t=e.placement,o=t.split('-')[0],i=t.split('-')[1];if(i){var n=e.offsets,r=n.reference,p=n.popper,s=-1!==['bottom','top'].indexOf(o),d=s?'left':'top',a=s?'width':'height',l={start:se({},d,r[d]),end:se({},d,r[d]+r[a]-p[a])};e.offsets.popper=de({},p,l[i])}return e}},offset:{order:200,enabled:!0,fn:z,offset:0},preventOverflow:{order:300,enabled:!0,fn:function(e,t){var o=t.boundariesElement||r(e.instance.popper);e.instance.reference===o&&(o=r(o));var i=w(e.instance.popper,e.instance.reference,t.padding,o);t.boundaries=i;var n=t.priority,p=e.offsets.popper,s={primary:function(e){var o=p[e];return p[e]<i[e]&&!t.escapeWithReference&&(o=X(p[e],i[e])),se({},e,o)},secondary:function(e){var o='right'===e?'left':'top',n=p[o];return p[e]>i[e]&&!t.escapeWithReference&&(n=V(p[o],i[e]-('right'===e?p.width:p.height))),se({},o,n)}};return n.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';p=de({},p,s[t](e))}),e.offsets.popper=p,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,i=t.reference,n=e.placement.split('-')[0],r=_,p=-1!==['top','bottom'].indexOf(n),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]<r(i[d])&&(e.offsets.popper[d]=r(i[d])-o[a]),o[d]>r(i[s])&&(e.offsets.popper[d]=r(i[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,o){if(!F(e.instance.modifiers,'arrow','keepTogether'))return e;var i=o.element;if('string'==typeof i){if(i=e.instance.popper.querySelector(i),!i)return e;}else if(!e.instance.popper.contains(i))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var n=e.placement.split('-')[0],r=e.offsets,p=r.popper,s=r.reference,d=-1!==['left','right'].indexOf(n),a=d?'height':'width',l=d?'Top':'Left',f=l.toLowerCase(),m=d?'left':'top',c=d?'bottom':'right',g=O(i)[a];s[c]-g<p[f]&&(e.offsets.popper[f]-=p[f]-(s[c]-g)),s[f]+g>p[c]&&(e.offsets.popper[f]+=s[f]+g-p[c]);var u=s[f]+s[a]/2-g/2,b=t(e.instance.popper,'margin'+l).replace('px',''),y=u-h(e.offsets.popper)[f]-b;return y=X(V(p[a]-g,y),0),e.arrowElement=i,e.offsets.arrow={},e.offsets.arrow[f]=Math.round(y),e.offsets.arrow[m]='',e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(W(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=w(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement),i=e.placement.split('-')[0],n=L(i),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case fe.FLIP:p=[i,n];break;case fe.CLOCKWISE:p=K(i);break;case fe.COUNTERCLOCKWISE:p=K(i,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(i!==s||p.length===d+1)return e;i=e.placement.split('-')[0],n=L(i);var a=e.offsets.popper,l=e.offsets.reference,f=_,m='left'===i&&f(a.right)>f(l.left)||'right'===i&&f(a.left)<f(l.right)||'top'===i&&f(a.bottom)>f(l.top)||'bottom'===i&&f(a.top)<f(l.bottom),c=f(a.left)<f(o.left),h=f(a.right)>f(o.right),g=f(a.top)<f(o.top),u=f(a.bottom)>f(o.bottom),b='left'===i&&c||'right'===i&&h||'top'===i&&g||'bottom'===i&&u,y=-1!==['top','bottom'].indexOf(i),w=!!t.flipVariations&&(y&&'start'===r&&c||y&&'end'===r&&h||!y&&'start'===r&&g||!y&&'end'===r&&u);(m||b||w)&&(e.flipped=!0,(m||b)&&(i=p[d+1]),w&&(r=j(r)),e.placement=i+(r?'-'+r:''),e.offsets.popper=de({},e.offsets.popper,S(e.instance.popper,e.offsets.reference,e.placement)),e=N(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport'},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],i=e.offsets,n=i.popper,r=i.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return n[p?'left':'top']=r[o]-(s?n[p?'width':'height']:0),e.placement=L(t),e.offsets.popper=h(n),e}},hide:{order:800,enabled:!0,fn:function(e){if(!F(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=T(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottom<o.top||t.left>o.right||t.top>o.bottom||t.right<o.left){if(!0===e.hide)return e;e.hide=!0,e.attributes['x-out-of-boundaries']=''}else{if(!1===e.hide)return e;e.hide=!1,e.attributes['x-out-of-boundaries']=!1}return e}},computeStyle:{order:850,enabled:!0,fn:function(e,t){var o=t.x,i=t.y,n=e.offsets.popper,p=T(e.instance.modifiers,function(e){return'applyStyle'===e.name}).gpuAcceleration;void 0!==p&&console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');var s,d,a=void 0===p?t.gpuAcceleration:p,l=r(e.instance.popper),f=g(l),m={position:n.position},c={left:_(n.left),top:_(n.top),bottom:_(n.bottom),right:_(n.right)},h='bottom'===o?'top':'bottom',u='right'===i?'left':'right',b=B('transform');if(d='bottom'==h?-f.height+c.bottom:c.top,s='right'==u?-f.width+c.right:c.left,a&&b)m[b]='translate3d('+s+'px, '+d+'px, 0)',m[h]=0,m[u]=0,m.willChange='transform';else{var y='bottom'==h?-1:1,w='right'==u?-1:1;m[h]=d*y,m[u]=s*w,m.willChange=h+', '+u}var E={\"x-placement\":e.placement};return e.attributes=de({},E,e.attributes),e.styles=de({},m,e.styles),e.arrowStyles=de({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:'bottom',y:'right'},applyStyle:{order:900,enabled:!0,fn:function(e){return U(e.instance.popper,e.styles),Y(e.instance.popper,e.attributes),e.arrowElement&&Object.keys(e.arrowStyles).length&&U(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,o,i,n){var r=x(n,t,e),p=v(o.placement,r,t,e,o.modifiers.flip.boundariesElement,o.modifiers.flip.padding);return t.setAttribute('x-placement',p),U(t,{position:'absolute'}),o},gpuAcceleration:void 0}}},me});\n","/*!\n * Bootstrap v4.0.0-beta (https://getbootstrap.com)\n * Copyright 2011-2017 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\nif(\"undefined\"==typeof jQuery)throw new Error(\"Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.\");!function(t){var e=jQuery.fn.jquery.split(\" \")[0].split(\".\");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||e[0]>=4)throw new Error(\"Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0\")}(),function(){function t(t,e){if(!t)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!e||\"object\"!=typeof e&&\"function\"!=typeof e?t:e}function e(t,e){if(\"function\"!=typeof e&&null!==e)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function n(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}var i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},o=function(){function t(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}(),r=function(t){function e(t){return{}.toString.call(t).match(/\\s([a-zA-Z]+)/)[1].toLowerCase()}function n(t){return(t[0]||t).nodeType}function i(){return{bindType:s.end,delegateType:s.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}}}function o(){if(window.QUnit)return!1;var t=document.createElement(\"bootstrap\");for(var e in a)if(void 0!==t.style[e])return{end:a[e]};return!1}function r(e){var n=this,i=!1;return t(this).one(l.TRANSITION_END,function(){i=!0}),setTimeout(function(){i||l.triggerTransitionEnd(n)},e),this}var s=!1,a={WebkitTransition:\"webkitTransitionEnd\",MozTransition:\"transitionend\",OTransition:\"oTransitionEnd otransitionend\",transition:\"transitionend\"},l={TRANSITION_END:\"bsTransitionEnd\",getUID:function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},getSelectorFromElement:function(e){var n=e.getAttribute(\"data-target\");n&&\"#\"!==n||(n=e.getAttribute(\"href\")||\"\");try{return t(n).length>0?n:null}catch(t){return null}},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(e){t(e).trigger(s.end)},supportsTransitionEnd:function(){return Boolean(s)},typeCheckConfig:function(t,i,o){for(var r in o)if(o.hasOwnProperty(r)){var s=o[r],a=i[r],l=a&&n(a)?\"element\":e(a);if(!new RegExp(s).test(l))throw new Error(t.toUpperCase()+': Option \"'+r+'\" provided type \"'+l+'\" but expected type \"'+s+'\".')}}};return s=o(),t.fn.emulateTransitionEnd=r,l.supportsTransitionEnd()&&(t.event.special[l.TRANSITION_END]=i()),l}(jQuery),s=(function(t){var e=\"alert\",i=t.fn[e],s={DISMISS:'[data-dismiss=\"alert\"]'},a={CLOSE:\"close.bs.alert\",CLOSED:\"closed.bs.alert\",CLICK_DATA_API:\"click.bs.alert.data-api\"},l={ALERT:\"alert\",FADE:\"fade\",SHOW:\"show\"},h=function(){function e(t){n(this,e),this._element=t}return e.prototype.close=function(t){t=t||this._element;var e=this._getRootElement(t);this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},e.prototype.dispose=function(){t.removeData(this._element,\"bs.alert\"),this._element=null},e.prototype._getRootElement=function(e){var n=r.getSelectorFromElement(e),i=!1;return n&&(i=t(n)[0]),i||(i=t(e).closest(\".\"+l.ALERT)[0]),i},e.prototype._triggerCloseEvent=function(e){var n=t.Event(a.CLOSE);return t(e).trigger(n),n},e.prototype._removeElement=function(e){var n=this;t(e).removeClass(l.SHOW),r.supportsTransitionEnd()&&t(e).hasClass(l.FADE)?t(e).one(r.TRANSITION_END,function(t){return n._destroyElement(e,t)}).emulateTransitionEnd(150):this._destroyElement(e)},e.prototype._destroyElement=function(e){t(e).detach().trigger(a.CLOSED).remove()},e._jQueryInterface=function(n){return this.each(function(){var i=t(this),o=i.data(\"bs.alert\");o||(o=new e(this),i.data(\"bs.alert\",o)),\"close\"===n&&o[n](this)})},e._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},o(e,null,[{key:\"VERSION\",get:function(){return\"4.0.0-beta\"}}]),e}();t(document).on(a.CLICK_DATA_API,s.DISMISS,h._handleDismiss(new h)),t.fn[e]=h._jQueryInterface,t.fn[e].Constructor=h,t.fn[e].noConflict=function(){return t.fn[e]=i,h._jQueryInterface}}(jQuery),function(t){var e=\"button\",i=t.fn[e],r={ACTIVE:\"active\",BUTTON:\"btn\",FOCUS:\"focus\"},s={DATA_TOGGLE_CARROT:'[data-toggle^=\"button\"]',DATA_TOGGLE:'[data-toggle=\"buttons\"]',INPUT:\"input\",ACTIVE:\".active\",BUTTON:\".btn\"},a={CLICK_DATA_API:\"click.bs.button.data-api\",FOCUS_BLUR_DATA_API:\"focus.bs.button.data-api blur.bs.button.data-api\"},l=function(){function e(t){n(this,e),this._element=t}return e.prototype.toggle=function(){var e=!0,n=!0,i=t(this._element).closest(s.DATA_TOGGLE)[0];if(i){var o=t(this._element).find(s.INPUT)[0];if(o){if(\"radio\"===o.type)if(o.checked&&t(this._element).hasClass(r.ACTIVE))e=!1;else{var a=t(i).find(s.ACTIVE)[0];a&&t(a).removeClass(r.ACTIVE)}if(e){if(o.hasAttribute(\"disabled\")||i.hasAttribute(\"disabled\")||o.classList.contains(\"disabled\")||i.classList.contains(\"disabled\"))return;o.checked=!t(this._element).hasClass(r.ACTIVE),t(o).trigger(\"change\")}o.focus(),n=!1}}n&&this._element.setAttribute(\"aria-pressed\",!t(this._element).hasClass(r.ACTIVE)),e&&t(this._element).toggleClass(r.ACTIVE)},e.prototype.dispose=function(){t.removeData(this._element,\"bs.button\"),this._element=null},e._jQueryInterface=function(n){return this.each(function(){var i=t(this).data(\"bs.button\");i||(i=new e(this),t(this).data(\"bs.button\",i)),\"toggle\"===n&&i[n]()})},o(e,null,[{key:\"VERSION\",get:function(){return\"4.0.0-beta\"}}]),e}();t(document).on(a.CLICK_DATA_API,s.DATA_TOGGLE_CARROT,function(e){e.preventDefault();var n=e.target;t(n).hasClass(r.BUTTON)||(n=t(n).closest(s.BUTTON)),l._jQueryInterface.call(t(n),\"toggle\")}).on(a.FOCUS_BLUR_DATA_API,s.DATA_TOGGLE_CARROT,function(e){var n=t(e.target).closest(s.BUTTON)[0];t(n).toggleClass(r.FOCUS,/^focus(in)?$/.test(e.type))}),t.fn[e]=l._jQueryInterface,t.fn[e].Constructor=l,t.fn[e].noConflict=function(){return t.fn[e]=i,l._jQueryInterface}}(jQuery),function(t){var e=\"carousel\",s=\"bs.carousel\",a=\".\"+s,l=t.fn[e],h={interval:5e3,keyboard:!0,slide:!1,pause:\"hover\",wrap:!0},c={interval:\"(number|boolean)\",keyboard:\"boolean\",slide:\"(boolean|string)\",pause:\"(string|boolean)\",wrap:\"boolean\"},u={NEXT:\"next\",PREV:\"prev\",LEFT:\"left\",RIGHT:\"right\"},d={SLIDE:\"slide\"+a,SLID:\"slid\"+a,KEYDOWN:\"keydown\"+a,MOUSEENTER:\"mouseenter\"+a,MOUSELEAVE:\"mouseleave\"+a,TOUCHEND:\"touchend\"+a,LOAD_DATA_API:\"load.bs.carousel.data-api\",CLICK_DATA_API:\"click.bs.carousel.data-api\"},f={CAROUSEL:\"carousel\",ACTIVE:\"active\",SLIDE:\"slide\",RIGHT:\"carousel-item-right\",LEFT:\"carousel-item-left\",NEXT:\"carousel-item-next\",PREV:\"carousel-item-prev\",ITEM:\"carousel-item\"},p={ACTIVE:\".active\",ACTIVE_ITEM:\".active.carousel-item\",ITEM:\".carousel-item\",NEXT_PREV:\".carousel-item-next, .carousel-item-prev\",INDICATORS:\".carousel-indicators\",DATA_SLIDE:\"[data-slide], [data-slide-to]\",DATA_RIDE:'[data-ride=\"carousel\"]'},_=function(){function l(e,i){n(this,l),this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this._config=this._getConfig(i),this._element=t(e)[0],this._indicatorsElement=t(this._element).find(p.INDICATORS)[0],this._addEventListeners()}return l.prototype.next=function(){this._isSliding||this._slide(u.NEXT)},l.prototype.nextWhenVisible=function(){document.hidden||this.next()},l.prototype.prev=function(){this._isSliding||this._slide(u.PREV)},l.prototype.pause=function(e){e||(this._isPaused=!0),t(this._element).find(p.NEXT_PREV)[0]&&r.supportsTransitionEnd()&&(r.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},l.prototype.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},l.prototype.to=function(e){var n=this;this._activeElement=t(this._element).find(p.ACTIVE_ITEM)[0];var i=this._getItemIndex(this._activeElement);if(!(e>this._items.length-1||e<0))if(this._isSliding)t(this._element).one(d.SLID,function(){return n.to(e)});else{if(i===e)return this.pause(),void this.cycle();var o=e>i?u.NEXT:u.PREV;this._slide(o,this._items[e])}},l.prototype.dispose=function(){t(this._element).off(a),t.removeData(this._element,s),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},l.prototype._getConfig=function(n){return n=t.extend({},h,n),r.typeCheckConfig(e,n,c),n},l.prototype._addEventListeners=function(){var e=this;this._config.keyboard&&t(this._element).on(d.KEYDOWN,function(t){return e._keydown(t)}),\"hover\"===this._config.pause&&(t(this._element).on(d.MOUSEENTER,function(t){return e.pause(t)}).on(d.MOUSELEAVE,function(t){return e.cycle(t)}),\"ontouchstart\"in document.documentElement&&t(this._element).on(d.TOUCHEND,function(){e.pause(),e.touchTimeout&&clearTimeout(e.touchTimeout),e.touchTimeout=setTimeout(function(t){return e.cycle(t)},500+e._config.interval)}))},l.prototype._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next();break;default:return}},l.prototype._getItemIndex=function(e){return this._items=t.makeArray(t(e).parent().find(p.ITEM)),this._items.indexOf(e)},l.prototype._getItemByDirection=function(t,e){var n=t===u.NEXT,i=t===u.PREV,o=this._getItemIndex(e),r=this._items.length-1;if((i&&0===o||n&&o===r)&&!this._config.wrap)return e;var s=(o+(t===u.PREV?-1:1))%this._items.length;return-1===s?this._items[this._items.length-1]:this._items[s]},l.prototype._triggerSlideEvent=function(e,n){var i=this._getItemIndex(e),o=this._getItemIndex(t(this._element).find(p.ACTIVE_ITEM)[0]),r=t.Event(d.SLIDE,{relatedTarget:e,direction:n,from:o,to:i});return t(this._element).trigger(r),r},l.prototype._setActiveIndicatorElement=function(e){if(this._indicatorsElement){t(this._indicatorsElement).find(p.ACTIVE).removeClass(f.ACTIVE);var n=this._indicatorsElement.children[this._getItemIndex(e)];n&&t(n).addClass(f.ACTIVE)}},l.prototype._slide=function(e,n){var i=this,o=t(this._element).find(p.ACTIVE_ITEM)[0],s=this._getItemIndex(o),a=n||o&&this._getItemByDirection(e,o),l=this._getItemIndex(a),h=Boolean(this._interval),c=void 0,_=void 0,g=void 0;if(e===u.NEXT?(c=f.LEFT,_=f.NEXT,g=u.LEFT):(c=f.RIGHT,_=f.PREV,g=u.RIGHT),a&&t(a).hasClass(f.ACTIVE))this._isSliding=!1;else if(!this._triggerSlideEvent(a,g).isDefaultPrevented()&&o&&a){this._isSliding=!0,h&&this.pause(),this._setActiveIndicatorElement(a);var m=t.Event(d.SLID,{relatedTarget:a,direction:g,from:s,to:l});r.supportsTransitionEnd()&&t(this._element).hasClass(f.SLIDE)?(t(a).addClass(_),r.reflow(a),t(o).addClass(c),t(a).addClass(c),t(o).one(r.TRANSITION_END,function(){t(a).removeClass(c+\" \"+_).addClass(f.ACTIVE),t(o).removeClass(f.ACTIVE+\" \"+_+\" \"+c),i._isSliding=!1,setTimeout(function(){return t(i._element).trigger(m)},0)}).emulateTransitionEnd(600)):(t(o).removeClass(f.ACTIVE),t(a).addClass(f.ACTIVE),this._isSliding=!1,t(this._element).trigger(m)),h&&this.cycle()}},l._jQueryInterface=function(e){return this.each(function(){var n=t(this).data(s),o=t.extend({},h,t(this).data());\"object\"===(void 0===e?\"undefined\":i(e))&&t.extend(o,e);var r=\"string\"==typeof e?e:o.slide;if(n||(n=new l(this,o),t(this).data(s,n)),\"number\"==typeof e)n.to(e);else if(\"string\"==typeof r){if(void 0===n[r])throw new Error('No method named \"'+r+'\"');n[r]()}else o.interval&&(n.pause(),n.cycle())})},l._dataApiClickHandler=function(e){var n=r.getSelectorFromElement(this);if(n){var i=t(n)[0];if(i&&t(i).hasClass(f.CAROUSEL)){var o=t.extend({},t(i).data(),t(this).data()),a=this.getAttribute(\"data-slide-to\");a&&(o.interval=!1),l._jQueryInterface.call(t(i),o),a&&t(i).data(s).to(a),e.preventDefault()}}},o(l,null,[{key:\"VERSION\",get:function(){return\"4.0.0-beta\"}},{key:\"Default\",get:function(){return h}}]),l}();t(document).on(d.CLICK_DATA_API,p.DATA_SLIDE,_._dataApiClickHandler),t(window).on(d.LOAD_DATA_API,function(){t(p.DATA_RIDE).each(function(){var e=t(this);_._jQueryInterface.call(e,e.data())})}),t.fn[e]=_._jQueryInterface,t.fn[e].Constructor=_,t.fn[e].noConflict=function(){return t.fn[e]=l,_._jQueryInterface}}(jQuery),function(t){var e=\"collapse\",s=\"bs.collapse\",a=t.fn[e],l={toggle:!0,parent:\"\"},h={toggle:\"boolean\",parent:\"string\"},c={SHOW:\"show.bs.collapse\",SHOWN:\"shown.bs.collapse\",HIDE:\"hide.bs.collapse\",HIDDEN:\"hidden.bs.collapse\",CLICK_DATA_API:\"click.bs.collapse.data-api\"},u={SHOW:\"show\",COLLAPSE:\"collapse\",COLLAPSING:\"collapsing\",COLLAPSED:\"collapsed\"},d={WIDTH:\"width\",HEIGHT:\"height\"},f={ACTIVES:\".show, .collapsing\",DATA_TOGGLE:'[data-toggle=\"collapse\"]'},p=function(){function a(e,i){n(this,a),this._isTransitioning=!1,this._element=e,this._config=this._getConfig(i),this._triggerArray=t.makeArray(t('[data-toggle=\"collapse\"][href=\"#'+e.id+'\"],[data-toggle=\"collapse\"][data-target=\"#'+e.id+'\"]'));for(var o=t(f.DATA_TOGGLE),s=0;s<o.length;s++){var l=o[s],h=r.getSelectorFromElement(l);null!==h&&t(h).filter(e).length>0&&this._triggerArray.push(l)}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}return a.prototype.toggle=function(){t(this._element).hasClass(u.SHOW)?this.hide():this.show()},a.prototype.show=function(){var e=this;if(!this._isTransitioning&&!t(this._element).hasClass(u.SHOW)){var n=void 0,i=void 0;if(this._parent&&((n=t.makeArray(t(this._parent).children().children(f.ACTIVES))).length||(n=null)),!(n&&(i=t(n).data(s))&&i._isTransitioning)){var o=t.Event(c.SHOW);if(t(this._element).trigger(o),!o.isDefaultPrevented()){n&&(a._jQueryInterface.call(t(n),\"hide\"),i||t(n).data(s,null));var l=this._getDimension();t(this._element).removeClass(u.COLLAPSE).addClass(u.COLLAPSING),this._element.style[l]=0,this._triggerArray.length&&t(this._triggerArray).removeClass(u.COLLAPSED).attr(\"aria-expanded\",!0),this.setTransitioning(!0);var h=function(){t(e._element).removeClass(u.COLLAPSING).addClass(u.COLLAPSE).addClass(u.SHOW),e._element.style[l]=\"\",e.setTransitioning(!1),t(e._element).trigger(c.SHOWN)};if(r.supportsTransitionEnd()){var d=\"scroll\"+(l[0].toUpperCase()+l.slice(1));t(this._element).one(r.TRANSITION_END,h).emulateTransitionEnd(600),this._element.style[l]=this._element[d]+\"px\"}else h()}}}},a.prototype.hide=function(){var e=this;if(!this._isTransitioning&&t(this._element).hasClass(u.SHOW)){var n=t.Event(c.HIDE);if(t(this._element).trigger(n),!n.isDefaultPrevented()){var i=this._getDimension();if(this._element.style[i]=this._element.getBoundingClientRect()[i]+\"px\",r.reflow(this._element),t(this._element).addClass(u.COLLAPSING).removeClass(u.COLLAPSE).removeClass(u.SHOW),this._triggerArray.length)for(var o=0;o<this._triggerArray.length;o++){var s=this._triggerArray[o],a=r.getSelectorFromElement(s);null!==a&&(t(a).hasClass(u.SHOW)||t(s).addClass(u.COLLAPSED).attr(\"aria-expanded\",!1))}this.setTransitioning(!0);var l=function(){e.setTransitioning(!1),t(e._element).removeClass(u.COLLAPSING).addClass(u.COLLAPSE).trigger(c.HIDDEN)};this._element.style[i]=\"\",r.supportsTransitionEnd()?t(this._element).one(r.TRANSITION_END,l).emulateTransitionEnd(600):l()}}},a.prototype.setTransitioning=function(t){this._isTransitioning=t},a.prototype.dispose=function(){t.removeData(this._element,s),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},a.prototype._getConfig=function(n){return n=t.extend({},l,n),n.toggle=Boolean(n.toggle),r.typeCheckConfig(e,n,h),n},a.prototype._getDimension=function(){return t(this._element).hasClass(d.WIDTH)?d.WIDTH:d.HEIGHT},a.prototype._getParent=function(){var e=this,n=t(this._config.parent)[0],i='[data-toggle=\"collapse\"][data-parent=\"'+this._config.parent+'\"]';return t(n).find(i).each(function(t,n){e._addAriaAndCollapsedClass(a._getTargetFromElement(n),[n])}),n},a.prototype._addAriaAndCollapsedClass=function(e,n){if(e){var i=t(e).hasClass(u.SHOW);n.length&&t(n).toggleClass(u.COLLAPSED,!i).attr(\"aria-expanded\",i)}},a._getTargetFromElement=function(e){var n=r.getSelectorFromElement(e);return n?t(n)[0]:null},a._jQueryInterface=function(e){return this.each(function(){var n=t(this),o=n.data(s),r=t.extend({},l,n.data(),\"object\"===(void 0===e?\"undefined\":i(e))&&e);if(!o&&r.toggle&&/show|hide/.test(e)&&(r.toggle=!1),o||(o=new a(this,r),n.data(s,o)),\"string\"==typeof e){if(void 0===o[e])throw new Error('No method named \"'+e+'\"');o[e]()}})},o(a,null,[{key:\"VERSION\",get:function(){return\"4.0.0-beta\"}},{key:\"Default\",get:function(){return l}}]),a}();t(document).on(c.CLICK_DATA_API,f.DATA_TOGGLE,function(e){/input|textarea/i.test(e.target.tagName)||e.preventDefault();var n=t(this),i=r.getSelectorFromElement(this);t(i).each(function(){var e=t(this),i=e.data(s)?\"toggle\":n.data();p._jQueryInterface.call(e,i)})}),t.fn[e]=p._jQueryInterface,t.fn[e].Constructor=p,t.fn[e].noConflict=function(){return t.fn[e]=a,p._jQueryInterface}}(jQuery),function(t){if(\"undefined\"==typeof Popper)throw new Error(\"Bootstrap dropdown require Popper.js (https://popper.js.org)\");var e=\"dropdown\",s=\"bs.dropdown\",a=\".\"+s,l=t.fn[e],h=new RegExp(\"38|40|27\"),c={HIDE:\"hide\"+a,HIDDEN:\"hidden\"+a,SHOW:\"show\"+a,SHOWN:\"shown\"+a,CLICK:\"click\"+a,CLICK_DATA_API:\"click.bs.dropdown.data-api\",KEYDOWN_DATA_API:\"keydown.bs.dropdown.data-api\",KEYUP_DATA_API:\"keyup.bs.dropdown.data-api\"},u={DISABLED:\"disabled\",SHOW:\"show\",DROPUP:\"dropup\",MENURIGHT:\"dropdown-menu-right\",MENULEFT:\"dropdown-menu-left\"},d={DATA_TOGGLE:'[data-toggle=\"dropdown\"]',FORM_CHILD:\".dropdown form\",MENU:\".dropdown-menu\",NAVBAR_NAV:\".navbar-nav\",VISIBLE_ITEMS:\".dropdown-menu .dropdown-item:not(.disabled)\"},f={TOP:\"top-start\",TOPEND:\"top-end\",BOTTOM:\"bottom-start\",BOTTOMEND:\"bottom-end\"},p={placement:f.BOTTOM,offset:0,flip:!0},_={placement:\"string\",offset:\"(number|string)\",flip:\"boolean\"},g=function(){function l(t,e){n(this,l),this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}return l.prototype.toggle=function(){if(!this._element.disabled&&!t(this._element).hasClass(u.DISABLED)){var e=l._getParentFromElement(this._element),n=t(this._menu).hasClass(u.SHOW);if(l._clearMenus(),!n){var i={relatedTarget:this._element},o=t.Event(c.SHOW,i);if(t(e).trigger(o),!o.isDefaultPrevented()){var r=this._element;t(e).hasClass(u.DROPUP)&&(t(this._menu).hasClass(u.MENULEFT)||t(this._menu).hasClass(u.MENURIGHT))&&(r=e),this._popper=new Popper(r,this._menu,this._getPopperConfig()),\"ontouchstart\"in document.documentElement&&!t(e).closest(d.NAVBAR_NAV).length&&t(\"body\").children().on(\"mouseover\",null,t.noop),this._element.focus(),this._element.setAttribute(\"aria-expanded\",!0),t(this._menu).toggleClass(u.SHOW),t(e).toggleClass(u.SHOW).trigger(t.Event(c.SHOWN,i))}}}},l.prototype.dispose=function(){t.removeData(this._element,s),t(this._element).off(a),this._element=null,this._menu=null,null!==this._popper&&this._popper.destroy(),this._popper=null},l.prototype.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},l.prototype._addEventListeners=function(){var e=this;t(this._element).on(c.CLICK,function(t){t.preventDefault(),t.stopPropagation(),e.toggle()})},l.prototype._getConfig=function(n){var i=t(this._element).data();return void 0!==i.placement&&(i.placement=f[i.placement.toUpperCase()]),n=t.extend({},this.constructor.Default,t(this._element).data(),n),r.typeCheckConfig(e,n,this.constructor.DefaultType),n},l.prototype._getMenuElement=function(){if(!this._menu){var e=l._getParentFromElement(this._element);this._menu=t(e).find(d.MENU)[0]}return this._menu},l.prototype._getPlacement=function(){var e=t(this._element).parent(),n=this._config.placement;return e.hasClass(u.DROPUP)||this._config.placement===f.TOP?(n=f.TOP,t(this._menu).hasClass(u.MENURIGHT)&&(n=f.TOPEND)):t(this._menu).hasClass(u.MENURIGHT)&&(n=f.BOTTOMEND),n},l.prototype._detectNavbar=function(){return t(this._element).closest(\".navbar\").length>0},l.prototype._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:{offset:this._config.offset},flip:{enabled:this._config.flip}}};return this._inNavbar&&(t.modifiers.applyStyle={enabled:!this._inNavbar}),t},l._jQueryInterface=function(e){return this.each(function(){var n=t(this).data(s),o=\"object\"===(void 0===e?\"undefined\":i(e))?e:null;if(n||(n=new l(this,o),t(this).data(s,n)),\"string\"==typeof e){if(void 0===n[e])throw new Error('No method named \"'+e+'\"');n[e]()}})},l._clearMenus=function(e){if(!e||3!==e.which&&(\"keyup\"!==e.type||9===e.which))for(var n=t.makeArray(t(d.DATA_TOGGLE)),i=0;i<n.length;i++){var o=l._getParentFromElement(n[i]),r=t(n[i]).data(s),a={relatedTarget:n[i]};if(r){var h=r._menu;if(t(o).hasClass(u.SHOW)&&!(e&&(\"click\"===e.type&&/input|textarea/i.test(e.target.tagName)||\"keyup\"===e.type&&9===e.which)&&t.contains(o,e.target))){var f=t.Event(c.HIDE,a);t(o).trigger(f),f.isDefaultPrevented()||(\"ontouchstart\"in document.documentElement&&t(\"body\").children().off(\"mouseover\",null,t.noop),n[i].setAttribute(\"aria-expanded\",\"false\"),t(h).removeClass(u.SHOW),t(o).removeClass(u.SHOW).trigger(t.Event(c.HIDDEN,a)))}}}},l._getParentFromElement=function(e){var n=void 0,i=r.getSelectorFromElement(e);return i&&(n=t(i)[0]),n||e.parentNode},l._dataApiKeydownHandler=function(e){if(!(!h.test(e.which)||/button/i.test(e.target.tagName)&&32===e.which||/input|textarea/i.test(e.target.tagName)||(e.preventDefault(),e.stopPropagation(),this.disabled||t(this).hasClass(u.DISABLED)))){var n=l._getParentFromElement(this),i=t(n).hasClass(u.SHOW);if((i||27===e.which&&32===e.which)&&(!i||27!==e.which&&32!==e.which)){var o=t(n).find(d.VISIBLE_ITEMS).get();if(o.length){var r=o.indexOf(e.target);38===e.which&&r>0&&r--,40===e.which&&r<o.length-1&&r++,r<0&&(r=0),o[r].focus()}}else{if(27===e.which){var s=t(n).find(d.DATA_TOGGLE)[0];t(s).trigger(\"focus\")}t(this).trigger(\"click\")}}},o(l,null,[{key:\"VERSION\",get:function(){return\"4.0.0-beta\"}},{key:\"Default\",get:function(){return p}},{key:\"DefaultType\",get:function(){return _}}]),l}();t(document).on(c.KEYDOWN_DATA_API,d.DATA_TOGGLE,g._dataApiKeydownHandler).on(c.KEYDOWN_DATA_API,d.MENU,g._dataApiKeydownHandler).on(c.CLICK_DATA_API+\" \"+c.KEYUP_DATA_API,g._clearMenus).on(c.CLICK_DATA_API,d.DATA_TOGGLE,function(e){e.preventDefault(),e.stopPropagation(),g._jQueryInterface.call(t(this),\"toggle\")}).on(c.CLICK_DATA_API,d.FORM_CHILD,function(t){t.stopPropagation()}),t.fn[e]=g._jQueryInterface,t.fn[e].Constructor=g,t.fn[e].noConflict=function(){return t.fn[e]=l,g._jQueryInterface}}(jQuery),function(t){var e=\"modal\",s=\".bs.modal\",a=t.fn[e],l={backdrop:!0,keyboard:!0,focus:!0,show:!0},h={backdrop:\"(boolean|string)\",keyboard:\"boolean\",focus:\"boolean\",show:\"boolean\"},c={HIDE:\"hide.bs.modal\",HIDDEN:\"hidden.bs.modal\",SHOW:\"show.bs.modal\",SHOWN:\"shown.bs.modal\",FOCUSIN:\"focusin.bs.modal\",RESIZE:\"resize.bs.modal\",CLICK_DISMISS:\"click.dismiss.bs.modal\",KEYDOWN_DISMISS:\"keydown.dismiss.bs.modal\",MOUSEUP_DISMISS:\"mouseup.dismiss.bs.modal\",MOUSEDOWN_DISMISS:\"mousedown.dismiss.bs.modal\",CLICK_DATA_API:\"click.bs.modal.data-api\"},u={SCROLLBAR_MEASURER:\"modal-scrollbar-measure\",BACKDROP:\"modal-backdrop\",OPEN:\"modal-open\",FADE:\"fade\",SHOW:\"show\"},d={DIALOG:\".modal-dialog\",DATA_TOGGLE:'[data-toggle=\"modal\"]',DATA_DISMISS:'[data-dismiss=\"modal\"]',FIXED_CONTENT:\".fixed-top, .fixed-bottom, .is-fixed, .sticky-top\",NAVBAR_TOGGLER:\".navbar-toggler\"},f=function(){function a(e,i){n(this,a),this._config=this._getConfig(i),this._element=e,this._dialog=t(e).find(d.DIALOG)[0],this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._originalBodyPadding=0,this._scrollbarWidth=0}return a.prototype.toggle=function(t){return this._isShown?this.hide():this.show(t)},a.prototype.show=function(e){var n=this;if(!this._isTransitioning){r.supportsTransitionEnd()&&t(this._element).hasClass(u.FADE)&&(this._isTransitioning=!0);var i=t.Event(c.SHOW,{relatedTarget:e});t(this._element).trigger(i),this._isShown||i.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),t(document.body).addClass(u.OPEN),this._setEscapeEvent(),this._setResizeEvent(),t(this._element).on(c.CLICK_DISMISS,d.DATA_DISMISS,function(t){return n.hide(t)}),t(this._dialog).on(c.MOUSEDOWN_DISMISS,function(){t(n._element).one(c.MOUSEUP_DISMISS,function(e){t(e.target).is(n._element)&&(n._ignoreBackdropClick=!0)})}),this._showBackdrop(function(){return n._showElement(e)}))}},a.prototype.hide=function(e){var n=this;if(e&&e.preventDefault(),!this._isTransitioning&&this._isShown){var i=r.supportsTransitionEnd()&&t(this._element).hasClass(u.FADE);i&&(this._isTransitioning=!0);var o=t.Event(c.HIDE);t(this._element).trigger(o),this._isShown&&!o.isDefaultPrevented()&&(this._isShown=!1,this._setEscapeEvent(),this._setResizeEvent(),t(document).off(c.FOCUSIN),t(this._element).removeClass(u.SHOW),t(this._element).off(c.CLICK_DISMISS),t(this._dialog).off(c.MOUSEDOWN_DISMISS),i?t(this._element).one(r.TRANSITION_END,function(t){return n._hideModal(t)}).emulateTransitionEnd(300):this._hideModal())}},a.prototype.dispose=function(){t.removeData(this._element,\"bs.modal\"),t(window,document,this._element,this._backdrop).off(s),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._scrollbarWidth=null},a.prototype.handleUpdate=function(){this._adjustDialog()},a.prototype._getConfig=function(n){return n=t.extend({},l,n),r.typeCheckConfig(e,n,h),n},a.prototype._showElement=function(e){var n=this,i=r.supportsTransitionEnd()&&t(this._element).hasClass(u.FADE);this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display=\"block\",this._element.removeAttribute(\"aria-hidden\"),this._element.scrollTop=0,i&&r.reflow(this._element),t(this._element).addClass(u.SHOW),this._config.focus&&this._enforceFocus();var o=t.Event(c.SHOWN,{relatedTarget:e}),s=function(){n._config.focus&&n._element.focus(),n._isTransitioning=!1,t(n._element).trigger(o)};i?t(this._dialog).one(r.TRANSITION_END,s).emulateTransitionEnd(300):s()},a.prototype._enforceFocus=function(){var e=this;t(document).off(c.FOCUSIN).on(c.FOCUSIN,function(n){document===n.target||e._element===n.target||t(e._element).has(n.target).length||e._element.focus()})},a.prototype._setEscapeEvent=function(){var e=this;this._isShown&&this._config.keyboard?t(this._element).on(c.KEYDOWN_DISMISS,function(t){27===t.which&&(t.preventDefault(),e.hide())}):this._isShown||t(this._element).off(c.KEYDOWN_DISMISS)},a.prototype._setResizeEvent=function(){var e=this;this._isShown?t(window).on(c.RESIZE,function(t){return e.handleUpdate(t)}):t(window).off(c.RESIZE)},a.prototype._hideModal=function(){var e=this;this._element.style.display=\"none\",this._element.setAttribute(\"aria-hidden\",!0),this._isTransitioning=!1,this._showBackdrop(function(){t(document.body).removeClass(u.OPEN),e._resetAdjustments(),e._resetScrollbar(),t(e._element).trigger(c.HIDDEN)})},a.prototype._removeBackdrop=function(){this._backdrop&&(t(this._backdrop).remove(),this._backdrop=null)},a.prototype._showBackdrop=function(e){var n=this,i=t(this._element).hasClass(u.FADE)?u.FADE:\"\";if(this._isShown&&this._config.backdrop){var o=r.supportsTransitionEnd()&&i;if(this._backdrop=document.createElement(\"div\"),this._backdrop.className=u.BACKDROP,i&&t(this._backdrop).addClass(i),t(this._backdrop).appendTo(document.body),t(this._element).on(c.CLICK_DISMISS,function(t){n._ignoreBackdropClick?n._ignoreBackdropClick=!1:t.target===t.currentTarget&&(\"static\"===n._config.backdrop?n._element.focus():n.hide())}),o&&r.reflow(this._backdrop),t(this._backdrop).addClass(u.SHOW),!e)return;if(!o)return void e();t(this._backdrop).one(r.TRANSITION_END,e).emulateTransitionEnd(150)}else if(!this._isShown&&this._backdrop){t(this._backdrop).removeClass(u.SHOW);var s=function(){n._removeBackdrop(),e&&e()};r.supportsTransitionEnd()&&t(this._element).hasClass(u.FADE)?t(this._backdrop).one(r.TRANSITION_END,s).emulateTransitionEnd(150):s()}else e&&e()},a.prototype._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+\"px\"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+\"px\")},a.prototype._resetAdjustments=function(){this._element.style.paddingLeft=\"\",this._element.style.paddingRight=\"\"},a.prototype._checkScrollbar=function(){this._isBodyOverflowing=document.body.clientWidth<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},a.prototype._setScrollbar=function(){var e=this;if(this._isBodyOverflowing){t(d.FIXED_CONTENT).each(function(n,i){var o=t(i)[0].style.paddingRight,r=t(i).css(\"padding-right\");t(i).data(\"padding-right\",o).css(\"padding-right\",parseFloat(r)+e._scrollbarWidth+\"px\")}),t(d.NAVBAR_TOGGLER).each(function(n,i){var o=t(i)[0].style.marginRight,r=t(i).css(\"margin-right\");t(i).data(\"margin-right\",o).css(\"margin-right\",parseFloat(r)+e._scrollbarWidth+\"px\")});var n=document.body.style.paddingRight,i=t(\"body\").css(\"padding-right\");t(\"body\").data(\"padding-right\",n).css(\"padding-right\",parseFloat(i)+this._scrollbarWidth+\"px\")}},a.prototype._resetScrollbar=function(){t(d.FIXED_CONTENT).each(function(e,n){var i=t(n).data(\"padding-right\");void 0!==i&&t(n).css(\"padding-right\",i).removeData(\"padding-right\")}),t(d.NAVBAR_TOGGLER).each(function(e,n){var i=t(n).data(\"margin-right\");void 0!==i&&t(n).css(\"margin-right\",i).removeData(\"margin-right\")});var e=t(\"body\").data(\"padding-right\");void 0!==e&&t(\"body\").css(\"padding-right\",e).removeData(\"padding-right\")},a.prototype._getScrollbarWidth=function(){var t=document.createElement(\"div\");t.className=u.SCROLLBAR_MEASURER,document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e},a._jQueryInterface=function(e,n){return this.each(function(){var o=t(this).data(\"bs.modal\"),r=t.extend({},a.Default,t(this).data(),\"object\"===(void 0===e?\"undefined\":i(e))&&e);if(o||(o=new a(this,r),t(this).data(\"bs.modal\",o)),\"string\"==typeof e){if(void 0===o[e])throw new Error('No method named \"'+e+'\"');o[e](n)}else r.show&&o.show(n)})},o(a,null,[{key:\"VERSION\",get:function(){return\"4.0.0-beta\"}},{key:\"Default\",get:function(){return l}}]),a}();t(document).on(c.CLICK_DATA_API,d.DATA_TOGGLE,function(e){var n=this,i=void 0,o=r.getSelectorFromElement(this);o&&(i=t(o)[0]);var s=t(i).data(\"bs.modal\")?\"toggle\":t.extend({},t(i).data(),t(this).data());\"A\"!==this.tagName&&\"AREA\"!==this.tagName||e.preventDefault();var a=t(i).one(c.SHOW,function(e){e.isDefaultPrevented()||a.one(c.HIDDEN,function(){t(n).is(\":visible\")&&n.focus()})});f._jQueryInterface.call(t(i),s,this)}),t.fn[e]=f._jQueryInterface,t.fn[e].Constructor=f,t.fn[e].noConflict=function(){return t.fn[e]=a,f._jQueryInterface}}(jQuery),function(t){var e=\"scrollspy\",s=t.fn[e],a={offset:10,method:\"auto\",target:\"\"},l={offset:\"number\",method:\"string\",target:\"(string|element)\"},h={ACTIVATE:\"activate.bs.scrollspy\",SCROLL:\"scroll.bs.scrollspy\",LOAD_DATA_API:\"load.bs.scrollspy.data-api\"},c={DROPDOWN_ITEM:\"dropdown-item\",DROPDOWN_MENU:\"dropdown-menu\",ACTIVE:\"active\"},u={DATA_SPY:'[data-spy=\"scroll\"]',ACTIVE:\".active\",NAV_LIST_GROUP:\".nav, .list-group\",NAV_LINKS:\".nav-link\",LIST_ITEMS:\".list-group-item\",DROPDOWN:\".dropdown\",DROPDOWN_ITEMS:\".dropdown-item\",DROPDOWN_TOGGLE:\".dropdown-toggle\"},d={OFFSET:\"offset\",POSITION:\"position\"},f=function(){function s(e,i){var o=this;n(this,s),this._element=e,this._scrollElement=\"BODY\"===e.tagName?window:e,this._config=this._getConfig(i),this._selector=this._config.target+\" \"+u.NAV_LINKS+\",\"+this._config.target+\" \"+u.LIST_ITEMS+\",\"+this._config.target+\" \"+u.DROPDOWN_ITEMS,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,t(this._scrollElement).on(h.SCROLL,function(t){return o._process(t)}),this.refresh(),this._process()}return s.prototype.refresh=function(){var e=this,n=this._scrollElement!==this._scrollElement.window?d.POSITION:d.OFFSET,i=\"auto\"===this._config.method?n:this._config.method,o=i===d.POSITION?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),t.makeArray(t(this._selector)).map(function(e){var n=void 0,s=r.getSelectorFromElement(e);if(s&&(n=t(s)[0]),n){var a=n.getBoundingClientRect();if(a.width||a.height)return[t(n)[i]().top+o,s]}return null}).filter(function(t){return t}).sort(function(t,e){return t[0]-e[0]}).forEach(function(t){e._offsets.push(t[0]),e._targets.push(t[1])})},s.prototype.dispose=function(){t.removeData(this._element,\"bs.scrollspy\"),t(this._scrollElement).off(\".bs.scrollspy\"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},s.prototype._getConfig=function(n){if(\"string\"!=typeof(n=t.extend({},a,n)).target){var i=t(n.target).attr(\"id\");i||(i=r.getUID(e),t(n.target).attr(\"id\",i)),n.target=\"#\"+i}return r.typeCheckConfig(e,n,l),n},s.prototype._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},s.prototype._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},s.prototype._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},s.prototype._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t<this._offsets[0]&&this._offsets[0]>0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;)this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&(void 0===this._offsets[o+1]||t<this._offsets[o+1])&&this._activate(this._targets[o])}},s.prototype._activate=function(e){this._activeTarget=e,this._clear();var n=this._selector.split(\",\");n=n.map(function(t){return t+'[data-target=\"'+e+'\"],'+t+'[href=\"'+e+'\"]'});var i=t(n.join(\",\"));i.hasClass(c.DROPDOWN_ITEM)?(i.closest(u.DROPDOWN).find(u.DROPDOWN_TOGGLE).addClass(c.ACTIVE),i.addClass(c.ACTIVE)):(i.addClass(c.ACTIVE),i.parents(u.NAV_LIST_GROUP).prev(u.NAV_LINKS+\", \"+u.LIST_ITEMS).addClass(c.ACTIVE)),t(this._scrollElement).trigger(h.ACTIVATE,{relatedTarget:e})},s.prototype._clear=function(){t(this._selector).filter(u.ACTIVE).removeClass(c.ACTIVE)},s._jQueryInterface=function(e){return this.each(function(){var n=t(this).data(\"bs.scrollspy\"),o=\"object\"===(void 0===e?\"undefined\":i(e))&&e;if(n||(n=new s(this,o),t(this).data(\"bs.scrollspy\",n)),\"string\"==typeof e){if(void 0===n[e])throw new Error('No method named \"'+e+'\"');n[e]()}})},o(s,null,[{key:\"VERSION\",get:function(){return\"4.0.0-beta\"}},{key:\"Default\",get:function(){return a}}]),s}();t(window).on(h.LOAD_DATA_API,function(){for(var e=t.makeArray(t(u.DATA_SPY)),n=e.length;n--;){var i=t(e[n]);f._jQueryInterface.call(i,i.data())}}),t.fn[e]=f._jQueryInterface,t.fn[e].Constructor=f,t.fn[e].noConflict=function(){return t.fn[e]=s,f._jQueryInterface}}(jQuery),function(t){var e=t.fn.tab,i={HIDE:\"hide.bs.tab\",HIDDEN:\"hidden.bs.tab\",SHOW:\"show.bs.tab\",SHOWN:\"shown.bs.tab\",CLICK_DATA_API:\"click.bs.tab.data-api\"},s={DROPDOWN_MENU:\"dropdown-menu\",ACTIVE:\"active\",DISABLED:\"disabled\",FADE:\"fade\",SHOW:\"show\"},a={DROPDOWN:\".dropdown\",NAV_LIST_GROUP:\".nav, .list-group\",ACTIVE:\".active\",DATA_TOGGLE:'[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',DROPDOWN_TOGGLE:\".dropdown-toggle\",DROPDOWN_ACTIVE_CHILD:\"> .dropdown-menu .active\"},l=function(){function e(t){n(this,e),this._element=t}return e.prototype.show=function(){var e=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&t(this._element).hasClass(s.ACTIVE)||t(this._element).hasClass(s.DISABLED))){var n=void 0,o=void 0,l=t(this._element).closest(a.NAV_LIST_GROUP)[0],h=r.getSelectorFromElement(this._element);l&&(o=t.makeArray(t(l).find(a.ACTIVE)),o=o[o.length-1]);var c=t.Event(i.HIDE,{relatedTarget:this._element}),u=t.Event(i.SHOW,{relatedTarget:o});if(o&&t(o).trigger(c),t(this._element).trigger(u),!u.isDefaultPrevented()&&!c.isDefaultPrevented()){h&&(n=t(h)[0]),this._activate(this._element,l);var d=function(){var n=t.Event(i.HIDDEN,{relatedTarget:e._element}),r=t.Event(i.SHOWN,{relatedTarget:o});t(o).trigger(n),t(e._element).trigger(r)};n?this._activate(n,n.parentNode,d):d()}}},e.prototype.dispose=function(){t.removeData(this._element,\"bs.tab\"),this._element=null},e.prototype._activate=function(e,n,i){var o=this,l=t(n).find(a.ACTIVE)[0],h=i&&r.supportsTransitionEnd()&&l&&t(l).hasClass(s.FADE),c=function(){return o._transitionComplete(e,l,h,i)};l&&h?t(l).one(r.TRANSITION_END,c).emulateTransitionEnd(150):c(),l&&t(l).removeClass(s.SHOW)},e.prototype._transitionComplete=function(e,n,i,o){if(n){t(n).removeClass(s.ACTIVE);var l=t(n.parentNode).find(a.DROPDOWN_ACTIVE_CHILD)[0];l&&t(l).removeClass(s.ACTIVE),n.setAttribute(\"aria-expanded\",!1)}if(t(e).addClass(s.ACTIVE),e.setAttribute(\"aria-expanded\",!0),i?(r.reflow(e),t(e).addClass(s.SHOW)):t(e).removeClass(s.FADE),e.parentNode&&t(e.parentNode).hasClass(s.DROPDOWN_MENU)){var h=t(e).closest(a.DROPDOWN)[0];h&&t(h).find(a.DROPDOWN_TOGGLE).addClass(s.ACTIVE),e.setAttribute(\"aria-expanded\",!0)}o&&o()},e._jQueryInterface=function(n){return this.each(function(){var i=t(this),o=i.data(\"bs.tab\");if(o||(o=new e(this),i.data(\"bs.tab\",o)),\"string\"==typeof n){if(void 0===o[n])throw new Error('No method named \"'+n+'\"');o[n]()}})},o(e,null,[{key:\"VERSION\",get:function(){return\"4.0.0-beta\"}}]),e}();t(document).on(i.CLICK_DATA_API,a.DATA_TOGGLE,function(e){e.preventDefault(),l._jQueryInterface.call(t(this),\"show\")}),t.fn.tab=l._jQueryInterface,t.fn.tab.Constructor=l,t.fn.tab.noConflict=function(){return t.fn.tab=e,l._jQueryInterface}}(jQuery),function(t){if(\"undefined\"==typeof Popper)throw new Error(\"Bootstrap tooltips require Popper.js (https://popper.js.org)\");var e=\"tooltip\",s=\".bs.tooltip\",a=t.fn[e],l=new RegExp(\"(^|\\\\s)bs-tooltip\\\\S+\",\"g\"),h={animation:\"boolean\",template:\"string\",title:\"(string|element|function)\",trigger:\"string\",delay:\"(number|object)\",html:\"boolean\",selector:\"(string|boolean)\",placement:\"(string|function)\",offset:\"(number|string)\",container:\"(string|element|boolean)\",fallbackPlacement:\"(string|array)\"},c={AUTO:\"auto\",TOP:\"top\",RIGHT:\"right\",BOTTOM:\"bottom\",LEFT:\"left\"},u={animation:!0,template:'<div class=\"tooltip\" role=\"tooltip\"><div class=\"arrow\"></div><div class=\"tooltip-inner\"></div></div>',trigger:\"hover focus\",title:\"\",delay:0,html:!1,selector:!1,placement:\"top\",offset:0,container:!1,fallbackPlacement:\"flip\"},d={SHOW:\"show\",OUT:\"out\"},f={HIDE:\"hide\"+s,HIDDEN:\"hidden\"+s,SHOW:\"show\"+s,SHOWN:\"shown\"+s,INSERTED:\"inserted\"+s,CLICK:\"click\"+s,FOCUSIN:\"focusin\"+s,FOCUSOUT:\"focusout\"+s,MOUSEENTER:\"mouseenter\"+s,MOUSELEAVE:\"mouseleave\"+s},p={FADE:\"fade\",SHOW:\"show\"},_={TOOLTIP:\".tooltip\",TOOLTIP_INNER:\".tooltip-inner\",ARROW:\".arrow\"},g={HOVER:\"hover\",FOCUS:\"focus\",CLICK:\"click\",MANUAL:\"manual\"},m=function(){function a(t,e){n(this,a),this._isEnabled=!0,this._timeout=0,this._hoverState=\"\",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}return a.prototype.enable=function(){this._isEnabled=!0},a.prototype.disable=function(){this._isEnabled=!1},a.prototype.toggleEnabled=function(){this._isEnabled=!this._isEnabled},a.prototype.toggle=function(e){if(e){var n=this.constructor.DATA_KEY,i=t(e.currentTarget).data(n);i||(i=new this.constructor(e.currentTarget,this._getDelegateConfig()),t(e.currentTarget).data(n,i)),i._activeTrigger.click=!i._activeTrigger.click,i._isWithActiveTrigger()?i._enter(null,i):i._leave(null,i)}else{if(t(this.getTipElement()).hasClass(p.SHOW))return void this._leave(null,this);this._enter(null,this)}},a.prototype.dispose=function(){clearTimeout(this._timeout),t.removeData(this.element,this.constructor.DATA_KEY),t(this.element).off(this.constructor.EVENT_KEY),t(this.element).closest(\".modal\").off(\"hide.bs.modal\"),this.tip&&t(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,null!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},a.prototype.show=function(){var e=this;if(\"none\"===t(this.element).css(\"display\"))throw new Error(\"Please use show on visible elements\");var n=t.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){t(this.element).trigger(n);var i=t.contains(this.element.ownerDocument.documentElement,this.element);if(n.isDefaultPrevented()||!i)return;var o=this.getTipElement(),s=r.getUID(this.constructor.NAME);o.setAttribute(\"id\",s),this.element.setAttribute(\"aria-describedby\",s),this.setContent(),this.config.animation&&t(o).addClass(p.FADE);var l=\"function\"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,h=this._getAttachment(l);this.addAttachmentClass(h);var c=!1===this.config.container?document.body:t(this.config.container);t(o).data(this.constructor.DATA_KEY,this),t.contains(this.element.ownerDocument.documentElement,this.tip)||t(o).appendTo(c),t(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new Popper(this.element,o,{placement:h,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:_.ARROW}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){e._handlePopperPlacementChange(t)}}),t(o).addClass(p.SHOW),\"ontouchstart\"in document.documentElement&&t(\"body\").children().on(\"mouseover\",null,t.noop);var u=function(){e.config.animation&&e._fixTransition();var n=e._hoverState;e._hoverState=null,t(e.element).trigger(e.constructor.Event.SHOWN),n===d.OUT&&e._leave(null,e)};r.supportsTransitionEnd()&&t(this.tip).hasClass(p.FADE)?t(this.tip).one(r.TRANSITION_END,u).emulateTransitionEnd(a._TRANSITION_DURATION):u()}},a.prototype.hide=function(e){var n=this,i=this.getTipElement(),o=t.Event(this.constructor.Event.HIDE),s=function(){n._hoverState!==d.SHOW&&i.parentNode&&i.parentNode.removeChild(i),n._cleanTipClass(),n.element.removeAttribute(\"aria-describedby\"),t(n.element).trigger(n.constructor.Event.HIDDEN),null!==n._popper&&n._popper.destroy(),e&&e()};t(this.element).trigger(o),o.isDefaultPrevented()||(t(i).removeClass(p.SHOW),\"ontouchstart\"in document.documentElement&&t(\"body\").children().off(\"mouseover\",null,t.noop),this._activeTrigger[g.CLICK]=!1,this._activeTrigger[g.FOCUS]=!1,this._activeTrigger[g.HOVER]=!1,r.supportsTransitionEnd()&&t(this.tip).hasClass(p.FADE)?t(i).one(r.TRANSITION_END,s).emulateTransitionEnd(150):s(),this._hoverState=\"\")},a.prototype.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},a.prototype.isWithContent=function(){return Boolean(this.getTitle())},a.prototype.addAttachmentClass=function(e){t(this.getTipElement()).addClass(\"bs-tooltip-\"+e)},a.prototype.getTipElement=function(){return this.tip=this.tip||t(this.config.template)[0]},a.prototype.setContent=function(){var e=t(this.getTipElement());this.setElementContent(e.find(_.TOOLTIP_INNER),this.getTitle()),e.removeClass(p.FADE+\" \"+p.SHOW)},a.prototype.setElementContent=function(e,n){var o=this.config.html;\"object\"===(void 0===n?\"undefined\":i(n))&&(n.nodeType||n.jquery)?o?t(n).parent().is(e)||e.empty().append(n):e.text(t(n).text()):e[o?\"html\":\"text\"](n)},a.prototype.getTitle=function(){var t=this.element.getAttribute(\"data-original-title\");return t||(t=\"function\"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},a.prototype._getAttachment=function(t){return c[t.toUpperCase()]},a.prototype._setListeners=function(){var e=this;this.config.trigger.split(\" \").forEach(function(n){if(\"click\"===n)t(e.element).on(e.constructor.Event.CLICK,e.config.selector,function(t){return e.toggle(t)});else if(n!==g.MANUAL){var i=n===g.HOVER?e.constructor.Event.MOUSEENTER:e.constructor.Event.FOCUSIN,o=n===g.HOVER?e.constructor.Event.MOUSELEAVE:e.constructor.Event.FOCUSOUT;t(e.element).on(i,e.config.selector,function(t){return e._enter(t)}).on(o,e.config.selector,function(t){return e._leave(t)})}t(e.element).closest(\".modal\").on(\"hide.bs.modal\",function(){return e.hide()})}),this.config.selector?this.config=t.extend({},this.config,{trigger:\"manual\",selector:\"\"}):this._fixTitle()},a.prototype._fixTitle=function(){var t=i(this.element.getAttribute(\"data-original-title\"));(this.element.getAttribute(\"title\")||\"string\"!==t)&&(this.element.setAttribute(\"data-original-title\",this.element.getAttribute(\"title\")||\"\"),this.element.setAttribute(\"title\",\"\"))},a.prototype._enter=function(e,n){var i=this.constructor.DATA_KEY;(n=n||t(e.currentTarget).data(i))||(n=new this.constructor(e.currentTarget,this._getDelegateConfig()),t(e.currentTarget).data(i,n)),e&&(n._activeTrigger[\"focusin\"===e.type?g.FOCUS:g.HOVER]=!0),t(n.getTipElement()).hasClass(p.SHOW)||n._hoverState===d.SHOW?n._hoverState=d.SHOW:(clearTimeout(n._timeout),n._hoverState=d.SHOW,n.config.delay&&n.config.delay.show?n._timeout=setTimeout(function(){n._hoverState===d.SHOW&&n.show()},n.config.delay.show):n.show())},a.prototype._leave=function(e,n){var i=this.constructor.DATA_KEY;(n=n||t(e.currentTarget).data(i))||(n=new this.constructor(e.currentTarget,this._getDelegateConfig()),t(e.currentTarget).data(i,n)),e&&(n._activeTrigger[\"focusout\"===e.type?g.FOCUS:g.HOVER]=!1),n._isWithActiveTrigger()||(clearTimeout(n._timeout),n._hoverState=d.OUT,n.config.delay&&n.config.delay.hide?n._timeout=setTimeout(function(){n._hoverState===d.OUT&&n.hide()},n.config.delay.hide):n.hide())},a.prototype._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},a.prototype._getConfig=function(n){return(n=t.extend({},this.constructor.Default,t(this.element).data(),n)).delay&&\"number\"==typeof n.delay&&(n.delay={show:n.delay,hide:n.delay}),n.title&&\"number\"==typeof n.title&&(n.title=n.title.toString()),n.content&&\"number\"==typeof n.content&&(n.content=n.content.toString()),r.typeCheckConfig(e,n,this.constructor.DefaultType),n},a.prototype._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},a.prototype._cleanTipClass=function(){var e=t(this.getTipElement()),n=e.attr(\"class\").match(l);null!==n&&n.length>0&&e.removeClass(n.join(\"\"))},a.prototype._handlePopperPlacementChange=function(t){this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},a.prototype._fixTransition=function(){var e=this.getTipElement(),n=this.config.animation;null===e.getAttribute(\"x-placement\")&&(t(e).removeClass(p.FADE),this.config.animation=!1,this.hide(),this.show(),this.config.animation=n)},a._jQueryInterface=function(e){return this.each(function(){var n=t(this).data(\"bs.tooltip\"),o=\"object\"===(void 0===e?\"undefined\":i(e))&&e;if((n||!/dispose|hide/.test(e))&&(n||(n=new a(this,o),t(this).data(\"bs.tooltip\",n)),\"string\"==typeof e)){if(void 0===n[e])throw new Error('No method named \"'+e+'\"');n[e]()}})},o(a,null,[{key:\"VERSION\",get:function(){return\"4.0.0-beta\"}},{key:\"Default\",get:function(){return u}},{key:\"NAME\",get:function(){return e}},{key:\"DATA_KEY\",get:function(){return\"bs.tooltip\"}},{key:\"Event\",get:function(){return f}},{key:\"EVENT_KEY\",get:function(){return s}},{key:\"DefaultType\",get:function(){return h}}]),a}();return t.fn[e]=m._jQueryInterface,t.fn[e].Constructor=m,t.fn[e].noConflict=function(){return t.fn[e]=a,m._jQueryInterface},m}(jQuery));!function(r){var a=\"popover\",l=\".bs.popover\",h=r.fn[a],c=new RegExp(\"(^|\\\\s)bs-popover\\\\S+\",\"g\"),u=r.extend({},s.Default,{placement:\"right\",trigger:\"click\",content:\"\",template:'<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-header\"></h3><div class=\"popover-body\"></div></div>'}),d=r.extend({},s.DefaultType,{content:\"(string|element|function)\"}),f={FADE:\"fade\",SHOW:\"show\"},p={TITLE:\".popover-header\",CONTENT:\".popover-body\"},_={HIDE:\"hide\"+l,HIDDEN:\"hidden\"+l,SHOW:\"show\"+l,SHOWN:\"shown\"+l,INSERTED:\"inserted\"+l,CLICK:\"click\"+l,FOCUSIN:\"focusin\"+l,FOCUSOUT:\"focusout\"+l,MOUSEENTER:\"mouseenter\"+l,MOUSELEAVE:\"mouseleave\"+l},g=function(s){function h(){return n(this,h),t(this,s.apply(this,arguments))}return e(h,s),h.prototype.isWithContent=function(){return this.getTitle()||this._getContent()},h.prototype.addAttachmentClass=function(t){r(this.getTipElement()).addClass(\"bs-popover-\"+t)},h.prototype.getTipElement=function(){return this.tip=this.tip||r(this.config.template)[0]},h.prototype.setContent=function(){var t=r(this.getTipElement());this.setElementContent(t.find(p.TITLE),this.getTitle()),this.setElementContent(t.find(p.CONTENT),this._getContent()),t.removeClass(f.FADE+\" \"+f.SHOW)},h.prototype._getContent=function(){return this.element.getAttribute(\"data-content\")||(\"function\"==typeof this.config.content?this.config.content.call(this.element):this.config.content)},h.prototype._cleanTipClass=function(){var t=r(this.getTipElement()),e=t.attr(\"class\").match(c);null!==e&&e.length>0&&t.removeClass(e.join(\"\"))},h._jQueryInterface=function(t){return this.each(function(){var e=r(this).data(\"bs.popover\"),n=\"object\"===(void 0===t?\"undefined\":i(t))?t:null;if((e||!/destroy|hide/.test(t))&&(e||(e=new h(this,n),r(this).data(\"bs.popover\",e)),\"string\"==typeof t)){if(void 0===e[t])throw new Error('No method named \"'+t+'\"');e[t]()}})},o(h,null,[{key:\"VERSION\",get:function(){return\"4.0.0-beta\"}},{key:\"Default\",get:function(){return u}},{key:\"NAME\",get:function(){return a}},{key:\"DATA_KEY\",get:function(){return\"bs.popover\"}},{key:\"Event\",get:function(){return _}},{key:\"EVENT_KEY\",get:function(){return l}},{key:\"DefaultType\",get:function(){return d}}]),h}(s);r.fn[a]=g._jQueryInterface,r.fn[a].Constructor=g,r.fn[a].noConflict=function(){return r.fn[a]=h,g._jQueryInterface}}(jQuery)}();","/*\r\n * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/\r\n *\r\n * Uses the built in easing capabilities added In jQuery 1.1\r\n * to offer multiple easing options\r\n *\r\n * TERMS OF USE - jQuery Easing\r\n *\r\n * Open source under the BSD License.\r\n *\r\n * Copyright © 2008 George McGinley Smith\r\n * All rights reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *\r\n * Redistributions of source code must retain the above copyright notice, this list of\r\n * conditions and the following disclaimer.\r\n * Redistributions in binary form must reproduce the above copyright notice, this list\r\n * of conditions and the following disclaimer in the documentation and/or other materials\r\n * provided with the distribution.\r\n *\r\n * Neither the name of the author nor the names of contributors may be used to endorse\r\n * or promote products derived from this software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\r\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\r\n *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r\n *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\r\n *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\r\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r\n *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\r\n * OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n*/\r\n\r\n// t: current time, b: begInnIng value, c: change In value, d: duration\r\njQuery.easing['jswing'] = jQuery.easing['swing'];\r\n\r\njQuery.extend( jQuery.easing,\r\n{\r\n    def: 'easeOutQuad',\r\n    swing: function (x, t, b, c, d) {\r\n        //alert(jQuery.easing.default);\r\n        return jQuery.easing[jQuery.easing.def](x, t, b, c, d);\r\n    },\r\n    easeInQuad: function (x, t, b, c, d) {\r\n        return c*(t/=d)*t + b;\r\n    },\r\n    easeOutQuad: function (x, t, b, c, d) {\r\n        return -c *(t/=d)*(t-2) + b;\r\n    },\r\n    easeInOutQuad: function (x, t, b, c, d) {\r\n        if ((t/=d/2) < 1) return c/2*t*t + b;\r\n        return -c/2 * ((--t)*(t-2) - 1) + b;\r\n    },\r\n    easeInCubic: function (x, t, b, c, d) {\r\n        return c*(t/=d)*t*t + b;\r\n    },\r\n    easeOutCubic: function (x, t, b, c, d) {\r\n        return c*((t=t/d-1)*t*t + 1) + b;\r\n    },\r\n    easeInOutCubic: function (x, t, b, c, d) {\r\n        if ((t/=d/2) < 1) return c/2*t*t*t + b;\r\n        return c/2*((t-=2)*t*t + 2) + b;\r\n    },\r\n    easeInQuart: function (x, t, b, c, d) {\r\n        return c*(t/=d)*t*t*t + b;\r\n    },\r\n    easeOutQuart: function (x, t, b, c, d) {\r\n        return -c * ((t=t/d-1)*t*t*t - 1) + b;\r\n    },\r\n    easeInOutQuart: function (x, t, b, c, d) {\r\n        if ((t/=d/2) < 1) return c/2*t*t*t*t + b;\r\n        return -c/2 * ((t-=2)*t*t*t - 2) + b;\r\n    },\r\n    easeInQuint: function (x, t, b, c, d) {\r\n        return c*(t/=d)*t*t*t*t + b;\r\n    },\r\n    easeOutQuint: function (x, t, b, c, d) {\r\n        return c*((t=t/d-1)*t*t*t*t + 1) + b;\r\n    },\r\n    easeInOutQuint: function (x, t, b, c, d) {\r\n        if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;\r\n        return c/2*((t-=2)*t*t*t*t + 2) + b;\r\n    },\r\n    easeInSine: function (x, t, b, c, d) {\r\n        return -c * Math.cos(t/d * (Math.PI/2)) + c + b;\r\n    },\r\n    easeOutSine: function (x, t, b, c, d) {\r\n        return c * Math.sin(t/d * (Math.PI/2)) + b;\r\n    },\r\n    easeInOutSine: function (x, t, b, c, d) {\r\n        return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;\r\n    },\r\n    easeInExpo: function (x, t, b, c, d) {\r\n        return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;\r\n    },\r\n    easeOutExpo: function (x, t, b, c, d) {\r\n        return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;\r\n    },\r\n    easeInOutExpo: function (x, t, b, c, d) {\r\n        if (t==0) return b;\r\n        if (t==d) return b+c;\r\n        if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;\r\n        return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;\r\n    },\r\n    easeInCirc: function (x, t, b, c, d) {\r\n        return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;\r\n    },\r\n    easeOutCirc: function (x, t, b, c, d) {\r\n        return c * Math.sqrt(1 - (t=t/d-1)*t) + b;\r\n    },\r\n    easeInOutCirc: function (x, t, b, c, d) {\r\n        if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;\r\n        return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;\r\n    },\r\n    easeInElastic: function (x, t, b, c, d) {\r\n        var s=1.70158;var p=0;var a=c;\r\n        if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;\r\n        if (a < Math.abs(c)) { a=c; var s=p/4; }\r\n        else var s = p/(2*Math.PI) * Math.asin (c/a);\r\n        return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;\r\n    },\r\n    easeOutElastic: function (x, t, b, c, d) {\r\n        var s=1.70158;var p=0;var a=c;\r\n        if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;\r\n        if (a < Math.abs(c)) { a=c; var s=p/4; }\r\n        else var s = p/(2*Math.PI) * Math.asin (c/a);\r\n        return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;\r\n    },\r\n    easeInOutElastic: function (x, t, b, c, d) {\r\n        var s=1.70158;var p=0;var a=c;\r\n        if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);\r\n        if (a < Math.abs(c)) { a=c; var s=p/4; }\r\n        else var s = p/(2*Math.PI) * Math.asin (c/a);\r\n        if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;\r\n        return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;\r\n    },\r\n    easeInBack: function (x, t, b, c, d, s) {\r\n        if (s == undefined) s = 1.70158;\r\n        return c*(t/=d)*t*((s+1)*t - s) + b;\r\n    },\r\n    easeOutBack: function (x, t, b, c, d, s) {\r\n        if (s == undefined) s = 1.70158;\r\n        return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;\r\n    },\r\n    easeInOutBack: function (x, t, b, c, d, s) {\r\n        if (s == undefined) s = 1.70158;\r\n        if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;\r\n        return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;\r\n    },\r\n    easeInBounce: function (x, t, b, c, d) {\r\n        return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;\r\n    },\r\n    easeOutBounce: function (x, t, b, c, d) {\r\n        if ((t/=d) < (1/2.75)) {\r\n            return c*(7.5625*t*t) + b;\r\n        } else if (t < (2/2.75)) {\r\n            return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;\r\n        } else if (t < (2.5/2.75)) {\r\n            return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;\r\n        } else {\r\n            return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;\r\n        }\r\n    },\r\n    easeInOutBounce: function (x, t, b, c, d) {\r\n        if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;\r\n        return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;\r\n    }\r\n});\r\n\r\n/*\r\n *\r\n * TERMS OF USE - EASING EQUATIONS\r\n *\r\n * Open source under the BSD License.\r\n *\r\n * Copyright © 2001 Robert Penner\r\n * All rights reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without modification,\r\n * are permitted provided that the following conditions are met:\r\n *\r\n * Redistributions of source code must retain the above copyright notice, this list of\r\n * conditions and the following disclaimer.\r\n * Redistributions in binary form must reproduce the above copyright notice, this list\r\n * of conditions and the following disclaimer in the documentation and/or other materials\r\n * provided with the distribution.\r\n *\r\n * Neither the name of the author nor the names of contributors may be used to endorse\r\n * or promote products derived from this software without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY\r\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\r\n *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r\n *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\r\n *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\r\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r\n *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\r\n * OF THE POSSIBILITY OF SUCH DAMAGE.\r\n *\r\n */","/*! VelocityJS.org (1.2.3). (C) 2014 Julian Shapiro. MIT @license: en.wikipedia.org/wiki/MIT_License */\r\n/*! VelocityJS.org jQuery Shim (1.0.1). (C) 2014 The jQuery Foundation. MIT @license: en.wikipedia.org/wiki/MIT_License. */\r\n/*! Note that this has been modified by Materialize to confirm that Velocity is not already being imported. */\r\njQuery.Velocity?console.log(\"Velocity is already loaded. You may be needlessly importing Velocity again; note that Materialize includes Velocity.\"):(!function(e){function t(e){var t=e.length,a=r.type(e);return\"function\"===a||r.isWindow(e)?!1:1===e.nodeType&&t?!0:\"array\"===a||0===t||\"number\"==typeof t&&t>0&&t-1 in e}if(!e.jQuery){var r=function(e,t){return new r.fn.init(e,t)};r.isWindow=function(e){return null!=e&&e==e.window},r.type=function(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?n[i.call(e)]||\"object\":typeof e},r.isArray=Array.isArray||function(e){return\"array\"===r.type(e)},r.isPlainObject=function(e){var t;if(!e||\"object\"!==r.type(e)||e.nodeType||r.isWindow(e))return!1;try{if(e.constructor&&!o.call(e,\"constructor\")&&!o.call(e.constructor.prototype,\"isPrototypeOf\"))return!1}catch(a){return!1}for(t in e);return void 0===t||o.call(e,t)},r.each=function(e,r,a){var n,o=0,i=e.length,s=t(e);if(a){if(s)for(;i>o&&(n=r.apply(e[o],a),n!==!1);o++);else for(o in e)if(n=r.apply(e[o],a),n===!1)break}else if(s)for(;i>o&&(n=r.call(e[o],o,e[o]),n!==!1);o++);else for(o in e)if(n=r.call(e[o],o,e[o]),n===!1)break;return e},r.data=function(e,t,n){if(void 0===n){var o=e[r.expando],i=o&&a[o];if(void 0===t)return i;if(i&&t in i)return i[t]}else if(void 0!==t){var o=e[r.expando]||(e[r.expando]=++r.uuid);return a[o]=a[o]||{},a[o][t]=n,n}},r.removeData=function(e,t){var n=e[r.expando],o=n&&a[n];o&&r.each(t,function(e,t){delete o[t]})},r.extend=function(){var e,t,a,n,o,i,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for(\"boolean\"==typeof s&&(c=s,s=arguments[l]||{},l++),\"object\"!=typeof s&&\"function\"!==r.type(s)&&(s={}),l===u&&(s=this,l--);u>l;l++)if(null!=(o=arguments[l]))for(n in o)e=s[n],a=o[n],s!==a&&(c&&a&&(r.isPlainObject(a)||(t=r.isArray(a)))?(t?(t=!1,i=e&&r.isArray(e)?e:[]):i=e&&r.isPlainObject(e)?e:{},s[n]=r.extend(c,i,a)):void 0!==a&&(s[n]=a));return s},r.queue=function(e,a,n){function o(e,r){var a=r||[];return null!=e&&(t(Object(e))?!function(e,t){for(var r=+t.length,a=0,n=e.length;r>a;)e[n++]=t[a++];if(r!==r)for(;void 0!==t[a];)e[n++]=t[a++];return e.length=n,e}(a,\"string\"==typeof e?[e]:e):[].push.call(a,e)),a}if(e){a=(a||\"fx\")+\"queue\";var i=r.data(e,a);return n?(!i||r.isArray(n)?i=r.data(e,a,o(n)):i.push(n),i):i||[]}},r.dequeue=function(e,t){r.each(e.nodeType?[e]:e,function(e,a){t=t||\"fx\";var n=r.queue(a,t),o=n.shift();\"inprogress\"===o&&(o=n.shift()),o&&(\"fx\"===t&&n.unshift(\"inprogress\"),o.call(a,function(){r.dequeue(a,t)}))})},r.fn=r.prototype={init:function(e){if(e.nodeType)return this[0]=e,this;throw new Error(\"Not a DOM node.\")},offset:function(){var t=this[0].getBoundingClientRect?this[0].getBoundingClientRect():{top:0,left:0};return{top:t.top+(e.pageYOffset||document.scrollTop||0)-(document.clientTop||0),left:t.left+(e.pageXOffset||document.scrollLeft||0)-(document.clientLeft||0)}},position:function(){function e(){for(var e=this.offsetParent||document;e&&\"html\"===!e.nodeType.toLowerCase&&\"static\"===e.style.position;)e=e.offsetParent;return e||document}var t=this[0],e=e.apply(t),a=this.offset(),n=/^(?:body|html)$/i.test(e.nodeName)?{top:0,left:0}:r(e).offset();return a.top-=parseFloat(t.style.marginTop)||0,a.left-=parseFloat(t.style.marginLeft)||0,e.style&&(n.top+=parseFloat(e.style.borderTopWidth)||0,n.left+=parseFloat(e.style.borderLeftWidth)||0),{top:a.top-n.top,left:a.left-n.left}}};var a={};r.expando=\"velocity\"+(new Date).getTime(),r.uuid=0;for(var n={},o=n.hasOwnProperty,i=n.toString,s=\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"),l=0;l<s.length;l++)n[\"[object \"+s[l]+\"]\"]=s[l].toLowerCase();r.fn.init.prototype=r.fn,e.Velocity={Utilities:r}}}(window),function(e){\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=e():\"function\"==typeof define&&define.amd?define(e):e()}(function(){return function(e,t,r,a){function n(e){for(var t=-1,r=e?e.length:0,a=[];++t<r;){var n=e[t];n&&a.push(n)}return a}function o(e){return m.isWrapped(e)?e=[].slice.call(e):m.isNode(e)&&(e=[e]),e}function i(e){var t=f.data(e,\"velocity\");return null===t?a:t}function s(e){return function(t){return Math.round(t*e)*(1/e)}}function l(e,r,a,n){function o(e,t){return 1-3*t+3*e}function i(e,t){return 3*t-6*e}function s(e){return 3*e}function l(e,t,r){return((o(t,r)*e+i(t,r))*e+s(t))*e}function u(e,t,r){return 3*o(t,r)*e*e+2*i(t,r)*e+s(t)}function c(t,r){for(var n=0;m>n;++n){var o=u(r,e,a);if(0===o)return r;var i=l(r,e,a)-t;r-=i/o}return r}function p(){for(var t=0;b>t;++t)w[t]=l(t*x,e,a)}function f(t,r,n){var o,i,s=0;do i=r+(n-r)/2,o=l(i,e,a)-t,o>0?n=i:r=i;while(Math.abs(o)>h&&++s<v);return i}function d(t){for(var r=0,n=1,o=b-1;n!=o&&w[n]<=t;++n)r+=x;--n;var i=(t-w[n])/(w[n+1]-w[n]),s=r+i*x,l=u(s,e,a);return l>=y?c(t,s):0==l?s:f(t,r,r+x)}function g(){V=!0,(e!=r||a!=n)&&p()}var m=4,y=.001,h=1e-7,v=10,b=11,x=1/(b-1),S=\"Float32Array\"in t;if(4!==arguments.length)return!1;for(var P=0;4>P;++P)if(\"number\"!=typeof arguments[P]||isNaN(arguments[P])||!isFinite(arguments[P]))return!1;e=Math.min(e,1),a=Math.min(a,1),e=Math.max(e,0),a=Math.max(a,0);var w=S?new Float32Array(b):new Array(b),V=!1,C=function(t){return V||g(),e===r&&a===n?t:0===t?0:1===t?1:l(d(t),r,n)};C.getControlPoints=function(){return[{x:e,y:r},{x:a,y:n}]};var T=\"generateBezier(\"+[e,r,a,n]+\")\";return C.toString=function(){return T},C}function u(e,t){var r=e;return m.isString(e)?b.Easings[e]||(r=!1):r=m.isArray(e)&&1===e.length?s.apply(null,e):m.isArray(e)&&2===e.length?x.apply(null,e.concat([t])):m.isArray(e)&&4===e.length?l.apply(null,e):!1,r===!1&&(r=b.Easings[b.defaults.easing]?b.defaults.easing:v),r}function c(e){if(e){var t=(new Date).getTime(),r=b.State.calls.length;r>1e4&&(b.State.calls=n(b.State.calls));for(var o=0;r>o;o++)if(b.State.calls[o]){var s=b.State.calls[o],l=s[0],u=s[2],d=s[3],g=!!d,y=null;d||(d=b.State.calls[o][3]=t-16);for(var h=Math.min((t-d)/u.duration,1),v=0,x=l.length;x>v;v++){var P=l[v],V=P.element;if(i(V)){var C=!1;if(u.display!==a&&null!==u.display&&\"none\"!==u.display){if(\"flex\"===u.display){var T=[\"-webkit-box\",\"-moz-box\",\"-ms-flexbox\",\"-webkit-flex\"];f.each(T,function(e,t){S.setPropertyValue(V,\"display\",t)})}S.setPropertyValue(V,\"display\",u.display)}u.visibility!==a&&\"hidden\"!==u.visibility&&S.setPropertyValue(V,\"visibility\",u.visibility);for(var k in P)if(\"element\"!==k){var A,F=P[k],j=m.isString(F.easing)?b.Easings[F.easing]:F.easing;if(1===h)A=F.endValue;else{var E=F.endValue-F.startValue;if(A=F.startValue+E*j(h,u,E),!g&&A===F.currentValue)continue}if(F.currentValue=A,\"tween\"===k)y=A;else{if(S.Hooks.registered[k]){var H=S.Hooks.getRoot(k),N=i(V).rootPropertyValueCache[H];N&&(F.rootPropertyValue=N)}var L=S.setPropertyValue(V,k,F.currentValue+(0===parseFloat(A)?\"\":F.unitType),F.rootPropertyValue,F.scrollData);S.Hooks.registered[k]&&(i(V).rootPropertyValueCache[H]=S.Normalizations.registered[H]?S.Normalizations.registered[H](\"extract\",null,L[1]):L[1]),\"transform\"===L[0]&&(C=!0)}}u.mobileHA&&i(V).transformCache.translate3d===a&&(i(V).transformCache.translate3d=\"(0px, 0px, 0px)\",C=!0),C&&S.flushTransformCache(V)}}u.display!==a&&\"none\"!==u.display&&(b.State.calls[o][2].display=!1),u.visibility!==a&&\"hidden\"!==u.visibility&&(b.State.calls[o][2].visibility=!1),u.progress&&u.progress.call(s[1],s[1],h,Math.max(0,d+u.duration-t),d,y),1===h&&p(o)}}b.State.isTicking&&w(c)}function p(e,t){if(!b.State.calls[e])return!1;for(var r=b.State.calls[e][0],n=b.State.calls[e][1],o=b.State.calls[e][2],s=b.State.calls[e][4],l=!1,u=0,c=r.length;c>u;u++){var p=r[u].element;if(t||o.loop||(\"none\"===o.display&&S.setPropertyValue(p,\"display\",o.display),\"hidden\"===o.visibility&&S.setPropertyValue(p,\"visibility\",o.visibility)),o.loop!==!0&&(f.queue(p)[1]===a||!/\\.velocityQueueEntryFlag/i.test(f.queue(p)[1]))&&i(p)){i(p).isAnimating=!1,i(p).rootPropertyValueCache={};var d=!1;f.each(S.Lists.transforms3D,function(e,t){var r=/^scale/.test(t)?1:0,n=i(p).transformCache[t];i(p).transformCache[t]!==a&&new RegExp(\"^\\\\(\"+r+\"[^.]\").test(n)&&(d=!0,delete i(p).transformCache[t])}),o.mobileHA&&(d=!0,delete i(p).transformCache.translate3d),d&&S.flushTransformCache(p),S.Values.removeClass(p,\"velocity-animating\")}if(!t&&o.complete&&!o.loop&&u===c-1)try{o.complete.call(n,n)}catch(g){setTimeout(function(){throw g},1)}s&&o.loop!==!0&&s(n),i(p)&&o.loop===!0&&!t&&(f.each(i(p).tweensContainer,function(e,t){/^rotate/.test(e)&&360===parseFloat(t.endValue)&&(t.endValue=0,t.startValue=360),/^backgroundPosition/.test(e)&&100===parseFloat(t.endValue)&&\"%\"===t.unitType&&(t.endValue=0,t.startValue=100)}),b(p,\"reverse\",{loop:!0,delay:o.delay})),o.queue!==!1&&f.dequeue(p,o.queue)}b.State.calls[e]=!1;for(var m=0,y=b.State.calls.length;y>m;m++)if(b.State.calls[m]!==!1){l=!0;break}l===!1&&(b.State.isTicking=!1,delete b.State.calls,b.State.calls=[])}var f,d=function(){if(r.documentMode)return r.documentMode;for(var e=7;e>4;e--){var t=r.createElement(\"div\");if(t.innerHTML=\"<!--[if IE \"+e+\"]><span></span><![endif]-->\",t.getElementsByTagName(\"span\").length)return t=null,e}return a}(),g=function(){var e=0;return t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||function(t){var r,a=(new Date).getTime();return r=Math.max(0,16-(a-e)),e=a+r,setTimeout(function(){t(a+r)},r)}}(),m={isString:function(e){return\"string\"==typeof e},isArray:Array.isArray||function(e){return\"[object Array]\"===Object.prototype.toString.call(e)},isFunction:function(e){return\"[object Function]\"===Object.prototype.toString.call(e)},isNode:function(e){return e&&e.nodeType},isNodeList:function(e){return\"object\"==typeof e&&/^\\[object (HTMLCollection|NodeList|Object)\\]$/.test(Object.prototype.toString.call(e))&&e.length!==a&&(0===e.length||\"object\"==typeof e[0]&&e[0].nodeType>0)},isWrapped:function(e){return e&&(e.jquery||t.Zepto&&t.Zepto.zepto.isZ(e))},isSVG:function(e){return t.SVGElement&&e instanceof t.SVGElement},isEmptyObject:function(e){for(var t in e)return!1;return!0}},y=!1;if(e.fn&&e.fn.jquery?(f=e,y=!0):f=t.Velocity.Utilities,8>=d&&!y)throw new Error(\"Velocity: IE8 and below require jQuery to be loaded before Velocity.\");if(7>=d)return void(jQuery.fn.velocity=jQuery.fn.animate);var h=400,v=\"swing\",b={State:{isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),isAndroid:/Android/i.test(navigator.userAgent),isGingerbread:/Android 2\\.3\\.[3-7]/i.test(navigator.userAgent),isChrome:t.chrome,isFirefox:/Firefox/i.test(navigator.userAgent),prefixElement:r.createElement(\"div\"),prefixMatches:{},scrollAnchor:null,scrollPropertyLeft:null,scrollPropertyTop:null,isTicking:!1,calls:[]},CSS:{},Utilities:f,Redirects:{},Easings:{},Promise:t.Promise,defaults:{queue:\"\",duration:h,easing:v,begin:a,complete:a,progress:a,display:a,visibility:a,loop:!1,delay:!1,mobileHA:!0,_cacheValues:!0},init:function(e){f.data(e,\"velocity\",{isSVG:m.isSVG(e),isAnimating:!1,computedStyle:null,tweensContainer:null,rootPropertyValueCache:{},transformCache:{}})},hook:null,mock:!1,version:{major:1,minor:2,patch:2},debug:!1};t.pageYOffset!==a?(b.State.scrollAnchor=t,b.State.scrollPropertyLeft=\"pageXOffset\",b.State.scrollPropertyTop=\"pageYOffset\"):(b.State.scrollAnchor=r.documentElement||r.body.parentNode||r.body,b.State.scrollPropertyLeft=\"scrollLeft\",b.State.scrollPropertyTop=\"scrollTop\");var x=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,r,a){var n={x:t.x+a.dx*r,v:t.v+a.dv*r,tension:t.tension,friction:t.friction};return{dx:n.v,dv:e(n)}}function r(r,a){var n={dx:r.v,dv:e(r)},o=t(r,.5*a,n),i=t(r,.5*a,o),s=t(r,a,i),l=1/6*(n.dx+2*(o.dx+i.dx)+s.dx),u=1/6*(n.dv+2*(o.dv+i.dv)+s.dv);return r.x=r.x+l*a,r.v=r.v+u*a,r}return function a(e,t,n){var o,i,s,l={x:-1,v:0,tension:null,friction:null},u=[0],c=0,p=1e-4,f=.016;for(e=parseFloat(e)||500,t=parseFloat(t)||20,n=n||null,l.tension=e,l.friction=t,o=null!==n,o?(c=a(e,t),i=c/n*f):i=f;s=r(s||l,i),u.push(1+s.x),c+=16,Math.abs(s.x)>p&&Math.abs(s.v)>p;);return o?function(e){return u[e*(u.length-1)|0]}:c}}();b.Easings={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},spring:function(e){return 1-Math.cos(4.5*e*Math.PI)*Math.exp(6*-e)}},f.each([[\"ease\",[.25,.1,.25,1]],[\"ease-in\",[.42,0,1,1]],[\"ease-out\",[0,0,.58,1]],[\"ease-in-out\",[.42,0,.58,1]],[\"easeInSine\",[.47,0,.745,.715]],[\"easeOutSine\",[.39,.575,.565,1]],[\"easeInOutSine\",[.445,.05,.55,.95]],[\"easeInQuad\",[.55,.085,.68,.53]],[\"easeOutQuad\",[.25,.46,.45,.94]],[\"easeInOutQuad\",[.455,.03,.515,.955]],[\"easeInCubic\",[.55,.055,.675,.19]],[\"easeOutCubic\",[.215,.61,.355,1]],[\"easeInOutCubic\",[.645,.045,.355,1]],[\"easeInQuart\",[.895,.03,.685,.22]],[\"easeOutQuart\",[.165,.84,.44,1]],[\"easeInOutQuart\",[.77,0,.175,1]],[\"easeInQuint\",[.755,.05,.855,.06]],[\"easeOutQuint\",[.23,1,.32,1]],[\"easeInOutQuint\",[.86,0,.07,1]],[\"easeInExpo\",[.95,.05,.795,.035]],[\"easeOutExpo\",[.19,1,.22,1]],[\"easeInOutExpo\",[1,0,0,1]],[\"easeInCirc\",[.6,.04,.98,.335]],[\"easeOutCirc\",[.075,.82,.165,1]],[\"easeInOutCirc\",[.785,.135,.15,.86]]],function(e,t){b.Easings[t[0]]=l.apply(null,t[1])});var S=b.CSS={RegEx:{isHex:/^#([A-f\\d]{3}){1,2}$/i,valueUnwrap:/^[A-z]+\\((.*)\\)$/i,wrappedValueAlreadyExtracted:/[0-9.]+ [0-9.]+ [0-9.]+( [0-9.]+)?/,valueSplit:/([A-z]+\\(.+\\))|(([A-z0-9#-.]+?)(?=\\s|$))/gi},Lists:{colors:[\"fill\",\"stroke\",\"stopColor\",\"color\",\"backgroundColor\",\"borderColor\",\"borderTopColor\",\"borderRightColor\",\"borderBottomColor\",\"borderLeftColor\",\"outlineColor\"],transformsBase:[\"translateX\",\"translateY\",\"scale\",\"scaleX\",\"scaleY\",\"skewX\",\"skewY\",\"rotateZ\"],transforms3D:[\"transformPerspective\",\"translateZ\",\"scaleZ\",\"rotateX\",\"rotateY\"]},Hooks:{templates:{textShadow:[\"Color X Y Blur\",\"black 0px 0px 0px\"],boxShadow:[\"Color X Y Blur Spread\",\"black 0px 0px 0px 0px\"],clip:[\"Top Right Bottom Left\",\"0px 0px 0px 0px\"],backgroundPosition:[\"X Y\",\"0% 0%\"],transformOrigin:[\"X Y Z\",\"50% 50% 0px\"],perspectiveOrigin:[\"X Y\",\"50% 50%\"]},registered:{},register:function(){for(var e=0;e<S.Lists.colors.length;e++){var t=\"color\"===S.Lists.colors[e]?\"0 0 0 1\":\"255 255 255 1\";S.Hooks.templates[S.Lists.colors[e]]=[\"Red Green Blue Alpha\",t]}var r,a,n;if(d)for(r in S.Hooks.templates){a=S.Hooks.templates[r],n=a[0].split(\" \");var o=a[1].match(S.RegEx.valueSplit);\"Color\"===n[0]&&(n.push(n.shift()),o.push(o.shift()),S.Hooks.templates[r]=[n.join(\" \"),o.join(\" \")])}for(r in S.Hooks.templates){a=S.Hooks.templates[r],n=a[0].split(\" \");for(var e in n){var i=r+n[e],s=e;S.Hooks.registered[i]=[r,s]}}},getRoot:function(e){var t=S.Hooks.registered[e];return t?t[0]:e},cleanRootPropertyValue:function(e,t){return S.RegEx.valueUnwrap.test(t)&&(t=t.match(S.RegEx.valueUnwrap)[1]),S.Values.isCSSNullValue(t)&&(t=S.Hooks.templates[e][1]),t},extractValue:function(e,t){var r=S.Hooks.registered[e];if(r){var a=r[0],n=r[1];return t=S.Hooks.cleanRootPropertyValue(a,t),t.toString().match(S.RegEx.valueSplit)[n]}return t},injectValue:function(e,t,r){var a=S.Hooks.registered[e];if(a){var n,o,i=a[0],s=a[1];return r=S.Hooks.cleanRootPropertyValue(i,r),n=r.toString().match(S.RegEx.valueSplit),n[s]=t,o=n.join(\" \")}return r}},Normalizations:{registered:{clip:function(e,t,r){switch(e){case\"name\":return\"clip\";case\"extract\":var a;return S.RegEx.wrappedValueAlreadyExtracted.test(r)?a=r:(a=r.toString().match(S.RegEx.valueUnwrap),a=a?a[1].replace(/,(\\s+)?/g,\" \"):r),a;case\"inject\":return\"rect(\"+r+\")\"}},blur:function(e,t,r){switch(e){case\"name\":return b.State.isFirefox?\"filter\":\"-webkit-filter\";case\"extract\":var a=parseFloat(r);if(!a&&0!==a){var n=r.toString().match(/blur\\(([0-9]+[A-z]+)\\)/i);a=n?n[1]:0}return a;case\"inject\":return parseFloat(r)?\"blur(\"+r+\")\":\"none\"}},opacity:function(e,t,r){if(8>=d)switch(e){case\"name\":return\"filter\";case\"extract\":var a=r.toString().match(/alpha\\(opacity=(.*)\\)/i);return r=a?a[1]/100:1;case\"inject\":return t.style.zoom=1,parseFloat(r)>=1?\"\":\"alpha(opacity=\"+parseInt(100*parseFloat(r),10)+\")\"}else switch(e){case\"name\":return\"opacity\";case\"extract\":return r;case\"inject\":return r}}},register:function(){9>=d||b.State.isGingerbread||(S.Lists.transformsBase=S.Lists.transformsBase.concat(S.Lists.transforms3D));for(var e=0;e<S.Lists.transformsBase.length;e++)!function(){var t=S.Lists.transformsBase[e];S.Normalizations.registered[t]=function(e,r,n){switch(e){case\"name\":return\"transform\";case\"extract\":return i(r)===a||i(r).transformCache[t]===a?/^scale/i.test(t)?1:0:i(r).transformCache[t].replace(/[()]/g,\"\");case\"inject\":var o=!1;switch(t.substr(0,t.length-1)){case\"translate\":o=!/(%|px|em|rem|vw|vh|\\d)$/i.test(n);break;case\"scal\":case\"scale\":b.State.isAndroid&&i(r).transformCache[t]===a&&1>n&&(n=1),o=!/(\\d)$/i.test(n);break;case\"skew\":o=!/(deg|\\d)$/i.test(n);break;case\"rotate\":o=!/(deg|\\d)$/i.test(n)}return o||(i(r).transformCache[t]=\"(\"+n+\")\"),i(r).transformCache[t]}}}();for(var e=0;e<S.Lists.colors.length;e++)!function(){var t=S.Lists.colors[e];S.Normalizations.registered[t]=function(e,r,n){switch(e){case\"name\":return t;case\"extract\":var o;if(S.RegEx.wrappedValueAlreadyExtracted.test(n))o=n;else{var i,s={black:\"rgb(0, 0, 0)\",blue:\"rgb(0, 0, 255)\",gray:\"rgb(128, 128, 128)\",green:\"rgb(0, 128, 0)\",red:\"rgb(255, 0, 0)\",white:\"rgb(255, 255, 255)\"};/^[A-z]+$/i.test(n)?i=s[n]!==a?s[n]:s.black:S.RegEx.isHex.test(n)?i=\"rgb(\"+S.Values.hexToRgb(n).join(\" \")+\")\":/^rgba?\\(/i.test(n)||(i=s.black),o=(i||n).toString().match(S.RegEx.valueUnwrap)[1].replace(/,(\\s+)?/g,\" \")}return 8>=d||3!==o.split(\" \").length||(o+=\" 1\"),o;case\"inject\":return 8>=d?4===n.split(\" \").length&&(n=n.split(/\\s+/).slice(0,3).join(\" \")):3===n.split(\" \").length&&(n+=\" 1\"),(8>=d?\"rgb\":\"rgba\")+\"(\"+n.replace(/\\s+/g,\",\").replace(/\\.(\\d)+(?=,)/g,\"\")+\")\"}}}()}},Names:{camelCase:function(e){return e.replace(/-(\\w)/g,function(e,t){return t.toUpperCase()})},SVGAttribute:function(e){var t=\"width|height|x|y|cx|cy|r|rx|ry|x1|x2|y1|y2\";return(d||b.State.isAndroid&&!b.State.isChrome)&&(t+=\"|transform\"),new RegExp(\"^(\"+t+\")$\",\"i\").test(e)},prefixCheck:function(e){if(b.State.prefixMatches[e])return[b.State.prefixMatches[e],!0];for(var t=[\"\",\"Webkit\",\"Moz\",\"ms\",\"O\"],r=0,a=t.length;a>r;r++){var n;if(n=0===r?e:t[r]+e.replace(/^\\w/,function(e){return e.toUpperCase()}),m.isString(b.State.prefixElement.style[n]))return b.State.prefixMatches[e]=n,[n,!0]}return[e,!1]}},Values:{hexToRgb:function(e){var t,r=/^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i,a=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;return e=e.replace(r,function(e,t,r,a){return t+t+r+r+a+a}),t=a.exec(e),t?[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]:[0,0,0]},isCSSNullValue:function(e){return 0==e||/^(none|auto|transparent|(rgba\\(0, ?0, ?0, ?0\\)))$/i.test(e)},getUnitType:function(e){return/^(rotate|skew)/i.test(e)?\"deg\":/(^(scale|scaleX|scaleY|scaleZ|alpha|flexGrow|flexHeight|zIndex|fontWeight)$)|((opacity|red|green|blue|alpha)$)/i.test(e)?\"\":\"px\"},getDisplayType:function(e){var t=e&&e.tagName.toString().toLowerCase();return/^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|var|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i.test(t)?\"inline\":/^(li)$/i.test(t)?\"list-item\":/^(tr)$/i.test(t)?\"table-row\":/^(table)$/i.test(t)?\"table\":/^(tbody)$/i.test(t)?\"table-row-group\":\"block\"},addClass:function(e,t){e.classList?e.classList.add(t):e.className+=(e.className.length?\" \":\"\")+t},removeClass:function(e,t){e.classList?e.classList.remove(t):e.className=e.className.toString().replace(new RegExp(\"(^|\\\\s)\"+t.split(\" \").join(\"|\")+\"(\\\\s|$)\",\"gi\"),\" \")}},getPropertyValue:function(e,r,n,o){function s(e,r){function n(){u&&S.setPropertyValue(e,\"display\",\"none\")}var l=0;if(8>=d)l=f.css(e,r);else{var u=!1;if(/^(width|height)$/.test(r)&&0===S.getPropertyValue(e,\"display\")&&(u=!0,S.setPropertyValue(e,\"display\",S.Values.getDisplayType(e))),!o){if(\"height\"===r&&\"border-box\"!==S.getPropertyValue(e,\"boxSizing\").toString().toLowerCase()){var c=e.offsetHeight-(parseFloat(S.getPropertyValue(e,\"borderTopWidth\"))||0)-(parseFloat(S.getPropertyValue(e,\"borderBottomWidth\"))||0)-(parseFloat(S.getPropertyValue(e,\"paddingTop\"))||0)-(parseFloat(S.getPropertyValue(e,\"paddingBottom\"))||0);return n(),c}if(\"width\"===r&&\"border-box\"!==S.getPropertyValue(e,\"boxSizing\").toString().toLowerCase()){var p=e.offsetWidth-(parseFloat(S.getPropertyValue(e,\"borderLeftWidth\"))||0)-(parseFloat(S.getPropertyValue(e,\"borderRightWidth\"))||0)-(parseFloat(S.getPropertyValue(e,\"paddingLeft\"))||0)-(parseFloat(S.getPropertyValue(e,\"paddingRight\"))||0);return n(),p}}var g;g=i(e)===a?t.getComputedStyle(e,null):i(e).computedStyle?i(e).computedStyle:i(e).computedStyle=t.getComputedStyle(e,null),\"borderColor\"===r&&(r=\"borderTopColor\"),l=9===d&&\"filter\"===r?g.getPropertyValue(r):g[r],(\"\"===l||null===l)&&(l=e.style[r]),n()}if(\"auto\"===l&&/^(top|right|bottom|left)$/i.test(r)){var m=s(e,\"position\");(\"fixed\"===m||\"absolute\"===m&&/top|left/i.test(r))&&(l=f(e).position()[r]+\"px\")}return l}var l;if(S.Hooks.registered[r]){var u=r,c=S.Hooks.getRoot(u);n===a&&(n=S.getPropertyValue(e,S.Names.prefixCheck(c)[0])),S.Normalizations.registered[c]&&(n=S.Normalizations.registered[c](\"extract\",e,n)),l=S.Hooks.extractValue(u,n)}else if(S.Normalizations.registered[r]){var p,g;p=S.Normalizations.registered[r](\"name\",e),\"transform\"!==p&&(g=s(e,S.Names.prefixCheck(p)[0]),S.Values.isCSSNullValue(g)&&S.Hooks.templates[r]&&(g=S.Hooks.templates[r][1])),l=S.Normalizations.registered[r](\"extract\",e,g)}if(!/^[\\d-]/.test(l))if(i(e)&&i(e).isSVG&&S.Names.SVGAttribute(r))if(/^(height|width)$/i.test(r))try{l=e.getBBox()[r]}catch(m){l=0}else l=e.getAttribute(r);else l=s(e,S.Names.prefixCheck(r)[0]);return S.Values.isCSSNullValue(l)&&(l=0),b.debug>=2&&console.log(\"Get \"+r+\": \"+l),l},setPropertyValue:function(e,r,a,n,o){var s=r;if(\"scroll\"===r)o.container?o.container[\"scroll\"+o.direction]=a:\"Left\"===o.direction?t.scrollTo(a,o.alternateValue):t.scrollTo(o.alternateValue,a);else if(S.Normalizations.registered[r]&&\"transform\"===S.Normalizations.registered[r](\"name\",e))S.Normalizations.registered[r](\"inject\",e,a),s=\"transform\",a=i(e).transformCache[r];else{if(S.Hooks.registered[r]){var l=r,u=S.Hooks.getRoot(r);n=n||S.getPropertyValue(e,u),a=S.Hooks.injectValue(l,a,n),r=u}if(S.Normalizations.registered[r]&&(a=S.Normalizations.registered[r](\"inject\",e,a),r=S.Normalizations.registered[r](\"name\",e)),s=S.Names.prefixCheck(r)[0],8>=d)try{e.style[s]=a}catch(c){b.debug&&console.log(\"Browser does not support [\"+a+\"] for [\"+s+\"]\")}else i(e)&&i(e).isSVG&&S.Names.SVGAttribute(r)?e.setAttribute(r,a):e.style[s]=a;b.debug>=2&&console.log(\"Set \"+r+\" (\"+s+\"): \"+a)}return[s,a]},flushTransformCache:function(e){function t(t){return parseFloat(S.getPropertyValue(e,t))}var r=\"\";if((d||b.State.isAndroid&&!b.State.isChrome)&&i(e).isSVG){var a={translate:[t(\"translateX\"),t(\"translateY\")],skewX:[t(\"skewX\")],skewY:[t(\"skewY\")],scale:1!==t(\"scale\")?[t(\"scale\"),t(\"scale\")]:[t(\"scaleX\"),t(\"scaleY\")],rotate:[t(\"rotateZ\"),0,0]};f.each(i(e).transformCache,function(e){/^translate/i.test(e)?e=\"translate\":/^scale/i.test(e)?e=\"scale\":/^rotate/i.test(e)&&(e=\"rotate\"),a[e]&&(r+=e+\"(\"+a[e].join(\" \")+\") \",delete a[e])})}else{var n,o;f.each(i(e).transformCache,function(t){return n=i(e).transformCache[t],\"transformPerspective\"===t?(o=n,!0):(9===d&&\"rotateZ\"===t&&(t=\"rotate\"),void(r+=t+n+\" \"))}),o&&(r=\"perspective\"+o+\" \"+r)}S.setPropertyValue(e,\"transform\",r)}};S.Hooks.register(),S.Normalizations.register(),b.hook=function(e,t,r){var n=a;return e=o(e),f.each(e,function(e,o){if(i(o)===a&&b.init(o),r===a)n===a&&(n=b.CSS.getPropertyValue(o,t));else{var s=b.CSS.setPropertyValue(o,t,r);\"transform\"===s[0]&&b.CSS.flushTransformCache(o),n=s}}),n};var P=function(){function e(){return s?k.promise||null:l}function n(){function e(e){function p(e,t){var r=a,n=a,i=a;return m.isArray(e)?(r=e[0],!m.isArray(e[1])&&/^[\\d-]/.test(e[1])||m.isFunction(e[1])||S.RegEx.isHex.test(e[1])?i=e[1]:(m.isString(e[1])&&!S.RegEx.isHex.test(e[1])||m.isArray(e[1]))&&(n=t?e[1]:u(e[1],s.duration),e[2]!==a&&(i=e[2]))):r=e,t||(n=n||s.easing),m.isFunction(r)&&(r=r.call(o,V,w)),m.isFunction(i)&&(i=i.call(o,V,w)),[r||0,n,i]}function d(e,t){var r,a;return a=(t||\"0\").toString().toLowerCase().replace(/[%A-z]+$/,function(e){return r=e,\"\"}),r||(r=S.Values.getUnitType(e)),[a,r]}function h(){var e={myParent:o.parentNode||r.body,position:S.getPropertyValue(o,\"position\"),fontSize:S.getPropertyValue(o,\"fontSize\")},a=e.position===L.lastPosition&&e.myParent===L.lastParent,n=e.fontSize===L.lastFontSize;L.lastParent=e.myParent,L.lastPosition=e.position,L.lastFontSize=e.fontSize;var s=100,l={};if(n&&a)l.emToPx=L.lastEmToPx,l.percentToPxWidth=L.lastPercentToPxWidth,l.percentToPxHeight=L.lastPercentToPxHeight;else{var u=i(o).isSVG?r.createElementNS(\"http://www.w3.org/2000/svg\",\"rect\"):r.createElement(\"div\");b.init(u),e.myParent.appendChild(u),f.each([\"overflow\",\"overflowX\",\"overflowY\"],function(e,t){b.CSS.setPropertyValue(u,t,\"hidden\")}),b.CSS.setPropertyValue(u,\"position\",e.position),b.CSS.setPropertyValue(u,\"fontSize\",e.fontSize),b.CSS.setPropertyValue(u,\"boxSizing\",\"content-box\"),f.each([\"minWidth\",\"maxWidth\",\"width\",\"minHeight\",\"maxHeight\",\"height\"],function(e,t){b.CSS.setPropertyValue(u,t,s+\"%\")}),b.CSS.setPropertyValue(u,\"paddingLeft\",s+\"em\"),l.percentToPxWidth=L.lastPercentToPxWidth=(parseFloat(S.getPropertyValue(u,\"width\",null,!0))||1)/s,l.percentToPxHeight=L.lastPercentToPxHeight=(parseFloat(S.getPropertyValue(u,\"height\",null,!0))||1)/s,l.emToPx=L.lastEmToPx=(parseFloat(S.getPropertyValue(u,\"paddingLeft\"))||1)/s,e.myParent.removeChild(u)}return null===L.remToPx&&(L.remToPx=parseFloat(S.getPropertyValue(r.body,\"fontSize\"))||16),null===L.vwToPx&&(L.vwToPx=parseFloat(t.innerWidth)/100,L.vhToPx=parseFloat(t.innerHeight)/100),l.remToPx=L.remToPx,l.vwToPx=L.vwToPx,l.vhToPx=L.vhToPx,b.debug>=1&&console.log(\"Unit ratios: \"+JSON.stringify(l),o),l}if(s.begin&&0===V)try{s.begin.call(g,g)}catch(x){setTimeout(function(){throw x},1)}if(\"scroll\"===A){var P,C,T,F=/^x$/i.test(s.axis)?\"Left\":\"Top\",j=parseFloat(s.offset)||0;s.container?m.isWrapped(s.container)||m.isNode(s.container)?(s.container=s.container[0]||s.container,P=s.container[\"scroll\"+F],T=P+f(o).position()[F.toLowerCase()]+j):s.container=null:(P=b.State.scrollAnchor[b.State[\"scrollProperty\"+F]],C=b.State.scrollAnchor[b.State[\"scrollProperty\"+(\"Left\"===F?\"Top\":\"Left\")]],T=f(o).offset()[F.toLowerCase()]+j),l={scroll:{rootPropertyValue:!1,startValue:P,currentValue:P,endValue:T,unitType:\"\",easing:s.easing,scrollData:{container:s.container,direction:F,alternateValue:C}},element:o},b.debug&&console.log(\"tweensContainer (scroll): \",l.scroll,o)}else if(\"reverse\"===A){if(!i(o).tweensContainer)return void f.dequeue(o,s.queue);\"none\"===i(o).opts.display&&(i(o).opts.display=\"auto\"),\"hidden\"===i(o).opts.visibility&&(i(o).opts.visibility=\"visible\"),i(o).opts.loop=!1,i(o).opts.begin=null,i(o).opts.complete=null,v.easing||delete s.easing,v.duration||delete s.duration,s=f.extend({},i(o).opts,s);var E=f.extend(!0,{},i(o).tweensContainer);for(var H in E)if(\"element\"!==H){var N=E[H].startValue;E[H].startValue=E[H].currentValue=E[H].endValue,E[H].endValue=N,m.isEmptyObject(v)||(E[H].easing=s.easing),b.debug&&console.log(\"reverse tweensContainer (\"+H+\"): \"+JSON.stringify(E[H]),o)}l=E}else if(\"start\"===A){var E;i(o).tweensContainer&&i(o).isAnimating===!0&&(E=i(o).tweensContainer),f.each(y,function(e,t){if(RegExp(\"^\"+S.Lists.colors.join(\"$|^\")+\"$\").test(e)){var r=p(t,!0),n=r[0],o=r[1],i=r[2];if(S.RegEx.isHex.test(n)){for(var s=[\"Red\",\"Green\",\"Blue\"],l=S.Values.hexToRgb(n),u=i?S.Values.hexToRgb(i):a,c=0;c<s.length;c++){var f=[l[c]];o&&f.push(o),u!==a&&f.push(u[c]),y[e+s[c]]=f}delete y[e]}}});for(var z in y){var O=p(y[z]),q=O[0],$=O[1],M=O[2];z=S.Names.camelCase(z);var I=S.Hooks.getRoot(z),B=!1;if(i(o).isSVG||\"tween\"===I||S.Names.prefixCheck(I)[1]!==!1||S.Normalizations.registered[I]!==a){(s.display!==a&&null!==s.display&&\"none\"!==s.display||s.visibility!==a&&\"hidden\"!==s.visibility)&&/opacity|filter/.test(z)&&!M&&0!==q&&(M=0),s._cacheValues&&E&&E[z]?(M===a&&(M=E[z].endValue+E[z].unitType),B=i(o).rootPropertyValueCache[I]):S.Hooks.registered[z]?M===a?(B=S.getPropertyValue(o,I),M=S.getPropertyValue(o,z,B)):B=S.Hooks.templates[I][1]:M===a&&(M=S.getPropertyValue(o,z));var W,G,Y,D=!1;if(W=d(z,M),M=W[0],Y=W[1],W=d(z,q),q=W[0].replace(/^([+-\\/*])=/,function(e,t){return D=t,\"\"}),G=W[1],M=parseFloat(M)||0,q=parseFloat(q)||0,\"%\"===G&&(/^(fontSize|lineHeight)$/.test(z)?(q/=100,G=\"em\"):/^scale/.test(z)?(q/=100,G=\"\"):/(Red|Green|Blue)$/i.test(z)&&(q=q/100*255,G=\"\")),/[\\/*]/.test(D))G=Y;else if(Y!==G&&0!==M)if(0===q)G=Y;else{n=n||h();var Q=/margin|padding|left|right|width|text|word|letter/i.test(z)||/X$/.test(z)||\"x\"===z?\"x\":\"y\";switch(Y){case\"%\":M*=\"x\"===Q?n.percentToPxWidth:n.percentToPxHeight;break;case\"px\":break;default:M*=n[Y+\"ToPx\"]}switch(G){case\"%\":M*=1/(\"x\"===Q?n.percentToPxWidth:n.percentToPxHeight);break;case\"px\":break;default:M*=1/n[G+\"ToPx\"]}}switch(D){case\"+\":q=M+q;break;case\"-\":q=M-q;break;case\"*\":q=M*q;break;case\"/\":q=M/q}l[z]={rootPropertyValue:B,startValue:M,currentValue:M,endValue:q,unitType:G,easing:$},b.debug&&console.log(\"tweensContainer (\"+z+\"): \"+JSON.stringify(l[z]),o)}else b.debug&&console.log(\"Skipping [\"+I+\"] due to a lack of browser support.\")}l.element=o}l.element&&(S.Values.addClass(o,\"velocity-animating\"),R.push(l),\"\"===s.queue&&(i(o).tweensContainer=l,i(o).opts=s),i(o).isAnimating=!0,V===w-1?(b.State.calls.push([R,g,s,null,k.resolver]),b.State.isTicking===!1&&(b.State.isTicking=!0,c())):V++)}var n,o=this,s=f.extend({},b.defaults,v),l={};switch(i(o)===a&&b.init(o),parseFloat(s.delay)&&s.queue!==!1&&f.queue(o,s.queue,function(e){b.velocityQueueEntryFlag=!0,i(o).delayTimer={setTimeout:setTimeout(e,parseFloat(s.delay)),next:e}}),s.duration.toString().toLowerCase()){case\"fast\":s.duration=200;break;case\"normal\":s.duration=h;break;case\"slow\":s.duration=600;break;default:s.duration=parseFloat(s.duration)||1}b.mock!==!1&&(b.mock===!0?s.duration=s.delay=1:(s.duration*=parseFloat(b.mock)||1,s.delay*=parseFloat(b.mock)||1)),s.easing=u(s.easing,s.duration),s.begin&&!m.isFunction(s.begin)&&(s.begin=null),s.progress&&!m.isFunction(s.progress)&&(s.progress=null),s.complete&&!m.isFunction(s.complete)&&(s.complete=null),s.display!==a&&null!==s.display&&(s.display=s.display.toString().toLowerCase(),\"auto\"===s.display&&(s.display=b.CSS.Values.getDisplayType(o))),s.visibility!==a&&null!==s.visibility&&(s.visibility=s.visibility.toString().toLowerCase()),s.mobileHA=s.mobileHA&&b.State.isMobile&&!b.State.isGingerbread,s.queue===!1?s.delay?setTimeout(e,s.delay):e():f.queue(o,s.queue,function(t,r){return r===!0?(k.promise&&k.resolver(g),!0):(b.velocityQueueEntryFlag=!0,void e(t))}),\"\"!==s.queue&&\"fx\"!==s.queue||\"inprogress\"===f.queue(o)[0]||f.dequeue(o)}var s,l,d,g,y,v,x=arguments[0]&&(arguments[0].p||f.isPlainObject(arguments[0].properties)&&!arguments[0].properties.names||m.isString(arguments[0].properties));if(m.isWrapped(this)?(s=!1,d=0,g=this,l=this):(s=!0,d=1,g=x?arguments[0].elements||arguments[0].e:arguments[0]),g=o(g)){x?(y=arguments[0].properties||arguments[0].p,v=arguments[0].options||arguments[0].o):(y=arguments[d],v=arguments[d+1]);var w=g.length,V=0;if(!/^(stop|finish)$/i.test(y)&&!f.isPlainObject(v)){var C=d+1;v={};for(var T=C;T<arguments.length;T++)m.isArray(arguments[T])||!/^(fast|normal|slow)$/i.test(arguments[T])&&!/^\\d/.test(arguments[T])?m.isString(arguments[T])||m.isArray(arguments[T])?v.easing=arguments[T]:m.isFunction(arguments[T])&&(v.complete=arguments[T]):v.duration=arguments[T]}var k={promise:null,resolver:null,rejecter:null};s&&b.Promise&&(k.promise=new b.Promise(function(e,t){k.resolver=e,k.rejecter=t}));var A;switch(y){case\"scroll\":A=\"scroll\";break;case\"reverse\":A=\"reverse\";break;case\"finish\":case\"stop\":f.each(g,function(e,t){i(t)&&i(t).delayTimer&&(clearTimeout(i(t).delayTimer.setTimeout),i(t).delayTimer.next&&i(t).delayTimer.next(),delete i(t).delayTimer)});var F=[];return f.each(b.State.calls,function(e,t){t&&f.each(t[1],function(r,n){var o=v===a?\"\":v;return o===!0||t[2].queue===o||v===a&&t[2].queue===!1?void f.each(g,function(r,a){a===n&&((v===!0||m.isString(v))&&(f.each(f.queue(a,m.isString(v)?v:\"\"),function(e,t){\r\nm.isFunction(t)&&t(null,!0)}),f.queue(a,m.isString(v)?v:\"\",[])),\"stop\"===y?(i(a)&&i(a).tweensContainer&&o!==!1&&f.each(i(a).tweensContainer,function(e,t){t.endValue=t.currentValue}),F.push(e)):\"finish\"===y&&(t[2].duration=1))}):!0})}),\"stop\"===y&&(f.each(F,function(e,t){p(t,!0)}),k.promise&&k.resolver(g)),e();default:if(!f.isPlainObject(y)||m.isEmptyObject(y)){if(m.isString(y)&&b.Redirects[y]){var j=f.extend({},v),E=j.duration,H=j.delay||0;return j.backwards===!0&&(g=f.extend(!0,[],g).reverse()),f.each(g,function(e,t){parseFloat(j.stagger)?j.delay=H+parseFloat(j.stagger)*e:m.isFunction(j.stagger)&&(j.delay=H+j.stagger.call(t,e,w)),j.drag&&(j.duration=parseFloat(E)||(/^(callout|transition)/.test(y)?1e3:h),j.duration=Math.max(j.duration*(j.backwards?1-e/w:(e+1)/w),.75*j.duration,200)),b.Redirects[y].call(t,t,j||{},e,w,g,k.promise?k:a)}),e()}var N=\"Velocity: First argument (\"+y+\") was not a property map, a known action, or a registered redirect. Aborting.\";return k.promise?k.rejecter(new Error(N)):console.log(N),e()}A=\"start\"}var L={lastParent:null,lastPosition:null,lastFontSize:null,lastPercentToPxWidth:null,lastPercentToPxHeight:null,lastEmToPx:null,remToPx:null,vwToPx:null,vhToPx:null},R=[];f.each(g,function(e,t){m.isNode(t)&&n.call(t)});var z,j=f.extend({},b.defaults,v);if(j.loop=parseInt(j.loop),z=2*j.loop-1,j.loop)for(var O=0;z>O;O++){var q={delay:j.delay,progress:j.progress};O===z-1&&(q.display=j.display,q.visibility=j.visibility,q.complete=j.complete),P(g,\"reverse\",q)}return e()}};b=f.extend(P,b),b.animate=P;var w=t.requestAnimationFrame||g;return b.State.isMobile||r.hidden===a||r.addEventListener(\"visibilitychange\",function(){r.hidden?(w=function(e){return setTimeout(function(){e(!0)},16)},c()):w=t.requestAnimationFrame||g}),e.Velocity=b,e!==t&&(e.fn.velocity=P,e.fn.velocity.defaults=b.defaults),f.each([\"Down\",\"Up\"],function(e,t){b.Redirects[\"slide\"+t]=function(e,r,n,o,i,s){var l=f.extend({},r),u=l.begin,c=l.complete,p={height:\"\",marginTop:\"\",marginBottom:\"\",paddingTop:\"\",paddingBottom:\"\"},d={};l.display===a&&(l.display=\"Down\"===t?\"inline\"===b.CSS.Values.getDisplayType(e)?\"inline-block\":\"block\":\"none\"),l.begin=function(){u&&u.call(i,i);for(var r in p){d[r]=e.style[r];var a=b.CSS.getPropertyValue(e,r);p[r]=\"Down\"===t?[a,0]:[0,a]}d.overflow=e.style.overflow,e.style.overflow=\"hidden\"},l.complete=function(){for(var t in d)e.style[t]=d[t];c&&c.call(i,i),s&&s.resolver(i)},b(e,p,l)}}),f.each([\"In\",\"Out\"],function(e,t){b.Redirects[\"fade\"+t]=function(e,r,n,o,i,s){var l=f.extend({},r),u={opacity:\"In\"===t?1:0},c=l.complete;l.complete=n!==o-1?l.begin=null:function(){c&&c.call(i,i),s&&s.resolver(i)},l.display===a&&(l.display=\"In\"===t?\"auto\":\"none\"),b(this,u,l)}}),b}(window.jQuery||window.Zepto||window,window,document)}));\r\n","(function() {\n    var MutationObserver, Util, WeakMap, getComputedStyle, getComputedStyleRX,\n        bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n        indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n    Util = (function() {\n        function Util() {}\n\n        Util.prototype.extend = function(custom, defaults) {\n            var key, value;\n            for (key in defaults) {\n                value = defaults[key];\n                if (custom[key] == null) {\n                    custom[key] = value;\n                }\n            }\n            return custom;\n        };\n\n        Util.prototype.isMobile = function(agent) {\n            return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(agent);\n        };\n\n        Util.prototype.createEvent = function(event, bubble, cancel, detail) {\n            var customEvent;\n            if (bubble == null) {\n                bubble = false;\n            }\n            if (cancel == null) {\n                cancel = false;\n            }\n            if (detail == null) {\n                detail = null;\n            }\n            if (document.createEvent != null) {\n                customEvent = document.createEvent('CustomEvent');\n                customEvent.initCustomEvent(event, bubble, cancel, detail);\n            } else if (document.createEventObject != null) {\n                customEvent = document.createEventObject();\n                customEvent.eventType = event;\n            } else {\n                customEvent.eventName = event;\n            }\n            return customEvent;\n        };\n\n        Util.prototype.emitEvent = function(elem, event) {\n            if (elem.dispatchEvent != null) {\n                return elem.dispatchEvent(event);\n            } else if (event in (elem != null)) {\n                return elem[event]();\n            } else if ((\"on\" + event) in (elem != null)) {\n                return elem[\"on\" + event]();\n            }\n        };\n\n        Util.prototype.addEvent = function(elem, event, fn) {\n            if (elem.addEventListener != null) {\n                return elem.addEventListener(event, fn, false);\n            } else if (elem.attachEvent != null) {\n                return elem.attachEvent(\"on\" + event, fn);\n            } else {\n                return elem[event] = fn;\n            }\n        };\n\n        Util.prototype.removeEvent = function(elem, event, fn) {\n            if (elem.removeEventListener != null) {\n                return elem.removeEventListener(event, fn, false);\n            } else if (elem.detachEvent != null) {\n                return elem.detachEvent(\"on\" + event, fn);\n            } else {\n                return delete elem[event];\n            }\n        };\n\n        Util.prototype.innerHeight = function() {\n            if ('innerHeight' in window) {\n                return window.innerHeight;\n            } else {\n                return document.documentElement.clientHeight;\n            }\n        };\n\n        return Util;\n\n    })();\n\n    WeakMap = this.WeakMap || this.MozWeakMap || (WeakMap = (function() {\n            function WeakMap() {\n                this.keys = [];\n                this.values = [];\n            }\n\n            WeakMap.prototype.get = function(key) {\n                var i, item, j, len, ref;\n                ref = this.keys;\n                for (i = j = 0, len = ref.length; j < len; i = ++j) {\n                    item = ref[i];\n                    if (item === key) {\n                        return this.values[i];\n                    }\n                }\n            };\n\n            WeakMap.prototype.set = function(key, value) {\n                var i, item, j, len, ref;\n                ref = this.keys;\n                for (i = j = 0, len = ref.length; j < len; i = ++j) {\n                    item = ref[i];\n                    if (item === key) {\n                        this.values[i] = value;\n                        return;\n                    }\n                }\n                this.keys.push(key);\n                return this.values.push(value);\n            };\n\n            return WeakMap;\n\n        })());\n\n    MutationObserver = this.MutationObserver || this.WebkitMutationObserver || this.MozMutationObserver || (MutationObserver = (function() {\n            function MutationObserver() {\n                if (typeof console !== \"undefined\" && console !== null) {\n                    console.warn('MutationObserver is not supported by your browser.');\n                }\n                if (typeof console !== \"undefined\" && console !== null) {\n                    console.warn('WOW.js cannot detect dom mutations, please call .sync() after loading new content.');\n                }\n            }\n\n            MutationObserver.notSupported = true;\n\n            MutationObserver.prototype.observe = function() {};\n\n            return MutationObserver;\n\n        })());\n\n    getComputedStyle = this.getComputedStyle || function(el, pseudo) {\n            this.getPropertyValue = function(prop) {\n                var ref;\n                if (prop === 'float') {\n                    prop = 'styleFloat';\n                }\n                if (getComputedStyleRX.test(prop)) {\n                    prop.replace(getComputedStyleRX, function(_, _char) {\n                        return _char.toUpperCase();\n                    });\n                }\n                return ((ref = el.currentStyle) != null ? ref[prop] : void 0) || null;\n            };\n            return this;\n        };\n\n    getComputedStyleRX = /(\\-([a-z]){1})/g;\n\n    this.WOW = (function() {\n        WOW.prototype.defaults = {\n            boxClass: 'wow',\n            animateClass: 'animated',\n            offset: 0,\n            mobile: true,\n            live: true,\n            callback: null,\n            scrollContainer: null\n        };\n\n        function WOW(options) {\n            if (options == null) {\n                options = {};\n            }\n            this.scrollCallback = bind(this.scrollCallback, this);\n            this.scrollHandler = bind(this.scrollHandler, this);\n            this.resetAnimation = bind(this.resetAnimation, this);\n            this.start = bind(this.start, this);\n            this.scrolled = true;\n            this.config = this.util().extend(options, this.defaults);\n            if (options.scrollContainer != null) {\n                this.config.scrollContainer = document.querySelector(options.scrollContainer);\n            }\n            this.animationNameCache = new WeakMap();\n            this.wowEvent = this.util().createEvent(this.config.boxClass);\n        }\n\n        WOW.prototype.init = function() {\n            var ref;\n            this.element = window.document.documentElement;\n            if ((ref = document.readyState) === \"interactive\" || ref === \"complete\") {\n                this.start();\n            } else {\n                this.util().addEvent(document, 'DOMContentLoaded', this.start);\n            }\n            return this.finished = [];\n        };\n\n        WOW.prototype.start = function() {\n            var box, j, len, ref;\n            this.stopped = false;\n            this.boxes = (function() {\n                var j, len, ref, results;\n                ref = this.element.querySelectorAll(\".\" + this.config.boxClass);\n                results = [];\n                for (j = 0, len = ref.length; j < len; j++) {\n                    box = ref[j];\n                    results.push(box);\n                }\n                return results;\n            }).call(this);\n            this.all = (function() {\n                var j, len, ref, results;\n                ref = this.boxes;\n                results = [];\n                for (j = 0, len = ref.length; j < len; j++) {\n                    box = ref[j];\n                    results.push(box);\n                }\n                return results;\n            }).call(this);\n            if (this.boxes.length) {\n                if (this.disabled()) {\n                    this.resetStyle();\n                } else {\n                    ref = this.boxes;\n                    for (j = 0, len = ref.length; j < len; j++) {\n                        box = ref[j];\n                        this.applyStyle(box, true);\n                    }\n                }\n            }\n            if (!this.disabled()) {\n                this.util().addEvent(this.config.scrollContainer || window, 'scroll', this.scrollHandler);\n                this.util().addEvent(window, 'resize', this.scrollHandler);\n                this.interval = setInterval(this.scrollCallback, 50);\n            }\n            if (this.config.live) {\n                return new MutationObserver((function(_this) {\n                    return function(records) {\n                        var k, len1, node, record, results;\n                        results = [];\n                        for (k = 0, len1 = records.length; k < len1; k++) {\n                            record = records[k];\n                            results.push((function() {\n                                var l, len2, ref1, results1;\n                                ref1 = record.addedNodes || [];\n                                results1 = [];\n                                for (l = 0, len2 = ref1.length; l < len2; l++) {\n                                    node = ref1[l];\n                                    results1.push(this.doSync(node));\n                                }\n                                return results1;\n                            }).call(_this));\n                        }\n                        return results;\n                    };\n                })(this)).observe(document.body, {\n                        childList: true,\n                        subtree: true\n                    });\n            }\n        };\n\n        WOW.prototype.stop = function() {\n            this.stopped = true;\n            this.util().removeEvent(this.config.scrollContainer || window, 'scroll', this.scrollHandler);\n            this.util().removeEvent(window, 'resize', this.scrollHandler);\n            if (this.interval != null) {\n                return clearInterval(this.interval);\n            }\n        };\n\n        WOW.prototype.sync = function(element) {\n            if (MutationObserver.notSupported) {\n                return this.doSync(this.element);\n            }\n        };\n\n        WOW.prototype.doSync = function(element) {\n            var box, j, len, ref, results;\n            if (element == null) {\n                element = this.element;\n            }\n            if (element.nodeType !== 1) {\n                return;\n            }\n            element = element.parentNode || element;\n            ref = element.querySelectorAll(\".\" + this.config.boxClass);\n            results = [];\n            for (j = 0, len = ref.length; j < len; j++) {\n                box = ref[j];\n                if (indexOf.call(this.all, box) < 0) {\n                    this.boxes.push(box);\n                    this.all.push(box);\n                    if (this.stopped || this.disabled()) {\n                        this.resetStyle();\n                    } else {\n                        this.applyStyle(box, true);\n                    }\n                    results.push(this.scrolled = true);\n                } else {\n                    results.push(void 0);\n                }\n            }\n            return results;\n        };\n\n        WOW.prototype.show = function(box) {\n            this.applyStyle(box);\n            box.className = box.className + \" \" + this.config.animateClass;\n            if (this.config.callback != null) {\n                this.config.callback(box);\n            }\n            this.util().emitEvent(box, this.wowEvent);\n            this.util().addEvent(box, 'animationend', this.resetAnimation);\n            this.util().addEvent(box, 'oanimationend', this.resetAnimation);\n            this.util().addEvent(box, 'webkitAnimationEnd', this.resetAnimation);\n            this.util().addEvent(box, 'MSAnimationEnd', this.resetAnimation);\n            return box;\n        };\n\n        WOW.prototype.applyStyle = function(box, hidden) {\n            var delay, duration, iteration;\n            duration = box.getAttribute('data-wow-duration');\n            delay = box.getAttribute('data-wow-delay');\n            iteration = box.getAttribute('data-wow-iteration');\n            return this.animate((function(_this) {\n                return function() {\n                    return _this.customStyle(box, hidden, duration, delay, iteration);\n                };\n            })(this));\n        };\n\n        WOW.prototype.animate = (function() {\n            if ('requestAnimationFrame' in window) {\n                return function(callback) {\n                    return window.requestAnimationFrame(callback);\n                };\n            } else {\n                return function(callback) {\n                    return callback();\n                };\n            }\n        })();\n\n        WOW.prototype.resetStyle = function() {\n            var box, j, len, ref, results;\n            ref = this.boxes;\n            results = [];\n            for (j = 0, len = ref.length; j < len; j++) {\n                box = ref[j];\n                results.push(box.style.visibility = 'visible');\n            }\n            return results;\n        };\n\n        WOW.prototype.resetAnimation = function(event) {\n            var target;\n            if (event.type.toLowerCase().indexOf('animationend') >= 0) {\n                target = event.target || event.srcElement;\n                return target.className = target.className.replace(this.config.animateClass, '').trim();\n            }\n        };\n\n        WOW.prototype.customStyle = function(box, hidden, duration, delay, iteration) {\n            if (hidden) {\n                this.cacheAnimationName(box);\n            }\n            box.style.visibility = hidden ? 'hidden' : 'visible';\n            if (duration) {\n                this.vendorSet(box.style, {\n                    animationDuration: duration\n                });\n            }\n            if (delay) {\n                this.vendorSet(box.style, {\n                    animationDelay: delay\n                });\n            }\n            if (iteration) {\n                this.vendorSet(box.style, {\n                    animationIterationCount: iteration\n                });\n            }\n            this.vendorSet(box.style, {\n                animationName: hidden ? 'none' : this.cachedAnimationName(box)\n            });\n            return box;\n        };\n\n        WOW.prototype.vendors = [\"moz\", \"webkit\"];\n\n        WOW.prototype.vendorSet = function(elem, properties) {\n            var name, results, value, vendor;\n            results = [];\n            for (name in properties) {\n                value = properties[name];\n                elem[\"\" + name] = value;\n                results.push((function() {\n                    var j, len, ref, results1;\n                    ref = this.vendors;\n                    results1 = [];\n                    for (j = 0, len = ref.length; j < len; j++) {\n                        vendor = ref[j];\n                        results1.push(elem[\"\" + vendor + (name.charAt(0).toUpperCase()) + (name.substr(1))] = value);\n                    }\n                    return results1;\n                }).call(this));\n            }\n            return results;\n        };\n\n        WOW.prototype.vendorCSS = function(elem, property) {\n            var j, len, ref, result, style, vendor;\n            style = getComputedStyle(elem);\n            result = style.getPropertyCSSValue(property);\n            ref = this.vendors;\n            for (j = 0, len = ref.length; j < len; j++) {\n                vendor = ref[j];\n                result = result || style.getPropertyCSSValue(\"-\" + vendor + \"-\" + property);\n            }\n            return result;\n        };\n\n        WOW.prototype.animationName = function(box) {\n            var animationName, error;\n            try {\n                animationName = this.vendorCSS(box, 'animation-name').cssText;\n            } catch (error) {\n                animationName = getComputedStyle(box).getPropertyValue('animation-name');\n            }\n            if (animationName === 'none') {\n                return '';\n            } else {\n                return animationName;\n            }\n        };\n\n        WOW.prototype.cacheAnimationName = function(box) {\n            return this.animationNameCache.set(box, this.animationName(box));\n        };\n\n        WOW.prototype.cachedAnimationName = function(box) {\n            return this.animationNameCache.get(box);\n        };\n\n        WOW.prototype.scrollHandler = function() {\n            return this.scrolled = true;\n        };\n\n        WOW.prototype.scrollCallback = function() {\n            var box;\n            if (this.scrolled) {\n                this.scrolled = false;\n                this.boxes = (function() {\n                    var j, len, ref, results;\n                    ref = this.boxes;\n                    results = [];\n                    for (j = 0, len = ref.length; j < len; j++) {\n                        box = ref[j];\n                        if (!(box)) {\n                            continue;\n                        }\n                        if (this.isVisible(box)) {\n                            this.show(box);\n                            continue;\n                        }\n                        results.push(box);\n                    }\n                    return results;\n                }).call(this);\n                if (!(this.boxes.length || this.config.live)) {\n                    return this.stop();\n                }\n            }\n        };\n\n        WOW.prototype.offsetTop = function(element) {\n            var top;\n            while (element.offsetTop === void 0) {\n                element = element.parentNode;\n            }\n            top = element.offsetTop;\n            while (element = element.offsetParent) {\n                top += element.offsetTop;\n            }\n            return top;\n        };\n\n        WOW.prototype.isVisible = function(box) {\n            var bottom, offset, top, viewBottom, viewTop;\n            offset = box.getAttribute('data-wow-offset') || this.config.offset;\n            viewTop = (this.config.scrollContainer && this.config.scrollContainer.scrollTop) || window.pageYOffset;\n            viewBottom = viewTop + Math.min(this.element.clientHeight, this.util().innerHeight()) - offset;\n            top = this.offsetTop(box);\n            bottom = top + box.clientHeight;\n            return top <= viewBottom && bottom >= viewTop;\n        };\n\n        WOW.prototype.util = function() {\n            return this._util != null ? this._util : this._util = new Util();\n        };\n\n        WOW.prototype.disabled = function() {\n            return !this.config.mobile && this.util().isMobile(navigator.userAgent);\n        };\n\n        return WOW;\n\n    })();\n\n}).call(this);\n","'use strict';\r\n\r\n/* SCROLLING NAVBAR */\r\n\r\nvar OFFSET_TOP = 50;\r\nvar TRANSITION_DURATION = 1500;\r\n\r\n$(window).scroll(function () {\r\n    if($('.navbar').length) {\r\n    \tif ($('.navbar').offset().top > OFFSET_TOP) {\r\n    \t\t$('.scrolling-navbar').addClass(\"top-nav-collapse\");\r\n    \t} else {\r\n    \t\t$('.scrolling-navbar').removeClass(\"top-nav-collapse\");\r\n    \t}\r\n    }\r\n});","/*!\r\n * Waves v0.7.5\r\n * http://fian.my.id/Waves\r\n *\r\n * Copyright 2014-2016 Alfiana E. Sibuea and other contributors\r\n * Released under the MIT license\r\n * https://github.com/fians/Waves/blob/master/LICENSE\r\n */\r\n\r\n;\r\n(function (window, factory) {\r\n    'use strict';\r\n\r\n    // AMD. Register as an anonymous module.  Wrap in function so we have access\r\n    // to root via `this`.\r\n    if (typeof define === 'function' && define.amd) {\r\n        define([], function () {\r\n            return factory.apply(window);\r\n        });\r\n    }\r\n\r\n    // Node. Does not work with strict CommonJS, but only CommonJS-like\r\n    // environments that support module.exports, like Node.\r\n    else if (typeof exports === 'object') {\r\n        module.exports = factory.call(window);\r\n    }\r\n\r\n    // Browser globals.\r\n    else {\r\n        window.Waves = factory.call(window);\r\n    }\r\n})(typeof global === 'object' ? global : this, function () {\r\n    'use strict';\r\n\r\n    var Waves = Waves || {};\r\n    var $$ = document.querySelectorAll.bind(document);\r\n    var toString = Object.prototype.toString;\r\n    var isTouchAvailable = 'ontouchstart' in window;\r\n\r\n\r\n    // Find exact position of element\r\n    function isWindow(obj) {\r\n        return obj !== null && obj === obj.window;\r\n    }\r\n\r\n    function getWindow(elem) {\r\n        return isWindow(elem) ? elem : elem.nodeType === 9 && elem.defaultView;\r\n    }\r\n\r\n    function isObject(value) {\r\n        var type = typeof value;\r\n        return type === 'function' || type === 'object' && !!value;\r\n    }\r\n\r\n    function isDOMNode(obj) {\r\n        return isObject(obj) && obj.nodeType > 0;\r\n    }\r\n\r\n    function getWavesElements(nodes) {\r\n        var stringRepr = toString.call(nodes);\r\n\r\n        if (stringRepr === '[object String]') {\r\n            return $$(nodes);\r\n        } else if (isObject(nodes) && /^\\[object (Array|HTMLCollection|NodeList|Object)\\]$/.test(stringRepr) && nodes.hasOwnProperty('length')) {\r\n            return nodes;\r\n        } else if (isDOMNode(nodes)) {\r\n            return [nodes];\r\n        }\r\n\r\n        return [];\r\n    }\r\n\r\n    function offset(elem) {\r\n        var docElem, win,\r\n            box = {\r\n                top: 0,\r\n                left: 0\r\n            },\r\n            doc = elem && elem.ownerDocument;\r\n\r\n        docElem = doc.documentElement;\r\n\r\n        if (typeof elem.getBoundingClientRect !== typeof undefined) {\r\n            box = elem.getBoundingClientRect();\r\n        }\r\n        win = getWindow(doc);\r\n        return {\r\n            top: box.top + win.pageYOffset - docElem.clientTop,\r\n            left: box.left + win.pageXOffset - docElem.clientLeft\r\n        };\r\n    }\r\n\r\n    function convertStyle(styleObj) {\r\n        var style = '';\r\n\r\n        for (var prop in styleObj) {\r\n            if (styleObj.hasOwnProperty(prop)) {\r\n                style += (prop + ':' + styleObj[prop] + ';');\r\n            }\r\n        }\r\n\r\n        return style;\r\n    }\r\n\r\n    var Effect = {\r\n\r\n        // Effect duration\r\n        duration: 750,\r\n\r\n        // Effect delay (check for scroll before showing effect)\r\n        delay: 200,\r\n\r\n        show: function (e, element, velocity) {\r\n\r\n            // Disable right click\r\n            if (e.button === 2) {\r\n                return false;\r\n            }\r\n\r\n            element = element || this;\r\n\r\n            // Create ripple\r\n            var ripple = document.createElement('div');\r\n            ripple.className = 'waves-ripple waves-rippling';\r\n            element.appendChild(ripple);\r\n\r\n            // Get click coordinate and element width\r\n            var pos = offset(element);\r\n            var relativeY = 0;\r\n            var relativeX = 0;\r\n            // Support for touch devices\r\n            if ('touches' in e && e.touches.length) {\r\n                relativeY = (e.touches[0].pageY - pos.top);\r\n                relativeX = (e.touches[0].pageX - pos.left);\r\n            }\r\n            //Normal case\r\n            else {\r\n                relativeY = (e.pageY - pos.top);\r\n                relativeX = (e.pageX - pos.left);\r\n            }\r\n            // Support for synthetic events\r\n            relativeX = relativeX >= 0 ? relativeX : 0;\r\n            relativeY = relativeY >= 0 ? relativeY : 0;\r\n\r\n            var scale = 'scale(' + ((element.clientWidth / 100) * 3) + ')';\r\n            var translate = 'translate(0,0)';\r\n\r\n            if (velocity) {\r\n                translate = 'translate(' + (velocity.x) + 'px, ' + (velocity.y) + 'px)';\r\n            }\r\n\r\n            // Attach data to element\r\n            ripple.setAttribute('data-hold', Date.now());\r\n            ripple.setAttribute('data-x', relativeX);\r\n            ripple.setAttribute('data-y', relativeY);\r\n            ripple.setAttribute('data-scale', scale);\r\n            ripple.setAttribute('data-translate', translate);\r\n\r\n            // Set ripple position\r\n            var rippleStyle = {\r\n                top: relativeY + 'px',\r\n                left: relativeX + 'px'\r\n            };\r\n\r\n            ripple.classList.add('waves-notransition');\r\n            ripple.setAttribute('style', convertStyle(rippleStyle));\r\n            ripple.classList.remove('waves-notransition');\r\n\r\n            // Scale the ripple\r\n            rippleStyle['-webkit-transform'] = scale + ' ' + translate;\r\n            rippleStyle['-moz-transform'] = scale + ' ' + translate;\r\n            rippleStyle['-ms-transform'] = scale + ' ' + translate;\r\n            rippleStyle['-o-transform'] = scale + ' ' + translate;\r\n            rippleStyle.transform = scale + ' ' + translate;\r\n            rippleStyle.opacity = '1';\r\n\r\n            var duration = e.type === 'mousemove' ? 2500 : Effect.duration;\r\n            rippleStyle['-webkit-transition-duration'] = duration + 'ms';\r\n            rippleStyle['-moz-transition-duration'] = duration + 'ms';\r\n            rippleStyle['-o-transition-duration'] = duration + 'ms';\r\n            rippleStyle['transition-duration'] = duration + 'ms';\r\n\r\n            ripple.setAttribute('style', convertStyle(rippleStyle));\r\n        },\r\n\r\n        hide: function (e, element) {\r\n            element = element || this;\r\n\r\n            var ripples = element.getElementsByClassName('waves-rippling');\r\n\r\n            for (var i = 0, len = ripples.length; i < len; i++) {\r\n                removeRipple(e, element, ripples[i]);\r\n            }\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Collection of wrapper for HTML element that only have single tag\r\n     * like <input> and <img>\r\n     */\r\n    var TagWrapper = {\r\n\r\n        // Wrap <input> tag so it can perform the effect\r\n        input: function (element) {\r\n\r\n            var parent = element.parentNode;\r\n\r\n            // // If input already have parent just pass through\r\n            // if (parent.tagName.toLowerCase() === 'i' && parent.classList.contains('waves-effect')) {\r\n            //     return;\r\n            // }\r\n\r\n            var wrapper = document.createElement('div');\r\n            wrapper.className = 'waves-input-wrapper';\r\n\r\n            parent.replaceChild(wrapper, element);\r\n            wrapper.appendChild(element);\r\n\r\n        },\r\n\r\n        // Wrap <img> tag so it can perform the effect\r\n        img: function (element) {\r\n\r\n            var parent = element.parentNode;\r\n\r\n            // If input already have parent just pass through\r\n            if (parent.tagName.toLowerCase() === 'i' && parent.classList.contains('waves-effect')) {\r\n                return;\r\n            }\r\n\r\n            // Put element as child\r\n            var wrapper = document.createElement('i');\r\n            parent.replaceChild(wrapper, element);\r\n            wrapper.appendChild(element);\r\n\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Hide the effect and remove the ripple. Must be\r\n     * a separate function to pass the JSLint...\r\n     */\r\n    function removeRipple(e, el, ripple) {\r\n\r\n        // Check if the ripple still exist\r\n        if (!ripple) {\r\n            return;\r\n        }\r\n\r\n        ripple.classList.remove('waves-rippling');\r\n\r\n        var relativeX = ripple.getAttribute('data-x');\r\n        var relativeY = ripple.getAttribute('data-y');\r\n        var scale = ripple.getAttribute('data-scale');\r\n        var translate = ripple.getAttribute('data-translate');\r\n\r\n        // Get delay beetween mousedown and mouse leave\r\n        var diff = Date.now() - Number(ripple.getAttribute('data-hold'));\r\n        var delay = 350 - diff;\r\n\r\n        if (delay < 0) {\r\n            delay = 0;\r\n        }\r\n\r\n        if (e.type === 'mousemove') {\r\n            delay = 150;\r\n        }\r\n\r\n        // Fade out ripple after delay\r\n        var duration = e.type === 'mousemove' ? 2500 : Effect.duration;\r\n\r\n        setTimeout(function () {\r\n\r\n            var style = {\r\n                top: relativeY + 'px',\r\n                left: relativeX + 'px',\r\n                opacity: '0',\r\n\r\n                // Duration\r\n                '-webkit-transition-duration': duration + 'ms',\r\n                '-moz-transition-duration': duration + 'ms',\r\n                '-o-transition-duration': duration + 'ms',\r\n                'transition-duration': duration + 'ms',\r\n                '-webkit-transform': scale + ' ' + translate,\r\n                '-moz-transform': scale + ' ' + translate,\r\n                '-ms-transform': scale + ' ' + translate,\r\n                '-o-transform': scale + ' ' + translate,\r\n                'transform': scale + ' ' + translate\r\n            };\r\n\r\n            ripple.setAttribute('style', convertStyle(style));\r\n\r\n            setTimeout(function () {\r\n                try {\r\n                    el.removeChild(ripple);\r\n                } catch (e) {\r\n                    return false;\r\n                }\r\n            }, duration);\r\n\r\n        }, delay);\r\n    }\r\n\r\n\r\n    /**\r\n     * Disable mousedown event for 500ms during and after touch\r\n     */\r\n    var TouchHandler = {\r\n\r\n        /* uses an integer rather than bool so there's no issues with\r\n         * needing to clear timeouts if another touch event occurred\r\n         * within the 500ms. Cannot mouseup between touchstart and\r\n         * touchend, nor in the 500ms after touchend. */\r\n        touches: 0,\r\n\r\n        allowEvent: function (e) {\r\n\r\n            var allow = true;\r\n\r\n            if (/^(mousedown|mousemove)$/.test(e.type) && TouchHandler.touches) {\r\n                allow = false;\r\n            }\r\n\r\n            return allow;\r\n        },\r\n        registerEvent: function (e) {\r\n            var eType = e.type;\r\n\r\n            if (eType === 'touchstart') {\r\n\r\n                TouchHandler.touches += 1; // push\r\n\r\n            } else if (/^(touchend|touchcancel)$/.test(eType)) {\r\n\r\n                setTimeout(function () {\r\n                    if (TouchHandler.touches) {\r\n                        TouchHandler.touches -= 1; // pop after 500ms\r\n                    }\r\n                }, 500);\r\n\r\n            }\r\n        }\r\n    };\r\n\r\n\r\n    /**\r\n     * Delegated click handler for .waves-effect element.\r\n     * returns null when .waves-effect element not in \"click tree\"\r\n     */\r\n    function getWavesEffectElement(e) {\r\n\r\n        if (TouchHandler.allowEvent(e) === false) {\r\n            return null;\r\n        }\r\n\r\n        var element = null;\r\n        var target = e.target || e.srcElement;\r\n\r\n        while (target.parentElement !== null) {\r\n            if (target.classList.contains('waves-effect') && (!(target instanceof SVGElement))) {\r\n                element = target;\r\n                break;\r\n            }\r\n            target = target.parentElement;\r\n        }\r\n\r\n        return element;\r\n    }\r\n\r\n    /**\r\n     * Bubble the click and show effect if .waves-effect elem was found\r\n     */\r\n    function showEffect(e) {\r\n\r\n        // Disable effect if element has \"disabled\" property on it\r\n        // In some cases, the event is not triggered by the current element\r\n        // if (e.target.getAttribute('disabled') !== null) {\r\n        //     return;\r\n        // }\r\n\r\n        var element = getWavesEffectElement(e);\r\n\r\n        if (element !== null) {\r\n\r\n            // Make it sure the element has either disabled property, disabled attribute or 'disabled' class\r\n            if (element.disabled || element.getAttribute('disabled') || element.classList.contains('disabled')) {\r\n                return;\r\n            }\r\n\r\n            TouchHandler.registerEvent(e);\r\n\r\n            if (e.type === 'touchstart' && Effect.delay) {\r\n\r\n                var hidden = false;\r\n\r\n                var timer = setTimeout(function () {\r\n                    timer = null;\r\n                    Effect.show(e, element);\r\n                }, Effect.delay);\r\n\r\n                var hideEffect = function (hideEvent) {\r\n\r\n                    // if touch hasn't moved, and effect not yet started: start effect now\r\n                    if (timer) {\r\n                        clearTimeout(timer);\r\n                        timer = null;\r\n                        Effect.show(e, element);\r\n                    }\r\n                    if (!hidden) {\r\n                        hidden = true;\r\n                        Effect.hide(hideEvent, element);\r\n                    }\r\n                };\r\n\r\n                var touchMove = function (moveEvent) {\r\n                    if (timer) {\r\n                        clearTimeout(timer);\r\n                        timer = null;\r\n                    }\r\n                    hideEffect(moveEvent);\r\n                };\r\n\r\n                element.addEventListener('touchmove', touchMove, false);\r\n                element.addEventListener('touchend', hideEffect, false);\r\n                element.addEventListener('touchcancel', hideEffect, false);\r\n\r\n            } else {\r\n\r\n                Effect.show(e, element);\r\n\r\n                if (isTouchAvailable) {\r\n                    element.addEventListener('touchend', Effect.hide, false);\r\n                    element.addEventListener('touchcancel', Effect.hide, false);\r\n                }\r\n\r\n                element.addEventListener('mouseup', Effect.hide, false);\r\n                element.addEventListener('mouseleave', Effect.hide, false);\r\n            }\r\n        }\r\n    }\r\n\r\n    Waves.init = function (options) {\r\n        var body = document.body;\r\n\r\n        options = options || {};\r\n\r\n        if ('duration' in options) {\r\n            Effect.duration = options.duration;\r\n        }\r\n\r\n        if ('delay' in options) {\r\n            Effect.delay = options.delay;\r\n        }\r\n\r\n        if (isTouchAvailable) {\r\n            body.addEventListener('touchstart', showEffect, false);\r\n            body.addEventListener('touchcancel', TouchHandler.registerEvent, false);\r\n            body.addEventListener('touchend', TouchHandler.registerEvent, false);\r\n        }\r\n\r\n        body.addEventListener('mousedown', showEffect, false);\r\n    };\r\n\r\n\r\n    /**\r\n     * Attach Waves to dynamically loaded inputs, or add .waves-effect and other\r\n     * waves classes to a set of elements. Set drag to true if the ripple mouseover\r\n     * or skimming effect should be applied to the elements.\r\n     */\r\n    Waves.attach = function (elements, classes) {\r\n\r\n        elements = getWavesElements(elements);\r\n\r\n        if (toString.call(classes) === '[object Array]') {\r\n            classes = classes.join(' ');\r\n        }\r\n\r\n        classes = classes ? ' ' + classes : '';\r\n\r\n        var element, tagName;\r\n\r\n        for (var i = 0, len = elements.length; i < len; i++) {\r\n\r\n            element = elements[i];\r\n            tagName = element.tagName.toLowerCase();\r\n\r\n            if (['input', 'img'].indexOf(tagName) !== -1) {\r\n                TagWrapper[tagName](element);\r\n                element = element.parentElement;\r\n            }\r\n\r\n            if (element.className.indexOf('waves-effect') === -1) {\r\n                element.className += ' waves-effect' + classes;\r\n            }\r\n        }\r\n    };\r\n\r\n\r\n    /**\r\n     * Cause a ripple to appear in an element via code.\r\n     */\r\n    Waves.ripple = function (elements, options) {\r\n        elements = getWavesElements(elements);\r\n        var elementsLen = elements.length;\r\n\r\n        options = options || {};\r\n        options.wait = options.wait || 0;\r\n        options.position = options.position || null; // default = centre of element\r\n\r\n\r\n        if (elementsLen) {\r\n            var element, pos, off, centre = {},\r\n                i = 0;\r\n            var mousedown = {\r\n                type: 'mousedown',\r\n                button: 1\r\n            };\r\n            var hideRipple = function (mouseup, element) {\r\n                return function () {\r\n                    Effect.hide(mouseup, element);\r\n                };\r\n            };\r\n\r\n            for (; i < elementsLen; i++) {\r\n                element = elements[i];\r\n                pos = options.position || {\r\n                    x: element.clientWidth / 2,\r\n                    y: element.clientHeight / 2\r\n                };\r\n\r\n                off = offset(element);\r\n                centre.x = off.left + pos.x;\r\n                centre.y = off.top + pos.y;\r\n\r\n                mousedown.pageX = centre.x;\r\n                mousedown.pageY = centre.y;\r\n\r\n                Effect.show(mousedown, element);\r\n\r\n                if (options.wait >= 0 && options.wait !== null) {\r\n                    var mouseup = {\r\n                        type: 'mouseup',\r\n                        button: 1\r\n                    };\r\n\r\n                    setTimeout(hideRipple(mouseup, element), options.wait);\r\n                }\r\n            }\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Remove all ripples from an element.\r\n     */\r\n    Waves.calm = function (elements) {\r\n        elements = getWavesElements(elements);\r\n        var mouseup = {\r\n            type: 'mouseup',\r\n            button: 1\r\n        };\r\n\r\n        for (var i = 0, len = elements.length; i < len; i++) {\r\n            Effect.hide(mouseup, elements[i]);\r\n        }\r\n    };\r\n\r\n    /**\r\n     * Deprecated API fallback\r\n     */\r\n    Waves.displayEffect = function (options) {\r\n        console.error('Waves.displayEffect() has been deprecated and will be removed in future version. Please use Waves.init() to initialize Waves effect');\r\n        Waves.init(options);\r\n    };\r\n\r\n    return Waves;\r\n});\r\n\r\n//Initialization\r\nWaves.attach('.btn:not(.btn-flat), .btn-floating', ['waves-light']);\r\nWaves.attach('.btn-flat', ['waves-effect']);\r\nWaves.attach('.view .mask', ['waves-light']);\r\nWaves.attach('.waves-light', ['waves-light']);\r\nWaves.attach('.waves-effect', ['waves-effect']);\r\nWaves.attach('.navbar-nav a:not(.navbar-brand), .nav-icons li a, .navbar form, .nav-tabs .nav-item', ['waves-light']);\r\nWaves.attach('.pager li a', ['waves-light']);\r\nWaves.attach('.pagination .page-item .page-link', ['waves-effect']);\r\nWaves.init();\r\n","//Preloading script\r\n\r\n$(document).ready(function () {\r\n    $('#preloader-markup').load(\"mdb-addons/preloader.html\", function () {\r\n        $('#mdb-preloader').fadeOut('slow');\r\n    });\r\n});","/* CARD REVEAL */\r\n\r\n(function ($) {\r\n    $(document).ready(function () {\r\n\r\n        $(document).on('click.card', '.card', function (e) {\r\n            if ($(this).find('.card-reveal').length) {\r\n                if ($(e.target).is($('.card-reveal .card-title')) || $(e.target).is($('.card-reveal .card-title i'))) {\r\n                    // Make Reveal animate down and display none\r\n                    $(this).find('.card-reveal').velocity({\r\n                        translateY: 0\r\n                    }, {\r\n                        duration: 225,\r\n                        queue: false,\r\n                        easing: 'easeInOutQuad',\r\n                        complete: function () {\r\n                            $(this).css({\r\n                                display: 'none'\r\n                            });\r\n                        }\r\n                    });\r\n                } else if ($(e.target).is($('.card .activator')) ||\r\n                    $(e.target).is($('.card .activator i'))) {\r\n                    $(this).find('.card-reveal').css({\r\n                        display: 'block'\r\n                    }).velocity(\"stop\", false).velocity({\r\n                        translateY: '-100%'\r\n                    }, {\r\n                        duration: 300,\r\n                        queue: false,\r\n                        easing: 'easeInOutQuad'\r\n                    });\r\n                }\r\n            }\r\n\r\n\r\n        });\r\n\r\n    });\r\n}(jQuery));\r\n\r\n//Social reveal\r\n$(document).ready(function ($) {\r\n\r\n    $('.card-share > a').on('click', function (e) {\r\n        e.preventDefault() // prevent default action - hash doesn't appear in url\r\n        $(this).parent().find('div').toggleClass('social-reveal-active');\r\n        $(this).toggleClass('share-expanded');\r\n    });\r\n});","/* CHARACTER COUNTER */\n\n(function ($) {\n\n    $.fn.characterCounter = function () {\n        return this.each(function () {\n\n            var itHasLengthAttribute = $(this).attr('length') !== undefined;\n\n            if (itHasLengthAttribute) {\n                $(this).on('input', updateCounter);\n                $(this).on('focus', updateCounter);\n                $(this).on('blur', removeCounterElement);\n\n                addCounterElement($(this));\n            }\n\n        });\n    };\n\n    function updateCounter() {\n        var maxLength = +$(this).attr('length'),\n            actualLength = +$(this).val().trim().length, //A24Mod added trim\n            isValidLength = actualLength <= maxLength;\n\n        $(this).parent().find('span[class=\"character-counter\"]')\n            .html(actualLength + '/' + maxLength);\n\n        addInputStyle(isValidLength, $(this));\n    }\n\n    function addCounterElement($input) {\n        var $counterElement = $('<span/>')\n            .addClass('character-counter')\n            .css('float', 'right')\n            .css('font-size', '0.75rem') //A24Mod, 0.75rem = 12px\n            .css('height', 1);\n\n        $input.parent().append($counterElement);\n    }\n\n    function removeCounterElement() {\n        $(this).parent().find('span[class=\"character-counter\"]').html('');\n    }\n\n    function addInputStyle(isValidLength, $input) {\n        var inputHasInvalidClass = $input.hasClass('invalid');\n        if (isValidLength && inputHasInvalidClass) {\n            $input.removeClass('invalid');\n        } else if (!isValidLength && !inputHasInvalidClass) {\n            $input.removeClass('valid');\n            $input.addClass('invalid');\n        }\n    }\n\n    // A24MOD removed this\n    // $(document).ready(function () {\n    //     $('input, textarea').characterCounter();\n    // });\n\n}(jQuery));\n","/*\r\n * Toastr\r\n * Copyright 2012-2015\r\n * Authors: John Papa, Hans Fjällemark, and Tim Ferrell.\r\n * All Rights Reserved.\r\n * Use, reproduction, distribution, and modification of this code is subject to the terms and\r\n * conditions of the MIT license, available at http://www.opensource.org/licenses/mit-license.php\r\n *\r\n * ARIA Support: Greta Krafsig\r\n *\r\n * Project: https://github.com/CodeSeven/toastr\r\n */\r\n/* global define */\r\n; (function (define) {\r\n    define(['jquery'], function ($) {\r\n        return (function () {\r\n            var $container;\r\n            var listener;\r\n            var toastId = 0;\r\n            var toastType = {\r\n                error: 'error',\r\n                info: 'info',\r\n                success: 'success',\r\n                warning: 'warning'\r\n            };\r\n\r\n            var toastr = {\r\n                clear: clear,\r\n                remove: remove,\r\n                error: error,\r\n                getContainer: getContainer,\r\n                info: info,\r\n                options: {},\r\n                subscribe: subscribe,\r\n                success: success,\r\n                version: '2.1.1',\r\n                warning: warning\r\n            };\r\n\r\n            var previousToast;\r\n\r\n            return toastr;\r\n\r\n            ////////////////\r\n\r\n            function error(message, title, optionsOverride) {\r\n                return notify({\r\n                    type: toastType.error,\r\n                    iconClass: getOptions().iconClasses.error,\r\n                    message: message,\r\n                    optionsOverride: optionsOverride,\r\n                    title: title\r\n                });\r\n            }\r\n\r\n            function getContainer(options, create) {\r\n                if (!options) { options = getOptions(); }\r\n                $container = $('#' + options.containerId);\r\n                if ($container.length) {\r\n                    return $container;\r\n                }\r\n                if (create) {\r\n                    $container = createContainer(options);\r\n                }\r\n                return $container;\r\n            }\r\n\r\n            function info(message, title, optionsOverride) {\r\n                return notify({\r\n                    type: toastType.info,\r\n                    iconClass: getOptions().iconClasses.info,\r\n                    message: message,\r\n                    optionsOverride: optionsOverride,\r\n                    title: title\r\n                });\r\n            }\r\n\r\n            function subscribe(callback) {\r\n                listener = callback;\r\n            }\r\n\r\n            function success(message, title, optionsOverride) {\r\n                return notify({\r\n                    type: toastType.success,\r\n                    iconClass: getOptions().iconClasses.success,\r\n                    message: message,\r\n                    optionsOverride: optionsOverride,\r\n                    title: title\r\n                });\r\n            }\r\n\r\n            function warning(message, title, optionsOverride) {\r\n                return notify({\r\n                    type: toastType.warning,\r\n                    iconClass: getOptions().iconClasses.warning,\r\n                    message: message,\r\n                    optionsOverride: optionsOverride,\r\n                    title: title\r\n                });\r\n            }\r\n\r\n            function clear($toastElement, clearOptions) {\r\n                var options = getOptions();\r\n                if (!$container) { getContainer(options); }\r\n                if (!clearToast($toastElement, options, clearOptions)) {\r\n                    clearContainer(options);\r\n                }\r\n            }\r\n\r\n            function remove($toastElement) {\r\n                var options = getOptions();\r\n                if (!$container) { getContainer(options); }\r\n                if ($toastElement && $(':focus', $toastElement).length === 0) {\r\n                    removeToast($toastElement);\r\n                    return;\r\n                }\r\n                if ($container.children().length) {\r\n                    $container.remove();\r\n                }\r\n            }\r\n\r\n            // internal functions\r\n\r\n            function clearContainer (options) {\r\n                var toastsToClear = $container.children();\r\n                for (var i = toastsToClear.length - 1; i >= 0; i--) {\r\n                    clearToast($(toastsToClear[i]), options);\r\n                }\r\n            }\r\n\r\n            function clearToast ($toastElement, options, clearOptions) {\r\n                var force = clearOptions && clearOptions.force ? clearOptions.force : false;\r\n                if ($toastElement && (force || $(':focus', $toastElement).length === 0)) {\r\n                    $toastElement[options.hideMethod]({\r\n                        duration: options.hideDuration,\r\n                        easing: options.hideEasing,\r\n                        complete: function () { removeToast($toastElement); }\r\n                    });\r\n                    return true;\r\n                }\r\n                return false;\r\n            }\r\n\r\n            function createContainer(options) {\r\n                $container = $('<div/>')\r\n                    .attr('id', options.containerId)\r\n                    .addClass(options.positionClass)\r\n                    .attr('aria-live', 'polite')\r\n                    .attr('role', 'alert');\r\n\r\n                $container.appendTo($(options.target));\r\n                return $container;\r\n            }\r\n\r\n            function getDefaults() {\r\n                return {\r\n                    tapToDismiss: true,\r\n                    toastClass: 'toast',\r\n                    containerId: 'toast-container',\r\n                    debug: false,\r\n\r\n                    showMethod: 'fadeIn', //fadeIn, slideDown, and show are built into jQuery\r\n                    showDuration: 300,\r\n                    showEasing: 'swing', //swing and linear are built into jQuery\r\n                    onShown: undefined,\r\n                    hideMethod: 'fadeOut',\r\n                    hideDuration: 1000,\r\n                    hideEasing: 'swing',\r\n                    onHidden: undefined,\r\n\r\n                    extendedTimeOut: 1000,\r\n                    iconClasses: {\r\n                        error: 'toast-error',\r\n                        info: 'toast-info',\r\n                        success: 'toast-success',\r\n                        warning: 'toast-warning'\r\n                    },\r\n                    iconClass: 'toast-info',\r\n                    positionClass: 'toast-top-right',\r\n                    timeOut: 5000, // Set timeOut and extendedTimeOut to 0 to make it sticky\r\n                    titleClass: 'toast-title',\r\n                    messageClass: 'toast-message',\r\n                    target: 'body',\r\n                    closeHtml: '<button type=\"button\">&times;</button>',\r\n                    newestOnTop: true,\r\n                    preventDuplicates: false,\r\n                    progressBar: false\r\n                };\r\n            }\r\n\r\n            function publish(args) {\r\n                if (!listener) { return; }\r\n                listener(args);\r\n            }\r\n\r\n            function notify(map) {\r\n                var options = getOptions();\r\n                var iconClass = map.iconClass || options.iconClass;\r\n\r\n                if (typeof (map.optionsOverride) !== 'undefined') {\r\n                    options = $.extend(options, map.optionsOverride);\r\n                    iconClass = map.optionsOverride.iconClass || iconClass;\r\n                }\r\n\r\n                if (shouldExit(options, map)) { return; }\r\n\r\n                toastId++;\r\n\r\n                $container = getContainer(options, true);\r\n\r\n                var intervalId = null;\r\n                var $toastElement = $('<div/>');\r\n                var $titleElement = $('<div/>');\r\n                var $messageElement = $('<div/>');\r\n                var $progressElement = $('<div/>');\r\n                var $closeElement = $(options.closeHtml);\r\n                var progressBar = {\r\n                    intervalId: null,\r\n                    hideEta: null,\r\n                    maxHideTime: null\r\n                };\r\n                var response = {\r\n                    toastId: toastId,\r\n                    state: 'visible',\r\n                    startTime: new Date(),\r\n                    options: options,\r\n                    map: map\r\n                };\r\n\r\n                personalizeToast();\r\n\r\n                displayToast();\r\n\r\n                handleEvents();\r\n\r\n                publish(response);\r\n\r\n                if (options.debug && console) {\r\n                    console.log(response);\r\n                }\r\n\r\n                return $toastElement;\r\n\r\n                function personalizeToast() {\r\n                    setIcon();\r\n                    setTitle();\r\n                    setMessage();\r\n                    setCloseButton();\r\n                    setProgressBar();\r\n                    setSequence();\r\n                }\r\n\r\n                function handleEvents() {\r\n                    $toastElement.hover(stickAround, delayedHideToast);\r\n                    if (!options.onclick && options.tapToDismiss) {\r\n                        $toastElement.click(hideToast);\r\n                    }\r\n\r\n                    if (options.closeButton && $closeElement) {\r\n                        $closeElement.click(function (event) {\r\n                            if (event.stopPropagation) {\r\n                                event.stopPropagation();\r\n                            } else if (event.cancelBubble !== undefined && event.cancelBubble !== true) {\r\n                                event.cancelBubble = true;\r\n                            }\r\n                            hideToast(true);\r\n                        });\r\n                    }\r\n\r\n                    if (options.onclick) {\r\n                        $toastElement.click(function () {\r\n                            options.onclick();\r\n                            hideToast();\r\n                        });\r\n                    }\r\n                }\r\n\r\n                function displayToast() {\r\n                    $toastElement.hide();\r\n\r\n                    $toastElement[options.showMethod](\r\n                        {duration: options.showDuration, easing: options.showEasing, complete: options.onShown}\r\n                    );\r\n\r\n                    if (options.timeOut > 0) {\r\n                        intervalId = setTimeout(hideToast, options.timeOut);\r\n                        progressBar.maxHideTime = parseFloat(options.timeOut);\r\n                        progressBar.hideEta = new Date().getTime() + progressBar.maxHideTime;\r\n                        if (options.progressBar) {\r\n                            progressBar.intervalId = setInterval(updateProgress, 10);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                function setIcon() {\r\n                    if (map.iconClass) {\r\n                        $toastElement.addClass(options.toastClass).addClass(iconClass);\r\n                    }\r\n                }\r\n\r\n                function setSequence() {\r\n                    if (options.newestOnTop) {\r\n                        $container.prepend($toastElement);\r\n                    } else {\r\n                        $container.append($toastElement);\r\n                    }\r\n                }\r\n\r\n                function setTitle() {\r\n                    if (map.title) {\r\n                        $titleElement.append(map.title).addClass(options.titleClass);\r\n                        $toastElement.append($titleElement);\r\n                    }\r\n                }\r\n\r\n                function setMessage() {\r\n                    if (map.message) {\r\n                        $messageElement.append(map.message).addClass(options.messageClass);\r\n                        $toastElement.append($messageElement);\r\n                    }\r\n                }\r\n\r\n                function setCloseButton() {\r\n                    if (options.closeButton) {\r\n                        $closeElement.addClass('toast-close-button').attr('role', 'button');\r\n                        $toastElement.prepend($closeElement);\r\n                    }\r\n                }\r\n\r\n                function setProgressBar() {\r\n                    if (options.progressBar) {\r\n                        $progressElement.addClass('toast-progress');\r\n                        $toastElement.prepend($progressElement);\r\n                    }\r\n                }\r\n\r\n                function shouldExit(options, map) {\r\n                    if (options.preventDuplicates) {\r\n                        if (map.message === previousToast) {\r\n                            return true;\r\n                        } else {\r\n                            previousToast = map.message;\r\n                        }\r\n                    }\r\n                    return false;\r\n                }\r\n\r\n                function hideToast(override) {\r\n                    if ($(':focus', $toastElement).length && !override) {\r\n                        return;\r\n                    }\r\n                    clearTimeout(progressBar.intervalId);\r\n                    return $toastElement[options.hideMethod]({\r\n                        duration: options.hideDuration,\r\n                        easing: options.hideEasing,\r\n                        complete: function () {\r\n                            removeToast($toastElement);\r\n                            if (options.onHidden && response.state !== 'hidden') {\r\n                                options.onHidden();\r\n                            }\r\n                            response.state = 'hidden';\r\n                            response.endTime = new Date();\r\n                            publish(response);\r\n                        }\r\n                    });\r\n                }\r\n\r\n                function delayedHideToast() {\r\n                    if (options.timeOut > 0 || options.extendedTimeOut > 0) {\r\n                        intervalId = setTimeout(hideToast, options.extendedTimeOut);\r\n                        progressBar.maxHideTime = parseFloat(options.extendedTimeOut);\r\n                        progressBar.hideEta = new Date().getTime() + progressBar.maxHideTime;\r\n                    }\r\n                }\r\n\r\n                function stickAround() {\r\n                    clearTimeout(intervalId);\r\n                    progressBar.hideEta = 0;\r\n                    $toastElement.stop(true, true)[options.showMethod](\r\n                        {duration: options.showDuration, easing: options.showEasing}\r\n                    );\r\n                }\r\n\r\n                function updateProgress() {\r\n                    var percentage = ((progressBar.hideEta - (new Date().getTime())) / progressBar.maxHideTime) * 100;\r\n                    $progressElement.width(percentage + '%');\r\n                }\r\n            }\r\n\r\n            function getOptions() {\r\n                return $.extend({}, getDefaults(), toastr.options);\r\n            }\r\n\r\n            function removeToast($toastElement) {\r\n                if (!$container) { $container = getContainer(); }\r\n                if ($toastElement.is(':visible')) {\r\n                    return;\r\n                }\r\n                $toastElement.remove();\r\n                $toastElement = null;\r\n                if ($container.children().length === 0) {\r\n                    $container.remove();\r\n                    previousToast = undefined;\r\n                }\r\n            }\r\n\r\n        })();\r\n    });\r\n}(typeof define === 'function' && define.amd ? define : function (deps, factory) {\r\n    if (typeof module !== 'undefined' && module.exports) { //Node\r\n        module.exports = factory(require('jquery'));\r\n    } else {\r\n        window['toastr'] = factory(window['jQuery']);\r\n    }\r\n}));\r\n","//SMOOTH SCROLL\r\n$(\".smooth-scroll\").on('click', 'a', function(event) {\r\n    event.preventDefault();\r\n    var elAttr = $(this).attr('href');\r\n    var offset = ($(this).attr('data-offset') ? $(this).attr('data-offset') : 0);\r\n    var setHash = $(this).closest('ul').attr('data-allow-hashes');\r\n    $('body,html').animate({\r\n        scrollTop: $(elAttr).offset().top - offset\r\n    }, 700);\r\n    if (typeof setHash !== typeof undefined && setHash !== false) {\r\n    \thistory.replaceState(null, null, elAttr);\r\n\t}\r\n});\r\n","/* DROPDOWN */\r\n\r\n(function ($) {\r\n\r\n  // Add posibility to scroll to selected option\r\n  // usefull for select for example\r\n  $.fn.scrollTo = function(elem) {\r\n    $(this).scrollTop($(this).scrollTop() - $(this).offset().top + $(elem).offset().top);\r\n    return this;\r\n  };\r\n\r\n  $.fn.dropdown = function (option) {\r\n    var defaults = {\r\n      inDuration: 300,\r\n      outDuration: 225,\r\n      constrain_width: true, // Constrains width of dropdown to the activator\r\n      hover: true,\r\n      gutter: 0, // Spacing from edge\r\n      belowOrigin: false,\r\n      alignment: 'left'\r\n    };\r\n\r\n    this.each(function(){\r\n    var origin = $(this);\r\n    var options = $.extend({}, defaults, option);\r\n    var isFocused = false;\r\n\r\n    // Dropdown menu\r\n    var activates = $(\"#\"+ origin.attr('data-activates'));\r\n\r\n    function updateOptions() {\r\n      if (origin.data('induration') !== undefined)\r\n        options.inDuration = origin.data('inDuration');\r\n      if (origin.data('outduration') !== undefined)\r\n        options.outDuration = origin.data('outDuration');\r\n      if (origin.data('constrainwidth') !== undefined)\r\n        options.constrain_width = origin.data('constrainwidth');\r\n      if (origin.data('hover') !== undefined)\r\n        options.hover = origin.data('hover');\r\n      if (origin.data('gutter') !== undefined)\r\n        options.gutter = origin.data('gutter');\r\n      if (origin.data('beloworigin') !== undefined)\r\n        options.belowOrigin = origin.data('beloworigin');\r\n      if (origin.data('alignment') !== undefined)\r\n        options.alignment = origin.data('alignment');\r\n    }\r\n\r\n    updateOptions();\r\n\r\n    // Attach dropdown to its activator\r\n    origin.after(activates);\r\n\r\n    /*\r\n      Helper function to position and resize dropdown.\r\n      Used in hover and click handler.\r\n    */\r\n    function placeDropdown(eventType) {\r\n      // Check for simultaneous focus and click events.\r\n      if (eventType === 'focus') {\r\n        isFocused = true;\r\n      }\r\n\r\n      // Check html data attributes\r\n      updateOptions();\r\n\r\n      // Set Dropdown state\r\n      activates.addClass('active');\r\n      origin.addClass('active');\r\n\r\n      // Constrain width\r\n      if (options.constrain_width === true) {\r\n        activates.css('width', origin.outerWidth());\r\n\r\n      } else {\r\n        activates.css('white-space', 'nowrap');\r\n      }\r\n\r\n      // Offscreen detection\r\n      var windowHeight = window.innerHeight;\r\n      var originHeight = origin.innerHeight();\r\n      var offsetLeft = origin.offset().left;\r\n      var offsetTop = origin.offset().top - $(window).scrollTop();\r\n      var currAlignment = options.alignment;\r\n      var gutterSpacing = 0;\r\n      var leftPosition = 0;\r\n\r\n      // Below Origin\r\n      var verticalOffset = 0;\r\n      if (options.belowOrigin === true) {\r\n        verticalOffset = originHeight;\r\n      }\r\n\r\n      // Check for scrolling positioned container.\r\n      var scrollOffset = 0;\r\n      var wrapper = origin.parent();\r\n      if (!wrapper.is('body') && wrapper[0].scrollHeight > wrapper[0].clientHeight) {\r\n        scrollOffset = wrapper[0].scrollTop;\r\n      }\r\n\r\n\r\n      if (offsetLeft + activates.innerWidth() > $(window).width()) {\r\n        // Dropdown goes past screen on right, force right alignment\r\n        currAlignment = 'right';\r\n\r\n      } else if (offsetLeft - activates.innerWidth() + origin.innerWidth() < 0) {\r\n        // Dropdown goes past screen on left, force left alignment\r\n        currAlignment = 'left';\r\n      }\r\n      // Vertical bottom offscreen detection\r\n      if (offsetTop + activates.innerHeight() > windowHeight) {\r\n        // If going upwards still goes offscreen, just crop height of dropdown.\r\n        if (offsetTop + originHeight - activates.innerHeight() < 0) {\r\n          var adjustedHeight = windowHeight - offsetTop - verticalOffset;\r\n          activates.css('max-height', adjustedHeight);\r\n        } else {\r\n          // Flow upwards.\r\n          if (!verticalOffset) {\r\n            verticalOffset += originHeight;\r\n          }\r\n          verticalOffset -= activates.innerHeight();\r\n        }\r\n      }\r\n\r\n      // Handle edge alignment\r\n      if (currAlignment === 'left') {\r\n        gutterSpacing = options.gutter;\r\n        leftPosition = origin.position().left + gutterSpacing;\r\n      }\r\n      else if (currAlignment === 'right') {\r\n        var offsetRight = origin.position().left + origin.outerWidth() - activates.outerWidth();\r\n        gutterSpacing = -options.gutter;\r\n        leftPosition =  offsetRight + gutterSpacing;\r\n      }\r\n\r\n      // Position dropdown\r\n      activates.css({\r\n        position: 'absolute',\r\n        top: origin.position().top + verticalOffset + scrollOffset,\r\n        left: leftPosition\r\n      });\r\n\r\n\r\n      // Show dropdown\r\n      activates.stop(true, true).css('opacity', 0)\r\n        .slideDown({\r\n        queue: false,\r\n        duration: options.inDuration,\r\n        easing: 'easeOutCubic',\r\n        complete: function() {\r\n          $(this).css('height', '');\r\n        }\r\n      })\r\n        .animate( {opacity: 1}, {queue: false, duration: options.inDuration, easing: 'easeOutSine'});\r\n    }\r\n\r\n    function hideDropdown() {\r\n      // Check for simultaneous focus and click events.\r\n      isFocused = false;\r\n      activates.fadeOut(options.outDuration);\r\n      activates.removeClass('active');\r\n      origin.removeClass('active');\r\n      setTimeout(function() { activates.css('max-height', ''); }, options.outDuration);\r\n    }\r\n\r\n    // Hover\r\n    if (options.hover) {\r\n      var open = false;\r\n      origin.unbind('click.' + origin.attr('id'));\r\n      // Hover handler to show dropdown\r\n      origin.on('mouseenter', function(e){ // Mouse over\r\n        if (open === false) {\r\n          placeDropdown();\r\n          open = true;\r\n        }\r\n      });\r\n      origin.on('mouseleave', function(e){\r\n        // If hover on origin then to something other than dropdown content, then close\r\n        var toEl = e.toElement || e.relatedTarget; // added browser compatibility for target element\r\n        if(!$(toEl).closest('.dropdown-content').is(activates)) {\r\n          activates.stop(true, true);\r\n          hideDropdown();\r\n          open = false;\r\n        }\r\n      });\r\n\r\n      activates.on('mouseleave', function(e){ // Mouse out\r\n        var toEl = e.toElement || e.relatedTarget;\r\n        if(!$(toEl).closest('.dropdown-button').is(origin)) {\r\n          activates.stop(true, true);\r\n          hideDropdown();\r\n          open = false;\r\n        }\r\n      });\r\n\r\n    // Click\r\n    } else {\r\n      // Click handler to show dropdown\r\n      origin.unbind('click.' + origin.attr('id'));\r\n      origin.bind('click.'+origin.attr('id'), function(e){\r\n        if (!isFocused) {\r\n          if ( origin[0] == e.currentTarget &&\r\n               !origin.hasClass('active') &&\r\n               ($(e.target).closest('.dropdown-content').length === 0)) {\r\n            e.preventDefault(); // Prevents button click from moving window\r\n            placeDropdown('click');\r\n          }\r\n          // If origin is clicked and menu is open, close menu\r\n          else if (origin.hasClass('active')) {\r\n            hideDropdown();\r\n            $(document).unbind('click.'+ activates.attr('id') + ' touchstart.' + activates.attr('id'));\r\n          }\r\n          // If menu open, add click close handler to document\r\n          if (activates.hasClass('active')) {\r\n            $(document).bind('click.'+ activates.attr('id') + ' touchstart.' + activates.attr('id'), function (e) {\r\n              if (!activates.is(e.target) && !origin.is(e.target) && (!origin.find(e.target).length) ) {\r\n                hideDropdown();\r\n                $(document).unbind('click.'+ activates.attr('id') + ' touchstart.' + activates.attr('id'));\r\n              }\r\n            });\r\n          }\r\n        }\r\n      });\r\n\r\n    } // End else\r\n\r\n    // Listen to open and close event - useful for select component\r\n    origin.on('open', function(e, eventType) {\r\n      placeDropdown(eventType);\r\n    });\r\n    origin.on('close', hideDropdown);\r\n\r\n\r\n   });\r\n  }; // End dropdown plugin\r\n\r\n  $(document).ready(function(){\r\n    $('.dropdown-button').dropdown();\r\n  });\r\n}( jQuery ));\r\n\r\n\r\nvar dropdownSelectors = $('.dropdown, .dropup');\r\n\r\n        // Custom function to read dropdown data\r\n        // =========================\r\n        function dropdownEffectData(target) {\r\n            // @todo - page level global?\r\n            var effectInDefault = null,\r\n                effectOutDefault = null;\r\n            var dropdown = $(target),\r\n                dropdownMenu = $('.dropdown-menu', target);\r\n            var parentUl = dropdown.parents('ul.nav');\r\n\r\n            // If parent is ul.nav allow global effect settings\r\n            if (parentUl.height > 0) {\r\n                effectInDefault = parentUl.data('dropdown-in') || null;\r\n                effectOutDefault = parentUl.data('dropdown-out') || null;\r\n            }\r\n\r\n            return {\r\n                target: target,\r\n                dropdown: dropdown,\r\n                dropdownMenu: dropdownMenu,\r\n                effectIn: dropdownMenu.data('dropdown-in') || effectInDefault,\r\n                effectOut: dropdownMenu.data('dropdown-out') || effectOutDefault,\r\n            };\r\n        }\r\n\r\n        // Custom function to start effect (in or out)\r\n        // =========================\r\n        function dropdownEffectStart(data, effectToStart) {\r\n            if (effectToStart) {\r\n                data.dropdown.addClass('dropdown-animating');\r\n                data.dropdownMenu.addClass('animated');\r\n                data.dropdownMenu.addClass(effectToStart);\r\n            }\r\n        }\r\n\r\n        // Custom function to read when animation is over\r\n        // =========================\r\n        function dropdownEffectEnd(data, callbackFunc) {\r\n            var animationEnd = 'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend';\r\n            data.dropdown.one(animationEnd, function () {\r\n                data.dropdown.removeClass('dropdown-animating');\r\n                data.dropdownMenu.removeClass('animated');\r\n                data.dropdownMenu.removeClass(data.effectIn);\r\n                data.dropdownMenu.removeClass(data.effectOut);\r\n\r\n                // Custom callback option, used to remove open class in out effect\r\n                if (typeof callbackFunc == 'function') {\r\n                    callbackFunc();\r\n                }\r\n            });\r\n        }\r\n\r\n        // Bootstrap API hooks\r\n        // =========================\r\n        dropdownSelectors.on({\r\n            \"show.bs.dropdown\": function () {\r\n                // On show, start in effect\r\n                $(this).find('.dropdown-menu').first().stop(true, true).fadeIn();\r\n                var dropdown = dropdownEffectData(this);\r\n                dropdownEffectStart(dropdown, dropdown.effectIn);\r\n            },\r\n            \"shown.bs.dropdown\": function () {\r\n                // On shown, remove in effect once complete\r\n                var dropdown = dropdownEffectData(this);\r\n                if (dropdown.effectIn && dropdown.effectOut) {\r\n                    dropdownEffectEnd(dropdown, function () {});\r\n                }\r\n            },\r\n            \"hide.bs.dropdown\": function (e) {\r\n                // On hide, start out effect\r\n                    $(this).find('.dropdown-menu').first().stop(true, true).fadeOut();\r\n\r\n                var dropdown = dropdownEffectData(this);\r\n                if (dropdown.effectOut) {\r\n                    e.preventDefault();\r\n                    dropdownEffectStart(dropdown, dropdown.effectOut);\r\n                    dropdownEffectEnd(dropdown, function () {\r\n                        dropdown.dropdown.removeClass('open');\r\n                        dropdown.dropdown.removeClass('show');                        \r\n                    });\r\n                }\r\n            },\r\n        });\r\n","(function ($) {\r\n    $(document).ready(function () {\r\n\r\n        // jQuery reverse\r\n        $.fn.reverse = [].reverse;\r\n\r\n        // Hover behaviour: make sure this doesn't work on .click-to-toggle FABs!\r\n        $(document).on('mouseenter.fixedActionBtn', '.fixed-action-btn:not(.click-to-toggle)', function (e) {\r\n            var $this = $(this);\r\n            openFABMenu($this);\r\n        });\r\n        $(document).on('mouseleave.fixedActionBtn', '.fixed-action-btn:not(.click-to-toggle)', function (e) {\r\n            var $this = $(this);\r\n            closeFABMenu($this);\r\n        });\r\n\r\n        // Toggle-on-click behaviour.\r\n        $(document).on('click.fixedActionBtn', '.fixed-action-btn.click-to-toggle > a', function (e) {\r\n            var $this = $(this);\r\n            var $menu = $this.parent();\r\n            if ($menu.hasClass('active')) {\r\n                closeFABMenu($menu);\r\n            } else {\r\n                openFABMenu($menu);\r\n            }\r\n        });\r\n\r\n    });\r\n\r\n    $.fn.extend({\r\n        openFAB: function () {\r\n            openFABMenu($(this));\r\n        },\r\n        closeFAB: function () {\r\n            closeFABMenu($(this));\r\n        }\r\n    });\r\n\r\n\r\n    var openFABMenu = function (btn) {\r\n        $this = btn;\r\n        if ($this.hasClass('active') === false) {\r\n\r\n            // Get direction option\r\n            var horizontal = $this.hasClass('horizontal');\r\n            var offsetY, offsetX;\r\n\r\n            if (horizontal === true) {\r\n                offsetX = 40;\r\n            } else {\r\n                offsetY = 40;\r\n            }\r\n\r\n            $this.addClass('active');\r\n            $this.find('ul .btn-floating').velocity({\r\n                scaleY: \".4\",\r\n                scaleX: \".4\",\r\n                translateY: offsetY + 'px',\r\n                translateX: offsetX + 'px'\r\n            }, {\r\n                duration: 0\r\n            });\r\n\r\n            var time = 0;\r\n            $this.find('ul .btn-floating').reverse().each(function () {\r\n                $(this).velocity({\r\n                    opacity: \"1\",\r\n                    scaleX: \"1\",\r\n                    scaleY: \"1\",\r\n                    translateY: \"0\",\r\n                    translateX: '0'\r\n                }, {\r\n                    duration: 80,\r\n                    delay: time\r\n                });\r\n                time += 40;\r\n            });\r\n        }\r\n    };\r\n\r\n    var closeFABMenu = function (btn) {\r\n        $this = btn;\r\n        // Get direction option\r\n        var horizontal = $this.hasClass('horizontal');\r\n        var offsetY, offsetX;\r\n\r\n        if (horizontal === true) {\r\n            offsetX = 40;\r\n        } else {\r\n            offsetY = 40;\r\n        }\r\n\r\n        $this.removeClass('active');\r\n        var time = 0;\r\n        $this.find('ul .btn-floating').velocity(\"stop\", true);\r\n        $this.find('ul .btn-floating').velocity({\r\n            opacity: \"0\",\r\n            scaleX: \".4\",\r\n            scaleY: \".4\",\r\n            translateY: offsetY + 'px',\r\n            translateX: offsetX + 'px'\r\n        }, {\r\n            duration: 80\r\n        });\r\n    };\r\n\r\n    $('.fixed-action-btn').on({\r\n        click: function (e) {\r\n            e.preventDefault();\r\n            toggleFABMenu($('.fixed-action-btn'));\r\n            return false;\r\n        }\r\n    });\r\n\r\n    function toggleFABMenu(btn) {\r\n\r\n        $this = btn;\r\n        if ($this.hasClass('active') === false) {\r\n            $this.addClass('active');\r\n            $this.find('ul .btn-floating').velocity({\r\n                scaleY: \".4\",\r\n                scaleX: \".4\",\r\n                translateY: \"40px\"\r\n            }, {\r\n                duration: 0\r\n            });\r\n\r\n            var time = 0;\r\n            $this.find('ul .btn-floating').reverse().each(function () {\r\n                $(this).velocity({\r\n                    opacity: \"1\",\r\n                    scaleX: \"1\",\r\n                    scaleY: \"1\",\r\n                    translateY: \"0\"\r\n                }, {\r\n                    duration: 80,\r\n                    delay: time\r\n                });\r\n                time += 40;\r\n            });\r\n        } else {\r\n            $this.removeClass('active');\r\n            var time = 0;\r\n            $this.find('ul .btn-floating').velocity(\"stop\", true);\r\n            $this.find('ul .btn-floating').velocity({\r\n                opacity: \"0\",\r\n                scaleX: \".4\",\r\n                scaleY: \".4\",\r\n                translateY: \"40px\"\r\n            }, {\r\n                duration: 80\r\n            });\r\n        }\r\n    }\r\n\r\n\r\n}(jQuery));","/*! Hammer.JS - v2.0.7 - 2016-04-22\r\n * http://hammerjs.github.io/\r\n *\r\n * Copyright (c) 2016 Jorik Tangelder;\r\n * Licensed under the MIT license */\r\n(function(window, document, exportName, undefined) {\r\n  'use strict';\r\n\r\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\r\nvar TEST_ELEMENT = document.createElement('div');\r\n\r\nvar TYPE_FUNCTION = 'function';\r\n\r\nvar round = Math.round;\r\nvar abs = Math.abs;\r\nvar now = Date.now;\r\n\r\n/**\r\n * set a timeout with a given scope\r\n * @param {Function} fn\r\n * @param {Number} timeout\r\n * @param {Object} context\r\n * @returns {number}\r\n */\r\nfunction setTimeoutContext(fn, timeout, context) {\r\n    return setTimeout(bindFn(fn, context), timeout);\r\n}\r\n\r\n/**\r\n * if the argument is an array, we want to execute the fn on each entry\r\n * if it aint an array we don't want to do a thing.\r\n * this is used by all the methods that accept a single and array argument.\r\n * @param {*|Array} arg\r\n * @param {String} fn\r\n * @param {Object} [context]\r\n * @returns {Boolean}\r\n */\r\nfunction invokeArrayArg(arg, fn, context) {\r\n    if (Array.isArray(arg)) {\r\n        each(arg, context[fn], context);\r\n        return true;\r\n    }\r\n    return false;\r\n}\r\n\r\n/**\r\n * walk objects and arrays\r\n * @param {Object} obj\r\n * @param {Function} iterator\r\n * @param {Object} context\r\n */\r\nfunction each(obj, iterator, context) {\r\n    var i;\r\n\r\n    if (!obj) {\r\n        return;\r\n    }\r\n\r\n    if (obj.forEach) {\r\n        obj.forEach(iterator, context);\r\n    } else if (obj.length !== undefined) {\r\n        i = 0;\r\n        while (i < obj.length) {\r\n            iterator.call(context, obj[i], i, obj);\r\n            i++;\r\n        }\r\n    } else {\r\n        for (i in obj) {\r\n            obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\r\n        }\r\n    }\r\n}\r\n\r\n/**\r\n * wrap a method with a deprecation warning and stack trace\r\n * @param {Function} method\r\n * @param {String} name\r\n * @param {String} message\r\n * @returns {Function} A new function wrapping the supplied method.\r\n */\r\nfunction deprecate(method, name, message) {\r\n    var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\r\n    return function() {\r\n        var e = new Error('get-stack-trace');\r\n        var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\r\n            .replace(/^\\s+at\\s+/gm, '')\r\n            .replace(/^Object.<anonymous>\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\r\n\r\n        var log = window.console && (window.console.warn || window.console.log);\r\n        if (log) {\r\n            log.call(window.console, deprecationMessage, stack);\r\n        }\r\n        return method.apply(this, arguments);\r\n    };\r\n}\r\n\r\n/**\r\n * extend object.\r\n * means that properties in dest will be overwritten by the ones in src.\r\n * @param {Object} target\r\n * @param {...Object} objects_to_assign\r\n * @returns {Object} target\r\n */\r\nvar assign;\r\nif (typeof Object.assign !== 'function') {\r\n    assign = function assign(target) {\r\n        if (target === undefined || target === null) {\r\n            throw new TypeError('Cannot convert undefined or null to object');\r\n        }\r\n\r\n        var output = Object(target);\r\n        for (var index = 1; index < arguments.length; index++) {\r\n            var source = arguments[index];\r\n            if (source !== undefined && source !== null) {\r\n                for (var nextKey in source) {\r\n                    if (source.hasOwnProperty(nextKey)) {\r\n                        output[nextKey] = source[nextKey];\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        return output;\r\n    };\r\n} else {\r\n    assign = Object.assign;\r\n}\r\n\r\n/**\r\n * extend object.\r\n * means that properties in dest will be overwritten by the ones in src.\r\n * @param {Object} dest\r\n * @param {Object} src\r\n * @param {Boolean} [merge=false]\r\n * @returns {Object} dest\r\n */\r\nvar extend = deprecate(function extend(dest, src, merge) {\r\n    var keys = Object.keys(src);\r\n    var i = 0;\r\n    while (i < keys.length) {\r\n        if (!merge || (merge && dest[keys[i]] === undefined)) {\r\n            dest[keys[i]] = src[keys[i]];\r\n        }\r\n        i++;\r\n    }\r\n    return dest;\r\n}, 'extend', 'Use `assign`.');\r\n\r\n/**\r\n * merge the values from src in the dest.\r\n * means that properties that exist in dest will not be overwritten by src\r\n * @param {Object} dest\r\n * @param {Object} src\r\n * @returns {Object} dest\r\n */\r\nvar merge = deprecate(function merge(dest, src) {\r\n    return extend(dest, src, true);\r\n}, 'merge', 'Use `assign`.');\r\n\r\n/**\r\n * simple class inheritance\r\n * @param {Function} child\r\n * @param {Function} base\r\n * @param {Object} [properties]\r\n */\r\nfunction inherit(child, base, properties) {\r\n    var baseP = base.prototype,\r\n        childP;\r\n\r\n    childP = child.prototype = Object.create(baseP);\r\n    childP.constructor = child;\r\n    childP._super = baseP;\r\n\r\n    if (properties) {\r\n        assign(childP, properties);\r\n    }\r\n}\r\n\r\n/**\r\n * simple function bind\r\n * @param {Function} fn\r\n * @param {Object} context\r\n * @returns {Function}\r\n */\r\nfunction bindFn(fn, context) {\r\n    return function boundFn() {\r\n        return fn.apply(context, arguments);\r\n    };\r\n}\r\n\r\n/**\r\n * let a boolean value also be a function that must return a boolean\r\n * this first item in args will be used as the context\r\n * @param {Boolean|Function} val\r\n * @param {Array} [args]\r\n * @returns {Boolean}\r\n */\r\nfunction boolOrFn(val, args) {\r\n    if (typeof val == TYPE_FUNCTION) {\r\n        return val.apply(args ? args[0] || undefined : undefined, args);\r\n    }\r\n    return val;\r\n}\r\n\r\n/**\r\n * use the val2 when val1 is undefined\r\n * @param {*} val1\r\n * @param {*} val2\r\n * @returns {*}\r\n */\r\nfunction ifUndefined(val1, val2) {\r\n    return (val1 === undefined) ? val2 : val1;\r\n}\r\n\r\n/**\r\n * addEventListener with multiple events at once\r\n * @param {EventTarget} target\r\n * @param {String} types\r\n * @param {Function} handler\r\n */\r\nfunction addEventListeners(target, types, handler) {\r\n    each(splitStr(types), function(type) {\r\n        target.addEventListener(type, handler, false);\r\n    });\r\n}\r\n\r\n/**\r\n * removeEventListener with multiple events at once\r\n * @param {EventTarget} target\r\n * @param {String} types\r\n * @param {Function} handler\r\n */\r\nfunction removeEventListeners(target, types, handler) {\r\n    each(splitStr(types), function(type) {\r\n        target.removeEventListener(type, handler, false);\r\n    });\r\n}\r\n\r\n/**\r\n * find if a node is in the given parent\r\n * @method hasParent\r\n * @param {HTMLElement} node\r\n * @param {HTMLElement} parent\r\n * @return {Boolean} found\r\n */\r\nfunction hasParent(node, parent) {\r\n    while (node) {\r\n        if (node == parent) {\r\n            return true;\r\n        }\r\n        node = node.parentNode;\r\n    }\r\n    return false;\r\n}\r\n\r\n/**\r\n * small indexOf wrapper\r\n * @param {String} str\r\n * @param {String} find\r\n * @returns {Boolean} found\r\n */\r\nfunction inStr(str, find) {\r\n    return str.indexOf(find) > -1;\r\n}\r\n\r\n/**\r\n * split string on whitespace\r\n * @param {String} str\r\n * @returns {Array} words\r\n */\r\nfunction splitStr(str) {\r\n    return str.trim().split(/\\s+/g);\r\n}\r\n\r\n/**\r\n * find if a array contains the object using indexOf or a simple polyFill\r\n * @param {Array} src\r\n * @param {String} find\r\n * @param {String} [findByKey]\r\n * @return {Boolean|Number} false when not found, or the index\r\n */\r\nfunction inArray(src, find, findByKey) {\r\n    if (src.indexOf && !findByKey) {\r\n        return src.indexOf(find);\r\n    } else {\r\n        var i = 0;\r\n        while (i < src.length) {\r\n            if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\r\n                return i;\r\n            }\r\n            i++;\r\n        }\r\n        return -1;\r\n    }\r\n}\r\n\r\n/**\r\n * convert array-like objects to real arrays\r\n * @param {Object} obj\r\n * @returns {Array}\r\n */\r\nfunction toArray(obj) {\r\n    return Array.prototype.slice.call(obj, 0);\r\n}\r\n\r\n/**\r\n * unique array with objects based on a key (like 'id') or just by the array's value\r\n * @param {Array} src [{id:1},{id:2},{id:1}]\r\n * @param {String} [key]\r\n * @param {Boolean} [sort=False]\r\n * @returns {Array} [{id:1},{id:2}]\r\n */\r\nfunction uniqueArray(src, key, sort) {\r\n    var results = [];\r\n    var values = [];\r\n    var i = 0;\r\n\r\n    while (i < src.length) {\r\n        var val = key ? src[i][key] : src[i];\r\n        if (inArray(values, val) < 0) {\r\n            results.push(src[i]);\r\n        }\r\n        values[i] = val;\r\n        i++;\r\n    }\r\n\r\n    if (sort) {\r\n        if (!key) {\r\n            results = results.sort();\r\n        } else {\r\n            results = results.sort(function sortUniqueArray(a, b) {\r\n                return a[key] > b[key];\r\n            });\r\n        }\r\n    }\r\n\r\n    return results;\r\n}\r\n\r\n/**\r\n * get the prefixed property\r\n * @param {Object} obj\r\n * @param {String} property\r\n * @returns {String|Undefined} prefixed\r\n */\r\nfunction prefixed(obj, property) {\r\n    var prefix, prop;\r\n    var camelProp = property[0].toUpperCase() + property.slice(1);\r\n\r\n    var i = 0;\r\n    while (i < VENDOR_PREFIXES.length) {\r\n        prefix = VENDOR_PREFIXES[i];\r\n        prop = (prefix) ? prefix + camelProp : property;\r\n\r\n        if (prop in obj) {\r\n            return prop;\r\n        }\r\n        i++;\r\n    }\r\n    return undefined;\r\n}\r\n\r\n/**\r\n * get a unique id\r\n * @returns {number} uniqueId\r\n */\r\nvar _uniqueId = 1;\r\nfunction uniqueId() {\r\n    return _uniqueId++;\r\n}\r\n\r\n/**\r\n * get the window object of an element\r\n * @param {HTMLElement} element\r\n * @returns {DocumentView|Window}\r\n */\r\nfunction getWindowForElement(element) {\r\n    var doc = element.ownerDocument || element;\r\n    return (doc.defaultView || doc.parentWindow || window);\r\n}\r\n\r\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\r\n\r\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\r\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\r\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\r\n\r\nvar INPUT_TYPE_TOUCH = 'touch';\r\nvar INPUT_TYPE_PEN = 'pen';\r\nvar INPUT_TYPE_MOUSE = 'mouse';\r\nvar INPUT_TYPE_KINECT = 'kinect';\r\n\r\nvar COMPUTE_INTERVAL = 25;\r\n\r\nvar INPUT_START = 1;\r\nvar INPUT_MOVE = 2;\r\nvar INPUT_END = 4;\r\nvar INPUT_CANCEL = 8;\r\n\r\nvar DIRECTION_NONE = 1;\r\nvar DIRECTION_LEFT = 2;\r\nvar DIRECTION_RIGHT = 4;\r\nvar DIRECTION_UP = 8;\r\nvar DIRECTION_DOWN = 16;\r\n\r\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\r\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\r\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\r\n\r\nvar PROPS_XY = ['x', 'y'];\r\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\r\n\r\n/**\r\n * create new input type manager\r\n * @param {Manager} manager\r\n * @param {Function} callback\r\n * @returns {Input}\r\n * @constructor\r\n */\r\nfunction Input(manager, callback) {\r\n    var self = this;\r\n    this.manager = manager;\r\n    this.callback = callback;\r\n    this.element = manager.element;\r\n    this.target = manager.options.inputTarget;\r\n\r\n    // smaller wrapper around the handler, for the scope and the enabled state of the manager,\r\n    // so when disabled the input events are completely bypassed.\r\n    this.domHandler = function(ev) {\r\n        if (boolOrFn(manager.options.enable, [manager])) {\r\n            self.handler(ev);\r\n        }\r\n    };\r\n\r\n    this.init();\r\n\r\n}\r\n\r\nInput.prototype = {\r\n    /**\r\n     * should handle the inputEvent data and trigger the callback\r\n     * @virtual\r\n     */\r\n    handler: function() { },\r\n\r\n    /**\r\n     * bind the events\r\n     */\r\n    init: function() {\r\n        this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\r\n        this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\r\n        this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\r\n    },\r\n\r\n    /**\r\n     * unbind the events\r\n     */\r\n    destroy: function() {\r\n        this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\r\n        this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\r\n        this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\r\n    }\r\n};\r\n\r\n/**\r\n * create new input type manager\r\n * called by the Manager constructor\r\n * @param {Hammer} manager\r\n * @returns {Input}\r\n */\r\nfunction createInputInstance(manager) {\r\n    var Type;\r\n    var inputClass = manager.options.inputClass;\r\n\r\n    if (inputClass) {\r\n        Type = inputClass;\r\n    } else if (SUPPORT_POINTER_EVENTS) {\r\n        Type = PointerEventInput;\r\n    } else if (SUPPORT_ONLY_TOUCH) {\r\n        Type = TouchInput;\r\n    } else if (!SUPPORT_TOUCH) {\r\n        Type = MouseInput;\r\n    } else {\r\n        Type = TouchMouseInput;\r\n    }\r\n    return new (Type)(manager, inputHandler);\r\n}\r\n\r\n/**\r\n * handle input events\r\n * @param {Manager} manager\r\n * @param {String} eventType\r\n * @param {Object} input\r\n */\r\nfunction inputHandler(manager, eventType, input) {\r\n    var pointersLen = input.pointers.length;\r\n    var changedPointersLen = input.changedPointers.length;\r\n    var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\r\n    var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\r\n\r\n    input.isFirst = !!isFirst;\r\n    input.isFinal = !!isFinal;\r\n\r\n    if (isFirst) {\r\n        manager.session = {};\r\n    }\r\n\r\n    // source event is the normalized value of the domEvents\r\n    // like 'touchstart, mouseup, pointerdown'\r\n    input.eventType = eventType;\r\n\r\n    // compute scale, rotation etc\r\n    computeInputData(manager, input);\r\n\r\n    // emit secret event\r\n    manager.emit('hammer.input', input);\r\n\r\n    manager.recognize(input);\r\n    manager.session.prevInput = input;\r\n}\r\n\r\n/**\r\n * extend the data with some usable properties like scale, rotate, velocity etc\r\n * @param {Object} manager\r\n * @param {Object} input\r\n */\r\nfunction computeInputData(manager, input) {\r\n    var session = manager.session;\r\n    var pointers = input.pointers;\r\n    var pointersLength = pointers.length;\r\n\r\n    // store the first input to calculate the distance and direction\r\n    if (!session.firstInput) {\r\n        session.firstInput = simpleCloneInputData(input);\r\n    }\r\n\r\n    // to compute scale and rotation we need to store the multiple touches\r\n    if (pointersLength > 1 && !session.firstMultiple) {\r\n        session.firstMultiple = simpleCloneInputData(input);\r\n    } else if (pointersLength === 1) {\r\n        session.firstMultiple = false;\r\n    }\r\n\r\n    var firstInput = session.firstInput;\r\n    var firstMultiple = session.firstMultiple;\r\n    var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\r\n\r\n    var center = input.center = getCenter(pointers);\r\n    input.timeStamp = now();\r\n    input.deltaTime = input.timeStamp - firstInput.timeStamp;\r\n\r\n    input.angle = getAngle(offsetCenter, center);\r\n    input.distance = getDistance(offsetCenter, center);\r\n\r\n    computeDeltaXY(session, input);\r\n    input.offsetDirection = getDirection(input.deltaX, input.deltaY);\r\n\r\n    var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\r\n    input.overallVelocityX = overallVelocity.x;\r\n    input.overallVelocityY = overallVelocity.y;\r\n    input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\r\n\r\n    input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\r\n    input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\r\n\r\n    input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\r\n        session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\r\n\r\n    computeIntervalInputData(session, input);\r\n\r\n    // find the correct target\r\n    var target = manager.element;\r\n    if (hasParent(input.srcEvent.target, target)) {\r\n        target = input.srcEvent.target;\r\n    }\r\n    input.target = target;\r\n}\r\n\r\nfunction computeDeltaXY(session, input) {\r\n    var center = input.center;\r\n    var offset = session.offsetDelta || {};\r\n    var prevDelta = session.prevDelta || {};\r\n    var prevInput = session.prevInput || {};\r\n\r\n    if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\r\n        prevDelta = session.prevDelta = {\r\n            x: prevInput.deltaX || 0,\r\n            y: prevInput.deltaY || 0\r\n        };\r\n\r\n        offset = session.offsetDelta = {\r\n            x: center.x,\r\n            y: center.y\r\n        };\r\n    }\r\n\r\n    input.deltaX = prevDelta.x + (center.x - offset.x);\r\n    input.deltaY = prevDelta.y + (center.y - offset.y);\r\n}\r\n\r\n/**\r\n * velocity is calculated every x ms\r\n * @param {Object} session\r\n * @param {Object} input\r\n */\r\nfunction computeIntervalInputData(session, input) {\r\n    var last = session.lastInterval || input,\r\n        deltaTime = input.timeStamp - last.timeStamp,\r\n        velocity, velocityX, velocityY, direction;\r\n\r\n    if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\r\n        var deltaX = input.deltaX - last.deltaX;\r\n        var deltaY = input.deltaY - last.deltaY;\r\n\r\n        var v = getVelocity(deltaTime, deltaX, deltaY);\r\n        velocityX = v.x;\r\n        velocityY = v.y;\r\n        velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\r\n        direction = getDirection(deltaX, deltaY);\r\n\r\n        session.lastInterval = input;\r\n    } else {\r\n        // use latest velocity info if it doesn't overtake a minimum period\r\n        velocity = last.velocity;\r\n        velocityX = last.velocityX;\r\n        velocityY = last.velocityY;\r\n        direction = last.direction;\r\n    }\r\n\r\n    input.velocity = velocity;\r\n    input.velocityX = velocityX;\r\n    input.velocityY = velocityY;\r\n    input.direction = direction;\r\n}\r\n\r\n/**\r\n * create a simple clone from the input used for storage of firstInput and firstMultiple\r\n * @param {Object} input\r\n * @returns {Object} clonedInputData\r\n */\r\nfunction simpleCloneInputData(input) {\r\n    // make a simple copy of the pointers because we will get a reference if we don't\r\n    // we only need clientXY for the calculations\r\n    var pointers = [];\r\n    var i = 0;\r\n    while (i < input.pointers.length) {\r\n        pointers[i] = {\r\n            clientX: round(input.pointers[i].clientX),\r\n            clientY: round(input.pointers[i].clientY)\r\n        };\r\n        i++;\r\n    }\r\n\r\n    return {\r\n        timeStamp: now(),\r\n        pointers: pointers,\r\n        center: getCenter(pointers),\r\n        deltaX: input.deltaX,\r\n        deltaY: input.deltaY\r\n    };\r\n}\r\n\r\n/**\r\n * get the center of all the pointers\r\n * @param {Array} pointers\r\n * @return {Object} center contains `x` and `y` properties\r\n */\r\nfunction getCenter(pointers) {\r\n    var pointersLength = pointers.length;\r\n\r\n    // no need to loop when only one touch\r\n    if (pointersLength === 1) {\r\n        return {\r\n            x: round(pointers[0].clientX),\r\n            y: round(pointers[0].clientY)\r\n        };\r\n    }\r\n\r\n    var x = 0, y = 0, i = 0;\r\n    while (i < pointersLength) {\r\n        x += pointers[i].clientX;\r\n        y += pointers[i].clientY;\r\n        i++;\r\n    }\r\n\r\n    return {\r\n        x: round(x / pointersLength),\r\n        y: round(y / pointersLength)\r\n    };\r\n}\r\n\r\n/**\r\n * calculate the velocity between two points. unit is in px per ms.\r\n * @param {Number} deltaTime\r\n * @param {Number} x\r\n * @param {Number} y\r\n * @return {Object} velocity `x` and `y`\r\n */\r\nfunction getVelocity(deltaTime, x, y) {\r\n    return {\r\n        x: x / deltaTime || 0,\r\n        y: y / deltaTime || 0\r\n    };\r\n}\r\n\r\n/**\r\n * get the direction between two points\r\n * @param {Number} x\r\n * @param {Number} y\r\n * @return {Number} direction\r\n */\r\nfunction getDirection(x, y) {\r\n    if (x === y) {\r\n        return DIRECTION_NONE;\r\n    }\r\n\r\n    if (abs(x) >= abs(y)) {\r\n        return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\r\n    }\r\n    return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\r\n}\r\n\r\n/**\r\n * calculate the absolute distance between two points\r\n * @param {Object} p1 {x, y}\r\n * @param {Object} p2 {x, y}\r\n * @param {Array} [props] containing x and y keys\r\n * @return {Number} distance\r\n */\r\nfunction getDistance(p1, p2, props) {\r\n    if (!props) {\r\n        props = PROPS_XY;\r\n    }\r\n    var x = p2[props[0]] - p1[props[0]],\r\n        y = p2[props[1]] - p1[props[1]];\r\n\r\n    return Math.sqrt((x * x) + (y * y));\r\n}\r\n\r\n/**\r\n * calculate the angle between two coordinates\r\n * @param {Object} p1\r\n * @param {Object} p2\r\n * @param {Array} [props] containing x and y keys\r\n * @return {Number} angle\r\n */\r\nfunction getAngle(p1, p2, props) {\r\n    if (!props) {\r\n        props = PROPS_XY;\r\n    }\r\n    var x = p2[props[0]] - p1[props[0]],\r\n        y = p2[props[1]] - p1[props[1]];\r\n    return Math.atan2(y, x) * 180 / Math.PI;\r\n}\r\n\r\n/**\r\n * calculate the rotation degrees between two pointersets\r\n * @param {Array} start array of pointers\r\n * @param {Array} end array of pointers\r\n * @return {Number} rotation\r\n */\r\nfunction getRotation(start, end) {\r\n    return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\r\n}\r\n\r\n/**\r\n * calculate the scale factor between two pointersets\r\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\r\n * @param {Array} start array of pointers\r\n * @param {Array} end array of pointers\r\n * @return {Number} scale\r\n */\r\nfunction getScale(start, end) {\r\n    return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\r\n}\r\n\r\nvar MOUSE_INPUT_MAP = {\r\n    mousedown: INPUT_START,\r\n    mousemove: INPUT_MOVE,\r\n    mouseup: INPUT_END\r\n};\r\n\r\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\r\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\r\n\r\n/**\r\n * Mouse events input\r\n * @constructor\r\n * @extends Input\r\n */\r\nfunction MouseInput() {\r\n    this.evEl = MOUSE_ELEMENT_EVENTS;\r\n    this.evWin = MOUSE_WINDOW_EVENTS;\r\n\r\n    this.pressed = false; // mousedown state\r\n\r\n    Input.apply(this, arguments);\r\n}\r\n\r\ninherit(MouseInput, Input, {\r\n    /**\r\n     * handle mouse events\r\n     * @param {Object} ev\r\n     */\r\n    handler: function MEhandler(ev) {\r\n        var eventType = MOUSE_INPUT_MAP[ev.type];\r\n\r\n        // on start we want to have the left mouse button down\r\n        if (eventType & INPUT_START && ev.button === 0) {\r\n            this.pressed = true;\r\n        }\r\n\r\n        if (eventType & INPUT_MOVE && ev.which !== 1) {\r\n            eventType = INPUT_END;\r\n        }\r\n\r\n        // mouse must be down\r\n        if (!this.pressed) {\r\n            return;\r\n        }\r\n\r\n        if (eventType & INPUT_END) {\r\n            this.pressed = false;\r\n        }\r\n\r\n        this.callback(this.manager, eventType, {\r\n            pointers: [ev],\r\n            changedPointers: [ev],\r\n            pointerType: INPUT_TYPE_MOUSE,\r\n            srcEvent: ev\r\n        });\r\n    }\r\n});\r\n\r\nvar POINTER_INPUT_MAP = {\r\n    pointerdown: INPUT_START,\r\n    pointermove: INPUT_MOVE,\r\n    pointerup: INPUT_END,\r\n    pointercancel: INPUT_CANCEL,\r\n    pointerout: INPUT_CANCEL\r\n};\r\n\r\n// in IE10 the pointer types is defined as an enum\r\nvar IE10_POINTER_TYPE_ENUM = {\r\n    2: INPUT_TYPE_TOUCH,\r\n    3: INPUT_TYPE_PEN,\r\n    4: INPUT_TYPE_MOUSE,\r\n    5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\r\n};\r\n\r\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\r\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\r\n\r\n// IE10 has prefixed support, and case-sensitive\r\nif (window.MSPointerEvent && !window.PointerEvent) {\r\n    POINTER_ELEMENT_EVENTS = 'MSPointerDown';\r\n    POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\r\n}\r\n\r\n/**\r\n * Pointer events input\r\n * @constructor\r\n * @extends Input\r\n */\r\nfunction PointerEventInput() {\r\n    this.evEl = POINTER_ELEMENT_EVENTS;\r\n    this.evWin = POINTER_WINDOW_EVENTS;\r\n\r\n    Input.apply(this, arguments);\r\n\r\n    this.store = (this.manager.session.pointerEvents = []);\r\n}\r\n\r\ninherit(PointerEventInput, Input, {\r\n    /**\r\n     * handle mouse events\r\n     * @param {Object} ev\r\n     */\r\n    handler: function PEhandler(ev) {\r\n        var store = this.store;\r\n        var removePointer = false;\r\n\r\n        var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\r\n        var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\r\n        var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\r\n\r\n        var isTouch = (pointerType == INPUT_TYPE_TOUCH);\r\n\r\n        // get index of the event in the store\r\n        var storeIndex = inArray(store, ev.pointerId, 'pointerId');\r\n\r\n        // start and mouse must be down\r\n        if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\r\n            if (storeIndex < 0) {\r\n                store.push(ev);\r\n                storeIndex = store.length - 1;\r\n            }\r\n        } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\r\n            removePointer = true;\r\n        }\r\n\r\n        // it not found, so the pointer hasn't been down (so it's probably a hover)\r\n        if (storeIndex < 0) {\r\n            return;\r\n        }\r\n\r\n        // update the event in the store\r\n        store[storeIndex] = ev;\r\n\r\n        this.callback(this.manager, eventType, {\r\n            pointers: store,\r\n            changedPointers: [ev],\r\n            pointerType: pointerType,\r\n            srcEvent: ev\r\n        });\r\n\r\n        if (removePointer) {\r\n            // remove from the store\r\n            store.splice(storeIndex, 1);\r\n        }\r\n    }\r\n});\r\n\r\nvar SINGLE_TOUCH_INPUT_MAP = {\r\n    touchstart: INPUT_START,\r\n    touchmove: INPUT_MOVE,\r\n    touchend: INPUT_END,\r\n    touchcancel: INPUT_CANCEL\r\n};\r\n\r\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\r\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\r\n\r\n/**\r\n * Touch events input\r\n * @constructor\r\n * @extends Input\r\n */\r\nfunction SingleTouchInput() {\r\n    this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\r\n    this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\r\n    this.started = false;\r\n\r\n    Input.apply(this, arguments);\r\n}\r\n\r\ninherit(SingleTouchInput, Input, {\r\n    handler: function TEhandler(ev) {\r\n        var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\r\n\r\n        // should we handle the touch events?\r\n        if (type === INPUT_START) {\r\n            this.started = true;\r\n        }\r\n\r\n        if (!this.started) {\r\n            return;\r\n        }\r\n\r\n        var touches = normalizeSingleTouches.call(this, ev, type);\r\n\r\n        // when done, reset the started state\r\n        if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\r\n            this.started = false;\r\n        }\r\n\r\n        this.callback(this.manager, type, {\r\n            pointers: touches[0],\r\n            changedPointers: touches[1],\r\n            pointerType: INPUT_TYPE_TOUCH,\r\n            srcEvent: ev\r\n        });\r\n    }\r\n});\r\n\r\n/**\r\n * @this {TouchInput}\r\n * @param {Object} ev\r\n * @param {Number} type flag\r\n * @returns {undefined|Array} [all, changed]\r\n */\r\nfunction normalizeSingleTouches(ev, type) {\r\n    var all = toArray(ev.touches);\r\n    var changed = toArray(ev.changedTouches);\r\n\r\n    if (type & (INPUT_END | INPUT_CANCEL)) {\r\n        all = uniqueArray(all.concat(changed), 'identifier', true);\r\n    }\r\n\r\n    return [all, changed];\r\n}\r\n\r\nvar TOUCH_INPUT_MAP = {\r\n    touchstart: INPUT_START,\r\n    touchmove: INPUT_MOVE,\r\n    touchend: INPUT_END,\r\n    touchcancel: INPUT_CANCEL\r\n};\r\n\r\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\r\n\r\n/**\r\n * Multi-user touch events input\r\n * @constructor\r\n * @extends Input\r\n */\r\nfunction TouchInput() {\r\n    this.evTarget = TOUCH_TARGET_EVENTS;\r\n    this.targetIds = {};\r\n\r\n    Input.apply(this, arguments);\r\n}\r\n\r\ninherit(TouchInput, Input, {\r\n    handler: function MTEhandler(ev) {\r\n        var type = TOUCH_INPUT_MAP[ev.type];\r\n        var touches = getTouches.call(this, ev, type);\r\n        if (!touches) {\r\n            return;\r\n        }\r\n\r\n        this.callback(this.manager, type, {\r\n            pointers: touches[0],\r\n            changedPointers: touches[1],\r\n            pointerType: INPUT_TYPE_TOUCH,\r\n            srcEvent: ev\r\n        });\r\n    }\r\n});\r\n\r\n/**\r\n * @this {TouchInput}\r\n * @param {Object} ev\r\n * @param {Number} type flag\r\n * @returns {undefined|Array} [all, changed]\r\n */\r\nfunction getTouches(ev, type) {\r\n    var allTouches = toArray(ev.touches);\r\n    var targetIds = this.targetIds;\r\n\r\n    // when there is only one touch, the process can be simplified\r\n    if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\r\n        targetIds[allTouches[0].identifier] = true;\r\n        return [allTouches, allTouches];\r\n    }\r\n\r\n    var i,\r\n        targetTouches,\r\n        changedTouches = toArray(ev.changedTouches),\r\n        changedTargetTouches = [],\r\n        target = this.target;\r\n\r\n    // get target touches from touches\r\n    targetTouches = allTouches.filter(function(touch) {\r\n        return hasParent(touch.target, target);\r\n    });\r\n\r\n    // collect touches\r\n    if (type === INPUT_START) {\r\n        i = 0;\r\n        while (i < targetTouches.length) {\r\n            targetIds[targetTouches[i].identifier] = true;\r\n            i++;\r\n        }\r\n    }\r\n\r\n    // filter changed touches to only contain touches that exist in the collected target ids\r\n    i = 0;\r\n    while (i < changedTouches.length) {\r\n        if (targetIds[changedTouches[i].identifier]) {\r\n            changedTargetTouches.push(changedTouches[i]);\r\n        }\r\n\r\n        // cleanup removed touches\r\n        if (type & (INPUT_END | INPUT_CANCEL)) {\r\n            delete targetIds[changedTouches[i].identifier];\r\n        }\r\n        i++;\r\n    }\r\n\r\n    if (!changedTargetTouches.length) {\r\n        return;\r\n    }\r\n\r\n    return [\r\n        // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\r\n        uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\r\n        changedTargetTouches\r\n    ];\r\n}\r\n\r\n/**\r\n * Combined touch and mouse input\r\n *\r\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\r\n * This because touch devices also emit mouse events while doing a touch.\r\n *\r\n * @constructor\r\n * @extends Input\r\n */\r\n\r\nvar DEDUP_TIMEOUT = 2500;\r\nvar DEDUP_DISTANCE = 25;\r\n\r\nfunction TouchMouseInput() {\r\n    Input.apply(this, arguments);\r\n\r\n    var handler = bindFn(this.handler, this);\r\n    this.touch = new TouchInput(this.manager, handler);\r\n    this.mouse = new MouseInput(this.manager, handler);\r\n\r\n    this.primaryTouch = null;\r\n    this.lastTouches = [];\r\n}\r\n\r\ninherit(TouchMouseInput, Input, {\r\n    /**\r\n     * handle mouse and touch events\r\n     * @param {Hammer} manager\r\n     * @param {String} inputEvent\r\n     * @param {Object} inputData\r\n     */\r\n    handler: function TMEhandler(manager, inputEvent, inputData) {\r\n        var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\r\n            isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\r\n\r\n        if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\r\n            return;\r\n        }\r\n\r\n        // when we're in a touch event, record touches to  de-dupe synthetic mouse event\r\n        if (isTouch) {\r\n            recordTouches.call(this, inputEvent, inputData);\r\n        } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\r\n            return;\r\n        }\r\n\r\n        this.callback(manager, inputEvent, inputData);\r\n    },\r\n\r\n    /**\r\n     * remove the event listeners\r\n     */\r\n    destroy: function destroy() {\r\n        this.touch.destroy();\r\n        this.mouse.destroy();\r\n    }\r\n});\r\n\r\nfunction recordTouches(eventType, eventData) {\r\n    if (eventType & INPUT_START) {\r\n        this.primaryTouch = eventData.changedPointers[0].identifier;\r\n        setLastTouch.call(this, eventData);\r\n    } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\r\n        setLastTouch.call(this, eventData);\r\n    }\r\n}\r\n\r\nfunction setLastTouch(eventData) {\r\n    var touch = eventData.changedPointers[0];\r\n\r\n    if (touch.identifier === this.primaryTouch) {\r\n        var lastTouch = {x: touch.clientX, y: touch.clientY};\r\n        this.lastTouches.push(lastTouch);\r\n        var lts = this.lastTouches;\r\n        var removeLastTouch = function() {\r\n            var i = lts.indexOf(lastTouch);\r\n            if (i > -1) {\r\n                lts.splice(i, 1);\r\n            }\r\n        };\r\n        setTimeout(removeLastTouch, DEDUP_TIMEOUT);\r\n    }\r\n}\r\n\r\nfunction isSyntheticEvent(eventData) {\r\n    var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\r\n    for (var i = 0; i < this.lastTouches.length; i++) {\r\n        var t = this.lastTouches[i];\r\n        var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\r\n        if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\r\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\r\n\r\n// magical touchAction value\r\nvar TOUCH_ACTION_COMPUTE = 'compute';\r\nvar TOUCH_ACTION_AUTO = 'auto';\r\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\r\nvar TOUCH_ACTION_NONE = 'none';\r\nvar TOUCH_ACTION_PAN_X = 'pan-x';\r\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\r\nvar TOUCH_ACTION_MAP = getTouchActionProps();\r\n\r\n/**\r\n * Touch Action\r\n * sets the touchAction property or uses the js alternative\r\n * @param {Manager} manager\r\n * @param {String} value\r\n * @constructor\r\n */\r\nfunction TouchAction(manager, value) {\r\n    this.manager = manager;\r\n    this.set(value);\r\n}\r\n\r\nTouchAction.prototype = {\r\n    /**\r\n     * set the touchAction value on the element or enable the polyfill\r\n     * @param {String} value\r\n     */\r\n    set: function(value) {\r\n        // find out the touch-action by the event handlers\r\n        if (value == TOUCH_ACTION_COMPUTE) {\r\n            value = this.compute();\r\n        }\r\n\r\n        if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\r\n            this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\r\n        }\r\n        this.actions = value.toLowerCase().trim();\r\n    },\r\n\r\n    /**\r\n     * just re-set the touchAction value\r\n     */\r\n    update: function() {\r\n        this.set(this.manager.options.touchAction);\r\n    },\r\n\r\n    /**\r\n     * compute the value for the touchAction property based on the recognizer's settings\r\n     * @returns {String} value\r\n     */\r\n    compute: function() {\r\n        var actions = [];\r\n        each(this.manager.recognizers, function(recognizer) {\r\n            if (boolOrFn(recognizer.options.enable, [recognizer])) {\r\n                actions = actions.concat(recognizer.getTouchAction());\r\n            }\r\n        });\r\n        return cleanTouchActions(actions.join(' '));\r\n    },\r\n\r\n    /**\r\n     * this method is called on each input cycle and provides the preventing of the browser behavior\r\n     * @param {Object} input\r\n     */\r\n    preventDefaults: function(input) {\r\n        var srcEvent = input.srcEvent;\r\n        var direction = input.offsetDirection;\r\n\r\n        // if the touch action did prevented once this session\r\n        if (this.manager.session.prevented) {\r\n            srcEvent.preventDefault();\r\n            return;\r\n        }\r\n\r\n        var actions = this.actions;\r\n        var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\r\n        var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\r\n        var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\r\n\r\n        if (hasNone) {\r\n            //do not prevent defaults if this is a tap gesture\r\n\r\n            var isTapPointer = input.pointers.length === 1;\r\n            var isTapMovement = input.distance < 2;\r\n            var isTapTouchTime = input.deltaTime < 250;\r\n\r\n            if (isTapPointer && isTapMovement && isTapTouchTime) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        if (hasPanX && hasPanY) {\r\n            // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\r\n            return;\r\n        }\r\n\r\n        if (hasNone ||\r\n            (hasPanY && direction & DIRECTION_HORIZONTAL) ||\r\n            (hasPanX && direction & DIRECTION_VERTICAL)) {\r\n            return this.preventSrc(srcEvent);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\r\n     * @param {Object} srcEvent\r\n     */\r\n    preventSrc: function(srcEvent) {\r\n        this.manager.session.prevented = true;\r\n        srcEvent.preventDefault();\r\n    }\r\n};\r\n\r\n/**\r\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\r\n * @param {String} actions\r\n * @returns {*}\r\n */\r\nfunction cleanTouchActions(actions) {\r\n    // none\r\n    if (inStr(actions, TOUCH_ACTION_NONE)) {\r\n        return TOUCH_ACTION_NONE;\r\n    }\r\n\r\n    var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\r\n    var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\r\n\r\n    // if both pan-x and pan-y are set (different recognizers\r\n    // for different directions, e.g. horizontal pan but vertical swipe?)\r\n    // we need none (as otherwise with pan-x pan-y combined none of these\r\n    // recognizers will work, since the browser would handle all panning\r\n    if (hasPanX && hasPanY) {\r\n        return TOUCH_ACTION_NONE;\r\n    }\r\n\r\n    // pan-x OR pan-y\r\n    if (hasPanX || hasPanY) {\r\n        return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\r\n    }\r\n\r\n    // manipulation\r\n    if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\r\n        return TOUCH_ACTION_MANIPULATION;\r\n    }\r\n\r\n    return TOUCH_ACTION_AUTO;\r\n}\r\n\r\nfunction getTouchActionProps() {\r\n    if (!NATIVE_TOUCH_ACTION) {\r\n        return false;\r\n    }\r\n    var touchMap = {};\r\n    var cssSupports = window.CSS && window.CSS.supports;\r\n    ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\r\n\r\n        // If css.supports is not supported but there is native touch-action assume it supports\r\n        // all values. This is the case for IE 10 and 11.\r\n        touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\r\n    });\r\n    return touchMap;\r\n}\r\n\r\n/**\r\n * Recognizer flow explained; *\r\n * All recognizers have the initial state of POSSIBLE when a input session starts.\r\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\r\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\r\n *\r\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\r\n * which determines with state it should be.\r\n *\r\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\r\n * POSSIBLE to give it another change on the next cycle.\r\n *\r\n *               Possible\r\n *                  |\r\n *            +-----+---------------+\r\n *            |                     |\r\n *      +-----+-----+               |\r\n *      |           |               |\r\n *   Failed      Cancelled          |\r\n *                          +-------+------+\r\n *                          |              |\r\n *                      Recognized       Began\r\n *                                         |\r\n *                                      Changed\r\n *                                         |\r\n *                                  Ended/Recognized\r\n */\r\nvar STATE_POSSIBLE = 1;\r\nvar STATE_BEGAN = 2;\r\nvar STATE_CHANGED = 4;\r\nvar STATE_ENDED = 8;\r\nvar STATE_RECOGNIZED = STATE_ENDED;\r\nvar STATE_CANCELLED = 16;\r\nvar STATE_FAILED = 32;\r\n\r\n/**\r\n * Recognizer\r\n * Every recognizer needs to extend from this class.\r\n * @constructor\r\n * @param {Object} options\r\n */\r\nfunction Recognizer(options) {\r\n    this.options = assign({}, this.defaults, options || {});\r\n\r\n    this.id = uniqueId();\r\n\r\n    this.manager = null;\r\n\r\n    // default is enable true\r\n    this.options.enable = ifUndefined(this.options.enable, true);\r\n\r\n    this.state = STATE_POSSIBLE;\r\n\r\n    this.simultaneous = {};\r\n    this.requireFail = [];\r\n}\r\n\r\nRecognizer.prototype = {\r\n    /**\r\n     * @virtual\r\n     * @type {Object}\r\n     */\r\n    defaults: {},\r\n\r\n    /**\r\n     * set options\r\n     * @param {Object} options\r\n     * @return {Recognizer}\r\n     */\r\n    set: function(options) {\r\n        assign(this.options, options);\r\n\r\n        // also update the touchAction, in case something changed about the directions/enabled state\r\n        this.manager && this.manager.touchAction.update();\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * recognize simultaneous with an other recognizer.\r\n     * @param {Recognizer} otherRecognizer\r\n     * @returns {Recognizer} this\r\n     */\r\n    recognizeWith: function(otherRecognizer) {\r\n        if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\r\n            return this;\r\n        }\r\n\r\n        var simultaneous = this.simultaneous;\r\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\r\n        if (!simultaneous[otherRecognizer.id]) {\r\n            simultaneous[otherRecognizer.id] = otherRecognizer;\r\n            otherRecognizer.recognizeWith(this);\r\n        }\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * drop the simultaneous link. it doesnt remove the link on the other recognizer.\r\n     * @param {Recognizer} otherRecognizer\r\n     * @returns {Recognizer} this\r\n     */\r\n    dropRecognizeWith: function(otherRecognizer) {\r\n        if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\r\n            return this;\r\n        }\r\n\r\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\r\n        delete this.simultaneous[otherRecognizer.id];\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * recognizer can only run when an other is failing\r\n     * @param {Recognizer} otherRecognizer\r\n     * @returns {Recognizer} this\r\n     */\r\n    requireFailure: function(otherRecognizer) {\r\n        if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\r\n            return this;\r\n        }\r\n\r\n        var requireFail = this.requireFail;\r\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\r\n        if (inArray(requireFail, otherRecognizer) === -1) {\r\n            requireFail.push(otherRecognizer);\r\n            otherRecognizer.requireFailure(this);\r\n        }\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * drop the requireFailure link. it does not remove the link on the other recognizer.\r\n     * @param {Recognizer} otherRecognizer\r\n     * @returns {Recognizer} this\r\n     */\r\n    dropRequireFailure: function(otherRecognizer) {\r\n        if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\r\n            return this;\r\n        }\r\n\r\n        otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\r\n        var index = inArray(this.requireFail, otherRecognizer);\r\n        if (index > -1) {\r\n            this.requireFail.splice(index, 1);\r\n        }\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * has require failures boolean\r\n     * @returns {boolean}\r\n     */\r\n    hasRequireFailures: function() {\r\n        return this.requireFail.length > 0;\r\n    },\r\n\r\n    /**\r\n     * if the recognizer can recognize simultaneous with an other recognizer\r\n     * @param {Recognizer} otherRecognizer\r\n     * @returns {Boolean}\r\n     */\r\n    canRecognizeWith: function(otherRecognizer) {\r\n        return !!this.simultaneous[otherRecognizer.id];\r\n    },\r\n\r\n    /**\r\n     * You should use `tryEmit` instead of `emit` directly to check\r\n     * that all the needed recognizers has failed before emitting.\r\n     * @param {Object} input\r\n     */\r\n    emit: function(input) {\r\n        var self = this;\r\n        var state = this.state;\r\n\r\n        function emit(event) {\r\n            self.manager.emit(event, input);\r\n        }\r\n\r\n        // 'panstart' and 'panmove'\r\n        if (state < STATE_ENDED) {\r\n            emit(self.options.event + stateStr(state));\r\n        }\r\n\r\n        emit(self.options.event); // simple 'eventName' events\r\n\r\n        if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\r\n            emit(input.additionalEvent);\r\n        }\r\n\r\n        // panend and pancancel\r\n        if (state >= STATE_ENDED) {\r\n            emit(self.options.event + stateStr(state));\r\n        }\r\n    },\r\n\r\n    /**\r\n     * Check that all the require failure recognizers has failed,\r\n     * if true, it emits a gesture event,\r\n     * otherwise, setup the state to FAILED.\r\n     * @param {Object} input\r\n     */\r\n    tryEmit: function(input) {\r\n        if (this.canEmit()) {\r\n            return this.emit(input);\r\n        }\r\n        // it's failing anyway\r\n        this.state = STATE_FAILED;\r\n    },\r\n\r\n    /**\r\n     * can we emit?\r\n     * @returns {boolean}\r\n     */\r\n    canEmit: function() {\r\n        var i = 0;\r\n        while (i < this.requireFail.length) {\r\n            if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\r\n                return false;\r\n            }\r\n            i++;\r\n        }\r\n        return true;\r\n    },\r\n\r\n    /**\r\n     * update the recognizer\r\n     * @param {Object} inputData\r\n     */\r\n    recognize: function(inputData) {\r\n        // make a new copy of the inputData\r\n        // so we can change the inputData without messing up the other recognizers\r\n        var inputDataClone = assign({}, inputData);\r\n\r\n        // is is enabled and allow recognizing?\r\n        if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\r\n            this.reset();\r\n            this.state = STATE_FAILED;\r\n            return;\r\n        }\r\n\r\n        // reset when we've reached the end\r\n        if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\r\n            this.state = STATE_POSSIBLE;\r\n        }\r\n\r\n        this.state = this.process(inputDataClone);\r\n\r\n        // the recognizer has recognized a gesture\r\n        // so trigger an event\r\n        if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\r\n            this.tryEmit(inputDataClone);\r\n        }\r\n    },\r\n\r\n    /**\r\n     * return the state of the recognizer\r\n     * the actual recognizing happens in this method\r\n     * @virtual\r\n     * @param {Object} inputData\r\n     * @returns {Const} STATE\r\n     */\r\n    process: function(inputData) { }, // jshint ignore:line\r\n\r\n    /**\r\n     * return the preferred touch-action\r\n     * @virtual\r\n     * @returns {Array}\r\n     */\r\n    getTouchAction: function() { },\r\n\r\n    /**\r\n     * called when the gesture isn't allowed to recognize\r\n     * like when another is being recognized or it is disabled\r\n     * @virtual\r\n     */\r\n    reset: function() { }\r\n};\r\n\r\n/**\r\n * get a usable string, used as event postfix\r\n * @param {Const} state\r\n * @returns {String} state\r\n */\r\nfunction stateStr(state) {\r\n    if (state & STATE_CANCELLED) {\r\n        return 'cancel';\r\n    } else if (state & STATE_ENDED) {\r\n        return 'end';\r\n    } else if (state & STATE_CHANGED) {\r\n        return 'move';\r\n    } else if (state & STATE_BEGAN) {\r\n        return 'start';\r\n    }\r\n    return '';\r\n}\r\n\r\n/**\r\n * direction cons to string\r\n * @param {Const} direction\r\n * @returns {String}\r\n */\r\nfunction directionStr(direction) {\r\n    if (direction == DIRECTION_DOWN) {\r\n        return 'down';\r\n    } else if (direction == DIRECTION_UP) {\r\n        return 'up';\r\n    } else if (direction == DIRECTION_LEFT) {\r\n        return 'left';\r\n    } else if (direction == DIRECTION_RIGHT) {\r\n        return 'right';\r\n    }\r\n    return '';\r\n}\r\n\r\n/**\r\n * get a recognizer by name if it is bound to a manager\r\n * @param {Recognizer|String} otherRecognizer\r\n * @param {Recognizer} recognizer\r\n * @returns {Recognizer}\r\n */\r\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\r\n    var manager = recognizer.manager;\r\n    if (manager) {\r\n        return manager.get(otherRecognizer);\r\n    }\r\n    return otherRecognizer;\r\n}\r\n\r\n/**\r\n * This recognizer is just used as a base for the simple attribute recognizers.\r\n * @constructor\r\n * @extends Recognizer\r\n */\r\nfunction AttrRecognizer() {\r\n    Recognizer.apply(this, arguments);\r\n}\r\n\r\ninherit(AttrRecognizer, Recognizer, {\r\n    /**\r\n     * @namespace\r\n     * @memberof AttrRecognizer\r\n     */\r\n    defaults: {\r\n        /**\r\n         * @type {Number}\r\n         * @default 1\r\n         */\r\n        pointers: 1\r\n    },\r\n\r\n    /**\r\n     * Used to check if it the recognizer receives valid input, like input.distance > 10.\r\n     * @memberof AttrRecognizer\r\n     * @param {Object} input\r\n     * @returns {Boolean} recognized\r\n     */\r\n    attrTest: function(input) {\r\n        var optionPointers = this.options.pointers;\r\n        return optionPointers === 0 || input.pointers.length === optionPointers;\r\n    },\r\n\r\n    /**\r\n     * Process the input and return the state for the recognizer\r\n     * @memberof AttrRecognizer\r\n     * @param {Object} input\r\n     * @returns {*} State\r\n     */\r\n    process: function(input) {\r\n        var state = this.state;\r\n        var eventType = input.eventType;\r\n\r\n        var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\r\n        var isValid = this.attrTest(input);\r\n\r\n        // on cancel input and we've recognized before, return STATE_CANCELLED\r\n        if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\r\n            return state | STATE_CANCELLED;\r\n        } else if (isRecognized || isValid) {\r\n            if (eventType & INPUT_END) {\r\n                return state | STATE_ENDED;\r\n            } else if (!(state & STATE_BEGAN)) {\r\n                return STATE_BEGAN;\r\n            }\r\n            return state | STATE_CHANGED;\r\n        }\r\n        return STATE_FAILED;\r\n    }\r\n});\r\n\r\n/**\r\n * Pan\r\n * Recognized when the pointer is down and moved in the allowed direction.\r\n * @constructor\r\n * @extends AttrRecognizer\r\n */\r\nfunction PanRecognizer() {\r\n    AttrRecognizer.apply(this, arguments);\r\n\r\n    this.pX = null;\r\n    this.pY = null;\r\n}\r\n\r\ninherit(PanRecognizer, AttrRecognizer, {\r\n    /**\r\n     * @namespace\r\n     * @memberof PanRecognizer\r\n     */\r\n    defaults: {\r\n        event: 'pan',\r\n        threshold: 10,\r\n        pointers: 1,\r\n        direction: DIRECTION_ALL\r\n    },\r\n\r\n    getTouchAction: function() {\r\n        var direction = this.options.direction;\r\n        var actions = [];\r\n        if (direction & DIRECTION_HORIZONTAL) {\r\n            actions.push(TOUCH_ACTION_PAN_Y);\r\n        }\r\n        if (direction & DIRECTION_VERTICAL) {\r\n            actions.push(TOUCH_ACTION_PAN_X);\r\n        }\r\n        return actions;\r\n    },\r\n\r\n    directionTest: function(input) {\r\n        var options = this.options;\r\n        var hasMoved = true;\r\n        var distance = input.distance;\r\n        var direction = input.direction;\r\n        var x = input.deltaX;\r\n        var y = input.deltaY;\r\n\r\n        // lock to axis?\r\n        if (!(direction & options.direction)) {\r\n            if (options.direction & DIRECTION_HORIZONTAL) {\r\n                direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\r\n                hasMoved = x != this.pX;\r\n                distance = Math.abs(input.deltaX);\r\n            } else {\r\n                direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\r\n                hasMoved = y != this.pY;\r\n                distance = Math.abs(input.deltaY);\r\n            }\r\n        }\r\n        input.direction = direction;\r\n        return hasMoved && distance > options.threshold && direction & options.direction;\r\n    },\r\n\r\n    attrTest: function(input) {\r\n        return AttrRecognizer.prototype.attrTest.call(this, input) &&\r\n            (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\r\n    },\r\n\r\n    emit: function(input) {\r\n\r\n        this.pX = input.deltaX;\r\n        this.pY = input.deltaY;\r\n\r\n        var direction = directionStr(input.direction);\r\n\r\n        if (direction) {\r\n            input.additionalEvent = this.options.event + direction;\r\n        }\r\n        this._super.emit.call(this, input);\r\n    }\r\n});\r\n\r\n/**\r\n * Pinch\r\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\r\n * @constructor\r\n * @extends AttrRecognizer\r\n */\r\nfunction PinchRecognizer() {\r\n    AttrRecognizer.apply(this, arguments);\r\n}\r\n\r\ninherit(PinchRecognizer, AttrRecognizer, {\r\n    /**\r\n     * @namespace\r\n     * @memberof PinchRecognizer\r\n     */\r\n    defaults: {\r\n        event: 'pinch',\r\n        threshold: 0,\r\n        pointers: 2\r\n    },\r\n\r\n    getTouchAction: function() {\r\n        return [TOUCH_ACTION_NONE];\r\n    },\r\n\r\n    attrTest: function(input) {\r\n        return this._super.attrTest.call(this, input) &&\r\n            (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\r\n    },\r\n\r\n    emit: function(input) {\r\n        if (input.scale !== 1) {\r\n            var inOut = input.scale < 1 ? 'in' : 'out';\r\n            input.additionalEvent = this.options.event + inOut;\r\n        }\r\n        this._super.emit.call(this, input);\r\n    }\r\n});\r\n\r\n/**\r\n * Press\r\n * Recognized when the pointer is down for x ms without any movement.\r\n * @constructor\r\n * @extends Recognizer\r\n */\r\nfunction PressRecognizer() {\r\n    Recognizer.apply(this, arguments);\r\n\r\n    this._timer = null;\r\n    this._input = null;\r\n}\r\n\r\ninherit(PressRecognizer, Recognizer, {\r\n    /**\r\n     * @namespace\r\n     * @memberof PressRecognizer\r\n     */\r\n    defaults: {\r\n        event: 'press',\r\n        pointers: 1,\r\n        time: 251, // minimal time of the pointer to be pressed\r\n        threshold: 9 // a minimal movement is ok, but keep it low\r\n    },\r\n\r\n    getTouchAction: function() {\r\n        return [TOUCH_ACTION_AUTO];\r\n    },\r\n\r\n    process: function(input) {\r\n        var options = this.options;\r\n        var validPointers = input.pointers.length === options.pointers;\r\n        var validMovement = input.distance < options.threshold;\r\n        var validTime = input.deltaTime > options.time;\r\n\r\n        this._input = input;\r\n\r\n        // we only allow little movement\r\n        // and we've reached an end event, so a tap is possible\r\n        if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\r\n            this.reset();\r\n        } else if (input.eventType & INPUT_START) {\r\n            this.reset();\r\n            this._timer = setTimeoutContext(function() {\r\n                this.state = STATE_RECOGNIZED;\r\n                this.tryEmit();\r\n            }, options.time, this);\r\n        } else if (input.eventType & INPUT_END) {\r\n            return STATE_RECOGNIZED;\r\n        }\r\n        return STATE_FAILED;\r\n    },\r\n\r\n    reset: function() {\r\n        clearTimeout(this._timer);\r\n    },\r\n\r\n    emit: function(input) {\r\n        if (this.state !== STATE_RECOGNIZED) {\r\n            return;\r\n        }\r\n\r\n        if (input && (input.eventType & INPUT_END)) {\r\n            this.manager.emit(this.options.event + 'up', input);\r\n        } else {\r\n            this._input.timeStamp = now();\r\n            this.manager.emit(this.options.event, this._input);\r\n        }\r\n    }\r\n});\r\n\r\n/**\r\n * Rotate\r\n * Recognized when two or more pointer are moving in a circular motion.\r\n * @constructor\r\n * @extends AttrRecognizer\r\n */\r\nfunction RotateRecognizer() {\r\n    AttrRecognizer.apply(this, arguments);\r\n}\r\n\r\ninherit(RotateRecognizer, AttrRecognizer, {\r\n    /**\r\n     * @namespace\r\n     * @memberof RotateRecognizer\r\n     */\r\n    defaults: {\r\n        event: 'rotate',\r\n        threshold: 0,\r\n        pointers: 2\r\n    },\r\n\r\n    getTouchAction: function() {\r\n        return [TOUCH_ACTION_NONE];\r\n    },\r\n\r\n    attrTest: function(input) {\r\n        return this._super.attrTest.call(this, input) &&\r\n            (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\r\n    }\r\n});\r\n\r\n/**\r\n * Swipe\r\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\r\n * @constructor\r\n * @extends AttrRecognizer\r\n */\r\nfunction SwipeRecognizer() {\r\n    AttrRecognizer.apply(this, arguments);\r\n}\r\n\r\ninherit(SwipeRecognizer, AttrRecognizer, {\r\n    /**\r\n     * @namespace\r\n     * @memberof SwipeRecognizer\r\n     */\r\n    defaults: {\r\n        event: 'swipe',\r\n        threshold: 10,\r\n        velocity: 0.3,\r\n        direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\r\n        pointers: 1\r\n    },\r\n\r\n    getTouchAction: function() {\r\n        return PanRecognizer.prototype.getTouchAction.call(this);\r\n    },\r\n\r\n    attrTest: function(input) {\r\n        var direction = this.options.direction;\r\n        var velocity;\r\n\r\n        if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\r\n            velocity = input.overallVelocity;\r\n        } else if (direction & DIRECTION_HORIZONTAL) {\r\n            velocity = input.overallVelocityX;\r\n        } else if (direction & DIRECTION_VERTICAL) {\r\n            velocity = input.overallVelocityY;\r\n        }\r\n\r\n        return this._super.attrTest.call(this, input) &&\r\n            direction & input.offsetDirection &&\r\n            input.distance > this.options.threshold &&\r\n            input.maxPointers == this.options.pointers &&\r\n            abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\r\n    },\r\n\r\n    emit: function(input) {\r\n        var direction = directionStr(input.offsetDirection);\r\n        if (direction) {\r\n            this.manager.emit(this.options.event + direction, input);\r\n        }\r\n\r\n        this.manager.emit(this.options.event, input);\r\n    }\r\n});\r\n\r\n/**\r\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\r\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\r\n * a single tap.\r\n *\r\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\r\n * multi-taps being recognized.\r\n * @constructor\r\n * @extends Recognizer\r\n */\r\nfunction TapRecognizer() {\r\n    Recognizer.apply(this, arguments);\r\n\r\n    // previous time and center,\r\n    // used for tap counting\r\n    this.pTime = false;\r\n    this.pCenter = false;\r\n\r\n    this._timer = null;\r\n    this._input = null;\r\n    this.count = 0;\r\n}\r\n\r\ninherit(TapRecognizer, Recognizer, {\r\n    /**\r\n     * @namespace\r\n     * @memberof PinchRecognizer\r\n     */\r\n    defaults: {\r\n        event: 'tap',\r\n        pointers: 1,\r\n        taps: 1,\r\n        interval: 300, // max time between the multi-tap taps\r\n        time: 250, // max time of the pointer to be down (like finger on the screen)\r\n        threshold: 9, // a minimal movement is ok, but keep it low\r\n        posThreshold: 10 // a multi-tap can be a bit off the initial position\r\n    },\r\n\r\n    getTouchAction: function() {\r\n        return [TOUCH_ACTION_MANIPULATION];\r\n    },\r\n\r\n    process: function(input) {\r\n        var options = this.options;\r\n\r\n        var validPointers = input.pointers.length === options.pointers;\r\n        var validMovement = input.distance < options.threshold;\r\n        var validTouchTime = input.deltaTime < options.time;\r\n\r\n        this.reset();\r\n\r\n        if ((input.eventType & INPUT_START) && (this.count === 0)) {\r\n            return this.failTimeout();\r\n        }\r\n\r\n        // we only allow little movement\r\n        // and we've reached an end event, so a tap is possible\r\n        if (validMovement && validTouchTime && validPointers) {\r\n            if (input.eventType != INPUT_END) {\r\n                return this.failTimeout();\r\n            }\r\n\r\n            var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\r\n            var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\r\n\r\n            this.pTime = input.timeStamp;\r\n            this.pCenter = input.center;\r\n\r\n            if (!validMultiTap || !validInterval) {\r\n                this.count = 1;\r\n            } else {\r\n                this.count += 1;\r\n            }\r\n\r\n            this._input = input;\r\n\r\n            // if tap count matches we have recognized it,\r\n            // else it has began recognizing...\r\n            var tapCount = this.count % options.taps;\r\n            if (tapCount === 0) {\r\n                // no failing requirements, immediately trigger the tap event\r\n                // or wait as long as the multitap interval to trigger\r\n                if (!this.hasRequireFailures()) {\r\n                    return STATE_RECOGNIZED;\r\n                } else {\r\n                    this._timer = setTimeoutContext(function() {\r\n                        this.state = STATE_RECOGNIZED;\r\n                        this.tryEmit();\r\n                    }, options.interval, this);\r\n                    return STATE_BEGAN;\r\n                }\r\n            }\r\n        }\r\n        return STATE_FAILED;\r\n    },\r\n\r\n    failTimeout: function() {\r\n        this._timer = setTimeoutContext(function() {\r\n            this.state = STATE_FAILED;\r\n        }, this.options.interval, this);\r\n        return STATE_FAILED;\r\n    },\r\n\r\n    reset: function() {\r\n        clearTimeout(this._timer);\r\n    },\r\n\r\n    emit: function() {\r\n        if (this.state == STATE_RECOGNIZED) {\r\n            this._input.tapCount = this.count;\r\n            this.manager.emit(this.options.event, this._input);\r\n        }\r\n    }\r\n});\r\n\r\n/**\r\n * Simple way to create a manager with a default set of recognizers.\r\n * @param {HTMLElement} element\r\n * @param {Object} [options]\r\n * @constructor\r\n */\r\nfunction Hammer(element, options) {\r\n    options = options || {};\r\n    options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\r\n    return new Manager(element, options);\r\n}\r\n\r\n/**\r\n * @const {string}\r\n */\r\nHammer.VERSION = '2.0.7';\r\n\r\n/**\r\n * default settings\r\n * @namespace\r\n */\r\nHammer.defaults = {\r\n    /**\r\n     * set if DOM events are being triggered.\r\n     * But this is slower and unused by simple implementations, so disabled by default.\r\n     * @type {Boolean}\r\n     * @default false\r\n     */\r\n    domEvents: false,\r\n\r\n    /**\r\n     * The value for the touchAction property/fallback.\r\n     * When set to `compute` it will magically set the correct value based on the added recognizers.\r\n     * @type {String}\r\n     * @default compute\r\n     */\r\n    touchAction: TOUCH_ACTION_COMPUTE,\r\n\r\n    /**\r\n     * @type {Boolean}\r\n     * @default true\r\n     */\r\n    enable: true,\r\n\r\n    /**\r\n     * EXPERIMENTAL FEATURE -- can be removed/changed\r\n     * Change the parent input target element.\r\n     * If Null, then it is being set the to main element.\r\n     * @type {Null|EventTarget}\r\n     * @default null\r\n     */\r\n    inputTarget: null,\r\n\r\n    /**\r\n     * force an input class\r\n     * @type {Null|Function}\r\n     * @default null\r\n     */\r\n    inputClass: null,\r\n\r\n    /**\r\n     * Default recognizer setup when calling `Hammer()`\r\n     * When creating a new Manager these will be skipped.\r\n     * @type {Array}\r\n     */\r\n    preset: [\r\n        // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\r\n        [RotateRecognizer, {enable: false}],\r\n        [PinchRecognizer, {enable: false}, ['rotate']],\r\n        [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\r\n        [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\r\n        [TapRecognizer],\r\n        [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\r\n        [PressRecognizer]\r\n    ],\r\n\r\n    /**\r\n     * Some CSS properties can be used to improve the working of Hammer.\r\n     * Add them to this method and they will be set when creating a new Manager.\r\n     * @namespace\r\n     */\r\n    cssProps: {\r\n        /**\r\n         * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\r\n         * @type {String}\r\n         * @default 'none'\r\n         */\r\n        userSelect: 'none',\r\n\r\n        /**\r\n         * Disable the Windows Phone grippers when pressing an element.\r\n         * @type {String}\r\n         * @default 'none'\r\n         */\r\n        touchSelect: 'none',\r\n\r\n        /**\r\n         * Disables the default callout shown when you touch and hold a touch target.\r\n         * On iOS, when you touch and hold a touch target such as a link, Safari displays\r\n         * a callout containing information about the link. This property allows you to disable that callout.\r\n         * @type {String}\r\n         * @default 'none'\r\n         */\r\n        touchCallout: 'none',\r\n\r\n        /**\r\n         * Specifies whether zooming is enabled. Used by IE10>\r\n         * @type {String}\r\n         * @default 'none'\r\n         */\r\n        contentZooming: 'none',\r\n\r\n        /**\r\n         * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\r\n         * @type {String}\r\n         * @default 'none'\r\n         */\r\n        userDrag: 'none',\r\n\r\n        /**\r\n         * Overrides the highlight color shown when the user taps a link or a JavaScript\r\n         * clickable element in iOS. This property obeys the alpha value, if specified.\r\n         * @type {String}\r\n         * @default 'rgba(0,0,0,0)'\r\n         */\r\n        tapHighlightColor: 'rgba(0,0,0,0)'\r\n    }\r\n};\r\n\r\nvar STOP = 1;\r\nvar FORCED_STOP = 2;\r\n\r\n/**\r\n * Manager\r\n * @param {HTMLElement} element\r\n * @param {Object} [options]\r\n * @constructor\r\n */\r\nfunction Manager(element, options) {\r\n    this.options = assign({}, Hammer.defaults, options || {});\r\n\r\n    this.options.inputTarget = this.options.inputTarget || element;\r\n\r\n    this.handlers = {};\r\n    this.session = {};\r\n    this.recognizers = [];\r\n    this.oldCssProps = {};\r\n\r\n    this.element = element;\r\n    this.input = createInputInstance(this);\r\n    this.touchAction = new TouchAction(this, this.options.touchAction);\r\n\r\n    toggleCssProps(this, true);\r\n\r\n    each(this.options.recognizers, function(item) {\r\n        var recognizer = this.add(new (item[0])(item[1]));\r\n        item[2] && recognizer.recognizeWith(item[2]);\r\n        item[3] && recognizer.requireFailure(item[3]);\r\n    }, this);\r\n}\r\n\r\nManager.prototype = {\r\n    /**\r\n     * set options\r\n     * @param {Object} options\r\n     * @returns {Manager}\r\n     */\r\n    set: function(options) {\r\n        assign(this.options, options);\r\n\r\n        // Options that need a little more setup\r\n        if (options.touchAction) {\r\n            this.touchAction.update();\r\n        }\r\n        if (options.inputTarget) {\r\n            // Clean up existing event listeners and reinitialize\r\n            this.input.destroy();\r\n            this.input.target = options.inputTarget;\r\n            this.input.init();\r\n        }\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * stop recognizing for this session.\r\n     * This session will be discarded, when a new [input]start event is fired.\r\n     * When forced, the recognizer cycle is stopped immediately.\r\n     * @param {Boolean} [force]\r\n     */\r\n    stop: function(force) {\r\n        this.session.stopped = force ? FORCED_STOP : STOP;\r\n    },\r\n\r\n    /**\r\n     * run the recognizers!\r\n     * called by the inputHandler function on every movement of the pointers (touches)\r\n     * it walks through all the recognizers and tries to detect the gesture that is being made\r\n     * @param {Object} inputData\r\n     */\r\n    recognize: function(inputData) {\r\n        var session = this.session;\r\n        if (session.stopped) {\r\n            return;\r\n        }\r\n\r\n        // run the touch-action polyfill\r\n        this.touchAction.preventDefaults(inputData);\r\n\r\n        var recognizer;\r\n        var recognizers = this.recognizers;\r\n\r\n        // this holds the recognizer that is being recognized.\r\n        // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\r\n        // if no recognizer is detecting a thing, it is set to `null`\r\n        var curRecognizer = session.curRecognizer;\r\n\r\n        // reset when the last recognizer is recognized\r\n        // or when we're in a new session\r\n        if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\r\n            curRecognizer = session.curRecognizer = null;\r\n        }\r\n\r\n        var i = 0;\r\n        while (i < recognizers.length) {\r\n            recognizer = recognizers[i];\r\n\r\n            // find out if we are allowed try to recognize the input for this one.\r\n            // 1.   allow if the session is NOT forced stopped (see the .stop() method)\r\n            // 2.   allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\r\n            //      that is being recognized.\r\n            // 3.   allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\r\n            //      this can be setup with the `recognizeWith()` method on the recognizer.\r\n            if (session.stopped !== FORCED_STOP && ( // 1\r\n                    !curRecognizer || recognizer == curRecognizer || // 2\r\n                    recognizer.canRecognizeWith(curRecognizer))) { // 3\r\n                recognizer.recognize(inputData);\r\n            } else {\r\n                recognizer.reset();\r\n            }\r\n\r\n            // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\r\n            // current active recognizer. but only if we don't already have an active recognizer\r\n            if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\r\n                curRecognizer = session.curRecognizer = recognizer;\r\n            }\r\n            i++;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * get a recognizer by its event name.\r\n     * @param {Recognizer|String} recognizer\r\n     * @returns {Recognizer|Null}\r\n     */\r\n    get: function(recognizer) {\r\n        if (recognizer instanceof Recognizer) {\r\n            return recognizer;\r\n        }\r\n\r\n        var recognizers = this.recognizers;\r\n        for (var i = 0; i < recognizers.length; i++) {\r\n            if (recognizers[i].options.event == recognizer) {\r\n                return recognizers[i];\r\n            }\r\n        }\r\n        return null;\r\n    },\r\n\r\n    /**\r\n     * add a recognizer to the manager\r\n     * existing recognizers with the same event name will be removed\r\n     * @param {Recognizer} recognizer\r\n     * @returns {Recognizer|Manager}\r\n     */\r\n    add: function(recognizer) {\r\n        if (invokeArrayArg(recognizer, 'add', this)) {\r\n            return this;\r\n        }\r\n\r\n        // remove existing\r\n        var existing = this.get(recognizer.options.event);\r\n        if (existing) {\r\n            this.remove(existing);\r\n        }\r\n\r\n        this.recognizers.push(recognizer);\r\n        recognizer.manager = this;\r\n\r\n        this.touchAction.update();\r\n        return recognizer;\r\n    },\r\n\r\n    /**\r\n     * remove a recognizer by name or instance\r\n     * @param {Recognizer|String} recognizer\r\n     * @returns {Manager}\r\n     */\r\n    remove: function(recognizer) {\r\n        if (invokeArrayArg(recognizer, 'remove', this)) {\r\n            return this;\r\n        }\r\n\r\n        recognizer = this.get(recognizer);\r\n\r\n        // let's make sure this recognizer exists\r\n        if (recognizer) {\r\n            var recognizers = this.recognizers;\r\n            var index = inArray(recognizers, recognizer);\r\n\r\n            if (index !== -1) {\r\n                recognizers.splice(index, 1);\r\n                this.touchAction.update();\r\n            }\r\n        }\r\n\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * bind event\r\n     * @param {String} events\r\n     * @param {Function} handler\r\n     * @returns {EventEmitter} this\r\n     */\r\n    on: function(events, handler) {\r\n        if (events === undefined) {\r\n            return;\r\n        }\r\n        if (handler === undefined) {\r\n            return;\r\n        }\r\n\r\n        var handlers = this.handlers;\r\n        each(splitStr(events), function(event) {\r\n            handlers[event] = handlers[event] || [];\r\n            handlers[event].push(handler);\r\n        });\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * unbind event, leave emit blank to remove all handlers\r\n     * @param {String} events\r\n     * @param {Function} [handler]\r\n     * @returns {EventEmitter} this\r\n     */\r\n    off: function(events, handler) {\r\n        if (events === undefined) {\r\n            return;\r\n        }\r\n\r\n        var handlers = this.handlers;\r\n        each(splitStr(events), function(event) {\r\n            if (!handler) {\r\n                delete handlers[event];\r\n            } else {\r\n                handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\r\n            }\r\n        });\r\n        return this;\r\n    },\r\n\r\n    /**\r\n     * emit event to the listeners\r\n     * @param {String} event\r\n     * @param {Object} data\r\n     */\r\n    emit: function(event, data) {\r\n        // we also want to trigger dom events\r\n        if (this.options.domEvents) {\r\n            triggerDomEvent(event, data);\r\n        }\r\n\r\n        // no handlers, so skip it all\r\n        var handlers = this.handlers[event] && this.handlers[event].slice();\r\n        if (!handlers || !handlers.length) {\r\n            return;\r\n        }\r\n\r\n        data.type = event;\r\n        data.preventDefault = function() {\r\n            data.srcEvent.preventDefault();\r\n        };\r\n\r\n        var i = 0;\r\n        while (i < handlers.length) {\r\n            handlers[i](data);\r\n            i++;\r\n        }\r\n    },\r\n\r\n    /**\r\n     * destroy the manager and unbinds all events\r\n     * it doesn't unbind dom events, that is the user own responsibility\r\n     */\r\n    destroy: function() {\r\n        this.element && toggleCssProps(this, false);\r\n\r\n        this.handlers = {};\r\n        this.session = {};\r\n        this.input.destroy();\r\n        this.element = null;\r\n    }\r\n};\r\n\r\n/**\r\n * add/remove the css properties as defined in manager.options.cssProps\r\n * @param {Manager} manager\r\n * @param {Boolean} add\r\n */\r\nfunction toggleCssProps(manager, add) {\r\n    var element = manager.element;\r\n    if (!element.style) {\r\n        return;\r\n    }\r\n    var prop;\r\n    each(manager.options.cssProps, function(value, name) {\r\n        prop = prefixed(element.style, name);\r\n        if (add) {\r\n            manager.oldCssProps[prop] = element.style[prop];\r\n            element.style[prop] = value;\r\n        } else {\r\n            element.style[prop] = manager.oldCssProps[prop] || '';\r\n        }\r\n    });\r\n    if (!add) {\r\n        manager.oldCssProps = {};\r\n    }\r\n}\r\n\r\n/**\r\n * trigger dom event\r\n * @param {String} event\r\n * @param {Object} data\r\n */\r\nfunction triggerDomEvent(event, data) {\r\n    var gestureEvent = document.createEvent('Event');\r\n    gestureEvent.initEvent(event, true, true);\r\n    gestureEvent.gesture = data;\r\n    data.target.dispatchEvent(gestureEvent);\r\n}\r\n\r\nassign(Hammer, {\r\n    INPUT_START: INPUT_START,\r\n    INPUT_MOVE: INPUT_MOVE,\r\n    INPUT_END: INPUT_END,\r\n    INPUT_CANCEL: INPUT_CANCEL,\r\n\r\n    STATE_POSSIBLE: STATE_POSSIBLE,\r\n    STATE_BEGAN: STATE_BEGAN,\r\n    STATE_CHANGED: STATE_CHANGED,\r\n    STATE_ENDED: STATE_ENDED,\r\n    STATE_RECOGNIZED: STATE_RECOGNIZED,\r\n    STATE_CANCELLED: STATE_CANCELLED,\r\n    STATE_FAILED: STATE_FAILED,\r\n\r\n    DIRECTION_NONE: DIRECTION_NONE,\r\n    DIRECTION_LEFT: DIRECTION_LEFT,\r\n    DIRECTION_RIGHT: DIRECTION_RIGHT,\r\n    DIRECTION_UP: DIRECTION_UP,\r\n    DIRECTION_DOWN: DIRECTION_DOWN,\r\n    DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\r\n    DIRECTION_VERTICAL: DIRECTION_VERTICAL,\r\n    DIRECTION_ALL: DIRECTION_ALL,\r\n\r\n    Manager: Manager,\r\n    Input: Input,\r\n    TouchAction: TouchAction,\r\n\r\n    TouchInput: TouchInput,\r\n    MouseInput: MouseInput,\r\n    PointerEventInput: PointerEventInput,\r\n    TouchMouseInput: TouchMouseInput,\r\n    SingleTouchInput: SingleTouchInput,\r\n\r\n    Recognizer: Recognizer,\r\n    AttrRecognizer: AttrRecognizer,\r\n    Tap: TapRecognizer,\r\n    Pan: PanRecognizer,\r\n    Swipe: SwipeRecognizer,\r\n    Pinch: PinchRecognizer,\r\n    Rotate: RotateRecognizer,\r\n    Press: PressRecognizer,\r\n\r\n    on: addEventListeners,\r\n    off: removeEventListeners,\r\n    each: each,\r\n    merge: merge,\r\n    extend: extend,\r\n    assign: assign,\r\n    inherit: inherit,\r\n    bindFn: bindFn,\r\n    prefixed: prefixed\r\n});\r\n\r\n// this prevents errors when Hammer is loaded in the presence of an AMD\r\n//  style loader but by script tag, not by the loader.\r\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\r\nfreeGlobal.Hammer = Hammer;\r\n\r\nif (typeof define === 'function' && define.amd) {\r\n    define(function() {\r\n        return Hammer;\r\n    });\r\n} else if (typeof module != 'undefined' && module.exports) {\r\n    module.exports = Hammer;\r\n} else {\r\n    window[exportName] = Hammer;\r\n}\r\n\r\n})(window, document, 'Hammer');","(function(factory) {\r\n    if (typeof define === 'function' && define.amd) {\r\n        define(['jquery', 'hammerjs'], factory);\r\n    } else if (typeof exports === 'object') {\r\n        factory(require('jquery'), require('hammerjs'));\r\n    } else {\r\n        factory(jQuery, Hammer);\r\n    }\r\n}(function($, Hammer) {\r\n    function hammerify(el, options) {\r\n        var $el = $(el);\r\n        if(!$el.data(\"hammer\")) {\r\n            $el.data(\"hammer\", new Hammer($el[0], options));\r\n        }\r\n    }\r\n\r\n    $.fn.hammer = function(options) {\r\n        return this.each(function() {\r\n            hammerify(this, options);\r\n        });\r\n    };\r\n\r\n    // extend the emit method to also trigger jQuery events\r\n    Hammer.Manager.prototype.emit = (function(originalEmit) {\r\n        return function(type, data) {\r\n            originalEmit.call(this, type, data);\r\n            $(this.element).trigger({\r\n                type: type,\r\n                gesture: data\r\n            });\r\n        };\r\n    })(Hammer.Manager.prototype.emit);\r\n}));\r\n","'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* SideNav */\n(function ($) {\n\n    var menuWidth = 240;\n    var sn_breakpoint = 1440;\n\n    var SideNav = function () {\n        function SideNav(element, options) {\n            var _this = this;\n\n            _classCallCheck(this, SideNav);\n\n            var menuOut = false;\n\n            var defaults = {\n                menuWidth: menuWidth,\n                edge: 'left',\n                closeOnClick: false,\n                closeOnMobileClick: false //Closed menu on item click for mobile (A24Mod)\n            };\n\n            options = $.extend(defaults, options);\n\n            this.options = options;\n\n            var $element = element;\n            this.menu_id = $('#' + $element.attr('data-activates'));\n            var mask_id = $('#' + this.menu_id.attr('id') + '> .sidenav-bg');\n\n            // let menuOut = false;\n\n            if (options.menuWidth != menuWidth) {\n                this.menu_id.css('width', options.menuWidth);\n                mask_id.css('width', options.menuWidth);\n            }\n\n            var dragTarget = $('.drag-target'); // A24Mod\n            if (dragTarget.length === 0) { // A24Mod\n                dragTarget = $('<div class=\"drag-target\"></div>'); // A24Mod\n                $('body').append(dragTarget);\n            }\n\n            if (options.edge == 'left') {\n                this.menu_id.css('transform', 'translateX(-100%)');\n                dragTarget.css({\n                    'left': 0\n                });\n            } else {\n                this.menu_id.addClass('right-aligned').css('transform', 'translateX(100%)');\n                dragTarget.css({\n                    'right': 0\n                });\n            }\n\n            if (this.menu_id.hasClass('fixed')) {\n\n                if (window.innerWidth > 992) { //A24Mod\n                    this.menu_id.css('transform', 'translateX(0)');\n                }\n\n                $(window).resize(function () {\n                    if (window.innerWidth > 992) { //A24Mod\n                        if ($('#sidenav-overlay').length) {\n                            _this.removeMenu(true);\n                        } else {\n                            _this.menu_id.css('transform', 'translateX(0%)');\n                        }\n                    } else if (menuOut === false) {\n                        if (options.edge === 'left') {\n                            _this.menu_id.css('transform', 'translateX(-100%)');\n                        } else {\n                            _this.menu_id.css('transform', 'translateX(100%)');\n                        }\n                    }\n                });\n            }\n\n            if (this.options.closeOnClick === true) {\n                this.menu_id.on(\"click\", \"a:not(.collapsible-header)\", function () {\n                    _this.removeMenu();\n                });\n            }\n\n            //Close the menu when menu item is clicked (A24Mod)\n            if (options.closeOnMobileClick === true) {\n                this.menu_id.on(\"click.itemclick\", \"a:not(.collapsible-header), .menuItemTopSelectedSingle\", function () {\n                    if ($('#sidenav-overlay').css('opacity') !== 0 && menuOut) {\n                        _this.removeMenu();\n                    }\n                });\n            }\n\n            $element.click(function (e) {\n                e.preventDefault();\n                if (menuOut === true) {\n                    menuOut = false;\n                    _this.removeMenu();\n                } else {\n                    var $body = $('body');\n\n                    if (_this.options.edge === 'left') {\n                        _this.menu_id.velocity({\n                            'translateX': [0, -1 * options.menuWidth]\n                        }, {\n                            duration: 300,\n                            queue: false,\n                            easing: 'easeOutQuad'\n                        });\n                    } else {\n                        _this.menu_id.velocity({\n                            'translateX': [0, options.menuWidth]\n                        }, {\n                            duration: 300,\n                            queue: false,\n                            easing: 'easeOutQuad'\n                        });\n                    }\n\n                    //A24 Mod as this will only close the menu when overlay is clicked\n                    //overlay.click(function () {\n                    //    _this.removeMenu();\n                    //});\n\n                    /* A24Mod Start.*/\n                    // Added below as the overlay will not be removed when menu item is clicked\n                    if ($('#sidenav-overlay').length === 0) {\n                        var overlay = $('<div id=\"sidenav-overlay\"></div>');\n                        overlay.css('opacity', 0)\n                            .click(function () {\n                                menuOut = false;\n                                _this.removeMenu();\n                                overlay.velocity({opacity: 0}, {\n                                    duration: 300, queue: false, easing: 'easeOutQuad',\n                                    complete: function () {\n                                        $(this).remove();\n                                    }\n                                });\n\n                            });\n                        $body.append(overlay);\n                        overlay.velocity({opacity: 1}, {\n                            duration: 300, queue: false, easing: 'easeOutQuad',\n                            complete: function () {\n                                menuOut = true;\n                            }\n                        });\n                    }\n                    /* A24Mod End */\n                }\n            });\n\n            // Touch Event\n            dragTarget.click(function (e) {\n                _this.removeMenu();\n            });\n\n            dragTarget.hammer({\n                prevent_default: false\n            }).bind('pan', function (e) {\n\n                if (e.gesture.pointerType == \"touch\") {\n\n                    var direction = e.gesture.direction;\n                    var x = e.gesture.center.x;\n                    var y = e.gesture.center.y;\n                    var velocityX = e.gesture.velocityX;\n\n                    // Disable Scrolling\n                    var $body = $('body');\n                    var oldWidth = $body.innerWidth();\n                    $body.css('overflow', 'hidden');\n                    $body.width(oldWidth);\n\n                    // If overlay does not exist, create one and if it is clicked, close menu\n                    if ($('#sidenav-overlay').length === 0) {\n                        var overlay = $('<div id=\"sidenav-overlay\"></div>');\n                        overlay.css('opacity', 0).click(function (e) {\n                            _this.removeMenu();\n                        });\n                        $('body').append(overlay);\n                    }\n\n                    // Keep within boundaries\n                    if (options.edge === 'left') {\n                        if (x > options.menuWidth) {\n                            x = options.menuWidth;\n                        } else if (x < 0) {\n                            x = 0;\n                        }\n                    }\n\n                    if (options.edge === 'left') {\n                        // Left Direction\n                        if (x < options.menuWidth / 2) {\n                            menuOut = false;\n                        }\n                        // Right Direction\n                        else if (x >= options.menuWidth / 2) {\n                                menuOut = true;\n                            }\n                        _this.menu_id.css('transform', 'translateX(' + (x - options.menuWidth) + 'px)');\n                    } else {\n                        // Left Direction\n                        if (x < window.innerWidth - options.menuWidth / 2) {\n                            menuOut = true;\n                        }\n                        // Right Direction\n                        else if (x >= window.innerWidth - options.menuWidth / 2) {\n                                menuOut = false;\n                            }\n                        var rightPos = x - options.menuWidth / 2;\n                        if (rightPos < 0) {\n                            rightPos = 0;\n                        }\n\n                        _this.menu_id.css('transform', 'translateX(' + rightPos + 'px)');\n                    }\n\n                    // Percentage overlay\n                    var overlayPerc;\n                    if (options.edge === 'left') {\n                        overlayPerc = x / options.menuWidth;\n                        $('#sidenav-overlay').velocity({\n                            opacity: overlayPerc\n                        }, {\n                            duration: 10,\n                            queue: false,\n                            easing: 'easeOutQuad'\n                        });\n                    } else {\n                        overlayPerc = Math.abs((x - window.innerWidth) / options.menuWidth);\n                        $('#sidenav-overlay').velocity({\n                            opacity: overlayPerc\n                        }, {\n                            duration: 10,\n                            queue: false,\n                            easing: 'easeOutQuad'\n                        });\n                    }\n                }\n            }).bind('panend', function (e) {\n\n                if (e.gesture.pointerType == \"touch\") {\n                    var velocityX = e.gesture.velocityX;\n                    var x = e.gesture.center.x;\n                    var leftPos = x - options.menuWidth;\n                    var rightPos = x - options.menuWidth / 2;\n                    if (leftPos > 0) {\n                        leftPos = 0;\n                    }\n                    if (rightPos < 0) {\n                        rightPos = 0;\n                    }\n                    //panning = false;\n\n                    if (options.edge === 'left') {\n                        // If velocityX <= 0.3 then the user is flinging the menu closed so ignore menuOut\n                        if (menuOut && velocityX <= 0.3 || velocityX < -0.5) {\n                            if (leftPos != 0) {\n                                _this.menu_id.velocity({\n                                    'translateX': [0, leftPos]\n                                }, {\n                                    duration: 300,\n                                    queue: false,\n                                    easing: 'easeOutQuad'\n                                });\n                            }\n\n                            // menu_id.css({'translateX': 0});\n                            $('#sidenav-overlay').velocity({\n                                opacity: 1\n                            }, {\n                                duration: 50,\n                                queue: false,\n                                easing: 'easeOutQuad'\n                            });\n                            // dragTarget.css({width: '50%', right: 0, left: ''});\n                            dragTarget.css({\n                                width: '10px',\n                                right: '',\n                                left: 0\n                            });\n                        } else if (!menuOut || velocityX > 0.3) {\n                            // Enable Scrolling\n                            $('body').css({\n                                overflow: '',\n                                width: ''\n                            });\n                            // Slide menu closed\n                            _this.menu_id.velocity({\n                                'translateX': [-1 * options.menuWidth - 10, leftPos]\n                            }, {\n                                duration: 200,\n                                queue: false,\n                                easing: 'easeOutQuad'\n                            });\n                            $('#sidenav-overlay').velocity({\n                                opacity: 0\n                            }, {\n                                duration: 200,\n                                queue: false,\n                                easing: 'easeOutQuad',\n                                complete: function complete() {\n                                    $(this).remove();\n                                }\n                            });\n                            // dragTarget.css({width: '50%', right: 0, left: ''});\n                            dragTarget.css({\n                                width: '10px',\n                                right: '',\n                                left: 0\n                            });\n                        }\n                    } else {\n                        if (menuOut && velocityX >= -0.3 || velocityX > 0.5) {\n\n                            _this.menu_id.velocity({\n                                'translateX': [0, rightPos]\n                            }, {\n                                duration: 300,\n                                queue: false,\n                                easing: 'easeOutQuad'\n                            });\n                            $('#sidenav-overlay').velocity({\n                                opacity: 1\n                            }, {\n                                duration: 50,\n                                queue: false,\n                                easing: 'easeOutQuad'\n                            });\n                            dragTarget.css({\n                                width: '50%',\n                                right: '',\n                                left: 0\n                            });\n                        } else if (!menuOut || velocityX < -0.3) {\n                            // Enable Scrolling\n                            $('body').css({\n                                overflow: '',\n                                width: ''\n                            });\n\n                            // Slide menu closed\n                            _this.menu_id.velocity({\n                                'translateX': [options.menuWidth + 10, rightPos]\n                            }, {\n                                duration: 200,\n                                queue: false,\n                                easing: 'easeOutQuad'\n                            });\n                            $('#sidenav-overlay').velocity({\n                                opacity: 0\n                            }, {\n                                duration: 200,\n                                queue: false,\n                                easing: 'easeOutQuad',\n                                complete: function complete() {\n                                    $(_this).remove();\n                                }\n                            });\n                            dragTarget.css({\n                                width: '10px',\n                                right: 0,\n                                left: ''\n                            });\n                        }\n                    }\n                }\n            });\n        }\n\n        _createClass(SideNav, [{\n            key: 'removeMenu',\n            value: function removeMenu(restoreMenu) {\n                var _this2 = this;\n\n                var panning = false;\n                var menuOut = false;\n\n                var leftPos = '-' + this.options.menuWidth;\n                var rightPos = window.innerWidth;\n\n                $('body').css({\n                    overflow: '',\n                    width: ''\n                });\n\n                if (this.options.edge === 'left') {\n                    this.menu_id.velocity({\n                        'translateX': '-100%'\n                    }, {\n                        duration: 200,\n                        queue: false,\n                        easing: 'easeOutCubic',\n                        complete: function complete() {\n                            if (restoreMenu === true) {\n                                _this2.menu_id.removeAttr('style');\n                                _this2.menu_id.css('width', _this2.options.menuWidth);\n                            }\n                        }\n                    });\n                } else {\n                    this.menu_id.velocity({\n                        'translateX': '100%'\n                    }, {\n                        duration: 200,\n                        queue: false,\n                        easing: 'easeOutCubic',\n                        complete: function complete() {\n                            if (restoreMenu === true) {\n                                _this2.menu_id.removeAttr('style');\n                                _this2.menu_id.css('width', _this2.options.menuWidth);\n                            }\n                        }\n                    });\n                }\n\n                $('#sidenav-overlay').velocity({\n                    opacity: 0\n                }, {\n                    duration: 200,\n                    queue: false,\n                    easing: 'easeOutQuad',\n                    complete: function complete() {\n                        $('#sidenav-overlay').remove();\n                    }\n                });\n            }\n        }, {\n            key: 'show',\n            value: function show() {\n                this.trigger('click');\n            }\n        }, {\n            key: 'hide',\n            value: function hide() {\n                $('#sidenav-overlay').trigger('click');\n            }\n        }]);\n\n        return SideNav;\n    }();\n\n    $.fn.sideNav = function (options) {\n        return this.each(function () {\n            new SideNav($(this), options);\n        });\n\n    };\n})(jQuery);\n","/* COLLAPSIBLE */\r\n\r\n(function ($) {\r\n    $.fn.collapsible = function (options) {\r\n        var defaults = {\r\n            accordion: undefined\r\n        };\r\n\r\n        options = $.extend(defaults, options);\r\n\r\n\r\n        return this.each(function () {\r\n\r\n            var $this = $(this);\r\n\r\n            var $panel_headers = $(this).find('> li > .collapsible-header');\r\n\r\n            var collapsible_type = $this.data(\"collapsible\");\r\n\r\n            // Turn off any existing event handlers\r\n            $this.off('click.collapse', '.collapsible-header');\r\n            $panel_headers.off('click.collapse');\r\n\r\n\r\n            /****************\r\n            Helper Functions\r\n            ****************/\r\n\r\n            // Accordion Open\r\n            function accordionOpen(object) {\r\n                $panel_headers = $this.find('> li > .collapsible-header');\r\n                if (object.hasClass('active')) {\r\n                    object.parent().addClass('active');\r\n                } else {\r\n                    object.parent().removeClass('active');\r\n                }\r\n                if (object.parent().hasClass('active')) {\r\n                    object.siblings('.collapsible-body').stop(true, false).slideDown({\r\n                        duration: 350,\r\n                        easing: \"easeOutQuart\",\r\n                        queue: false,\r\n                        complete: function () {\r\n                            $(this).css('height', '');\r\n                        }\r\n                    });\r\n                } else {\r\n                    object.siblings('.collapsible-body').stop(true, false).slideUp({\r\n                        duration: 350,\r\n                        easing: \"easeOutQuart\",\r\n                        queue: false,\r\n                        complete: function () {\r\n                            $(this).css('height', '');\r\n                        }\r\n                    });\r\n                }\r\n\r\n                $panel_headers.not(object).removeClass('active').parent().removeClass('active');\r\n                $panel_headers.not(object).parent().children('.collapsible-body').stop(true, false).slideUp({\r\n                    duration: 350,\r\n                    easing: \"easeOutQuart\",\r\n                    queue: false,\r\n                    complete: function () {\r\n                        $(this).css('height', '');\r\n                    }\r\n                });\r\n            }\r\n\r\n            // Expandable Open\r\n            function expandableOpen(object) {\r\n                if (object.hasClass('active')) {\r\n                    object.parent().addClass('active');\r\n                } else {\r\n                    object.parent().removeClass('active');\r\n                }\r\n                if (object.parent().hasClass('active')) {\r\n                    object.siblings('.collapsible-body').stop(true, false).slideDown({\r\n                        duration: 350,\r\n                        easing: \"easeOutQuart\",\r\n                        queue: false,\r\n                        complete: function () {\r\n                            $(this).css('height', '');\r\n                        }\r\n                    });\r\n                } else {\r\n                    object.siblings('.collapsible-body').stop(true, false).slideUp({\r\n                        duration: 350,\r\n                        easing: \"easeOutQuart\",\r\n                        queue: false,\r\n                        complete: function () {\r\n                            $(this).css('height', '');\r\n                        }\r\n                    });\r\n                }\r\n            }\r\n\r\n            /**\r\n             * Check if object is children of panel header\r\n             * @param  {Object}  object Jquery object\r\n             * @return {Boolean} true if it is children\r\n             */\r\n            function isChildrenOfPanelHeader(object) {\r\n\r\n                var panelHeader = getPanelHeader(object);\r\n\r\n                return panelHeader.length > 0;\r\n            }\r\n\r\n            /**\r\n             * Get panel header from a children element\r\n             * @param  {Object} object Jquery object\r\n             * @return {Object} panel header object\r\n             */\r\n            function getPanelHeader(object) {\r\n\r\n                return object.closest('li > .collapsible-header');\r\n            }\r\n\r\n            /*****  End Helper Functions  *****/\r\n\r\n\r\n\r\n            if (options.accordion || collapsible_type === \"accordion\" || collapsible_type === undefined) { // Handle Accordion\r\n                // Add click handler to only direct collapsible header children\r\n                $panel_headers = $this.find('> li > .collapsible-header');\r\n                $panel_headers.on('click.collapse', function (e) {\r\n                    var element = $(e.target);\r\n\r\n                    if (isChildrenOfPanelHeader(element)) {\r\n                        element = getPanelHeader(element);\r\n                    }\r\n\r\n                    element.toggleClass('active');\r\n                    accordionOpen(element);\r\n                });\r\n                // Open first active\r\n                accordionOpen($panel_headers.filter('.active').first());\r\n            } else { // Handle Expandables\r\n                $panel_headers.each(function () {\r\n                    // Add click handler to only direct collapsible header children\r\n                    $(this).on('click.collapse', function (e) {\r\n                        var element = $(e.target);\r\n                        if (isChildrenOfPanelHeader(element)) {\r\n                            element = getPanelHeader(element);\r\n                        }\r\n                        element.toggleClass('active');\r\n                        expandableOpen(element);\r\n                    });\r\n                    // Open any bodies that have the active class\r\n                    if ($(this).hasClass('active')) {\r\n                        expandableOpen($(this));\r\n                    }\r\n\r\n                });\r\n            }\r\n\r\n        });\r\n    };\r\n\r\n    $(document).ready(function () {\r\n        $('.collapsible').collapsible();\r\n    });\r\n}(jQuery));","\"use strict\";\r\n\r\n/* FORMS */\r\n(function ($) {\r\n    $(document).ready(function () {\r\n\r\n        // Text based inputs\r\n        var input_selector = [\"text\", \"password\", \"email\", \"url\", \"tel\", \"number\", \"search\", \"search-md\"].map(function (selector) {\r\n            return \"input[type=\" + selector + \"]\";\r\n        }).join(\", \") + \", textarea\";\r\n\r\n        var text_area_selector = '.materialize-textarea';\r\n\r\n        var update_text_fields = function update_text_fields($input) {\r\n\r\n            var $labelAndIcon = $input.siblings(\"label, i\");\r\n            var hasValue = $input.val().length;\r\n            var hasPlaceholder = $input.attr(\"placeholder\");\r\n            // let isValid     = $input.validity.badInput === true;\r\n            var addOrRemove = (hasValue || hasPlaceholder ? \"add\" : \"remove\") + \"Class\";\r\n\r\n            $labelAndIcon[addOrRemove](\"active\");\r\n        };\r\n\r\n        var validate_field = function validate_field($input) {\r\n\r\n            if ($input.hasClass(\"validate\")) {\r\n                var value = $input.val();\r\n                var noValue = !value.length;\r\n                var isValid = !$input[0].validity.badInput;\r\n\r\n                if (noValue && isValid) $input.removeClass(\"valid\").removeClass(\"invalid\");else {\r\n                    var valid = $input.is(\":valid\");\r\n                    var length = +$input.attr(\"length\") || 0;\r\n\r\n                    if (valid && (!length || length > value.length)) $input.removeClass(\"invalid\").addClass(\"valid\");else $input.removeClass(\"valid\").addClass(\"invalid\");\r\n                }\r\n            }\r\n        };\r\n\r\n        var textarea_auto_resize = function textarea_auto_resize() {\r\n\r\n            var $textarea = $(undefined);\r\n            if ($textarea.val().length) {\r\n                var _$hiddenDiv = $(\".hiddendiv\");\r\n                var fontFamily = $textarea.css('font-family');\r\n                var fontSize = $textarea.css('font-size');\r\n\r\n                if (fontSize) hiddenDiv.css('font-size', fontSize);\r\n                if (fontFamily) hiddenDiv.css('font-family', fontFamily);\r\n                if ($textarea.attr('wrap') === \"off\") hiddenDiv.css('overflow-wrap', \"normal\").css('white-space', \"pre\");\r\n\r\n                _$hiddenDiv.text($textarea.val() + '\\n');\r\n                var content = hiddenDiv.html().replace(/\\n/g, '<br>');\r\n                _$hiddenDiv.html(content);\r\n\r\n                // When textarea is hidden, width goes crazy.\r\n                // Approximate with half of window size\r\n                _$hiddenDiv.css('width', $textarea.is(':visible') ? $textarea.width() : $(window).width() / 2);\r\n                $textarea.css('height', _$hiddenDiv.height());\r\n            }\r\n        };\r\n\r\n        // Set active on labels and icons (DOM ready scope);\r\n        $(input_selector).each(function (index, input) {\r\n            var $this = $(input);\r\n            var $labelAndIcon = $this.siblings(\"label, i\");\r\n            update_text_fields($this);\r\n            var isValid = input.validity.badInput; // pure js \r\n            if (isValid) $labelAndIcon.addClass(\"active\");\r\n        });\r\n\r\n        // Add active when element has focus\r\n        $(document).on('focus', input_selector, function (e) {\r\n            $(e.target).siblings('label, i').addClass('active');\r\n        });\r\n\r\n        // Remove active on blur when not needed or invalid \r\n        $(document).on('blur', input_selector, function (e) {\r\n            var $this = $(e.target);\r\n            var noValue = !$this.val();\r\n            var invalid = !e.target.validity.badInput;\r\n            var noPlaceholder = $this.attr(\"placeholder\") === undefined;\r\n\r\n            if (noValue && invalid && noPlaceholder) $this.siblings('label, i').removeClass('active');\r\n\r\n            validate_field($this);\r\n        });\r\n\r\n        // Add active if form auto complete\r\n        $(document).on('change', input_selector, function (e) {\r\n            var $this = $(e.target);\r\n            update_text_fields($this);\r\n            validate_field($this);\r\n        });\r\n\r\n        // Handle HTML5 autofocus\r\n        $(\"input[autofocus]\").siblings(\"label, i\").addClass(\"active\");\r\n\r\n        // HTML form reset\r\n        $(document).on('reset', function (e) {\r\n            var $formReset = $(e.target);\r\n            if ($formReset.is('form')) {\r\n\r\n                var $formInputs = $formReset.find(input_selector);\r\n                // Reset inputs\r\n                $formInputs.removeClass(\"valid\").removeClass(\"invalid\").each(function (index, input) {\r\n                    var $this = $(input);\r\n                    var noDefaultValue = !$this.val();\r\n                    var noPlaceholder = !$this.attr(\"placeholder\");\r\n                    if (noDefaultValue && noPlaceholder) $this.siblings(\"label, i\").removeClass(\"active\");\r\n                });\r\n\r\n                // Reset select\r\n                $formReset.find('select.initialized').each(function (index, select) {\r\n                    var $select = $(select);\r\n                    var $visible_input = $select.siblings(\"input.select-dropdown\");\r\n                    var default_value = $select.children(\"[selected]\").val();\r\n\r\n                    $select.val(default_value);\r\n                    $visible_input.val(default_value);\r\n                });\r\n            }\r\n        });\r\n\r\n        // Textarea Auto Resize\r\n        if (!$('.hiddendiv').first().length) {\r\n            $hiddenDiv = $('<div class=\"hiddendiv common\"></div>');\r\n            $('body').append($hiddenDiv);\r\n        }\r\n\r\n        $(text_area_selector).each(textarea_auto_resize);\r\n        $('body').on('keyup keydown', text_area_selector, textarea_auto_resize);\r\n    });\r\n})(jQuery);","/*!\r\n * pickadate.js v3.5.6, 2015/04/20\r\n * By Amsul, http://amsul.ca\r\n * Hosted on http://amsul.github.io/pickadate.js\r\n * Licensed under MIT\r\n */\r\n\r\n(function ( factory ) {\r\n\r\n    // AMD.\r\n    if ( typeof define == 'function' && define.amd )\r\n        define( 'picker', ['jquery'], factory )\r\n\r\n    // Node.js/browserify.\r\n    else if ( typeof exports == 'object' )\r\n        module.exports = factory( require('jquery') )\r\n\r\n    // Browser globals.\r\n    else this.Picker = factory( jQuery )\r\n\r\n}(function( $ ) {\r\n\r\nvar $window = $( window )\r\nvar $document = $( document )\r\nvar $html = $( document.documentElement )\r\nvar supportsTransitions = document.documentElement.style.transition != null\r\n\r\n\r\n/**\r\n * The picker constructor that creates a blank picker.\r\n */\r\nfunction PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) {\r\n\r\n    // If there’s no element, return the picker constructor.\r\n    if ( !ELEMENT ) return PickerConstructor\r\n\r\n\r\n    var\r\n        IS_DEFAULT_THEME = false,\r\n\r\n\r\n        // The state of the picker.\r\n        STATE = {\r\n            id: ELEMENT.id || 'P' + Math.abs( ~~(Math.random() * new Date()) )\r\n        },\r\n\r\n\r\n        // Merge the defaults and options passed.\r\n        SETTINGS = COMPONENT ? $.extend( true, {}, COMPONENT.defaults, OPTIONS ) : OPTIONS || {},\r\n\r\n\r\n        // Merge the default classes with the settings classes.\r\n        CLASSES = $.extend( {}, PickerConstructor.klasses(), SETTINGS.klass ),\r\n\r\n\r\n        // The element node wrapper into a jQuery object.\r\n        $ELEMENT = $( ELEMENT ),\r\n\r\n\r\n        // Pseudo picker constructor.\r\n        PickerInstance = function() {\r\n            return this.start()\r\n        },\r\n\r\n\r\n        // The picker prototype.\r\n        P = PickerInstance.prototype = {\r\n\r\n            constructor: PickerInstance,\r\n\r\n            $node: $ELEMENT,\r\n\r\n\r\n            /**\r\n             * Initialize everything\r\n             */\r\n            start: function() {\r\n\r\n                // If it’s already started, do nothing.\r\n                if ( STATE && STATE.start ) return P\r\n\r\n\r\n                // Update the picker states.\r\n                STATE.methods = {}\r\n                STATE.start = true\r\n                STATE.open = false\r\n                STATE.type = ELEMENT.type\r\n\r\n\r\n                // Confirm focus state, convert into text input to remove UA stylings,\r\n                // and set as readonly to prevent keyboard popup.\r\n                ELEMENT.autofocus = ELEMENT == getActiveElement()\r\n                ELEMENT.readOnly = !SETTINGS.editable\r\n                ELEMENT.id = ELEMENT.id || STATE.id\r\n                if ( ELEMENT.type != 'text' ) {\r\n                    ELEMENT.type = 'text'\r\n                }\r\n\r\n\r\n                // Create a new picker component with the settings.\r\n                P.component = new COMPONENT(P, SETTINGS)\r\n\r\n\r\n                // Create the picker root and then prepare it.\r\n                P.$root = $( '<div class=\"' + CLASSES.picker + '\" id=\"' + ELEMENT.id + '_root\" />' )\r\n                prepareElementRoot()\r\n\r\n\r\n                // Create the picker holder and then prepare it.\r\n                P.$holder = $( createWrappedComponent() ).appendTo( P.$root )\r\n                prepareElementHolder()\r\n\r\n\r\n                // If there’s a format for the hidden input element, create the element.\r\n                if ( SETTINGS.formatSubmit ) {\r\n                    prepareElementHidden()\r\n                }\r\n\r\n\r\n                // Prepare the input element.\r\n                prepareElement()\r\n\r\n\r\n                // Insert the hidden input as specified in the settings.\r\n                if ( SETTINGS.containerHidden ) $( SETTINGS.containerHidden ).append( P._hidden )\r\n                else $ELEMENT.after( P._hidden )\r\n\r\n\r\n                // Insert the root as specified in the settings.\r\n                if ( SETTINGS.container ) $( SETTINGS.container ).append( P.$root )\r\n                else $ELEMENT.after( P.$root )\r\n\r\n\r\n                // Bind the default component and settings events.\r\n                P.on({\r\n                    start: P.component.onStart,\r\n                    render: P.component.onRender,\r\n                    stop: P.component.onStop,\r\n                    open: P.component.onOpen,\r\n                    close: P.component.onClose,\r\n                    set: P.component.onSet\r\n                }).on({\r\n                    start: SETTINGS.onStart,\r\n                    render: SETTINGS.onRender,\r\n                    stop: SETTINGS.onStop,\r\n                    open: SETTINGS.onOpen,\r\n                    close: SETTINGS.onClose,\r\n                    set: SETTINGS.onSet\r\n                })\r\n\r\n\r\n                // Once we’re all set, check the theme in use.\r\n                IS_DEFAULT_THEME = isUsingDefaultTheme( P.$holder[0] )\r\n\r\n\r\n                // If the element has autofocus, open the picker.\r\n                if ( ELEMENT.autofocus ) {\r\n                    P.open()\r\n                }\r\n\r\n\r\n                // Trigger queued the “start” and “render” events.\r\n                return P.trigger( 'start' ).trigger( 'render' )\r\n            }, //start\r\n\r\n\r\n            /**\r\n             * Render a new picker\r\n             */\r\n            render: function( entireComponent ) {\r\n\r\n                // Insert a new component holder in the root or box.\r\n                if ( entireComponent ) {\r\n                    P.$holder = $( createWrappedComponent() )\r\n                    prepareElementHolder()\r\n                    P.$root.html( P.$holder )\r\n                }\r\n                else P.$root.find( '.' + CLASSES.box ).html( P.component.nodes( STATE.open ) )\r\n\r\n                // Trigger the queued “render” events.\r\n                return P.trigger( 'render' )\r\n            }, //render\r\n\r\n\r\n            /**\r\n             * Destroy everything\r\n             */\r\n            stop: function() {\r\n\r\n                // If it’s already stopped, do nothing.\r\n                if ( !STATE.start ) return P\r\n\r\n                // Then close the picker.\r\n                P.close()\r\n\r\n                // Remove the hidden field.\r\n                if ( P._hidden ) {\r\n                    P._hidden.parentNode.removeChild( P._hidden )\r\n                }\r\n\r\n                // Remove the root.\r\n                P.$root.remove()\r\n\r\n                // Remove the input class, remove the stored data, and unbind\r\n                // the events (after a tick for IE - see `P.close`).\r\n                $ELEMENT.removeClass( CLASSES.input ).removeData( NAME )\r\n                setTimeout( function() {\r\n                    $ELEMENT.off( '.' + STATE.id )\r\n                }, 0)\r\n\r\n                // Restore the element state\r\n                ELEMENT.type = STATE.type\r\n                ELEMENT.readOnly = false\r\n\r\n                // Trigger the queued “stop” events.\r\n                P.trigger( 'stop' )\r\n\r\n                // Reset the picker states.\r\n                STATE.methods = {}\r\n                STATE.start = false\r\n\r\n                return P\r\n            }, //stop\r\n\r\n\r\n            /**\r\n             * Open up the picker\r\n             */\r\n            open: function( dontGiveFocus ) {\r\n\r\n                // If it’s already open, do nothing.\r\n                if ( STATE.open ) return P\r\n\r\n                // Add the “active” class.\r\n                $ELEMENT.addClass( CLASSES.active )\r\n                aria( ELEMENT, 'expanded', true )\r\n\r\n                // * A Firefox bug, when `html` has `overflow:hidden`, results in\r\n                //   killing transitions :(. So add the “opened” state on the next tick.\r\n                //   Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=625289\r\n                setTimeout( function() {\r\n\r\n                    // Add the “opened” class to the picker root.\r\n                    P.$root.addClass( CLASSES.opened )\r\n                    aria( P.$root[0], 'hidden', false )\r\n\r\n                }, 0 )\r\n\r\n                // If we have to give focus, bind the element and doc events.\r\n                if ( dontGiveFocus !== false ) {\r\n\r\n                    // Set it as open.\r\n                    STATE.open = true\r\n\r\n                    // Prevent the page from scrolling.\r\n                    if ( IS_DEFAULT_THEME ) {\r\n                        $html.\r\n                            css( 'overflow', 'hidden' ).\r\n                            css( 'padding-right', '+=' + getScrollbarWidth() )\r\n                    }\r\n\r\n                    // Pass focus to the root element’s jQuery object.\r\n                    focusPickerOnceOpened()\r\n\r\n                    // Bind the document events.\r\n                    $document.on( 'click.' + STATE.id + ' focusin.' + STATE.id, function( event ) {\r\n\r\n                        var target = event.target\r\n\r\n                        // If the target of the event is not the element, close the picker picker.\r\n                        // * Don’t worry about clicks or focusins on the root because those don’t bubble up.\r\n                        //   Also, for Firefox, a click on an `option` element bubbles up directly\r\n                        //   to the doc. So make sure the target wasn't the doc.\r\n                        // * In Firefox stopPropagation() doesn’t prevent right-click events from bubbling,\r\n                        //   which causes the picker to unexpectedly close when right-clicking it. So make\r\n                        //   sure the event wasn’t a right-click.\r\n                        if ( target != ELEMENT && target != document && event.which != 3 ) {\r\n\r\n                            // If the target was the holder that covers the screen,\r\n                            // keep the element focused to maintain tabindex.\r\n                            P.close( target === P.$holder[0] )\r\n                        }\r\n\r\n                    }).on( 'keydown.' + STATE.id, function( event ) {\r\n\r\n                        var\r\n                            // Get the keycode.\r\n                            keycode = event.keyCode,\r\n\r\n                            // Translate that to a selection change.\r\n                            keycodeToMove = P.component.key[ keycode ],\r\n\r\n                            // Grab the target.\r\n                            target = event.target\r\n\r\n\r\n                        // On escape, close the picker and give focus.\r\n                        if ( keycode == 27 ) {\r\n                            P.close( true )\r\n                        }\r\n\r\n\r\n                        // Check if there is a key movement or “enter” keypress on the element.\r\n                        else if ( target == P.$holder[0] && ( keycodeToMove || keycode == 13 ) ) {\r\n\r\n                            // Prevent the default action to stop page movement.\r\n                            event.preventDefault()\r\n\r\n                            // Trigger the key movement action.\r\n                            if ( keycodeToMove ) {\r\n                                PickerConstructor._.trigger( P.component.key.go, P, [ PickerConstructor._.trigger( keycodeToMove ) ] )\r\n                            }\r\n\r\n                            // On “enter”, if the highlighted item isn’t disabled, set the value and close.\r\n                            else if ( !P.$root.find( '.' + CLASSES.highlighted ).hasClass( CLASSES.disabled ) ) {\r\n                                P.set( 'select', P.component.item.highlight )\r\n                                if ( SETTINGS.closeOnSelect ) {\r\n                                    P.close( true )\r\n                                }\r\n                            }\r\n                        }\r\n\r\n\r\n                        // If the target is within the root and “enter” is pressed,\r\n                        // prevent the default action and trigger a click on the target instead.\r\n                        else if ( $.contains( P.$root[0], target ) && keycode == 13 ) {\r\n                            event.preventDefault()\r\n                            target.click()\r\n                        }\r\n                    })\r\n                }\r\n\r\n                // Trigger the queued “open” events.\r\n                return P.trigger( 'open' )\r\n            }, //open\r\n\r\n\r\n            /**\r\n             * Close the picker\r\n             */\r\n            close: function( giveFocus ) {\r\n\r\n                // If we need to give focus, do it before changing states.\r\n                if ( giveFocus ) {\r\n                    if ( SETTINGS.editable ) {\r\n                        ELEMENT.focus()\r\n                    }\r\n                    else {\r\n                        // ....ah yes! It would’ve been incomplete without a crazy workaround for IE :|\r\n                        // The focus is triggered *after* the close has completed - causing it\r\n                        // to open again. So unbind and rebind the event at the next tick.\r\n                        P.$holder.off( 'focus.toOpen' ).focus()\r\n                        setTimeout( function() {\r\n                            P.$holder.on( 'focus.toOpen', handleFocusToOpenEvent )\r\n                        }, 0 )\r\n                    }\r\n                }\r\n\r\n                // Remove the “active” class.\r\n                $ELEMENT.removeClass( CLASSES.active )\r\n                aria( ELEMENT, 'expanded', false )\r\n\r\n                // * A Firefox bug, when `html` has `overflow:hidden`, results in\r\n                //   killing transitions :(. So remove the “opened” state on the next tick.\r\n                //   Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=625289\r\n                setTimeout( function() {\r\n\r\n                    // Remove the “opened” and “focused” class from the picker root.\r\n                    P.$root.removeClass( CLASSES.opened + ' ' + CLASSES.focused )\r\n                    aria( P.$root[0], 'hidden', true )\r\n\r\n                }, 0 )\r\n\r\n                // If it’s already closed, do nothing more.\r\n                if ( !STATE.open ) return P\r\n\r\n                // Set it as closed.\r\n                STATE.open = false\r\n\r\n                // Allow the page to scroll.\r\n                if ( IS_DEFAULT_THEME ) {\r\n                    $html.\r\n                        css( 'overflow', '' ).\r\n                        css( 'padding-right', '-=' + getScrollbarWidth() )\r\n                }\r\n\r\n                // Unbind the document events.\r\n                $document.off( '.' + STATE.id )\r\n\r\n                // Trigger the queued “close” events.\r\n                return P.trigger( 'close' )\r\n            }, //close\r\n\r\n\r\n            /**\r\n             * Clear the values\r\n             */\r\n            clear: function( options ) {\r\n                return P.set( 'clear', null, options )\r\n            }, //clear\r\n\r\n\r\n            /**\r\n             * Set something\r\n             */\r\n            set: function( thing, value, options ) {\r\n\r\n                var thingItem, thingValue,\r\n                    thingIsObject = $.isPlainObject( thing ),\r\n                    thingObject = thingIsObject ? thing : {}\r\n\r\n                // Make sure we have usable options.\r\n                options = thingIsObject && $.isPlainObject( value ) ? value : options || {}\r\n\r\n                if ( thing ) {\r\n\r\n                    // If the thing isn’t an object, make it one.\r\n                    if ( !thingIsObject ) {\r\n                        thingObject[ thing ] = value\r\n                    }\r\n\r\n                    // Go through the things of items to set.\r\n                    for ( thingItem in thingObject ) {\r\n\r\n                        // Grab the value of the thing.\r\n                        thingValue = thingObject[ thingItem ]\r\n\r\n                        // First, if the item exists and there’s a value, set it.\r\n                        if ( thingItem in P.component.item ) {\r\n                            if ( thingValue === undefined ) thingValue = null\r\n                            P.component.set( thingItem, thingValue, options )\r\n                        }\r\n\r\n                        // Then, check to update the element value and broadcast a change.\r\n                        if ( thingItem == 'select' || thingItem == 'clear' ) {\r\n                            $ELEMENT.\r\n                                val( thingItem == 'clear' ? '' : P.get( thingItem, SETTINGS.format ) ).\r\n                                trigger( 'change' )\r\n                        }\r\n                    }\r\n\r\n                    // Render a new picker.\r\n                    P.render()\r\n                }\r\n\r\n                // When the method isn’t muted, trigger queued “set” events and pass the `thingObject`.\r\n                return options.muted ? P : P.trigger( 'set', thingObject )\r\n            }, //set\r\n\r\n\r\n            /**\r\n             * Get something\r\n             */\r\n            get: function( thing, format ) {\r\n\r\n                // Make sure there’s something to get.\r\n                thing = thing || 'value'\r\n\r\n                // If a picker state exists, return that.\r\n                if ( STATE[ thing ] != null ) {\r\n                    return STATE[ thing ]\r\n                }\r\n\r\n                // Return the submission value, if that.\r\n                if ( thing == 'valueSubmit' ) {\r\n                    if ( P._hidden ) {\r\n                        return P._hidden.value\r\n                    }\r\n                    thing = 'value'\r\n                }\r\n\r\n                // Return the value, if that.\r\n                if ( thing == 'value' ) {\r\n                    return ELEMENT.value\r\n                }\r\n\r\n                // Check if a component item exists, return that.\r\n                if ( thing in P.component.item ) {\r\n                    if ( typeof format == 'string' ) {\r\n                        var thingValue = P.component.get( thing )\r\n                        return thingValue ?\r\n                            PickerConstructor._.trigger(\r\n                                P.component.formats.toString,\r\n                                P.component,\r\n                                [ format, thingValue ]\r\n                            ) : ''\r\n                    }\r\n                    return P.component.get( thing )\r\n                }\r\n            }, //get\r\n\r\n\r\n\r\n            /**\r\n             * Bind events on the things.\r\n             */\r\n            on: function( thing, method, internal ) {\r\n\r\n                var thingName, thingMethod,\r\n                    thingIsObject = $.isPlainObject( thing ),\r\n                    thingObject = thingIsObject ? thing : {}\r\n\r\n                if ( thing ) {\r\n\r\n                    // If the thing isn’t an object, make it one.\r\n                    if ( !thingIsObject ) {\r\n                        thingObject[ thing ] = method\r\n                    }\r\n\r\n                    // Go through the things to bind to.\r\n                    for ( thingName in thingObject ) {\r\n\r\n                        // Grab the method of the thing.\r\n                        thingMethod = thingObject[ thingName ]\r\n\r\n                        // If it was an internal binding, prefix it.\r\n                        if ( internal ) {\r\n                            thingName = '_' + thingName\r\n                        }\r\n\r\n                        // Make sure the thing methods collection exists.\r\n                        STATE.methods[ thingName ] = STATE.methods[ thingName ] || []\r\n\r\n                        // Add the method to the relative method collection.\r\n                        STATE.methods[ thingName ].push( thingMethod )\r\n                    }\r\n                }\r\n\r\n                return P\r\n            }, //on\r\n\r\n\r\n\r\n            /**\r\n             * Unbind events on the things.\r\n             */\r\n            off: function() {\r\n                var i, thingName,\r\n                    names = arguments;\r\n                for ( i = 0, namesCount = names.length; i < namesCount; i += 1 ) {\r\n                    thingName = names[i]\r\n                    if ( thingName in STATE.methods ) {\r\n                        delete STATE.methods[thingName]\r\n                    }\r\n                }\r\n                return P\r\n            },\r\n\r\n\r\n            /**\r\n             * Fire off method events.\r\n             */\r\n            trigger: function( name, data ) {\r\n                var _trigger = function( name ) {\r\n                    var methodList = STATE.methods[ name ]\r\n                    if ( methodList ) {\r\n                        methodList.map( function( method ) {\r\n                            PickerConstructor._.trigger( method, P, [ data ] )\r\n                        })\r\n                    }\r\n                }\r\n                _trigger( '_' + name )\r\n                _trigger( name )\r\n                return P\r\n            } //trigger\r\n        } //PickerInstance.prototype\r\n\r\n\r\n    /**\r\n     * Wrap the picker holder components together.\r\n     */\r\n    function createWrappedComponent() {\r\n\r\n        // Create a picker wrapper holder\r\n        return PickerConstructor._.node( 'div',\r\n\r\n            // Create a picker wrapper node\r\n            PickerConstructor._.node( 'div',\r\n\r\n                // Create a picker frame\r\n                PickerConstructor._.node( 'div',\r\n\r\n                    // Create a picker box node\r\n                    PickerConstructor._.node( 'div',\r\n\r\n                        // Create the components nodes.\r\n                        P.component.nodes( STATE.open ),\r\n\r\n                        // The picker box class\r\n                        CLASSES.box\r\n                    ),\r\n\r\n                    // Picker wrap class\r\n                    CLASSES.wrap\r\n                ),\r\n\r\n                // Picker frame class\r\n                CLASSES.frame\r\n            ),\r\n\r\n            // Picker holder class\r\n            CLASSES.holder,\r\n\r\n            'tabindex=\"-1\"'\r\n        ) //endreturn\r\n    } //createWrappedComponent\r\n\r\n\r\n\r\n    /**\r\n     * Prepare the input element with all bindings.\r\n     */\r\n    function prepareElement() {\r\n\r\n        $ELEMENT.\r\n\r\n            // Store the picker data by component name.\r\n            data(NAME, P).\r\n\r\n            // Add the “input” class name.\r\n            addClass(CLASSES.input).\r\n\r\n            // If there’s a `data-value`, update the value of the element.\r\n            val( $ELEMENT.data('value') ?\r\n                P.get('select', SETTINGS.format) :\r\n                ELEMENT.value\r\n            )\r\n\r\n\r\n        // Only bind keydown events if the element isn’t editable.\r\n        if ( !SETTINGS.editable ) {\r\n\r\n            $ELEMENT.\r\n\r\n                // On focus/click, open the picker.\r\n                on( 'focus.' + STATE.id + ' click.' + STATE.id, function(event) {\r\n                    event.preventDefault()\r\n                    P.open()\r\n                }).\r\n\r\n                // Handle keyboard event based on the picker being opened or not.\r\n                on( 'keydown.' + STATE.id, handleKeydownEvent )\r\n        }\r\n\r\n\r\n        // Update the aria attributes.\r\n        aria(ELEMENT, {\r\n            haspopup: true,\r\n            expanded: false,\r\n            readonly: false,\r\n            owns: ELEMENT.id + '_root'\r\n        })\r\n    }\r\n\r\n\r\n    /**\r\n     * Prepare the root picker element with all bindings.\r\n     */\r\n    function prepareElementRoot() {\r\n        aria( P.$root[0], 'hidden', true )\r\n    }\r\n\r\n\r\n     /**\r\n      * Prepare the holder picker element with all bindings.\r\n      */\r\n    function prepareElementHolder() {\r\n\r\n        P.$holder.\r\n\r\n            on({\r\n\r\n                // For iOS8.\r\n                keydown: handleKeydownEvent,\r\n\r\n                'focus.toOpen': handleFocusToOpenEvent,\r\n\r\n                blur: function() {\r\n                    // Remove the “target” class.\r\n                    $ELEMENT.removeClass( CLASSES.target )\r\n                },\r\n\r\n                // When something within the holder is focused, stop from bubbling\r\n                // to the doc and remove the “focused” state from the root.\r\n                focusin: function( event ) {\r\n                    P.$root.removeClass( CLASSES.focused )\r\n                    event.stopPropagation()\r\n                },\r\n\r\n                // When something within the holder is clicked, stop it\r\n                // from bubbling to the doc.\r\n                'mousedown click': function( event ) {\r\n\r\n                    var target = event.target\r\n\r\n                    // Make sure the target isn’t the root holder so it can bubble up.\r\n                    if ( target != P.$holder[0] ) {\r\n\r\n                        event.stopPropagation()\r\n\r\n                        // * For mousedown events, cancel the default action in order to\r\n                        //   prevent cases where focus is shifted onto external elements\r\n                        //   when using things like jQuery mobile or MagnificPopup (ref: #249 & #120).\r\n                        //   Also, for Firefox, don’t prevent action on the `option` element.\r\n                        if ( event.type == 'mousedown' && !$( target ).is( 'input, select, textarea, button, option' )) {\r\n\r\n                            event.preventDefault()\r\n\r\n                            // Re-focus onto the holder so that users can click away\r\n                            // from elements focused within the picker.\r\n                            P.$holder[0].focus()\r\n                        }\r\n                    }\r\n                }\r\n\r\n            }).\r\n\r\n            // If there’s a click on an actionable element, carry out the actions.\r\n            on( 'click', '[data-pick], [data-nav], [data-clear], [data-close]', function() {\r\n\r\n                var $target = $( this ),\r\n                    targetData = $target.data(),\r\n                    targetDisabled = $target.hasClass( CLASSES.navDisabled ) || $target.hasClass( CLASSES.disabled ),\r\n\r\n                    // * For IE, non-focusable elements can be active elements as well\r\n                    //   (http://stackoverflow.com/a/2684561).\r\n                    activeElement = getActiveElement()\r\n                    activeElement = activeElement && ( activeElement.type || activeElement.href )\r\n\r\n                // If it’s disabled or nothing inside is actively focused, re-focus the element.\r\n                if ( targetDisabled || activeElement && !$.contains( P.$root[0], activeElement ) ) {\r\n                    P.$holder[0].focus()\r\n                }\r\n\r\n                // If something is superficially changed, update the `highlight` based on the `nav`.\r\n                if ( !targetDisabled && targetData.nav ) {\r\n                    P.set( 'highlight', P.component.item.highlight, { nav: targetData.nav } )\r\n                }\r\n\r\n                // If something is picked, set `select` then close with focus.\r\n                else if ( !targetDisabled && 'pick' in targetData ) {\r\n                    P.set( 'select', targetData.pick )\r\n                    if ( SETTINGS.closeOnSelect ) {\r\n                        P.close( true )\r\n                    }\r\n                }\r\n\r\n                // If a “clear” button is pressed, empty the values and close with focus.\r\n                else if ( targetData.clear ) {\r\n                    P.clear()\r\n                    if ( SETTINGS.closeOnClear ) {\r\n                        P.close( true )\r\n                    }\r\n                }\r\n\r\n                else if ( targetData.close ) {\r\n                    P.close( true )\r\n                }\r\n\r\n            }) //P.$holder\r\n\r\n    }\r\n\r\n\r\n     /**\r\n      * Prepare the hidden input element along with all bindings.\r\n      */\r\n    function prepareElementHidden() {\r\n\r\n        var name\r\n\r\n        if ( SETTINGS.hiddenName === true ) {\r\n            name = ELEMENT.name\r\n            ELEMENT.name = ''\r\n        }\r\n        else {\r\n            name = [\r\n                typeof SETTINGS.hiddenPrefix == 'string' ? SETTINGS.hiddenPrefix : '',\r\n                typeof SETTINGS.hiddenSuffix == 'string' ? SETTINGS.hiddenSuffix : '_submit'\r\n            ]\r\n            name = name[0] + ELEMENT.name + name[1]\r\n        }\r\n\r\n        P._hidden = $(\r\n            '<input ' +\r\n            'type=hidden ' +\r\n\r\n            // Create the name using the original input’s with a prefix and suffix.\r\n            'name=\"' + name + '\"' +\r\n\r\n            // If the element has a value, set the hidden value as well.\r\n            (\r\n                $ELEMENT.data('value') || ELEMENT.value ?\r\n                    ' value=\"' + P.get('select', SETTINGS.formatSubmit) + '\"' :\r\n                    ''\r\n            ) +\r\n            '>'\r\n        )[0]\r\n\r\n        $ELEMENT.\r\n\r\n            // If the value changes, update the hidden input with the correct format.\r\n            on('change.' + STATE.id, function() {\r\n                P._hidden.value = ELEMENT.value ?\r\n                    P.get('select', SETTINGS.formatSubmit) :\r\n                    ''\r\n            })\r\n    }\r\n\r\n\r\n    // Wait for transitions to end before focusing the holder. Otherwise, while\r\n    // using the `container` option, the view jumps to the container.\r\n    function focusPickerOnceOpened() {\r\n\r\n        if (IS_DEFAULT_THEME && supportsTransitions) {\r\n            P.$holder.find('.' + CLASSES.frame).one('transitionend', function() {\r\n                P.$holder[0].focus()\r\n            })\r\n        }\r\n        else {\r\n            P.$holder[0].focus()\r\n        }\r\n    }\r\n\r\n\r\n    function handleFocusToOpenEvent(event) {\r\n\r\n        // Stop the event from propagating to the doc.\r\n        event.stopPropagation()\r\n\r\n        // Add the “target” class.\r\n        $ELEMENT.addClass( CLASSES.target )\r\n\r\n        // Add the “focused” class to the root.\r\n        P.$root.addClass( CLASSES.focused )\r\n\r\n        // And then finally open the picker.\r\n        P.open()\r\n    }\r\n\r\n\r\n    // For iOS8.\r\n    function handleKeydownEvent( event ) {\r\n\r\n        var keycode = event.keyCode,\r\n\r\n            // Check if one of the delete keys was pressed.\r\n            isKeycodeDelete = /^(8|46)$/.test(keycode)\r\n\r\n        // For some reason IE clears the input value on “escape”.\r\n        if ( keycode == 27 ) {\r\n            P.close( true )\r\n            return false\r\n        }\r\n\r\n        // Check if `space` or `delete` was pressed or the picker is closed with a key movement.\r\n        if ( keycode == 32 || isKeycodeDelete || !STATE.open && P.component.key[keycode] ) {\r\n\r\n            // Prevent it from moving the page and bubbling to doc.\r\n            event.preventDefault()\r\n            event.stopPropagation()\r\n\r\n            // If `delete` was pressed, clear the values and close the picker.\r\n            // Otherwise open the picker.\r\n            if ( isKeycodeDelete ) { P.clear().close() }\r\n            else { P.open() }\r\n        }\r\n    }\r\n\r\n\r\n    // Return a new picker instance.\r\n    return new PickerInstance()\r\n} //PickerConstructor\r\n\r\n\r\n\r\n/**\r\n * The default classes and prefix to use for the HTML classes.\r\n */\r\nPickerConstructor.klasses = function( prefix ) {\r\n    prefix = prefix || 'picker'\r\n    return {\r\n\r\n        picker: prefix,\r\n        opened: prefix + '--opened',\r\n        focused: prefix + '--focused',\r\n\r\n        input: prefix + '__input',\r\n        active: prefix + '__input--active',\r\n        target: prefix + '__input--target',\r\n\r\n        holder: prefix + '__holder',\r\n\r\n        frame: prefix + '__frame',\r\n        wrap: prefix + '__wrap',\r\n\r\n        box: prefix + '__box'\r\n    }\r\n} //PickerConstructor.klasses\r\n\r\n\r\n\r\n/**\r\n * Check if the default theme is being used.\r\n */\r\nfunction isUsingDefaultTheme( element ) {\r\n\r\n    var theme,\r\n        prop = 'position'\r\n\r\n    // For IE.\r\n    if ( element.currentStyle ) {\r\n        theme = element.currentStyle[prop]\r\n    }\r\n\r\n    // For normal browsers.\r\n    else if ( window.getComputedStyle ) {\r\n        theme = getComputedStyle( element )[prop]\r\n    }\r\n\r\n    return theme == 'fixed'\r\n}\r\n\r\n\r\n\r\n/**\r\n * Get the width of the browser’s scrollbar.\r\n * Taken from: https://github.com/VodkaBears/Remodal/blob/master/src/jquery.remodal.js\r\n */\r\nfunction getScrollbarWidth() {\r\n\r\n    if ( $html.height() <= $window.height() ) {\r\n        return 0\r\n    }\r\n\r\n    var $outer = $( '<div style=\"visibility:hidden;width:100px\" />' ).\r\n        appendTo( 'body' )\r\n\r\n    // Get the width without scrollbars.\r\n    var widthWithoutScroll = $outer[0].offsetWidth\r\n\r\n    // Force adding scrollbars.\r\n    $outer.css( 'overflow', 'scroll' )\r\n\r\n    // Add the inner div.\r\n    var $inner = $( '<div style=\"width:100%\" />' ).appendTo( $outer )\r\n\r\n    // Get the width with scrollbars.\r\n    var widthWithScroll = $inner[0].offsetWidth\r\n\r\n    // Remove the divs.\r\n    $outer.remove()\r\n\r\n    // Return the difference between the widths.\r\n    return widthWithoutScroll - widthWithScroll\r\n}\r\n\r\n\r\n\r\n/**\r\n * PickerConstructor helper methods.\r\n */\r\nPickerConstructor._ = {\r\n\r\n    /**\r\n     * Create a group of nodes. Expects:\r\n     * `\r\n        {\r\n            min:    {Integer},\r\n            max:    {Integer},\r\n            i:      {Integer},\r\n            node:   {String},\r\n            item:   {Function}\r\n        }\r\n     * `\r\n     */\r\n    group: function( groupObject ) {\r\n\r\n        var\r\n            // Scope for the looped object\r\n            loopObjectScope,\r\n\r\n            // Create the nodes list\r\n            nodesList = '',\r\n\r\n            // The counter starts from the `min`\r\n            counter = PickerConstructor._.trigger( groupObject.min, groupObject )\r\n\r\n\r\n        // Loop from the `min` to `max`, incrementing by `i`\r\n        for ( ; counter <= PickerConstructor._.trigger( groupObject.max, groupObject, [ counter ] ); counter += groupObject.i ) {\r\n\r\n            // Trigger the `item` function within scope of the object\r\n            loopObjectScope = PickerConstructor._.trigger( groupObject.item, groupObject, [ counter ] )\r\n\r\n            // Splice the subgroup and create nodes out of the sub nodes\r\n            nodesList += PickerConstructor._.node(\r\n                groupObject.node,\r\n                loopObjectScope[ 0 ],   // the node\r\n                loopObjectScope[ 1 ],   // the classes\r\n                loopObjectScope[ 2 ]    // the attributes\r\n            )\r\n        }\r\n\r\n        // Return the list of nodes\r\n        return nodesList\r\n    }, //group\r\n\r\n\r\n    /**\r\n     * Create a dom node string\r\n     */\r\n    node: function( wrapper, item, klass, attribute ) {\r\n\r\n        // If the item is false-y, just return an empty string\r\n        if ( !item ) return ''\r\n\r\n        // If the item is an array, do a join\r\n        item = $.isArray( item ) ? item.join( '' ) : item\r\n\r\n        // Check for the class\r\n        klass = klass ? ' class=\"' + klass + '\"' : ''\r\n\r\n        // Check for any attributes\r\n        attribute = attribute ? ' ' + attribute : ''\r\n\r\n        // Return the wrapped item\r\n        return '<' + wrapper + klass + attribute + '>' + item + '</' + wrapper + '>'\r\n    }, //node\r\n\r\n\r\n    /**\r\n     * Lead numbers below 10 with a zero.\r\n     */\r\n    lead: function( number ) {\r\n        return ( number < 10 ? '0': '' ) + number\r\n    },\r\n\r\n\r\n    /**\r\n     * Trigger a function otherwise return the value.\r\n     */\r\n    trigger: function( callback, scope, args ) {\r\n        return typeof callback == 'function' ? callback.apply( scope, args || [] ) : callback\r\n    },\r\n\r\n\r\n    /**\r\n     * If the second character is a digit, length is 2 otherwise 1.\r\n     */\r\n    digits: function( string ) {\r\n        return ( /\\d/ ).test( string[ 1 ] ) ? 2 : 1\r\n    },\r\n\r\n\r\n    /**\r\n     * Tell if something is a date object.\r\n     */\r\n    isDate: function( value ) {\r\n        return {}.toString.call( value ).indexOf( 'Date' ) > -1 && this.isInteger( value.getDate() )\r\n    },\r\n\r\n\r\n    /**\r\n     * Tell if something is an integer.\r\n     */\r\n    isInteger: function( value ) {\r\n        return {}.toString.call( value ).indexOf( 'Number' ) > -1 && value % 1 === 0\r\n    },\r\n\r\n\r\n    /**\r\n     * Create ARIA attribute strings.\r\n     */\r\n    ariaAttr: ariaAttr\r\n} //PickerConstructor._\r\n\r\n\r\n\r\n/**\r\n * Extend the picker with a component and defaults.\r\n */\r\nPickerConstructor.extend = function( name, Component ) {\r\n\r\n    // Extend jQuery.\r\n    $.fn[ name ] = function( options, action ) {\r\n\r\n        // Grab the component data.\r\n        var componentData = this.data( name )\r\n\r\n        // If the picker is requested, return the data object.\r\n        if ( options == 'picker' ) {\r\n            return componentData\r\n        }\r\n\r\n        // If the component data exists and `options` is a string, carry out the action.\r\n        if ( componentData && typeof options == 'string' ) {\r\n            return PickerConstructor._.trigger( componentData[ options ], componentData, [ action ] )\r\n        }\r\n\r\n        // Otherwise go through each matched element and if the component\r\n        // doesn’t exist, create a new picker using `this` element\r\n        // and merging the defaults and options with a deep copy.\r\n        return this.each( function() {\r\n            var $this = $( this )\r\n            if ( !$this.data( name ) ) {\r\n                new PickerConstructor( this, name, Component, options )\r\n            }\r\n        })\r\n    }\r\n\r\n    // Set the defaults.\r\n    $.fn[ name ].defaults = Component.defaults\r\n} //PickerConstructor.extend\r\n\r\n\r\n\r\nfunction aria(element, attribute, value) {\r\n    if ( $.isPlainObject(attribute) ) {\r\n        for ( var key in attribute ) {\r\n            ariaSet(element, key, attribute[key])\r\n        }\r\n    }\r\n    else {\r\n        ariaSet(element, attribute, value)\r\n    }\r\n}\r\nfunction ariaSet(element, attribute, value) {\r\n    element.setAttribute(\r\n        (attribute == 'role' ? '' : 'aria-') + attribute,\r\n        value\r\n    )\r\n}\r\nfunction ariaAttr(attribute, data) {\r\n    if ( !$.isPlainObject(attribute) ) {\r\n        attribute = { attribute: data }\r\n    }\r\n    data = ''\r\n    for ( var key in attribute ) {\r\n        var attr = (key == 'role' ? '' : 'aria-') + key,\r\n            attrVal = attribute[key]\r\n        data += attrVal == null ? '' : attr + '=\"' + attribute[key] + '\"'\r\n    }\r\n    return data\r\n}\r\n\r\n// IE8 bug throws an error for activeElements within iframes.\r\nfunction getActiveElement() {\r\n    try {\r\n        return document.activeElement\r\n    } catch ( err ) { }\r\n}\r\n\r\n\r\n\r\n// Expose the picker constructor.\r\nreturn PickerConstructor\r\n\r\n\r\n}));\r\n\r\n\r\n\r\n","/*!\n * Date picker for pickadate.js v3.5.6\n * http://amsul.github.io/pickadate.js/date.htm\n * https://github.com/amsul/pickadate.js\n */\n\n(function (factory) {\n\n    // AMD.\n    if (typeof define == 'function' && define.amd)\n        define(['picker', 'jquery'], factory)\n\n    // Node.js/browserify.\n    else if (typeof exports == 'object')\n        module.exports = factory(require('./picker.js'), require('jquery'))\n\n    // Browser globals.\n    else factory(Picker, jQuery)\n\n}(function (Picker, $) {\n\n\n    /**\n     * Globals and constants\n     */\n    var DAYS_IN_WEEK = 7,\n        WEEKS_IN_CALENDAR = 6,\n        _ = Picker._\n\n\n\n    /**\n     * The date picker constructor\n     */\n    function DatePicker(picker, settings) {\n\n        var calendar = this,\n            element = picker.$node[0],\n            elementValue = element.value,\n            elementDataValue = picker.$node.data('value'),\n            valueString = elementDataValue || elementValue,\n            formatString = elementDataValue ? settings.formatSubmit : settings.format,\n            isRTL = function () {\n\n                return element.currentStyle ?\n\n                    // For IE.\n                    element.currentStyle.direction == 'rtl' :\n\n                    // For normal browsers.\n                    getComputedStyle(picker.$root[0]).direction == 'rtl'\n            }\n\n        calendar.settings = settings\n        calendar.$node = picker.$node\n\n        // The queue of methods that will be used to build item objects.\n        calendar.queue = {\n            min: 'measure create',\n            max: 'measure create',\n            now: 'now create',\n            select: 'parse create validate',\n            highlight: 'parse navigate create validate',\n            view: 'parse create validate viewset',\n            disable: 'deactivate',\n            enable: 'activate'\n        }\n\n        // The component's item object.\n        calendar.item = {}\n\n        calendar.item.clear = null\n        calendar.item.disable = (settings.disable || []).slice(0)\n        calendar.item.enable = -(function (collectionDisabled) {\n            return collectionDisabled[0] === true ? collectionDisabled.shift() : -1\n        })(calendar.item.disable)\n\n        calendar.\n        set('min', settings.min).\n        set('max', settings.max).\n        set('now')\n\n        // When there’s a value, set the `select`, which in turn\n        // also sets the `highlight` and `view`.\n        if (valueString) {\n            calendar.set('select', valueString, {\n                format: formatString,\n                defaultValue: true\n            })\n        }\n\n        // If there’s no value, default to highlighting “today”.\n        else {\n            calendar.\n            set('select', null).\n            set('highlight', calendar.item.now)\n        }\n\n\n        // The keycode to movement mapping.\n        calendar.key = {\n            40: 7, // Down\n            38: -7, // Up\n            39: function () {\n                return isRTL() ? -1 : 1\n            }, // Right\n            37: function () {\n                return isRTL() ? 1 : -1\n            }, // Left\n            go: function (timeChange) {\n                var highlightedObject = calendar.item.highlight,\n                    targetDate = new Date(highlightedObject.year, highlightedObject.month, highlightedObject.date + timeChange)\n                calendar.set(\n                    'highlight',\n                    targetDate, {\n                        interval: timeChange\n                    }\n                )\n                this.render()\n            }\n        }\n\n\n        // Bind some picker events.\n        picker.\n        on('render', function () {\n            picker.$root.find('.' + settings.klass.selectMonth).on('change', function () {\n                var value = this.value\n                if (value) {\n                    picker.set('highlight', [picker.get('view').year, value, picker.get('highlight').date])\n                    picker.$root.find('.' + settings.klass.selectMonth).trigger('focus')\n                }\n            })\n            picker.$root.find('.' + settings.klass.selectYear).on('change', function () {\n                var value = this.value\n                if (value) {\n                    picker.set('highlight', [value, picker.get('view').month, picker.get('highlight').date])\n                    picker.$root.find('.' + settings.klass.selectYear).trigger('focus')\n                }\n            })\n        }, 1).\n        on('open', function () {\n            var includeToday = ''\n            if (calendar.disabled(calendar.get('now'))) {\n                includeToday = ':not(.' + settings.klass.buttonToday + ')'\n            }\n            picker.$root.find('button' + includeToday + ', select').attr('disabled', false)\n        }, 1).\n        on('close', function () {\n            picker.$root.find('button, select').attr('disabled', true)\n        }, 1)\n\n    } //DatePicker\n\n\n    /**\n     * Set a datepicker item object.\n     */\n    DatePicker.prototype.set = function (type, value, options) {\n\n            var calendar = this,\n                calendarItem = calendar.item\n\n            // If the value is `null` just set it immediately.\n            if (value === null) {\n                if (type == 'clear') type = 'select'\n                calendarItem[type] = value\n                return calendar\n            }\n\n            // Otherwise go through the queue of methods, and invoke the functions.\n            // Update this as the time unit, and set the final value as this item.\n            // * In the case of `enable`, keep the queue but set `disable` instead.\n            //   And in the case of `flip`, keep the queue but set `enable` instead.\n            calendarItem[(type == 'enable' ? 'disable' : type == 'flip' ? 'enable' : type)] = calendar.queue[type].split(' ').map(function (method) {\n                value = calendar[method](type, value, options)\n                return value\n            }).pop()\n\n            // Check if we need to cascade through more updates.\n            if (type == 'select') {\n                calendar.set('highlight', calendarItem.select, options)\n            } else if (type == 'highlight') {\n                calendar.set('view', calendarItem.highlight, options)\n            } else if (type.match(/^(flip|min|max|disable|enable)$/)) {\n                if (calendarItem.select && calendar.disabled(calendarItem.select)) {\n                    calendar.set('select', calendarItem.select, options)\n                }\n                if (calendarItem.highlight && calendar.disabled(calendarItem.highlight)) {\n                    calendar.set('highlight', calendarItem.highlight, options)\n                }\n            }\n\n            return calendar\n        } //DatePicker.prototype.set\n\n\n    /**\n     * Get a datepicker item object.\n     */\n    DatePicker.prototype.get = function (type) {\n            return this.item[type]\n        } //DatePicker.prototype.get\n\n\n    /**\n     * Create a picker date object.\n     */\n    DatePicker.prototype.create = function (type, value, options) {\n\n            var isInfiniteValue,\n                calendar = this\n\n            // If there’s no value, use the type as the value.\n            value = value === undefined ? type : value\n\n\n            // If it’s infinity, update the value.\n            if (value == -Infinity || value == Infinity) {\n                isInfiniteValue = value\n            }\n\n            // If it’s an object, use the native date object.\n            else if ($.isPlainObject(value) && _.isInteger(value.pick)) {\n                value = value.obj\n            }\n\n            // If it’s an array, convert it into a date and make sure\n            // that it’s a valid date – otherwise default to today.\n            else if ($.isArray(value)) {\n                value = new Date(value[0], value[1], value[2])\n                value = _.isDate(value) ? value : calendar.create().obj\n            }\n\n            // If it’s a number or date object, make a normalized date.\n            else if (_.isInteger(value) || _.isDate(value)) {\n                value = calendar.normalize(new Date(value), options)\n            }\n\n            // If it’s a literal true or any other case, set it to now.\n            else /*if ( value === true )*/ {\n                value = calendar.now(type, value, options)\n            }\n\n            // Return the compiled object.\n            return {\n                year: isInfiniteValue || value.getFullYear(),\n                month: isInfiniteValue || value.getMonth(),\n                date: isInfiniteValue || value.getDate(),\n                day: isInfiniteValue || value.getDay(),\n                obj: isInfiniteValue || value,\n                pick: isInfiniteValue || value.getTime()\n            }\n        } //DatePicker.prototype.create\n\n\n    /**\n     * Create a range limit object using an array, date object,\n     * literal “true”, or integer relative to another time.\n     */\n    DatePicker.prototype.createRange = function (from, to) {\n\n            var calendar = this,\n                createDate = function (date) {\n                    if (date === true || $.isArray(date) || _.isDate(date)) {\n                        return calendar.create(date)\n                    }\n                    return date\n                }\n\n            // Create objects if possible.\n            if (!_.isInteger(from)) {\n                from = createDate(from)\n            }\n            if (!_.isInteger(to)) {\n                to = createDate(to)\n            }\n\n            // Create relative dates.\n            if (_.isInteger(from) && $.isPlainObject(to)) {\n                from = [to.year, to.month, to.date + from];\n            } else if (_.isInteger(to) && $.isPlainObject(from)) {\n                to = [from.year, from.month, from.date + to];\n            }\n\n            return {\n                from: createDate(from),\n                to: createDate(to)\n            }\n        } //DatePicker.prototype.createRange\n\n\n    /**\n     * Check if a date unit falls within a date range object.\n     */\n    DatePicker.prototype.withinRange = function (range, dateUnit) {\n        range = this.createRange(range.from, range.to)\n        return dateUnit.pick >= range.from.pick && dateUnit.pick <= range.to.pick\n    }\n\n\n    /**\n     * Check if two date range objects overlap.\n     */\n    DatePicker.prototype.overlapRanges = function (one, two) {\n\n        var calendar = this\n\n        // Convert the ranges into comparable dates.\n        one = calendar.createRange(one.from, one.to)\n        two = calendar.createRange(two.from, two.to)\n\n        return calendar.withinRange(one, two.from) || calendar.withinRange(one, two.to) ||\n            calendar.withinRange(two, one.from) || calendar.withinRange(two, one.to)\n    }\n\n\n    /**\n     * Get the date today.\n     */\n    DatePicker.prototype.now = function (type, value, options) {\n        value = new Date()\n        if (options && options.rel) {\n            value.setDate(value.getDate() + options.rel)\n        }\n        return this.normalize(value, options)\n    }\n\n\n    /**\n     * Navigate to next/prev month.\n     */\n    DatePicker.prototype.navigate = function (type, value, options) {\n\n            var targetDateObject,\n                targetYear,\n                targetMonth,\n                targetDate,\n                isTargetArray = $.isArray(value),\n                isTargetObject = $.isPlainObject(value),\n                viewsetObject = this.item.view\n                /*,\n                        safety = 100*/\n\n\n            if (isTargetArray || isTargetObject) {\n\n                if (isTargetObject) {\n                    targetYear = value.year\n                    targetMonth = value.month\n                    targetDate = value.date\n                } else {\n                    targetYear = +value[0]\n                    targetMonth = +value[1]\n                    targetDate = +value[2]\n                }\n\n                // If we’re navigating months but the view is in a different\n                // month, navigate to the view’s year and month.\n                if (options && options.nav && viewsetObject && viewsetObject.month !== targetMonth) {\n                    targetYear = viewsetObject.year\n                    targetMonth = viewsetObject.month\n                }\n\n                // Figure out the expected target year and month.\n                targetDateObject = new Date(targetYear, targetMonth + (options && options.nav ? options.nav : 0), 1)\n                targetYear = targetDateObject.getFullYear()\n                targetMonth = targetDateObject.getMonth()\n\n                // If the month we’re going to doesn’t have enough days,\n                // keep decreasing the date until we reach the month’s last date.\n                while ( /*safety &&*/ new Date(targetYear, targetMonth, targetDate).getMonth() !== targetMonth) {\n                    targetDate -= 1\n                        /*safety -= 1\n                        if ( !safety ) {\n                            throw 'Fell into an infinite loop while navigating to ' + new Date( targetYear, targetMonth, targetDate ) + '.'\n                        }*/\n                }\n\n                value = [targetYear, targetMonth, targetDate]\n            }\n\n            return value\n        } //DatePicker.prototype.navigate\n\n\n    /**\n     * Normalize a date by setting the hours to midnight.\n     */\n    DatePicker.prototype.normalize = function (value /*, options*/ ) {\n        value.setHours(0, 0, 0, 0)\n        return value\n    }\n\n\n    /**\n     * Measure the range of dates.\n     */\n    DatePicker.prototype.measure = function (type, value /*, options*/ ) {\n\n            var calendar = this\n\n            // If it’s anything false-y, remove the limits.\n            if (!value) {\n                value = type == 'min' ? -Infinity : Infinity\n            }\n\n            // If it’s a string, parse it.\n            else if (typeof value == 'string') {\n                value = calendar.parse(type, value)\n            }\n\n            // If it's an integer, get a date relative to today.\n            else if (_.isInteger(value)) {\n                value = calendar.now(type, value, {\n                    rel: value\n                })\n            }\n\n            return value\n        } ///DatePicker.prototype.measure\n\n\n    /**\n     * Create a viewset object based on navigation.\n     */\n    DatePicker.prototype.viewset = function (type, dateObject /*, options*/ ) {\n        return this.create([dateObject.year, dateObject.month, 1])\n    }\n\n\n    /**\n     * Validate a date as enabled and shift if needed.\n     */\n    DatePicker.prototype.validate = function (type, dateObject, options) {\n\n            var calendar = this,\n\n                // Keep a reference to the original date.\n                originalDateObject = dateObject,\n\n                // Make sure we have an interval.\n                interval = options && options.interval ? options.interval : 1,\n\n                // Check if the calendar enabled dates are inverted.\n                isFlippedBase = calendar.item.enable === -1,\n\n                // Check if we have any enabled dates after/before now.\n                hasEnabledBeforeTarget, hasEnabledAfterTarget,\n\n                // The min & max limits.\n                minLimitObject = calendar.item.min,\n                maxLimitObject = calendar.item.max,\n\n                // Check if we’ve reached the limit during shifting.\n                reachedMin, reachedMax,\n\n                // Check if the calendar is inverted and at least one weekday is enabled.\n                hasEnabledWeekdays = isFlippedBase && calendar.item.disable.filter(function (value) {\n\n                    // If there’s a date, check where it is relative to the target.\n                    if ($.isArray(value)) {\n                        var dateTime = calendar.create(value).pick\n                        if (dateTime < dateObject.pick) hasEnabledBeforeTarget = true\n                        else if (dateTime > dateObject.pick) hasEnabledAfterTarget = true\n                    }\n\n                    // Return only integers for enabled weekdays.\n                    return _.isInteger(value)\n                }).length\n                /*,\n\n                        safety = 100*/\n\n\n\n            // Cases to validate for:\n            // [1] Not inverted and date disabled.\n            // [2] Inverted and some dates enabled.\n            // [3] Not inverted and out of range.\n            //\n            // Cases to **not** validate for:\n            // • Navigating months.\n            // • Not inverted and date enabled.\n            // • Inverted and all dates disabled.\n            // • ..and anything else.\n            if (!options || (!options.nav && !options.defaultValue))\n                if (\n                    /* 1 */\n                    (!isFlippedBase && calendar.disabled(dateObject)) ||\n                    /* 2 */\n                    (isFlippedBase && calendar.disabled(dateObject) && (hasEnabledWeekdays || hasEnabledBeforeTarget || hasEnabledAfterTarget)) ||\n                    /* 3 */\n                    (!isFlippedBase && (dateObject.pick <= minLimitObject.pick || dateObject.pick >= maxLimitObject.pick))\n                ) {\n\n\n                    // When inverted, flip the direction if there aren’t any enabled weekdays\n                    // and there are no enabled dates in the direction of the interval.\n                    if (isFlippedBase && !hasEnabledWeekdays && ((!hasEnabledAfterTarget && interval > 0) || (!hasEnabledBeforeTarget && interval < 0))) {\n                        interval *= -1\n                    }\n\n\n                    // Keep looping until we reach an enabled date.\n                    while ( /*safety &&*/ calendar.disabled(dateObject)) {\n\n                        /*safety -= 1\n                        if ( !safety ) {\n                            throw 'Fell into an infinite loop while validating ' + dateObject.obj + '.'\n                        }*/\n\n\n                        // If we’ve looped into the next/prev month with a large interval, return to the original date and flatten the interval.\n                        if (Math.abs(interval) > 1 && (dateObject.month < originalDateObject.month || dateObject.month > originalDateObject.month)) {\n                            dateObject = originalDateObject\n                            interval = interval > 0 ? 1 : -1\n                        }\n\n\n                        // If we’ve reached the min/max limit, reverse the direction, flatten the interval and set it to the limit.\n                        if (dateObject.pick <= minLimitObject.pick) {\n                            reachedMin = true\n                            interval = 1\n                            dateObject = calendar.create([\n                    minLimitObject.year,\n                    minLimitObject.month,\n                    minLimitObject.date + (dateObject.pick === minLimitObject.pick ? 0 : -1)\n                ])\n                        } else if (dateObject.pick >= maxLimitObject.pick) {\n                            reachedMax = true\n                            interval = -1\n                            dateObject = calendar.create([\n                    maxLimitObject.year,\n                    maxLimitObject.month,\n                    maxLimitObject.date + (dateObject.pick === maxLimitObject.pick ? 0 : 1)\n                ])\n                        }\n\n\n                        // If we’ve reached both limits, just break out of the loop.\n                        if (reachedMin && reachedMax) {\n                            break\n                        }\n\n\n                        // Finally, create the shifted date using the interval and keep looping.\n                        dateObject = calendar.create([dateObject.year, dateObject.month, dateObject.date + interval])\n                    }\n\n                } //endif\n\n\n                // Return the date object settled on.\n            return dateObject\n        } //DatePicker.prototype.validate\n\n\n    /**\n     * Check if a date is disabled.\n     */\n    DatePicker.prototype.disabled = function (dateToVerify) {\n\n            var\n                calendar = this,\n\n                // Filter through the disabled dates to check if this is one.\n                isDisabledMatch = calendar.item.disable.filter(function (dateToDisable) {\n\n                    // If the date is a number, match the weekday with 0index and `firstDay` check.\n                    if (_.isInteger(dateToDisable)) {\n                        return dateToVerify.day === (calendar.settings.firstDay ? dateToDisable : dateToDisable - 1) % 7\n                    }\n\n                    // If it’s an array or a native JS date, create and match the exact date.\n                    if ($.isArray(dateToDisable) || _.isDate(dateToDisable)) {\n                        return dateToVerify.pick === calendar.create(dateToDisable).pick\n                    }\n\n                    // If it’s an object, match a date within the “from” and “to” range.\n                    if ($.isPlainObject(dateToDisable)) {\n                        return calendar.withinRange(dateToDisable, dateToVerify)\n                    }\n                })\n\n            // If this date matches a disabled date, confirm it’s not inverted.\n            isDisabledMatch = isDisabledMatch.length && !isDisabledMatch.filter(function (dateToDisable) {\n                return $.isArray(dateToDisable) && dateToDisable[3] == 'inverted' ||\n                    $.isPlainObject(dateToDisable) && dateToDisable.inverted\n            }).length\n\n            // Check the calendar “enabled” flag and respectively flip the\n            // disabled state. Then also check if it’s beyond the min/max limits.\n            return calendar.item.enable === -1 ? !isDisabledMatch : isDisabledMatch ||\n                dateToVerify.pick < calendar.item.min.pick ||\n                dateToVerify.pick > calendar.item.max.pick\n\n        } //DatePicker.prototype.disabled\n\n\n    /**\n     * Parse a string into a usable type.\n     */\n    DatePicker.prototype.parse = function (type, value, options) {\n\n            var calendar = this,\n                parsingObject = {}\n\n            // If it’s already parsed, we’re good.\n            if (!value || typeof value != 'string') {\n                return value\n            }\n\n            // We need a `.format` to parse the value with.\n            if (!(options && options.format)) {\n                options = options || {}\n                options.format = calendar.settings.format\n            }\n\n            // Convert the format into an array and then map through it.\n            calendar.formats.toArray(options.format).map(function (label) {\n\n                var\n                // Grab the formatting label.\n                    formattingLabel = calendar.formats[label],\n\n                    // The format length is from the formatting label function or the\n                    // label length without the escaping exclamation (!) mark.\n                    formatLength = formattingLabel ? _.trigger(formattingLabel, calendar, [value, parsingObject]) : label.replace(/^!/, '').length\n\n                // If there's a format label, split the value up to the format length.\n                // Then add it to the parsing object with appropriate label.\n                if (formattingLabel) {\n                    parsingObject[label] = value.substr(0, formatLength)\n                }\n\n                // Update the value as the substring from format length to end.\n                value = value.substr(formatLength)\n            })\n\n            // Compensate for month 0index.\n            return [\n        parsingObject.yyyy || parsingObject.yy,\n        +(parsingObject.mm || parsingObject.m) - 1,\n        parsingObject.dd || parsingObject.d\n    ]\n        } //DatePicker.prototype.parse\n\n\n    /**\n     * Various formats to display the object in.\n     */\n    DatePicker.prototype.formats = (function () {\n\n            // Return the length of the first word in a collection.\n            function getWordLengthFromCollection(string, collection, dateObject) {\n\n                // Grab the first word from the string.\n                // Regex pattern from http://stackoverflow.com/q/150033\n                var word = string.match(/[^\\x00-\\x7F]+|\\w+/)[0]\n\n                // If there's no month index, add it to the date object\n                if (!dateObject.mm && !dateObject.m) {\n                    dateObject.m = collection.indexOf(word) + 1\n                }\n\n                // Return the length of the word.\n                return word.length\n            }\n\n            // Get the length of the first word in a string.\n            function getFirstWordLength(string) {\n                return string.match(/\\w+/)[0].length\n            }\n\n            return {\n\n                d: function (string, dateObject) {\n\n                    // If there's string, then get the digits length.\n                    // Otherwise return the selected date.\n                    return string ? _.digits(string) : dateObject.date\n                },\n                dd: function (string, dateObject) {\n\n                    // If there's a string, then the length is always 2.\n                    // Otherwise return the selected date with a leading zero.\n                    return string ? 2 : _.lead(dateObject.date)\n                },\n                ddd: function (string, dateObject) {\n\n                    // If there's a string, then get the length of the first word.\n                    // Otherwise return the short selected weekday.\n                    return string ? getFirstWordLength(string) : this.settings.weekdaysShort[dateObject.day]\n                },\n                dddd: function (string, dateObject) {\n\n                    // If there's a string, then get the length of the first word.\n                    // Otherwise return the full selected weekday.\n                    return string ? getFirstWordLength(string) : this.settings.weekdaysFull[dateObject.day]\n                },\n                m: function (string, dateObject) {\n\n                    // If there's a string, then get the length of the digits\n                    // Otherwise return the selected month with 0index compensation.\n                    return string ? _.digits(string) : dateObject.month + 1\n                },\n                mm: function (string, dateObject) {\n\n                    // If there's a string, then the length is always 2.\n                    // Otherwise return the selected month with 0index and leading zero.\n                    return string ? 2 : _.lead(dateObject.month + 1)\n                },\n                mmm: function (string, dateObject) {\n\n                    var collection = this.settings.monthsShort\n\n                    // If there's a string, get length of the relevant month from the short\n                    // months collection. Otherwise return the selected month from that collection.\n                    return string ? getWordLengthFromCollection(string, collection, dateObject) : collection[dateObject.month]\n                },\n                mmmm: function (string, dateObject) {\n\n                    var collection = this.settings.monthsFull\n\n                    // If there's a string, get length of the relevant month from the full\n                    // months collection. Otherwise return the selected month from that collection.\n                    return string ? getWordLengthFromCollection(string, collection, dateObject) : collection[dateObject.month]\n                },\n                yy: function (string, dateObject) {\n\n                    // If there's a string, then the length is always 2.\n                    // Otherwise return the selected year by slicing out the first 2 digits.\n                    return string ? 2 : ('' + dateObject.year).slice(2)\n                },\n                yyyy: function (string, dateObject) {\n\n                    // If there's a string, then the length is always 4.\n                    // Otherwise return the selected year.\n                    return string ? 4 : dateObject.year\n                },\n\n                // Create an array by splitting the formatting string passed.\n                toArray: function (formatString) {\n                    return formatString.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g)\n                },\n\n                // Format an object into a string using the formatting options.\n                toString: function (formatString, itemObject) {\n                    var calendar = this\n                    return calendar.formats.toArray(formatString).map(function (label) {\n                        return _.trigger(calendar.formats[label], calendar, [0, itemObject]) || label.replace(/^!/, '')\n                    }).join('')\n                }\n            }\n        })() //DatePicker.prototype.formats\n\n\n\n\n    /**\n     * Check if two date units are the exact.\n     */\n    DatePicker.prototype.isDateExact = function (one, two) {\n\n        var calendar = this\n\n        // When we’re working with weekdays, do a direct comparison.\n        if (\n            (_.isInteger(one) && _.isInteger(two)) ||\n            (typeof one == 'boolean' && typeof two == 'boolean')\n        ) {\n            return one === two\n        }\n\n        // When we’re working with date representations, compare the “pick” value.\n        if (\n            (_.isDate(one) || $.isArray(one)) &&\n            (_.isDate(two) || $.isArray(two))\n        ) {\n            return calendar.create(one).pick === calendar.create(two).pick\n        }\n\n        // When we’re working with range objects, compare the “from” and “to”.\n        if ($.isPlainObject(one) && $.isPlainObject(two)) {\n            return calendar.isDateExact(one.from, two.from) && calendar.isDateExact(one.to, two.to)\n        }\n\n        return false\n    }\n\n\n    /**\n     * Check if two date units overlap.\n     */\n    DatePicker.prototype.isDateOverlap = function (one, two) {\n\n        var calendar = this,\n            firstDay = calendar.settings.firstDay ? 1 : 0\n\n        // When we’re working with a weekday index, compare the days.\n        if (_.isInteger(one) && (_.isDate(two) || $.isArray(two))) {\n            one = one % 7 + firstDay\n            return one === calendar.create(two).day + 1\n        }\n        if (_.isInteger(two) && (_.isDate(one) || $.isArray(one))) {\n            two = two % 7 + firstDay\n            return two === calendar.create(one).day + 1\n        }\n\n        // When we’re working with range objects, check if the ranges overlap.\n        if ($.isPlainObject(one) && $.isPlainObject(two)) {\n            return calendar.overlapRanges(one, two)\n        }\n\n        return false\n    }\n\n\n    /**\n     * Flip the “enabled” state.\n     */\n    DatePicker.prototype.flipEnable = function (val) {\n        var itemObject = this.item\n        itemObject.enable = val || (itemObject.enable == -1 ? 1 : -1)\n    }\n\n\n    /**\n     * Mark a collection of dates as “disabled”.\n     */\n    DatePicker.prototype.deactivate = function (type, datesToDisable) {\n\n            var calendar = this,\n                disabledItems = calendar.item.disable.slice(0)\n\n\n            // If we’re flipping, that’s all we need to do.\n            if (datesToDisable == 'flip') {\n                calendar.flipEnable()\n            } else if (datesToDisable === false) {\n                calendar.flipEnable(1)\n                disabledItems = []\n            } else if (datesToDisable === true) {\n                calendar.flipEnable(-1)\n                disabledItems = []\n            }\n\n            // Otherwise go through the dates to disable.\n            else {\n\n                datesToDisable.map(function (unitToDisable) {\n\n                    var matchFound\n\n                    // When we have disabled items, check for matches.\n                    // If something is matched, immediately break out.\n                    for (var index = 0; index < disabledItems.length; index += 1) {\n                        if (calendar.isDateExact(unitToDisable, disabledItems[index])) {\n                            matchFound = true\n                            break\n                        }\n                    }\n\n                    // If nothing was found, add the validated unit to the collection.\n                    if (!matchFound) {\n                        if (\n                            _.isInteger(unitToDisable) ||\n                            _.isDate(unitToDisable) ||\n                            $.isArray(unitToDisable) ||\n                            ($.isPlainObject(unitToDisable) && unitToDisable.from && unitToDisable.to)\n                        ) {\n                            disabledItems.push(unitToDisable)\n                        }\n                    }\n                })\n            }\n\n            // Return the updated collection.\n            return disabledItems\n        } //DatePicker.prototype.deactivate\n\n\n    /**\n     * Mark a collection of dates as “enabled”.\n     */\n    DatePicker.prototype.activate = function (type, datesToEnable) {\n\n            var calendar = this,\n                disabledItems = calendar.item.disable,\n                disabledItemsCount = disabledItems.length\n\n            // If we’re flipping, that’s all we need to do.\n            if (datesToEnable == 'flip') {\n                calendar.flipEnable()\n            } else if (datesToEnable === true) {\n                calendar.flipEnable(1)\n                disabledItems = []\n            } else if (datesToEnable === false) {\n                calendar.flipEnable(-1)\n                disabledItems = []\n            }\n\n            // Otherwise go through the disabled dates.\n            else {\n\n                datesToEnable.map(function (unitToEnable) {\n\n                    var matchFound,\n                        disabledUnit,\n                        index,\n                        isExactRange\n\n                    // Go through the disabled items and try to find a match.\n                    for (index = 0; index < disabledItemsCount; index += 1) {\n\n                        disabledUnit = disabledItems[index]\n\n                        // When an exact match is found, remove it from the collection.\n                        if (calendar.isDateExact(disabledUnit, unitToEnable)) {\n                            matchFound = disabledItems[index] = null\n                            isExactRange = true\n                            break\n                        }\n\n                        // When an overlapped match is found, add the “inverted” state to it.\n                        else if (calendar.isDateOverlap(disabledUnit, unitToEnable)) {\n                            if ($.isPlainObject(unitToEnable)) {\n                                unitToEnable.inverted = true\n                                matchFound = unitToEnable\n                            } else if ($.isArray(unitToEnable)) {\n                                matchFound = unitToEnable\n                                if (!matchFound[3]) matchFound.push('inverted')\n                            } else if (_.isDate(unitToEnable)) {\n                                matchFound = [unitToEnable.getFullYear(), unitToEnable.getMonth(), unitToEnable.getDate(), 'inverted']\n                            }\n                            break\n                        }\n                    }\n\n                    // If a match was found, remove a previous duplicate entry.\n                    if (matchFound)\n                        for (index = 0; index < disabledItemsCount; index += 1) {\n                            if (calendar.isDateExact(disabledItems[index], unitToEnable)) {\n                                disabledItems[index] = null\n                                break\n                            }\n                        }\n\n                    // In the event that we’re dealing with an exact range of dates,\n                    // make sure there are no “inverted” dates because of it.\n                    if (isExactRange)\n                        for (index = 0; index < disabledItemsCount; index += 1) {\n                            if (calendar.isDateOverlap(disabledItems[index], unitToEnable)) {\n                                disabledItems[index] = null\n                                break\n                            }\n                        }\n\n                    // If something is still matched, add it into the collection.\n                    if (matchFound) {\n                        disabledItems.push(matchFound)\n                    }\n                })\n            }\n\n            // Return the updated collection.\n            return disabledItems.filter(function (val) {\n                return val != null\n            })\n        } //DatePicker.prototype.activate\n\n\n    /**\n     * Create a string for the nodes in the picker.\n     */\n    DatePicker.prototype.nodes = function (isOpen) {\n\n            var\n                calendar = this,\n                settings = calendar.settings,\n                calendarItem = calendar.item,\n                nowObject = calendarItem.now,\n                selectedObject = calendarItem.select,\n                highlightedObject = calendarItem.highlight,\n                viewsetObject = calendarItem.view,\n                disabledCollection = calendarItem.disable,\n                minLimitObject = calendarItem.min,\n                maxLimitObject = calendarItem.max,\n\n\n                // Create the calendar table head using a copy of weekday labels collection.\n                // * We do a copy so we don't mutate the original array.\n                tableHead = (function (collection, fullCollection) {\n\n                    // If the first day should be Monday, move Sunday to the end.\n                    if (settings.firstDay) {\n                        collection.push(collection.shift())\n                        fullCollection.push(fullCollection.shift())\n                    }\n\n                    // Create and return the table head group.\n                    return _.node(\n                            'thead',\n                            _.node(\n                                'tr',\n                                _.group({\n                                    min: 0,\n                                    max: DAYS_IN_WEEK - 1,\n                                    i: 1,\n                                    node: 'th',\n                                    item: function (counter) {\n                                        return [\n                                collection[counter],\n                                settings.klass.weekdays,\n                                'scope=col title=\"' + fullCollection[counter] + '\"'\n                            ]\n                                    }\n                                })\n                            )\n                        ) //endreturn\n                })((settings.showWeekdaysFull ? settings.weekdaysFull : settings.weekdaysShort).slice(0), settings.weekdaysFull.slice(0)), //tableHead\n\n\n                // Create the nav for next/prev month.\n                createMonthNav = function (next) {\n\n                    // Otherwise, return the created month tag.\n                    return _.node(\n                            'div',\n                            ' ',\n                            settings.klass['nav' + (next ? 'Next' : 'Prev')] + (\n\n                                // If the focused month is outside the range, disabled the button.\n                                (next && viewsetObject.year >= maxLimitObject.year && viewsetObject.month >= maxLimitObject.month) ||\n                                (!next && viewsetObject.year <= minLimitObject.year && viewsetObject.month <= minLimitObject.month) ?\n                                ' ' + settings.klass.navDisabled : ''\n                            ),\n                            'data-nav=' + (next || -1) + ' ' +\n                            _.ariaAttr({\n                                role: 'button',\n                                controls: calendar.$node[0].id + '_table'\n                            }) + ' ' +\n                            'title=\"' + (next ? settings.labelMonthNext : settings.labelMonthPrev) + '\"'\n                        ) //endreturn\n                }, //createMonthNav\n\n\n                // Create the month label.\n                createMonthLabel = function () {\n\n                    var monthsCollection = settings.showMonthsShort ? settings.monthsShort : settings.monthsFull\n\n                    // If there are months to select, add a dropdown menu.\n                    if (settings.selectMonths) {\n\n                        return _.node('select',\n                            _.group({\n                                min: 0,\n                                max: 11,\n                                i: 1,\n                                node: 'option',\n                                item: function (loopedMonth) {\n\n                                    return [\n\n                                // The looped month and no classes.\n                                monthsCollection[loopedMonth], 0,\n\n                                // Set the value and selected index.\n                                'value=' + loopedMonth +\n                                        (viewsetObject.month == loopedMonth ? ' selected' : '') +\n                                        (\n                                            (\n                                                (viewsetObject.year == minLimitObject.year && loopedMonth < minLimitObject.month) ||\n                                                (viewsetObject.year == maxLimitObject.year && loopedMonth > maxLimitObject.month)\n                                            ) ?\n                                            ' disabled' : ''\n                                )\n                            ]\n                                }\n                            }),\n                            settings.klass.selectMonth, (isOpen ? '' : 'disabled') + ' ' +\n                            _.ariaAttr({\n                                controls: calendar.$node[0].id + '_table'\n                            }) + ' ' +\n                            'title=\"' + settings.labelMonthSelect + '\"'\n                        )\n                    }\n\n                    // If there's a need for a month selector\n                    return _.node('div', monthsCollection[viewsetObject.month], settings.klass.month)\n                }, //createMonthLabel\n\n\n                // Create the year label.\n                createYearLabel = function () {\n\n                    var focusedYear = viewsetObject.year,\n\n                        // If years selector is set to a literal \"true\", set it to 5. Otherwise\n                        // divide in half to get half before and half after focused year.\n                        numberYears = settings.selectYears === true ? 5 : ~~(settings.selectYears / 2)\n\n                    // If there are years to select, add a dropdown menu.\n                    if (numberYears) {\n\n                        var\n                            minYear = minLimitObject.year,\n                            maxYear = maxLimitObject.year,\n                            lowestYear = focusedYear - numberYears,\n                            highestYear = focusedYear + numberYears\n\n                        // If the min year is greater than the lowest year, increase the highest year\n                        // by the difference and set the lowest year to the min year.\n                        if (minYear > lowestYear) {\n                            highestYear += minYear - lowestYear\n                            lowestYear = minYear\n                        }\n\n                        // If the max year is less than the highest year, decrease the lowest year\n                        // by the lower of the two: available and needed years. Then set the\n                        // highest year to the max year.\n                        if (maxYear < highestYear) {\n\n                            var availableYears = lowestYear - minYear,\n                                neededYears = highestYear - maxYear\n\n                            lowestYear -= availableYears > neededYears ? neededYears : availableYears\n                            highestYear = maxYear\n                        }\n\n                        return _.node('select',\n                            _.group({\n                                min: lowestYear,\n                                max: highestYear,\n                                i: 1,\n                                node: 'option',\n                                item: function (loopedYear) {\n                                    return [\n\n                                // The looped year and no classes.\n                                loopedYear, 0,\n\n                                // Set the value and selected index.\n                                'value=' + loopedYear + (focusedYear == loopedYear ? ' selected' : '')\n                            ]\n                                }\n                            }),\n                            settings.klass.selectYear, (isOpen ? '' : 'disabled') + ' ' + _.ariaAttr({\n                                controls: calendar.$node[0].id + '_table'\n                            }) + ' ' +\n                            'title=\"' + settings.labelYearSelect + '\"'\n                        )\n                    }\n\n                    // Otherwise just return the year focused\n                    return _.node('div', focusedYear, settings.klass.year)\n                } //createYearLabel\n\n\n            // Create and return the entire calendar.\n            return _.node(\n                    'div', (settings.selectYears ? createYearLabel() + createMonthLabel() : createMonthLabel() + createYearLabel()) +\n                    createMonthNav() + createMonthNav(1),\n                    settings.klass.header\n                ) + _.node(\n                    'table',\n                    tableHead +\n                    _.node(\n                        'tbody',\n                        _.group({\n                            min: 0,\n                            max: WEEKS_IN_CALENDAR - 1,\n                            i: 1,\n                            node: 'tr',\n                            item: function (rowCounter) {\n\n                                // If Monday is the first day and the month starts on Sunday, shift the date back a week.\n                                var shiftDateBy = settings.firstDay && calendar.create([viewsetObject.year, viewsetObject.month, 1]).day === 0 ? -7 : 0\n\n                                return [\n                        _.group({\n                                            min: DAYS_IN_WEEK * rowCounter - viewsetObject.day + shiftDateBy + 1, // Add 1 for weekday 0index\n                                            max: function () {\n                                                return this.min + DAYS_IN_WEEK - 1\n                                            },\n                                            i: 1,\n                                            node: 'td',\n                                            item: function (targetDate) {\n\n                                                // Convert the time date from a relative date to a target date.\n                                                targetDate = calendar.create([viewsetObject.year, viewsetObject.month, targetDate + (settings.firstDay ? 1 : 0)])\n\n                                                var isSelected = selectedObject && selectedObject.pick == targetDate.pick,\n                                                    isHighlighted = highlightedObject && highlightedObject.pick == targetDate.pick,\n                                                    isDisabled = disabledCollection && calendar.disabled(targetDate) || targetDate.pick < minLimitObject.pick || targetDate.pick > maxLimitObject.pick,\n                                                    formattedDate = _.trigger(calendar.formats.toString, calendar, [settings.format, targetDate])\n\n                                                return [\n                                    _.node(\n                                                            'div',\n                                                            targetDate.date, (function (klasses) {\n\n                                                                // Add the `infocus` or `outfocus` classes based on month in view.\n                                                                klasses.push(viewsetObject.month == targetDate.month ? settings.klass.infocus : settings.klass.outfocus)\n\n                                                                // Add the `today` class if needed.\n                                                                if (nowObject.pick == targetDate.pick) {\n                                                                    klasses.push(settings.klass.now)\n                                                                }\n\n                                                                // Add the `selected` class if something's selected and the time matches.\n                                                                if (isSelected) {\n                                                                    klasses.push(settings.klass.selected)\n                                                                }\n\n                                                                // Add the `highlighted` class if something's highlighted and the time matches.\n                                                                if (isHighlighted) {\n                                                                    klasses.push(settings.klass.highlighted)\n                                                                }\n\n                                                                // Add the `disabled` class if something's disabled and the object matches.\n                                                                if (isDisabled) {\n                                                                    klasses.push(settings.klass.disabled)\n                                                                }\n\n                                                                return klasses.join(' ')\n                                                            })([settings.klass.day]),\n                                                            'data-pick=' + targetDate.pick + ' ' + _.ariaAttr({\n                                                                role: 'gridcell',\n                                                                label: formattedDate,\n                                                                selected: isSelected && calendar.$node.val() === formattedDate ? true : null,\n                                                                activedescendant: isHighlighted ? true : null,\n                                                                disabled: isDisabled ? true : null\n                                                            })\n                                    ),\n                                    '',\n                                    _.ariaAttr({\n                                                            role: 'presentation'\n                                                        })\n                                ] //endreturn\n                                            }\n                                        })\n                    ] //endreturn\n                            }\n                        })\n                    ),\n                    settings.klass.table,\n                    'id=\"' + calendar.$node[0].id + '_table' + '\" ' + _.ariaAttr({\n                        role: 'grid',\n                        controls: calendar.$node[0].id,\n                        readonly: true\n                    })\n                ) +\n\n                // * For Firefox forms to submit, make sure to set the buttons’ `type` attributes as “button”.\n                _.node(\n                    'div',\n                    _.node('button', settings.today,\n                        settings.klass.buttonToday + \" a24-flat-button waves-effect waves-dark\", //A24Mod\n                        'type=button data-pick=' + nowObject.pick +\n                        (isOpen && !calendar.disabled(nowObject) ? '' : ' disabled') + ' ' +\n                        _.ariaAttr({\n                            controls: calendar.$node[0].id\n                        })) +\n                    _.node('button', settings.clear,\n                        settings.klass.buttonClear + \" a24-flat-button waves-effect waves-dark\", //A24Mod\n                        'type=button data-clear=1' +\n                        (isOpen ? '' : ' disabled') + ' ' +\n                        _.ariaAttr({\n                            controls: calendar.$node[0].id\n                        })) +\n                    _.node('button', settings.close,\n                        settings.klass.buttonClose + \" a24-flat-button waves-effect waves-dark\", //A24Mod\n                        'type=button data-close=true ' +\n                        (isOpen ? '' : ' disabled') + ' ' +\n                        _.ariaAttr({\n                            controls: calendar.$node[0].id\n                        })),\n                    settings.klass.footer\n                ) //endreturn\n        } //DatePicker.prototype.nodes\n\n\n\n\n    /**\n     * The date picker defaults.\n     */\n    DatePicker.defaults = (function (prefix) {\n\n        return {\n\n            // The title label to use for the month nav buttons\n            labelMonthNext: 'Next month',\n            labelMonthPrev: 'Previous month',\n\n            // The title label to use for the dropdown selectors\n            labelMonthSelect: 'Select a month',\n            labelYearSelect: 'Select a year',\n\n            // Months and weekdays\n            monthsFull: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n            monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n            weekdaysFull: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n            weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n\n            // Today and clear\n            today: 'Today',\n            clear: 'Clear',\n            close: 'Close',\n\n            // Picker close behavior\n            closeOnSelect: true,\n            closeOnClear: true,\n\n            // The format to show on the `input` element\n            format: 'd mmmm, yyyy',\n\n            // Classes\n            klass: {\n\n                table: prefix + 'table',\n\n                header: prefix + 'header',\n\n                navPrev: prefix + 'nav--prev',\n                navNext: prefix + 'nav--next',\n                navDisabled: prefix + 'nav--disabled',\n\n                month: prefix + 'month',\n                year: prefix + 'year',\n\n                selectMonth: prefix + 'select--month',\n                selectYear: prefix + 'select--year',\n\n                weekdays: prefix + 'weekday',\n\n                day: prefix + 'day',\n                disabled: prefix + 'day--disabled',\n                selected: prefix + 'day--selected',\n                highlighted: prefix + 'day--highlighted',\n                now: prefix + 'day--today',\n                infocus: prefix + 'day--infocus',\n                outfocus: prefix + 'day--outfocus',\n\n                footer: prefix + 'footer',\n\n                buttonClear: prefix + 'button--clear',\n                buttonToday: prefix + 'button--today',\n                buttonClose: prefix + 'button--close'\n            }\n        }\n    })(Picker.klasses().picker + '__')\n\n\n\n\n\n    /**\n     * Extend the picker to add the date picker.\n     */\n    Picker.extend('pickadate', DatePicker)\n\n\n}));\n\n$.extend($.fn.pickadate.defaults, {\n      selectMonths: true, // Creates a dropdown to control month\n      selectYears: 15, // Creates a dropdown of 15 years to control year,\n\n      onRender: function () {\n      var $pickerInstance = this.$root;\n\n          var year = this.get('highlight', 'yyyy');\n          var day = this.get('highlight', 'dd');\n          var month = this.get('highlight', 'mmm');\n          var labelday = this.get('highlight', 'dddd');\n\n          $pickerInstance.find('.picker__header').prepend('<div class=\"picker__date-display\"><div class=\"picker__weekday-display\">' + labelday + '</div><div class=\"picker__month-display\"><div>' + month + '</div></div><div class=\"picker__day-display\"><div>' + day + '</div></div><div    class=\"picker__year-display\"><div>' + year + '</div></div></div>');\n      }\n  });\n","/*!\n * ClockPicker v0.0.7 (http://weareoutman.github.io/clockpicker/)\n * Copyright 2014 Wang Shenwei.\n * Licensed under MIT (https://github.com/weareoutman/clockpicker/blob/gh-pages/LICENSE)\n *\n * Further modified\n * Copyright 2015 Ching Yaw Hao.\n */\n\n;(function(){\n\tvar $ = window.jQuery,\n\t\t\t$win = $(window),\n\t\t\t$doc = $(document);\n\n\t// Can I use inline svg ?\n\tvar svgNS = 'http://www.w3.org/2000/svg',\n\t\t  svgSupported = 'SVGAngle' in window && (function() {\n\t\t\t  var supported,\n\t\t\t\tel = document.createElement('div');\n\t\t\t\tel.innerHTML = '<svg/>';\n\t\t\t\tsupported = (el.firstChild && el.firstChild.namespaceURI) == svgNS;\n\t\t\t\tel.innerHTML = '';\n\t\t\t\treturn supported;\n\t\t\t})();\n\n\t// Can I use transition ?\n\tvar transitionSupported = (function() {\n\t\tvar style = document.createElement('div').style;\n\t\treturn 'transition' in style ||\n\t\t\t\t\t 'WebkitTransition' in style ||\n\t\t\t\t   'MozTransition' in style ||\n\t\t\t\t\t 'msTransition' in style ||\n\t\t\t\t\t 'OTransition' in style;\n\t})();\n\n\t// Listen touch events in touch screen device, instead of mouse events in desktop.\n\tvar touchSupported = 'ontouchstart' in window,\n\t\t\tmousedownEvent = 'mousedown' + ( touchSupported ? ' touchstart' : ''),\n\t\t\tmousemoveEvent = 'mousemove.clockpicker' + ( touchSupported ? ' touchmove.clockpicker' : ''),\n\t\t\tmouseupEvent = 'mouseup.clockpicker' + ( touchSupported ? ' touchend.clockpicker' : '');\n\n\t// Vibrate the device if supported\n\tvar vibrate = navigator.vibrate ? 'vibrate' : navigator.webkitVibrate ? 'webkitVibrate' : null;\n\n\tfunction createSvgElement(name) {\n\t\treturn document.createElementNS(svgNS, name);\n\t}\n\n\tfunction leadingZero(num) {\n\t\treturn (num < 10 ? '0' : '') + num;\n\t}\n\n\t// Get a unique id\n\tvar idCounter = 0;\n\tfunction uniqueId(prefix) {\n\t\tvar id = ++idCounter + '';\n\t\treturn prefix ? prefix + id : id;\n\t}\n\n\t// Clock size\n\tvar dialRadius = 135,\n\t\t\touterRadius = 110,\n\t\t\t// innerRadius = 80 on 12 hour clock\n\t\t\tinnerRadius = 80,\n\t\t\ttickRadius = 20,\n\t\t\tdiameter = dialRadius * 2,\n\t\t\tduration = transitionSupported ? 350 : 1;\n\n\t// Popover template\n\tvar tpl = [\n\t\t'<div class=\"clockpicker picker\">',\n\t\t\t'<div class=\"picker__holder\">',\n\t\t\t\t'<div class=\"picker__frame\">',\n\t\t\t\t\t'<div class=\"picker__wrap\">',\n\t\t\t\t\t\t'<div class=\"picker__box\">',\n\t\t\t\t\t\t\t'<div class=\"picker__date-display\">',\n\t\t\t\t\t\t\t\t'<div class=\"clockpicker-display\">',\n\t\t\t\t\t\t\t\t\t'<div class=\"clockpicker-display-column\">',\n\t\t\t\t\t\t\t\t\t\t'<span class=\"clockpicker-span-hours text-primary\"></span>',\n\t\t\t\t\t\t\t\t\t\t':',\n\t\t\t\t\t\t\t\t\t\t'<span class=\"clockpicker-span-minutes\"></span>',\n\t\t\t\t\t\t\t\t\t'</div>',\n\t\t\t\t\t\t\t\t\t'<div class=\"clockpicker-display-column clockpicker-display-am-pm\">',\n\t\t\t\t\t\t\t\t\t\t'<div class=\"clockpicker-span-am-pm\"></div>',\n\t\t\t\t\t\t\t\t\t'</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\t'<div class=\"picker__calendar-container\">',\n\t\t\t\t\t\t\t\t'<div class=\"clockpicker-plate\">',\n\t\t\t\t\t\t\t\t\t'<div class=\"clockpicker-canvas\"></div>',\n\t\t\t\t\t\t\t\t\t'<div class=\"clockpicker-dial clockpicker-hours\"></div>',\n\t\t\t\t\t\t\t\t\t'<div class=\"clockpicker-dial clockpicker-minutes clockpicker-dial-out\"></div>',\n\t\t\t\t\t\t\t\t'</div>',\n\t\t\t\t\t\t\t\t'<div class=\"clockpicker-am-pm-block\">',\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\t'<div class=\"picker__footer\">',\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'</div>',\n\t\t'</div>'\n\t].join('');\n\n\t// ClockPicker\n\tfunction ClockPicker(element, options) {\n\t\tvar popover = $(tpl),\n\t\t\t\tplate = popover.find('.clockpicker-plate'),\n\t\t\t\tholder = popover.find('.picker__holder'),\n\t\t\t\thoursView = popover.find('.clockpicker-hours'),\n\t\t\t\tminutesView = popover.find('.clockpicker-minutes'),\n\t\t\t\tamPmBlock = popover.find('.clockpicker-am-pm-block'),\n\t\t\t\tisInput = element.prop('tagName') === 'INPUT',\n\t\t\t\tinput = isInput ? element : element.find('input'),\n\t\t\t\tlabel = $(\"label[for=\" + input.attr(\"id\") + \"]\"),\n\t\t\t\tself = this,\n\t\t\t\ttimer;\n\n\t\tthis.id = uniqueId('cp');\n\t\tthis.element = element;\n\t\tthis.holder = holder;\n\t\tthis.options = options;\n\t\tthis.isAppended = false;\n\t\tthis.isShown = false;\n\t\tthis.currentView = 'hours';\n\t\tthis.isInput = isInput;\n\t\tthis.input = input;\n\t\tthis.label = label;\n\t\tthis.popover = popover;\n\t\tthis.plate = plate;\n\t\tthis.hoursView = hoursView;\n\t\tthis.minutesView = minutesView;\n\t\tthis.amPmBlock = amPmBlock;\n\t\tthis.spanHours = popover.find('.clockpicker-span-hours');\n\t\tthis.spanMinutes = popover.find('.clockpicker-span-minutes');\n\t\tthis.spanAmPm = popover.find('.clockpicker-span-am-pm');\n\t\tthis.footer = popover.find('.picker__footer');\n\t\tthis.amOrPm = \"PM\";\n\n\t\t// Setup for for 12 hour clock if option is selected\n\t\tif (options.twelvehour) {\n\t\t\tvar  amPmButtonsTemplate = [\n\t\t\t\t'<div class=\"clockpicker-am-pm-block\">',\n\t\t\t\t\t'<button type=\"button\" class=\"btn-floating btn-flat clockpicker-button clockpicker-am-button\">',\n\t\t\t\t\t\t'AM',\n\t\t\t\t\t'</button>',\n\t\t\t\t\t'<button type=\"button\" class=\"btn-floating btn-flat clockpicker-button clockpicker-pm-button\">',\n\t\t\t\t\t\t'PM',\n\t\t\t\t\t'</button>',\n\t\t\t\t'</div>'\n\t\t\t].join('');\n\n\t\t\tvar amPmButtons = $(amPmButtonsTemplate);\n\n\t\t\tif(!options.ampmclickable) {\n\t\t\t\t$('<button type=\"button\" class=\"btn-floating btn-flat clockpicker-button am-button\" tabindex=\"1\">' + \"AM\" + '</button>').on(\"click\", function() {\n\t\t\t\t\tself.amOrPm = \"AM\";\n\t\t\t\t\tself.amPmBlock.children('.pm-button').removeClass('active');\n\t\t\t\t\tself.amPmBlock.children('.am-button').addClass('active');\n\t\t\t\t\tself.spanAmPm.empty().append('AM');\n\t\t\t\t}).appendTo(this.amPmBlock);\n\t\t\t\t$('<button type=\"button\" class=\"btn-floating btn-flat clockpicker-button pm-button\" tabindex=\"2\">' + \"PM\" + '</button>').on(\"click\", function() {\n\t\t\t\t\tself.amOrPm = 'PM';\n\t\t\t\t\tself.amPmBlock.children('.am-button').removeClass('active');\n\t\t\t\t\tself.amPmBlock.children('.pm-button').addClass('active');\n\t\t\t\t\tself.spanAmPm.empty().append('PM');\n\t\t\t\t}).appendTo(this.amPmBlock);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.spanAmPm.empty();\n\t\t\t\t$('<div id=\"click-am\">AM</div>').on(\"click\", function() {\n\t\t\t\t\tself.spanAmPm.children('#click-am').addClass(\"text-primary\");\n\t\t\t\t\tself.spanAmPm.children('#click-pm').removeClass(\"text-primary\");\n\t\t\t\t\tself.amOrPm = \"AM\";\n\t\t\t\t}).appendTo(this.spanAmPm);\n\t\t\t\t$('<div id=\"click-pm\">PM</div>').on(\"click\", function() {\n\t\t\t\t\tself.spanAmPm.children('#click-pm').addClass(\"text-primary\");\n\t\t\t\t\tself.spanAmPm.children('#click-am').removeClass(\"text-primary\");\n\t\t\t\t\tself.amOrPm = 'PM';\n\t\t\t\t}).appendTo(this.spanAmPm);\n\t\t\t}\n\t\t}\n\n\t\tif(options.darktheme)\n\t\t\tpopover.addClass('darktheme');\n\n\t\t\t// If autoclose is not setted, append a button\n        $('<button type=\"button\" class=\"clockpicker-button a24-flat-button waves-effect waves-dark\" tabindex=\"' + (options.twelvehour? '3' : '1') + '\">' + options.clear + '</button>').click($.proxy(this.a24Clear, this)).appendTo(this.footer); //A24Mod added this button\n\t\t$('<button type=\"button\" class=\"clockpicker-button a24-flat-button waves-effect waves-dark\" tabindex=\"' + (options.twelvehour? '4' : '2') + '\">' + options.donetext + '</button>').click($.proxy(this.done, this)).appendTo(this.footer); //A24Mod changed tab index and classnames\n\n\t\tthis.spanHours.click($.proxy(this.toggleView, this, 'hours'));\n\t\tthis.spanMinutes.click($.proxy(this.toggleView, this, 'minutes'));\n\n\t\t// Show or toggle\n\t\tinput.on('focus.clockpicker click.clockpicker', $.proxy(this.show, this));\n\n\t\t// Build ticks\n\t\tvar tickTpl = $('<div class=\"clockpicker-tick\"></div>'),\n\t\t\t\ti, tick, radian, radius;\n\n\t\t// Hours view\n\t\tif (options.twelvehour) {\n\t\t\tfor (i = 1; i < 13; i += 1) {\n\t\t\t\ttick = tickTpl.clone();\n\t\t\t\tradian = i / 6 * Math.PI;\n\t\t\t\tradius = outerRadius;\n\t\t\t\ttick.css('font-size', '140%');\n\t\t\t\ttick.css({\n\t\t\t\t\tleft: dialRadius + Math.sin(radian) * radius - tickRadius,\n\t\t\t\t\ttop: dialRadius - Math.cos(radian) * radius - tickRadius\n\t\t\t\t});\n\t\t\t\ttick.html(i === 0 ? '00' : i);\n\t\t\t\thoursView.append(tick);\n\t\t\t\ttick.on(mousedownEvent, mousedown);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (i = 0; i < 24; i += 1) {\n\t\t\t\ttick = tickTpl.clone();\n\t\t\t\tradian = i / 6 * Math.PI;\n\t\t\t\tvar inner = i > 0 && i < 13;\n\t\t\t\tradius = inner ? innerRadius : outerRadius;\n\t\t\t\ttick.css({\n\t\t\t\t\tleft: dialRadius + Math.sin(radian) * radius - tickRadius,\n\t\t\t\t\ttop: dialRadius - Math.cos(radian) * radius - tickRadius\n\t\t\t\t});\n\t\t\t\tif (inner)\n\t\t\t\t\ttick.css('font-size', '120%');\n\t\t\t\ttick.html(i === 0 ? '00' : i);\n\t\t\t\thoursView.append(tick);\n\t\t\t\ttick.on(mousedownEvent, mousedown);\n\t\t\t}\n\t\t}\n\n\t\t// Minutes view\n\t\tfor (i = 0; i < 60; i += 5) {\n\t\t\ttick = tickTpl.clone();\n\t\t\tradian = i / 30 * Math.PI;\n\t\t\ttick.css({\n\t\t\t\tleft: dialRadius + Math.sin(radian) * outerRadius - tickRadius,\n\t\t\t\ttop: dialRadius - Math.cos(radian) * outerRadius - tickRadius\n\t\t\t});\n\t\t\ttick.css('font-size', '140%');\n\t\t\ttick.html(leadingZero(i));\n\t\t\tminutesView.append(tick);\n\t\t\ttick.on(mousedownEvent, mousedown);\n\t\t}\n\n\t\t// Clicking on minutes view space\n\t\tplate.on(mousedownEvent, function(e) {\n\t\t\tif ($(e.target).closest('.clockpicker-tick').length === 0)\n\t\t\t\tmousedown(e, true);\n\t\t});\n\n\t\t// Mousedown or touchstart\n\t\tfunction mousedown(e, space) {\n\t\t\tvar offset = plate.offset(),\n\t\t\t\t\tisTouch = /^touch/.test(e.type),\n\t\t\t\t\tx0 = offset.left + dialRadius,\n\t\t\t\t\ty0 = offset.top + dialRadius,\n\t\t\t\t\tdx = (isTouch ? e.originalEvent.touches[0] : e).pageX - x0,\n\t\t\t\t\tdy = (isTouch ? e.originalEvent.touches[0] : e).pageY - y0,\n\t\t\t\t\tz = Math.sqrt(dx * dx + dy * dy),\n\t\t\t\t\tmoved = false;\n\n\t\t\t// When clicking on minutes view space, check the mouse position\n\t\t\tif (space && (z < outerRadius - tickRadius || z > outerRadius + tickRadius))\n\t\t\t\treturn;\n\t\t\te.preventDefault();\n\n\t\t\t// Set cursor style of body after 200ms\n\t\t\tvar movingTimer = setTimeout(function(){\n\t\t\t\tself.popover.addClass('clockpicker-moving');\n\t\t\t}, 200);\n\n\t\t\t// Place the canvas to top\n\t\t\tif (svgSupported)\n\t\t\t\tplate.append(self.canvas);\n\n\t\t\t// Clock\n\t\t\tself.setHand(dx, dy, !space, true);\n\n\t\t\t// Mousemove on document\n\t\t\t$doc.off(mousemoveEvent).on(mousemoveEvent, function(e){\n\t\t\t\te.preventDefault();\n\t\t\t\tvar isTouch = /^touch/.test(e.type),\n\t\t\t\t\t\tx = (isTouch ? e.originalEvent.touches[0] : e).pageX - x0,\n\t\t\t\t\t\ty = (isTouch ? e.originalEvent.touches[0] : e).pageY - y0;\n\t\t\t\tif (! moved && x === dx && y === dy)\n\t\t\t\t\t// Clicking in chrome on windows will trigger a mousemove event\n\t\t\t\t\treturn;\n\t\t\t\tmoved = true;\n\t\t\t\tself.setHand(x, y, false, true);\n\t\t\t});\n\n\t\t\t// Mouseup on document\n\t\t\t$doc.off(mouseupEvent).on(mouseupEvent, function(e) {\n\t\t\t\t$doc.off(mouseupEvent);\n\t\t\t\te.preventDefault();\n\t\t\t\tvar isTouch = /^touch/.test(e.type),\n\t\t\t\t\t\tx = (isTouch ? e.originalEvent.changedTouches[0] : e).pageX - x0,\n\t\t\t\t\t\ty = (isTouch ? e.originalEvent.changedTouches[0] : e).pageY - y0;\n\t\t\t\tif ((space || moved) && x === dx && y === dy)\n\t\t\t\t\tself.setHand(x, y);\n\t\t\t\tif (self.currentView === 'hours')\n\t\t\t\t\tself.toggleView('minutes', duration / 2);\n\t\t\t\telse\n\t\t\t\t\tif (options.autoclose) {\n\t\t\t\t\t\tself.minutesView.addClass('clockpicker-dial-out');\n\t\t\t\t\t\tsetTimeout(function(){\n\t\t\t\t\t\t\tself.done();\n\t\t\t\t\t\t}, duration / 2);\n\t\t\t\t\t}\n\t\t\t\tplate.prepend(canvas);\n\n\t\t\t\t// Reset cursor style of body\n\t\t\t\tclearTimeout(movingTimer);\n\t\t\t\tself.popover.removeClass('clockpicker-moving');\n\n\t\t\t\t// Unbind mousemove event\n\t\t\t\t$doc.off(mousemoveEvent);\n\t\t\t});\n\t\t}\n\n\t\tif (svgSupported) {\n\t\t\t// Draw clock hands and others\n\t\t\tvar canvas = popover.find('.clockpicker-canvas'),\n\t\t\t\t\tsvg = createSvgElement('svg');\n\t\t\tsvg.setAttribute('class', 'clockpicker-svg');\n\t\t\tsvg.setAttribute('width', diameter);\n\t\t\tsvg.setAttribute('height', diameter);\n\t\t\tvar g = createSvgElement('g');\n\t\t\tg.setAttribute('transform', 'translate(' + dialRadius + ',' + dialRadius + ')');\n\t\t\tvar bearing = createSvgElement('circle');\n\t\t\tbearing.setAttribute('class', 'clockpicker-canvas-bearing');\n\t\t\tbearing.setAttribute('cx', 0);\n\t\t\tbearing.setAttribute('cy', 0);\n\t\t\tbearing.setAttribute('r', 2);\n\t\t\tvar hand = createSvgElement('line');\n\t\t\thand.setAttribute('x1', 0);\n\t\t\thand.setAttribute('y1', 0);\n\t\t\tvar bg = createSvgElement('circle');\n\t\t\tbg.setAttribute('class', 'clockpicker-canvas-bg');\n\t\t\tbg.setAttribute('r', tickRadius);\n\t\t\tvar fg = createSvgElement('circle');\n\t\t\tfg.setAttribute('class', 'clockpicker-canvas-fg');\n\t\t\tfg.setAttribute('r', 5);\n\t\t\tg.appendChild(hand);\n\t\t\tg.appendChild(bg);\n\t\t\tg.appendChild(fg);\n\t\t\tg.appendChild(bearing);\n\t\t\tsvg.appendChild(g);\n\t\t\tcanvas.append(svg);\n\n\t\t\tthis.hand = hand;\n\t\t\tthis.bg = bg;\n\t\t\tthis.fg = fg;\n\t\t\tthis.bearing = bearing;\n\t\t\tthis.g = g;\n\t\t\tthis.canvas = canvas;\n\t\t}\n\n\t\traiseCallback(this.options.init);\n\t}\n\n\tfunction raiseCallback(callbackFunction) {\n\t\tif(callbackFunction && typeof callbackFunction === \"function\")\n\t\t\tcallbackFunction();\n\t}\n\n\t// Default options\n\tClockPicker.DEFAULTS = {\n\t\t'default': '',         // default time, 'now' or '13:14' e.g.\n\t\tfromnow: 0,            // set default time to * milliseconds from now (using with default = 'now')\n\t\tdonetext: 'Done',      // done button text\n\t\tautoclose: false,      // auto close when minute is selected\n\t\tampmclickable: false,  // set am/pm button on itself\n\t\tdarktheme: false,\t\t\t // set to dark theme\n\t\ttwelvehour: true,      // change to 12 hour AM/PM clock from 24 hour\n\t\tvibrate: true          // vibrate the device when dragging clock hand\n\t};\n\n\t// Show or hide popover\n\tClockPicker.prototype.toggle = function() {\n\t\tthis[this.isShown ? 'hide' : 'show']();\n\t};\n\n\t// Set popover position\n\tClockPicker.prototype.locate = function() {\n\t\tvar element = this.element,\n\t\t\t\tpopover = this.popover,\n\t\t\t\toffset = element.offset(),\n\t\t\t\twidth = element.outerWidth(),\n\t\t\t\theight = element.outerHeight(),\n\t\t\t\talign = this.options.align,\n\t\t\t\tself = this;\n\n\t\tpopover.show();\n\t};\n\n\t// Show popover\n\tClockPicker.prototype.show = function(e){\n\t\t// Not show again\n\t\tif (this.isShown) {\n\t\t\treturn;\n\t\t}\n\t\traiseCallback(this.options.beforeShow);\n\t\t$(':input').each(function() {\n\t\t\t$(this).attr('tabindex', -1);\n\t\t})\n\t\tvar self = this;\n\t\t// Initialize\n\t\tthis.input.blur();\n\t\tthis.popover.addClass('picker--opened');\n\t\tthis.input.addClass('picker__input picker__input--active');\n\t\t$(document.body).css('overflow', 'hidden');\n\t\tif (!this.isAppended) {\n\t\t\t// Append popover to body\n\t\t\tthis.popover.insertAfter(this.input);\n\t\t\tif(this.options.twelvehour) {\n\t\t\t\tthis.amOrPm = 'PM';\n\t\t\t\tif(!this.options.ampmclickable) {\n\t\t\t\t\tthis.amPmBlock.children('.am-button').removeClass('active');\n\t\t\t\t\tthis.amPmBlock.children('.pm-button').addClass('active');\n\t\t\t\t\tthis.spanAmPm.empty().append('PM');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis.spanAmPm.children('#click-pm').addClass(\"text-primary\");\n\t\t\t\t\tthis.spanAmPm.children('#click-am').removeClass(\"text-primary\");\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Reset position when resize\n\t\t\t$win.on('resize.clockpicker' + this.id, function() {\n\t\t\t\tif (self.isShown) {\n\t\t\t\t\tself.locate();\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.isAppended = true;\n\t\t}\n\t\t// Get the time\n\t\tvar value = ((this.input.prop('value') || this.options['default'] || '') + '').split(':');\n\t\tif(this.options.twelvehour && !(typeof value[1] === 'undefined')) {\n\t\t\tvalue[1] = value[1].replace(\"AM\", \"\").replace(\"PM\", \"\");\n\t\t}\n\t\tif (value[0] === 'now') {\n\t\t\tvar now = new Date(+ new Date() + this.options.fromnow);\n\t\t\tvalue = [\n\t\t\t\tnow.getHours(),\n\t\t\t\tnow.getMinutes()\n\t\t\t];\n\t\t}\n\t\tthis.hours = + value[0] || 0;\n\t\tthis.minutes = + value[1] || 0;\n\t\tthis.spanHours.html(leadingZero(this.hours));\n\t\tthis.spanMinutes.html(leadingZero(this.minutes));\n\t\t// Toggle to hours view\n\t\tthis.toggleView('hours');\n\t\t// Set position\n\t\tthis.locate();\n\t\tthis.isShown = true;\n\t\t// Hide when clicking or tabbing on any element except the clock and input\n\t\t$doc.on('click.clockpicker.' + this.id + ' focusin.clockpicker.' + this.id, function(e) {\n\t\t\tvar target = $(e.target);\n\t\t\tif (target.closest(self.popover.find('.picker__wrap')).length === 0 && target.closest(self.input).length === 0)\n\t\t\t\tself.hide();\n\t\t});\n\t\t// Hide when ESC is pressed\n\t\t$doc.on('keyup.clockpicker.' + this.id, function(e){\n\t\t\tif (e.keyCode === 27)\n\t\t\t\tself.hide();\n\t\t});\n\t\traiseCallback(this.options.afterShow);\n\t};\n\t// Hide popover\n\tClockPicker.prototype.hide = function() {\n\t\traiseCallback(this.options.beforeHide);\n\t\tthis.input.removeClass('picker__input picker__input--active');\n\t\tthis.popover.removeClass('picker--opened');\n\t\t$(document.body).css('overflow', 'visible');\n\t\tthis.isShown = false;\n\t\t$(':input').each(function(index) {\n\t\t\t$(this).attr('tabindex', index + 1);\n\t\t});\n\t\t// Unbinding events on document\n\t\t$doc.off('click.clockpicker.' + this.id + ' focusin.clockpicker.' + this.id);\n\t\t$doc.off('keyup.clockpicker.' + this.id);\n\t\tthis.popover.hide();\n\t\traiseCallback(this.options.afterHide);\n\t};\n\t// Toggle to hours or minutes view\n\tClockPicker.prototype.toggleView = function(view, delay) {\n\t\tvar raiseAfterHourSelect = false;\n\t\tif (view === 'minutes' && $(this.hoursView).css(\"visibility\") === \"visible\") {\n\t\t\traiseCallback(this.options.beforeHourSelect);\n\t\t\traiseAfterHourSelect = true;\n\t\t}\n\t\tvar isHours = view === 'hours',\n\t\t\t\tnextView = isHours ? this.hoursView : this.minutesView,\n\t\t\t\thideView = isHours ? this.minutesView : this.hoursView;\n\t\tthis.currentView = view;\n\n\t\tthis.spanHours.toggleClass('text-primary', isHours);\n\t\tthis.spanMinutes.toggleClass('text-primary', ! isHours);\n\n\t\t// Let's make transitions\n\t\thideView.addClass('clockpicker-dial-out');\n\t\tnextView.css('visibility', 'visible').removeClass('clockpicker-dial-out');\n\n\t\t// Reset clock hand\n\t\tthis.resetClock(delay);\n\n\t\t// After transitions ended\n\t\tclearTimeout(this.toggleViewTimer);\n\t\tthis.toggleViewTimer = setTimeout(function() {\n\t\t\thideView.css('visibility', 'hidden');\n\t\t}, duration);\n\n\t\tif (raiseAfterHourSelect)\n\t\t\traiseCallback(this.options.afterHourSelect);\n\t};\n\n\t// Reset clock hand\n\tClockPicker.prototype.resetClock = function(delay) {\n\t\tvar view = this.currentView,\n\t\t\t\tvalue = this[view],\n\t\t\t\tisHours = view === 'hours',\n\t\t\t\tunit = Math.PI / (isHours ? 6 : 30),\n\t\t\t\tradian = value * unit,\n\t\t\t\tradius = isHours && value > 0 && value < 13 ? innerRadius : outerRadius,\n\t\t\t\tx = Math.sin(radian) * radius,\n\t\t\t\ty = - Math.cos(radian) * radius,\n\t\t\t\tself = this;\n\n\t\tif(svgSupported && delay) {\n\t\t\tself.canvas.addClass('clockpicker-canvas-out');\n\t\t\tsetTimeout(function(){\n\t\t\t\tself.canvas.removeClass('clockpicker-canvas-out');\n\t\t\t\tself.setHand(x, y);\n\t\t\t}, delay);\n\t\t} else\n\t\t\tthis.setHand(x, y);\n\t};\n\n\t// Set clock hand to (x, y)\n\tClockPicker.prototype.setHand = function(x, y, roundBy5, dragging) {\n\t\tvar radian = Math.atan2(x, - y),\n\t\t\t\tisHours = this.currentView === 'hours',\n\t\t\t\tunit = Math.PI / (isHours || roundBy5? 6 : 30),\n\t\t\t\tz = Math.sqrt(x * x + y * y),\n\t\t\t\toptions = this.options,\n\t\t\t\tinner = isHours && z < (outerRadius + innerRadius) / 2,\n\t\t\t\tradius = inner ? innerRadius : outerRadius,\n\t\t\t\tvalue;\n\n\t\tif (options.twelvehour)\n\t\t\tradius = outerRadius;\n\n\t\t// Radian should in range [0, 2PI]\n\t\tif (radian < 0)\n\t\t\tradian = Math.PI * 2 + radian;\n\n\t\t// Get the round value\n\t\tvalue = Math.round(radian / unit);\n\n\t\t// Get the round radian\n\t\tradian = value * unit;\n\n\t\t// Correct the hours or minutes\n\t\tif(options.twelvehour) {\n\t\t\tif(isHours) {\n\t\t\t\tif(value === 0)\n\t\t\t\t\tvalue = 12;\n\t\t\t} else {\n\t\t\t\tif(roundBy5)\n\t\t\t\t\tvalue *= 5;\n\t\t\t\tif(value === 60)\n\t\t\t\t\tvalue = 0;\n\t\t\t}\n\t\t} else {\n\t\t\tif(isHours) {\n\t\t\t\tif(value === 12)\n\t\t\t\t\tvalue = 0;\n\t\t\t\tvalue = inner ? (value === 0 ? 12 : value) : value === 0 ? 0 : value + 12;\n\t\t\t} else {\n\t\t\t\tif(roundBy5)\n\t\t\t\t\tvalue *= 5;\n\t\t\t\tif(value === 60)\n\t\t\t\t\tvalue = 0;\n\t\t\t}\n\t\t}\n\t\tif (isHours)\n\t\t\tthis.fg.setAttribute('class', 'clockpicker-canvas-fg');\n\t\telse {\n\t\t\tif(value % 5 == 0)\n\t\t\t\tthis.fg.setAttribute('class', 'clockpicker-canvas-fg');\n\t\t\telse\n\t\t\t\tthis.fg.setAttribute('class', 'clockpicker-canvas-fg active');\n\t\t}\n\n\t\t// Once hours or minutes changed, vibrate the device\n\t\tif (this[this.currentView] !== value)\n\t\t\tif (vibrate && this.options.vibrate)\n\t\t\t\t// Do not vibrate too frequently\n\t\t\t\tif (! this.vibrateTimer) {\n\t\t\t\t\tnavigator[vibrate](10);\n\t\t\t\t\tthis.vibrateTimer = setTimeout($.proxy(function(){\n\t\t\t\t\t\tthis.vibrateTimer = null;\n\t\t\t\t\t}, this), 100);\n\t\t\t\t}\n\n\t\tthis[this.currentView] = value;\n\t\tthis[isHours ? 'spanHours' : 'spanMinutes'].html(leadingZero(value));\n\n\t\t// If svg is not supported, just add an active class to the tick\n\t\tif (! svgSupported) {\n\t\t\tthis[isHours ? 'hoursView' : 'minutesView'].find('.clockpicker-tick').each(function(){\n\t\t\t\tvar tick = $(this);\n\t\t\t\ttick.toggleClass('active', value === + tick.html());\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\t// Place clock hand at the top when dragging\n\t\tif (dragging || (! isHours && value % 5)) {\n\t\t\tthis.g.insertBefore(this.hand, this.bearing);\n\t\t\tthis.g.insertBefore(this.bg, this.fg);\n\t\t\tthis.bg.setAttribute('class', 'clockpicker-canvas-bg clockpicker-canvas-bg-trans');\n\t\t} else {\n\t\t\t// Or place it at the bottom\n\t\t\tthis.g.insertBefore(this.hand, this.bg);\n\t\t\tthis.g.insertBefore(this.fg, this.bg);\n\t\t\tthis.bg.setAttribute('class', 'clockpicker-canvas-bg');\n\t\t}\n\n\t\t// Set clock hand and others' position\n\t\tvar cx1 = Math.sin(radian) * (radius - tickRadius),\n\t\t\t  cy1 = - Math.cos(radian) * (radius - tickRadius),\n\t\t    cx2 = Math.sin(radian) * radius,\n\t\t\t  cy2 = - Math.cos(radian) * radius;\n\t\tthis.hand.setAttribute('x2', cx1);\n\t\tthis.hand.setAttribute('y2', cy1);\n\t\tthis.bg.setAttribute('cx', cx2);\n\t\tthis.bg.setAttribute('cy', cy2);\n\t\tthis.fg.setAttribute('cx', cx2);\n\t\tthis.fg.setAttribute('cy', cy2);\n\t};\n\n\t// Hours and minutes are selected\n\tClockPicker.prototype.done = function() {\n\t\traiseCallback(this.options.beforeDone);\n\t\tthis.hide();\n\t\tthis.label.addClass('active');\n\n\t\tvar last = this.input.prop('value'),\n\t\t\t\tvalue = leadingZero(this.hours) + ':' + leadingZero(this.minutes);\n\t\tif (this.options.twelvehour)\n\t\t\tvalue = value + this.amOrPm;\n\n\t\tthis.input.prop('value', value);\n\t\tif(value !== last) {\n\t\t\tthis.input.triggerHandler('change');\n\t\t\tif(!this.isInput)\n\t\t\t\tthis.element.trigger('change');\n\t\t}\n\n\t\tif(this.options.autoclose)\n\t\t\tthis.input.trigger('blur');\n\n\t\traiseCallback(this.options.afterDone);\n\t};\n\n\t// Remove clockpicker from input\n\tClockPicker.prototype.remove = function() {\n\t\tthis.element.removeData('clockpicker');\n\t\tthis.input.off('focus.clockpicker click.clockpicker');\n\t\tif (this.isShown)\n\t\t\tthis.hide();\n\t\tif (this.isAppended) {\n\t\t\t$win.off('resize.clockpicker' + this.id);\n\t\t\tthis.popover.remove();\n\t\t}\n\t};\n\n\t// Extends $.fn.clockpicker\n\t$.fn.pickatime = function(option){\n\t\tvar args = Array.prototype.slice.call(arguments, 1);\n\t\treturn this.each(function(){\n\t\t\tvar $this = $(this),\n\t\t\t\t\tdata = $this.data('clockpicker');\n\t\t\tif (!data) {\n\t\t\t\tvar options = $.extend({}, ClockPicker.DEFAULTS, $this.data(), typeof option == 'object' && option);\n\t\t\t\t$this.data('clockpicker', new ClockPicker($this, options));\n\t\t\t} else {\n\t\t\t\t// Manual operatsions. show, hide, remove, e.g.\n\t\t\t\tif (typeof data[option] === 'function')\n\t\t\t\t\tdata[option].apply(data, args);\n\t\t\t}\n\t\t});\n\t};\n\n    //A24Mod this entire clear function was added by us\n    ClockPicker.prototype.a24Clear = function() {\n        raiseCallback(this.options.beforeDone);\n        this.hide();\n        this.label.addClass(\"active\");\n\n        this.input.prop(\"value\", \"\");\n        this.input.triggerHandler(\"change\");\n\n        if (!this.isInput) {\n            this.element.trigger(\"change\");\n        }\n\n        if (this.options.autoclose) {\n            this.input.trigger(\"blur\");\n        }\n\n        raiseCallback(this.options.afterDone);\n    };\n}());\n","/* jSticky Plugin\r\n * =============\r\n * Author: Andrew Henderson (@AndrewHenderson)\r\n * Contributor: Mike Street (@mikestreety)\r\n * Date: 9/7/2012\r\n * Update: 09/20/2016\r\n * Website: http://github.com/andrewhenderson/jsticky/\r\n * Description: A jQuery plugin that keeps select DOM\r\n * element(s) in view while scrolling the page.\r\n */\r\n\r\n;(function($) {\r\n\r\n  $.fn.sticky = function(options) {\r\n    var defaults = {\r\n      topSpacing: 0, // No spacing by default\r\n      zIndex: '', // No default z-index\r\n      stopper: '.sticky-stopper', // Default stopper class, also accepts number value\r\n      stickyClass: false // Class applied to element when it's stuck\r\n    };\r\n    var settings = $.extend({}, defaults, options); // Accepts custom stopper id or class\r\n\r\n    // Checks if custom z-index was defined\r\n    function checkIndex() {\r\n      if (typeof settings.zIndex == 'number') {\r\n        return true;\r\n      } else {\r\n        return false;\r\n      }\r\n    }\r\n\r\n    var hasIndex = checkIndex(); // True or false\r\n\r\n    // Checks if a stopper exists in the DOM or number defined\r\n    function checkStopper() {\r\n      if (0 < $(settings.stopper).length || typeof settings.stopper === 'number') {\r\n        return true;\r\n      } else {\r\n        return false;\r\n      }\r\n    }\r\n    var hasStopper = checkStopper(); // True or false\r\n\r\n    return this.each(function() {\r\n\r\n      var $this = $(this);\r\n      var thisHeight = $this.outerHeight();\r\n      var thisWidth = $this.outerWidth();\r\n      var topSpacing = settings.topSpacing;\r\n      var zIndex = settings.zIndex;\r\n      var pushPoint = $this.offset().top - topSpacing; // Point at which the sticky element starts pushing\r\n      var placeholder = $('<div></div>').width(thisWidth).height(thisHeight).addClass('sticky-placeholder'); // Cache a clone sticky element\r\n      var stopper = settings.stopper;\r\n      var $window = $(window);\r\n\r\n      function stickyScroll() {\r\n\r\n        var windowTop  = $window.scrollTop(); // Check window's scroll position\r\n        var stopPoint = stopper;\r\n        var parentWidth = $this.parent().width();\r\n\r\n        placeholder.width(parentWidth)\r\n\r\n        if ( hasStopper && typeof stopper === 'string' ) {\r\n          var stopperTop = $(stopper).offset().top;\r\n          stopPoint  = (stopperTop - thisHeight) - topSpacing;\r\n        }\r\n\r\n        if (pushPoint < windowTop) {\r\n          // Create a placeholder for sticky element to occupy vertical real estate\r\n          if(settings.stickyClass)\r\n            $this.addClass(settings.stickyClass);\r\n\r\n          $this.after(placeholder).css({\r\n            position: 'fixed',\r\n            top: topSpacing,\r\n            width: parentWidth\r\n          });\r\n\r\n          if (hasIndex) {\r\n            $this.css({\r\n              zIndex: zIndex\r\n            });\r\n          }\r\n\r\n          if (hasStopper) {\r\n            if (stopPoint < windowTop) {\r\n              var diff = (stopPoint - windowTop) + topSpacing;\r\n              $this.css({\r\n                top: diff\r\n              });\r\n            }\r\n          }\r\n        } else {\r\n          if(settings.stickyClass)\r\n            $this.removeClass(settings.stickyClass);\r\n\r\n          $this.css({\r\n            position: 'static',\r\n            top: null,\r\n            left: null,\r\n            width: 'auto'\r\n          });\r\n\r\n          placeholder.remove();\r\n        }\r\n      }\r\n\r\n      if($window.innerHeight() > thisHeight) {\r\n\r\n        $window.bind('scroll', stickyScroll);\r\n        $window.bind('load', stickyScroll);\r\n        $window.bind('resize', stickyScroll);\r\n      }\r\n    });\r\n  };\r\n})(jQuery);","/* perfect-scrollbar v0.7.1 */\r\n!function t(e,n,r){function o(i,s){if(!n[i]){if(!e[i]){var a=\"function\"==typeof require&&require;if(!s&&a)return a(i,!0);if(l)return l(i,!0);var c=new Error(\"Cannot find module '\"+i+\"'\");throw c.code=\"MODULE_NOT_FOUND\",c}var u=n[i]={exports:{}};e[i][0].call(u.exports,function(t){var n=e[i][1][t];return o(n?n:t)},u,u.exports,t,e,n,r)}return n[i].exports}for(var l=\"function\"==typeof require&&require,i=0;i<r.length;i++)o(r[i]);return o}({1:[function(t,e,n){\"use strict\";var r=t(\"../main\");\"function\"==typeof define&&define.amd?define(r):(window.PerfectScrollbar=r,\"undefined\"==typeof window.Ps&&(window.Ps=r))},{\"../main\":7}],2:[function(t,e,n){\"use strict\";function r(t,e){var n=t.className.split(\" \");n.indexOf(e)<0&&n.push(e),t.className=n.join(\" \")}function o(t,e){var n=t.className.split(\" \"),r=n.indexOf(e);r>=0&&n.splice(r,1),t.className=n.join(\" \")}n.add=function(t,e){t.classList?t.classList.add(e):r(t,e)},n.remove=function(t,e){t.classList?t.classList.remove(e):o(t,e)},n.list=function(t){return t.classList?Array.prototype.slice.apply(t.classList):t.className.split(\" \")}},{}],3:[function(t,e,n){\"use strict\";function r(t,e){return window.getComputedStyle(t)[e]}function o(t,e,n){return\"number\"==typeof n&&(n=n.toString()+\"px\"),t.style[e]=n,t}function l(t,e){for(var n in e){var r=e[n];\"number\"==typeof r&&(r=r.toString()+\"px\"),t.style[n]=r}return t}var i={};i.e=function(t,e){var n=document.createElement(t);return n.className=e,n},i.appendTo=function(t,e){return e.appendChild(t),t},i.css=function(t,e,n){return\"object\"==typeof e?l(t,e):\"undefined\"==typeof n?r(t,e):o(t,e,n)},i.matches=function(t,e){return\"undefined\"!=typeof t.matches?t.matches(e):\"undefined\"!=typeof t.matchesSelector?t.matchesSelector(e):\"undefined\"!=typeof t.webkitMatchesSelector?t.webkitMatchesSelector(e):\"undefined\"!=typeof t.mozMatchesSelector?t.mozMatchesSelector(e):\"undefined\"!=typeof t.msMatchesSelector?t.msMatchesSelector(e):void 0},i.remove=function(t){\"undefined\"!=typeof t.remove?t.remove():t.parentNode&&t.parentNode.removeChild(t)},i.queryChildren=function(t,e){return Array.prototype.filter.call(t.childNodes,function(t){return i.matches(t,e)})},e.exports=i},{}],4:[function(t,e,n){\"use strict\";var r=function(t){this.element=t,this.events={}};r.prototype.bind=function(t,e){\"undefined\"==typeof this.events[t]&&(this.events[t]=[]),this.events[t].push(e),this.element.addEventListener(t,e,!1)},r.prototype.unbind=function(t,e){var n=\"undefined\"!=typeof e;this.events[t]=this.events[t].filter(function(r){return!(!n||r===e)||(this.element.removeEventListener(t,r,!1),!1)},this)},r.prototype.unbindAll=function(){for(var t in this.events)this.unbind(t)};var o=function(){this.eventElements=[]};o.prototype.eventElement=function(t){var e=this.eventElements.filter(function(e){return e.element===t})[0];return\"undefined\"==typeof e&&(e=new r(t),this.eventElements.push(e)),e},o.prototype.bind=function(t,e,n){this.eventElement(t).bind(e,n)},o.prototype.unbind=function(t,e,n){this.eventElement(t).unbind(e,n)},o.prototype.unbindAll=function(){for(var t=0;t<this.eventElements.length;t++)this.eventElements[t].unbindAll()},o.prototype.once=function(t,e,n){var r=this.eventElement(t),o=function(t){r.unbind(e,o),n(t)};r.bind(e,o)},e.exports=o},{}],5:[function(t,e,n){\"use strict\";e.exports=function(){function t(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return function(){return t()+t()+\"-\"+t()+\"-\"+t()+\"-\"+t()+\"-\"+t()+t()+t()}}()},{}],6:[function(t,e,n){\"use strict\";function r(t){return function(e,n){t(e,\"ps--in-scrolling\"),\"undefined\"!=typeof n?t(e,\"ps--\"+n):(t(e,\"ps--x\"),t(e,\"ps--y\"))}}var o=t(\"./class\"),l=t(\"./dom\"),i=n.toInt=function(t){return parseInt(t,10)||0},s=n.clone=function(t){if(t){if(Array.isArray(t))return t.map(s);if(\"object\"==typeof t){var e={};for(var n in t)e[n]=s(t[n]);return e}return t}return null};n.extend=function(t,e){var n=s(t);for(var r in e)n[r]=s(e[r]);return n},n.isEditable=function(t){return l.matches(t,\"input,[contenteditable]\")||l.matches(t,\"select,[contenteditable]\")||l.matches(t,\"textarea,[contenteditable]\")||l.matches(t,\"button,[contenteditable]\")},n.removePsClasses=function(t){for(var e=o.list(t),n=0;n<e.length;n++){var r=e[n];0===r.indexOf(\"ps-\")&&o.remove(t,r)}},n.outerWidth=function(t){return i(l.css(t,\"width\"))+i(l.css(t,\"paddingLeft\"))+i(l.css(t,\"paddingRight\"))+i(l.css(t,\"borderLeftWidth\"))+i(l.css(t,\"borderRightWidth\"))},n.startScrolling=r(o.add),n.stopScrolling=r(o.remove),n.env={isWebKit:\"undefined\"!=typeof document&&\"WebkitAppearance\"in document.documentElement.style,supportsTouch:\"undefined\"!=typeof window&&(\"ontouchstart\"in window||window.DocumentTouch&&document instanceof window.DocumentTouch),supportsIePointer:\"undefined\"!=typeof window&&null!==window.navigator.msMaxTouchPoints}},{\"./class\":2,\"./dom\":3}],7:[function(t,e,n){\"use strict\";var r=t(\"./plugin/destroy\"),o=t(\"./plugin/initialize\"),l=t(\"./plugin/update\");e.exports={initialize:o,update:l,destroy:r}},{\"./plugin/destroy\":9,\"./plugin/initialize\":17,\"./plugin/update\":21}],8:[function(t,e,n){\"use strict\";e.exports={handlers:[\"click-rail\",\"drag-scrollbar\",\"keyboard\",\"wheel\",\"touch\"],maxScrollbarLength:null,minScrollbarLength:null,scrollXMarginOffset:0,scrollYMarginOffset:0,suppressScrollX:!1,suppressScrollY:!1,swipePropagation:!0,swipeEasing:!0,useBothWheelAxes:!1,wheelPropagation:!1,wheelSpeed:1,theme:\"default\"}},{}],9:[function(t,e,n){\"use strict\";var r=t(\"../lib/helper\"),o=t(\"../lib/dom\"),l=t(\"./instances\");e.exports=function(t){var e=l.get(t);e&&(e.event.unbindAll(),o.remove(e.scrollbarX),o.remove(e.scrollbarY),o.remove(e.scrollbarXRail),o.remove(e.scrollbarYRail),r.removePsClasses(t),l.remove(t))}},{\"../lib/dom\":3,\"../lib/helper\":6,\"./instances\":18}],10:[function(t,e,n){\"use strict\";function r(t,e){function n(t){return t.getBoundingClientRect()}var r=function(t){t.stopPropagation()};e.event.bind(e.scrollbarY,\"click\",r),e.event.bind(e.scrollbarYRail,\"click\",function(r){var o=r.pageY-window.pageYOffset-n(e.scrollbarYRail).top,s=o>e.scrollbarYTop?1:-1;i(t,\"top\",t.scrollTop+s*e.containerHeight),l(t),r.stopPropagation()}),e.event.bind(e.scrollbarX,\"click\",r),e.event.bind(e.scrollbarXRail,\"click\",function(r){var o=r.pageX-window.pageXOffset-n(e.scrollbarXRail).left,s=o>e.scrollbarXLeft?1:-1;i(t,\"left\",t.scrollLeft+s*e.containerWidth),l(t),r.stopPropagation()})}var o=t(\"../instances\"),l=t(\"../update-geometry\"),i=t(\"../update-scroll\");e.exports=function(t){var e=o.get(t);r(t,e)}},{\"../instances\":18,\"../update-geometry\":19,\"../update-scroll\":20}],11:[function(t,e,n){\"use strict\";function r(t,e){function n(n){var o=r+n*e.railXRatio,i=Math.max(0,e.scrollbarXRail.getBoundingClientRect().left)+e.railXRatio*(e.railXWidth-e.scrollbarXWidth);o<0?e.scrollbarXLeft=0:o>i?e.scrollbarXLeft=i:e.scrollbarXLeft=o;var s=l.toInt(e.scrollbarXLeft*(e.contentWidth-e.containerWidth)/(e.containerWidth-e.railXRatio*e.scrollbarXWidth))-e.negativeScrollAdjustment;c(t,\"left\",s)}var r=null,o=null,s=function(e){n(e.pageX-o),a(t),e.stopPropagation(),e.preventDefault()},u=function(){l.stopScrolling(t,\"x\"),e.event.unbind(e.ownerDocument,\"mousemove\",s)};e.event.bind(e.scrollbarX,\"mousedown\",function(n){o=n.pageX,r=l.toInt(i.css(e.scrollbarX,\"left\"))*e.railXRatio,l.startScrolling(t,\"x\"),e.event.bind(e.ownerDocument,\"mousemove\",s),e.event.once(e.ownerDocument,\"mouseup\",u),n.stopPropagation(),n.preventDefault()})}function o(t,e){function n(n){var o=r+n*e.railYRatio,i=Math.max(0,e.scrollbarYRail.getBoundingClientRect().top)+e.railYRatio*(e.railYHeight-e.scrollbarYHeight);o<0?e.scrollbarYTop=0:o>i?e.scrollbarYTop=i:e.scrollbarYTop=o;var s=l.toInt(e.scrollbarYTop*(e.contentHeight-e.containerHeight)/(e.containerHeight-e.railYRatio*e.scrollbarYHeight));c(t,\"top\",s)}var r=null,o=null,s=function(e){n(e.pageY-o),a(t),e.stopPropagation(),e.preventDefault()},u=function(){l.stopScrolling(t,\"y\"),e.event.unbind(e.ownerDocument,\"mousemove\",s)};e.event.bind(e.scrollbarY,\"mousedown\",function(n){o=n.pageY,r=l.toInt(i.css(e.scrollbarY,\"top\"))*e.railYRatio,l.startScrolling(t,\"y\"),e.event.bind(e.ownerDocument,\"mousemove\",s),e.event.once(e.ownerDocument,\"mouseup\",u),n.stopPropagation(),n.preventDefault()})}var l=t(\"../../lib/helper\"),i=t(\"../../lib/dom\"),s=t(\"../instances\"),a=t(\"../update-geometry\"),c=t(\"../update-scroll\");e.exports=function(t){var e=s.get(t);r(t,e),o(t,e)}},{\"../../lib/dom\":3,\"../../lib/helper\":6,\"../instances\":18,\"../update-geometry\":19,\"../update-scroll\":20}],12:[function(t,e,n){\"use strict\";function r(t,e){function n(n,r){var o=t.scrollTop;if(0===n){if(!e.scrollbarYActive)return!1;if(0===o&&r>0||o>=e.contentHeight-e.containerHeight&&r<0)return!e.settings.wheelPropagation}var l=t.scrollLeft;if(0===r){if(!e.scrollbarXActive)return!1;if(0===l&&n<0||l>=e.contentWidth-e.containerWidth&&n>0)return!e.settings.wheelPropagation}return!0}var r=!1;e.event.bind(t,\"mouseenter\",function(){r=!0}),e.event.bind(t,\"mouseleave\",function(){r=!1});var i=!1;e.event.bind(e.ownerDocument,\"keydown\",function(c){if(!(c.isDefaultPrevented&&c.isDefaultPrevented()||c.defaultPrevented)){var u=l.matches(e.scrollbarX,\":focus\")||l.matches(e.scrollbarY,\":focus\");if(r||u){var d=document.activeElement?document.activeElement:e.ownerDocument.activeElement;if(d){if(\"IFRAME\"===d.tagName)d=d.contentDocument.activeElement;else for(;d.shadowRoot;)d=d.shadowRoot.activeElement;if(o.isEditable(d))return}var p=0,f=0;switch(c.which){case 37:p=c.metaKey?-e.contentWidth:c.altKey?-e.containerWidth:-30;break;case 38:f=c.metaKey?e.contentHeight:c.altKey?e.containerHeight:30;break;case 39:p=c.metaKey?e.contentWidth:c.altKey?e.containerWidth:30;break;case 40:f=c.metaKey?-e.contentHeight:c.altKey?-e.containerHeight:-30;break;case 33:f=90;break;case 32:f=c.shiftKey?90:-90;break;case 34:f=-90;break;case 35:f=c.ctrlKey?-e.contentHeight:-e.containerHeight;break;case 36:f=c.ctrlKey?t.scrollTop:e.containerHeight;break;default:return}a(t,\"top\",t.scrollTop-f),a(t,\"left\",t.scrollLeft+p),s(t),i=n(p,f),i&&c.preventDefault()}}})}var o=t(\"../../lib/helper\"),l=t(\"../../lib/dom\"),i=t(\"../instances\"),s=t(\"../update-geometry\"),a=t(\"../update-scroll\");e.exports=function(t){var e=i.get(t);r(t,e)}},{\"../../lib/dom\":3,\"../../lib/helper\":6,\"../instances\":18,\"../update-geometry\":19,\"../update-scroll\":20}],13:[function(t,e,n){\"use strict\";function r(t,e){function n(n,r){var o=t.scrollTop;if(0===n){if(!e.scrollbarYActive)return!1;if(0===o&&r>0||o>=e.contentHeight-e.containerHeight&&r<0)return!e.settings.wheelPropagation}var l=t.scrollLeft;if(0===r){if(!e.scrollbarXActive)return!1;if(0===l&&n<0||l>=e.contentWidth-e.containerWidth&&n>0)return!e.settings.wheelPropagation}return!0}function r(t){var e=t.deltaX,n=-1*t.deltaY;return\"undefined\"!=typeof e&&\"undefined\"!=typeof n||(e=-1*t.wheelDeltaX/6,n=t.wheelDeltaY/6),t.deltaMode&&1===t.deltaMode&&(e*=10,n*=10),e!==e&&n!==n&&(e=0,n=t.wheelDelta),t.shiftKey?[-n,-e]:[e,n]}function o(e,n){var r=t.querySelector(\"textarea:hover, select[multiple]:hover, .ps-child:hover\");if(r){var o=window.getComputedStyle(r),l=[o.overflow,o.overflowX,o.overflowY].join(\"\");if(!l.match(/(scroll|auto)/))return!1;var i=r.scrollHeight-r.clientHeight;if(i>0&&!(0===r.scrollTop&&n>0||r.scrollTop===i&&n<0))return!0;var s=r.scrollLeft-r.clientWidth;if(s>0&&!(0===r.scrollLeft&&e<0||r.scrollLeft===s&&e>0))return!0}return!1}function s(s){var c=r(s),u=c[0],d=c[1];o(u,d)||(a=!1,e.settings.useBothWheelAxes?e.scrollbarYActive&&!e.scrollbarXActive?(d?i(t,\"top\",t.scrollTop-d*e.settings.wheelSpeed):i(t,\"top\",t.scrollTop+u*e.settings.wheelSpeed),a=!0):e.scrollbarXActive&&!e.scrollbarYActive&&(u?i(t,\"left\",t.scrollLeft+u*e.settings.wheelSpeed):i(t,\"left\",t.scrollLeft-d*e.settings.wheelSpeed),a=!0):(i(t,\"top\",t.scrollTop-d*e.settings.wheelSpeed),i(t,\"left\",t.scrollLeft+u*e.settings.wheelSpeed)),l(t),a=a||n(u,d),a&&(s.stopPropagation(),s.preventDefault()))}var a=!1;\"undefined\"!=typeof window.onwheel?e.event.bind(t,\"wheel\",s):\"undefined\"!=typeof window.onmousewheel&&e.event.bind(t,\"mousewheel\",s)}var o=t(\"../instances\"),l=t(\"../update-geometry\"),i=t(\"../update-scroll\");e.exports=function(t){var e=o.get(t);r(t,e)}},{\"../instances\":18,\"../update-geometry\":19,\"../update-scroll\":20}],14:[function(t,e,n){\"use strict\";function r(t,e){e.event.bind(t,\"scroll\",function(){l(t)})}var o=t(\"../instances\"),l=t(\"../update-geometry\");e.exports=function(t){var e=o.get(t);r(t,e)}},{\"../instances\":18,\"../update-geometry\":19}],15:[function(t,e,n){\"use strict\";function r(t,e){function n(){var t=window.getSelection?window.getSelection():document.getSelection?document.getSelection():\"\";return 0===t.toString().length?null:t.getRangeAt(0).commonAncestorContainer}function r(){c||(c=setInterval(function(){return l.get(t)?(s(t,\"top\",t.scrollTop+u.top),s(t,\"left\",t.scrollLeft+u.left),void i(t)):void clearInterval(c)},50))}function a(){c&&(clearInterval(c),c=null),o.stopScrolling(t)}var c=null,u={top:0,left:0},d=!1;e.event.bind(e.ownerDocument,\"selectionchange\",function(){t.contains(n())?d=!0:(d=!1,a())}),e.event.bind(window,\"mouseup\",function(){d&&(d=!1,a())}),e.event.bind(window,\"keyup\",function(){d&&(d=!1,a())}),e.event.bind(window,\"mousemove\",function(e){if(d){var n={x:e.pageX,y:e.pageY},l={left:t.offsetLeft,right:t.offsetLeft+t.offsetWidth,top:t.offsetTop,bottom:t.offsetTop+t.offsetHeight};n.x<l.left+3?(u.left=-5,o.startScrolling(t,\"x\")):n.x>l.right-3?(u.left=5,o.startScrolling(t,\"x\")):u.left=0,n.y<l.top+3?(l.top+3-n.y<5?u.top=-5:u.top=-20,o.startScrolling(t,\"y\")):n.y>l.bottom-3?(n.y-l.bottom+3<5?u.top=5:u.top=20,o.startScrolling(t,\"y\")):u.top=0,0===u.top&&0===u.left?a():r()}})}var o=t(\"../../lib/helper\"),l=t(\"../instances\"),i=t(\"../update-geometry\"),s=t(\"../update-scroll\");e.exports=function(t){var e=l.get(t);r(t,e)}},{\"../../lib/helper\":6,\"../instances\":18,\"../update-geometry\":19,\"../update-scroll\":20}],16:[function(t,e,n){\"use strict\";function r(t,e,n,r){function o(n,r){var o=t.scrollTop,l=t.scrollLeft,i=Math.abs(n),s=Math.abs(r);if(s>i){if(r<0&&o===e.contentHeight-e.containerHeight||r>0&&0===o)return!e.settings.swipePropagation}else if(i>s&&(n<0&&l===e.contentWidth-e.containerWidth||n>0&&0===l))return!e.settings.swipePropagation;return!0}function a(e,n){s(t,\"top\",t.scrollTop-n),s(t,\"left\",t.scrollLeft-e),i(t)}function c(){w=!0}function u(){w=!1}function d(t){return t.targetTouches?t.targetTouches[0]:t}function p(t){return!(!t.targetTouches||1!==t.targetTouches.length)||!(!t.pointerType||\"mouse\"===t.pointerType||t.pointerType===t.MSPOINTER_TYPE_MOUSE)}function f(t){if(p(t)){Y=!0;var e=d(t);g.pageX=e.pageX,g.pageY=e.pageY,v=(new Date).getTime(),null!==y&&clearInterval(y),t.stopPropagation()}}function h(t){if(!Y&&e.settings.swipePropagation&&f(t),!w&&Y&&p(t)){var n=d(t),r={pageX:n.pageX,pageY:n.pageY},l=r.pageX-g.pageX,i=r.pageY-g.pageY;a(l,i),g=r;var s=(new Date).getTime(),c=s-v;c>0&&(m.x=l/c,m.y=i/c,v=s),o(l,i)&&(t.stopPropagation(),t.preventDefault())}}function b(){!w&&Y&&(Y=!1,e.settings.swipeEasing&&(clearInterval(y),y=setInterval(function(){return l.get(t)&&(m.x||m.y)?Math.abs(m.x)<.01&&Math.abs(m.y)<.01?void clearInterval(y):(a(30*m.x,30*m.y),m.x*=.8,void(m.y*=.8)):void clearInterval(y)},10)))}var g={},v=0,m={},y=null,w=!1,Y=!1;n?(e.event.bind(window,\"touchstart\",c),e.event.bind(window,\"touchend\",u),e.event.bind(t,\"touchstart\",f),e.event.bind(t,\"touchmove\",h),e.event.bind(t,\"touchend\",b)):r&&(window.PointerEvent?(e.event.bind(window,\"pointerdown\",c),e.event.bind(window,\"pointerup\",u),e.event.bind(t,\"pointerdown\",f),e.event.bind(t,\"pointermove\",h),e.event.bind(t,\"pointerup\",b)):window.MSPointerEvent&&(e.event.bind(window,\"MSPointerDown\",c),e.event.bind(window,\"MSPointerUp\",u),e.event.bind(t,\"MSPointerDown\",f),e.event.bind(t,\"MSPointerMove\",h),e.event.bind(t,\"MSPointerUp\",b)))}var o=t(\"../../lib/helper\"),l=t(\"../instances\"),i=t(\"../update-geometry\"),s=t(\"../update-scroll\");e.exports=function(t){if(o.env.supportsTouch||o.env.supportsIePointer){var e=l.get(t);r(t,e,o.env.supportsTouch,o.env.supportsIePointer)}}},{\"../../lib/helper\":6,\"../instances\":18,\"../update-geometry\":19,\"../update-scroll\":20}],17:[function(t,e,n){\"use strict\";var r=t(\"../lib/helper\"),o=t(\"../lib/class\"),l=t(\"./instances\"),i=t(\"./update-geometry\"),s={\"click-rail\":t(\"./handler/click-rail\"),\"drag-scrollbar\":t(\"./handler/drag-scrollbar\"),keyboard:t(\"./handler/keyboard\"),wheel:t(\"./handler/mouse-wheel\"),touch:t(\"./handler/touch\"),selection:t(\"./handler/selection\")},a=t(\"./handler/native-scroll\");e.exports=function(t,e){e=\"object\"==typeof e?e:{},o.add(t,\"ps\");var n=l.add(t);n.settings=r.extend(n.settings,e),o.add(t,\"ps--theme_\"+n.settings.theme),n.settings.handlers.forEach(function(e){s[e](t)}),a(t),i(t)}},{\"../lib/class\":2,\"../lib/helper\":6,\"./handler/click-rail\":10,\"./handler/drag-scrollbar\":11,\"./handler/keyboard\":12,\"./handler/mouse-wheel\":13,\"./handler/native-scroll\":14,\"./handler/selection\":15,\"./handler/touch\":16,\"./instances\":18,\"./update-geometry\":19}],18:[function(t,e,n){\"use strict\";function r(t){function e(){a.add(t,\"ps--focus\")}function n(){a.remove(t,\"ps--focus\")}var r=this;r.settings=s.clone(c),r.containerWidth=null,r.containerHeight=null,r.contentWidth=null,r.contentHeight=null,r.isRtl=\"rtl\"===u.css(t,\"direction\"),r.isNegativeScroll=function(){var e=t.scrollLeft,n=null;return t.scrollLeft=-1,n=t.scrollLeft<0,t.scrollLeft=e,n}(),r.negativeScrollAdjustment=r.isNegativeScroll?t.scrollWidth-t.clientWidth:0,r.event=new d,r.ownerDocument=t.ownerDocument||document,r.scrollbarXRail=u.appendTo(u.e(\"div\",\"ps__scrollbar-x-rail\"),t),r.scrollbarX=u.appendTo(u.e(\"div\",\"ps__scrollbar-x\"),r.scrollbarXRail),r.scrollbarX.setAttribute(\"tabindex\",0),r.event.bind(r.scrollbarX,\"focus\",e),r.event.bind(r.scrollbarX,\"blur\",n),r.scrollbarXActive=null,r.scrollbarXWidth=null,r.scrollbarXLeft=null,r.scrollbarXBottom=s.toInt(u.css(r.scrollbarXRail,\"bottom\")),r.isScrollbarXUsingBottom=r.scrollbarXBottom===r.scrollbarXBottom,r.scrollbarXTop=r.isScrollbarXUsingBottom?null:s.toInt(u.css(r.scrollbarXRail,\"top\")),r.railBorderXWidth=s.toInt(u.css(r.scrollbarXRail,\"borderLeftWidth\"))+s.toInt(u.css(r.scrollbarXRail,\"borderRightWidth\")),u.css(r.scrollbarXRail,\"display\",\"block\"),r.railXMarginWidth=s.toInt(u.css(r.scrollbarXRail,\"marginLeft\"))+s.toInt(u.css(r.scrollbarXRail,\"marginRight\")),u.css(r.scrollbarXRail,\"display\",\"\"),r.railXWidth=null,r.railXRatio=null,r.scrollbarYRail=u.appendTo(u.e(\"div\",\"ps__scrollbar-y-rail\"),t),r.scrollbarY=u.appendTo(u.e(\"div\",\"ps__scrollbar-y\"),r.scrollbarYRail),r.scrollbarY.setAttribute(\"tabindex\",0),r.event.bind(r.scrollbarY,\"focus\",e),r.event.bind(r.scrollbarY,\"blur\",n),r.scrollbarYActive=null,r.scrollbarYHeight=null,r.scrollbarYTop=null,r.scrollbarYRight=s.toInt(u.css(r.scrollbarYRail,\"right\")),r.isScrollbarYUsingRight=r.scrollbarYRight===r.scrollbarYRight,r.scrollbarYLeft=r.isScrollbarYUsingRight?null:s.toInt(u.css(r.scrollbarYRail,\"left\")),r.scrollbarYOuterWidth=r.isRtl?s.outerWidth(r.scrollbarY):null,r.railBorderYWidth=s.toInt(u.css(r.scrollbarYRail,\"borderTopWidth\"))+s.toInt(u.css(r.scrollbarYRail,\"borderBottomWidth\")),u.css(r.scrollbarYRail,\"display\",\"block\"),r.railYMarginHeight=s.toInt(u.css(r.scrollbarYRail,\"marginTop\"))+s.toInt(u.css(r.scrollbarYRail,\"marginBottom\")),u.css(r.scrollbarYRail,\"display\",\"\"),r.railYHeight=null,r.railYRatio=null}function o(t){return t.getAttribute(\"data-ps-id\")}function l(t,e){t.setAttribute(\"data-ps-id\",e)}function i(t){t.removeAttribute(\"data-ps-id\")}var s=t(\"../lib/helper\"),a=t(\"../lib/class\"),c=t(\"./default-setting\"),u=t(\"../lib/dom\"),d=t(\"../lib/event-manager\"),p=t(\"../lib/guid\"),f={};n.add=function(t){var e=p();return l(t,e),f[e]=new r(t),f[e]},n.remove=function(t){delete f[o(t)],i(t)},n.get=function(t){return f[o(t)]}},{\"../lib/class\":2,\"../lib/dom\":3,\"../lib/event-manager\":4,\"../lib/guid\":5,\"../lib/helper\":6,\"./default-setting\":8}],19:[function(t,e,n){\"use strict\";function r(t,e){return t.settings.minScrollbarLength&&(e=Math.max(e,t.settings.minScrollbarLength)),t.settings.maxScrollbarLength&&(e=Math.min(e,t.settings.maxScrollbarLength)),e}function o(t,e){var n={width:e.railXWidth};e.isRtl?n.left=e.negativeScrollAdjustment+t.scrollLeft+e.containerWidth-e.contentWidth:n.left=t.scrollLeft,e.isScrollbarXUsingBottom?n.bottom=e.scrollbarXBottom-t.scrollTop:n.top=e.scrollbarXTop+t.scrollTop,s.css(e.scrollbarXRail,n);var r={top:t.scrollTop,height:e.railYHeight};e.isScrollbarYUsingRight?e.isRtl?r.right=e.contentWidth-(e.negativeScrollAdjustment+t.scrollLeft)-e.scrollbarYRight-e.scrollbarYOuterWidth:r.right=e.scrollbarYRight-t.scrollLeft:e.isRtl?r.left=e.negativeScrollAdjustment+t.scrollLeft+2*e.containerWidth-e.contentWidth-e.scrollbarYLeft-e.scrollbarYOuterWidth:r.left=e.scrollbarYLeft+t.scrollLeft,s.css(e.scrollbarYRail,r),s.css(e.scrollbarX,{left:e.scrollbarXLeft,width:e.scrollbarXWidth-e.railBorderXWidth}),s.css(e.scrollbarY,{top:e.scrollbarYTop,height:e.scrollbarYHeight-e.railBorderYWidth})}var l=t(\"../lib/helper\"),i=t(\"../lib/class\"),s=t(\"../lib/dom\"),a=t(\"./instances\"),c=t(\"./update-scroll\");e.exports=function(t){var e=a.get(t);e.containerWidth=t.clientWidth,e.containerHeight=t.clientHeight,e.contentWidth=t.scrollWidth,e.contentHeight=t.scrollHeight;var n;t.contains(e.scrollbarXRail)||(n=s.queryChildren(t,\".ps__scrollbar-x-rail\"),n.length>0&&n.forEach(function(t){s.remove(t)}),s.appendTo(e.scrollbarXRail,t)),t.contains(e.scrollbarYRail)||(n=s.queryChildren(t,\".ps__scrollbar-y-rail\"),n.length>0&&n.forEach(function(t){s.remove(t)}),s.appendTo(e.scrollbarYRail,t)),!e.settings.suppressScrollX&&e.containerWidth+e.settings.scrollXMarginOffset<e.contentWidth?(e.scrollbarXActive=!0,e.railXWidth=e.containerWidth-e.railXMarginWidth,e.railXRatio=e.containerWidth/e.railXWidth,e.scrollbarXWidth=r(e,l.toInt(e.railXWidth*e.containerWidth/e.contentWidth)),e.scrollbarXLeft=l.toInt((e.negativeScrollAdjustment+t.scrollLeft)*(e.railXWidth-e.scrollbarXWidth)/(e.contentWidth-e.containerWidth))):e.scrollbarXActive=!1,!e.settings.suppressScrollY&&e.containerHeight+e.settings.scrollYMarginOffset<e.contentHeight?(e.scrollbarYActive=!0,e.railYHeight=e.containerHeight-e.railYMarginHeight,e.railYRatio=e.containerHeight/e.railYHeight,e.scrollbarYHeight=r(e,l.toInt(e.railYHeight*e.containerHeight/e.contentHeight)),e.scrollbarYTop=l.toInt(t.scrollTop*(e.railYHeight-e.scrollbarYHeight)/(e.contentHeight-e.containerHeight))):e.scrollbarYActive=!1,e.scrollbarXLeft>=e.railXWidth-e.scrollbarXWidth&&(e.scrollbarXLeft=e.railXWidth-e.scrollbarXWidth),e.scrollbarYTop>=e.railYHeight-e.scrollbarYHeight&&(e.scrollbarYTop=e.railYHeight-e.scrollbarYHeight),o(t,e),e.scrollbarXActive?i.add(t,\"ps--active-x\"):(i.remove(t,\"ps--active-x\"),e.scrollbarXWidth=0,e.scrollbarXLeft=0,c(t,\"left\",0)),e.scrollbarYActive?i.add(t,\"ps--active-y\"):(i.remove(t,\"ps--active-y\"),e.scrollbarYHeight=0,e.scrollbarYTop=0,c(t,\"top\",0))}},{\"../lib/class\":2,\"../lib/dom\":3,\"../lib/helper\":6,\"./instances\":18,\"./update-scroll\":20}],20:[function(t,e,n){\"use strict\";var r=t(\"./instances\"),o=function(t){var e=document.createEvent(\"Event\");return e.initEvent(t,!0,!0),e};e.exports=function(t,e,n){if(\"undefined\"==typeof t)throw\"You must provide an element to the update-scroll function\";if(\"undefined\"==typeof e)throw\"You must provide an axis to the update-scroll function\";if(\"undefined\"==typeof n)throw\"You must provide a value to the update-scroll function\";\"top\"===e&&n<=0&&(t.scrollTop=n=0,t.dispatchEvent(o(\"ps-y-reach-start\"))),\"left\"===e&&n<=0&&(t.scrollLeft=n=0,t.dispatchEvent(o(\"ps-x-reach-start\")));var l=r.get(t);\"top\"===e&&n>=l.contentHeight-l.containerHeight&&(n=l.contentHeight-l.containerHeight,n-t.scrollTop<=1?n=t.scrollTop:t.scrollTop=n,t.dispatchEvent(o(\"ps-y-reach-end\"))),\"left\"===e&&n>=l.contentWidth-l.containerWidth&&(n=l.contentWidth-l.containerWidth,n-t.scrollLeft<=1?n=t.scrollLeft:t.scrollLeft=n,t.dispatchEvent(o(\"ps-x-reach-end\"))),void 0===l.lastTop&&(l.lastTop=t.scrollTop),void 0===l.lastLeft&&(l.lastLeft=t.scrollLeft),\"top\"===e&&n<l.lastTop&&t.dispatchEvent(o(\"ps-scroll-up\")),\"top\"===e&&n>l.lastTop&&t.dispatchEvent(o(\"ps-scroll-down\")),\"left\"===e&&n<l.lastLeft&&t.dispatchEvent(o(\"ps-scroll-left\")),\"left\"===e&&n>l.lastLeft&&t.dispatchEvent(o(\"ps-scroll-right\")),\"top\"===e&&n!==l.lastTop&&(t.scrollTop=l.lastTop=n,t.dispatchEvent(o(\"ps-scroll-y\"))),\"left\"===e&&n!==l.lastLeft&&(t.scrollLeft=l.lastLeft=n,t.dispatchEvent(o(\"ps-scroll-x\")))}},{\"./instances\":18}],21:[function(t,e,n){\"use strict\";var r=t(\"../lib/helper\"),o=t(\"../lib/dom\"),l=t(\"./instances\"),i=t(\"./update-geometry\"),s=t(\"./update-scroll\");e.exports=function(t){var e=l.get(t);e&&(e.negativeScrollAdjustment=e.isNegativeScroll?t.scrollWidth-t.clientWidth:0,o.css(e.scrollbarXRail,\"display\",\"block\"),o.css(e.scrollbarYRail,\"display\",\"block\"),e.railXMarginWidth=r.toInt(o.css(e.scrollbarXRail,\"marginLeft\"))+r.toInt(o.css(e.scrollbarXRail,\"marginRight\")),e.railYMarginHeight=r.toInt(o.css(e.scrollbarYRail,\"marginTop\"))+r.toInt(o.css(e.scrollbarYRail,\"marginBottom\")),o.css(e.scrollbarXRail,\"display\",\"none\"),o.css(e.scrollbarYRail,\"display\",\"none\"),i(t),s(t,\"top\",t.scrollTop),s(t,\"left\",t.scrollLeft),o.css(e.scrollbarXRail,\"display\",\"\"),o.css(e.scrollbarYRail,\"display\",\"\"))}},{\"../lib/dom\":3,\"../lib/helper\":6,\"./instances\":18,\"./update-geometry\":19,\"./update-scroll\":20}]},{},[1]);","// Animations\n$(document).ready(function() {\n    $('.js--triggerAnimation').click(function(e) {\n        e.preventDefault();\n        var anim = $('.js--animations').val();\n        testAnim(anim);\n    });\n\n    $('.js--animations').change(function() {\n        var anim = $(this).val();\n        testAnim(anim);\n    });\n\n    //$('.mdb-select').material_select(); //A24Mod\n\n    new WOW().init();\n\n});\n\nfunction testAnim(x) {\n    $('#animationSandbox').removeClass().addClass(x + ' animated').one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function() {\n        $(this).removeClass();\n    });\n};\n","(function($){\n\n\n    $.fn.material_select = function (callback) {\n    $(this).each(function(){\n      var $select = $(this);\n\n      if ($select.hasClass('browser-default')) {\n        return; // Continue to next (return false breaks out of entire loop)\n      }\n\n      var multiple = $select.attr('multiple') ? true : false,\n          optHasMultiple = false,\n          searchMultiple = false,\n          lastID = $select.data('select-id'); // Tear down structure if Select needs to be rebuilt\n\n      if (lastID) {\n        $select.parent().find('span.caret').remove();\n        $select.parent().find('input').remove();\n\n        $select.unwrap();\n        $('ul#select-options-'+lastID).remove();\n      }\n\n      // If destroying the select, remove the selelct-id and reset it to it's uninitialized state.\n      if(callback === 'destroy') {\n        $select.data('select-id', null).removeClass('initialized');\n        return;\n      }\n\n      var uniqueID = guid(); //Materialize.guid();\n      $select.data('select-id', uniqueID);\n      var wrapper = $('<div class=\"select-wrapper\"></div>');\n      wrapper.addClass($select.attr('class'));\n      var options = $('<ul id=\"select-options-' + uniqueID +'\" class=\"dropdown-content select-dropdown ' + (multiple ? 'multiple-select-dropdown' : '') + '\"></ul>'),\n          selectChildren = $select.children('option, optgroup'),\n          valuesSelected = [],\n          optionsHover = false;\n\n      var label = $select.find('option:selected').html() || $select.find('option:first').html() || \"\";\n\n      //Added to search\n      var applySeachInList = function() {\n\n        var ul = $(this).closest('ul');\n        var searchValue = $(this).val();\n        var options = ul.find('li')\n                        .find('span.filtrable');\n\n        options.each(function() {\n          if (typeof(this.outerText) == 'string') {\n            var liValue = this.outerText.toLowerCase();\n\n            if (liValue.startsWith(searchValue.toLowerCase())) {\n              $(this).show();\n              $(this).parent().show();\n            } else {\n              $(this).hide();\n              $(this).parent().hide();\n            }\n          }\n        });\n      }\n\n      //Added to search\n      var setSearchableOption = function () {\n        var placeholder = $select.attr('searchable');\n        var element = $('<span class=\"search-wrap\"><input type=\"text\" class=\"search\" placeholder=\"' + placeholder + '\"></span>');\n        options.append(element);\n        element.find('.search').keyup(applySeachInList);\n      }\n\n      //Added to search\n      var searchable = $select.attr('searchable') ? true : false;\n\n      //Added to search\n      if (searchable) {\n        setSearchableOption();\n      }\n\n      // Function that renders and appends the option taking into\n      // account type and possible image icon.\n      var appendOptionWithIcon = function(select, option, type) {\n        // Add disabled attr if disabled\n        searchMultiple = select.attr(\"searchable\");\n        var disabledClass = (option.is(':disabled')) ? 'disabled ' : '';\n        var optgroupClass = (type === 'optgroup-option') ? 'optgroup-option ' : '';\n        // check if optgroup have multiple attribiute if have got add a checkbox\n        if (optgroupClass !== ''){\n            type = (select.attr(\"multiple\") === 'multiple') ? 'multiple' : type;\n            optHasMultiple = true;\n        }\n        // add icons\n        var icon_url = option.data('icon');\n        var classes = option.attr('class');\n        if (!!icon_url) {\n          var classString = '';\n          if (!!classes) classString = ' class=\"' + classes + '\"';\n\n          // Check for multiple type.\n          if (type === 'multiple') {\n            options.append($('<li class=\"' + disabledClass + '\"><img alt=\"\" src=\"' + icon_url + '\"' + classString + '><span class=\"filtrable\"><input type=\"checkbox\"' + disabledClass + '/><label></label>' + option.html() + '</span></li>'));\n          } else {\n\n            options.append($('<li class=\"' + disabledClass + optgroupClass + '\"><img alt=\"\" src=\"' + icon_url + '\"' + classString + '><span class=\"filtrable\">' + option.html() + '</span></li>'));\n          }\n          return true;\n        }\n\n        // Check for multiple type.\n        if (type === 'multiple') {\n          options.append($('<li class=\"' + disabledClass + '\"><span class=\"filtrable\"><input type=\"checkbox\"' + disabledClass + '/><label></label>' + option.html() + '</span></li>'));\n        } else {\n          options.append($('<li class=\"' + disabledClass + optgroupClass + '\"><span class=\"filtrable\">' + option.html() + '</span></li>'));\n        }\n      };\n\n      /* Create dropdown structure. */\n      if (selectChildren.length) {\n        selectChildren.each(function() {\n          if ($(this).is('option')) {\n            // Direct descendant option.\n            if (multiple) {\n              appendOptionWithIcon($select, $(this), 'multiple');\n            } else {\n              appendOptionWithIcon($select, $(this));\n            }\n          } else if ($(this).is('optgroup')) {\n            // Optgroup.\n            var selectOptions = $(this).children('option');\n            options.append($('<li class=\"optgroup\"><span>' + $(this).attr('label') + '</span></li>'));\n\n            selectOptions.each(function() {\n              appendOptionWithIcon($select, $(this), 'optgroup-option');\n            });\n          }\n        });\n      }\n\n      options.find('li:not(.optgroup)').each(function (i) {\n        $(this).click(function (e) {\n          // Check if option element is disabled\n          if (!$(this).hasClass('disabled') && !$(this).hasClass('optgroup')) {\n            var selected = true;\n            if(multiple && optHasMultiple) {\n              $('input[type=\"checkbox\"]', this).prop('checked', function(i, v) { return !v; });\n              // selected = toggleEntryFromArray(valuesSelected, $(this).index(), $select);\n              selected = toggleEntryFromArray(valuesSelected, $(this).index() , $select);\n              // $newSelect.trigger('click');\n\n\n            } else if (multiple && searchMultiple) {\n              $('input[type=\"checkbox\"]', this).prop('checked', function(i, v) { return !v; });\n              // selected = toggleEntryFromArray(valuesSelected, $(this).index(), $select);\n              selected = toggleEntryFromArray(valuesSelected, $(this).index() - 1 , $select);\n              $newSelect.trigger('focus');\n\n            } else if (multiple) {\n              $('input[type=\"checkbox\"]', this).prop('checked', function(i, v) { return !v; });\n              selected = toggleEntryFromArray(valuesSelected, $(this).index(), $select);\n              // selected = toggleEntryFromArray(valuesSelected, $(this).index() - 1, $select);\n              $newSelect.trigger('focus');\n\n            } else {\n              options.find('li').removeClass('active');\n              $(this).toggleClass('active');\n              $newSelect.val($(this).text());\n\n            }\n\n            activateOption(options, $(this));\n            $select.find('option').eq(i).prop('selected', selected);\n            // Trigger onchange() event\n            $select.trigger('change');\n            if (typeof callback !== 'undefined') callback();\n          }\n\n          e.stopPropagation();\n        });\n      });\n\n      // Wrap Elements\n      $select.wrap(wrapper);\n      // Add Select Display Element\n      var dropdownIcon = $('<span class=\"caret material-icons\">arrow_drop_down</span>'); // A24Mod\n      if ($select.is(':disabled'))\n        dropdownIcon.addClass('disabled');\n\n      // escape double quotes\n      var sanitizedLabelHtml = label.replace(/\"/g, '&quot;');\n\n      var $newSelect = $('<input type=\"text\" class=\"select-dropdown\" readonly=\"true\" ' + (($select.is(':disabled')) ? 'disabled' : '') + ' data-activates=\"select-options-' + uniqueID +'\" value=\"'+ sanitizedLabelHtml +'\"/>');\n      $select.before($newSelect);\n      $newSelect.before(dropdownIcon);\n\n      $newSelect.after(options);\n      // Check if section element is disabled\n      if (!$select.is(':disabled')) {\n        $newSelect.dropdown({'hover': false, 'closeOnClick': false});\n      }\n\n      // Copy tabindex\n      if ($select.attr('tabindex')) {\n        $($newSelect[0]).attr('tabindex', $select.attr('tabindex'));\n      }\n\n      $select.addClass('initialized');\n\n      $newSelect.on({\n        'focus': function (){\n          if ($('ul.select-dropdown').not(options[0]).is(':visible')) {\n            $('input.select-dropdown').trigger('close');\n          }\n          if (!options.is(':visible')) {\n            $(this).trigger('open', ['focus']);\n            var label = $(this).val();\n            var selectedOption = options.find('li').filter(function() {\n              return $(this).text().toLowerCase() === label.toLowerCase();\n            })[0];\n            activateOption(options, selectedOption);\n          }\n        },\n        'click': function (e){\n          e.stopPropagation();\n        }\n      });\n\n      //Changed to search to treat search\n      $newSelect.on('blur', function() {\n\n        if (!multiple && !searchable) {\n          $(this).trigger('close');\n        }\n        options.find('li.selected').removeClass('selected');\n      });\n\n      //Added to search\n      if (!multiple && searchable) {\n          options.find('li').on('click', function() {\n              $newSelect.trigger('close');\n          });\n      }\n\n      options.hover(function() {\n        optionsHover = true;\n      }, function () {\n        optionsHover = false;\n      });\n\n      //Changed to search to treat search\n      $(window).on({\n        'click': function () {\n          (multiple || searchable) && (optionsHover || $newSelect.trigger('close'));\n        }\n      });\n\n      // Add initial multiple selections.\n      if (multiple) {\n        $select.find(\"option:selected:not(:disabled)\").each(function () {\n          var index = $(this).index();\n\n          toggleEntryFromArray(valuesSelected, index, $select);\n          options.find(\"li\").eq(index).find(\":checkbox\").prop(\"checked\", true);\n        });\n      }\n\n      // Make option as selected and scroll to selected position\n      var activateOption = function(collection, newOption) {\n        if (newOption) {\n          collection.find('li.selected').removeClass('selected');\n          var option = $(newOption);\n          option.addClass('selected');\n          options.scrollTo(option);\n        }\n      };\n\n      // Allow user to search by typing\n      // this array is cleared after 1 second\n      var filterQuery = [],\n          onKeyDown = function(e){\n            // TAB - switch to another input\n            if(e.which == 9){\n              $newSelect.trigger('close');\n              return;\n            }\n\n            // ARROW DOWN WHEN SELECT IS CLOSED - open select options\n            if(e.which == 40 && !options.is(':visible')){\n              $newSelect.trigger('open');\n              return;\n            }\n\n            // ENTER WHEN SELECT IS CLOSED - submit form\n            if(e.which == 13 && !options.is(':visible')){\n              return;\n            }\n\n            e.preventDefault();\n\n            // CASE WHEN USER TYPE LETTERS\n            var letter = String.fromCharCode(e.which).toLowerCase(),\n                nonLetters = [9,13,27,38,40];\n            if (letter && (nonLetters.indexOf(e.which) === -1)) {\n              filterQuery.push(letter);\n\n              var string = filterQuery.join(''),\n                  newOption = options.find('li').filter(function() {\n                    return $(this).text().toLowerCase().indexOf(string) === 0;\n                  })[0];\n\n              if (newOption) {\n                activateOption(options, newOption);\n              }\n            }\n\n            // ENTER - select option and close when select options are opened\n            if (e.which == 13) {\n              var activeOption = options.find('li.selected:not(.disabled)')[0];\n              if(activeOption){\n                $(activeOption).trigger('click');\n                if (!multiple) {\n                  $newSelect.trigger('close');\n                }\n              }\n            }\n\n            // ARROW DOWN - move to next not disabled option\n            if (e.which == 40) {\n              if (options.find('li.selected').length) {\n                newOption = options.find('li.selected').next('li:not(.disabled)')[0];\n              } else {\n                newOption = options.find('li:not(.disabled)')[0];\n              }\n              activateOption(options, newOption);\n            }\n\n            // ESC - close options\n            // A24Mod removed this from their handling as we want to handle this\n            // if (e.which == 27) {\n            //   $newSelect.trigger('close');\n            // }\n\n            // ARROW UP - move to previous not disabled option\n            if (e.which == 38) {\n              newOption = options.find('li.selected').prev('li:not(.disabled)')[0];\n              if(newOption)\n                activateOption(options, newOption);\n            }\n\n            // Automaticaly clean filter query so user can search again by starting letters\n            setTimeout(function(){ filterQuery = []; }, 1000);\n          };\n\n      $newSelect.on('keydown', onKeyDown);\n    });\n\n    function toggleEntryFromArray(entriesArray, entryIndex, select) {\n      var index = entriesArray.indexOf(entryIndex),\n          notAdded = index === -1;\n\n      if (notAdded) {\n        entriesArray.push(entryIndex);\n      } else {\n        entriesArray.splice(index, 1);\n      }\n\n      select.siblings('ul.dropdown-content').find('li').eq(entryIndex).toggleClass('active');\n\n      // use notAdded instead of true (to detect if the option is selected or not)\n      select.find('option').eq(entryIndex).prop('selected', notAdded);\n      setValueToInput(entriesArray, select);\n\n      return notAdded;\n    }\n\n    function setValueToInput(entriesArray, select) {\n      var value = '';\n\n      for (var i = 0, count = entriesArray.length; i < count; i++) {\n        var text = select.find('option').eq(entriesArray[i]).text();\n\n        i === 0 ? value += text : value += ', ' + text;\n      }\n\n      if (value === '') {\n        value = select.find('option:disabled').eq(0).text();\n      }\n\n      select.siblings('input.select-dropdown').val(value);\n    }\n    // };\n\n    function guid() {\n        var d = new Date().getTime();\n        var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n            var r = (d + Math.random() * 16) % 16 | 0;\n            d = Math.floor(d / 16);\n            return (c == 'x' ? r : r & 0x3 | 0x8).toString(16);\n        });\n        return uuid;\n    }\n\n  }\n\n\n})(jQuery);\n\njQuery('select').siblings('input.select-dropdown').on('mousedown', function (e) {\n  if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {\n    if (e.clientX >= e.target.clientWidth || e.clientY >= e.target.clientHeight) {\n      e.preventDefault()\n    }\n  }\n});\n\n/* How it Works !!!!\n\n<select class=\"mdb-select\" searchable=\"search here..\">\n<option value=\"\" disabled selected>Choose your option</option>\n<option value=\"1\">Yellow</option>\n<option value=\"2\">Green</option>\n<option value=\"3\">Pink</option>\n<option value=\"4\">Orange</option>\n</select>\n<label>Example label</label>\n\nWithout searchable it's a normal material select\n\n*/\n\n\n\n\n\n\n\n\n\n\n\n",";(function ($) {\n\n  var chipsHandleEvents     = false;\n  var materialChipsDefaults = {\n    data                : [],\n    placeholder         : '',\n    secondaryPlaceholder: ''\n  }\n\n    $(document).ready(function () {\n        // Handle removal of static chips.\n        $(document).on('click', '.chip .close', function (e) {\n\n            var $this  = $(this);\n            var $chips = $this.closest('.chips');\n\n            if($chips.data('initialized'))\n                return;\n\n            $this.closest('.chip').remove();\n\n        });\n    })\n\n    $.fn.material_chip = function (options) {\n        var self       = this;\n        this.$el       = $(this);\n        this.$document = $(document);\n        this.SELS      = {\n            CHIPS        : '.chips',\n            CHIP         : '.chip',\n            INPUT        : 'input',\n            DELETE       : '.material-icons', //A24Mod changed .close to .material-icons\n            SELECTED_CHIP: '.selected'\n        }\n\n        if('data' === options)\n            return this.$el.data('chips')\n\n        if('options' === options)\n          return this.$el.data('options')\n\n        //A24Mod preserve the old config when reloading data\n        if (!(options instanceof Array)) {\n            this.$el.data('options', $.extend({}, materialChipsDefaults, options));\n        }\n\n        // Initialize\n        this.init = function () {\n            var i = 0;\n            var chips;\n            self.$el.each(function () {\n\n                var $chips = $(this);\n                if ($chips.data('initialized'))\n                    return; // Prevent double initialization.\n\n                var options = $chips.data('options');\n                if (!options.data || !options.data instanceof Array)\n                    options.data = [];\n\n                $chips.data('chips', options.data);\n                $chips.data('index', i);\n                $chips.data('initialized', true);\n\n                if (!$chips.hasClass(self.SELS.CHIPS))\n                    $chips.addClass('chips');\n\n                self.chips($chips);\n                i++;\n\n            });\n        }\n\n        this.handleEvents = function () {\n            var SELS = self.SELS\n\n            self.$document.on('click', SELS.CHIPS, function (e) {\n                $(e.target).find(SELS.INPUT).focus();\n            })\n\n            self.$document.on('click', SELS.CHIP, function (e) {\n                $(SELS.CHIP).removeClass('selected');\n                $(this).toggleClass('selected');\n            })\n\n            self.$document.on('keydown', function (e) {\n                if ($(e.target).is('input, textarea'))\n                    return;\n\n                // delete\n                var $chip  = self.$document.find(SELS.CHIP + SELS.SELECTED_CHIP);\n                var $chips = $chip.closest(SELS.CHIPS);\n                var length = $chip.siblings(SELS.CHIP).length;\n                var index;\n\n                if (!$chip.length)\n                    return;\n\n                var isBackspaceOrDelete = e.which === 8 || e.which === 46;\n                var isLeftArrow         = e.which === 37;\n                var isRightArrow        = e.which === 39;\n\n                if (isBackspaceOrDelete) {\n                    e.preventDefault();\n                    var chipsIndex = $chips.data('index');\n                    index          = $chip.index();\n                    self.deleteChip(chipsIndex, index, $chips);\n                    var selectIndex = null\n\n                    if ((index + 1) < length)\n                        selectIndex = index\n                    else if (index === length || (index + 1) === length)\n                        selectIndex = length - 1\n\n                    if (selectIndex < 0)\n                        selectIndex = null\n\n                    if (null !== selectIndex)\n                        self.selectChip(chipsIndex, selectIndex, $chips)\n                    if (!length)\n                        $chips.find('input').focus()\n\n                } else if (isLeftArrow) {\n\n                    index = $chip.index() - 1\n                    if (index < 0)\n                        return\n                    $(SELS.CHIP).removeClass('selected')\n                    self.selectChip($chips.data('index'), index, $chips)\n\n                } else if (isRightArrow) {\n\n                    index = $chip.index() + 1;\n                    $(SELS.CHIP).removeClass('selected');\n                    if (index > length) {\n                        $chips.find('input').focus();\n                        return;\n                    }\n                    self.selectChip($chips.data('index'), index, $chips);\n\n                }\n            });\n\n            self.$document.on('focusin', SELS.CHIPS + ' ' + SELS.INPUT, function (e) {\n                $(e.target).closest(SELS.CHIPS).addClass('focus')\n                $(SELS.CHIP).removeClass('selected')\n            })\n\n            self.$document.on('focusout', SELS.CHIPS + ' ' + SELS.INPUT, function (e) {\n                $(e.target).closest(SELS.CHIPS).removeClass('focus')\n            })\n\n            //A24Mod - Below blur function is custom\n            self.$document.on('blur', SELS.CHIPS + ' ' + SELS.INPUT, function (e) {\n                var $target = $(e.target);\n                var $chips = $target.closest(SELS.CHIPS);\n                var chipsIndex = $chips.data('index');\n\n                e.preventDefault();\n                self.addChip(chipsIndex, {\n                    tag: $target.val()\n                }, $chips);\n                $target.val('')\n            });\n\n            self.$document.on('keydown', SELS.CHIPS + ' ' + SELS.INPUT, function (e) {\n                var $target = $(e.target)\n                var $chips = $target.closest(SELS.CHIPS)\n                var chipsIndex = $chips.data('index')\n                var chipsLength = $chips.children(SELS.CHIP).length\n\n                var isEnter = 13 === e.which;\n\n                if (isEnter) {\n                    e.preventDefault();\n                    self.addChip(\n                        chipsIndex,\n                        { tag: $target.val() },\n                        $chips\n                    );\n                    $target.val('');\n                    return;\n                }\n\n                var isLeftArrowOrDelete = (8 === e.keyCode || 37 === e.keyCode);\n                var isValueEmpty = '' === $target.val();\n\n                if (isLeftArrowOrDelete && isValueEmpty && chipsLength) {\n                    self.selectChip(chipsIndex, chipsLength - 1, $chips)\n                    $target.blur()\n                    return\n                }\n            });\n\n            self.$document.on('click', SELS.CHIPS + ' ' + SELS.DELETE, function (e) {\n                var $target = $(e.target);\n                var $chips = $target.closest(SELS.CHIPS);\n                var $chip = $target.closest(SELS.CHIP);\n                e.stopPropagation();\n                self.deleteChip(\n                    $chips.data('index'),\n                    $chip.index(),\n                    $chips\n                );\n                $chips.find('input').focus();\n            });\n\n        }\n\n        this.chips = function ($chips) {\n            var html    = '';\n            var options = $chips.data('options');\n            $chips.data('chips').forEach(function (elem) {\n                html += self.renderChip(elem);\n            });\n            html += '<input class=\"input\" placeholder=\"\">';\n            $chips.html(html);\n            self.setPlaceholder($chips);\n        }\n\n        this.renderChip = function (elem) {\n            if (!elem.tag)\n                return;\n\n            var html = '<div class=\"chip\">' + $(\"<div>\").text(elem.tag).html() //A24Mod made elem.tag safe string display\n\n            if (elem.image)\n                html += ' <img src=\"' + elem.image + '\"> ';\n\n            html += '<i class=\"material-icons\">close</i>' //A24Mod\n            html += '</div>';\n            return html;\n\n        }\n\n        this.setPlaceholder = function ($chips) {\n            var options = $chips.data('options');\n            if ($chips.data('chips').length && options.placeholder)\n                $chips.find('input').prop('placeholder', options.placeholder);\n            else if (!$chips.data('chips').length && options.secondaryPlaceholder)\n                $chips.find('input').prop('placeholder', options.secondaryPlaceholder);\n        }\n\n        this.isValid = function ($chips, elem) {\n            var chips = $chips.data('chips');\n            var exists = false;\n            elem.tag = elem.tag.trim(); //A24Mod added trim and empty check\n            if (elem.tag == \"\") { //A24Mod\n                return false; //A24Mod\n            } //A24Mod\n            for (var i = 0; i < chips.length; i++) {\n                if (chips[i].tag === elem.tag) {\n                    exists = true;\n                    return;\n                }\n            }\n            return '' !== elem.tag && !exists;\n        }\n\n        this.addChip = function (chipsIndex, elem, $chips, bMuteEvent) { //A24Mod bMuteEvent\n            if (!self.isValid($chips, elem))\n                return;\n\n            var options  = $chips.data('options');\n            var chipHtml = self.renderChip(elem);\n            $chips.data('chips').push(elem);\n            $(chipHtml).insertBefore($chips.find('input'));\n            if (!bMuteEvent) { //A24Mod added if around trigger\n                $chips.trigger('chip.add', elem);\n            }\n            self.setPlaceholder($chips);\n        }\n\n        this.deleteChip = function (chipsIndex, chipIndex, $chips, bMuteEvent) { //A24Mod bMuteEvent\n            var chip = $chips.data('chips')[chipIndex];\n            $chips.find('.chip').eq(chipIndex).remove();\n            $chips.data('chips').splice(chipIndex, 1);\n            if (!bMuteEvent) { //A24Mod added if around trigger\n                $chips.trigger('chip.delete', chip);\n            }\n            self.setPlaceholder($chips);\n        }\n\n        this.selectChip = function (chipsIndex, chipIndex, $chips) {\n            var $chip = $chips.find('.chip').eq(chipIndex)\n                if ($chip && false === $chip.hasClass('selected')) {\n                $chip.addClass('selected')\n                $chips.trigger('chip.select', $chips.data('chips')[chipIndex])\n            }\n        }\n\n        this.getChipsElement = function (index, $chips) {\n            return $chips.eq(index);\n        }\n\n        // A24Mod added the if and everything in the top part, everything in the else is MDB\n        if (options instanceof Array) {\n            var arrNewData = options;\n            self.$el.each(function () {\n                var objChips = $(this);\n                var objOptions = objChips.data('options');\n                var iCurrentItems = objOptions.data.length;\n                for (var i = 0; i < iCurrentItems; i++) {\n                    //index has to be 0 since delete will remove this item and reindex so next\n                    //child will always be on index 0\n                    self.deleteChip(\n                        objChips.data('index'),\n                        0,\n                        objChips,\n                        true\n                    );\n                }\n\n                for (var j = 0; j < arrNewData.length; j++) {\n                    self.addChip(\n                        objChips.data('index'),\n                        arrNewData[j],\n                        objChips,\n                        true\n                    );\n                }\n            });\n            return;\n        } else {\n            // init\n            this.init()\n\n            if (!chipsHandleEvents) {\n                this.handleEvents();\n                chipsHandleEvents = true;\n            }\n        }\n    }\n}(jQuery));\n","/*\r\n    Enhanced Bootstrap Modals\r\n    https://mdbootstrap.com\r\n    office@mdbootstrap.com\r\n*/\r\n\r\n$('body').on('shown.bs.modal', '.modal', function() {\r\n    if($('.modal-backdrop').length) {\r\n    } else {\r\n\r\n        $modal_dialog = $(this).children('.modal-dialog')\r\n\r\n        if($modal_dialog.hasClass('modal-side')) {\r\n            $(this).addClass('modal-scrolling');\r\n            $('body').addClass('scrollable');\r\n        }\r\n\r\n        if($modal_dialog.hasClass('modal-frame')) {\r\n            $(this).addClass('modal-content-clickable');\r\n            $('body').addClass('scrollable');\r\n        }\r\n    }\r\n});\r\n$('body').on('hidden.bs.modal', '.modal', function() {\r\n    $('body').removeClass('scrollable');\r\n});\r\n","/*!\n * Chart.js v2.8.0\n * https://www.chartjs.org\n * (c) 2019 Chart.js Contributors\n * Released under the MIT License\n */\n(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(function() { try { return require('moment'); } catch(e) { } }()) :\n    typeof define === 'function' && define.amd ? define(['require'], function(require) { return factory(function() { try { return require('moment'); } catch(e) { } }()); }) :\n    (global.Chart = factory(global.moment));\n    }(this, (function (moment) { 'use strict';\n\n    moment = moment && moment.hasOwnProperty('default') ? moment['default'] : moment;\n\n    /* MIT license */\n\n    var conversions = {\n      rgb2hsl: rgb2hsl,\n      rgb2hsv: rgb2hsv,\n      rgb2hwb: rgb2hwb,\n      rgb2cmyk: rgb2cmyk,\n      rgb2keyword: rgb2keyword,\n      rgb2xyz: rgb2xyz,\n      rgb2lab: rgb2lab,\n      rgb2lch: rgb2lch,\n\n      hsl2rgb: hsl2rgb,\n      hsl2hsv: hsl2hsv,\n      hsl2hwb: hsl2hwb,\n      hsl2cmyk: hsl2cmyk,\n      hsl2keyword: hsl2keyword,\n\n      hsv2rgb: hsv2rgb,\n      hsv2hsl: hsv2hsl,\n      hsv2hwb: hsv2hwb,\n      hsv2cmyk: hsv2cmyk,\n      hsv2keyword: hsv2keyword,\n\n      hwb2rgb: hwb2rgb,\n      hwb2hsl: hwb2hsl,\n      hwb2hsv: hwb2hsv,\n      hwb2cmyk: hwb2cmyk,\n      hwb2keyword: hwb2keyword,\n\n      cmyk2rgb: cmyk2rgb,\n      cmyk2hsl: cmyk2hsl,\n      cmyk2hsv: cmyk2hsv,\n      cmyk2hwb: cmyk2hwb,\n      cmyk2keyword: cmyk2keyword,\n\n      keyword2rgb: keyword2rgb,\n      keyword2hsl: keyword2hsl,\n      keyword2hsv: keyword2hsv,\n      keyword2hwb: keyword2hwb,\n      keyword2cmyk: keyword2cmyk,\n      keyword2lab: keyword2lab,\n      keyword2xyz: keyword2xyz,\n\n      xyz2rgb: xyz2rgb,\n      xyz2lab: xyz2lab,\n      xyz2lch: xyz2lch,\n\n      lab2xyz: lab2xyz,\n      lab2rgb: lab2rgb,\n      lab2lch: lab2lch,\n\n      lch2lab: lch2lab,\n      lch2xyz: lch2xyz,\n      lch2rgb: lch2rgb\n    };\n\n\n    function rgb2hsl(rgb) {\n      var r = rgb[0]/255,\n          g = rgb[1]/255,\n          b = rgb[2]/255,\n          min = Math.min(r, g, b),\n          max = Math.max(r, g, b),\n          delta = max - min,\n          h, s, l;\n\n      if (max == min)\n        h = 0;\n      else if (r == max)\n        h = (g - b) / delta;\n      else if (g == max)\n        h = 2 + (b - r) / delta;\n      else if (b == max)\n        h = 4 + (r - g)/ delta;\n\n      h = Math.min(h * 60, 360);\n\n      if (h < 0)\n        h += 360;\n\n      l = (min + max) / 2;\n\n      if (max == min)\n        s = 0;\n      else if (l <= 0.5)\n        s = delta / (max + min);\n      else\n        s = delta / (2 - max - min);\n\n      return [h, s * 100, l * 100];\n    }\n\n    function rgb2hsv(rgb) {\n      var r = rgb[0],\n          g = rgb[1],\n          b = rgb[2],\n          min = Math.min(r, g, b),\n          max = Math.max(r, g, b),\n          delta = max - min,\n          h, s, v;\n\n      if (max == 0)\n        s = 0;\n      else\n        s = (delta/max * 1000)/10;\n\n      if (max == min)\n        h = 0;\n      else if (r == max)\n        h = (g - b) / delta;\n      else if (g == max)\n        h = 2 + (b - r) / delta;\n      else if (b == max)\n        h = 4 + (r - g) / delta;\n\n      h = Math.min(h * 60, 360);\n\n      if (h < 0)\n        h += 360;\n\n      v = ((max / 255) * 1000) / 10;\n\n      return [h, s, v];\n    }\n\n    function rgb2hwb(rgb) {\n      var r = rgb[0],\n          g = rgb[1],\n          b = rgb[2],\n          h = rgb2hsl(rgb)[0],\n          w = 1/255 * Math.min(r, Math.min(g, b)),\n          b = 1 - 1/255 * Math.max(r, Math.max(g, b));\n\n      return [h, w * 100, b * 100];\n    }\n\n    function rgb2cmyk(rgb) {\n      var r = rgb[0] / 255,\n          g = rgb[1] / 255,\n          b = rgb[2] / 255,\n          c, m, y, k;\n\n      k = Math.min(1 - r, 1 - g, 1 - b);\n      c = (1 - r - k) / (1 - k) || 0;\n      m = (1 - g - k) / (1 - k) || 0;\n      y = (1 - b - k) / (1 - k) || 0;\n      return [c * 100, m * 100, y * 100, k * 100];\n    }\n\n    function rgb2keyword(rgb) {\n      return reverseKeywords[JSON.stringify(rgb)];\n    }\n\n    function rgb2xyz(rgb) {\n      var r = rgb[0] / 255,\n          g = rgb[1] / 255,\n          b = rgb[2] / 255;\n\n      // assume sRGB\n      r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);\n      g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);\n      b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);\n\n      var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n      var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n      var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n      return [x * 100, y *100, z * 100];\n    }\n\n    function rgb2lab(rgb) {\n      var xyz = rgb2xyz(rgb),\n            x = xyz[0],\n            y = xyz[1],\n            z = xyz[2],\n            l, a, b;\n\n      x /= 95.047;\n      y /= 100;\n      z /= 108.883;\n\n      x = x > 0.008856 ? Math.pow(x, 1/3) : (7.787 * x) + (16 / 116);\n      y = y > 0.008856 ? Math.pow(y, 1/3) : (7.787 * y) + (16 / 116);\n      z = z > 0.008856 ? Math.pow(z, 1/3) : (7.787 * z) + (16 / 116);\n\n      l = (116 * y) - 16;\n      a = 500 * (x - y);\n      b = 200 * (y - z);\n\n      return [l, a, b];\n    }\n\n    function rgb2lch(args) {\n      return lab2lch(rgb2lab(args));\n    }\n\n    function hsl2rgb(hsl) {\n      var h = hsl[0] / 360,\n          s = hsl[1] / 100,\n          l = hsl[2] / 100,\n          t1, t2, t3, rgb, val;\n\n      if (s == 0) {\n        val = l * 255;\n        return [val, val, val];\n      }\n\n      if (l < 0.5)\n        t2 = l * (1 + s);\n      else\n        t2 = l + s - l * s;\n      t1 = 2 * l - t2;\n\n      rgb = [0, 0, 0];\n      for (var i = 0; i < 3; i++) {\n        t3 = h + 1 / 3 * - (i - 1);\n        t3 < 0 && t3++;\n        t3 > 1 && t3--;\n\n        if (6 * t3 < 1)\n          val = t1 + (t2 - t1) * 6 * t3;\n        else if (2 * t3 < 1)\n          val = t2;\n        else if (3 * t3 < 2)\n          val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n        else\n          val = t1;\n\n        rgb[i] = val * 255;\n      }\n\n      return rgb;\n    }\n\n    function hsl2hsv(hsl) {\n      var h = hsl[0],\n          s = hsl[1] / 100,\n          l = hsl[2] / 100,\n          sv, v;\n\n      if(l === 0) {\n          // no need to do calc on black\n          // also avoids divide by 0 error\n          return [0, 0, 0];\n      }\n\n      l *= 2;\n      s *= (l <= 1) ? l : 2 - l;\n      v = (l + s) / 2;\n      sv = (2 * s) / (l + s);\n      return [h, sv * 100, v * 100];\n    }\n\n    function hsl2hwb(args) {\n      return rgb2hwb(hsl2rgb(args));\n    }\n\n    function hsl2cmyk(args) {\n      return rgb2cmyk(hsl2rgb(args));\n    }\n\n    function hsl2keyword(args) {\n      return rgb2keyword(hsl2rgb(args));\n    }\n\n\n    function hsv2rgb(hsv) {\n      var h = hsv[0] / 60,\n          s = hsv[1] / 100,\n          v = hsv[2] / 100,\n          hi = Math.floor(h) % 6;\n\n      var f = h - Math.floor(h),\n          p = 255 * v * (1 - s),\n          q = 255 * v * (1 - (s * f)),\n          t = 255 * v * (1 - (s * (1 - f))),\n          v = 255 * v;\n\n      switch(hi) {\n        case 0:\n          return [v, t, p];\n        case 1:\n          return [q, v, p];\n        case 2:\n          return [p, v, t];\n        case 3:\n          return [p, q, v];\n        case 4:\n          return [t, p, v];\n        case 5:\n          return [v, p, q];\n      }\n    }\n\n    function hsv2hsl(hsv) {\n      var h = hsv[0],\n          s = hsv[1] / 100,\n          v = hsv[2] / 100,\n          sl, l;\n\n      l = (2 - s) * v;\n      sl = s * v;\n      sl /= (l <= 1) ? l : 2 - l;\n      sl = sl || 0;\n      l /= 2;\n      return [h, sl * 100, l * 100];\n    }\n\n    function hsv2hwb(args) {\n      return rgb2hwb(hsv2rgb(args))\n    }\n\n    function hsv2cmyk(args) {\n      return rgb2cmyk(hsv2rgb(args));\n    }\n\n    function hsv2keyword(args) {\n      return rgb2keyword(hsv2rgb(args));\n    }\n\n    // http://dev.w3.org/csswg/css-color/#hwb-to-rgb\n    function hwb2rgb(hwb) {\n      var h = hwb[0] / 360,\n          wh = hwb[1] / 100,\n          bl = hwb[2] / 100,\n          ratio = wh + bl,\n          i, v, f, n;\n\n      // wh + bl cant be > 1\n      if (ratio > 1) {\n        wh /= ratio;\n        bl /= ratio;\n      }\n\n      i = Math.floor(6 * h);\n      v = 1 - bl;\n      f = 6 * h - i;\n      if ((i & 0x01) != 0) {\n        f = 1 - f;\n      }\n      n = wh + f * (v - wh);  // linear interpolation\n\n      switch (i) {\n        default:\n        case 6:\n        case 0: r = v; g = n; b = wh; break;\n        case 1: r = n; g = v; b = wh; break;\n        case 2: r = wh; g = v; b = n; break;\n        case 3: r = wh; g = n; b = v; break;\n        case 4: r = n; g = wh; b = v; break;\n        case 5: r = v; g = wh; b = n; break;\n      }\n\n      return [r * 255, g * 255, b * 255];\n    }\n\n    function hwb2hsl(args) {\n      return rgb2hsl(hwb2rgb(args));\n    }\n\n    function hwb2hsv(args) {\n      return rgb2hsv(hwb2rgb(args));\n    }\n\n    function hwb2cmyk(args) {\n      return rgb2cmyk(hwb2rgb(args));\n    }\n\n    function hwb2keyword(args) {\n      return rgb2keyword(hwb2rgb(args));\n    }\n\n    function cmyk2rgb(cmyk) {\n      var c = cmyk[0] / 100,\n          m = cmyk[1] / 100,\n          y = cmyk[2] / 100,\n          k = cmyk[3] / 100,\n          r, g, b;\n\n      r = 1 - Math.min(1, c * (1 - k) + k);\n      g = 1 - Math.min(1, m * (1 - k) + k);\n      b = 1 - Math.min(1, y * (1 - k) + k);\n      return [r * 255, g * 255, b * 255];\n    }\n\n    function cmyk2hsl(args) {\n      return rgb2hsl(cmyk2rgb(args));\n    }\n\n    function cmyk2hsv(args) {\n      return rgb2hsv(cmyk2rgb(args));\n    }\n\n    function cmyk2hwb(args) {\n      return rgb2hwb(cmyk2rgb(args));\n    }\n\n    function cmyk2keyword(args) {\n      return rgb2keyword(cmyk2rgb(args));\n    }\n\n\n    function xyz2rgb(xyz) {\n      var x = xyz[0] / 100,\n          y = xyz[1] / 100,\n          z = xyz[2] / 100,\n          r, g, b;\n\n      r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n      g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n      b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n      // assume sRGB\n      r = r > 0.0031308 ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)\n        : r = (r * 12.92);\n\n      g = g > 0.0031308 ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)\n        : g = (g * 12.92);\n\n      b = b > 0.0031308 ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)\n        : b = (b * 12.92);\n\n      r = Math.min(Math.max(0, r), 1);\n      g = Math.min(Math.max(0, g), 1);\n      b = Math.min(Math.max(0, b), 1);\n\n      return [r * 255, g * 255, b * 255];\n    }\n\n    function xyz2lab(xyz) {\n      var x = xyz[0],\n          y = xyz[1],\n          z = xyz[2],\n          l, a, b;\n\n      x /= 95.047;\n      y /= 100;\n      z /= 108.883;\n\n      x = x > 0.008856 ? Math.pow(x, 1/3) : (7.787 * x) + (16 / 116);\n      y = y > 0.008856 ? Math.pow(y, 1/3) : (7.787 * y) + (16 / 116);\n      z = z > 0.008856 ? Math.pow(z, 1/3) : (7.787 * z) + (16 / 116);\n\n      l = (116 * y) - 16;\n      a = 500 * (x - y);\n      b = 200 * (y - z);\n\n      return [l, a, b];\n    }\n\n    function xyz2lch(args) {\n      return lab2lch(xyz2lab(args));\n    }\n\n    function lab2xyz(lab) {\n      var l = lab[0],\n          a = lab[1],\n          b = lab[2],\n          x, y, z, y2;\n\n      if (l <= 8) {\n        y = (l * 100) / 903.3;\n        y2 = (7.787 * (y / 100)) + (16 / 116);\n      } else {\n        y = 100 * Math.pow((l + 16) / 116, 3);\n        y2 = Math.pow(y / 100, 1/3);\n      }\n\n      x = x / 95.047 <= 0.008856 ? x = (95.047 * ((a / 500) + y2 - (16 / 116))) / 7.787 : 95.047 * Math.pow((a / 500) + y2, 3);\n\n      z = z / 108.883 <= 0.008859 ? z = (108.883 * (y2 - (b / 200) - (16 / 116))) / 7.787 : 108.883 * Math.pow(y2 - (b / 200), 3);\n\n      return [x, y, z];\n    }\n\n    function lab2lch(lab) {\n      var l = lab[0],\n          a = lab[1],\n          b = lab[2],\n          hr, h, c;\n\n      hr = Math.atan2(b, a);\n      h = hr * 360 / 2 / Math.PI;\n      if (h < 0) {\n        h += 360;\n      }\n      c = Math.sqrt(a * a + b * b);\n      return [l, c, h];\n    }\n\n    function lab2rgb(args) {\n      return xyz2rgb(lab2xyz(args));\n    }\n\n    function lch2lab(lch) {\n      var l = lch[0],\n          c = lch[1],\n          h = lch[2],\n          a, b, hr;\n\n      hr = h / 360 * 2 * Math.PI;\n      a = c * Math.cos(hr);\n      b = c * Math.sin(hr);\n      return [l, a, b];\n    }\n\n    function lch2xyz(args) {\n      return lab2xyz(lch2lab(args));\n    }\n\n    function lch2rgb(args) {\n      return lab2rgb(lch2lab(args));\n    }\n\n    function keyword2rgb(keyword) {\n      return cssKeywords[keyword];\n    }\n\n    function keyword2hsl(args) {\n      return rgb2hsl(keyword2rgb(args));\n    }\n\n    function keyword2hsv(args) {\n      return rgb2hsv(keyword2rgb(args));\n    }\n\n    function keyword2hwb(args) {\n      return rgb2hwb(keyword2rgb(args));\n    }\n\n    function keyword2cmyk(args) {\n      return rgb2cmyk(keyword2rgb(args));\n    }\n\n    function keyword2lab(args) {\n      return rgb2lab(keyword2rgb(args));\n    }\n\n    function keyword2xyz(args) {\n      return rgb2xyz(keyword2rgb(args));\n    }\n\n    var cssKeywords = {\n      aliceblue:  [240,248,255],\n      antiquewhite: [250,235,215],\n      aqua: [0,255,255],\n      aquamarine: [127,255,212],\n      azure:  [240,255,255],\n      beige:  [245,245,220],\n      bisque: [255,228,196],\n      black:  [0,0,0],\n      blanchedalmond: [255,235,205],\n      blue: [0,0,255],\n      blueviolet: [138,43,226],\n      brown:  [165,42,42],\n      burlywood:  [222,184,135],\n      cadetblue:  [95,158,160],\n      chartreuse: [127,255,0],\n      chocolate:  [210,105,30],\n      coral:  [255,127,80],\n      cornflowerblue: [100,149,237],\n      cornsilk: [255,248,220],\n      crimson:  [220,20,60],\n      cyan: [0,255,255],\n      darkblue: [0,0,139],\n      darkcyan: [0,139,139],\n      darkgoldenrod:  [184,134,11],\n      darkgray: [169,169,169],\n      darkgreen:  [0,100,0],\n      darkgrey: [169,169,169],\n      darkkhaki:  [189,183,107],\n      darkmagenta:  [139,0,139],\n      darkolivegreen: [85,107,47],\n      darkorange: [255,140,0],\n      darkorchid: [153,50,204],\n      darkred:  [139,0,0],\n      darksalmon: [233,150,122],\n      darkseagreen: [143,188,143],\n      darkslateblue:  [72,61,139],\n      darkslategray:  [47,79,79],\n      darkslategrey:  [47,79,79],\n      darkturquoise:  [0,206,209],\n      darkviolet: [148,0,211],\n      deeppink: [255,20,147],\n      deepskyblue:  [0,191,255],\n      dimgray:  [105,105,105],\n      dimgrey:  [105,105,105],\n      dodgerblue: [30,144,255],\n      firebrick:  [178,34,34],\n      floralwhite:  [255,250,240],\n      forestgreen:  [34,139,34],\n      fuchsia:  [255,0,255],\n      gainsboro:  [220,220,220],\n      ghostwhite: [248,248,255],\n      gold: [255,215,0],\n      goldenrod:  [218,165,32],\n      gray: [128,128,128],\n      green:  [0,128,0],\n      greenyellow:  [173,255,47],\n      grey: [128,128,128],\n      honeydew: [240,255,240],\n      hotpink:  [255,105,180],\n      indianred:  [205,92,92],\n      indigo: [75,0,130],\n      ivory:  [255,255,240],\n      khaki:  [240,230,140],\n      lavender: [230,230,250],\n      lavenderblush:  [255,240,245],\n      lawngreen:  [124,252,0],\n      lemonchiffon: [255,250,205],\n      lightblue:  [173,216,230],\n      lightcoral: [240,128,128],\n      lightcyan:  [224,255,255],\n      lightgoldenrodyellow: [250,250,210],\n      lightgray:  [211,211,211],\n      lightgreen: [144,238,144],\n      lightgrey:  [211,211,211],\n      lightpink:  [255,182,193],\n      lightsalmon:  [255,160,122],\n      lightseagreen:  [32,178,170],\n      lightskyblue: [135,206,250],\n      lightslategray: [119,136,153],\n      lightslategrey: [119,136,153],\n      lightsteelblue: [176,196,222],\n      lightyellow:  [255,255,224],\n      lime: [0,255,0],\n      limegreen:  [50,205,50],\n      linen:  [250,240,230],\n      magenta:  [255,0,255],\n      maroon: [128,0,0],\n      mediumaquamarine: [102,205,170],\n      mediumblue: [0,0,205],\n      mediumorchid: [186,85,211],\n      mediumpurple: [147,112,219],\n      mediumseagreen: [60,179,113],\n      mediumslateblue:  [123,104,238],\n      mediumspringgreen:  [0,250,154],\n      mediumturquoise:  [72,209,204],\n      mediumvioletred:  [199,21,133],\n      midnightblue: [25,25,112],\n      mintcream:  [245,255,250],\n      mistyrose:  [255,228,225],\n      moccasin: [255,228,181],\n      navajowhite:  [255,222,173],\n      navy: [0,0,128],\n      oldlace:  [253,245,230],\n      olive:  [128,128,0],\n      olivedrab:  [107,142,35],\n      orange: [255,165,0],\n      orangered:  [255,69,0],\n      orchid: [218,112,214],\n      palegoldenrod:  [238,232,170],\n      palegreen:  [152,251,152],\n      paleturquoise:  [175,238,238],\n      palevioletred:  [219,112,147],\n      papayawhip: [255,239,213],\n      peachpuff:  [255,218,185],\n      peru: [205,133,63],\n      pink: [255,192,203],\n      plum: [221,160,221],\n      powderblue: [176,224,230],\n      purple: [128,0,128],\n      rebeccapurple: [102, 51, 153],\n      red:  [255,0,0],\n      rosybrown:  [188,143,143],\n      royalblue:  [65,105,225],\n      saddlebrown:  [139,69,19],\n      salmon: [250,128,114],\n      sandybrown: [244,164,96],\n      seagreen: [46,139,87],\n      seashell: [255,245,238],\n      sienna: [160,82,45],\n      silver: [192,192,192],\n      skyblue:  [135,206,235],\n      slateblue:  [106,90,205],\n      slategray:  [112,128,144],\n      slategrey:  [112,128,144],\n      snow: [255,250,250],\n      springgreen:  [0,255,127],\n      steelblue:  [70,130,180],\n      tan:  [210,180,140],\n      teal: [0,128,128],\n      thistle:  [216,191,216],\n      tomato: [255,99,71],\n      turquoise:  [64,224,208],\n      violet: [238,130,238],\n      wheat:  [245,222,179],\n      white:  [255,255,255],\n      whitesmoke: [245,245,245],\n      yellow: [255,255,0],\n      yellowgreen:  [154,205,50]\n    };\n\n    var reverseKeywords = {};\n    for (var key in cssKeywords) {\n      reverseKeywords[JSON.stringify(cssKeywords[key])] = key;\n    }\n\n    var convert = function() {\n       return new Converter();\n    };\n\n    for (var func in conversions) {\n      // export Raw versions\n      convert[func + \"Raw\"] =  (function(func) {\n        // accept array or plain args\n        return function(arg) {\n          if (typeof arg == \"number\")\n            arg = Array.prototype.slice.call(arguments);\n          return conversions[func](arg);\n        }\n      })(func);\n\n      var pair = /(\\w+)2(\\w+)/.exec(func),\n          from = pair[1],\n          to = pair[2];\n\n      // export rgb2hsl and [\"rgb\"][\"hsl\"]\n      convert[from] = convert[from] || {};\n\n      convert[from][to] = convert[func] = (function(func) {\n        return function(arg) {\n          if (typeof arg == \"number\")\n            arg = Array.prototype.slice.call(arguments);\n\n          var val = conversions[func](arg);\n          if (typeof val == \"string\" || val === undefined)\n            return val; // keyword\n\n          for (var i = 0; i < val.length; i++)\n            val[i] = Math.round(val[i]);\n          return val;\n        }\n      })(func);\n    }\n\n\n    /* Converter does lazy conversion and caching */\n    var Converter = function() {\n       this.convs = {};\n    };\n\n    /* Either get the values for a space or\n      set the values for a space, depending on args */\n    Converter.prototype.routeSpace = function(space, args) {\n       var values = args[0];\n       if (values === undefined) {\n          // color.rgb()\n          return this.getValues(space);\n       }\n       // color.rgb(10, 10, 10)\n       if (typeof values == \"number\") {\n          values = Array.prototype.slice.call(args);\n       }\n\n       return this.setValues(space, values);\n    };\n\n    /* Set the values for a space, invalidating cache */\n    Converter.prototype.setValues = function(space, values) {\n       this.space = space;\n       this.convs = {};\n       this.convs[space] = values;\n       return this;\n    };\n\n    /* Get the values for a space. If there's already\n      a conversion for the space, fetch it, otherwise\n      compute it */\n    Converter.prototype.getValues = function(space) {\n       var vals = this.convs[space];\n       if (!vals) {\n          var fspace = this.space,\n              from = this.convs[fspace];\n          vals = convert[fspace][space](from);\n\n          this.convs[space] = vals;\n       }\n      return vals;\n    };\n\n    [\"rgb\", \"hsl\", \"hsv\", \"cmyk\", \"keyword\"].forEach(function(space) {\n       Converter.prototype[space] = function(vals) {\n          return this.routeSpace(space, arguments);\n       };\n    });\n\n    var colorConvert = convert;\n\n    var colorName = {\n        \"aliceblue\": [240, 248, 255],\n        \"antiquewhite\": [250, 235, 215],\n        \"aqua\": [0, 255, 255],\n        \"aquamarine\": [127, 255, 212],\n        \"azure\": [240, 255, 255],\n        \"beige\": [245, 245, 220],\n        \"bisque\": [255, 228, 196],\n        \"black\": [0, 0, 0],\n        \"blanchedalmond\": [255, 235, 205],\n        \"blue\": [0, 0, 255],\n        \"blueviolet\": [138, 43, 226],\n        \"brown\": [165, 42, 42],\n        \"burlywood\": [222, 184, 135],\n        \"cadetblue\": [95, 158, 160],\n        \"chartreuse\": [127, 255, 0],\n        \"chocolate\": [210, 105, 30],\n        \"coral\": [255, 127, 80],\n        \"cornflowerblue\": [100, 149, 237],\n        \"cornsilk\": [255, 248, 220],\n        \"crimson\": [220, 20, 60],\n        \"cyan\": [0, 255, 255],\n        \"darkblue\": [0, 0, 139],\n        \"darkcyan\": [0, 139, 139],\n        \"darkgoldenrod\": [184, 134, 11],\n        \"darkgray\": [169, 169, 169],\n        \"darkgreen\": [0, 100, 0],\n        \"darkgrey\": [169, 169, 169],\n        \"darkkhaki\": [189, 183, 107],\n        \"darkmagenta\": [139, 0, 139],\n        \"darkolivegreen\": [85, 107, 47],\n        \"darkorange\": [255, 140, 0],\n        \"darkorchid\": [153, 50, 204],\n        \"darkred\": [139, 0, 0],\n        \"darksalmon\": [233, 150, 122],\n        \"darkseagreen\": [143, 188, 143],\n        \"darkslateblue\": [72, 61, 139],\n        \"darkslategray\": [47, 79, 79],\n        \"darkslategrey\": [47, 79, 79],\n        \"darkturquoise\": [0, 206, 209],\n        \"darkviolet\": [148, 0, 211],\n        \"deeppink\": [255, 20, 147],\n        \"deepskyblue\": [0, 191, 255],\n        \"dimgray\": [105, 105, 105],\n        \"dimgrey\": [105, 105, 105],\n        \"dodgerblue\": [30, 144, 255],\n        \"firebrick\": [178, 34, 34],\n        \"floralwhite\": [255, 250, 240],\n        \"forestgreen\": [34, 139, 34],\n        \"fuchsia\": [255, 0, 255],\n        \"gainsboro\": [220, 220, 220],\n        \"ghostwhite\": [248, 248, 255],\n        \"gold\": [255, 215, 0],\n        \"goldenrod\": [218, 165, 32],\n        \"gray\": [128, 128, 128],\n        \"green\": [0, 128, 0],\n        \"greenyellow\": [173, 255, 47],\n        \"grey\": [128, 128, 128],\n        \"honeydew\": [240, 255, 240],\n        \"hotpink\": [255, 105, 180],\n        \"indianred\": [205, 92, 92],\n        \"indigo\": [75, 0, 130],\n        \"ivory\": [255, 255, 240],\n        \"khaki\": [240, 230, 140],\n        \"lavender\": [230, 230, 250],\n        \"lavenderblush\": [255, 240, 245],\n        \"lawngreen\": [124, 252, 0],\n        \"lemonchiffon\": [255, 250, 205],\n        \"lightblue\": [173, 216, 230],\n        \"lightcoral\": [240, 128, 128],\n        \"lightcyan\": [224, 255, 255],\n        \"lightgoldenrodyellow\": [250, 250, 210],\n        \"lightgray\": [211, 211, 211],\n        \"lightgreen\": [144, 238, 144],\n        \"lightgrey\": [211, 211, 211],\n        \"lightpink\": [255, 182, 193],\n        \"lightsalmon\": [255, 160, 122],\n        \"lightseagreen\": [32, 178, 170],\n        \"lightskyblue\": [135, 206, 250],\n        \"lightslategray\": [119, 136, 153],\n        \"lightslategrey\": [119, 136, 153],\n        \"lightsteelblue\": [176, 196, 222],\n        \"lightyellow\": [255, 255, 224],\n        \"lime\": [0, 255, 0],\n        \"limegreen\": [50, 205, 50],\n        \"linen\": [250, 240, 230],\n        \"magenta\": [255, 0, 255],\n        \"maroon\": [128, 0, 0],\n        \"mediumaquamarine\": [102, 205, 170],\n        \"mediumblue\": [0, 0, 205],\n        \"mediumorchid\": [186, 85, 211],\n        \"mediumpurple\": [147, 112, 219],\n        \"mediumseagreen\": [60, 179, 113],\n        \"mediumslateblue\": [123, 104, 238],\n        \"mediumspringgreen\": [0, 250, 154],\n        \"mediumturquoise\": [72, 209, 204],\n        \"mediumvioletred\": [199, 21, 133],\n        \"midnightblue\": [25, 25, 112],\n        \"mintcream\": [245, 255, 250],\n        \"mistyrose\": [255, 228, 225],\n        \"moccasin\": [255, 228, 181],\n        \"navajowhite\": [255, 222, 173],\n        \"navy\": [0, 0, 128],\n        \"oldlace\": [253, 245, 230],\n        \"olive\": [128, 128, 0],\n        \"olivedrab\": [107, 142, 35],\n        \"orange\": [255, 165, 0],\n        \"orangered\": [255, 69, 0],\n        \"orchid\": [218, 112, 214],\n        \"palegoldenrod\": [238, 232, 170],\n        \"palegreen\": [152, 251, 152],\n        \"paleturquoise\": [175, 238, 238],\n        \"palevioletred\": [219, 112, 147],\n        \"papayawhip\": [255, 239, 213],\n        \"peachpuff\": [255, 218, 185],\n        \"peru\": [205, 133, 63],\n        \"pink\": [255, 192, 203],\n        \"plum\": [221, 160, 221],\n        \"powderblue\": [176, 224, 230],\n        \"purple\": [128, 0, 128],\n        \"rebeccapurple\": [102, 51, 153],\n        \"red\": [255, 0, 0],\n        \"rosybrown\": [188, 143, 143],\n        \"royalblue\": [65, 105, 225],\n        \"saddlebrown\": [139, 69, 19],\n        \"salmon\": [250, 128, 114],\n        \"sandybrown\": [244, 164, 96],\n        \"seagreen\": [46, 139, 87],\n        \"seashell\": [255, 245, 238],\n        \"sienna\": [160, 82, 45],\n        \"silver\": [192, 192, 192],\n        \"skyblue\": [135, 206, 235],\n        \"slateblue\": [106, 90, 205],\n        \"slategray\": [112, 128, 144],\n        \"slategrey\": [112, 128, 144],\n        \"snow\": [255, 250, 250],\n        \"springgreen\": [0, 255, 127],\n        \"steelblue\": [70, 130, 180],\n        \"tan\": [210, 180, 140],\n        \"teal\": [0, 128, 128],\n        \"thistle\": [216, 191, 216],\n        \"tomato\": [255, 99, 71],\n        \"turquoise\": [64, 224, 208],\n        \"violet\": [238, 130, 238],\n        \"wheat\": [245, 222, 179],\n        \"white\": [255, 255, 255],\n        \"whitesmoke\": [245, 245, 245],\n        \"yellow\": [255, 255, 0],\n        \"yellowgreen\": [154, 205, 50]\n    };\n\n    /* MIT license */\n\n\n    var colorString = {\n       getRgba: getRgba,\n       getHsla: getHsla,\n       getRgb: getRgb,\n       getHsl: getHsl,\n       getHwb: getHwb,\n       getAlpha: getAlpha,\n\n       hexString: hexString,\n       rgbString: rgbString,\n       rgbaString: rgbaString,\n       percentString: percentString,\n       percentaString: percentaString,\n       hslString: hslString,\n       hslaString: hslaString,\n       hwbString: hwbString,\n       keyword: keyword\n    };\n\n    function getRgba(string) {\n       if (!string) {\n          return;\n       }\n       var abbr =  /^#([a-fA-F0-9]{3,4})$/i,\n           hex =  /^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i,\n           rgba = /^rgba?\\(\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*,\\s*([+-]?\\d+)\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n           per = /^rgba?\\(\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*,\\s*([+-]?[\\d\\.]+)\\%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)$/i,\n           keyword = /(\\w+)/;\n\n       var rgb = [0, 0, 0],\n           a = 1,\n           match = string.match(abbr),\n           hexAlpha = \"\";\n       if (match) {\n          match = match[1];\n          hexAlpha = match[3];\n          for (var i = 0; i < rgb.length; i++) {\n             rgb[i] = parseInt(match[i] + match[i], 16);\n          }\n          if (hexAlpha) {\n             a = Math.round((parseInt(hexAlpha + hexAlpha, 16) / 255) * 100) / 100;\n          }\n       }\n       else if (match = string.match(hex)) {\n          hexAlpha = match[2];\n          match = match[1];\n          for (var i = 0; i < rgb.length; i++) {\n             rgb[i] = parseInt(match.slice(i * 2, i * 2 + 2), 16);\n          }\n          if (hexAlpha) {\n             a = Math.round((parseInt(hexAlpha, 16) / 255) * 100) / 100;\n          }\n       }\n       else if (match = string.match(rgba)) {\n          for (var i = 0; i < rgb.length; i++) {\n             rgb[i] = parseInt(match[i + 1]);\n          }\n          a = parseFloat(match[4]);\n       }\n       else if (match = string.match(per)) {\n          for (var i = 0; i < rgb.length; i++) {\n             rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);\n          }\n          a = parseFloat(match[4]);\n       }\n       else if (match = string.match(keyword)) {\n          if (match[1] == \"transparent\") {\n             return [0, 0, 0, 0];\n          }\n          rgb = colorName[match[1]];\n          if (!rgb) {\n             return;\n          }\n       }\n\n       for (var i = 0; i < rgb.length; i++) {\n          rgb[i] = scale(rgb[i], 0, 255);\n       }\n       if (!a && a != 0) {\n          a = 1;\n       }\n       else {\n          a = scale(a, 0, 1);\n       }\n       rgb[3] = a;\n       return rgb;\n    }\n\n    function getHsla(string) {\n       if (!string) {\n          return;\n       }\n       var hsl = /^hsla?\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n       var match = string.match(hsl);\n       if (match) {\n          var alpha = parseFloat(match[4]);\n          var h = scale(parseInt(match[1]), 0, 360),\n              s = scale(parseFloat(match[2]), 0, 100),\n              l = scale(parseFloat(match[3]), 0, 100),\n              a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n          return [h, s, l, a];\n       }\n    }\n\n    function getHwb(string) {\n       if (!string) {\n          return;\n       }\n       var hwb = /^hwb\\(\\s*([+-]?\\d+)(?:deg)?\\s*,\\s*([+-]?[\\d\\.]+)%\\s*,\\s*([+-]?[\\d\\.]+)%\\s*(?:,\\s*([+-]?[\\d\\.]+)\\s*)?\\)/;\n       var match = string.match(hwb);\n       if (match) {\n        var alpha = parseFloat(match[4]);\n          var h = scale(parseInt(match[1]), 0, 360),\n              w = scale(parseFloat(match[2]), 0, 100),\n              b = scale(parseFloat(match[3]), 0, 100),\n              a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);\n          return [h, w, b, a];\n       }\n    }\n\n    function getRgb(string) {\n       var rgba = getRgba(string);\n       return rgba && rgba.slice(0, 3);\n    }\n\n    function getHsl(string) {\n      var hsla = getHsla(string);\n      return hsla && hsla.slice(0, 3);\n    }\n\n    function getAlpha(string) {\n       var vals = getRgba(string);\n       if (vals) {\n          return vals[3];\n       }\n       else if (vals = getHsla(string)) {\n          return vals[3];\n       }\n       else if (vals = getHwb(string)) {\n          return vals[3];\n       }\n    }\n\n    // generators\n    function hexString(rgba, a) {\n       var a = (a !== undefined && rgba.length === 3) ? a : rgba[3];\n       return \"#\" + hexDouble(rgba[0])\n                  + hexDouble(rgba[1])\n                  + hexDouble(rgba[2])\n                  + (\n                     (a >= 0 && a < 1)\n                     ? hexDouble(Math.round(a * 255))\n                     : \"\"\n                  );\n    }\n\n    function rgbString(rgba, alpha) {\n       if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {\n          return rgbaString(rgba, alpha);\n       }\n       return \"rgb(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2] + \")\";\n    }\n\n    function rgbaString(rgba, alpha) {\n       if (alpha === undefined) {\n          alpha = (rgba[3] !== undefined ? rgba[3] : 1);\n       }\n       return \"rgba(\" + rgba[0] + \", \" + rgba[1] + \", \" + rgba[2]\n               + \", \" + alpha + \")\";\n    }\n\n    function percentString(rgba, alpha) {\n       if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {\n          return percentaString(rgba, alpha);\n       }\n       var r = Math.round(rgba[0]/255 * 100),\n           g = Math.round(rgba[1]/255 * 100),\n           b = Math.round(rgba[2]/255 * 100);\n\n       return \"rgb(\" + r + \"%, \" + g + \"%, \" + b + \"%)\";\n    }\n\n    function percentaString(rgba, alpha) {\n       var r = Math.round(rgba[0]/255 * 100),\n           g = Math.round(rgba[1]/255 * 100),\n           b = Math.round(rgba[2]/255 * 100);\n       return \"rgba(\" + r + \"%, \" + g + \"%, \" + b + \"%, \" + (alpha || rgba[3] || 1) + \")\";\n    }\n\n    function hslString(hsla, alpha) {\n       if (alpha < 1 || (hsla[3] && hsla[3] < 1)) {\n          return hslaString(hsla, alpha);\n       }\n       return \"hsl(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%)\";\n    }\n\n    function hslaString(hsla, alpha) {\n       if (alpha === undefined) {\n          alpha = (hsla[3] !== undefined ? hsla[3] : 1);\n       }\n       return \"hsla(\" + hsla[0] + \", \" + hsla[1] + \"%, \" + hsla[2] + \"%, \"\n               + alpha + \")\";\n    }\n\n    // hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax\n    // (hwb have alpha optional & 1 is default value)\n    function hwbString(hwb, alpha) {\n       if (alpha === undefined) {\n          alpha = (hwb[3] !== undefined ? hwb[3] : 1);\n       }\n       return \"hwb(\" + hwb[0] + \", \" + hwb[1] + \"%, \" + hwb[2] + \"%\"\n               + (alpha !== undefined && alpha !== 1 ? \", \" + alpha : \"\") + \")\";\n    }\n\n    function keyword(rgb) {\n      return reverseNames[rgb.slice(0, 3)];\n    }\n\n    // helpers\n    function scale(num, min, max) {\n       return Math.min(Math.max(min, num), max);\n    }\n\n    function hexDouble(num) {\n      var str = num.toString(16).toUpperCase();\n      return (str.length < 2) ? \"0\" + str : str;\n    }\n\n\n    //create a list of reverse color names\n    var reverseNames = {};\n    for (var name in colorName) {\n       reverseNames[colorName[name]] = name;\n    }\n\n    /* MIT license */\n\n\n\n    var Color = function (obj) {\n        if (obj instanceof Color) {\n            return obj;\n        }\n        if (!(this instanceof Color)) {\n            return new Color(obj);\n        }\n\n        this.valid = false;\n        this.values = {\n            rgb: [0, 0, 0],\n            hsl: [0, 0, 0],\n            hsv: [0, 0, 0],\n            hwb: [0, 0, 0],\n            cmyk: [0, 0, 0, 0],\n            alpha: 1\n        };\n\n        // parse Color() argument\n        var vals;\n        if (typeof obj === 'string') {\n            vals = colorString.getRgba(obj);\n            if (vals) {\n                this.setValues('rgb', vals);\n            } else if (vals = colorString.getHsla(obj)) {\n                this.setValues('hsl', vals);\n            } else if (vals = colorString.getHwb(obj)) {\n                this.setValues('hwb', vals);\n            }\n        } else if (typeof obj === 'object') {\n            vals = obj;\n            if (vals.r !== undefined || vals.red !== undefined) {\n                this.setValues('rgb', vals);\n            } else if (vals.l !== undefined || vals.lightness !== undefined) {\n                this.setValues('hsl', vals);\n            } else if (vals.v !== undefined || vals.value !== undefined) {\n                this.setValues('hsv', vals);\n            } else if (vals.w !== undefined || vals.whiteness !== undefined) {\n                this.setValues('hwb', vals);\n            } else if (vals.c !== undefined || vals.cyan !== undefined) {\n                this.setValues('cmyk', vals);\n            }\n        }\n    };\n\n    Color.prototype = {\n        isValid: function () {\n            return this.valid;\n        },\n        rgb: function () {\n            return this.setSpace('rgb', arguments);\n        },\n        hsl: function () {\n            return this.setSpace('hsl', arguments);\n        },\n        hsv: function () {\n            return this.setSpace('hsv', arguments);\n        },\n        hwb: function () {\n            return this.setSpace('hwb', arguments);\n        },\n        cmyk: function () {\n            return this.setSpace('cmyk', arguments);\n        },\n\n        rgbArray: function () {\n            return this.values.rgb;\n        },\n        hslArray: function () {\n            return this.values.hsl;\n        },\n        hsvArray: function () {\n            return this.values.hsv;\n        },\n        hwbArray: function () {\n            var values = this.values;\n            if (values.alpha !== 1) {\n                return values.hwb.concat([values.alpha]);\n            }\n            return values.hwb;\n        },\n        cmykArray: function () {\n            return this.values.cmyk;\n        },\n        rgbaArray: function () {\n            var values = this.values;\n            return values.rgb.concat([values.alpha]);\n        },\n        hslaArray: function () {\n            var values = this.values;\n            return values.hsl.concat([values.alpha]);\n        },\n        alpha: function (val) {\n            if (val === undefined) {\n                return this.values.alpha;\n            }\n            this.setValues('alpha', val);\n            return this;\n        },\n\n        red: function (val) {\n            return this.setChannel('rgb', 0, val);\n        },\n        green: function (val) {\n            return this.setChannel('rgb', 1, val);\n        },\n        blue: function (val) {\n            return this.setChannel('rgb', 2, val);\n        },\n        hue: function (val) {\n            if (val) {\n                val %= 360;\n                val = val < 0 ? 360 + val : val;\n            }\n            return this.setChannel('hsl', 0, val);\n        },\n        saturation: function (val) {\n            return this.setChannel('hsl', 1, val);\n        },\n        lightness: function (val) {\n            return this.setChannel('hsl', 2, val);\n        },\n        saturationv: function (val) {\n            return this.setChannel('hsv', 1, val);\n        },\n        whiteness: function (val) {\n            return this.setChannel('hwb', 1, val);\n        },\n        blackness: function (val) {\n            return this.setChannel('hwb', 2, val);\n        },\n        value: function (val) {\n            return this.setChannel('hsv', 2, val);\n        },\n        cyan: function (val) {\n            return this.setChannel('cmyk', 0, val);\n        },\n        magenta: function (val) {\n            return this.setChannel('cmyk', 1, val);\n        },\n        yellow: function (val) {\n            return this.setChannel('cmyk', 2, val);\n        },\n        black: function (val) {\n            return this.setChannel('cmyk', 3, val);\n        },\n\n        hexString: function () {\n            return colorString.hexString(this.values.rgb);\n        },\n        rgbString: function () {\n            return colorString.rgbString(this.values.rgb, this.values.alpha);\n        },\n        rgbaString: function () {\n            return colorString.rgbaString(this.values.rgb, this.values.alpha);\n        },\n        percentString: function () {\n            return colorString.percentString(this.values.rgb, this.values.alpha);\n        },\n        hslString: function () {\n            return colorString.hslString(this.values.hsl, this.values.alpha);\n        },\n        hslaString: function () {\n            return colorString.hslaString(this.values.hsl, this.values.alpha);\n        },\n        hwbString: function () {\n            return colorString.hwbString(this.values.hwb, this.values.alpha);\n        },\n        keyword: function () {\n            return colorString.keyword(this.values.rgb, this.values.alpha);\n        },\n\n        rgbNumber: function () {\n            var rgb = this.values.rgb;\n            return (rgb[0] << 16) | (rgb[1] << 8) | rgb[2];\n        },\n\n        luminosity: function () {\n            // http://www.w3.org/TR/WCAG20/#relativeluminancedef\n            var rgb = this.values.rgb;\n            var lum = [];\n            for (var i = 0; i < rgb.length; i++) {\n                var chan = rgb[i] / 255;\n                lum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4);\n            }\n            return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];\n        },\n\n        contrast: function (color2) {\n            // http://www.w3.org/TR/WCAG20/#contrast-ratiodef\n            var lum1 = this.luminosity();\n            var lum2 = color2.luminosity();\n            if (lum1 > lum2) {\n                return (lum1 + 0.05) / (lum2 + 0.05);\n            }\n            return (lum2 + 0.05) / (lum1 + 0.05);\n        },\n\n        level: function (color2) {\n            var contrastRatio = this.contrast(color2);\n            if (contrastRatio >= 7.1) {\n                return 'AAA';\n            }\n\n            return (contrastRatio >= 4.5) ? 'AA' : '';\n        },\n\n        dark: function () {\n            // YIQ equation from http://24ways.org/2010/calculating-color-contrast\n            var rgb = this.values.rgb;\n            var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;\n            return yiq < 128;\n        },\n\n        light: function () {\n            return !this.dark();\n        },\n\n        negate: function () {\n            var rgb = [];\n            for (var i = 0; i < 3; i++) {\n                rgb[i] = 255 - this.values.rgb[i];\n            }\n            this.setValues('rgb', rgb);\n            return this;\n        },\n\n        lighten: function (ratio) {\n            var hsl = this.values.hsl;\n            hsl[2] += hsl[2] * ratio;\n            this.setValues('hsl', hsl);\n            return this;\n        },\n\n        darken: function (ratio) {\n            var hsl = this.values.hsl;\n            hsl[2] -= hsl[2] * ratio;\n            this.setValues('hsl', hsl);\n            return this;\n        },\n\n        saturate: function (ratio) {\n            var hsl = this.values.hsl;\n            hsl[1] += hsl[1] * ratio;\n            this.setValues('hsl', hsl);\n            return this;\n        },\n\n        desaturate: function (ratio) {\n            var hsl = this.values.hsl;\n            hsl[1] -= hsl[1] * ratio;\n            this.setValues('hsl', hsl);\n            return this;\n        },\n\n        whiten: function (ratio) {\n            var hwb = this.values.hwb;\n            hwb[1] += hwb[1] * ratio;\n            this.setValues('hwb', hwb);\n            return this;\n        },\n\n        blacken: function (ratio) {\n            var hwb = this.values.hwb;\n            hwb[2] += hwb[2] * ratio;\n            this.setValues('hwb', hwb);\n            return this;\n        },\n\n        greyscale: function () {\n            var rgb = this.values.rgb;\n            // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale\n            var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;\n            this.setValues('rgb', [val, val, val]);\n            return this;\n        },\n\n        clearer: function (ratio) {\n            var alpha = this.values.alpha;\n            this.setValues('alpha', alpha - (alpha * ratio));\n            return this;\n        },\n\n        opaquer: function (ratio) {\n            var alpha = this.values.alpha;\n            this.setValues('alpha', alpha + (alpha * ratio));\n            return this;\n        },\n\n        rotate: function (degrees) {\n            var hsl = this.values.hsl;\n            var hue = (hsl[0] + degrees) % 360;\n            hsl[0] = hue < 0 ? 360 + hue : hue;\n            this.setValues('hsl', hsl);\n            return this;\n        },\n\n        /**\n         * Ported from sass implementation in C\n         * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209\n         */\n        mix: function (mixinColor, weight) {\n            var color1 = this;\n            var color2 = mixinColor;\n            var p = weight === undefined ? 0.5 : weight;\n\n            var w = 2 * p - 1;\n            var a = color1.alpha() - color2.alpha();\n\n            var w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n            var w2 = 1 - w1;\n\n            return this\n                .rgb(\n                    w1 * color1.red() + w2 * color2.red(),\n                    w1 * color1.green() + w2 * color2.green(),\n                    w1 * color1.blue() + w2 * color2.blue()\n                )\n                .alpha(color1.alpha() * p + color2.alpha() * (1 - p));\n        },\n\n        toJSON: function () {\n            return this.rgb();\n        },\n\n        clone: function () {\n            // NOTE(SB): using node-clone creates a dependency to Buffer when using browserify,\n            // making the final build way to big to embed in Chart.js. So let's do it manually,\n            // assuming that values to clone are 1 dimension arrays containing only numbers,\n            // except 'alpha' which is a number.\n            var result = new Color();\n            var source = this.values;\n            var target = result.values;\n            var value, type;\n\n            for (var prop in source) {\n                if (source.hasOwnProperty(prop)) {\n                    value = source[prop];\n                    type = ({}).toString.call(value);\n                    if (type === '[object Array]') {\n                        target[prop] = value.slice(0);\n                    } else if (type === '[object Number]') {\n                        target[prop] = value;\n                    } else {\n                        console.error('unexpected color value:', value);\n                    }\n                }\n            }\n\n            return result;\n        }\n    };\n\n    Color.prototype.spaces = {\n        rgb: ['red', 'green', 'blue'],\n        hsl: ['hue', 'saturation', 'lightness'],\n        hsv: ['hue', 'saturation', 'value'],\n        hwb: ['hue', 'whiteness', 'blackness'],\n        cmyk: ['cyan', 'magenta', 'yellow', 'black']\n    };\n\n    Color.prototype.maxes = {\n        rgb: [255, 255, 255],\n        hsl: [360, 100, 100],\n        hsv: [360, 100, 100],\n        hwb: [360, 100, 100],\n        cmyk: [100, 100, 100, 100]\n    };\n\n    Color.prototype.getValues = function (space) {\n        var values = this.values;\n        var vals = {};\n\n        for (var i = 0; i < space.length; i++) {\n            vals[space.charAt(i)] = values[space][i];\n        }\n\n        if (values.alpha !== 1) {\n            vals.a = values.alpha;\n        }\n\n        // {r: 255, g: 255, b: 255, a: 0.4}\n        return vals;\n    };\n\n    Color.prototype.setValues = function (space, vals) {\n        var values = this.values;\n        var spaces = this.spaces;\n        var maxes = this.maxes;\n        var alpha = 1;\n        var i;\n\n        this.valid = true;\n\n        if (space === 'alpha') {\n            alpha = vals;\n        } else if (vals.length) {\n            // [10, 10, 10]\n            values[space] = vals.slice(0, space.length);\n            alpha = vals[space.length];\n        } else if (vals[space.charAt(0)] !== undefined) {\n            // {r: 10, g: 10, b: 10}\n            for (i = 0; i < space.length; i++) {\n                values[space][i] = vals[space.charAt(i)];\n            }\n\n            alpha = vals.a;\n        } else if (vals[spaces[space][0]] !== undefined) {\n            // {red: 10, green: 10, blue: 10}\n            var chans = spaces[space];\n\n            for (i = 0; i < space.length; i++) {\n                values[space][i] = vals[chans[i]];\n            }\n\n            alpha = vals.alpha;\n        }\n\n        values.alpha = Math.max(0, Math.min(1, (alpha === undefined ? values.alpha : alpha)));\n\n        if (space === 'alpha') {\n            return false;\n        }\n\n        var capped;\n\n        // cap values of the space prior converting all values\n        for (i = 0; i < space.length; i++) {\n            capped = Math.max(0, Math.min(maxes[space][i], values[space][i]));\n            values[space][i] = Math.round(capped);\n        }\n\n        // convert to all the other color spaces\n        for (var sname in spaces) {\n            if (sname !== space) {\n                values[sname] = colorConvert[space][sname](values[space]);\n            }\n        }\n\n        return true;\n    };\n\n    Color.prototype.setSpace = function (space, args) {\n        var vals = args[0];\n\n        if (vals === undefined) {\n            // color.rgb()\n            return this.getValues(space);\n        }\n\n        // color.rgb(10, 10, 10)\n        if (typeof vals === 'number') {\n            vals = Array.prototype.slice.call(args);\n        }\n\n        this.setValues(space, vals);\n        return this;\n    };\n\n    Color.prototype.setChannel = function (space, index, val) {\n        var svalues = this.values[space];\n        if (val === undefined) {\n            // color.red()\n            return svalues[index];\n        } else if (val === svalues[index]) {\n            // color.red(color.red())\n            return this;\n        }\n\n        // color.red(100)\n        svalues[index] = val;\n        this.setValues(space, svalues);\n\n        return this;\n    };\n\n    if (typeof window !== 'undefined') {\n        window.Color = Color;\n    }\n\n    var chartjsColor = Color;\n\n    /**\n     * @namespace Chart.helpers\n     */\n    var helpers = {\n        /**\n         * An empty function that can be used, for example, for optional callback.\n         */\n        noop: function() {},\n\n        /**\n         * Returns a unique id, sequentially generated from a global variable.\n         * @returns {number}\n         * @function\n         */\n        uid: (function() {\n            var id = 0;\n            return function() {\n                return id++;\n            };\n        }()),\n\n        /**\n         * Returns true if `value` is neither null nor undefined, else returns false.\n         * @param {*} value - The value to test.\n         * @returns {boolean}\n         * @since 2.7.0\n         */\n        isNullOrUndef: function(value) {\n            return value === null || typeof value === 'undefined';\n        },\n\n        /**\n         * Returns true if `value` is an array (including typed arrays), else returns false.\n         * @param {*} value - The value to test.\n         * @returns {boolean}\n         * @function\n         */\n        isArray: function(value) {\n            if (Array.isArray && Array.isArray(value)) {\n                return true;\n            }\n            var type = Object.prototype.toString.call(value);\n            if (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') {\n                return true;\n            }\n            return false;\n        },\n\n        /**\n         * Returns true if `value` is an object (excluding null), else returns false.\n         * @param {*} value - The value to test.\n         * @returns {boolean}\n         * @since 2.7.0\n         */\n        isObject: function(value) {\n            return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n        },\n\n        /**\n         * Returns true if `value` is a finite number, else returns false\n         * @param {*} value  - The value to test.\n         * @returns {boolean}\n         */\n        isFinite: function(value) {\n            return (typeof value === 'number' || value instanceof Number) && isFinite(value);\n        },\n\n        /**\n         * Returns `value` if defined, else returns `defaultValue`.\n         * @param {*} value - The value to return if defined.\n         * @param {*} defaultValue - The value to return if `value` is undefined.\n         * @returns {*}\n         */\n        valueOrDefault: function(value, defaultValue) {\n            return typeof value === 'undefined' ? defaultValue : value;\n        },\n\n        /**\n         * Returns value at the given `index` in array if defined, else returns `defaultValue`.\n         * @param {Array} value - The array to lookup for value at `index`.\n         * @param {number} index - The index in `value` to lookup for value.\n         * @param {*} defaultValue - The value to return if `value[index]` is undefined.\n         * @returns {*}\n         */\n        valueAtIndexOrDefault: function(value, index, defaultValue) {\n            return helpers.valueOrDefault(helpers.isArray(value) ? value[index] : value, defaultValue);\n        },\n\n        /**\n         * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n         * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n         * @param {function} fn - The function to call.\n         * @param {Array|undefined|null} args - The arguments with which `fn` should be called.\n         * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.\n         * @returns {*}\n         */\n        callback: function(fn, args, thisArg) {\n            if (fn && typeof fn.call === 'function') {\n                return fn.apply(thisArg, args);\n            }\n        },\n\n        /**\n         * Note(SB) for performance sake, this method should only be used when loopable type\n         * is unknown or in none intensive code (not called often and small loopable). Else\n         * it's preferable to use a regular for() loop and save extra function calls.\n         * @param {object|Array} loopable - The object or array to be iterated.\n         * @param {function} fn - The function to call for each item.\n         * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.\n         * @param {boolean} [reverse] - If true, iterates backward on the loopable.\n         */\n        each: function(loopable, fn, thisArg, reverse) {\n            var i, len, keys;\n            if (helpers.isArray(loopable)) {\n                len = loopable.length;\n                if (reverse) {\n                    for (i = len - 1; i >= 0; i--) {\n                        fn.call(thisArg, loopable[i], i);\n                    }\n                } else {\n                    for (i = 0; i < len; i++) {\n                        fn.call(thisArg, loopable[i], i);\n                    }\n                }\n            } else if (helpers.isObject(loopable)) {\n                keys = Object.keys(loopable);\n                len = keys.length;\n                for (i = 0; i < len; i++) {\n                    fn.call(thisArg, loopable[keys[i]], keys[i]);\n                }\n            }\n        },\n\n        /**\n         * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n         * @see https://stackoverflow.com/a/14853974\n         * @param {Array} a0 - The array to compare\n         * @param {Array} a1 - The array to compare\n         * @returns {boolean}\n         */\n        arrayEquals: function(a0, a1) {\n            var i, ilen, v0, v1;\n\n            if (!a0 || !a1 || a0.length !== a1.length) {\n                return false;\n            }\n\n            for (i = 0, ilen = a0.length; i < ilen; ++i) {\n                v0 = a0[i];\n                v1 = a1[i];\n\n                if (v0 instanceof Array && v1 instanceof Array) {\n                    if (!helpers.arrayEquals(v0, v1)) {\n                        return false;\n                    }\n                } else if (v0 !== v1) {\n                    // NOTE: two different object instances will never be equal: {x:20} != {x:20}\n                    return false;\n                }\n            }\n\n            return true;\n        },\n\n        /**\n         * Returns a deep copy of `source` without keeping references on objects and arrays.\n         * @param {*} source - The value to clone.\n         * @returns {*}\n         */\n        clone: function(source) {\n            if (helpers.isArray(source)) {\n                return source.map(helpers.clone);\n            }\n\n            if (helpers.isObject(source)) {\n                var target = {};\n                var keys = Object.keys(source);\n                var klen = keys.length;\n                var k = 0;\n\n                for (; k < klen; ++k) {\n                    target[keys[k]] = helpers.clone(source[keys[k]]);\n                }\n\n                return target;\n            }\n\n            return source;\n        },\n\n        /**\n         * The default merger when Chart.helpers.merge is called without merger option.\n         * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n         * @private\n         */\n        _merger: function(key, target, source, options) {\n            var tval = target[key];\n            var sval = source[key];\n\n            if (helpers.isObject(tval) && helpers.isObject(sval)) {\n                helpers.merge(tval, sval, options);\n            } else {\n                target[key] = helpers.clone(sval);\n            }\n        },\n\n        /**\n         * Merges source[key] in target[key] only if target[key] is undefined.\n         * @private\n         */\n        _mergerIf: function(key, target, source) {\n            var tval = target[key];\n            var sval = source[key];\n\n            if (helpers.isObject(tval) && helpers.isObject(sval)) {\n                helpers.mergeIf(tval, sval);\n            } else if (!target.hasOwnProperty(key)) {\n                target[key] = helpers.clone(sval);\n            }\n        },\n\n        /**\n         * Recursively deep copies `source` properties into `target` with the given `options`.\n         * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n         * @param {object} target - The target object in which all sources are merged into.\n         * @param {object|object[]} source - Object(s) to merge into `target`.\n         * @param {object} [options] - Merging options:\n         * @param {function} [options.merger] - The merge method (key, target, source, options)\n         * @returns {object} The `target` object.\n         */\n        merge: function(target, source, options) {\n            var sources = helpers.isArray(source) ? source : [source];\n            var ilen = sources.length;\n            var merge, i, keys, klen, k;\n\n            if (!helpers.isObject(target)) {\n                return target;\n            }\n\n            options = options || {};\n            merge = options.merger || helpers._merger;\n\n            for (i = 0; i < ilen; ++i) {\n                source = sources[i];\n                if (!helpers.isObject(source)) {\n                    continue;\n                }\n\n                keys = Object.keys(source);\n                for (k = 0, klen = keys.length; k < klen; ++k) {\n                    merge(keys[k], target, source, options);\n                }\n            }\n\n            return target;\n        },\n\n        /**\n         * Recursively deep copies `source` properties into `target` *only* if not defined in target.\n         * IMPORTANT: `target` is not cloned and will be updated with `source` properties.\n         * @param {object} target - The target object in which all sources are merged into.\n         * @param {object|object[]} source - Object(s) to merge into `target`.\n         * @returns {object} The `target` object.\n         */\n        mergeIf: function(target, source) {\n            return helpers.merge(target, source, {merger: helpers._mergerIf});\n        },\n\n        /**\n         * Applies the contents of two or more objects together into the first object.\n         * @param {object} target - The target object in which all objects are merged into.\n         * @param {object} arg1 - Object containing additional properties to merge in target.\n         * @param {object} argN - Additional objects containing properties to merge in target.\n         * @returns {object} The `target` object.\n         */\n        extend: function(target) {\n            var setFn = function(value, key) {\n                target[key] = value;\n            };\n            for (var i = 1, ilen = arguments.length; i < ilen; ++i) {\n                helpers.each(arguments[i], setFn);\n            }\n            return target;\n        },\n\n        /**\n         * Basic javascript inheritance based on the model created in Backbone.js\n         */\n        inherits: function(extensions) {\n            var me = this;\n            var ChartElement = (extensions && extensions.hasOwnProperty('constructor')) ? extensions.constructor : function() {\n                return me.apply(this, arguments);\n            };\n\n            var Surrogate = function() {\n                this.constructor = ChartElement;\n            };\n\n            Surrogate.prototype = me.prototype;\n            ChartElement.prototype = new Surrogate();\n            ChartElement.extend = helpers.inherits;\n\n            if (extensions) {\n                helpers.extend(ChartElement.prototype, extensions);\n            }\n\n            ChartElement.__super__ = me.prototype;\n            return ChartElement;\n        }\n    };\n\n    var helpers_core = helpers;\n\n    // DEPRECATIONS\n\n    /**\n     * Provided for backward compatibility, use Chart.helpers.callback instead.\n     * @function Chart.helpers.callCallback\n     * @deprecated since version 2.6.0\n     * @todo remove at version 3\n     * @private\n     */\n    helpers.callCallback = helpers.callback;\n\n    /**\n     * Provided for backward compatibility, use Array.prototype.indexOf instead.\n     * Array.prototype.indexOf compatibility: Chrome, Opera, Safari, FF1.5+, IE9+\n     * @function Chart.helpers.indexOf\n     * @deprecated since version 2.7.0\n     * @todo remove at version 3\n     * @private\n     */\n    helpers.indexOf = function(array, item, fromIndex) {\n        return Array.prototype.indexOf.call(array, item, fromIndex);\n    };\n\n    /**\n     * Provided for backward compatibility, use Chart.helpers.valueOrDefault instead.\n     * @function Chart.helpers.getValueOrDefault\n     * @deprecated since version 2.7.0\n     * @todo remove at version 3\n     * @private\n     */\n    helpers.getValueOrDefault = helpers.valueOrDefault;\n\n    /**\n     * Provided for backward compatibility, use Chart.helpers.valueAtIndexOrDefault instead.\n     * @function Chart.helpers.getValueAtIndexOrDefault\n     * @deprecated since version 2.7.0\n     * @todo remove at version 3\n     * @private\n     */\n    helpers.getValueAtIndexOrDefault = helpers.valueAtIndexOrDefault;\n\n    /**\n     * Easing functions adapted from Robert Penner's easing equations.\n     * @namespace Chart.helpers.easingEffects\n     * @see http://www.robertpenner.com/easing/\n     */\n    var effects = {\n        linear: function(t) {\n            return t;\n        },\n\n        easeInQuad: function(t) {\n            return t * t;\n        },\n\n        easeOutQuad: function(t) {\n            return -t * (t - 2);\n        },\n\n        easeInOutQuad: function(t) {\n            if ((t /= 0.5) < 1) {\n                return 0.5 * t * t;\n            }\n            return -0.5 * ((--t) * (t - 2) - 1);\n        },\n\n        easeInCubic: function(t) {\n            return t * t * t;\n        },\n\n        easeOutCubic: function(t) {\n            return (t = t - 1) * t * t + 1;\n        },\n\n        easeInOutCubic: function(t) {\n            if ((t /= 0.5) < 1) {\n                return 0.5 * t * t * t;\n            }\n            return 0.5 * ((t -= 2) * t * t + 2);\n        },\n\n        easeInQuart: function(t) {\n            return t * t * t * t;\n        },\n\n        easeOutQuart: function(t) {\n            return -((t = t - 1) * t * t * t - 1);\n        },\n\n        easeInOutQuart: function(t) {\n            if ((t /= 0.5) < 1) {\n                return 0.5 * t * t * t * t;\n            }\n            return -0.5 * ((t -= 2) * t * t * t - 2);\n        },\n\n        easeInQuint: function(t) {\n            return t * t * t * t * t;\n        },\n\n        easeOutQuint: function(t) {\n            return (t = t - 1) * t * t * t * t + 1;\n        },\n\n        easeInOutQuint: function(t) {\n            if ((t /= 0.5) < 1) {\n                return 0.5 * t * t * t * t * t;\n            }\n            return 0.5 * ((t -= 2) * t * t * t * t + 2);\n        },\n\n        easeInSine: function(t) {\n            return -Math.cos(t * (Math.PI / 2)) + 1;\n        },\n\n        easeOutSine: function(t) {\n            return Math.sin(t * (Math.PI / 2));\n        },\n\n        easeInOutSine: function(t) {\n            return -0.5 * (Math.cos(Math.PI * t) - 1);\n        },\n\n        easeInExpo: function(t) {\n            return (t === 0) ? 0 : Math.pow(2, 10 * (t - 1));\n        },\n\n        easeOutExpo: function(t) {\n            return (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1;\n        },\n\n        easeInOutExpo: function(t) {\n            if (t === 0) {\n                return 0;\n            }\n            if (t === 1) {\n                return 1;\n            }\n            if ((t /= 0.5) < 1) {\n                return 0.5 * Math.pow(2, 10 * (t - 1));\n            }\n            return 0.5 * (-Math.pow(2, -10 * --t) + 2);\n        },\n\n        easeInCirc: function(t) {\n            if (t >= 1) {\n                return t;\n            }\n            return -(Math.sqrt(1 - t * t) - 1);\n        },\n\n        easeOutCirc: function(t) {\n            return Math.sqrt(1 - (t = t - 1) * t);\n        },\n\n        easeInOutCirc: function(t) {\n            if ((t /= 0.5) < 1) {\n                return -0.5 * (Math.sqrt(1 - t * t) - 1);\n            }\n            return 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n        },\n\n        easeInElastic: function(t) {\n            var s = 1.70158;\n            var p = 0;\n            var a = 1;\n            if (t === 0) {\n                return 0;\n            }\n            if (t === 1) {\n                return 1;\n            }\n            if (!p) {\n                p = 0.3;\n            }\n            if (a < 1) {\n                a = 1;\n                s = p / 4;\n            } else {\n                s = p / (2 * Math.PI) * Math.asin(1 / a);\n            }\n            return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\n        },\n\n        easeOutElastic: function(t) {\n            var s = 1.70158;\n            var p = 0;\n            var a = 1;\n            if (t === 0) {\n                return 0;\n            }\n            if (t === 1) {\n                return 1;\n            }\n            if (!p) {\n                p = 0.3;\n            }\n            if (a < 1) {\n                a = 1;\n                s = p / 4;\n            } else {\n                s = p / (2 * Math.PI) * Math.asin(1 / a);\n            }\n            return a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p) + 1;\n        },\n\n        easeInOutElastic: function(t) {\n            var s = 1.70158;\n            var p = 0;\n            var a = 1;\n            if (t === 0) {\n                return 0;\n            }\n            if ((t /= 0.5) === 2) {\n                return 1;\n            }\n            if (!p) {\n                p = 0.45;\n            }\n            if (a < 1) {\n                a = 1;\n                s = p / 4;\n            } else {\n                s = p / (2 * Math.PI) * Math.asin(1 / a);\n            }\n            if (t < 1) {\n                return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));\n            }\n            return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p) * 0.5 + 1;\n        },\n        easeInBack: function(t) {\n            var s = 1.70158;\n            return t * t * ((s + 1) * t - s);\n        },\n\n        easeOutBack: function(t) {\n            var s = 1.70158;\n            return (t = t - 1) * t * ((s + 1) * t + s) + 1;\n        },\n\n        easeInOutBack: function(t) {\n            var s = 1.70158;\n            if ((t /= 0.5) < 1) {\n                return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n            }\n            return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n        },\n\n        easeInBounce: function(t) {\n            return 1 - effects.easeOutBounce(1 - t);\n        },\n\n        easeOutBounce: function(t) {\n            if (t < (1 / 2.75)) {\n                return 7.5625 * t * t;\n            }\n            if (t < (2 / 2.75)) {\n                return 7.5625 * (t -= (1.5 / 2.75)) * t + 0.75;\n            }\n            if (t < (2.5 / 2.75)) {\n                return 7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375;\n            }\n            return 7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375;\n        },\n\n        easeInOutBounce: function(t) {\n            if (t < 0.5) {\n                return effects.easeInBounce(t * 2) * 0.5;\n            }\n            return effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5;\n        }\n    };\n\n    var helpers_easing = {\n        effects: effects\n    };\n\n    // DEPRECATIONS\n\n    /**\n     * Provided for backward compatibility, use Chart.helpers.easing.effects instead.\n     * @function Chart.helpers.easingEffects\n     * @deprecated since version 2.7.0\n     * @todo remove at version 3\n     * @private\n     */\n    helpers_core.easingEffects = effects;\n\n    var PI = Math.PI;\n    var RAD_PER_DEG = PI / 180;\n    var DOUBLE_PI = PI * 2;\n    var HALF_PI = PI / 2;\n    var QUARTER_PI = PI / 4;\n    var TWO_THIRDS_PI = PI * 2 / 3;\n\n    /**\n     * @namespace Chart.helpers.canvas\n     */\n    var exports$1 = {\n        /**\n         * Clears the entire canvas associated to the given `chart`.\n         * @param {Chart} chart - The chart for which to clear the canvas.\n         */\n        clear: function(chart) {\n            chart.ctx.clearRect(0, 0, chart.width, chart.height);\n        },\n\n        /**\n         * Creates a \"path\" for a rectangle with rounded corners at position (x, y) with a\n         * given size (width, height) and the same `radius` for all corners.\n         * @param {CanvasRenderingContext2D} ctx - The canvas 2D Context.\n         * @param {number} x - The x axis of the coordinate for the rectangle starting point.\n         * @param {number} y - The y axis of the coordinate for the rectangle starting point.\n         * @param {number} width - The rectangle's width.\n         * @param {number} height - The rectangle's height.\n         * @param {number} radius - The rounded amount (in pixels) for the four corners.\n         * @todo handle `radius` as top-left, top-right, bottom-right, bottom-left array/object?\n         */\n        roundedRect: function(ctx, x, y, width, height, radius) {\n            if (radius) {\n                var r = Math.min(radius, height / 2, width / 2);\n                var left = x + r;\n                var top = y + r;\n                var right = x + width - r;\n                var bottom = y + height - r;\n\n                ctx.moveTo(x, top);\n                if (left < right && top < bottom) {\n                    ctx.arc(left, top, r, -PI, -HALF_PI);\n                    ctx.arc(right, top, r, -HALF_PI, 0);\n                    ctx.arc(right, bottom, r, 0, HALF_PI);\n                    ctx.arc(left, bottom, r, HALF_PI, PI);\n                } else if (left < right) {\n                    ctx.moveTo(left, y);\n                    ctx.arc(right, top, r, -HALF_PI, HALF_PI);\n                    ctx.arc(left, top, r, HALF_PI, PI + HALF_PI);\n                } else if (top < bottom) {\n                    ctx.arc(left, top, r, -PI, 0);\n                    ctx.arc(left, bottom, r, 0, PI);\n                } else {\n                    ctx.arc(left, top, r, -PI, PI);\n                }\n                ctx.closePath();\n                ctx.moveTo(x, y);\n            } else {\n                ctx.rect(x, y, width, height);\n            }\n        },\n\n        drawPoint: function(ctx, style, radius, x, y, rotation) {\n            var type, xOffset, yOffset, size, cornerRadius;\n            var rad = (rotation || 0) * RAD_PER_DEG;\n\n            if (style && typeof style === 'object') {\n                type = style.toString();\n                if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n                    ctx.drawImage(style, x - style.width / 2, y - style.height / 2, style.width, style.height);\n                    return;\n                }\n            }\n\n            if (isNaN(radius) || radius <= 0) {\n                return;\n            }\n\n            ctx.beginPath();\n\n            switch (style) {\n            // Default includes circle\n            default:\n                ctx.arc(x, y, radius, 0, DOUBLE_PI);\n                ctx.closePath();\n                break;\n            case 'triangle':\n                ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n                rad += TWO_THIRDS_PI;\n                ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n                rad += TWO_THIRDS_PI;\n                ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n                ctx.closePath();\n                break;\n            case 'rectRounded':\n                // NOTE: the rounded rect implementation changed to use `arc` instead of\n                // `quadraticCurveTo` since it generates better results when rect is\n                // almost a circle. 0.516 (instead of 0.5) produces results with visually\n                // closer proportion to the previous impl and it is inscribed in the\n                // circle with `radius`. For more details, see the following PRs:\n                // https://github.com/chartjs/Chart.js/issues/5597\n                // https://github.com/chartjs/Chart.js/issues/5858\n                cornerRadius = radius * 0.516;\n                size = radius - cornerRadius;\n                xOffset = Math.cos(rad + QUARTER_PI) * size;\n                yOffset = Math.sin(rad + QUARTER_PI) * size;\n                ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n                ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n                ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n                ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n                ctx.closePath();\n                break;\n            case 'rect':\n                if (!rotation) {\n                    size = Math.SQRT1_2 * radius;\n                    ctx.rect(x - size, y - size, 2 * size, 2 * size);\n                    break;\n                }\n                rad += QUARTER_PI;\n                /* falls through */\n            case 'rectRot':\n                xOffset = Math.cos(rad) * radius;\n                yOffset = Math.sin(rad) * radius;\n                ctx.moveTo(x - xOffset, y - yOffset);\n                ctx.lineTo(x + yOffset, y - xOffset);\n                ctx.lineTo(x + xOffset, y + yOffset);\n                ctx.lineTo(x - yOffset, y + xOffset);\n                ctx.closePath();\n                break;\n            case 'crossRot':\n                rad += QUARTER_PI;\n                /* falls through */\n            case 'cross':\n                xOffset = Math.cos(rad) * radius;\n                yOffset = Math.sin(rad) * radius;\n                ctx.moveTo(x - xOffset, y - yOffset);\n                ctx.lineTo(x + xOffset, y + yOffset);\n                ctx.moveTo(x + yOffset, y - xOffset);\n                ctx.lineTo(x - yOffset, y + xOffset);\n                break;\n            case 'star':\n                xOffset = Math.cos(rad) * radius;\n                yOffset = Math.sin(rad) * radius;\n                ctx.moveTo(x - xOffset, y - yOffset);\n                ctx.lineTo(x + xOffset, y + yOffset);\n                ctx.moveTo(x + yOffset, y - xOffset);\n                ctx.lineTo(x - yOffset, y + xOffset);\n                rad += QUARTER_PI;\n                xOffset = Math.cos(rad) * radius;\n                yOffset = Math.sin(rad) * radius;\n                ctx.moveTo(x - xOffset, y - yOffset);\n                ctx.lineTo(x + xOffset, y + yOffset);\n                ctx.moveTo(x + yOffset, y - xOffset);\n                ctx.lineTo(x - yOffset, y + xOffset);\n                break;\n            case 'line':\n                xOffset = Math.cos(rad) * radius;\n                yOffset = Math.sin(rad) * radius;\n                ctx.moveTo(x - xOffset, y - yOffset);\n                ctx.lineTo(x + xOffset, y + yOffset);\n                break;\n            case 'dash':\n                ctx.moveTo(x, y);\n                ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n                break;\n            }\n\n            ctx.fill();\n            ctx.stroke();\n        },\n\n        /**\n         * Returns true if the point is inside the rectangle\n         * @param {object} point - The point to test\n         * @param {object} area - The rectangle\n         * @returns {boolean}\n         * @private\n         */\n        _isPointInArea: function(point, area) {\n            var epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.\n\n            return point.x > area.left - epsilon && point.x < area.right + epsilon &&\n                point.y > area.top - epsilon && point.y < area.bottom + epsilon;\n        },\n\n        clipArea: function(ctx, area) {\n            ctx.save();\n            ctx.beginPath();\n            ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n            ctx.clip();\n        },\n\n        unclipArea: function(ctx) {\n            ctx.restore();\n        },\n\n        lineTo: function(ctx, previous, target, flip) {\n            var stepped = target.steppedLine;\n            if (stepped) {\n                if (stepped === 'middle') {\n                    var midpoint = (previous.x + target.x) / 2.0;\n                    ctx.lineTo(midpoint, flip ? target.y : previous.y);\n                    ctx.lineTo(midpoint, flip ? previous.y : target.y);\n                } else if ((stepped === 'after' && !flip) || (stepped !== 'after' && flip)) {\n                    ctx.lineTo(previous.x, target.y);\n                } else {\n                    ctx.lineTo(target.x, previous.y);\n                }\n                ctx.lineTo(target.x, target.y);\n                return;\n            }\n\n            if (!target.tension) {\n                ctx.lineTo(target.x, target.y);\n                return;\n            }\n\n            ctx.bezierCurveTo(\n                flip ? previous.controlPointPreviousX : previous.controlPointNextX,\n                flip ? previous.controlPointPreviousY : previous.controlPointNextY,\n                flip ? target.controlPointNextX : target.controlPointPreviousX,\n                flip ? target.controlPointNextY : target.controlPointPreviousY,\n                target.x,\n                target.y);\n        }\n    };\n\n    var helpers_canvas = exports$1;\n\n    // DEPRECATIONS\n\n    /**\n     * Provided for backward compatibility, use Chart.helpers.canvas.clear instead.\n     * @namespace Chart.helpers.clear\n     * @deprecated since version 2.7.0\n     * @todo remove at version 3\n     * @private\n     */\n    helpers_core.clear = exports$1.clear;\n\n    /**\n     * Provided for backward compatibility, use Chart.helpers.canvas.roundedRect instead.\n     * @namespace Chart.helpers.drawRoundedRectangle\n     * @deprecated since version 2.7.0\n     * @todo remove at version 3\n     * @private\n     */\n    helpers_core.drawRoundedRectangle = function(ctx) {\n        ctx.beginPath();\n        exports$1.roundedRect.apply(exports$1, arguments);\n    };\n\n    var defaults = {\n        /**\n         * @private\n         */\n        _set: function(scope, values) {\n            return helpers_core.merge(this[scope] || (this[scope] = {}), values);\n        }\n    };\n\n    defaults._set('global', {\n        defaultColor: 'rgba(0,0,0,0.1)',\n        defaultFontColor: '#666',\n        defaultFontFamily: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n        defaultFontSize: 12,\n        defaultFontStyle: 'normal',\n        defaultLineHeight: 1.2,\n        showLines: true\n    });\n\n    var core_defaults = defaults;\n\n    var valueOrDefault = helpers_core.valueOrDefault;\n\n    /**\n     * Converts the given font object into a CSS font string.\n     * @param {object} font - A font object.\n     * @return {string} The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n     * @private\n     */\n    function toFontString(font) {\n        if (!font || helpers_core.isNullOrUndef(font.size) || helpers_core.isNullOrUndef(font.family)) {\n            return null;\n        }\n\n        return (font.style ? font.style + ' ' : '')\n            + (font.weight ? font.weight + ' ' : '')\n            + font.size + 'px '\n            + font.family;\n    }\n\n    /**\n     * @alias Chart.helpers.options\n     * @namespace\n     */\n    var helpers_options = {\n        /**\n         * Converts the given line height `value` in pixels for a specific font `size`.\n         * @param {number|string} value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n         * @param {number} size - The font size (in pixels) used to resolve relative `value`.\n         * @returns {number} The effective line height in pixels (size * 1.2 if value is invalid).\n         * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n         * @since 2.7.0\n         */\n        toLineHeight: function(value, size) {\n            var matches = ('' + value).match(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\n            if (!matches || matches[1] === 'normal') {\n                return size * 1.2;\n            }\n\n            value = +matches[2];\n\n            switch (matches[3]) {\n            case 'px':\n                return value;\n            case '%':\n                value /= 100;\n                break;\n            default:\n                break;\n            }\n\n            return size * value;\n        },\n\n        /**\n         * Converts the given value into a padding object with pre-computed width/height.\n         * @param {number|object} value - If a number, set the value to all TRBL component,\n         *  else, if and object, use defined properties and sets undefined ones to 0.\n         * @returns {object} The padding values (top, right, bottom, left, width, height)\n         * @since 2.7.0\n         */\n        toPadding: function(value) {\n            var t, r, b, l;\n\n            if (helpers_core.isObject(value)) {\n                t = +value.top || 0;\n                r = +value.right || 0;\n                b = +value.bottom || 0;\n                l = +value.left || 0;\n            } else {\n                t = r = b = l = +value || 0;\n            }\n\n            return {\n                top: t,\n                right: r,\n                bottom: b,\n                left: l,\n                height: t + b,\n                width: l + r\n            };\n        },\n\n        /**\n         * Parses font options and returns the font object.\n         * @param {object} options - A object that contains font options to be parsed.\n         * @return {object} The font object.\n         * @todo Support font.* options and renamed to toFont().\n         * @private\n         */\n        _parseFont: function(options) {\n            var globalDefaults = core_defaults.global;\n            var size = valueOrDefault(options.fontSize, globalDefaults.defaultFontSize);\n            var font = {\n                family: valueOrDefault(options.fontFamily, globalDefaults.defaultFontFamily),\n                lineHeight: helpers_core.options.toLineHeight(valueOrDefault(options.lineHeight, globalDefaults.defaultLineHeight), size),\n                size: size,\n                style: valueOrDefault(options.fontStyle, globalDefaults.defaultFontStyle),\n                weight: null,\n                string: ''\n            };\n\n            font.string = toFontString(font);\n            return font;\n        },\n\n        /**\n         * Evaluates the given `inputs` sequentially and returns the first defined value.\n         * @param {Array} inputs - An array of values, falling back to the last value.\n         * @param {object} [context] - If defined and the current value is a function, the value\n         * is called with `context` as first argument and the result becomes the new input.\n         * @param {number} [index] - If defined and the current value is an array, the value\n         * at `index` become the new input.\n         * @since 2.7.0\n         */\n        resolve: function(inputs, context, index) {\n            var i, ilen, value;\n\n            for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n                value = inputs[i];\n                if (value === undefined) {\n                    continue;\n                }\n                if (context !== undefined && typeof value === 'function') {\n                    value = value(context);\n                }\n                if (index !== undefined && helpers_core.isArray(value)) {\n                    value = value[index];\n                }\n                if (value !== undefined) {\n                    return value;\n                }\n            }\n        }\n    };\n\n    var helpers$1 = helpers_core;\n    var easing = helpers_easing;\n    var canvas = helpers_canvas;\n    var options = helpers_options;\n    helpers$1.easing = easing;\n    helpers$1.canvas = canvas;\n    helpers$1.options = options;\n\n    function interpolate(start, view, model, ease) {\n        var keys = Object.keys(model);\n        var i, ilen, key, actual, origin, target, type, c0, c1;\n\n        for (i = 0, ilen = keys.length; i < ilen; ++i) {\n            key = keys[i];\n\n            target = model[key];\n\n            // if a value is added to the model after pivot() has been called, the view\n            // doesn't contain it, so let's initialize the view to the target value.\n            if (!view.hasOwnProperty(key)) {\n                view[key] = target;\n            }\n\n            actual = view[key];\n\n            if (actual === target || key[0] === '_') {\n                continue;\n            }\n\n            if (!start.hasOwnProperty(key)) {\n                start[key] = actual;\n            }\n\n            origin = start[key];\n\n            type = typeof target;\n\n            if (type === typeof origin) {\n                if (type === 'string') {\n                    c0 = chartjsColor(origin);\n                    if (c0.valid) {\n                        c1 = chartjsColor(target);\n                        if (c1.valid) {\n                            view[key] = c1.mix(c0, ease).rgbString();\n                            continue;\n                        }\n                    }\n                } else if (helpers$1.isFinite(origin) && helpers$1.isFinite(target)) {\n                    view[key] = origin + (target - origin) * ease;\n                    continue;\n                }\n            }\n\n            view[key] = target;\n        }\n    }\n\n    var Element = function(configuration) {\n        helpers$1.extend(this, configuration);\n        this.initialize.apply(this, arguments);\n    };\n\n    helpers$1.extend(Element.prototype, {\n\n        initialize: function() {\n            this.hidden = false;\n        },\n\n        pivot: function() {\n            var me = this;\n            if (!me._view) {\n                me._view = helpers$1.clone(me._model);\n            }\n            me._start = {};\n            return me;\n        },\n\n        transition: function(ease) {\n            var me = this;\n            var model = me._model;\n            var start = me._start;\n            var view = me._view;\n\n            // No animation -> No Transition\n            if (!model || ease === 1) {\n                me._view = model;\n                me._start = null;\n                return me;\n            }\n\n            if (!view) {\n                view = me._view = {};\n            }\n\n            if (!start) {\n                start = me._start = {};\n            }\n\n            interpolate(start, view, model, ease);\n\n            return me;\n        },\n\n        tooltipPosition: function() {\n            return {\n                x: this._model.x,\n                y: this._model.y\n            };\n        },\n\n        hasValue: function() {\n            return helpers$1.isNumber(this._model.x) && helpers$1.isNumber(this._model.y);\n        }\n    });\n\n    Element.extend = helpers$1.inherits;\n\n    var core_element = Element;\n\n    var exports$2 = core_element.extend({\n        chart: null, // the animation associated chart instance\n        currentStep: 0, // the current animation step\n        numSteps: 60, // default number of steps\n        easing: '', // the easing to use for this animation\n        render: null, // render function used by the animation service\n\n        onAnimationProgress: null, // user specified callback to fire on each step of the animation\n        onAnimationComplete: null, // user specified callback to fire when the animation finishes\n    });\n\n    var core_animation = exports$2;\n\n    // DEPRECATIONS\n\n    /**\n     * Provided for backward compatibility, use Chart.Animation instead\n     * @prop Chart.Animation#animationObject\n     * @deprecated since version 2.6.0\n     * @todo remove at version 3\n     */\n    Object.defineProperty(exports$2.prototype, 'animationObject', {\n        get: function() {\n            return this;\n        }\n    });\n\n    /**\n     * Provided for backward compatibility, use Chart.Animation#chart instead\n     * @prop Chart.Animation#chartInstance\n     * @deprecated since version 2.6.0\n     * @todo remove at version 3\n     */\n    Object.defineProperty(exports$2.prototype, 'chartInstance', {\n        get: function() {\n            return this.chart;\n        },\n        set: function(value) {\n            this.chart = value;\n        }\n    });\n\n    core_defaults._set('global', {\n        animation: {\n            duration: 1000,\n            easing: 'easeOutQuart',\n            onProgress: helpers$1.noop,\n            onComplete: helpers$1.noop\n        }\n    });\n\n    var core_animations = {\n        animations: [],\n        request: null,\n\n        /**\n         * @param {Chart} chart - The chart to animate.\n         * @param {Chart.Animation} animation - The animation that we will animate.\n         * @param {number} duration - The animation duration in ms.\n         * @param {boolean} lazy - if true, the chart is not marked as animating to enable more responsive interactions\n         */\n        addAnimation: function(chart, animation, duration, lazy) {\n            var animations = this.animations;\n            var i, ilen;\n\n            animation.chart = chart;\n            animation.startTime = Date.now();\n            animation.duration = duration;\n\n            if (!lazy) {\n                chart.animating = true;\n            }\n\n            for (i = 0, ilen = animations.length; i < ilen; ++i) {\n                if (animations[i].chart === chart) {\n                    animations[i] = animation;\n                    return;\n                }\n            }\n\n            animations.push(animation);\n\n            // If there are no animations queued, manually kickstart a digest, for lack of a better word\n            if (animations.length === 1) {\n                this.requestAnimationFrame();\n            }\n        },\n\n        cancelAnimation: function(chart) {\n            var index = helpers$1.findIndex(this.animations, function(animation) {\n                return animation.chart === chart;\n            });\n\n            if (index !== -1) {\n                this.animations.splice(index, 1);\n                chart.animating = false;\n            }\n        },\n\n        requestAnimationFrame: function() {\n            var me = this;\n            if (me.request === null) {\n                // Skip animation frame requests until the active one is executed.\n                // This can happen when processing mouse events, e.g. 'mousemove'\n                // and 'mouseout' events will trigger multiple renders.\n                me.request = helpers$1.requestAnimFrame.call(window, function() {\n                    me.request = null;\n                    me.startDigest();\n                });\n            }\n        },\n\n        /**\n         * @private\n         */\n        startDigest: function() {\n            var me = this;\n\n            me.advance();\n\n            // Do we have more stuff to animate?\n            if (me.animations.length > 0) {\n                me.requestAnimationFrame();\n            }\n        },\n\n        /**\n         * @private\n         */\n        advance: function() {\n            var animations = this.animations;\n            var animation, chart, numSteps, nextStep;\n            var i = 0;\n\n            // 1 animation per chart, so we are looping charts here\n            while (i < animations.length) {\n                animation = animations[i];\n                chart = animation.chart;\n                numSteps = animation.numSteps;\n\n                // Make sure that currentStep starts at 1\n                // https://github.com/chartjs/Chart.js/issues/6104\n                nextStep = Math.floor((Date.now() - animation.startTime) / animation.duration * numSteps) + 1;\n                animation.currentStep = Math.min(nextStep, numSteps);\n\n                helpers$1.callback(animation.render, [chart, animation], chart);\n                helpers$1.callback(animation.onAnimationProgress, [animation], chart);\n\n                if (animation.currentStep >= numSteps) {\n                    helpers$1.callback(animation.onAnimationComplete, [animation], chart);\n                    chart.animating = false;\n                    animations.splice(i, 1);\n                } else {\n                    ++i;\n                }\n            }\n        }\n    };\n\n    var resolve = helpers$1.options.resolve;\n\n    var arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\n\n    /**\n     * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',\n     * 'unshift') and notify the listener AFTER the array has been altered. Listeners are\n     * called on the 'onData*' callbacks (e.g. onDataPush, etc.) with same arguments.\n     */\n    function listenArrayEvents(array, listener) {\n        if (array._chartjs) {\n            array._chartjs.listeners.push(listener);\n            return;\n        }\n\n        Object.defineProperty(array, '_chartjs', {\n            configurable: true,\n            enumerable: false,\n            value: {\n                listeners: [listener]\n            }\n        });\n\n        arrayEvents.forEach(function(key) {\n            var method = 'onData' + key.charAt(0).toUpperCase() + key.slice(1);\n            var base = array[key];\n\n            Object.defineProperty(array, key, {\n                configurable: true,\n                enumerable: false,\n                value: function() {\n                    var args = Array.prototype.slice.call(arguments);\n                    var res = base.apply(this, args);\n\n                    helpers$1.each(array._chartjs.listeners, function(object) {\n                        if (typeof object[method] === 'function') {\n                            object[method].apply(object, args);\n                        }\n                    });\n\n                    return res;\n                }\n            });\n        });\n    }\n\n    /**\n     * Removes the given array event listener and cleanup extra attached properties (such as\n     * the _chartjs stub and overridden methods) if array doesn't have any more listeners.\n     */\n    function unlistenArrayEvents(array, listener) {\n        var stub = array._chartjs;\n        if (!stub) {\n            return;\n        }\n\n        var listeners = stub.listeners;\n        var index = listeners.indexOf(listener);\n        if (index !== -1) {\n            listeners.splice(index, 1);\n        }\n\n        if (listeners.length > 0) {\n            return;\n        }\n\n        arrayEvents.forEach(function(key) {\n            delete array[key];\n        });\n\n        delete array._chartjs;\n    }\n\n    // Base class for all dataset controllers (line, bar, etc)\n    var DatasetController = function(chart, datasetIndex) {\n        this.initialize(chart, datasetIndex);\n    };\n\n    helpers$1.extend(DatasetController.prototype, {\n\n        /**\n         * Element type used to generate a meta dataset (e.g. Chart.element.Line).\n         * @type {Chart.core.element}\n         */\n        datasetElementType: null,\n\n        /**\n         * Element type used to generate a meta data (e.g. Chart.element.Point).\n         * @type {Chart.core.element}\n         */\n        dataElementType: null,\n\n        initialize: function(chart, datasetIndex) {\n            var me = this;\n            me.chart = chart;\n            me.index = datasetIndex;\n            me.linkScales();\n            me.addElements();\n        },\n\n        updateIndex: function(datasetIndex) {\n            this.index = datasetIndex;\n        },\n\n        linkScales: function() {\n            var me = this;\n            var meta = me.getMeta();\n            var dataset = me.getDataset();\n\n            if (meta.xAxisID === null || !(meta.xAxisID in me.chart.scales)) {\n                meta.xAxisID = dataset.xAxisID || me.chart.options.scales.xAxes[0].id;\n            }\n            if (meta.yAxisID === null || !(meta.yAxisID in me.chart.scales)) {\n                meta.yAxisID = dataset.yAxisID || me.chart.options.scales.yAxes[0].id;\n            }\n        },\n\n        getDataset: function() {\n            return this.chart.data.datasets[this.index];\n        },\n\n        getMeta: function() {\n            return this.chart.getDatasetMeta(this.index);\n        },\n\n        getScaleForId: function(scaleID) {\n            return this.chart.scales[scaleID];\n        },\n\n        /**\n         * @private\n         */\n        _getValueScaleId: function() {\n            return this.getMeta().yAxisID;\n        },\n\n        /**\n         * @private\n         */\n        _getIndexScaleId: function() {\n            return this.getMeta().xAxisID;\n        },\n\n        /**\n         * @private\n         */\n        _getValueScale: function() {\n            return this.getScaleForId(this._getValueScaleId());\n        },\n\n        /**\n         * @private\n         */\n        _getIndexScale: function() {\n            return this.getScaleForId(this._getIndexScaleId());\n        },\n\n        reset: function() {\n            this.update(true);\n        },\n\n        /**\n         * @private\n         */\n        destroy: function() {\n            if (this._data) {\n                unlistenArrayEvents(this._data, this);\n            }\n        },\n\n        createMetaDataset: function() {\n            var me = this;\n            var type = me.datasetElementType;\n            return type && new type({\n                _chart: me.chart,\n                _datasetIndex: me.index\n            });\n        },\n\n        createMetaData: function(index) {\n            var me = this;\n            var type = me.dataElementType;\n            return type && new type({\n                _chart: me.chart,\n                _datasetIndex: me.index,\n                _index: index\n            });\n        },\n\n        addElements: function() {\n            var me = this;\n            var meta = me.getMeta();\n            var data = me.getDataset().data || [];\n            var metaData = meta.data;\n            var i, ilen;\n\n            for (i = 0, ilen = data.length; i < ilen; ++i) {\n                metaData[i] = metaData[i] || me.createMetaData(i);\n            }\n\n            meta.dataset = meta.dataset || me.createMetaDataset();\n        },\n\n        addElementAndReset: function(index) {\n            var element = this.createMetaData(index);\n            this.getMeta().data.splice(index, 0, element);\n            this.updateElement(element, index, true);\n        },\n\n        buildOrUpdateElements: function() {\n            var me = this;\n            var dataset = me.getDataset();\n            var data = dataset.data || (dataset.data = []);\n\n            // In order to correctly handle data addition/deletion animation (an thus simulate\n            // real-time charts), we need to monitor these data modifications and synchronize\n            // the internal meta data accordingly.\n            if (me._data !== data) {\n                if (me._data) {\n                    // This case happens when the user replaced the data array instance.\n                    unlistenArrayEvents(me._data, me);\n                }\n\n                if (data && Object.isExtensible(data)) {\n                    listenArrayEvents(data, me);\n                }\n                me._data = data;\n            }\n\n            // Re-sync meta data in case the user replaced the data array or if we missed\n            // any updates and so make sure that we handle number of datapoints changing.\n            me.resyncElements();\n        },\n\n        update: helpers$1.noop,\n\n        transition: function(easingValue) {\n            var meta = this.getMeta();\n            var elements = meta.data || [];\n            var ilen = elements.length;\n            var i = 0;\n\n            for (; i < ilen; ++i) {\n                elements[i].transition(easingValue);\n            }\n\n            if (meta.dataset) {\n                meta.dataset.transition(easingValue);\n            }\n        },\n\n        draw: function() {\n            var meta = this.getMeta();\n            var elements = meta.data || [];\n            var ilen = elements.length;\n            var i = 0;\n\n            if (meta.dataset) {\n                meta.dataset.draw();\n            }\n\n            for (; i < ilen; ++i) {\n                elements[i].draw();\n            }\n        },\n\n        removeHoverStyle: function(element) {\n            helpers$1.merge(element._model, element.$previousStyle || {});\n            delete element.$previousStyle;\n        },\n\n        setHoverStyle: function(element) {\n            var dataset = this.chart.data.datasets[element._datasetIndex];\n            var index = element._index;\n            var custom = element.custom || {};\n            var model = element._model;\n            var getHoverColor = helpers$1.getHoverColor;\n\n            element.$previousStyle = {\n                backgroundColor: model.backgroundColor,\n                borderColor: model.borderColor,\n                borderWidth: model.borderWidth\n            };\n\n            model.backgroundColor = resolve([custom.hoverBackgroundColor, dataset.hoverBackgroundColor, getHoverColor(model.backgroundColor)], undefined, index);\n            model.borderColor = resolve([custom.hoverBorderColor, dataset.hoverBorderColor, getHoverColor(model.borderColor)], undefined, index);\n            model.borderWidth = resolve([custom.hoverBorderWidth, dataset.hoverBorderWidth, model.borderWidth], undefined, index);\n        },\n\n        /**\n         * @private\n         */\n        resyncElements: function() {\n            var me = this;\n            var meta = me.getMeta();\n            var data = me.getDataset().data;\n            var numMeta = meta.data.length;\n            var numData = data.length;\n\n            if (numData < numMeta) {\n                meta.data.splice(numData, numMeta - numData);\n            } else if (numData > numMeta) {\n                me.insertElements(numMeta, numData - numMeta);\n            }\n        },\n\n        /**\n         * @private\n         */\n        insertElements: function(start, count) {\n            for (var i = 0; i < count; ++i) {\n                this.addElementAndReset(start + i);\n            }\n        },\n\n        /**\n         * @private\n         */\n        onDataPush: function() {\n            var count = arguments.length;\n            this.insertElements(this.getDataset().data.length - count, count);\n        },\n\n        /**\n         * @private\n         */\n        onDataPop: function() {\n            this.getMeta().data.pop();\n        },\n\n        /**\n         * @private\n         */\n        onDataShift: function() {\n            this.getMeta().data.shift();\n        },\n\n        /**\n         * @private\n         */\n        onDataSplice: function(start, count) {\n            this.getMeta().data.splice(start, count);\n            this.insertElements(start, arguments.length - 2);\n        },\n\n        /**\n         * @private\n         */\n        onDataUnshift: function() {\n            this.insertElements(0, arguments.length);\n        }\n    });\n\n    DatasetController.extend = helpers$1.inherits;\n\n    var core_datasetController = DatasetController;\n\n    core_defaults._set('global', {\n        elements: {\n            arc: {\n                backgroundColor: core_defaults.global.defaultColor,\n                borderColor: '#fff',\n                borderWidth: 2,\n                borderAlign: 'center'\n            }\n        }\n    });\n\n    var element_arc = core_element.extend({\n        inLabelRange: function(mouseX) {\n            var vm = this._view;\n\n            if (vm) {\n                return (Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2));\n            }\n            return false;\n        },\n\n        inRange: function(chartX, chartY) {\n            var vm = this._view;\n\n            if (vm) {\n                var pointRelativePosition = helpers$1.getAngleFromPoint(vm, {x: chartX, y: chartY});\n                var\tangle = pointRelativePosition.angle;\n                var distance = pointRelativePosition.distance;\n\n                // Sanitise angle range\n                var startAngle = vm.startAngle;\n                var endAngle = vm.endAngle;\n                while (endAngle < startAngle) {\n                    endAngle += 2.0 * Math.PI;\n                }\n                while (angle > endAngle) {\n                    angle -= 2.0 * Math.PI;\n                }\n                while (angle < startAngle) {\n                    angle += 2.0 * Math.PI;\n                }\n\n                // Check if within the range of the open/close angle\n                var betweenAngles = (angle >= startAngle && angle <= endAngle);\n                var withinRadius = (distance >= vm.innerRadius && distance <= vm.outerRadius);\n\n                return (betweenAngles && withinRadius);\n            }\n            return false;\n        },\n\n        getCenterPoint: function() {\n            var vm = this._view;\n            var halfAngle = (vm.startAngle + vm.endAngle) / 2;\n            var halfRadius = (vm.innerRadius + vm.outerRadius) / 2;\n            return {\n                x: vm.x + Math.cos(halfAngle) * halfRadius,\n                y: vm.y + Math.sin(halfAngle) * halfRadius\n            };\n        },\n\n        getArea: function() {\n            var vm = this._view;\n            return Math.PI * ((vm.endAngle - vm.startAngle) / (2 * Math.PI)) * (Math.pow(vm.outerRadius, 2) - Math.pow(vm.innerRadius, 2));\n        },\n\n        tooltipPosition: function() {\n            var vm = this._view;\n            var centreAngle = vm.startAngle + ((vm.endAngle - vm.startAngle) / 2);\n            var rangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius;\n\n            return {\n                x: vm.x + (Math.cos(centreAngle) * rangeFromCentre),\n                y: vm.y + (Math.sin(centreAngle) * rangeFromCentre)\n            };\n        },\n\n        draw: function() {\n            var ctx = this._chart.ctx;\n            var vm = this._view;\n            var sA = vm.startAngle;\n            var eA = vm.endAngle;\n            var pixelMargin = (vm.borderAlign === 'inner') ? 0.33 : 0;\n            var angleMargin;\n\n            ctx.save();\n\n            ctx.beginPath();\n            ctx.arc(vm.x, vm.y, Math.max(vm.outerRadius - pixelMargin, 0), sA, eA);\n            ctx.arc(vm.x, vm.y, vm.innerRadius, eA, sA, true);\n            ctx.closePath();\n\n            ctx.fillStyle = vm.backgroundColor;\n            ctx.fill();\n\n            if (vm.borderWidth) {\n                if (vm.borderAlign === 'inner') {\n                    // Draw an inner border by cliping the arc and drawing a double-width border\n                    // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n                    ctx.beginPath();\n                    angleMargin = pixelMargin / vm.outerRadius;\n                    ctx.arc(vm.x, vm.y, vm.outerRadius, sA - angleMargin, eA + angleMargin);\n                    if (vm.innerRadius > pixelMargin) {\n                        angleMargin = pixelMargin / vm.innerRadius;\n                        ctx.arc(vm.x, vm.y, vm.innerRadius - pixelMargin, eA + angleMargin, sA - angleMargin, true);\n                    } else {\n                        ctx.arc(vm.x, vm.y, pixelMargin, eA + Math.PI / 2, sA - Math.PI / 2);\n                    }\n                    ctx.closePath();\n                    ctx.clip();\n\n                    ctx.beginPath();\n                    ctx.arc(vm.x, vm.y, vm.outerRadius, sA, eA);\n                    ctx.arc(vm.x, vm.y, vm.innerRadius, eA, sA, true);\n                    ctx.closePath();\n\n                    ctx.lineWidth = vm.borderWidth * 2;\n                    ctx.lineJoin = 'round';\n                } else {\n                    ctx.lineWidth = vm.borderWidth;\n                    ctx.lineJoin = 'bevel';\n                }\n\n                ctx.strokeStyle = vm.borderColor;\n                ctx.stroke();\n            }\n\n            ctx.restore();\n        }\n    });\n\n    var valueOrDefault$1 = helpers$1.valueOrDefault;\n\n    var defaultColor = core_defaults.global.defaultColor;\n\n    core_defaults._set('global', {\n        elements: {\n            line: {\n                tension: 0.4,\n                backgroundColor: defaultColor,\n                borderWidth: 3,\n                borderColor: defaultColor,\n                borderCapStyle: 'butt',\n                borderDash: [],\n                borderDashOffset: 0.0,\n                borderJoinStyle: 'miter',\n                capBezierPoints: true,\n                fill: true, // do we fill in the area between the line and its base axis\n            }\n        }\n    });\n\n    var element_line = core_element.extend({\n        draw: function() {\n            var me = this;\n            var vm = me._view;\n            var ctx = me._chart.ctx;\n            var spanGaps = vm.spanGaps;\n            var points = me._children.slice(); // clone array\n            var globalDefaults = core_defaults.global;\n            var globalOptionLineElements = globalDefaults.elements.line;\n            var lastDrawnIndex = -1;\n            var index, current, previous, currentVM;\n\n            // If we are looping, adding the first point again\n            if (me._loop && points.length) {\n                points.push(points[0]);\n            }\n\n            ctx.save();\n\n            // Stroke Line Options\n            ctx.lineCap = vm.borderCapStyle || globalOptionLineElements.borderCapStyle;\n\n            // IE 9 and 10 do not support line dash\n            if (ctx.setLineDash) {\n                ctx.setLineDash(vm.borderDash || globalOptionLineElements.borderDash);\n            }\n\n            ctx.lineDashOffset = valueOrDefault$1(vm.borderDashOffset, globalOptionLineElements.borderDashOffset);\n            ctx.lineJoin = vm.borderJoinStyle || globalOptionLineElements.borderJoinStyle;\n            ctx.lineWidth = valueOrDefault$1(vm.borderWidth, globalOptionLineElements.borderWidth);\n            ctx.strokeStyle = vm.borderColor || globalDefaults.defaultColor;\n\n            // Stroke Line\n            ctx.beginPath();\n            lastDrawnIndex = -1;\n\n            for (index = 0; index < points.length; ++index) {\n                current = points[index];\n                previous = helpers$1.previousItem(points, index);\n                currentVM = current._view;\n\n                // First point moves to it's starting position no matter what\n                if (index === 0) {\n                    if (!currentVM.skip) {\n                        ctx.moveTo(currentVM.x, currentVM.y);\n                        lastDrawnIndex = index;\n                    }\n                } else {\n                    previous = lastDrawnIndex === -1 ? previous : points[lastDrawnIndex];\n\n                    if (!currentVM.skip) {\n                        if ((lastDrawnIndex !== (index - 1) && !spanGaps) || lastDrawnIndex === -1) {\n                            // There was a gap and this is the first point after the gap\n                            ctx.moveTo(currentVM.x, currentVM.y);\n                        } else {\n                            // Line to next point\n                            helpers$1.canvas.lineTo(ctx, previous._view, current._view);\n                        }\n                        lastDrawnIndex = index;\n                    }\n                }\n            }\n\n            ctx.stroke();\n            ctx.restore();\n        }\n    });\n\n    var valueOrDefault$2 = helpers$1.valueOrDefault;\n\n    var defaultColor$1 = core_defaults.global.defaultColor;\n\n    core_defaults._set('global', {\n        elements: {\n            point: {\n                radius: 3,\n                pointStyle: 'circle',\n                backgroundColor: defaultColor$1,\n                borderColor: defaultColor$1,\n                borderWidth: 1,\n                // Hover\n                hitRadius: 1,\n                hoverRadius: 4,\n                hoverBorderWidth: 1\n            }\n        }\n    });\n\n    function xRange(mouseX) {\n        var vm = this._view;\n        return vm ? (Math.abs(mouseX - vm.x) < vm.radius + vm.hitRadius) : false;\n    }\n\n    function yRange(mouseY) {\n        var vm = this._view;\n        return vm ? (Math.abs(mouseY - vm.y) < vm.radius + vm.hitRadius) : false;\n    }\n\n    var element_point = core_element.extend({\n        inRange: function(mouseX, mouseY) {\n            var vm = this._view;\n            return vm ? ((Math.pow(mouseX - vm.x, 2) + Math.pow(mouseY - vm.y, 2)) < Math.pow(vm.hitRadius + vm.radius, 2)) : false;\n        },\n\n        inLabelRange: xRange,\n        inXRange: xRange,\n        inYRange: yRange,\n\n        getCenterPoint: function() {\n            var vm = this._view;\n            return {\n                x: vm.x,\n                y: vm.y\n            };\n        },\n\n        getArea: function() {\n            return Math.PI * Math.pow(this._view.radius, 2);\n        },\n\n        tooltipPosition: function() {\n            var vm = this._view;\n            return {\n                x: vm.x,\n                y: vm.y,\n                padding: vm.radius + vm.borderWidth\n            };\n        },\n\n        draw: function(chartArea) {\n            var vm = this._view;\n            var ctx = this._chart.ctx;\n            var pointStyle = vm.pointStyle;\n            var rotation = vm.rotation;\n            var radius = vm.radius;\n            var x = vm.x;\n            var y = vm.y;\n            var globalDefaults = core_defaults.global;\n            var defaultColor = globalDefaults.defaultColor; // eslint-disable-line no-shadow\n\n            if (vm.skip) {\n                return;\n            }\n\n            // Clipping for Points.\n            if (chartArea === undefined || helpers$1.canvas._isPointInArea(vm, chartArea)) {\n                ctx.strokeStyle = vm.borderColor || defaultColor;\n                ctx.lineWidth = valueOrDefault$2(vm.borderWidth, globalDefaults.elements.point.borderWidth);\n                ctx.fillStyle = vm.backgroundColor || defaultColor;\n                helpers$1.canvas.drawPoint(ctx, pointStyle, radius, x, y, rotation);\n            }\n        }\n    });\n\n    var defaultColor$2 = core_defaults.global.defaultColor;\n\n    core_defaults._set('global', {\n        elements: {\n            rectangle: {\n                backgroundColor: defaultColor$2,\n                borderColor: defaultColor$2,\n                borderSkipped: 'bottom',\n                borderWidth: 0\n            }\n        }\n    });\n\n    function isVertical(vm) {\n        return vm && vm.width !== undefined;\n    }\n\n    /**\n     * Helper function to get the bounds of the bar regardless of the orientation\n     * @param bar {Chart.Element.Rectangle} the bar\n     * @return {Bounds} bounds of the bar\n     * @private\n     */\n    function getBarBounds(vm) {\n        var x1, x2, y1, y2, half;\n\n        if (isVertical(vm)) {\n            half = vm.width / 2;\n            x1 = vm.x - half;\n            x2 = vm.x + half;\n            y1 = Math.min(vm.y, vm.base);\n            y2 = Math.max(vm.y, vm.base);\n        } else {\n            half = vm.height / 2;\n            x1 = Math.min(vm.x, vm.base);\n            x2 = Math.max(vm.x, vm.base);\n            y1 = vm.y - half;\n            y2 = vm.y + half;\n        }\n\n        return {\n            left: x1,\n            top: y1,\n            right: x2,\n            bottom: y2\n        };\n    }\n\n    function swap(orig, v1, v2) {\n        return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n    }\n\n    function parseBorderSkipped(vm) {\n        var edge = vm.borderSkipped;\n        var res = {};\n\n        if (!edge) {\n            return res;\n        }\n\n        if (vm.horizontal) {\n            if (vm.base > vm.x) {\n                edge = swap(edge, 'left', 'right');\n            }\n        } else if (vm.base < vm.y) {\n            edge = swap(edge, 'bottom', 'top');\n        }\n\n        res[edge] = true;\n        return res;\n    }\n\n    function parseBorderWidth(vm, maxW, maxH) {\n        var value = vm.borderWidth;\n        var skip = parseBorderSkipped(vm);\n        var t, r, b, l;\n\n        if (helpers$1.isObject(value)) {\n            t = +value.top || 0;\n            r = +value.right || 0;\n            b = +value.bottom || 0;\n            l = +value.left || 0;\n        } else {\n            t = r = b = l = +value || 0;\n        }\n\n        return {\n            t: skip.top || (t < 0) ? 0 : t > maxH ? maxH : t,\n            r: skip.right || (r < 0) ? 0 : r > maxW ? maxW : r,\n            b: skip.bottom || (b < 0) ? 0 : b > maxH ? maxH : b,\n            l: skip.left || (l < 0) ? 0 : l > maxW ? maxW : l\n        };\n    }\n\n    function boundingRects(vm) {\n        var bounds = getBarBounds(vm);\n        var width = bounds.right - bounds.left;\n        var height = bounds.bottom - bounds.top;\n        var border = parseBorderWidth(vm, width / 2, height / 2);\n\n        return {\n            outer: {\n                x: bounds.left,\n                y: bounds.top,\n                w: width,\n                h: height\n            },\n            inner: {\n                x: bounds.left + border.l,\n                y: bounds.top + border.t,\n                w: width - border.l - border.r,\n                h: height - border.t - border.b\n            }\n        };\n    }\n\n    function inRange(vm, x, y) {\n        var skipX = x === null;\n        var skipY = y === null;\n        var bounds = !vm || (skipX && skipY) ? false : getBarBounds(vm);\n\n        return bounds\n            && (skipX || x >= bounds.left && x <= bounds.right)\n            && (skipY || y >= bounds.top && y <= bounds.bottom);\n    }\n\n    var element_rectangle = core_element.extend({\n        draw: function() {\n            var ctx = this._chart.ctx;\n            var vm = this._view;\n            var rects = boundingRects(vm);\n            var outer = rects.outer;\n            var inner = rects.inner;\n\n            ctx.fillStyle = vm.backgroundColor;\n            ctx.fillRect(outer.x, outer.y, outer.w, outer.h);\n\n            if (outer.w === inner.w && outer.h === inner.h) {\n                return;\n            }\n\n            ctx.save();\n            ctx.beginPath();\n            ctx.rect(outer.x, outer.y, outer.w, outer.h);\n            ctx.clip();\n            ctx.fillStyle = vm.borderColor;\n            ctx.rect(inner.x, inner.y, inner.w, inner.h);\n            ctx.fill('evenodd');\n            ctx.restore();\n        },\n\n        height: function() {\n            var vm = this._view;\n            return vm.base - vm.y;\n        },\n\n        inRange: function(mouseX, mouseY) {\n            return inRange(this._view, mouseX, mouseY);\n        },\n\n        inLabelRange: function(mouseX, mouseY) {\n            var vm = this._view;\n            return isVertical(vm)\n                ? inRange(vm, mouseX, null)\n                : inRange(vm, null, mouseY);\n        },\n\n        inXRange: function(mouseX) {\n            return inRange(this._view, mouseX, null);\n        },\n\n        inYRange: function(mouseY) {\n            return inRange(this._view, null, mouseY);\n        },\n\n        getCenterPoint: function() {\n            var vm = this._view;\n            var x, y;\n            if (isVertical(vm)) {\n                x = vm.x;\n                y = (vm.y + vm.base) / 2;\n            } else {\n                x = (vm.x + vm.base) / 2;\n                y = vm.y;\n            }\n\n            return {x: x, y: y};\n        },\n\n        getArea: function() {\n            var vm = this._view;\n\n            return isVertical(vm)\n                ? vm.width * Math.abs(vm.y - vm.base)\n                : vm.height * Math.abs(vm.x - vm.base);\n        },\n\n        tooltipPosition: function() {\n            var vm = this._view;\n            return {\n                x: vm.x,\n                y: vm.y\n            };\n        }\n    });\n\n    var elements = {};\n    var Arc = element_arc;\n    var Line = element_line;\n    var Point = element_point;\n    var Rectangle = element_rectangle;\n    elements.Arc = Arc;\n    elements.Line = Line;\n    elements.Point = Point;\n    elements.Rectangle = Rectangle;\n\n    var resolve$1 = helpers$1.options.resolve;\n\n    core_defaults._set('bar', {\n        hover: {\n            mode: 'label'\n        },\n\n        scales: {\n            xAxes: [{\n                type: 'category',\n                categoryPercentage: 0.8,\n                barPercentage: 0.9,\n                offset: true,\n                gridLines: {\n                    offsetGridLines: true\n                }\n            }],\n\n            yAxes: [{\n                type: 'linear'\n            }]\n        }\n    });\n\n    /**\n     * Computes the \"optimal\" sample size to maintain bars equally sized while preventing overlap.\n     * @private\n     */\n    function computeMinSampleSize(scale, pixels) {\n        var min = scale.isHorizontal() ? scale.width : scale.height;\n        var ticks = scale.getTicks();\n        var prev, curr, i, ilen;\n\n        for (i = 1, ilen = pixels.length; i < ilen; ++i) {\n            min = Math.min(min, Math.abs(pixels[i] - pixels[i - 1]));\n        }\n\n        for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n            curr = scale.getPixelForTick(i);\n            min = i > 0 ? Math.min(min, curr - prev) : min;\n            prev = curr;\n        }\n\n        return min;\n    }\n\n    /**\n     * Computes an \"ideal\" category based on the absolute bar thickness or, if undefined or null,\n     * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This\n     * mode currently always generates bars equally sized (until we introduce scriptable options?).\n     * @private\n     */\n    function computeFitCategoryTraits(index, ruler, options) {\n        var thickness = options.barThickness;\n        var count = ruler.stackCount;\n        var curr = ruler.pixels[index];\n        var size, ratio;\n\n        if (helpers$1.isNullOrUndef(thickness)) {\n            size = ruler.min * options.categoryPercentage;\n            ratio = options.barPercentage;\n        } else {\n            // When bar thickness is enforced, category and bar percentages are ignored.\n            // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')\n            // and deprecate barPercentage since this value is ignored when thickness is absolute.\n            size = thickness * count;\n            ratio = 1;\n        }\n\n        return {\n            chunk: size / count,\n            ratio: ratio,\n            start: curr - (size / 2)\n        };\n    }\n\n    /**\n     * Computes an \"optimal\" category that globally arranges bars side by side (no gap when\n     * percentage options are 1), based on the previous and following categories. This mode\n     * generates bars with different widths when data are not evenly spaced.\n     * @private\n     */\n    function computeFlexCategoryTraits(index, ruler, options) {\n        var pixels = ruler.pixels;\n        var curr = pixels[index];\n        var prev = index > 0 ? pixels[index - 1] : null;\n        var next = index < pixels.length - 1 ? pixels[index + 1] : null;\n        var percent = options.categoryPercentage;\n        var start, size;\n\n        if (prev === null) {\n            // first data: its size is double based on the next point or,\n            // if it's also the last data, we use the scale size.\n            prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n        }\n\n        if (next === null) {\n            // last data: its size is also double based on the previous point.\n            next = curr + curr - prev;\n        }\n\n        start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n        size = Math.abs(next - prev) / 2 * percent;\n\n        return {\n            chunk: size / ruler.stackCount,\n            ratio: options.barPercentage,\n            start: start\n        };\n    }\n\n    var controller_bar = core_datasetController.extend({\n\n        dataElementType: elements.Rectangle,\n\n        initialize: function() {\n            var me = this;\n            var meta;\n\n            core_datasetController.prototype.initialize.apply(me, arguments);\n\n            meta = me.getMeta();\n            meta.stack = me.getDataset().stack;\n            meta.bar = true;\n        },\n\n        update: function(reset) {\n            var me = this;\n            var rects = me.getMeta().data;\n            var i, ilen;\n\n            me._ruler = me.getRuler();\n\n            for (i = 0, ilen = rects.length; i < ilen; ++i) {\n                me.updateElement(rects[i], i, reset);\n            }\n        },\n\n        updateElement: function(rectangle, index, reset) {\n            var me = this;\n            var meta = me.getMeta();\n            var dataset = me.getDataset();\n            var options = me._resolveElementOptions(rectangle, index);\n\n            rectangle._xScale = me.getScaleForId(meta.xAxisID);\n            rectangle._yScale = me.getScaleForId(meta.yAxisID);\n            rectangle._datasetIndex = me.index;\n            rectangle._index = index;\n            rectangle._model = {\n                backgroundColor: options.backgroundColor,\n                borderColor: options.borderColor,\n                borderSkipped: options.borderSkipped,\n                borderWidth: options.borderWidth,\n                datasetLabel: dataset.label,\n                label: me.chart.data.labels[index]\n            };\n\n            me._updateElementGeometry(rectangle, index, reset);\n\n            rectangle.pivot();\n        },\n\n        /**\n         * @private\n         */\n        _updateElementGeometry: function(rectangle, index, reset) {\n            var me = this;\n            var model = rectangle._model;\n            var vscale = me._getValueScale();\n            var base = vscale.getBasePixel();\n            var horizontal = vscale.isHorizontal();\n            var ruler = me._ruler || me.getRuler();\n            var vpixels = me.calculateBarValuePixels(me.index, index);\n            var ipixels = me.calculateBarIndexPixels(me.index, index, ruler);\n\n            model.horizontal = horizontal;\n            model.base = reset ? base : vpixels.base;\n            model.x = horizontal ? reset ? base : vpixels.head : ipixels.center;\n            model.y = horizontal ? ipixels.center : reset ? base : vpixels.head;\n            model.height = horizontal ? ipixels.size : undefined;\n            model.width = horizontal ? undefined : ipixels.size;\n        },\n\n        /**\n         * Returns the stacks based on groups and bar visibility.\n         * @param {number} [last] - The dataset index\n         * @returns {string[]} The list of stack IDs\n         * @private\n         */\n        _getStacks: function(last) {\n            var me = this;\n            var chart = me.chart;\n            var scale = me._getIndexScale();\n            var stacked = scale.options.stacked;\n            var ilen = last === undefined ? chart.data.datasets.length : last + 1;\n            var stacks = [];\n            var i, meta;\n\n            for (i = 0; i < ilen; ++i) {\n                meta = chart.getDatasetMeta(i);\n                if (meta.bar && chart.isDatasetVisible(i) &&\n                    (stacked === false ||\n                    (stacked === true && stacks.indexOf(meta.stack) === -1) ||\n                    (stacked === undefined && (meta.stack === undefined || stacks.indexOf(meta.stack) === -1)))) {\n                    stacks.push(meta.stack);\n                }\n            }\n\n            return stacks;\n        },\n\n        /**\n         * Returns the effective number of stacks based on groups and bar visibility.\n         * @private\n         */\n        getStackCount: function() {\n            return this._getStacks().length;\n        },\n\n        /**\n         * Returns the stack index for the given dataset based on groups and bar visibility.\n         * @param {number} [datasetIndex] - The dataset index\n         * @param {string} [name] - The stack name to find\n         * @returns {number} The stack index\n         * @private\n         */\n        getStackIndex: function(datasetIndex, name) {\n            var stacks = this._getStacks(datasetIndex);\n            var index = (name !== undefined)\n                ? stacks.indexOf(name)\n                : -1; // indexOf returns -1 if element is not present\n\n            return (index === -1)\n                ? stacks.length - 1\n                : index;\n        },\n\n        /**\n         * @private\n         */\n        getRuler: function() {\n            var me = this;\n            var scale = me._getIndexScale();\n            var stackCount = me.getStackCount();\n            var datasetIndex = me.index;\n            var isHorizontal = scale.isHorizontal();\n            var start = isHorizontal ? scale.left : scale.top;\n            var end = start + (isHorizontal ? scale.width : scale.height);\n            var pixels = [];\n            var i, ilen, min;\n\n            for (i = 0, ilen = me.getMeta().data.length; i < ilen; ++i) {\n                pixels.push(scale.getPixelForValue(null, i, datasetIndex));\n            }\n\n            min = helpers$1.isNullOrUndef(scale.options.barThickness)\n                ? computeMinSampleSize(scale, pixels)\n                : -1;\n\n            return {\n                min: min,\n                pixels: pixels,\n                start: start,\n                end: end,\n                stackCount: stackCount,\n                scale: scale\n            };\n        },\n\n        /**\n         * Note: pixel values are not clamped to the scale area.\n         * @private\n         */\n        calculateBarValuePixels: function(datasetIndex, index) {\n            var me = this;\n            var chart = me.chart;\n            var meta = me.getMeta();\n            var scale = me._getValueScale();\n            var isHorizontal = scale.isHorizontal();\n            var datasets = chart.data.datasets;\n            var value = +scale.getRightValue(datasets[datasetIndex].data[index]);\n            var minBarLength = scale.options.minBarLength;\n            var stacked = scale.options.stacked;\n            var stack = meta.stack;\n            var start = 0;\n            var i, imeta, ivalue, base, head, size;\n\n            if (stacked || (stacked === undefined && stack !== undefined)) {\n                for (i = 0; i < datasetIndex; ++i) {\n                    imeta = chart.getDatasetMeta(i);\n\n                    if (imeta.bar &&\n                        imeta.stack === stack &&\n                        imeta.controller._getValueScaleId() === scale.id &&\n                        chart.isDatasetVisible(i)) {\n\n                        ivalue = +scale.getRightValue(datasets[i].data[index]);\n                        if ((value < 0 && ivalue < 0) || (value >= 0 && ivalue > 0)) {\n                            start += ivalue;\n                        }\n                    }\n                }\n            }\n\n            base = scale.getPixelForValue(start);\n            head = scale.getPixelForValue(start + value);\n            size = head - base;\n\n            if (minBarLength !== undefined && Math.abs(size) < minBarLength) {\n                size = minBarLength;\n                if (value >= 0 && !isHorizontal || value < 0 && isHorizontal) {\n                    head = base - minBarLength;\n                } else {\n                    head = base + minBarLength;\n                }\n            }\n\n            return {\n                size: size,\n                base: base,\n                head: head,\n                center: head + size / 2\n            };\n        },\n\n        /**\n         * @private\n         */\n        calculateBarIndexPixels: function(datasetIndex, index, ruler) {\n            var me = this;\n            var options = ruler.scale.options;\n            var range = options.barThickness === 'flex'\n                ? computeFlexCategoryTraits(index, ruler, options)\n                : computeFitCategoryTraits(index, ruler, options);\n\n            var stackIndex = me.getStackIndex(datasetIndex, me.getMeta().stack);\n            var center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);\n            var size = Math.min(\n                helpers$1.valueOrDefault(options.maxBarThickness, Infinity),\n                range.chunk * range.ratio);\n\n            return {\n                base: center - size / 2,\n                head: center + size / 2,\n                center: center,\n                size: size\n            };\n        },\n\n        draw: function() {\n            var me = this;\n            var chart = me.chart;\n            var scale = me._getValueScale();\n            var rects = me.getMeta().data;\n            var dataset = me.getDataset();\n            var ilen = rects.length;\n            var i = 0;\n\n            helpers$1.canvas.clipArea(chart.ctx, chart.chartArea);\n\n            for (; i < ilen; ++i) {\n                if (!isNaN(scale.getRightValue(dataset.data[i]))) {\n                    rects[i].draw();\n                }\n            }\n\n            helpers$1.canvas.unclipArea(chart.ctx);\n        },\n\n        /**\n         * @private\n         */\n        _resolveElementOptions: function(rectangle, index) {\n            var me = this;\n            var chart = me.chart;\n            var datasets = chart.data.datasets;\n            var dataset = datasets[me.index];\n            var custom = rectangle.custom || {};\n            var options = chart.options.elements.rectangle;\n            var values = {};\n            var i, ilen, key;\n\n            // Scriptable options\n            var context = {\n                chart: chart,\n                dataIndex: index,\n                dataset: dataset,\n                datasetIndex: me.index\n            };\n\n            var keys = [\n                'backgroundColor',\n                'borderColor',\n                'borderSkipped',\n                'borderWidth'\n            ];\n\n            for (i = 0, ilen = keys.length; i < ilen; ++i) {\n                key = keys[i];\n                values[key] = resolve$1([\n                    custom[key],\n                    dataset[key],\n                    options[key]\n                ], context, index);\n            }\n\n            return values;\n        }\n    });\n\n    var valueOrDefault$3 = helpers$1.valueOrDefault;\n    var resolve$2 = helpers$1.options.resolve;\n\n    core_defaults._set('bubble', {\n        hover: {\n            mode: 'single'\n        },\n\n        scales: {\n            xAxes: [{\n                type: 'linear', // bubble should probably use a linear scale by default\n                position: 'bottom',\n                id: 'x-axis-0' // need an ID so datasets can reference the scale\n            }],\n            yAxes: [{\n                type: 'linear',\n                position: 'left',\n                id: 'y-axis-0'\n            }]\n        },\n\n        tooltips: {\n            callbacks: {\n                title: function() {\n                    // Title doesn't make sense for scatter since we format the data as a point\n                    return '';\n                },\n                label: function(item, data) {\n                    var datasetLabel = data.datasets[item.datasetIndex].label || '';\n                    var dataPoint = data.datasets[item.datasetIndex].data[item.index];\n                    return datasetLabel + ': (' + item.xLabel + ', ' + item.yLabel + ', ' + dataPoint.r + ')';\n                }\n            }\n        }\n    });\n\n    var controller_bubble = core_datasetController.extend({\n        /**\n         * @protected\n         */\n        dataElementType: elements.Point,\n\n        /**\n         * @protected\n         */\n        update: function(reset) {\n            var me = this;\n            var meta = me.getMeta();\n            var points = meta.data;\n\n            // Update Points\n            helpers$1.each(points, function(point, index) {\n                me.updateElement(point, index, reset);\n            });\n        },\n\n        /**\n         * @protected\n         */\n        updateElement: function(point, index, reset) {\n            var me = this;\n            var meta = me.getMeta();\n            var custom = point.custom || {};\n            var xScale = me.getScaleForId(meta.xAxisID);\n            var yScale = me.getScaleForId(meta.yAxisID);\n            var options = me._resolveElementOptions(point, index);\n            var data = me.getDataset().data[index];\n            var dsIndex = me.index;\n\n            var x = reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(typeof data === 'object' ? data : NaN, index, dsIndex);\n            var y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex);\n\n            point._xScale = xScale;\n            point._yScale = yScale;\n            point._options = options;\n            point._datasetIndex = dsIndex;\n            point._index = index;\n            point._model = {\n                backgroundColor: options.backgroundColor,\n                borderColor: options.borderColor,\n                borderWidth: options.borderWidth,\n                hitRadius: options.hitRadius,\n                pointStyle: options.pointStyle,\n                rotation: options.rotation,\n                radius: reset ? 0 : options.radius,\n                skip: custom.skip || isNaN(x) || isNaN(y),\n                x: x,\n                y: y,\n            };\n\n            point.pivot();\n        },\n\n        /**\n         * @protected\n         */\n        setHoverStyle: function(point) {\n            var model = point._model;\n            var options = point._options;\n            var getHoverColor = helpers$1.getHoverColor;\n\n            point.$previousStyle = {\n                backgroundColor: model.backgroundColor,\n                borderColor: model.borderColor,\n                borderWidth: model.borderWidth,\n                radius: model.radius\n            };\n\n            model.backgroundColor = valueOrDefault$3(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n            model.borderColor = valueOrDefault$3(options.hoverBorderColor, getHoverColor(options.borderColor));\n            model.borderWidth = valueOrDefault$3(options.hoverBorderWidth, options.borderWidth);\n            model.radius = options.radius + options.hoverRadius;\n        },\n\n        /**\n         * @private\n         */\n        _resolveElementOptions: function(point, index) {\n            var me = this;\n            var chart = me.chart;\n            var datasets = chart.data.datasets;\n            var dataset = datasets[me.index];\n            var custom = point.custom || {};\n            var options = chart.options.elements.point;\n            var data = dataset.data[index];\n            var values = {};\n            var i, ilen, key;\n\n            // Scriptable options\n            var context = {\n                chart: chart,\n                dataIndex: index,\n                dataset: dataset,\n                datasetIndex: me.index\n            };\n\n            var keys = [\n                'backgroundColor',\n                'borderColor',\n                'borderWidth',\n                'hoverBackgroundColor',\n                'hoverBorderColor',\n                'hoverBorderWidth',\n                'hoverRadius',\n                'hitRadius',\n                'pointStyle',\n                'rotation'\n            ];\n\n            for (i = 0, ilen = keys.length; i < ilen; ++i) {\n                key = keys[i];\n                values[key] = resolve$2([\n                    custom[key],\n                    dataset[key],\n                    options[key]\n                ], context, index);\n            }\n\n            // Custom radius resolution\n            values.radius = resolve$2([\n                custom.radius,\n                data ? data.r : undefined,\n                dataset.radius,\n                options.radius\n            ], context, index);\n\n            return values;\n        }\n    });\n\n    var resolve$3 = helpers$1.options.resolve;\n    var valueOrDefault$4 = helpers$1.valueOrDefault;\n\n    core_defaults._set('doughnut', {\n        animation: {\n            // Boolean - Whether we animate the rotation of the Doughnut\n            animateRotate: true,\n            // Boolean - Whether we animate scaling the Doughnut from the centre\n            animateScale: false\n        },\n        hover: {\n            mode: 'single'\n        },\n        legendCallback: function(chart) {\n            var text = [];\n            text.push('<ul class=\"' + chart.id + '-legend\">');\n\n            var data = chart.data;\n            var datasets = data.datasets;\n            var labels = data.labels;\n\n            if (datasets.length) {\n                for (var i = 0; i < datasets[0].data.length; ++i) {\n                    text.push('<li><span style=\"background-color:' + datasets[0].backgroundColor[i] + '\"></span>');\n                    if (labels[i]) {\n                        text.push(labels[i]);\n                    }\n                    text.push('</li>');\n                }\n            }\n\n            text.push('</ul>');\n            return text.join('');\n        },\n        legend: {\n            labels: {\n                generateLabels: function(chart) {\n                    var data = chart.data;\n                    if (data.labels.length && data.datasets.length) {\n                        return data.labels.map(function(label, i) {\n                            var meta = chart.getDatasetMeta(0);\n                            var ds = data.datasets[0];\n                            var arc = meta.data[i];\n                            var custom = arc && arc.custom || {};\n                            var arcOpts = chart.options.elements.arc;\n                            var fill = resolve$3([custom.backgroundColor, ds.backgroundColor, arcOpts.backgroundColor], undefined, i);\n                            var stroke = resolve$3([custom.borderColor, ds.borderColor, arcOpts.borderColor], undefined, i);\n                            var bw = resolve$3([custom.borderWidth, ds.borderWidth, arcOpts.borderWidth], undefined, i);\n\n                            return {\n                                text: label,\n                                fillStyle: fill,\n                                strokeStyle: stroke,\n                                lineWidth: bw,\n                                hidden: isNaN(ds.data[i]) || meta.data[i].hidden,\n\n                                // Extra data used for toggling the correct item\n                                index: i\n                            };\n                        });\n                    }\n                    return [];\n                }\n            },\n\n            onClick: function(e, legendItem) {\n                var index = legendItem.index;\n                var chart = this.chart;\n                var i, ilen, meta;\n\n                for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n                    meta = chart.getDatasetMeta(i);\n                    // toggle visibility of index if exists\n                    if (meta.data[index]) {\n                        meta.data[index].hidden = !meta.data[index].hidden;\n                    }\n                }\n\n                chart.update();\n            }\n        },\n\n        // The percentage of the chart that we cut out of the middle.\n        cutoutPercentage: 50,\n\n        // The rotation of the chart, where the first data arc begins.\n        rotation: Math.PI * -0.5,\n\n        // The total circumference of the chart.\n        circumference: Math.PI * 2.0,\n\n        // Need to override these to give a nice default\n        tooltips: {\n            callbacks: {\n                title: function() {\n                    return '';\n                },\n                label: function(tooltipItem, data) {\n                    var dataLabel = data.labels[tooltipItem.index];\n                    var value = ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];\n\n                    if (helpers$1.isArray(dataLabel)) {\n                        // show value on first line of multiline label\n                        // need to clone because we are changing the value\n                        dataLabel = dataLabel.slice();\n                        dataLabel[0] += value;\n                    } else {\n                        dataLabel += value;\n                    }\n\n                    return dataLabel;\n                }\n            }\n        }\n    });\n\n    var controller_doughnut = core_datasetController.extend({\n\n        dataElementType: elements.Arc,\n\n        linkScales: helpers$1.noop,\n\n        // Get index of the dataset in relation to the visible datasets. This allows determining the inner and outer radius correctly\n        getRingIndex: function(datasetIndex) {\n            var ringIndex = 0;\n\n            for (var j = 0; j < datasetIndex; ++j) {\n                if (this.chart.isDatasetVisible(j)) {\n                    ++ringIndex;\n                }\n            }\n\n            return ringIndex;\n        },\n\n        update: function(reset) {\n            var me = this;\n            var chart = me.chart;\n            var chartArea = chart.chartArea;\n            var opts = chart.options;\n            var availableWidth = chartArea.right - chartArea.left;\n            var availableHeight = chartArea.bottom - chartArea.top;\n            var minSize = Math.min(availableWidth, availableHeight);\n            var offset = {x: 0, y: 0};\n            var meta = me.getMeta();\n            var arcs = meta.data;\n            var cutoutPercentage = opts.cutoutPercentage;\n            var circumference = opts.circumference;\n            var chartWeight = me._getRingWeight(me.index);\n            var i, ilen;\n\n            // If the chart's circumference isn't a full circle, calculate minSize as a ratio of the width/height of the arc\n            if (circumference < Math.PI * 2.0) {\n                var startAngle = opts.rotation % (Math.PI * 2.0);\n                startAngle += Math.PI * 2.0 * (startAngle >= Math.PI ? -1 : startAngle < -Math.PI ? 1 : 0);\n                var endAngle = startAngle + circumference;\n                var start = {x: Math.cos(startAngle), y: Math.sin(startAngle)};\n                var end = {x: Math.cos(endAngle), y: Math.sin(endAngle)};\n                var contains0 = (startAngle <= 0 && endAngle >= 0) || (startAngle <= Math.PI * 2.0 && Math.PI * 2.0 <= endAngle);\n                var contains90 = (startAngle <= Math.PI * 0.5 && Math.PI * 0.5 <= endAngle) || (startAngle <= Math.PI * 2.5 && Math.PI * 2.5 <= endAngle);\n                var contains180 = (startAngle <= -Math.PI && -Math.PI <= endAngle) || (startAngle <= Math.PI && Math.PI <= endAngle);\n                var contains270 = (startAngle <= -Math.PI * 0.5 && -Math.PI * 0.5 <= endAngle) || (startAngle <= Math.PI * 1.5 && Math.PI * 1.5 <= endAngle);\n                var cutout = cutoutPercentage / 100.0;\n                var min = {x: contains180 ? -1 : Math.min(start.x * (start.x < 0 ? 1 : cutout), end.x * (end.x < 0 ? 1 : cutout)), y: contains270 ? -1 : Math.min(start.y * (start.y < 0 ? 1 : cutout), end.y * (end.y < 0 ? 1 : cutout))};\n                var max = {x: contains0 ? 1 : Math.max(start.x * (start.x > 0 ? 1 : cutout), end.x * (end.x > 0 ? 1 : cutout)), y: contains90 ? 1 : Math.max(start.y * (start.y > 0 ? 1 : cutout), end.y * (end.y > 0 ? 1 : cutout))};\n                var size = {width: (max.x - min.x) * 0.5, height: (max.y - min.y) * 0.5};\n                minSize = Math.min(availableWidth / size.width, availableHeight / size.height);\n                offset = {x: (max.x + min.x) * -0.5, y: (max.y + min.y) * -0.5};\n            }\n\n            for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n                arcs[i]._options = me._resolveElementOptions(arcs[i], i);\n            }\n\n            chart.borderWidth = me.getMaxBorderWidth();\n            chart.outerRadius = Math.max((minSize - chart.borderWidth) / 2, 0);\n            chart.innerRadius = Math.max(cutoutPercentage ? (chart.outerRadius / 100) * (cutoutPercentage) : 0, 0);\n            chart.radiusLength = (chart.outerRadius - chart.innerRadius) / (me._getVisibleDatasetWeightTotal() || 1);\n            chart.offsetX = offset.x * chart.outerRadius;\n            chart.offsetY = offset.y * chart.outerRadius;\n\n            meta.total = me.calculateTotal();\n\n            me.outerRadius = chart.outerRadius - chart.radiusLength * me._getRingWeightOffset(me.index);\n            me.innerRadius = Math.max(me.outerRadius - chart.radiusLength * chartWeight, 0);\n\n            for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n                me.updateElement(arcs[i], i, reset);\n            }\n        },\n\n        updateElement: function(arc, index, reset) {\n            var me = this;\n            var chart = me.chart;\n            var chartArea = chart.chartArea;\n            var opts = chart.options;\n            var animationOpts = opts.animation;\n            var centerX = (chartArea.left + chartArea.right) / 2;\n            var centerY = (chartArea.top + chartArea.bottom) / 2;\n            var startAngle = opts.rotation; // non reset case handled later\n            var endAngle = opts.rotation; // non reset case handled later\n            var dataset = me.getDataset();\n            var circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(dataset.data[index]) * (opts.circumference / (2.0 * Math.PI));\n            var innerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius;\n            var outerRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius;\n            var options = arc._options || {};\n\n            helpers$1.extend(arc, {\n                // Utility\n                _datasetIndex: me.index,\n                _index: index,\n\n                // Desired view properties\n                _model: {\n                    backgroundColor: options.backgroundColor,\n                    borderColor: options.borderColor,\n                    borderWidth: options.borderWidth,\n                    borderAlign: options.borderAlign,\n                    x: centerX + chart.offsetX,\n                    y: centerY + chart.offsetY,\n                    startAngle: startAngle,\n                    endAngle: endAngle,\n                    circumference: circumference,\n                    outerRadius: outerRadius,\n                    innerRadius: innerRadius,\n                    label: helpers$1.valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index])\n                }\n            });\n\n            var model = arc._model;\n\n            // Set correct angles if not resetting\n            if (!reset || !animationOpts.animateRotate) {\n                if (index === 0) {\n                    model.startAngle = opts.rotation;\n                } else {\n                    model.startAngle = me.getMeta().data[index - 1]._model.endAngle;\n                }\n\n                model.endAngle = model.startAngle + model.circumference;\n            }\n\n            arc.pivot();\n        },\n\n        calculateTotal: function() {\n            var dataset = this.getDataset();\n            var meta = this.getMeta();\n            var total = 0;\n            var value;\n\n            helpers$1.each(meta.data, function(element, index) {\n                value = dataset.data[index];\n                if (!isNaN(value) && !element.hidden) {\n                    total += Math.abs(value);\n                }\n            });\n\n            /* if (total === 0) {\n                total = NaN;\n            }*/\n\n            return total;\n        },\n\n        calculateCircumference: function(value) {\n            var total = this.getMeta().total;\n            if (total > 0 && !isNaN(value)) {\n                return (Math.PI * 2.0) * (Math.abs(value) / total);\n            }\n            return 0;\n        },\n\n        // gets the max border or hover width to properly scale pie charts\n        getMaxBorderWidth: function(arcs) {\n            var me = this;\n            var max = 0;\n            var chart = me.chart;\n            var i, ilen, meta, arc, controller, options, borderWidth, hoverWidth;\n\n            if (!arcs) {\n                // Find the outmost visible dataset\n                for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n                    if (chart.isDatasetVisible(i)) {\n                        meta = chart.getDatasetMeta(i);\n                        arcs = meta.data;\n                        if (i !== me.index) {\n                            controller = meta.controller;\n                        }\n                        break;\n                    }\n                }\n            }\n\n            if (!arcs) {\n                return 0;\n            }\n\n            for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n                arc = arcs[i];\n                options = controller ? controller._resolveElementOptions(arc, i) : arc._options;\n                if (options.borderAlign !== 'inner') {\n                    borderWidth = options.borderWidth;\n                    hoverWidth = options.hoverBorderWidth;\n\n                    max = borderWidth > max ? borderWidth : max;\n                    max = hoverWidth > max ? hoverWidth : max;\n                }\n            }\n            return max;\n        },\n\n        /**\n         * @protected\n         */\n        setHoverStyle: function(arc) {\n            var model = arc._model;\n            var options = arc._options;\n            var getHoverColor = helpers$1.getHoverColor;\n\n            arc.$previousStyle = {\n                backgroundColor: model.backgroundColor,\n                borderColor: model.borderColor,\n                borderWidth: model.borderWidth,\n            };\n\n            model.backgroundColor = valueOrDefault$4(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n            model.borderColor = valueOrDefault$4(options.hoverBorderColor, getHoverColor(options.borderColor));\n            model.borderWidth = valueOrDefault$4(options.hoverBorderWidth, options.borderWidth);\n        },\n\n        /**\n         * @private\n         */\n        _resolveElementOptions: function(arc, index) {\n            var me = this;\n            var chart = me.chart;\n            var dataset = me.getDataset();\n            var custom = arc.custom || {};\n            var options = chart.options.elements.arc;\n            var values = {};\n            var i, ilen, key;\n\n            // Scriptable options\n            var context = {\n                chart: chart,\n                dataIndex: index,\n                dataset: dataset,\n                datasetIndex: me.index\n            };\n\n            var keys = [\n                'backgroundColor',\n                'borderColor',\n                'borderWidth',\n                'borderAlign',\n                'hoverBackgroundColor',\n                'hoverBorderColor',\n                'hoverBorderWidth',\n            ];\n\n            for (i = 0, ilen = keys.length; i < ilen; ++i) {\n                key = keys[i];\n                values[key] = resolve$3([\n                    custom[key],\n                    dataset[key],\n                    options[key]\n                ], context, index);\n            }\n\n            return values;\n        },\n\n        /**\n         * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly\n         * @private\n         */\n        _getRingWeightOffset: function(datasetIndex) {\n            var ringWeightOffset = 0;\n\n            for (var i = 0; i < datasetIndex; ++i) {\n                if (this.chart.isDatasetVisible(i)) {\n                    ringWeightOffset += this._getRingWeight(i);\n                }\n            }\n\n            return ringWeightOffset;\n        },\n\n        /**\n         * @private\n         */\n        _getRingWeight: function(dataSetIndex) {\n            return Math.max(valueOrDefault$4(this.chart.data.datasets[dataSetIndex].weight, 1), 0);\n        },\n\n        /**\n         * Returns the sum of all visibile data set weights.  This value can be 0.\n         * @private\n         */\n        _getVisibleDatasetWeightTotal: function() {\n            return this._getRingWeightOffset(this.chart.data.datasets.length);\n        }\n    });\n\n    core_defaults._set('horizontalBar', {\n        hover: {\n            mode: 'index',\n            axis: 'y'\n        },\n\n        scales: {\n            xAxes: [{\n                type: 'linear',\n                position: 'bottom'\n            }],\n\n            yAxes: [{\n                type: 'category',\n                position: 'left',\n                categoryPercentage: 0.8,\n                barPercentage: 0.9,\n                offset: true,\n                gridLines: {\n                    offsetGridLines: true\n                }\n            }]\n        },\n\n        elements: {\n            rectangle: {\n                borderSkipped: 'left'\n            }\n        },\n\n        tooltips: {\n            mode: 'index',\n            axis: 'y'\n        }\n    });\n\n    var controller_horizontalBar = controller_bar.extend({\n        /**\n         * @private\n         */\n        _getValueScaleId: function() {\n            return this.getMeta().xAxisID;\n        },\n\n        /**\n         * @private\n         */\n        _getIndexScaleId: function() {\n            return this.getMeta().yAxisID;\n        }\n    });\n\n    var valueOrDefault$5 = helpers$1.valueOrDefault;\n    var resolve$4 = helpers$1.options.resolve;\n    var isPointInArea = helpers$1.canvas._isPointInArea;\n\n    core_defaults._set('line', {\n        showLines: true,\n        spanGaps: false,\n\n        hover: {\n            mode: 'label'\n        },\n\n        scales: {\n            xAxes: [{\n                type: 'category',\n                id: 'x-axis-0'\n            }],\n            yAxes: [{\n                type: 'linear',\n                id: 'y-axis-0'\n            }]\n        }\n    });\n\n    function lineEnabled(dataset, options) {\n        return valueOrDefault$5(dataset.showLine, options.showLines);\n    }\n\n    var controller_line = core_datasetController.extend({\n\n        datasetElementType: elements.Line,\n\n        dataElementType: elements.Point,\n\n        update: function(reset) {\n            var me = this;\n            var meta = me.getMeta();\n            var line = meta.dataset;\n            var points = meta.data || [];\n            var scale = me.getScaleForId(meta.yAxisID);\n            var dataset = me.getDataset();\n            var showLine = lineEnabled(dataset, me.chart.options);\n            var i, ilen;\n\n            // Update Line\n            if (showLine) {\n                // Compatibility: If the properties are defined with only the old name, use those values\n                if ((dataset.tension !== undefined) && (dataset.lineTension === undefined)) {\n                    dataset.lineTension = dataset.tension;\n                }\n\n                // Utility\n                line._scale = scale;\n                line._datasetIndex = me.index;\n                // Data\n                line._children = points;\n                // Model\n                line._model = me._resolveLineOptions(line);\n\n                line.pivot();\n            }\n\n            // Update Points\n            for (i = 0, ilen = points.length; i < ilen; ++i) {\n                me.updateElement(points[i], i, reset);\n            }\n\n            if (showLine && line._model.tension !== 0) {\n                me.updateBezierControlPoints();\n            }\n\n            // Now pivot the point for animation\n            for (i = 0, ilen = points.length; i < ilen; ++i) {\n                points[i].pivot();\n            }\n        },\n\n        updateElement: function(point, index, reset) {\n            var me = this;\n            var meta = me.getMeta();\n            var custom = point.custom || {};\n            var dataset = me.getDataset();\n            var datasetIndex = me.index;\n            var value = dataset.data[index];\n            var yScale = me.getScaleForId(meta.yAxisID);\n            var xScale = me.getScaleForId(meta.xAxisID);\n            var lineModel = meta.dataset._model;\n            var x, y;\n\n            var options = me._resolvePointOptions(point, index);\n\n            x = xScale.getPixelForValue(typeof value === 'object' ? value : NaN, index, datasetIndex);\n            y = reset ? yScale.getBasePixel() : me.calculatePointY(value, index, datasetIndex);\n\n            // Utility\n            point._xScale = xScale;\n            point._yScale = yScale;\n            point._options = options;\n            point._datasetIndex = datasetIndex;\n            point._index = index;\n\n            // Desired view properties\n            point._model = {\n                x: x,\n                y: y,\n                skip: custom.skip || isNaN(x) || isNaN(y),\n                // Appearance\n                radius: options.radius,\n                pointStyle: options.pointStyle,\n                rotation: options.rotation,\n                backgroundColor: options.backgroundColor,\n                borderColor: options.borderColor,\n                borderWidth: options.borderWidth,\n                tension: valueOrDefault$5(custom.tension, lineModel ? lineModel.tension : 0),\n                steppedLine: lineModel ? lineModel.steppedLine : false,\n                // Tooltip\n                hitRadius: options.hitRadius\n            };\n        },\n\n        /**\n         * @private\n         */\n        _resolvePointOptions: function(element, index) {\n            var me = this;\n            var chart = me.chart;\n            var dataset = chart.data.datasets[me.index];\n            var custom = element.custom || {};\n            var options = chart.options.elements.point;\n            var values = {};\n            var i, ilen, key;\n\n            // Scriptable options\n            var context = {\n                chart: chart,\n                dataIndex: index,\n                dataset: dataset,\n                datasetIndex: me.index\n            };\n\n            var ELEMENT_OPTIONS = {\n                backgroundColor: 'pointBackgroundColor',\n                borderColor: 'pointBorderColor',\n                borderWidth: 'pointBorderWidth',\n                hitRadius: 'pointHitRadius',\n                hoverBackgroundColor: 'pointHoverBackgroundColor',\n                hoverBorderColor: 'pointHoverBorderColor',\n                hoverBorderWidth: 'pointHoverBorderWidth',\n                hoverRadius: 'pointHoverRadius',\n                pointStyle: 'pointStyle',\n                radius: 'pointRadius',\n                rotation: 'pointRotation'\n            };\n            var keys = Object.keys(ELEMENT_OPTIONS);\n\n            for (i = 0, ilen = keys.length; i < ilen; ++i) {\n                key = keys[i];\n                values[key] = resolve$4([\n                    custom[key],\n                    dataset[ELEMENT_OPTIONS[key]],\n                    dataset[key],\n                    options[key]\n                ], context, index);\n            }\n\n            return values;\n        },\n\n        /**\n         * @private\n         */\n        _resolveLineOptions: function(element) {\n            var me = this;\n            var chart = me.chart;\n            var dataset = chart.data.datasets[me.index];\n            var custom = element.custom || {};\n            var options = chart.options;\n            var elementOptions = options.elements.line;\n            var values = {};\n            var i, ilen, key;\n\n            var keys = [\n                'backgroundColor',\n                'borderWidth',\n                'borderColor',\n                'borderCapStyle',\n                'borderDash',\n                'borderDashOffset',\n                'borderJoinStyle',\n                'fill',\n                'cubicInterpolationMode'\n            ];\n\n            for (i = 0, ilen = keys.length; i < ilen; ++i) {\n                key = keys[i];\n                values[key] = resolve$4([\n                    custom[key],\n                    dataset[key],\n                    elementOptions[key]\n                ]);\n            }\n\n            // The default behavior of lines is to break at null values, according\n            // to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158\n            // This option gives lines the ability to span gaps\n            values.spanGaps = valueOrDefault$5(dataset.spanGaps, options.spanGaps);\n            values.tension = valueOrDefault$5(dataset.lineTension, elementOptions.tension);\n            values.steppedLine = resolve$4([custom.steppedLine, dataset.steppedLine, elementOptions.stepped]);\n\n            return values;\n        },\n\n        calculatePointY: function(value, index, datasetIndex) {\n            var me = this;\n            var chart = me.chart;\n            var meta = me.getMeta();\n            var yScale = me.getScaleForId(meta.yAxisID);\n            var sumPos = 0;\n            var sumNeg = 0;\n            var i, ds, dsMeta;\n\n            if (yScale.options.stacked) {\n                for (i = 0; i < datasetIndex; i++) {\n                    ds = chart.data.datasets[i];\n                    dsMeta = chart.getDatasetMeta(i);\n                    if (dsMeta.type === 'line' && dsMeta.yAxisID === yScale.id && chart.isDatasetVisible(i)) {\n                        var stackedRightValue = Number(yScale.getRightValue(ds.data[index]));\n                        if (stackedRightValue < 0) {\n                            sumNeg += stackedRightValue || 0;\n                        } else {\n                            sumPos += stackedRightValue || 0;\n                        }\n                    }\n                }\n\n                var rightValue = Number(yScale.getRightValue(value));\n                if (rightValue < 0) {\n                    return yScale.getPixelForValue(sumNeg + rightValue);\n                }\n                return yScale.getPixelForValue(sumPos + rightValue);\n            }\n\n            return yScale.getPixelForValue(value);\n        },\n\n        updateBezierControlPoints: function() {\n            var me = this;\n            var chart = me.chart;\n            var meta = me.getMeta();\n            var lineModel = meta.dataset._model;\n            var area = chart.chartArea;\n            var points = meta.data || [];\n            var i, ilen, model, controlPoints;\n\n            // Only consider points that are drawn in case the spanGaps option is used\n            if (lineModel.spanGaps) {\n                points = points.filter(function(pt) {\n                    return !pt._model.skip;\n                });\n            }\n\n            function capControlPoint(pt, min, max) {\n                return Math.max(Math.min(pt, max), min);\n            }\n\n            if (lineModel.cubicInterpolationMode === 'monotone') {\n                helpers$1.splineCurveMonotone(points);\n            } else {\n                for (i = 0, ilen = points.length; i < ilen; ++i) {\n                    model = points[i]._model;\n                    controlPoints = helpers$1.splineCurve(\n                        helpers$1.previousItem(points, i)._model,\n                        model,\n                        helpers$1.nextItem(points, i)._model,\n                        lineModel.tension\n                    );\n                    model.controlPointPreviousX = controlPoints.previous.x;\n                    model.controlPointPreviousY = controlPoints.previous.y;\n                    model.controlPointNextX = controlPoints.next.x;\n                    model.controlPointNextY = controlPoints.next.y;\n                }\n            }\n\n            if (chart.options.elements.line.capBezierPoints) {\n                for (i = 0, ilen = points.length; i < ilen; ++i) {\n                    model = points[i]._model;\n                    if (isPointInArea(model, area)) {\n                        if (i > 0 && isPointInArea(points[i - 1]._model, area)) {\n                            model.controlPointPreviousX = capControlPoint(model.controlPointPreviousX, area.left, area.right);\n                            model.controlPointPreviousY = capControlPoint(model.controlPointPreviousY, area.top, area.bottom);\n                        }\n                        if (i < points.length - 1 && isPointInArea(points[i + 1]._model, area)) {\n                            model.controlPointNextX = capControlPoint(model.controlPointNextX, area.left, area.right);\n                            model.controlPointNextY = capControlPoint(model.controlPointNextY, area.top, area.bottom);\n                        }\n                    }\n                }\n            }\n        },\n\n        draw: function() {\n            var me = this;\n            var chart = me.chart;\n            var meta = me.getMeta();\n            var points = meta.data || [];\n            var area = chart.chartArea;\n            var ilen = points.length;\n            var halfBorderWidth;\n            var i = 0;\n\n            if (lineEnabled(me.getDataset(), chart.options)) {\n                halfBorderWidth = (meta.dataset._model.borderWidth || 0) / 2;\n\n                helpers$1.canvas.clipArea(chart.ctx, {\n                    left: area.left,\n                    right: area.right,\n                    top: area.top - halfBorderWidth,\n                    bottom: area.bottom + halfBorderWidth\n                });\n\n                meta.dataset.draw();\n\n                helpers$1.canvas.unclipArea(chart.ctx);\n            }\n\n            // Draw the points\n            for (; i < ilen; ++i) {\n                points[i].draw(area);\n            }\n        },\n\n        /**\n         * @protected\n         */\n        setHoverStyle: function(point) {\n            var model = point._model;\n            var options = point._options;\n            var getHoverColor = helpers$1.getHoverColor;\n\n            point.$previousStyle = {\n                backgroundColor: model.backgroundColor,\n                borderColor: model.borderColor,\n                borderWidth: model.borderWidth,\n                radius: model.radius\n            };\n\n            model.backgroundColor = valueOrDefault$5(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n            model.borderColor = valueOrDefault$5(options.hoverBorderColor, getHoverColor(options.borderColor));\n            model.borderWidth = valueOrDefault$5(options.hoverBorderWidth, options.borderWidth);\n            model.radius = valueOrDefault$5(options.hoverRadius, options.radius);\n        },\n    });\n\n    var resolve$5 = helpers$1.options.resolve;\n\n    core_defaults._set('polarArea', {\n        scale: {\n            type: 'radialLinear',\n            angleLines: {\n                display: false\n            },\n            gridLines: {\n                circular: true\n            },\n            pointLabels: {\n                display: false\n            },\n            ticks: {\n                beginAtZero: true\n            }\n        },\n\n        // Boolean - Whether to animate the rotation of the chart\n        animation: {\n            animateRotate: true,\n            animateScale: true\n        },\n\n        startAngle: -0.5 * Math.PI,\n        legendCallback: function(chart) {\n            var text = [];\n            text.push('<ul class=\"' + chart.id + '-legend\">');\n\n            var data = chart.data;\n            var datasets = data.datasets;\n            var labels = data.labels;\n\n            if (datasets.length) {\n                for (var i = 0; i < datasets[0].data.length; ++i) {\n                    text.push('<li><span style=\"background-color:' + datasets[0].backgroundColor[i] + '\"></span>');\n                    if (labels[i]) {\n                        text.push(labels[i]);\n                    }\n                    text.push('</li>');\n                }\n            }\n\n            text.push('</ul>');\n            return text.join('');\n        },\n        legend: {\n            labels: {\n                generateLabels: function(chart) {\n                    var data = chart.data;\n                    if (data.labels.length && data.datasets.length) {\n                        return data.labels.map(function(label, i) {\n                            var meta = chart.getDatasetMeta(0);\n                            var ds = data.datasets[0];\n                            var arc = meta.data[i];\n                            var custom = arc.custom || {};\n                            var arcOpts = chart.options.elements.arc;\n                            var fill = resolve$5([custom.backgroundColor, ds.backgroundColor, arcOpts.backgroundColor], undefined, i);\n                            var stroke = resolve$5([custom.borderColor, ds.borderColor, arcOpts.borderColor], undefined, i);\n                            var bw = resolve$5([custom.borderWidth, ds.borderWidth, arcOpts.borderWidth], undefined, i);\n\n                            return {\n                                text: label,\n                                fillStyle: fill,\n                                strokeStyle: stroke,\n                                lineWidth: bw,\n                                hidden: isNaN(ds.data[i]) || meta.data[i].hidden,\n\n                                // Extra data used for toggling the correct item\n                                index: i\n                            };\n                        });\n                    }\n                    return [];\n                }\n            },\n\n            onClick: function(e, legendItem) {\n                var index = legendItem.index;\n                var chart = this.chart;\n                var i, ilen, meta;\n\n                for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n                    meta = chart.getDatasetMeta(i);\n                    meta.data[index].hidden = !meta.data[index].hidden;\n                }\n\n                chart.update();\n            }\n        },\n\n        // Need to override these to give a nice default\n        tooltips: {\n            callbacks: {\n                title: function() {\n                    return '';\n                },\n                label: function(item, data) {\n                    return data.labels[item.index] + ': ' + item.yLabel;\n                }\n            }\n        }\n    });\n\n    var controller_polarArea = core_datasetController.extend({\n\n        dataElementType: elements.Arc,\n\n        linkScales: helpers$1.noop,\n\n        update: function(reset) {\n            var me = this;\n            var dataset = me.getDataset();\n            var meta = me.getMeta();\n            var start = me.chart.options.startAngle || 0;\n            var starts = me._starts = [];\n            var angles = me._angles = [];\n            var arcs = meta.data;\n            var i, ilen, angle;\n\n            me._updateRadius();\n\n            meta.count = me.countVisibleElements();\n\n            for (i = 0, ilen = dataset.data.length; i < ilen; i++) {\n                starts[i] = start;\n                angle = me._computeAngle(i);\n                angles[i] = angle;\n                start += angle;\n            }\n\n            for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n                arcs[i]._options = me._resolveElementOptions(arcs[i], i);\n                me.updateElement(arcs[i], i, reset);\n            }\n        },\n\n        /**\n         * @private\n         */\n        _updateRadius: function() {\n            var me = this;\n            var chart = me.chart;\n            var chartArea = chart.chartArea;\n            var opts = chart.options;\n            var minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n\n            chart.outerRadius = Math.max(minSize / 2, 0);\n            chart.innerRadius = Math.max(opts.cutoutPercentage ? (chart.outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n            chart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();\n\n            me.outerRadius = chart.outerRadius - (chart.radiusLength * me.index);\n            me.innerRadius = me.outerRadius - chart.radiusLength;\n        },\n\n        updateElement: function(arc, index, reset) {\n            var me = this;\n            var chart = me.chart;\n            var dataset = me.getDataset();\n            var opts = chart.options;\n            var animationOpts = opts.animation;\n            var scale = chart.scale;\n            var labels = chart.data.labels;\n\n            var centerX = scale.xCenter;\n            var centerY = scale.yCenter;\n\n            // var negHalfPI = -0.5 * Math.PI;\n            var datasetStartAngle = opts.startAngle;\n            var distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\n            var startAngle = me._starts[index];\n            var endAngle = startAngle + (arc.hidden ? 0 : me._angles[index]);\n\n            var resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);\n            var options = arc._options || {};\n\n            helpers$1.extend(arc, {\n                // Utility\n                _datasetIndex: me.index,\n                _index: index,\n                _scale: scale,\n\n                // Desired view properties\n                _model: {\n                    backgroundColor: options.backgroundColor,\n                    borderColor: options.borderColor,\n                    borderWidth: options.borderWidth,\n                    borderAlign: options.borderAlign,\n                    x: centerX,\n                    y: centerY,\n                    innerRadius: 0,\n                    outerRadius: reset ? resetRadius : distance,\n                    startAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle,\n                    endAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle,\n                    label: helpers$1.valueAtIndexOrDefault(labels, index, labels[index])\n                }\n            });\n\n            arc.pivot();\n        },\n\n        countVisibleElements: function() {\n            var dataset = this.getDataset();\n            var meta = this.getMeta();\n            var count = 0;\n\n            helpers$1.each(meta.data, function(element, index) {\n                if (!isNaN(dataset.data[index]) && !element.hidden) {\n                    count++;\n                }\n            });\n\n            return count;\n        },\n\n        /**\n         * @protected\n         */\n        setHoverStyle: function(arc) {\n            var model = arc._model;\n            var options = arc._options;\n            var getHoverColor = helpers$1.getHoverColor;\n            var valueOrDefault = helpers$1.valueOrDefault;\n\n            arc.$previousStyle = {\n                backgroundColor: model.backgroundColor,\n                borderColor: model.borderColor,\n                borderWidth: model.borderWidth,\n            };\n\n            model.backgroundColor = valueOrDefault(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n            model.borderColor = valueOrDefault(options.hoverBorderColor, getHoverColor(options.borderColor));\n            model.borderWidth = valueOrDefault(options.hoverBorderWidth, options.borderWidth);\n        },\n\n        /**\n         * @private\n         */\n        _resolveElementOptions: function(arc, index) {\n            var me = this;\n            var chart = me.chart;\n            var dataset = me.getDataset();\n            var custom = arc.custom || {};\n            var options = chart.options.elements.arc;\n            var values = {};\n            var i, ilen, key;\n\n            // Scriptable options\n            var context = {\n                chart: chart,\n                dataIndex: index,\n                dataset: dataset,\n                datasetIndex: me.index\n            };\n\n            var keys = [\n                'backgroundColor',\n                'borderColor',\n                'borderWidth',\n                'borderAlign',\n                'hoverBackgroundColor',\n                'hoverBorderColor',\n                'hoverBorderWidth',\n            ];\n\n            for (i = 0, ilen = keys.length; i < ilen; ++i) {\n                key = keys[i];\n                values[key] = resolve$5([\n                    custom[key],\n                    dataset[key],\n                    options[key]\n                ], context, index);\n            }\n\n            return values;\n        },\n\n        /**\n         * @private\n         */\n        _computeAngle: function(index) {\n            var me = this;\n            var count = this.getMeta().count;\n            var dataset = me.getDataset();\n            var meta = me.getMeta();\n\n            if (isNaN(dataset.data[index]) || meta.data[index].hidden) {\n                return 0;\n            }\n\n            // Scriptable options\n            var context = {\n                chart: me.chart,\n                dataIndex: index,\n                dataset: dataset,\n                datasetIndex: me.index\n            };\n\n            return resolve$5([\n                me.chart.options.elements.arc.angle,\n                (2 * Math.PI) / count\n            ], context, index);\n        }\n    });\n\n    core_defaults._set('pie', helpers$1.clone(core_defaults.doughnut));\n    core_defaults._set('pie', {\n        cutoutPercentage: 0\n    });\n\n    // Pie charts are Doughnut chart with different defaults\n    var controller_pie = controller_doughnut;\n\n    var valueOrDefault$6 = helpers$1.valueOrDefault;\n    var resolve$6 = helpers$1.options.resolve;\n\n    core_defaults._set('radar', {\n        scale: {\n            type: 'radialLinear'\n        },\n        elements: {\n            line: {\n                tension: 0 // no bezier in radar\n            }\n        }\n    });\n\n    var controller_radar = core_datasetController.extend({\n\n        datasetElementType: elements.Line,\n\n        dataElementType: elements.Point,\n\n        linkScales: helpers$1.noop,\n\n        update: function(reset) {\n            var me = this;\n            var meta = me.getMeta();\n            var line = meta.dataset;\n            var points = meta.data || [];\n            var scale = me.chart.scale;\n            var dataset = me.getDataset();\n            var i, ilen;\n\n            // Compatibility: If the properties are defined with only the old name, use those values\n            if ((dataset.tension !== undefined) && (dataset.lineTension === undefined)) {\n                dataset.lineTension = dataset.tension;\n            }\n\n            // Utility\n            line._scale = scale;\n            line._datasetIndex = me.index;\n            // Data\n            line._children = points;\n            line._loop = true;\n            // Model\n            line._model = me._resolveLineOptions(line);\n\n            line.pivot();\n\n            // Update Points\n            for (i = 0, ilen = points.length; i < ilen; ++i) {\n                me.updateElement(points[i], i, reset);\n            }\n\n            // Update bezier control points\n            me.updateBezierControlPoints();\n\n            // Now pivot the point for animation\n            for (i = 0, ilen = points.length; i < ilen; ++i) {\n                points[i].pivot();\n            }\n        },\n\n        updateElement: function(point, index, reset) {\n            var me = this;\n            var custom = point.custom || {};\n            var dataset = me.getDataset();\n            var scale = me.chart.scale;\n            var pointPosition = scale.getPointPositionForValue(index, dataset.data[index]);\n            var options = me._resolvePointOptions(point, index);\n            var lineModel = me.getMeta().dataset._model;\n            var x = reset ? scale.xCenter : pointPosition.x;\n            var y = reset ? scale.yCenter : pointPosition.y;\n\n            // Utility\n            point._scale = scale;\n            point._options = options;\n            point._datasetIndex = me.index;\n            point._index = index;\n\n            // Desired view properties\n            point._model = {\n                x: x, // value not used in dataset scale, but we want a consistent API between scales\n                y: y,\n                skip: custom.skip || isNaN(x) || isNaN(y),\n                // Appearance\n                radius: options.radius,\n                pointStyle: options.pointStyle,\n                rotation: options.rotation,\n                backgroundColor: options.backgroundColor,\n                borderColor: options.borderColor,\n                borderWidth: options.borderWidth,\n                tension: valueOrDefault$6(custom.tension, lineModel ? lineModel.tension : 0),\n\n                // Tooltip\n                hitRadius: options.hitRadius\n            };\n        },\n\n        /**\n         * @private\n         */\n        _resolvePointOptions: function(element, index) {\n            var me = this;\n            var chart = me.chart;\n            var dataset = chart.data.datasets[me.index];\n            var custom = element.custom || {};\n            var options = chart.options.elements.point;\n            var values = {};\n            var i, ilen, key;\n\n            // Scriptable options\n            var context = {\n                chart: chart,\n                dataIndex: index,\n                dataset: dataset,\n                datasetIndex: me.index\n            };\n\n            var ELEMENT_OPTIONS = {\n                backgroundColor: 'pointBackgroundColor',\n                borderColor: 'pointBorderColor',\n                borderWidth: 'pointBorderWidth',\n                hitRadius: 'pointHitRadius',\n                hoverBackgroundColor: 'pointHoverBackgroundColor',\n                hoverBorderColor: 'pointHoverBorderColor',\n                hoverBorderWidth: 'pointHoverBorderWidth',\n                hoverRadius: 'pointHoverRadius',\n                pointStyle: 'pointStyle',\n                radius: 'pointRadius',\n                rotation: 'pointRotation'\n            };\n            var keys = Object.keys(ELEMENT_OPTIONS);\n\n            for (i = 0, ilen = keys.length; i < ilen; ++i) {\n                key = keys[i];\n                values[key] = resolve$6([\n                    custom[key],\n                    dataset[ELEMENT_OPTIONS[key]],\n                    dataset[key],\n                    options[key]\n                ], context, index);\n            }\n\n            return values;\n        },\n\n        /**\n         * @private\n         */\n        _resolveLineOptions: function(element) {\n            var me = this;\n            var chart = me.chart;\n            var dataset = chart.data.datasets[me.index];\n            var custom = element.custom || {};\n            var options = chart.options.elements.line;\n            var values = {};\n            var i, ilen, key;\n\n            var keys = [\n                'backgroundColor',\n                'borderWidth',\n                'borderColor',\n                'borderCapStyle',\n                'borderDash',\n                'borderDashOffset',\n                'borderJoinStyle',\n                'fill'\n            ];\n\n            for (i = 0, ilen = keys.length; i < ilen; ++i) {\n                key = keys[i];\n                values[key] = resolve$6([\n                    custom[key],\n                    dataset[key],\n                    options[key]\n                ]);\n            }\n\n            values.tension = valueOrDefault$6(dataset.lineTension, options.tension);\n\n            return values;\n        },\n\n        updateBezierControlPoints: function() {\n            var me = this;\n            var meta = me.getMeta();\n            var area = me.chart.chartArea;\n            var points = meta.data || [];\n            var i, ilen, model, controlPoints;\n\n            function capControlPoint(pt, min, max) {\n                return Math.max(Math.min(pt, max), min);\n            }\n\n            for (i = 0, ilen = points.length; i < ilen; ++i) {\n                model = points[i]._model;\n                controlPoints = helpers$1.splineCurve(\n                    helpers$1.previousItem(points, i, true)._model,\n                    model,\n                    helpers$1.nextItem(points, i, true)._model,\n                    model.tension\n                );\n\n                // Prevent the bezier going outside of the bounds of the graph\n                model.controlPointPreviousX = capControlPoint(controlPoints.previous.x, area.left, area.right);\n                model.controlPointPreviousY = capControlPoint(controlPoints.previous.y, area.top, area.bottom);\n                model.controlPointNextX = capControlPoint(controlPoints.next.x, area.left, area.right);\n                model.controlPointNextY = capControlPoint(controlPoints.next.y, area.top, area.bottom);\n            }\n        },\n\n        setHoverStyle: function(point) {\n            var model = point._model;\n            var options = point._options;\n            var getHoverColor = helpers$1.getHoverColor;\n\n            point.$previousStyle = {\n                backgroundColor: model.backgroundColor,\n                borderColor: model.borderColor,\n                borderWidth: model.borderWidth,\n                radius: model.radius\n            };\n\n            model.backgroundColor = valueOrDefault$6(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));\n            model.borderColor = valueOrDefault$6(options.hoverBorderColor, getHoverColor(options.borderColor));\n            model.borderWidth = valueOrDefault$6(options.hoverBorderWidth, options.borderWidth);\n            model.radius = valueOrDefault$6(options.hoverRadius, options.radius);\n        }\n    });\n\n    core_defaults._set('scatter', {\n        hover: {\n            mode: 'single'\n        },\n\n        scales: {\n            xAxes: [{\n                id: 'x-axis-1',    // need an ID so datasets can reference the scale\n                type: 'linear',    // scatter should not use a category axis\n                position: 'bottom'\n            }],\n            yAxes: [{\n                id: 'y-axis-1',\n                type: 'linear',\n                position: 'left'\n            }]\n        },\n\n        showLines: false,\n\n        tooltips: {\n            callbacks: {\n                title: function() {\n                    return '';     // doesn't make sense for scatter since data are formatted as a point\n                },\n                label: function(item) {\n                    return '(' + item.xLabel + ', ' + item.yLabel + ')';\n                }\n            }\n        }\n    });\n\n    // Scatter charts use line controllers\n    var controller_scatter = controller_line;\n\n    // NOTE export a map in which the key represents the controller type, not\n    // the class, and so must be CamelCase in order to be correctly retrieved\n    // by the controller in core.controller.js (`controllers[meta.type]`).\n\n    var controllers = {\n        bar: controller_bar,\n        bubble: controller_bubble,\n        doughnut: controller_doughnut,\n        horizontalBar: controller_horizontalBar,\n        line: controller_line,\n        polarArea: controller_polarArea,\n        pie: controller_pie,\n        radar: controller_radar,\n        scatter: controller_scatter\n    };\n\n    /**\n     * Helper function to get relative position for an event\n     * @param {Event|IEvent} event - The event to get the position for\n     * @param {Chart} chart - The chart\n     * @returns {object} the event position\n     */\n    function getRelativePosition(e, chart) {\n        if (e.native) {\n            return {\n                x: e.x,\n                y: e.y\n            };\n        }\n\n        return helpers$1.getRelativePosition(e, chart);\n    }\n\n    /**\n     * Helper function to traverse all of the visible elements in the chart\n     * @param {Chart} chart - the chart\n     * @param {function} handler - the callback to execute for each visible item\n     */\n    function parseVisibleItems(chart, handler) {\n        var datasets = chart.data.datasets;\n        var meta, i, j, ilen, jlen;\n\n        for (i = 0, ilen = datasets.length; i < ilen; ++i) {\n            if (!chart.isDatasetVisible(i)) {\n                continue;\n            }\n\n            meta = chart.getDatasetMeta(i);\n            for (j = 0, jlen = meta.data.length; j < jlen; ++j) {\n                var element = meta.data[j];\n                if (!element._view.skip) {\n                    handler(element);\n                }\n            }\n        }\n    }\n\n    /**\n     * Helper function to get the items that intersect the event position\n     * @param {ChartElement[]} items - elements to filter\n     * @param {object} position - the point to be nearest to\n     * @return {ChartElement[]} the nearest items\n     */\n    function getIntersectItems(chart, position) {\n        var elements = [];\n\n        parseVisibleItems(chart, function(element) {\n            if (element.inRange(position.x, position.y)) {\n                elements.push(element);\n            }\n        });\n\n        return elements;\n    }\n\n    /**\n     * Helper function to get the items nearest to the event position considering all visible items in teh chart\n     * @param {Chart} chart - the chart to look at elements from\n     * @param {object} position - the point to be nearest to\n     * @param {boolean} intersect - if true, only consider items that intersect the position\n     * @param {function} distanceMetric - function to provide the distance between points\n     * @return {ChartElement[]} the nearest items\n     */\n    function getNearestItems(chart, position, intersect, distanceMetric) {\n        var minDistance = Number.POSITIVE_INFINITY;\n        var nearestItems = [];\n\n        parseVisibleItems(chart, function(element) {\n            if (intersect && !element.inRange(position.x, position.y)) {\n                return;\n            }\n\n            var center = element.getCenterPoint();\n            var distance = distanceMetric(position, center);\n            if (distance < minDistance) {\n                nearestItems = [element];\n                minDistance = distance;\n            } else if (distance === minDistance) {\n                // Can have multiple items at the same distance in which case we sort by size\n                nearestItems.push(element);\n            }\n        });\n\n        return nearestItems;\n    }\n\n    /**\n     * Get a distance metric function for two points based on the\n     * axis mode setting\n     * @param {string} axis - the axis mode. x|y|xy\n     */\n    function getDistanceMetricForAxis(axis) {\n        var useX = axis.indexOf('x') !== -1;\n        var useY = axis.indexOf('y') !== -1;\n\n        return function(pt1, pt2) {\n            var deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n            var deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n            return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n        };\n    }\n\n    function indexMode(chart, e, options) {\n        var position = getRelativePosition(e, chart);\n        // Default axis for index mode is 'x' to match old behaviour\n        options.axis = options.axis || 'x';\n        var distanceMetric = getDistanceMetricForAxis(options.axis);\n        var items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\n        var elements = [];\n\n        if (!items.length) {\n            return [];\n        }\n\n        chart.data.datasets.forEach(function(dataset, datasetIndex) {\n            if (chart.isDatasetVisible(datasetIndex)) {\n                var meta = chart.getDatasetMeta(datasetIndex);\n                var element = meta.data[items[0]._index];\n\n                // don't count items that are skipped (null data)\n                if (element && !element._view.skip) {\n                    elements.push(element);\n                }\n            }\n        });\n\n        return elements;\n    }\n\n    /**\n     * @interface IInteractionOptions\n     */\n    /**\n     * If true, only consider items that intersect the point\n     * @name IInterfaceOptions#boolean\n     * @type Boolean\n     */\n\n    /**\n     * Contains interaction related functions\n     * @namespace Chart.Interaction\n     */\n    var core_interaction = {\n        // Helper function for different modes\n        modes: {\n            single: function(chart, e) {\n                var position = getRelativePosition(e, chart);\n                var elements = [];\n\n                parseVisibleItems(chart, function(element) {\n                    if (element.inRange(position.x, position.y)) {\n                        elements.push(element);\n                        return elements;\n                    }\n                });\n\n                return elements.slice(0, 1);\n            },\n\n            /**\n             * @function Chart.Interaction.modes.label\n             * @deprecated since version 2.4.0\n             * @todo remove at version 3\n             * @private\n             */\n            label: indexMode,\n\n            /**\n             * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something\n             * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item\n             * @function Chart.Interaction.modes.index\n             * @since v2.4.0\n             * @param {Chart} chart - the chart we are returning items from\n             * @param {Event} e - the event we are find things at\n             * @param {IInteractionOptions} options - options to use during interaction\n             * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n             */\n            index: indexMode,\n\n            /**\n             * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something\n             * If the options.intersect is false, we find the nearest item and return the items in that dataset\n             * @function Chart.Interaction.modes.dataset\n             * @param {Chart} chart - the chart we are returning items from\n             * @param {Event} e - the event we are find things at\n             * @param {IInteractionOptions} options - options to use during interaction\n             * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n             */\n            dataset: function(chart, e, options) {\n                var position = getRelativePosition(e, chart);\n                options.axis = options.axis || 'xy';\n                var distanceMetric = getDistanceMetricForAxis(options.axis);\n                var items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);\n\n                if (items.length > 0) {\n                    items = chart.getDatasetMeta(items[0]._datasetIndex).data;\n                }\n\n                return items;\n            },\n\n            /**\n             * @function Chart.Interaction.modes.x-axis\n             * @deprecated since version 2.4.0. Use index mode and intersect == true\n             * @todo remove at version 3\n             * @private\n             */\n            'x-axis': function(chart, e) {\n                return indexMode(chart, e, {intersect: false});\n            },\n\n            /**\n             * Point mode returns all elements that hit test based on the event position\n             * of the event\n             * @function Chart.Interaction.modes.intersect\n             * @param {Chart} chart - the chart we are returning items from\n             * @param {Event} e - the event we are find things at\n             * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n             */\n            point: function(chart, e) {\n                var position = getRelativePosition(e, chart);\n                return getIntersectItems(chart, position);\n            },\n\n            /**\n             * nearest mode returns the element closest to the point\n             * @function Chart.Interaction.modes.intersect\n             * @param {Chart} chart - the chart we are returning items from\n             * @param {Event} e - the event we are find things at\n             * @param {IInteractionOptions} options - options to use\n             * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n             */\n            nearest: function(chart, e, options) {\n                var position = getRelativePosition(e, chart);\n                options.axis = options.axis || 'xy';\n                var distanceMetric = getDistanceMetricForAxis(options.axis);\n                return getNearestItems(chart, position, options.intersect, distanceMetric);\n            },\n\n            /**\n             * x mode returns the elements that hit-test at the current x coordinate\n             * @function Chart.Interaction.modes.x\n             * @param {Chart} chart - the chart we are returning items from\n             * @param {Event} e - the event we are find things at\n             * @param {IInteractionOptions} options - options to use\n             * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n             */\n            x: function(chart, e, options) {\n                var position = getRelativePosition(e, chart);\n                var items = [];\n                var intersectsItem = false;\n\n                parseVisibleItems(chart, function(element) {\n                    if (element.inXRange(position.x)) {\n                        items.push(element);\n                    }\n\n                    if (element.inRange(position.x, position.y)) {\n                        intersectsItem = true;\n                    }\n                });\n\n                // If we want to trigger on an intersect and we don't have any items\n                // that intersect the position, return nothing\n                if (options.intersect && !intersectsItem) {\n                    items = [];\n                }\n                return items;\n            },\n\n            /**\n             * y mode returns the elements that hit-test at the current y coordinate\n             * @function Chart.Interaction.modes.y\n             * @param {Chart} chart - the chart we are returning items from\n             * @param {Event} e - the event we are find things at\n             * @param {IInteractionOptions} options - options to use\n             * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned\n             */\n            y: function(chart, e, options) {\n                var position = getRelativePosition(e, chart);\n                var items = [];\n                var intersectsItem = false;\n\n                parseVisibleItems(chart, function(element) {\n                    if (element.inYRange(position.y)) {\n                        items.push(element);\n                    }\n\n                    if (element.inRange(position.x, position.y)) {\n                        intersectsItem = true;\n                    }\n                });\n\n                // If we want to trigger on an intersect and we don't have any items\n                // that intersect the position, return nothing\n                if (options.intersect && !intersectsItem) {\n                    items = [];\n                }\n                return items;\n            }\n        }\n    };\n\n    function filterByPosition(array, position) {\n        return helpers$1.where(array, function(v) {\n            return v.position === position;\n        });\n    }\n\n    function sortByWeight(array, reverse) {\n        array.forEach(function(v, i) {\n            v._tmpIndex_ = i;\n            return v;\n        });\n        array.sort(function(a, b) {\n            var v0 = reverse ? b : a;\n            var v1 = reverse ? a : b;\n            return v0.weight === v1.weight ?\n                v0._tmpIndex_ - v1._tmpIndex_ :\n                v0.weight - v1.weight;\n        });\n        array.forEach(function(v) {\n            delete v._tmpIndex_;\n        });\n    }\n\n    function findMaxPadding(boxes) {\n        var top = 0;\n        var left = 0;\n        var bottom = 0;\n        var right = 0;\n        helpers$1.each(boxes, function(box) {\n            if (box.getPadding) {\n                var boxPadding = box.getPadding();\n                top = Math.max(top, boxPadding.top);\n                left = Math.max(left, boxPadding.left);\n                bottom = Math.max(bottom, boxPadding.bottom);\n                right = Math.max(right, boxPadding.right);\n            }\n        });\n        return {\n            top: top,\n            left: left,\n            bottom: bottom,\n            right: right\n        };\n    }\n\n    function addSizeByPosition(boxes, size) {\n        helpers$1.each(boxes, function(box) {\n            size[box.position] += box.isHorizontal() ? box.height : box.width;\n        });\n    }\n\n    core_defaults._set('global', {\n        layout: {\n            padding: {\n                top: 0,\n                right: 0,\n                bottom: 0,\n                left: 0\n            }\n        }\n    });\n\n    /**\n     * @interface ILayoutItem\n     * @prop {string} position - The position of the item in the chart layout. Possible values are\n     * 'left', 'top', 'right', 'bottom', and 'chartArea'\n     * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area\n     * @prop {boolean} fullWidth - if true, and the item is horizontal, then push vertical boxes down\n     * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)\n     * @prop {function} update - Takes two parameters: width and height. Returns size of item\n     * @prop {function} getPadding -  Returns an object with padding on the edges\n     * @prop {number} width - Width of item. Must be valid after update()\n     * @prop {number} height - Height of item. Must be valid after update()\n     * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update\n     * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update\n     * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update\n     * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update\n     */\n\n    // The layout service is very self explanatory.  It's responsible for the layout within a chart.\n    // Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need\n    // It is this service's responsibility of carrying out that layout.\n    var core_layouts = {\n        defaults: {},\n\n        /**\n         * Register a box to a chart.\n         * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.\n         * @param {Chart} chart - the chart to use\n         * @param {ILayoutItem} item - the item to add to be layed out\n         */\n        addBox: function(chart, item) {\n            if (!chart.boxes) {\n                chart.boxes = [];\n            }\n\n            // initialize item with default values\n            item.fullWidth = item.fullWidth || false;\n            item.position = item.position || 'top';\n            item.weight = item.weight || 0;\n\n            chart.boxes.push(item);\n        },\n\n        /**\n         * Remove a layoutItem from a chart\n         * @param {Chart} chart - the chart to remove the box from\n         * @param {ILayoutItem} layoutItem - the item to remove from the layout\n         */\n        removeBox: function(chart, layoutItem) {\n            var index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n            if (index !== -1) {\n                chart.boxes.splice(index, 1);\n            }\n        },\n\n        /**\n         * Sets (or updates) options on the given `item`.\n         * @param {Chart} chart - the chart in which the item lives (or will be added to)\n         * @param {ILayoutItem} item - the item to configure with the given options\n         * @param {object} options - the new item options.\n         */\n        configure: function(chart, item, options) {\n            var props = ['fullWidth', 'position', 'weight'];\n            var ilen = props.length;\n            var i = 0;\n            var prop;\n\n            for (; i < ilen; ++i) {\n                prop = props[i];\n                if (options.hasOwnProperty(prop)) {\n                    item[prop] = options[prop];\n                }\n            }\n        },\n\n        /**\n         * Fits boxes of the given chart into the given size by having each box measure itself\n         * then running a fitting algorithm\n         * @param {Chart} chart - the chart\n         * @param {number} width - the width to fit into\n         * @param {number} height - the height to fit into\n         */\n        update: function(chart, width, height) {\n            if (!chart) {\n                return;\n            }\n\n            var layoutOptions = chart.options.layout || {};\n            var padding = helpers$1.options.toPadding(layoutOptions.padding);\n            var leftPadding = padding.left;\n            var rightPadding = padding.right;\n            var topPadding = padding.top;\n            var bottomPadding = padding.bottom;\n\n            var leftBoxes = filterByPosition(chart.boxes, 'left');\n            var rightBoxes = filterByPosition(chart.boxes, 'right');\n            var topBoxes = filterByPosition(chart.boxes, 'top');\n            var bottomBoxes = filterByPosition(chart.boxes, 'bottom');\n            var chartAreaBoxes = filterByPosition(chart.boxes, 'chartArea');\n\n            // Sort boxes by weight. A higher weight is further away from the chart area\n            sortByWeight(leftBoxes, true);\n            sortByWeight(rightBoxes, false);\n            sortByWeight(topBoxes, true);\n            sortByWeight(bottomBoxes, false);\n\n            var verticalBoxes = leftBoxes.concat(rightBoxes);\n            var horizontalBoxes = topBoxes.concat(bottomBoxes);\n            var outerBoxes = verticalBoxes.concat(horizontalBoxes);\n\n            // Essentially we now have any number of boxes on each of the 4 sides.\n            // Our canvas looks like the following.\n            // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and\n            // B1 is the bottom axis\n            // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays\n            // These locations are single-box locations only, when trying to register a chartArea location that is already taken,\n            // an error will be thrown.\n            //\n            // |----------------------------------------------------|\n            // |                  T1 (Full Width)                   |\n            // |----------------------------------------------------|\n            // |    |    |                 T2                  |    |\n            // |    |----|-------------------------------------|----|\n            // |    |    | C1 |                           | C2 |    |\n            // |    |    |----|                           |----|    |\n            // |    |    |                                     |    |\n            // | L1 | L2 |           ChartArea (C0)            | R1 |\n            // |    |    |                                     |    |\n            // |    |    |----|                           |----|    |\n            // |    |    | C3 |                           | C4 |    |\n            // |    |----|-------------------------------------|----|\n            // |    |    |                 B1                  |    |\n            // |----------------------------------------------------|\n            // |                  B2 (Full Width)                   |\n            // |----------------------------------------------------|\n            //\n            // What we do to find the best sizing, we do the following\n            // 1. Determine the minimum size of the chart area.\n            // 2. Split the remaining width equally between each vertical axis\n            // 3. Split the remaining height equally between each horizontal axis\n            // 4. Give each layout the maximum size it can be. The layout will return it's minimum size\n            // 5. Adjust the sizes of each axis based on it's minimum reported size.\n            // 6. Refit each axis\n            // 7. Position each axis in the final location\n            // 8. Tell the chart the final location of the chart area\n            // 9. Tell any axes that overlay the chart area the positions of the chart area\n\n            // Step 1\n            var chartWidth = width - leftPadding - rightPadding;\n            var chartHeight = height - topPadding - bottomPadding;\n            var chartAreaWidth = chartWidth / 2; // min 50%\n\n            // Step 2\n            var verticalBoxWidth = (width - chartAreaWidth) / verticalBoxes.length;\n\n            // Step 3\n            // TODO re-limit horizontal axis height (this limit has affected only padding calculation since PR 1837)\n            // var horizontalBoxHeight = (height - chartAreaHeight) / horizontalBoxes.length;\n\n            // Step 4\n            var maxChartAreaWidth = chartWidth;\n            var maxChartAreaHeight = chartHeight;\n            var outerBoxSizes = {top: topPadding, left: leftPadding, bottom: bottomPadding, right: rightPadding};\n            var minBoxSizes = [];\n            var maxPadding;\n\n            function getMinimumBoxSize(box) {\n                var minSize;\n                var isHorizontal = box.isHorizontal();\n\n                if (isHorizontal) {\n                    minSize = box.update(box.fullWidth ? chartWidth : maxChartAreaWidth, chartHeight / 2);\n                    maxChartAreaHeight -= minSize.height;\n                } else {\n                    minSize = box.update(verticalBoxWidth, maxChartAreaHeight);\n                    maxChartAreaWidth -= minSize.width;\n                }\n\n                minBoxSizes.push({\n                    horizontal: isHorizontal,\n                    width: minSize.width,\n                    box: box,\n                });\n            }\n\n            helpers$1.each(outerBoxes, getMinimumBoxSize);\n\n            // If a horizontal box has padding, we move the left boxes over to avoid ugly charts (see issue #2478)\n            maxPadding = findMaxPadding(outerBoxes);\n\n            // At this point, maxChartAreaHeight and maxChartAreaWidth are the size the chart area could\n            // be if the axes are drawn at their minimum sizes.\n            // Steps 5 & 6\n\n            // Function to fit a box\n            function fitBox(box) {\n                var minBoxSize = helpers$1.findNextWhere(minBoxSizes, function(minBox) {\n                    return minBox.box === box;\n                });\n\n                if (minBoxSize) {\n                    if (minBoxSize.horizontal) {\n                        var scaleMargin = {\n                            left: Math.max(outerBoxSizes.left, maxPadding.left),\n                            right: Math.max(outerBoxSizes.right, maxPadding.right),\n                            top: 0,\n                            bottom: 0\n                        };\n\n                        // Don't use min size here because of label rotation. When the labels are rotated, their rotation highly depends\n                        // on the margin. Sometimes they need to increase in size slightly\n                        box.update(box.fullWidth ? chartWidth : maxChartAreaWidth, chartHeight / 2, scaleMargin);\n                    } else {\n                        box.update(minBoxSize.width, maxChartAreaHeight);\n                    }\n                }\n            }\n\n            // Update, and calculate the left and right margins for the horizontal boxes\n            helpers$1.each(verticalBoxes, fitBox);\n            addSizeByPosition(verticalBoxes, outerBoxSizes);\n\n            // Set the Left and Right margins for the horizontal boxes\n            helpers$1.each(horizontalBoxes, fitBox);\n            addSizeByPosition(horizontalBoxes, outerBoxSizes);\n\n            function finalFitVerticalBox(box) {\n                var minBoxSize = helpers$1.findNextWhere(minBoxSizes, function(minSize) {\n                    return minSize.box === box;\n                });\n\n                var scaleMargin = {\n                    left: 0,\n                    right: 0,\n                    top: outerBoxSizes.top,\n                    bottom: outerBoxSizes.bottom\n                };\n\n                if (minBoxSize) {\n                    box.update(minBoxSize.width, maxChartAreaHeight, scaleMargin);\n                }\n            }\n\n            // Let the left layout know the final margin\n            helpers$1.each(verticalBoxes, finalFitVerticalBox);\n\n            // Recalculate because the size of each layout might have changed slightly due to the margins (label rotation for instance)\n            outerBoxSizes = {top: topPadding, left: leftPadding, bottom: bottomPadding, right: rightPadding};\n            addSizeByPosition(outerBoxes, outerBoxSizes);\n\n            // We may be adding some padding to account for rotated x axis labels\n            var leftPaddingAddition = Math.max(maxPadding.left - outerBoxSizes.left, 0);\n            outerBoxSizes.left += leftPaddingAddition;\n            outerBoxSizes.right += Math.max(maxPadding.right - outerBoxSizes.right, 0);\n\n            var topPaddingAddition = Math.max(maxPadding.top - outerBoxSizes.top, 0);\n            outerBoxSizes.top += topPaddingAddition;\n            outerBoxSizes.bottom += Math.max(maxPadding.bottom - outerBoxSizes.bottom, 0);\n\n            // Figure out if our chart area changed. This would occur if the dataset layout label rotation\n            // changed due to the application of the margins in step 6. Since we can only get bigger, this is safe to do\n            // without calling `fit` again\n            var newMaxChartAreaHeight = height - outerBoxSizes.top - outerBoxSizes.bottom;\n            var newMaxChartAreaWidth = width - outerBoxSizes.left - outerBoxSizes.right;\n\n            if (newMaxChartAreaWidth !== maxChartAreaWidth || newMaxChartAreaHeight !== maxChartAreaHeight) {\n                helpers$1.each(verticalBoxes, function(box) {\n                    box.height = newMaxChartAreaHeight;\n                });\n\n                helpers$1.each(horizontalBoxes, function(box) {\n                    if (!box.fullWidth) {\n                        box.width = newMaxChartAreaWidth;\n                    }\n                });\n\n                maxChartAreaHeight = newMaxChartAreaHeight;\n                maxChartAreaWidth = newMaxChartAreaWidth;\n            }\n\n            // Step 7 - Position the boxes\n            var left = leftPadding + leftPaddingAddition;\n            var top = topPadding + topPaddingAddition;\n\n            function placeBox(box) {\n                if (box.isHorizontal()) {\n                    box.left = box.fullWidth ? leftPadding : outerBoxSizes.left;\n                    box.right = box.fullWidth ? width - rightPadding : outerBoxSizes.left + maxChartAreaWidth;\n                    box.top = top;\n                    box.bottom = top + box.height;\n\n                    // Move to next point\n                    top = box.bottom;\n\n                } else {\n\n                    box.left = left;\n                    box.right = left + box.width;\n                    box.top = outerBoxSizes.top;\n                    box.bottom = outerBoxSizes.top + maxChartAreaHeight;\n\n                    // Move to next point\n                    left = box.right;\n                }\n            }\n\n            helpers$1.each(leftBoxes.concat(topBoxes), placeBox);\n\n            // Account for chart width and height\n            left += maxChartAreaWidth;\n            top += maxChartAreaHeight;\n\n            helpers$1.each(rightBoxes, placeBox);\n            helpers$1.each(bottomBoxes, placeBox);\n\n            // Step 8\n            chart.chartArea = {\n                left: outerBoxSizes.left,\n                top: outerBoxSizes.top,\n                right: outerBoxSizes.left + maxChartAreaWidth,\n                bottom: outerBoxSizes.top + maxChartAreaHeight\n            };\n\n            // Step 9\n            helpers$1.each(chartAreaBoxes, function(box) {\n                box.left = chart.chartArea.left;\n                box.top = chart.chartArea.top;\n                box.right = chart.chartArea.right;\n                box.bottom = chart.chartArea.bottom;\n\n                box.update(maxChartAreaWidth, maxChartAreaHeight);\n            });\n        }\n    };\n\n    /**\n     * Platform fallback implementation (minimal).\n     * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939\n     */\n\n    var platform_basic = {\n        acquireContext: function(item) {\n            if (item && item.canvas) {\n                // Support for any object associated to a canvas (including a context2d)\n                item = item.canvas;\n            }\n\n            return item && item.getContext('2d') || null;\n        }\n    };\n\n    var platform_dom = \"/*\\n * DOM element rendering detection\\n * https://davidwalsh.name/detect-node-insertion\\n */\\n@keyframes chartjs-render-animation {\\n\\tfrom { opacity: 0.99; }\\n\\tto { opacity: 1; }\\n}\\n\\n.chartjs-render-monitor {\\n\\tanimation: chartjs-render-animation 0.001s;\\n}\\n\\n/*\\n * DOM element resizing detection\\n * https://github.com/marcj/css-element-queries\\n */\\n.chartjs-size-monitor,\\n.chartjs-size-monitor-expand,\\n.chartjs-size-monitor-shrink {\\n\\tposition: absolute;\\n\\tdirection: ltr;\\n\\tleft: 0;\\n\\ttop: 0;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\toverflow: hidden;\\n\\tpointer-events: none;\\n\\tvisibility: hidden;\\n\\tz-index: -1;\\n}\\n\\n.chartjs-size-monitor-expand > div {\\n\\tposition: absolute;\\n\\twidth: 1000000px;\\n\\theight: 1000000px;\\n\\tleft: 0;\\n\\ttop: 0;\\n}\\n\\n.chartjs-size-monitor-shrink > div {\\n\\tposition: absolute;\\n\\twidth: 200%;\\n\\theight: 200%;\\n\\tleft: 0;\\n\\ttop: 0;\\n}\\n\";\n\n    var platform_dom$1 = /*#__PURE__*/Object.freeze({\n    default: platform_dom\n    });\n\n    function getCjsExportFromNamespace (n) {\n        return n && n.default || n;\n    }\n\n    var stylesheet = getCjsExportFromNamespace(platform_dom$1);\n\n    var EXPANDO_KEY = '$chartjs';\n    var CSS_PREFIX = 'chartjs-';\n    var CSS_SIZE_MONITOR = CSS_PREFIX + 'size-monitor';\n    var CSS_RENDER_MONITOR = CSS_PREFIX + 'render-monitor';\n    var CSS_RENDER_ANIMATION = CSS_PREFIX + 'render-animation';\n    var ANIMATION_START_EVENTS = ['animationstart', 'webkitAnimationStart'];\n\n    /**\n     * DOM event types -> Chart.js event types.\n     * Note: only events with different types are mapped.\n     * @see https://developer.mozilla.org/en-US/docs/Web/Events\n     */\n    var EVENT_TYPES = {\n        touchstart: 'mousedown',\n        touchmove: 'mousemove',\n        touchend: 'mouseup',\n        pointerenter: 'mouseenter',\n        pointerdown: 'mousedown',\n        pointermove: 'mousemove',\n        pointerup: 'mouseup',\n        pointerleave: 'mouseout',\n        pointerout: 'mouseout'\n    };\n\n    /**\n     * The \"used\" size is the final value of a dimension property after all calculations have\n     * been performed. This method uses the computed style of `element` but returns undefined\n     * if the computed style is not expressed in pixels. That can happen in some cases where\n     * `element` has a size relative to its parent and this last one is not yet displayed,\n     * for example because of `display: none` on a parent node.\n     * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n     * @returns {number} Size in pixels or undefined if unknown.\n     */\n    function readUsedSize(element, property) {\n        var value = helpers$1.getStyle(element, property);\n        var matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n        return matches ? Number(matches[1]) : undefined;\n    }\n\n    /**\n     * Initializes the canvas style and render size without modifying the canvas display size,\n     * since responsiveness is handled by the controller.resize() method. The config is used\n     * to determine the aspect ratio to apply in case no explicit height has been specified.\n     */\n    function initCanvas(canvas, config) {\n        var style = canvas.style;\n\n        // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it\n        // returns null or '' if no explicit value has been set to the canvas attribute.\n        var renderHeight = canvas.getAttribute('height');\n        var renderWidth = canvas.getAttribute('width');\n\n        // Chart.js modifies some canvas values that we want to restore on destroy\n        canvas[EXPANDO_KEY] = {\n            initial: {\n                height: renderHeight,\n                width: renderWidth,\n                style: {\n                    display: style.display,\n                    height: style.height,\n                    width: style.width\n                }\n            }\n        };\n\n        // Force canvas to display as block to avoid extra space caused by inline\n        // elements, which would interfere with the responsive resize process.\n        // https://github.com/chartjs/Chart.js/issues/2538\n        style.display = style.display || 'block';\n\n        if (renderWidth === null || renderWidth === '') {\n            var displayWidth = readUsedSize(canvas, 'width');\n            if (displayWidth !== undefined) {\n                canvas.width = displayWidth;\n            }\n        }\n\n        if (renderHeight === null || renderHeight === '') {\n            if (canvas.style.height === '') {\n                // If no explicit render height and style height, let's apply the aspect ratio,\n                // which one can be specified by the user but also by charts as default option\n                // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.\n                canvas.height = canvas.width / (config.options.aspectRatio || 2);\n            } else {\n                var displayHeight = readUsedSize(canvas, 'height');\n                if (displayWidth !== undefined) {\n                    canvas.height = displayHeight;\n                }\n            }\n        }\n\n        return canvas;\n    }\n\n    /**\n     * Detects support for options object argument in addEventListener.\n     * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n     * @private\n     */\n    var supportsEventListenerOptions = (function() {\n        var supports = false;\n        try {\n            var options = Object.defineProperty({}, 'passive', {\n                // eslint-disable-next-line getter-return\n                get: function() {\n                    supports = true;\n                }\n            });\n            window.addEventListener('e', null, options);\n        } catch (e) {\n            // continue regardless of error\n        }\n        return supports;\n    }());\n\n    // Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.\n    // https://github.com/chartjs/Chart.js/issues/4287\n    var eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\n\n    function addListener(node, type, listener) {\n        node.addEventListener(type, listener, eventListenerOptions);\n    }\n\n    function removeListener(node, type, listener) {\n        node.removeEventListener(type, listener, eventListenerOptions);\n    }\n\n    function createEvent(type, chart, x, y, nativeEvent) {\n        return {\n            type: type,\n            chart: chart,\n            native: nativeEvent || null,\n            x: x !== undefined ? x : null,\n            y: y !== undefined ? y : null,\n        };\n    }\n\n    function fromNativeEvent(event, chart) {\n        var type = EVENT_TYPES[event.type] || event.type;\n        var pos = helpers$1.getRelativePosition(event, chart);\n        return createEvent(type, chart, pos.x, pos.y, event);\n    }\n\n    function throttled(fn, thisArg) {\n        var ticking = false;\n        var args = [];\n\n        return function() {\n            args = Array.prototype.slice.call(arguments);\n            thisArg = thisArg || this;\n\n            if (!ticking) {\n                ticking = true;\n                helpers$1.requestAnimFrame.call(window, function() {\n                    ticking = false;\n                    fn.apply(thisArg, args);\n                });\n            }\n        };\n    }\n\n    function createDiv(cls) {\n        var el = document.createElement('div');\n        el.className = cls || '';\n        return el;\n    }\n\n    // Implementation based on https://github.com/marcj/css-element-queries\n    function createResizer(handler) {\n        var maxSize = 1000000;\n\n        // NOTE(SB) Don't use innerHTML because it could be considered unsafe.\n        // https://github.com/chartjs/Chart.js/issues/5902\n        var resizer = createDiv(CSS_SIZE_MONITOR);\n        var expand = createDiv(CSS_SIZE_MONITOR + '-expand');\n        var shrink = createDiv(CSS_SIZE_MONITOR + '-shrink');\n\n        expand.appendChild(createDiv());\n        shrink.appendChild(createDiv());\n\n        resizer.appendChild(expand);\n        resizer.appendChild(shrink);\n        resizer._reset = function() {\n            expand.scrollLeft = maxSize;\n            expand.scrollTop = maxSize;\n            shrink.scrollLeft = maxSize;\n            shrink.scrollTop = maxSize;\n        };\n\n        var onScroll = function() {\n            resizer._reset();\n            handler();\n        };\n\n        addListener(expand, 'scroll', onScroll.bind(expand, 'expand'));\n        addListener(shrink, 'scroll', onScroll.bind(shrink, 'shrink'));\n\n        return resizer;\n    }\n\n    // https://davidwalsh.name/detect-node-insertion\n    function watchForRender(node, handler) {\n        var expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\n        var proxy = expando.renderProxy = function(e) {\n            if (e.animationName === CSS_RENDER_ANIMATION) {\n                handler();\n            }\n        };\n\n        helpers$1.each(ANIMATION_START_EVENTS, function(type) {\n            addListener(node, type, proxy);\n        });\n\n        // #4737: Chrome might skip the CSS animation when the CSS_RENDER_MONITOR class\n        // is removed then added back immediately (same animation frame?). Accessing the\n        // `offsetParent` property will force a reflow and re-evaluate the CSS animation.\n        // https://gist.github.com/paulirish/5d52fb081b3570c81e3a#box-metrics\n        // https://github.com/chartjs/Chart.js/issues/4737\n        expando.reflow = !!node.offsetParent;\n\n        node.classList.add(CSS_RENDER_MONITOR);\n    }\n\n    function unwatchForRender(node) {\n        var expando = node[EXPANDO_KEY] || {};\n        var proxy = expando.renderProxy;\n\n        if (proxy) {\n            helpers$1.each(ANIMATION_START_EVENTS, function(type) {\n                removeListener(node, type, proxy);\n            });\n\n            delete expando.renderProxy;\n        }\n\n        node.classList.remove(CSS_RENDER_MONITOR);\n    }\n\n    function addResizeListener(node, listener, chart) {\n        var expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});\n\n        // Let's keep track of this added resizer and thus avoid DOM query when removing it.\n        var resizer = expando.resizer = createResizer(throttled(function() {\n            if (expando.resizer) {\n                var container = chart.options.maintainAspectRatio && node.parentNode;\n                var w = container ? container.clientWidth : 0;\n                listener(createEvent('resize', chart));\n                if (container && container.clientWidth < w && chart.canvas) {\n                    // If the container size shrank during chart resize, let's assume\n                    // scrollbar appeared. So we resize again with the scrollbar visible -\n                    // effectively making chart smaller and the scrollbar hidden again.\n                    // Because we are inside `throttled`, and currently `ticking`, scroll\n                    // events are ignored during this whole 2 resize process.\n                    // If we assumed wrong and something else happened, we are resizing\n                    // twice in a frame (potential performance issue)\n                    listener(createEvent('resize', chart));\n                }\n            }\n        }));\n\n        // The resizer needs to be attached to the node parent, so we first need to be\n        // sure that `node` is attached to the DOM before injecting the resizer element.\n        watchForRender(node, function() {\n            if (expando.resizer) {\n                var container = node.parentNode;\n                if (container && container !== resizer.parentNode) {\n                    container.insertBefore(resizer, container.firstChild);\n                }\n\n                // The container size might have changed, let's reset the resizer state.\n                resizer._reset();\n            }\n        });\n    }\n\n    function removeResizeListener(node) {\n        var expando = node[EXPANDO_KEY] || {};\n        var resizer = expando.resizer;\n\n        delete expando.resizer;\n        unwatchForRender(node);\n\n        if (resizer && resizer.parentNode) {\n            resizer.parentNode.removeChild(resizer);\n        }\n    }\n\n    function injectCSS(platform, css) {\n        // https://stackoverflow.com/q/3922139\n        var style = platform._style || document.createElement('style');\n        if (!platform._style) {\n            platform._style = style;\n            css = '/* Chart.js */\\n' + css;\n            style.setAttribute('type', 'text/css');\n            document.getElementsByTagName('head')[0].appendChild(style);\n        }\n\n        style.appendChild(document.createTextNode(css));\n    }\n\n    var platform_dom$2 = {\n        /**\n         * When `true`, prevents the automatic injection of the stylesheet required to\n         * correctly detect when the chart is added to the DOM and then resized. This\n         * switch has been added to allow external stylesheet (`dist/Chart(.min)?.js`)\n         * to be manually imported to make this library compatible with any CSP.\n         * See https://github.com/chartjs/Chart.js/issues/5208\n         */\n        disableCSSInjection: false,\n\n        /**\n         * This property holds whether this platform is enabled for the current environment.\n         * Currently used by platform.js to select the proper implementation.\n         * @private\n         */\n        _enabled: typeof window !== 'undefined' && typeof document !== 'undefined',\n\n        /**\n         * @private\n         */\n        _ensureLoaded: function() {\n            if (this._loaded) {\n                return;\n            }\n\n            this._loaded = true;\n\n            // https://github.com/chartjs/Chart.js/issues/5208\n            if (!this.disableCSSInjection) {\n                injectCSS(this, stylesheet);\n            }\n        },\n\n        acquireContext: function(item, config) {\n            if (typeof item === 'string') {\n                item = document.getElementById(item);\n            } else if (item.length) {\n                // Support for array based queries (such as jQuery)\n                item = item[0];\n            }\n\n            if (item && item.canvas) {\n                // Support for any object associated to a canvas (including a context2d)\n                item = item.canvas;\n            }\n\n            // To prevent canvas fingerprinting, some add-ons undefine the getContext\n            // method, for example: https://github.com/kkapsner/CanvasBlocker\n            // https://github.com/chartjs/Chart.js/issues/2807\n            var context = item && item.getContext && item.getContext('2d');\n\n            // Load platform resources on first chart creation, to make possible to change\n            // platform options after importing the library (e.g. `disableCSSInjection`).\n            this._ensureLoaded();\n\n            // `instanceof HTMLCanvasElement/CanvasRenderingContext2D` fails when the item is\n            // inside an iframe or when running in a protected environment. We could guess the\n            // types from their toString() value but let's keep things flexible and assume it's\n            // a sufficient condition if the item has a context2D which has item as `canvas`.\n            // https://github.com/chartjs/Chart.js/issues/3887\n            // https://github.com/chartjs/Chart.js/issues/4102\n            // https://github.com/chartjs/Chart.js/issues/4152\n            if (context && context.canvas === item) {\n                initCanvas(item, config);\n                return context;\n            }\n\n            return null;\n        },\n\n        releaseContext: function(context) {\n            var canvas = context.canvas;\n            if (!canvas[EXPANDO_KEY]) {\n                return;\n            }\n\n            var initial = canvas[EXPANDO_KEY].initial;\n            ['height', 'width'].forEach(function(prop) {\n                var value = initial[prop];\n                if (helpers$1.isNullOrUndef(value)) {\n                    canvas.removeAttribute(prop);\n                } else {\n                    canvas.setAttribute(prop, value);\n                }\n            });\n\n            helpers$1.each(initial.style || {}, function(value, key) {\n                canvas.style[key] = value;\n            });\n\n            // The canvas render size might have been changed (and thus the state stack discarded),\n            // we can't use save() and restore() to restore the initial state. So make sure that at\n            // least the canvas context is reset to the default state by setting the canvas width.\n            // https://www.w3.org/TR/2011/WD-html5-20110525/the-canvas-element.html\n            // eslint-disable-next-line no-self-assign\n            canvas.width = canvas.width;\n\n            delete canvas[EXPANDO_KEY];\n        },\n\n        addEventListener: function(chart, type, listener) {\n            var canvas = chart.canvas;\n            if (type === 'resize') {\n                // Note: the resize event is not supported on all browsers.\n                addResizeListener(canvas, listener, chart);\n                return;\n            }\n\n            var expando = listener[EXPANDO_KEY] || (listener[EXPANDO_KEY] = {});\n            var proxies = expando.proxies || (expando.proxies = {});\n            var proxy = proxies[chart.id + '_' + type] = function(event) {\n                listener(fromNativeEvent(event, chart));\n            };\n\n            addListener(canvas, type, proxy);\n        },\n\n        removeEventListener: function(chart, type, listener) {\n            var canvas = chart.canvas;\n            if (type === 'resize') {\n                // Note: the resize event is not supported on all browsers.\n                removeResizeListener(canvas);\n                return;\n            }\n\n            var expando = listener[EXPANDO_KEY] || {};\n            var proxies = expando.proxies || {};\n            var proxy = proxies[chart.id + '_' + type];\n            if (!proxy) {\n                return;\n            }\n\n            removeListener(canvas, type, proxy);\n        }\n    };\n\n    // DEPRECATIONS\n\n    /**\n     * Provided for backward compatibility, use EventTarget.addEventListener instead.\n     * EventTarget.addEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener\n     * @function Chart.helpers.addEvent\n     * @deprecated since version 2.7.0\n     * @todo remove at version 3\n     * @private\n     */\n    helpers$1.addEvent = addListener;\n\n    /**\n     * Provided for backward compatibility, use EventTarget.removeEventListener instead.\n     * EventTarget.removeEventListener compatibility: Chrome, Opera 7, Safari, FF1.5+, IE9+\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener\n     * @function Chart.helpers.removeEvent\n     * @deprecated since version 2.7.0\n     * @todo remove at version 3\n     * @private\n     */\n    helpers$1.removeEvent = removeListener;\n\n    // @TODO Make possible to select another platform at build time.\n    var implementation = platform_dom$2._enabled ? platform_dom$2 : platform_basic;\n\n    /**\n     * @namespace Chart.platform\n     * @see https://chartjs.gitbooks.io/proposals/content/Platform.html\n     * @since 2.4.0\n     */\n    var platform = helpers$1.extend({\n        /**\n         * @since 2.7.0\n         */\n        initialize: function() {},\n\n        /**\n         * Called at chart construction time, returns a context2d instance implementing\n         * the [W3C Canvas 2D Context API standard]{@link https://www.w3.org/TR/2dcontext/}.\n         * @param {*} item - The native item from which to acquire context (platform specific)\n         * @param {object} options - The chart options\n         * @returns {CanvasRenderingContext2D} context2d instance\n         */\n        acquireContext: function() {},\n\n        /**\n         * Called at chart destruction time, releases any resources associated to the context\n         * previously returned by the acquireContext() method.\n         * @param {CanvasRenderingContext2D} context - The context2d instance\n         * @returns {boolean} true if the method succeeded, else false\n         */\n        releaseContext: function() {},\n\n        /**\n         * Registers the specified listener on the given chart.\n         * @param {Chart} chart - Chart from which to listen for event\n         * @param {string} type - The ({@link IEvent}) type to listen for\n         * @param {function} listener - Receives a notification (an object that implements\n         * the {@link IEvent} interface) when an event of the specified type occurs.\n         */\n        addEventListener: function() {},\n\n        /**\n         * Removes the specified listener previously registered with addEventListener.\n         * @param {Chart} chart - Chart from which to remove the listener\n         * @param {string} type - The ({@link IEvent}) type to remove\n         * @param {function} listener - The listener function to remove from the event target.\n         */\n        removeEventListener: function() {}\n\n    }, implementation);\n\n    core_defaults._set('global', {\n        plugins: {}\n    });\n\n    /**\n     * The plugin service singleton\n     * @namespace Chart.plugins\n     * @since 2.1.0\n     */\n    var core_plugins = {\n        /**\n         * Globally registered plugins.\n         * @private\n         */\n        _plugins: [],\n\n        /**\n         * This identifier is used to invalidate the descriptors cache attached to each chart\n         * when a global plugin is registered or unregistered. In this case, the cache ID is\n         * incremented and descriptors are regenerated during following API calls.\n         * @private\n         */\n        _cacheId: 0,\n\n        /**\n         * Registers the given plugin(s) if not already registered.\n         * @param {IPlugin[]|IPlugin} plugins plugin instance(s).\n         */\n        register: function(plugins) {\n            var p = this._plugins;\n            ([]).concat(plugins).forEach(function(plugin) {\n                if (p.indexOf(plugin) === -1) {\n                    p.push(plugin);\n                }\n            });\n\n            this._cacheId++;\n        },\n\n        /**\n         * Unregisters the given plugin(s) only if registered.\n         * @param {IPlugin[]|IPlugin} plugins plugin instance(s).\n         */\n        unregister: function(plugins) {\n            var p = this._plugins;\n            ([]).concat(plugins).forEach(function(plugin) {\n                var idx = p.indexOf(plugin);\n                if (idx !== -1) {\n                    p.splice(idx, 1);\n                }\n            });\n\n            this._cacheId++;\n        },\n\n        /**\n         * Remove all registered plugins.\n         * @since 2.1.5\n         */\n        clear: function() {\n            this._plugins = [];\n            this._cacheId++;\n        },\n\n        /**\n         * Returns the number of registered plugins?\n         * @returns {number}\n         * @since 2.1.5\n         */\n        count: function() {\n            return this._plugins.length;\n        },\n\n        /**\n         * Returns all registered plugin instances.\n         * @returns {IPlugin[]} array of plugin objects.\n         * @since 2.1.5\n         */\n        getAll: function() {\n            return this._plugins;\n        },\n\n        /**\n         * Calls enabled plugins for `chart` on the specified hook and with the given args.\n         * This method immediately returns as soon as a plugin explicitly returns false. The\n         * returned value can be used, for instance, to interrupt the current action.\n         * @param {Chart} chart - The chart instance for which plugins should be called.\n         * @param {string} hook - The name of the plugin method to call (e.g. 'beforeUpdate').\n         * @param {Array} [args] - Extra arguments to apply to the hook call.\n         * @returns {boolean} false if any of the plugins return false, else returns true.\n         */\n        notify: function(chart, hook, args) {\n            var descriptors = this.descriptors(chart);\n            var ilen = descriptors.length;\n            var i, descriptor, plugin, params, method;\n\n            for (i = 0; i < ilen; ++i) {\n                descriptor = descriptors[i];\n                plugin = descriptor.plugin;\n                method = plugin[hook];\n                if (typeof method === 'function') {\n                    params = [chart].concat(args || []);\n                    params.push(descriptor.options);\n                    if (method.apply(plugin, params) === false) {\n                        return false;\n                    }\n                }\n            }\n\n            return true;\n        },\n\n        /**\n         * Returns descriptors of enabled plugins for the given chart.\n         * @returns {object[]} [{ plugin, options }]\n         * @private\n         */\n        descriptors: function(chart) {\n            var cache = chart.$plugins || (chart.$plugins = {});\n            if (cache.id === this._cacheId) {\n                return cache.descriptors;\n            }\n\n            var plugins = [];\n            var descriptors = [];\n            var config = (chart && chart.config) || {};\n            var options = (config.options && config.options.plugins) || {};\n\n            this._plugins.concat(config.plugins || []).forEach(function(plugin) {\n                var idx = plugins.indexOf(plugin);\n                if (idx !== -1) {\n                    return;\n                }\n\n                var id = plugin.id;\n                var opts = options[id];\n                if (opts === false) {\n                    return;\n                }\n\n                if (opts === true) {\n                    opts = helpers$1.clone(core_defaults.global.plugins[id]);\n                }\n\n                plugins.push(plugin);\n                descriptors.push({\n                    plugin: plugin,\n                    options: opts || {}\n                });\n            });\n\n            cache.descriptors = descriptors;\n            cache.id = this._cacheId;\n            return descriptors;\n        },\n\n        /**\n         * Invalidates cache for the given chart: descriptors hold a reference on plugin option,\n         * but in some cases, this reference can be changed by the user when updating options.\n         * https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n         * @private\n         */\n        _invalidate: function(chart) {\n            delete chart.$plugins;\n        }\n    };\n\n    var core_scaleService = {\n        // Scale registration object. Extensions can register new scale types (such as log or DB scales) and then\n        // use the new chart options to grab the correct scale\n        constructors: {},\n        // Use a registration function so that we can move to an ES6 map when we no longer need to support\n        // old browsers\n\n        // Scale config defaults\n        defaults: {},\n        registerScaleType: function(type, scaleConstructor, scaleDefaults) {\n            this.constructors[type] = scaleConstructor;\n            this.defaults[type] = helpers$1.clone(scaleDefaults);\n        },\n        getScaleConstructor: function(type) {\n            return this.constructors.hasOwnProperty(type) ? this.constructors[type] : undefined;\n        },\n        getScaleDefaults: function(type) {\n            // Return the scale defaults merged with the global settings so that we always use the latest ones\n            return this.defaults.hasOwnProperty(type) ? helpers$1.merge({}, [core_defaults.scale, this.defaults[type]]) : {};\n        },\n        updateScaleDefaults: function(type, additions) {\n            var me = this;\n            if (me.defaults.hasOwnProperty(type)) {\n                me.defaults[type] = helpers$1.extend(me.defaults[type], additions);\n            }\n        },\n        addScalesToLayout: function(chart) {\n            // Adds each scale to the chart.boxes array to be sized accordingly\n            helpers$1.each(chart.scales, function(scale) {\n                // Set ILayoutItem parameters for backwards compatibility\n                scale.fullWidth = scale.options.fullWidth;\n                scale.position = scale.options.position;\n                scale.weight = scale.options.weight;\n                core_layouts.addBox(chart, scale);\n            });\n        }\n    };\n\n    var valueOrDefault$7 = helpers$1.valueOrDefault;\n\n    core_defaults._set('global', {\n        tooltips: {\n            enabled: true,\n            custom: null,\n            mode: 'nearest',\n            position: 'average',\n            intersect: true,\n            backgroundColor: 'rgba(0,0,0,0.8)',\n            titleFontStyle: 'bold',\n            titleSpacing: 2,\n            titleMarginBottom: 6,\n            titleFontColor: '#fff',\n            titleAlign: 'left',\n            bodySpacing: 2,\n            bodyFontColor: '#fff',\n            bodyAlign: 'left',\n            footerFontStyle: 'bold',\n            footerSpacing: 2,\n            footerMarginTop: 6,\n            footerFontColor: '#fff',\n            footerAlign: 'left',\n            yPadding: 6,\n            xPadding: 6,\n            caretPadding: 2,\n            caretSize: 5,\n            cornerRadius: 6,\n            multiKeyBackground: '#fff',\n            displayColors: true,\n            borderColor: 'rgba(0,0,0,0)',\n            borderWidth: 0,\n            callbacks: {\n                // Args are: (tooltipItems, data)\n                beforeTitle: helpers$1.noop,\n                title: function(tooltipItems, data) {\n                    var title = '';\n                    var labels = data.labels;\n                    var labelCount = labels ? labels.length : 0;\n\n                    if (tooltipItems.length > 0) {\n                        var item = tooltipItems[0];\n                        if (item.label) {\n                            title = item.label;\n                        } else if (item.xLabel) {\n                            title = item.xLabel;\n                        } else if (labelCount > 0 && item.index < labelCount) {\n                            title = labels[item.index];\n                        }\n                    }\n\n                    return title;\n                },\n                afterTitle: helpers$1.noop,\n\n                // Args are: (tooltipItems, data)\n                beforeBody: helpers$1.noop,\n\n                // Args are: (tooltipItem, data)\n                beforeLabel: helpers$1.noop,\n                label: function(tooltipItem, data) {\n                    var label = data.datasets[tooltipItem.datasetIndex].label || '';\n\n                    if (label) {\n                        label += ': ';\n                    }\n                    if (!helpers$1.isNullOrUndef(tooltipItem.value)) {\n                        label += tooltipItem.value;\n                    } else {\n                        label += tooltipItem.yLabel;\n                    }\n                    return label;\n                },\n                labelColor: function(tooltipItem, chart) {\n                    var meta = chart.getDatasetMeta(tooltipItem.datasetIndex);\n                    var activeElement = meta.data[tooltipItem.index];\n                    var view = activeElement._view;\n                    return {\n                        borderColor: view.borderColor,\n                        backgroundColor: view.backgroundColor\n                    };\n                },\n                labelTextColor: function() {\n                    return this._options.bodyFontColor;\n                },\n                afterLabel: helpers$1.noop,\n\n                // Args are: (tooltipItems, data)\n                afterBody: helpers$1.noop,\n\n                // Args are: (tooltipItems, data)\n                beforeFooter: helpers$1.noop,\n                footer: helpers$1.noop,\n                afterFooter: helpers$1.noop\n            }\n        }\n    });\n\n    var positioners = {\n        /**\n         * Average mode places the tooltip at the average position of the elements shown\n         * @function Chart.Tooltip.positioners.average\n         * @param elements {ChartElement[]} the elements being displayed in the tooltip\n         * @returns {object} tooltip position\n         */\n        average: function(elements) {\n            if (!elements.length) {\n                return false;\n            }\n\n            var i, len;\n            var x = 0;\n            var y = 0;\n            var count = 0;\n\n            for (i = 0, len = elements.length; i < len; ++i) {\n                var el = elements[i];\n                if (el && el.hasValue()) {\n                    var pos = el.tooltipPosition();\n                    x += pos.x;\n                    y += pos.y;\n                    ++count;\n                }\n            }\n\n            return {\n                x: x / count,\n                y: y / count\n            };\n        },\n\n        /**\n         * Gets the tooltip position nearest of the item nearest to the event position\n         * @function Chart.Tooltip.positioners.nearest\n         * @param elements {Chart.Element[]} the tooltip elements\n         * @param eventPosition {object} the position of the event in canvas coordinates\n         * @returns {object} the tooltip position\n         */\n        nearest: function(elements, eventPosition) {\n            var x = eventPosition.x;\n            var y = eventPosition.y;\n            var minDistance = Number.POSITIVE_INFINITY;\n            var i, len, nearestElement;\n\n            for (i = 0, len = elements.length; i < len; ++i) {\n                var el = elements[i];\n                if (el && el.hasValue()) {\n                    var center = el.getCenterPoint();\n                    var d = helpers$1.distanceBetweenPoints(eventPosition, center);\n\n                    if (d < minDistance) {\n                        minDistance = d;\n                        nearestElement = el;\n                    }\n                }\n            }\n\n            if (nearestElement) {\n                var tp = nearestElement.tooltipPosition();\n                x = tp.x;\n                y = tp.y;\n            }\n\n            return {\n                x: x,\n                y: y\n            };\n        }\n    };\n\n    // Helper to push or concat based on if the 2nd parameter is an array or not\n    function pushOrConcat(base, toPush) {\n        if (toPush) {\n            if (helpers$1.isArray(toPush)) {\n                // base = base.concat(toPush);\n                Array.prototype.push.apply(base, toPush);\n            } else {\n                base.push(toPush);\n            }\n        }\n\n        return base;\n    }\n\n    /**\n     * Returns array of strings split by newline\n     * @param {string} value - The value to split by newline.\n     * @returns {string[]} value if newline present - Returned from String split() method\n     * @function\n     */\n    function splitNewlines(str) {\n        if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n            return str.split('\\n');\n        }\n        return str;\n    }\n\n\n    /**\n     * Private helper to create a tooltip item model\n     * @param element - the chart element (point, arc, bar) to create the tooltip item for\n     * @return new tooltip item\n     */\n    function createTooltipItem(element) {\n        var xScale = element._xScale;\n        var yScale = element._yScale || element._scale; // handle radar || polarArea charts\n        var index = element._index;\n        var datasetIndex = element._datasetIndex;\n        var controller = element._chart.getDatasetMeta(datasetIndex).controller;\n        var indexScale = controller._getIndexScale();\n        var valueScale = controller._getValueScale();\n\n        return {\n            xLabel: xScale ? xScale.getLabelForIndex(index, datasetIndex) : '',\n            yLabel: yScale ? yScale.getLabelForIndex(index, datasetIndex) : '',\n            label: indexScale ? '' + indexScale.getLabelForIndex(index, datasetIndex) : '',\n            value: valueScale ? '' + valueScale.getLabelForIndex(index, datasetIndex) : '',\n            index: index,\n            datasetIndex: datasetIndex,\n            x: element._model.x,\n            y: element._model.y\n        };\n    }\n\n    /**\n     * Helper to get the reset model for the tooltip\n     * @param tooltipOpts {object} the tooltip options\n     */\n    function getBaseModel(tooltipOpts) {\n        var globalDefaults = core_defaults.global;\n\n        return {\n            // Positioning\n            xPadding: tooltipOpts.xPadding,\n            yPadding: tooltipOpts.yPadding,\n            xAlign: tooltipOpts.xAlign,\n            yAlign: tooltipOpts.yAlign,\n\n            // Body\n            bodyFontColor: tooltipOpts.bodyFontColor,\n            _bodyFontFamily: valueOrDefault$7(tooltipOpts.bodyFontFamily, globalDefaults.defaultFontFamily),\n            _bodyFontStyle: valueOrDefault$7(tooltipOpts.bodyFontStyle, globalDefaults.defaultFontStyle),\n            _bodyAlign: tooltipOpts.bodyAlign,\n            bodyFontSize: valueOrDefault$7(tooltipOpts.bodyFontSize, globalDefaults.defaultFontSize),\n            bodySpacing: tooltipOpts.bodySpacing,\n\n            // Title\n            titleFontColor: tooltipOpts.titleFontColor,\n            _titleFontFamily: valueOrDefault$7(tooltipOpts.titleFontFamily, globalDefaults.defaultFontFamily),\n            _titleFontStyle: valueOrDefault$7(tooltipOpts.titleFontStyle, globalDefaults.defaultFontStyle),\n            titleFontSize: valueOrDefault$7(tooltipOpts.titleFontSize, globalDefaults.defaultFontSize),\n            _titleAlign: tooltipOpts.titleAlign,\n            titleSpacing: tooltipOpts.titleSpacing,\n            titleMarginBottom: tooltipOpts.titleMarginBottom,\n\n            // Footer\n            footerFontColor: tooltipOpts.footerFontColor,\n            _footerFontFamily: valueOrDefault$7(tooltipOpts.footerFontFamily, globalDefaults.defaultFontFamily),\n            _footerFontStyle: valueOrDefault$7(tooltipOpts.footerFontStyle, globalDefaults.defaultFontStyle),\n            footerFontSize: valueOrDefault$7(tooltipOpts.footerFontSize, globalDefaults.defaultFontSize),\n            _footerAlign: tooltipOpts.footerAlign,\n            footerSpacing: tooltipOpts.footerSpacing,\n            footerMarginTop: tooltipOpts.footerMarginTop,\n\n            // Appearance\n            caretSize: tooltipOpts.caretSize,\n            cornerRadius: tooltipOpts.cornerRadius,\n            backgroundColor: tooltipOpts.backgroundColor,\n            opacity: 0,\n            legendColorBackground: tooltipOpts.multiKeyBackground,\n            displayColors: tooltipOpts.displayColors,\n            borderColor: tooltipOpts.borderColor,\n            borderWidth: tooltipOpts.borderWidth\n        };\n    }\n\n    /**\n     * Get the size of the tooltip\n     */\n    function getTooltipSize(tooltip, model) {\n        var ctx = tooltip._chart.ctx;\n\n        var height = model.yPadding * 2; // Tooltip Padding\n        var width = 0;\n\n        // Count of all lines in the body\n        var body = model.body;\n        var combinedBodyLength = body.reduce(function(count, bodyItem) {\n            return count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length;\n        }, 0);\n        combinedBodyLength += model.beforeBody.length + model.afterBody.length;\n\n        var titleLineCount = model.title.length;\n        var footerLineCount = model.footer.length;\n        var titleFontSize = model.titleFontSize;\n        var bodyFontSize = model.bodyFontSize;\n        var footerFontSize = model.footerFontSize;\n\n        height += titleLineCount * titleFontSize; // Title Lines\n        height += titleLineCount ? (titleLineCount - 1) * model.titleSpacing : 0; // Title Line Spacing\n        height += titleLineCount ? model.titleMarginBottom : 0; // Title's bottom Margin\n        height += combinedBodyLength * bodyFontSize; // Body Lines\n        height += combinedBodyLength ? (combinedBodyLength - 1) * model.bodySpacing : 0; // Body Line Spacing\n        height += footerLineCount ? model.footerMarginTop : 0; // Footer Margin\n        height += footerLineCount * (footerFontSize); // Footer Lines\n        height += footerLineCount ? (footerLineCount - 1) * model.footerSpacing : 0; // Footer Line Spacing\n\n        // Title width\n        var widthPadding = 0;\n        var maxLineWidth = function(line) {\n            width = Math.max(width, ctx.measureText(line).width + widthPadding);\n        };\n\n        ctx.font = helpers$1.fontString(titleFontSize, model._titleFontStyle, model._titleFontFamily);\n        helpers$1.each(model.title, maxLineWidth);\n\n        // Body width\n        ctx.font = helpers$1.fontString(bodyFontSize, model._bodyFontStyle, model._bodyFontFamily);\n        helpers$1.each(model.beforeBody.concat(model.afterBody), maxLineWidth);\n\n        // Body lines may include some extra width due to the color box\n        widthPadding = model.displayColors ? (bodyFontSize + 2) : 0;\n        helpers$1.each(body, function(bodyItem) {\n            helpers$1.each(bodyItem.before, maxLineWidth);\n            helpers$1.each(bodyItem.lines, maxLineWidth);\n            helpers$1.each(bodyItem.after, maxLineWidth);\n        });\n\n        // Reset back to 0\n        widthPadding = 0;\n\n        // Footer width\n        ctx.font = helpers$1.fontString(footerFontSize, model._footerFontStyle, model._footerFontFamily);\n        helpers$1.each(model.footer, maxLineWidth);\n\n        // Add padding\n        width += 2 * model.xPadding;\n\n        return {\n            width: width,\n            height: height\n        };\n    }\n\n    /**\n     * Helper to get the alignment of a tooltip given the size\n     */\n    function determineAlignment(tooltip, size) {\n        var model = tooltip._model;\n        var chart = tooltip._chart;\n        var chartArea = tooltip._chart.chartArea;\n        var xAlign = 'center';\n        var yAlign = 'center';\n\n        if (model.y < size.height) {\n            yAlign = 'top';\n        } else if (model.y > (chart.height - size.height)) {\n            yAlign = 'bottom';\n        }\n\n        var lf, rf; // functions to determine left, right alignment\n        var olf, orf; // functions to determine if left/right alignment causes tooltip to go outside chart\n        var yf; // function to get the y alignment if the tooltip goes outside of the left or right edges\n        var midX = (chartArea.left + chartArea.right) / 2;\n        var midY = (chartArea.top + chartArea.bottom) / 2;\n\n        if (yAlign === 'center') {\n            lf = function(x) {\n                return x <= midX;\n            };\n            rf = function(x) {\n                return x > midX;\n            };\n        } else {\n            lf = function(x) {\n                return x <= (size.width / 2);\n            };\n            rf = function(x) {\n                return x >= (chart.width - (size.width / 2));\n            };\n        }\n\n        olf = function(x) {\n            return x + size.width + model.caretSize + model.caretPadding > chart.width;\n        };\n        orf = function(x) {\n            return x - size.width - model.caretSize - model.caretPadding < 0;\n        };\n        yf = function(y) {\n            return y <= midY ? 'top' : 'bottom';\n        };\n\n        if (lf(model.x)) {\n            xAlign = 'left';\n\n            // Is tooltip too wide and goes over the right side of the chart.?\n            if (olf(model.x)) {\n                xAlign = 'center';\n                yAlign = yf(model.y);\n            }\n        } else if (rf(model.x)) {\n            xAlign = 'right';\n\n            // Is tooltip too wide and goes outside left edge of canvas?\n            if (orf(model.x)) {\n                xAlign = 'center';\n                yAlign = yf(model.y);\n            }\n        }\n\n        var opts = tooltip._options;\n        return {\n            xAlign: opts.xAlign ? opts.xAlign : xAlign,\n            yAlign: opts.yAlign ? opts.yAlign : yAlign\n        };\n    }\n\n    /**\n     * Helper to get the location a tooltip needs to be placed at given the initial position (via the vm) and the size and alignment\n     */\n    function getBackgroundPoint(vm, size, alignment, chart) {\n        // Background Position\n        var x = vm.x;\n        var y = vm.y;\n\n        var caretSize = vm.caretSize;\n        var caretPadding = vm.caretPadding;\n        var cornerRadius = vm.cornerRadius;\n        var xAlign = alignment.xAlign;\n        var yAlign = alignment.yAlign;\n        var paddingAndSize = caretSize + caretPadding;\n        var radiusAndPadding = cornerRadius + caretPadding;\n\n        if (xAlign === 'right') {\n            x -= size.width;\n        } else if (xAlign === 'center') {\n            x -= (size.width / 2);\n            if (x + size.width > chart.width) {\n                x = chart.width - size.width;\n            }\n            if (x < 0) {\n                x = 0;\n            }\n        }\n\n        if (yAlign === 'top') {\n            y += paddingAndSize;\n        } else if (yAlign === 'bottom') {\n            y -= size.height + paddingAndSize;\n        } else {\n            y -= (size.height / 2);\n        }\n\n        if (yAlign === 'center') {\n            if (xAlign === 'left') {\n                x += paddingAndSize;\n            } else if (xAlign === 'right') {\n                x -= paddingAndSize;\n            }\n        } else if (xAlign === 'left') {\n            x -= radiusAndPadding;\n        } else if (xAlign === 'right') {\n            x += radiusAndPadding;\n        }\n\n        return {\n            x: x,\n            y: y\n        };\n    }\n\n    function getAlignedX(vm, align) {\n        return align === 'center'\n            ? vm.x + vm.width / 2\n            : align === 'right'\n                ? vm.x + vm.width - vm.xPadding\n                : vm.x + vm.xPadding;\n    }\n\n    /**\n     * Helper to build before and after body lines\n     */\n    function getBeforeAfterBodyLines(callback) {\n        return pushOrConcat([], splitNewlines(callback));\n    }\n\n    var exports$3 = core_element.extend({\n        initialize: function() {\n            this._model = getBaseModel(this._options);\n            this._lastActive = [];\n        },\n\n        // Get the title\n        // Args are: (tooltipItem, data)\n        getTitle: function() {\n            var me = this;\n            var opts = me._options;\n            var callbacks = opts.callbacks;\n\n            var beforeTitle = callbacks.beforeTitle.apply(me, arguments);\n            var title = callbacks.title.apply(me, arguments);\n            var afterTitle = callbacks.afterTitle.apply(me, arguments);\n\n            var lines = [];\n            lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n            lines = pushOrConcat(lines, splitNewlines(title));\n            lines = pushOrConcat(lines, splitNewlines(afterTitle));\n\n            return lines;\n        },\n\n        // Args are: (tooltipItem, data)\n        getBeforeBody: function() {\n            return getBeforeAfterBodyLines(this._options.callbacks.beforeBody.apply(this, arguments));\n        },\n\n        // Args are: (tooltipItem, data)\n        getBody: function(tooltipItems, data) {\n            var me = this;\n            var callbacks = me._options.callbacks;\n            var bodyItems = [];\n\n            helpers$1.each(tooltipItems, function(tooltipItem) {\n                var bodyItem = {\n                    before: [],\n                    lines: [],\n                    after: []\n                };\n                pushOrConcat(bodyItem.before, splitNewlines(callbacks.beforeLabel.call(me, tooltipItem, data)));\n                pushOrConcat(bodyItem.lines, callbacks.label.call(me, tooltipItem, data));\n                pushOrConcat(bodyItem.after, splitNewlines(callbacks.afterLabel.call(me, tooltipItem, data)));\n\n                bodyItems.push(bodyItem);\n            });\n\n            return bodyItems;\n        },\n\n        // Args are: (tooltipItem, data)\n        getAfterBody: function() {\n            return getBeforeAfterBodyLines(this._options.callbacks.afterBody.apply(this, arguments));\n        },\n\n        // Get the footer and beforeFooter and afterFooter lines\n        // Args are: (tooltipItem, data)\n        getFooter: function() {\n            var me = this;\n            var callbacks = me._options.callbacks;\n\n            var beforeFooter = callbacks.beforeFooter.apply(me, arguments);\n            var footer = callbacks.footer.apply(me, arguments);\n            var afterFooter = callbacks.afterFooter.apply(me, arguments);\n\n            var lines = [];\n            lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n            lines = pushOrConcat(lines, splitNewlines(footer));\n            lines = pushOrConcat(lines, splitNewlines(afterFooter));\n\n            return lines;\n        },\n\n        update: function(changed) {\n            var me = this;\n            var opts = me._options;\n\n            // Need to regenerate the model because its faster than using extend and it is necessary due to the optimization in Chart.Element.transition\n            // that does _view = _model if ease === 1. This causes the 2nd tooltip update to set properties in both the view and model at the same time\n            // which breaks any animations.\n            var existingModel = me._model;\n            var model = me._model = getBaseModel(opts);\n            var active = me._active;\n\n            var data = me._data;\n\n            // In the case where active.length === 0 we need to keep these at existing values for good animations\n            var alignment = {\n                xAlign: existingModel.xAlign,\n                yAlign: existingModel.yAlign\n            };\n            var backgroundPoint = {\n                x: existingModel.x,\n                y: existingModel.y\n            };\n            var tooltipSize = {\n                width: existingModel.width,\n                height: existingModel.height\n            };\n            var tooltipPosition = {\n                x: existingModel.caretX,\n                y: existingModel.caretY\n            };\n\n            var i, len;\n\n            if (active.length) {\n                model.opacity = 1;\n\n                var labelColors = [];\n                var labelTextColors = [];\n                tooltipPosition = positioners[opts.position].call(me, active, me._eventPosition);\n\n                var tooltipItems = [];\n                for (i = 0, len = active.length; i < len; ++i) {\n                    tooltipItems.push(createTooltipItem(active[i]));\n                }\n\n                // If the user provided a filter function, use it to modify the tooltip items\n                if (opts.filter) {\n                    tooltipItems = tooltipItems.filter(function(a) {\n                        return opts.filter(a, data);\n                    });\n                }\n\n                // If the user provided a sorting function, use it to modify the tooltip items\n                if (opts.itemSort) {\n                    tooltipItems = tooltipItems.sort(function(a, b) {\n                        return opts.itemSort(a, b, data);\n                    });\n                }\n\n                // Determine colors for boxes\n                helpers$1.each(tooltipItems, function(tooltipItem) {\n                    labelColors.push(opts.callbacks.labelColor.call(me, tooltipItem, me._chart));\n                    labelTextColors.push(opts.callbacks.labelTextColor.call(me, tooltipItem, me._chart));\n                });\n\n\n                // Build the Text Lines\n                model.title = me.getTitle(tooltipItems, data);\n                model.beforeBody = me.getBeforeBody(tooltipItems, data);\n                model.body = me.getBody(tooltipItems, data);\n                model.afterBody = me.getAfterBody(tooltipItems, data);\n                model.footer = me.getFooter(tooltipItems, data);\n\n                // Initial positioning and colors\n                model.x = tooltipPosition.x;\n                model.y = tooltipPosition.y;\n                model.caretPadding = opts.caretPadding;\n                model.labelColors = labelColors;\n                model.labelTextColors = labelTextColors;\n\n                // data points\n                model.dataPoints = tooltipItems;\n\n                // We need to determine alignment of the tooltip\n                tooltipSize = getTooltipSize(this, model);\n                alignment = determineAlignment(this, tooltipSize);\n                // Final Size and Position\n                backgroundPoint = getBackgroundPoint(model, tooltipSize, alignment, me._chart);\n            } else {\n                model.opacity = 0;\n            }\n\n            model.xAlign = alignment.xAlign;\n            model.yAlign = alignment.yAlign;\n            model.x = backgroundPoint.x;\n            model.y = backgroundPoint.y;\n            model.width = tooltipSize.width;\n            model.height = tooltipSize.height;\n\n            // Point where the caret on the tooltip points to\n            model.caretX = tooltipPosition.x;\n            model.caretY = tooltipPosition.y;\n\n            me._model = model;\n\n            if (changed && opts.custom) {\n                opts.custom.call(me, model);\n            }\n\n            return me;\n        },\n\n        drawCaret: function(tooltipPoint, size) {\n            var ctx = this._chart.ctx;\n            var vm = this._view;\n            var caretPosition = this.getCaretPosition(tooltipPoint, size, vm);\n\n            ctx.lineTo(caretPosition.x1, caretPosition.y1);\n            ctx.lineTo(caretPosition.x2, caretPosition.y2);\n            ctx.lineTo(caretPosition.x3, caretPosition.y3);\n        },\n        getCaretPosition: function(tooltipPoint, size, vm) {\n            var x1, x2, x3, y1, y2, y3;\n            var caretSize = vm.caretSize;\n            var cornerRadius = vm.cornerRadius;\n            var xAlign = vm.xAlign;\n            var yAlign = vm.yAlign;\n            var ptX = tooltipPoint.x;\n            var ptY = tooltipPoint.y;\n            var width = size.width;\n            var height = size.height;\n\n            if (yAlign === 'center') {\n                y2 = ptY + (height / 2);\n\n                if (xAlign === 'left') {\n                    x1 = ptX;\n                    x2 = x1 - caretSize;\n                    x3 = x1;\n\n                    y1 = y2 + caretSize;\n                    y3 = y2 - caretSize;\n                } else {\n                    x1 = ptX + width;\n                    x2 = x1 + caretSize;\n                    x3 = x1;\n\n                    y1 = y2 - caretSize;\n                    y3 = y2 + caretSize;\n                }\n            } else {\n                if (xAlign === 'left') {\n                    x2 = ptX + cornerRadius + (caretSize);\n                    x1 = x2 - caretSize;\n                    x3 = x2 + caretSize;\n                } else if (xAlign === 'right') {\n                    x2 = ptX + width - cornerRadius - caretSize;\n                    x1 = x2 - caretSize;\n                    x3 = x2 + caretSize;\n                } else {\n                    x2 = vm.caretX;\n                    x1 = x2 - caretSize;\n                    x3 = x2 + caretSize;\n                }\n                if (yAlign === 'top') {\n                    y1 = ptY;\n                    y2 = y1 - caretSize;\n                    y3 = y1;\n                } else {\n                    y1 = ptY + height;\n                    y2 = y1 + caretSize;\n                    y3 = y1;\n                    // invert drawing order\n                    var tmp = x3;\n                    x3 = x1;\n                    x1 = tmp;\n                }\n            }\n            return {x1: x1, x2: x2, x3: x3, y1: y1, y2: y2, y3: y3};\n        },\n\n        drawTitle: function(pt, vm, ctx) {\n            var title = vm.title;\n\n            if (title.length) {\n                pt.x = getAlignedX(vm, vm._titleAlign);\n\n                ctx.textAlign = vm._titleAlign;\n                ctx.textBaseline = 'top';\n\n                var titleFontSize = vm.titleFontSize;\n                var titleSpacing = vm.titleSpacing;\n\n                ctx.fillStyle = vm.titleFontColor;\n                ctx.font = helpers$1.fontString(titleFontSize, vm._titleFontStyle, vm._titleFontFamily);\n\n                var i, len;\n                for (i = 0, len = title.length; i < len; ++i) {\n                    ctx.fillText(title[i], pt.x, pt.y);\n                    pt.y += titleFontSize + titleSpacing; // Line Height and spacing\n\n                    if (i + 1 === title.length) {\n                        pt.y += vm.titleMarginBottom - titleSpacing; // If Last, add margin, remove spacing\n                    }\n                }\n            }\n        },\n\n        drawBody: function(pt, vm, ctx) {\n            var bodyFontSize = vm.bodyFontSize;\n            var bodySpacing = vm.bodySpacing;\n            var bodyAlign = vm._bodyAlign;\n            var body = vm.body;\n            var drawColorBoxes = vm.displayColors;\n            var labelColors = vm.labelColors;\n            var xLinePadding = 0;\n            var colorX = drawColorBoxes ? getAlignedX(vm, 'left') : 0;\n            var textColor;\n\n            ctx.textAlign = bodyAlign;\n            ctx.textBaseline = 'top';\n            ctx.font = helpers$1.fontString(bodyFontSize, vm._bodyFontStyle, vm._bodyFontFamily);\n\n            pt.x = getAlignedX(vm, bodyAlign);\n\n            // Before Body\n            var fillLineOfText = function(line) {\n                ctx.fillText(line, pt.x + xLinePadding, pt.y);\n                pt.y += bodyFontSize + bodySpacing;\n            };\n\n            // Before body lines\n            ctx.fillStyle = vm.bodyFontColor;\n            helpers$1.each(vm.beforeBody, fillLineOfText);\n\n            xLinePadding = drawColorBoxes && bodyAlign !== 'right'\n                ? bodyAlign === 'center' ? (bodyFontSize / 2 + 1) : (bodyFontSize + 2)\n                : 0;\n\n            // Draw body lines now\n            helpers$1.each(body, function(bodyItem, i) {\n                textColor = vm.labelTextColors[i];\n                ctx.fillStyle = textColor;\n                helpers$1.each(bodyItem.before, fillLineOfText);\n\n                helpers$1.each(bodyItem.lines, function(line) {\n                    // Draw Legend-like boxes if needed\n                    if (drawColorBoxes) {\n                        // Fill a white rect so that colours merge nicely if the opacity is < 1\n                        ctx.fillStyle = vm.legendColorBackground;\n                        ctx.fillRect(colorX, pt.y, bodyFontSize, bodyFontSize);\n\n                        // Border\n                        ctx.lineWidth = 1;\n                        ctx.strokeStyle = labelColors[i].borderColor;\n                        ctx.strokeRect(colorX, pt.y, bodyFontSize, bodyFontSize);\n\n                        // Inner square\n                        ctx.fillStyle = labelColors[i].backgroundColor;\n                        ctx.fillRect(colorX + 1, pt.y + 1, bodyFontSize - 2, bodyFontSize - 2);\n                        ctx.fillStyle = textColor;\n                    }\n\n                    fillLineOfText(line);\n                });\n\n                helpers$1.each(bodyItem.after, fillLineOfText);\n            });\n\n            // Reset back to 0 for after body\n            xLinePadding = 0;\n\n            // After body lines\n            helpers$1.each(vm.afterBody, fillLineOfText);\n            pt.y -= bodySpacing; // Remove last body spacing\n        },\n\n        drawFooter: function(pt, vm, ctx) {\n            var footer = vm.footer;\n\n            if (footer.length) {\n                pt.x = getAlignedX(vm, vm._footerAlign);\n                pt.y += vm.footerMarginTop;\n\n                ctx.textAlign = vm._footerAlign;\n                ctx.textBaseline = 'top';\n\n                ctx.fillStyle = vm.footerFontColor;\n                ctx.font = helpers$1.fontString(vm.footerFontSize, vm._footerFontStyle, vm._footerFontFamily);\n\n                helpers$1.each(footer, function(line) {\n                    ctx.fillText(line, pt.x, pt.y);\n                    pt.y += vm.footerFontSize + vm.footerSpacing;\n                });\n            }\n        },\n\n        drawBackground: function(pt, vm, ctx, tooltipSize) {\n            ctx.fillStyle = vm.backgroundColor;\n            ctx.strokeStyle = vm.borderColor;\n            ctx.lineWidth = vm.borderWidth;\n            var xAlign = vm.xAlign;\n            var yAlign = vm.yAlign;\n            var x = pt.x;\n            var y = pt.y;\n            var width = tooltipSize.width;\n            var height = tooltipSize.height;\n            var radius = vm.cornerRadius;\n\n            ctx.beginPath();\n            ctx.moveTo(x + radius, y);\n            if (yAlign === 'top') {\n                this.drawCaret(pt, tooltipSize);\n            }\n            ctx.lineTo(x + width - radius, y);\n            ctx.quadraticCurveTo(x + width, y, x + width, y + radius);\n            if (yAlign === 'center' && xAlign === 'right') {\n                this.drawCaret(pt, tooltipSize);\n            }\n            ctx.lineTo(x + width, y + height - radius);\n            ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);\n            if (yAlign === 'bottom') {\n                this.drawCaret(pt, tooltipSize);\n            }\n            ctx.lineTo(x + radius, y + height);\n            ctx.quadraticCurveTo(x, y + height, x, y + height - radius);\n            if (yAlign === 'center' && xAlign === 'left') {\n                this.drawCaret(pt, tooltipSize);\n            }\n            ctx.lineTo(x, y + radius);\n            ctx.quadraticCurveTo(x, y, x + radius, y);\n            ctx.closePath();\n\n            ctx.fill();\n\n            if (vm.borderWidth > 0) {\n                ctx.stroke();\n            }\n        },\n\n        draw: function() {\n            var ctx = this._chart.ctx;\n            var vm = this._view;\n\n            if (vm.opacity === 0) {\n                return;\n            }\n\n            var tooltipSize = {\n                width: vm.width,\n                height: vm.height\n            };\n            var pt = {\n                x: vm.x,\n                y: vm.y\n            };\n\n            // IE11/Edge does not like very small opacities, so snap to 0\n            var opacity = Math.abs(vm.opacity < 1e-3) ? 0 : vm.opacity;\n\n            // Truthy/falsey value for empty tooltip\n            var hasTooltipContent = vm.title.length || vm.beforeBody.length || vm.body.length || vm.afterBody.length || vm.footer.length;\n\n            if (this._options.enabled && hasTooltipContent) {\n                ctx.save();\n                ctx.globalAlpha = opacity;\n\n                // Draw Background\n                this.drawBackground(pt, vm, ctx, tooltipSize);\n\n                // Draw Title, Body, and Footer\n                pt.y += vm.yPadding;\n\n                // Titles\n                this.drawTitle(pt, vm, ctx);\n\n                // Body\n                this.drawBody(pt, vm, ctx);\n\n                // Footer\n                this.drawFooter(pt, vm, ctx);\n\n                ctx.restore();\n            }\n        },\n\n        /**\n         * Handle an event\n         * @private\n         * @param {IEvent} event - The event to handle\n         * @returns {boolean} true if the tooltip changed\n         */\n        handleEvent: function(e) {\n            var me = this;\n            var options = me._options;\n            var changed = false;\n\n            me._lastActive = me._lastActive || [];\n\n            // Find Active Elements for tooltips\n            if (e.type === 'mouseout') {\n                me._active = [];\n            } else {\n                me._active = me._chart.getElementsAtEventForMode(e, options.mode, options);\n            }\n\n            // Remember Last Actives\n            changed = !helpers$1.arrayEquals(me._active, me._lastActive);\n\n            // Only handle target event on tooltip change\n            if (changed) {\n                me._lastActive = me._active;\n\n                if (options.enabled || options.custom) {\n                    me._eventPosition = {\n                        x: e.x,\n                        y: e.y\n                    };\n\n                    me.update(true);\n                    me.pivot();\n                }\n            }\n\n            return changed;\n        }\n    });\n\n    /**\n     * @namespace Chart.Tooltip.positioners\n     */\n    var positioners_1 = positioners;\n\n    var core_tooltip = exports$3;\n    core_tooltip.positioners = positioners_1;\n\n    var valueOrDefault$8 = helpers$1.valueOrDefault;\n\n    core_defaults._set('global', {\n        elements: {},\n        events: [\n            'mousemove',\n            'mouseout',\n            'click',\n            'touchstart',\n            'touchmove'\n        ],\n        hover: {\n            onHover: null,\n            mode: 'nearest',\n            intersect: true,\n            animationDuration: 400\n        },\n        onClick: null,\n        maintainAspectRatio: true,\n        responsive: true,\n        responsiveAnimationDuration: 0\n    });\n\n    /**\n     * Recursively merge the given config objects representing the `scales` option\n     * by incorporating scale defaults in `xAxes` and `yAxes` array items, then\n     * returns a deep copy of the result, thus doesn't alter inputs.\n     */\n    function mergeScaleConfig(/* config objects ... */) {\n        return helpers$1.merge({}, [].slice.call(arguments), {\n            merger: function(key, target, source, options) {\n                if (key === 'xAxes' || key === 'yAxes') {\n                    var slen = source[key].length;\n                    var i, type, scale;\n\n                    if (!target[key]) {\n                        target[key] = [];\n                    }\n\n                    for (i = 0; i < slen; ++i) {\n                        scale = source[key][i];\n                        type = valueOrDefault$8(scale.type, key === 'xAxes' ? 'category' : 'linear');\n\n                        if (i >= target[key].length) {\n                            target[key].push({});\n                        }\n\n                        if (!target[key][i].type || (scale.type && scale.type !== target[key][i].type)) {\n                            // new/untyped scale or type changed: let's apply the new defaults\n                            // then merge source scale to correctly overwrite the defaults.\n                            helpers$1.merge(target[key][i], [core_scaleService.getScaleDefaults(type), scale]);\n                        } else {\n                            // scales type are the same\n                            helpers$1.merge(target[key][i], scale);\n                        }\n                    }\n                } else {\n                    helpers$1._merger(key, target, source, options);\n                }\n            }\n        });\n    }\n\n    /**\n     * Recursively merge the given config objects as the root options by handling\n     * default scale options for the `scales` and `scale` properties, then returns\n     * a deep copy of the result, thus doesn't alter inputs.\n     */\n    function mergeConfig(/* config objects ... */) {\n        return helpers$1.merge({}, [].slice.call(arguments), {\n            merger: function(key, target, source, options) {\n                var tval = target[key] || {};\n                var sval = source[key];\n\n                if (key === 'scales') {\n                    // scale config merging is complex. Add our own function here for that\n                    target[key] = mergeScaleConfig(tval, sval);\n                } else if (key === 'scale') {\n                    // used in polar area & radar charts since there is only one scale\n                    target[key] = helpers$1.merge(tval, [core_scaleService.getScaleDefaults(sval.type), sval]);\n                } else {\n                    helpers$1._merger(key, target, source, options);\n                }\n            }\n        });\n    }\n\n    function initConfig(config) {\n        config = config || {};\n\n        // Do NOT use mergeConfig for the data object because this method merges arrays\n        // and so would change references to labels and datasets, preventing data updates.\n        var data = config.data = config.data || {};\n        data.datasets = data.datasets || [];\n        data.labels = data.labels || [];\n\n        config.options = mergeConfig(\n            core_defaults.global,\n            core_defaults[config.type],\n            config.options || {});\n\n        return config;\n    }\n\n    function updateConfig(chart) {\n        var newOptions = chart.options;\n\n        helpers$1.each(chart.scales, function(scale) {\n            core_layouts.removeBox(chart, scale);\n        });\n\n        newOptions = mergeConfig(\n            core_defaults.global,\n            core_defaults[chart.config.type],\n            newOptions);\n\n        chart.options = chart.config.options = newOptions;\n        chart.ensureScalesHaveIDs();\n        chart.buildOrUpdateScales();\n\n        // Tooltip\n        chart.tooltip._options = newOptions.tooltips;\n        chart.tooltip.initialize();\n    }\n\n    function positionIsHorizontal(position) {\n        return position === 'top' || position === 'bottom';\n    }\n\n    var Chart = function(item, config) {\n        this.construct(item, config);\n        return this;\n    };\n\n    helpers$1.extend(Chart.prototype, /** @lends Chart */ {\n        /**\n         * @private\n         */\n        construct: function(item, config) {\n            var me = this;\n\n            config = initConfig(config);\n\n            var context = platform.acquireContext(item, config);\n            var canvas = context && context.canvas;\n            var height = canvas && canvas.height;\n            var width = canvas && canvas.width;\n\n            me.id = helpers$1.uid();\n            me.ctx = context;\n            me.canvas = canvas;\n            me.config = config;\n            me.width = width;\n            me.height = height;\n            me.aspectRatio = height ? width / height : null;\n            me.options = config.options;\n            me._bufferedRender = false;\n\n            /**\n             * Provided for backward compatibility, Chart and Chart.Controller have been merged,\n             * the \"instance\" still need to be defined since it might be called from plugins.\n             * @prop Chart#chart\n             * @deprecated since version 2.6.0\n             * @todo remove at version 3\n             * @private\n             */\n            me.chart = me;\n            me.controller = me; // chart.chart.controller #inception\n\n            // Add the chart instance to the global namespace\n            Chart.instances[me.id] = me;\n\n            // Define alias to the config data: `chart.data === chart.config.data`\n            Object.defineProperty(me, 'data', {\n                get: function() {\n                    return me.config.data;\n                },\n                set: function(value) {\n                    me.config.data = value;\n                }\n            });\n\n            if (!context || !canvas) {\n                // The given item is not a compatible context2d element, let's return before finalizing\n                // the chart initialization but after setting basic chart / controller properties that\n                // can help to figure out that the chart is not valid (e.g chart.canvas !== null);\n                // https://github.com/chartjs/Chart.js/issues/2807\n                console.error(\"Failed to create chart: can't acquire context from the given item\");\n                return;\n            }\n\n            me.initialize();\n            me.update();\n        },\n\n        /**\n         * @private\n         */\n        initialize: function() {\n            var me = this;\n\n            // Before init plugin notification\n            core_plugins.notify(me, 'beforeInit');\n\n            helpers$1.retinaScale(me, me.options.devicePixelRatio);\n\n            me.bindEvents();\n\n            if (me.options.responsive) {\n                // Initial resize before chart draws (must be silent to preserve initial animations).\n                me.resize(true);\n            }\n\n            // Make sure scales have IDs and are built before we build any controllers.\n            me.ensureScalesHaveIDs();\n            me.buildOrUpdateScales();\n            me.initToolTip();\n\n            // After init plugin notification\n            core_plugins.notify(me, 'afterInit');\n\n            return me;\n        },\n\n        clear: function() {\n            helpers$1.canvas.clear(this);\n            return this;\n        },\n\n        stop: function() {\n            // Stops any current animation loop occurring\n            core_animations.cancelAnimation(this);\n            return this;\n        },\n\n        resize: function(silent) {\n            var me = this;\n            var options = me.options;\n            var canvas = me.canvas;\n            var aspectRatio = (options.maintainAspectRatio && me.aspectRatio) || null;\n\n            // the canvas render width and height will be casted to integers so make sure that\n            // the canvas display style uses the same integer values to avoid blurring effect.\n\n            // Set to 0 instead of canvas.size because the size defaults to 300x150 if the element is collapsed\n            var newWidth = Math.max(0, Math.floor(helpers$1.getMaximumWidth(canvas)));\n            var newHeight = Math.max(0, Math.floor(aspectRatio ? newWidth / aspectRatio : helpers$1.getMaximumHeight(canvas)));\n\n            if (me.width === newWidth && me.height === newHeight) {\n                return;\n            }\n\n            canvas.width = me.width = newWidth;\n            canvas.height = me.height = newHeight;\n            canvas.style.width = newWidth + 'px';\n            canvas.style.height = newHeight + 'px';\n\n            helpers$1.retinaScale(me, options.devicePixelRatio);\n\n            if (!silent) {\n                // Notify any plugins about the resize\n                var newSize = {width: newWidth, height: newHeight};\n                core_plugins.notify(me, 'resize', [newSize]);\n\n                // Notify of resize\n                if (options.onResize) {\n                    options.onResize(me, newSize);\n                }\n\n                me.stop();\n                me.update({\n                    duration: options.responsiveAnimationDuration\n                });\n            }\n        },\n\n        ensureScalesHaveIDs: function() {\n            var options = this.options;\n            var scalesOptions = options.scales || {};\n            var scaleOptions = options.scale;\n\n            helpers$1.each(scalesOptions.xAxes, function(xAxisOptions, index) {\n                xAxisOptions.id = xAxisOptions.id || ('x-axis-' + index);\n            });\n\n            helpers$1.each(scalesOptions.yAxes, function(yAxisOptions, index) {\n                yAxisOptions.id = yAxisOptions.id || ('y-axis-' + index);\n            });\n\n            if (scaleOptions) {\n                scaleOptions.id = scaleOptions.id || 'scale';\n            }\n        },\n\n        /**\n         * Builds a map of scale ID to scale object for future lookup.\n         */\n        buildOrUpdateScales: function() {\n            var me = this;\n            var options = me.options;\n            var scales = me.scales || {};\n            var items = [];\n            var updated = Object.keys(scales).reduce(function(obj, id) {\n                obj[id] = false;\n                return obj;\n            }, {});\n\n            if (options.scales) {\n                items = items.concat(\n                    (options.scales.xAxes || []).map(function(xAxisOptions) {\n                        return {options: xAxisOptions, dtype: 'category', dposition: 'bottom'};\n                    }),\n                    (options.scales.yAxes || []).map(function(yAxisOptions) {\n                        return {options: yAxisOptions, dtype: 'linear', dposition: 'left'};\n                    })\n                );\n            }\n\n            if (options.scale) {\n                items.push({\n                    options: options.scale,\n                    dtype: 'radialLinear',\n                    isDefault: true,\n                    dposition: 'chartArea'\n                });\n            }\n\n            helpers$1.each(items, function(item) {\n                var scaleOptions = item.options;\n                var id = scaleOptions.id;\n                var scaleType = valueOrDefault$8(scaleOptions.type, item.dtype);\n\n                if (positionIsHorizontal(scaleOptions.position) !== positionIsHorizontal(item.dposition)) {\n                    scaleOptions.position = item.dposition;\n                }\n\n                updated[id] = true;\n                var scale = null;\n                if (id in scales && scales[id].type === scaleType) {\n                    scale = scales[id];\n                    scale.options = scaleOptions;\n                    scale.ctx = me.ctx;\n                    scale.chart = me;\n                } else {\n                    var scaleClass = core_scaleService.getScaleConstructor(scaleType);\n                    if (!scaleClass) {\n                        return;\n                    }\n                    scale = new scaleClass({\n                        id: id,\n                        type: scaleType,\n                        options: scaleOptions,\n                        ctx: me.ctx,\n                        chart: me\n                    });\n                    scales[scale.id] = scale;\n                }\n\n                scale.mergeTicksOptions();\n\n                // TODO(SB): I think we should be able to remove this custom case (options.scale)\n                // and consider it as a regular scale part of the \"scales\"\" map only! This would\n                // make the logic easier and remove some useless? custom code.\n                if (item.isDefault) {\n                    me.scale = scale;\n                }\n            });\n            // clear up discarded scales\n            helpers$1.each(updated, function(hasUpdated, id) {\n                if (!hasUpdated) {\n                    delete scales[id];\n                }\n            });\n\n            me.scales = scales;\n\n            core_scaleService.addScalesToLayout(this);\n        },\n\n        buildOrUpdateControllers: function() {\n            var me = this;\n            var newControllers = [];\n\n            helpers$1.each(me.data.datasets, function(dataset, datasetIndex) {\n                var meta = me.getDatasetMeta(datasetIndex);\n                var type = dataset.type || me.config.type;\n\n                if (meta.type && meta.type !== type) {\n                    me.destroyDatasetMeta(datasetIndex);\n                    meta = me.getDatasetMeta(datasetIndex);\n                }\n                meta.type = type;\n\n                if (meta.controller) {\n                    meta.controller.updateIndex(datasetIndex);\n                    meta.controller.linkScales();\n                } else {\n                    var ControllerClass = controllers[meta.type];\n                    if (ControllerClass === undefined) {\n                        throw new Error('\"' + meta.type + '\" is not a chart type.');\n                    }\n\n                    meta.controller = new ControllerClass(me, datasetIndex);\n                    newControllers.push(meta.controller);\n                }\n            }, me);\n\n            return newControllers;\n        },\n\n        /**\n         * Reset the elements of all datasets\n         * @private\n         */\n        resetElements: function() {\n            var me = this;\n            helpers$1.each(me.data.datasets, function(dataset, datasetIndex) {\n                me.getDatasetMeta(datasetIndex).controller.reset();\n            }, me);\n        },\n\n        /**\n        * Resets the chart back to it's state before the initial animation\n        */\n        reset: function() {\n            this.resetElements();\n            this.tooltip.initialize();\n        },\n\n        update: function(config) {\n            var me = this;\n\n            if (!config || typeof config !== 'object') {\n                // backwards compatibility\n                config = {\n                    duration: config,\n                    lazy: arguments[1]\n                };\n            }\n\n            updateConfig(me);\n\n            // plugins options references might have change, let's invalidate the cache\n            // https://github.com/chartjs/Chart.js/issues/5111#issuecomment-355934167\n            core_plugins._invalidate(me);\n\n            if (core_plugins.notify(me, 'beforeUpdate') === false) {\n                return;\n            }\n\n            // In case the entire data object changed\n            me.tooltip._data = me.data;\n\n            // Make sure dataset controllers are updated and new controllers are reset\n            var newControllers = me.buildOrUpdateControllers();\n\n            // Make sure all dataset controllers have correct meta data counts\n            helpers$1.each(me.data.datasets, function(dataset, datasetIndex) {\n                me.getDatasetMeta(datasetIndex).controller.buildOrUpdateElements();\n            }, me);\n\n            me.updateLayout();\n\n            // Can only reset the new controllers after the scales have been updated\n            if (me.options.animation && me.options.animation.duration) {\n                helpers$1.each(newControllers, function(controller) {\n                    controller.reset();\n                });\n            }\n\n            me.updateDatasets();\n\n            // Need to reset tooltip in case it is displayed with elements that are removed\n            // after update.\n            me.tooltip.initialize();\n\n            // Last active contains items that were previously in the tooltip.\n            // When we reset the tooltip, we need to clear it\n            me.lastActive = [];\n\n            // Do this before render so that any plugins that need final scale updates can use it\n            core_plugins.notify(me, 'afterUpdate');\n\n            if (me._bufferedRender) {\n                me._bufferedRequest = {\n                    duration: config.duration,\n                    easing: config.easing,\n                    lazy: config.lazy\n                };\n            } else {\n                me.render(config);\n            }\n        },\n\n        /**\n         * Updates the chart layout unless a plugin returns `false` to the `beforeLayout`\n         * hook, in which case, plugins will not be called on `afterLayout`.\n         * @private\n         */\n        updateLayout: function() {\n            var me = this;\n\n            if (core_plugins.notify(me, 'beforeLayout') === false) {\n                return;\n            }\n\n            core_layouts.update(this, this.width, this.height);\n\n            /**\n             * Provided for backward compatibility, use `afterLayout` instead.\n             * @method IPlugin#afterScaleUpdate\n             * @deprecated since version 2.5.0\n             * @todo remove at version 3\n             * @private\n             */\n            core_plugins.notify(me, 'afterScaleUpdate');\n            core_plugins.notify(me, 'afterLayout');\n        },\n\n        /**\n         * Updates all datasets unless a plugin returns `false` to the `beforeDatasetsUpdate`\n         * hook, in which case, plugins will not be called on `afterDatasetsUpdate`.\n         * @private\n         */\n        updateDatasets: function() {\n            var me = this;\n\n            if (core_plugins.notify(me, 'beforeDatasetsUpdate') === false) {\n                return;\n            }\n\n            for (var i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\n                me.updateDataset(i);\n            }\n\n            core_plugins.notify(me, 'afterDatasetsUpdate');\n        },\n\n        /**\n         * Updates dataset at index unless a plugin returns `false` to the `beforeDatasetUpdate`\n         * hook, in which case, plugins will not be called on `afterDatasetUpdate`.\n         * @private\n         */\n        updateDataset: function(index) {\n            var me = this;\n            var meta = me.getDatasetMeta(index);\n            var args = {\n                meta: meta,\n                index: index\n            };\n\n            if (core_plugins.notify(me, 'beforeDatasetUpdate', [args]) === false) {\n                return;\n            }\n\n            meta.controller.update();\n\n            core_plugins.notify(me, 'afterDatasetUpdate', [args]);\n        },\n\n        render: function(config) {\n            var me = this;\n\n            if (!config || typeof config !== 'object') {\n                // backwards compatibility\n                config = {\n                    duration: config,\n                    lazy: arguments[1]\n                };\n            }\n\n            var animationOptions = me.options.animation;\n            var duration = valueOrDefault$8(config.duration, animationOptions && animationOptions.duration);\n            var lazy = config.lazy;\n\n            if (core_plugins.notify(me, 'beforeRender') === false) {\n                return;\n            }\n\n            var onComplete = function(animation) {\n                core_plugins.notify(me, 'afterRender');\n                helpers$1.callback(animationOptions && animationOptions.onComplete, [animation], me);\n            };\n\n            if (animationOptions && duration) {\n                var animation = new core_animation({\n                    numSteps: duration / 16.66, // 60 fps\n                    easing: config.easing || animationOptions.easing,\n\n                    render: function(chart, animationObject) {\n                        var easingFunction = helpers$1.easing.effects[animationObject.easing];\n                        var currentStep = animationObject.currentStep;\n                        var stepDecimal = currentStep / animationObject.numSteps;\n\n                        chart.draw(easingFunction(stepDecimal), stepDecimal, currentStep);\n                    },\n\n                    onAnimationProgress: animationOptions.onProgress,\n                    onAnimationComplete: onComplete\n                });\n\n                core_animations.addAnimation(me, animation, duration, lazy);\n            } else {\n                me.draw();\n\n                // See https://github.com/chartjs/Chart.js/issues/3781\n                onComplete(new core_animation({numSteps: 0, chart: me}));\n            }\n\n            return me;\n        },\n\n        draw: function(easingValue) {\n            var me = this;\n\n            me.clear();\n\n            if (helpers$1.isNullOrUndef(easingValue)) {\n                easingValue = 1;\n            }\n\n            me.transition(easingValue);\n\n            if (me.width <= 0 || me.height <= 0) {\n                return;\n            }\n\n            if (core_plugins.notify(me, 'beforeDraw', [easingValue]) === false) {\n                return;\n            }\n\n            // Draw all the scales\n            helpers$1.each(me.boxes, function(box) {\n                box.draw(me.chartArea);\n            }, me);\n\n            me.drawDatasets(easingValue);\n            me._drawTooltip(easingValue);\n\n            core_plugins.notify(me, 'afterDraw', [easingValue]);\n        },\n\n        /**\n         * @private\n         */\n        transition: function(easingValue) {\n            var me = this;\n\n            for (var i = 0, ilen = (me.data.datasets || []).length; i < ilen; ++i) {\n                if (me.isDatasetVisible(i)) {\n                    me.getDatasetMeta(i).controller.transition(easingValue);\n                }\n            }\n\n            me.tooltip.transition(easingValue);\n        },\n\n        /**\n         * Draws all datasets unless a plugin returns `false` to the `beforeDatasetsDraw`\n         * hook, in which case, plugins will not be called on `afterDatasetsDraw`.\n         * @private\n         */\n        drawDatasets: function(easingValue) {\n            var me = this;\n\n            if (core_plugins.notify(me, 'beforeDatasetsDraw', [easingValue]) === false) {\n                return;\n            }\n\n            // Draw datasets reversed to support proper line stacking\n            for (var i = (me.data.datasets || []).length - 1; i >= 0; --i) {\n                if (me.isDatasetVisible(i)) {\n                    me.drawDataset(i, easingValue);\n                }\n            }\n\n            core_plugins.notify(me, 'afterDatasetsDraw', [easingValue]);\n        },\n\n        /**\n         * Draws dataset at index unless a plugin returns `false` to the `beforeDatasetDraw`\n         * hook, in which case, plugins will not be called on `afterDatasetDraw`.\n         * @private\n         */\n        drawDataset: function(index, easingValue) {\n            var me = this;\n            var meta = me.getDatasetMeta(index);\n            var args = {\n                meta: meta,\n                index: index,\n                easingValue: easingValue\n            };\n\n            if (core_plugins.notify(me, 'beforeDatasetDraw', [args]) === false) {\n                return;\n            }\n\n            meta.controller.draw(easingValue);\n\n            core_plugins.notify(me, 'afterDatasetDraw', [args]);\n        },\n\n        /**\n         * Draws tooltip unless a plugin returns `false` to the `beforeTooltipDraw`\n         * hook, in which case, plugins will not be called on `afterTooltipDraw`.\n         * @private\n         */\n        _drawTooltip: function(easingValue) {\n            var me = this;\n            var tooltip = me.tooltip;\n            var args = {\n                tooltip: tooltip,\n                easingValue: easingValue\n            };\n\n            if (core_plugins.notify(me, 'beforeTooltipDraw', [args]) === false) {\n                return;\n            }\n\n            tooltip.draw();\n\n            core_plugins.notify(me, 'afterTooltipDraw', [args]);\n        },\n\n        /**\n         * Get the single element that was clicked on\n         * @return An object containing the dataset index and element index of the matching element. Also contains the rectangle that was draw\n         */\n        getElementAtEvent: function(e) {\n            return core_interaction.modes.single(this, e);\n        },\n\n        getElementsAtEvent: function(e) {\n            return core_interaction.modes.label(this, e, {intersect: true});\n        },\n\n        getElementsAtXAxis: function(e) {\n            return core_interaction.modes['x-axis'](this, e, {intersect: true});\n        },\n\n        getElementsAtEventForMode: function(e, mode, options) {\n            var method = core_interaction.modes[mode];\n            if (typeof method === 'function') {\n                return method(this, e, options);\n            }\n\n            return [];\n        },\n\n        getDatasetAtEvent: function(e) {\n            return core_interaction.modes.dataset(this, e, {intersect: true});\n        },\n\n        getDatasetMeta: function(datasetIndex) {\n            var me = this;\n            var dataset = me.data.datasets[datasetIndex];\n            if (!dataset._meta) {\n                dataset._meta = {};\n            }\n\n            var meta = dataset._meta[me.id];\n            if (!meta) {\n                meta = dataset._meta[me.id] = {\n                    type: null,\n                    data: [],\n                    dataset: null,\n                    controller: null,\n                    hidden: null,\t\t\t// See isDatasetVisible() comment\n                    xAxisID: null,\n                    yAxisID: null\n                };\n            }\n\n            return meta;\n        },\n\n        getVisibleDatasetCount: function() {\n            var count = 0;\n            for (var i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n                if (this.isDatasetVisible(i)) {\n                    count++;\n                }\n            }\n            return count;\n        },\n\n        isDatasetVisible: function(datasetIndex) {\n            var meta = this.getDatasetMeta(datasetIndex);\n\n            // meta.hidden is a per chart dataset hidden flag override with 3 states: if true or false,\n            // the dataset.hidden value is ignored, else if null, the dataset hidden state is returned.\n            return typeof meta.hidden === 'boolean' ? !meta.hidden : !this.data.datasets[datasetIndex].hidden;\n        },\n\n        generateLegend: function() {\n            return this.options.legendCallback(this);\n        },\n\n        /**\n         * @private\n         */\n        destroyDatasetMeta: function(datasetIndex) {\n            var id = this.id;\n            var dataset = this.data.datasets[datasetIndex];\n            var meta = dataset._meta && dataset._meta[id];\n\n            if (meta) {\n                meta.controller.destroy();\n                delete dataset._meta[id];\n            }\n        },\n\n        destroy: function() {\n            var me = this;\n            var canvas = me.canvas;\n            var i, ilen;\n\n            me.stop();\n\n            // dataset controllers need to cleanup associated data\n            for (i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\n                me.destroyDatasetMeta(i);\n            }\n\n            if (canvas) {\n                me.unbindEvents();\n                helpers$1.canvas.clear(me);\n                platform.releaseContext(me.ctx);\n                me.canvas = null;\n                me.ctx = null;\n            }\n\n            core_plugins.notify(me, 'destroy');\n\n            delete Chart.instances[me.id];\n        },\n\n        toBase64Image: function() {\n            return this.canvas.toDataURL.apply(this.canvas, arguments);\n        },\n\n        initToolTip: function() {\n            var me = this;\n            me.tooltip = new core_tooltip({\n                _chart: me,\n                _chartInstance: me, // deprecated, backward compatibility\n                _data: me.data,\n                _options: me.options.tooltips\n            }, me);\n        },\n\n        /**\n         * @private\n         */\n        bindEvents: function() {\n            var me = this;\n            var listeners = me._listeners = {};\n            var listener = function() {\n                me.eventHandler.apply(me, arguments);\n            };\n\n            helpers$1.each(me.options.events, function(type) {\n                platform.addEventListener(me, type, listener);\n                listeners[type] = listener;\n            });\n\n            // Elements used to detect size change should not be injected for non responsive charts.\n            // See https://github.com/chartjs/Chart.js/issues/2210\n            if (me.options.responsive) {\n                listener = function() {\n                    me.resize();\n                };\n\n                platform.addEventListener(me, 'resize', listener);\n                listeners.resize = listener;\n            }\n        },\n\n        /**\n         * @private\n         */\n        unbindEvents: function() {\n            var me = this;\n            var listeners = me._listeners;\n            if (!listeners) {\n                return;\n            }\n\n            delete me._listeners;\n            helpers$1.each(listeners, function(listener, type) {\n                platform.removeEventListener(me, type, listener);\n            });\n        },\n\n        updateHoverStyle: function(elements, mode, enabled) {\n            var method = enabled ? 'setHoverStyle' : 'removeHoverStyle';\n            var element, i, ilen;\n\n            for (i = 0, ilen = elements.length; i < ilen; ++i) {\n                element = elements[i];\n                if (element) {\n                    this.getDatasetMeta(element._datasetIndex).controller[method](element);\n                }\n            }\n        },\n\n        /**\n         * @private\n         */\n        eventHandler: function(e) {\n            var me = this;\n            var tooltip = me.tooltip;\n\n            if (core_plugins.notify(me, 'beforeEvent', [e]) === false) {\n                return;\n            }\n\n            // Buffer any update calls so that renders do not occur\n            me._bufferedRender = true;\n            me._bufferedRequest = null;\n\n            var changed = me.handleEvent(e);\n            // for smooth tooltip animations issue #4989\n            // the tooltip should be the source of change\n            // Animation check workaround:\n            // tooltip._start will be null when tooltip isn't animating\n            if (tooltip) {\n                changed = tooltip._start\n                    ? tooltip.handleEvent(e)\n                    : changed | tooltip.handleEvent(e);\n            }\n\n            core_plugins.notify(me, 'afterEvent', [e]);\n\n            var bufferedRequest = me._bufferedRequest;\n            if (bufferedRequest) {\n                // If we have an update that was triggered, we need to do a normal render\n                me.render(bufferedRequest);\n            } else if (changed && !me.animating) {\n                // If entering, leaving, or changing elements, animate the change via pivot\n                me.stop();\n\n                // We only need to render at this point. Updating will cause scales to be\n                // recomputed generating flicker & using more memory than necessary.\n                me.render({\n                    duration: me.options.hover.animationDuration,\n                    lazy: true\n                });\n            }\n\n            me._bufferedRender = false;\n            me._bufferedRequest = null;\n\n            return me;\n        },\n\n        /**\n         * Handle an event\n         * @private\n         * @param {IEvent} event the event to handle\n         * @return {boolean} true if the chart needs to re-render\n         */\n        handleEvent: function(e) {\n            var me = this;\n            var options = me.options || {};\n            var hoverOptions = options.hover;\n            var changed = false;\n\n            me.lastActive = me.lastActive || [];\n\n            // Find Active Elements for hover and tooltips\n            if (e.type === 'mouseout') {\n                me.active = [];\n            } else {\n                me.active = me.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions);\n            }\n\n            // Invoke onHover hook\n            // Need to call with native event here to not break backwards compatibility\n            helpers$1.callback(options.onHover || options.hover.onHover, [e.native, me.active], me);\n\n            if (e.type === 'mouseup' || e.type === 'click') {\n                if (options.onClick) {\n                    // Use e.native here for backwards compatibility\n                    options.onClick.call(me, e.native, me.active);\n                }\n            }\n\n            // Remove styling for last active (even if it may still be active)\n            if (me.lastActive.length) {\n                me.updateHoverStyle(me.lastActive, hoverOptions.mode, false);\n            }\n\n            // Built in hover styling\n            if (me.active.length && hoverOptions.mode) {\n                me.updateHoverStyle(me.active, hoverOptions.mode, true);\n            }\n\n            changed = !helpers$1.arrayEquals(me.active, me.lastActive);\n\n            // Remember Last Actives\n            me.lastActive = me.active;\n\n            return changed;\n        }\n    });\n\n    /**\n     * NOTE(SB) We actually don't use this container anymore but we need to keep it\n     * for backward compatibility. Though, it can still be useful for plugins that\n     * would need to work on multiple charts?!\n     */\n    Chart.instances = {};\n\n    var core_controller = Chart;\n\n    // DEPRECATIONS\n\n    /**\n     * Provided for backward compatibility, use Chart instead.\n     * @class Chart.Controller\n     * @deprecated since version 2.6\n     * @todo remove at version 3\n     * @private\n     */\n    Chart.Controller = Chart;\n\n    /**\n     * Provided for backward compatibility, not available anymore.\n     * @namespace Chart\n     * @deprecated since version 2.8\n     * @todo remove at version 3\n     * @private\n     */\n    Chart.types = {};\n\n    /**\n     * Provided for backward compatibility, not available anymore.\n     * @namespace Chart.helpers.configMerge\n     * @deprecated since version 2.8.0\n     * @todo remove at version 3\n     * @private\n     */\n    helpers$1.configMerge = mergeConfig;\n\n    /**\n     * Provided for backward compatibility, not available anymore.\n     * @namespace Chart.helpers.scaleMerge\n     * @deprecated since version 2.8.0\n     * @todo remove at version 3\n     * @private\n     */\n    helpers$1.scaleMerge = mergeScaleConfig;\n\n    var core_helpers = function() {\n\n        // -- Basic js utility methods\n\n        helpers$1.where = function(collection, filterCallback) {\n            if (helpers$1.isArray(collection) && Array.prototype.filter) {\n                return collection.filter(filterCallback);\n            }\n            var filtered = [];\n\n            helpers$1.each(collection, function(item) {\n                if (filterCallback(item)) {\n                    filtered.push(item);\n                }\n            });\n\n            return filtered;\n        };\n        helpers$1.findIndex = Array.prototype.findIndex ?\n            function(array, callback, scope) {\n                return array.findIndex(callback, scope);\n            } :\n            function(array, callback, scope) {\n                scope = scope === undefined ? array : scope;\n                for (var i = 0, ilen = array.length; i < ilen; ++i) {\n                    if (callback.call(scope, array[i], i, array)) {\n                        return i;\n                    }\n                }\n                return -1;\n            };\n        helpers$1.findNextWhere = function(arrayToSearch, filterCallback, startIndex) {\n            // Default to start of the array\n            if (helpers$1.isNullOrUndef(startIndex)) {\n                startIndex = -1;\n            }\n            for (var i = startIndex + 1; i < arrayToSearch.length; i++) {\n                var currentItem = arrayToSearch[i];\n                if (filterCallback(currentItem)) {\n                    return currentItem;\n                }\n            }\n        };\n        helpers$1.findPreviousWhere = function(arrayToSearch, filterCallback, startIndex) {\n            // Default to end of the array\n            if (helpers$1.isNullOrUndef(startIndex)) {\n                startIndex = arrayToSearch.length;\n            }\n            for (var i = startIndex - 1; i >= 0; i--) {\n                var currentItem = arrayToSearch[i];\n                if (filterCallback(currentItem)) {\n                    return currentItem;\n                }\n            }\n        };\n\n        // -- Math methods\n        helpers$1.isNumber = function(n) {\n            return !isNaN(parseFloat(n)) && isFinite(n);\n        };\n        helpers$1.almostEquals = function(x, y, epsilon) {\n            return Math.abs(x - y) < epsilon;\n        };\n        helpers$1.almostWhole = function(x, epsilon) {\n            var rounded = Math.round(x);\n            return (((rounded - epsilon) < x) && ((rounded + epsilon) > x));\n        };\n        helpers$1.max = function(array) {\n            return array.reduce(function(max, value) {\n                if (!isNaN(value)) {\n                    return Math.max(max, value);\n                }\n                return max;\n            }, Number.NEGATIVE_INFINITY);\n        };\n        helpers$1.min = function(array) {\n            return array.reduce(function(min, value) {\n                if (!isNaN(value)) {\n                    return Math.min(min, value);\n                }\n                return min;\n            }, Number.POSITIVE_INFINITY);\n        };\n        helpers$1.sign = Math.sign ?\n            function(x) {\n                return Math.sign(x);\n            } :\n            function(x) {\n                x = +x; // convert to a number\n                if (x === 0 || isNaN(x)) {\n                    return x;\n                }\n                return x > 0 ? 1 : -1;\n            };\n        helpers$1.log10 = Math.log10 ?\n            function(x) {\n                return Math.log10(x);\n            } :\n            function(x) {\n                var exponent = Math.log(x) * Math.LOG10E; // Math.LOG10E = 1 / Math.LN10.\n                // Check for whole powers of 10,\n                // which due to floating point rounding error should be corrected.\n                var powerOf10 = Math.round(exponent);\n                var isPowerOf10 = x === Math.pow(10, powerOf10);\n\n                return isPowerOf10 ? powerOf10 : exponent;\n            };\n        helpers$1.toRadians = function(degrees) {\n            return degrees * (Math.PI / 180);\n        };\n        helpers$1.toDegrees = function(radians) {\n            return radians * (180 / Math.PI);\n        };\n\n        /**\n         * Returns the number of decimal places\n         * i.e. the number of digits after the decimal point, of the value of this Number.\n         * @param {number} x - A number.\n         * @returns {number} The number of decimal places.\n         * @private\n         */\n        helpers$1._decimalPlaces = function(x) {\n            if (!helpers$1.isFinite(x)) {\n                return;\n            }\n            var e = 1;\n            var p = 0;\n            while (Math.round(x * e) / e !== x) {\n                e *= 10;\n                p++;\n            }\n            return p;\n        };\n\n        // Gets the angle from vertical upright to the point about a centre.\n        helpers$1.getAngleFromPoint = function(centrePoint, anglePoint) {\n            var distanceFromXCenter = anglePoint.x - centrePoint.x;\n            var distanceFromYCenter = anglePoint.y - centrePoint.y;\n            var radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n\n            var angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n            if (angle < (-0.5 * Math.PI)) {\n                angle += 2.0 * Math.PI; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n            }\n\n            return {\n                angle: angle,\n                distance: radialDistanceFromCenter\n            };\n        };\n        helpers$1.distanceBetweenPoints = function(pt1, pt2) {\n            return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n        };\n\n        /**\n         * Provided for backward compatibility, not available anymore\n         * @function Chart.helpers.aliasPixel\n         * @deprecated since version 2.8.0\n         * @todo remove at version 3\n         */\n        helpers$1.aliasPixel = function(pixelWidth) {\n            return (pixelWidth % 2 === 0) ? 0 : 0.5;\n        };\n\n        /**\n         * Returns the aligned pixel value to avoid anti-aliasing blur\n         * @param {Chart} chart - The chart instance.\n         * @param {number} pixel - A pixel value.\n         * @param {number} width - The width of the element.\n         * @returns {number} The aligned pixel value.\n         * @private\n         */\n        helpers$1._alignPixel = function(chart, pixel, width) {\n            var devicePixelRatio = chart.currentDevicePixelRatio;\n            var halfWidth = width / 2;\n            return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n        };\n\n        helpers$1.splineCurve = function(firstPoint, middlePoint, afterPoint, t) {\n            // Props to Rob Spencer at scaled innovation for his post on splining between points\n            // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n\n            // This function must also respect \"skipped\" points\n\n            var previous = firstPoint.skip ? middlePoint : firstPoint;\n            var current = middlePoint;\n            var next = afterPoint.skip ? middlePoint : afterPoint;\n\n            var d01 = Math.sqrt(Math.pow(current.x - previous.x, 2) + Math.pow(current.y - previous.y, 2));\n            var d12 = Math.sqrt(Math.pow(next.x - current.x, 2) + Math.pow(next.y - current.y, 2));\n\n            var s01 = d01 / (d01 + d12);\n            var s12 = d12 / (d01 + d12);\n\n            // If all points are the same, s01 & s02 will be inf\n            s01 = isNaN(s01) ? 0 : s01;\n            s12 = isNaN(s12) ? 0 : s12;\n\n            var fa = t * s01; // scaling factor for triangle Ta\n            var fb = t * s12;\n\n            return {\n                previous: {\n                    x: current.x - fa * (next.x - previous.x),\n                    y: current.y - fa * (next.y - previous.y)\n                },\n                next: {\n                    x: current.x + fb * (next.x - previous.x),\n                    y: current.y + fb * (next.y - previous.y)\n                }\n            };\n        };\n        helpers$1.EPSILON = Number.EPSILON || 1e-14;\n        helpers$1.splineCurveMonotone = function(points) {\n            // This function calculates Bézier control points in a similar way than |splineCurve|,\n            // but preserves monotonicity of the provided data and ensures no local extremums are added\n            // between the dataset discrete points due to the interpolation.\n            // See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n\n            var pointsWithTangents = (points || []).map(function(point) {\n                return {\n                    model: point._model,\n                    deltaK: 0,\n                    mK: 0\n                };\n            });\n\n            // Calculate slopes (deltaK) and initialize tangents (mK)\n            var pointsLen = pointsWithTangents.length;\n            var i, pointBefore, pointCurrent, pointAfter;\n            for (i = 0; i < pointsLen; ++i) {\n                pointCurrent = pointsWithTangents[i];\n                if (pointCurrent.model.skip) {\n                    continue;\n                }\n\n                pointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\n                pointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\n                if (pointAfter && !pointAfter.model.skip) {\n                    var slopeDeltaX = (pointAfter.model.x - pointCurrent.model.x);\n\n                    // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n                    pointCurrent.deltaK = slopeDeltaX !== 0 ? (pointAfter.model.y - pointCurrent.model.y) / slopeDeltaX : 0;\n                }\n\n                if (!pointBefore || pointBefore.model.skip) {\n                    pointCurrent.mK = pointCurrent.deltaK;\n                } else if (!pointAfter || pointAfter.model.skip) {\n                    pointCurrent.mK = pointBefore.deltaK;\n                } else if (this.sign(pointBefore.deltaK) !== this.sign(pointCurrent.deltaK)) {\n                    pointCurrent.mK = 0;\n                } else {\n                    pointCurrent.mK = (pointBefore.deltaK + pointCurrent.deltaK) / 2;\n                }\n            }\n\n            // Adjust tangents to ensure monotonic properties\n            var alphaK, betaK, tauK, squaredMagnitude;\n            for (i = 0; i < pointsLen - 1; ++i) {\n                pointCurrent = pointsWithTangents[i];\n                pointAfter = pointsWithTangents[i + 1];\n                if (pointCurrent.model.skip || pointAfter.model.skip) {\n                    continue;\n                }\n\n                if (helpers$1.almostEquals(pointCurrent.deltaK, 0, this.EPSILON)) {\n                    pointCurrent.mK = pointAfter.mK = 0;\n                    continue;\n                }\n\n                alphaK = pointCurrent.mK / pointCurrent.deltaK;\n                betaK = pointAfter.mK / pointCurrent.deltaK;\n                squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n                if (squaredMagnitude <= 9) {\n                    continue;\n                }\n\n                tauK = 3 / Math.sqrt(squaredMagnitude);\n                pointCurrent.mK = alphaK * tauK * pointCurrent.deltaK;\n                pointAfter.mK = betaK * tauK * pointCurrent.deltaK;\n            }\n\n            // Compute control points\n            var deltaX;\n            for (i = 0; i < pointsLen; ++i) {\n                pointCurrent = pointsWithTangents[i];\n                if (pointCurrent.model.skip) {\n                    continue;\n                }\n\n                pointBefore = i > 0 ? pointsWithTangents[i - 1] : null;\n                pointAfter = i < pointsLen - 1 ? pointsWithTangents[i + 1] : null;\n                if (pointBefore && !pointBefore.model.skip) {\n                    deltaX = (pointCurrent.model.x - pointBefore.model.x) / 3;\n                    pointCurrent.model.controlPointPreviousX = pointCurrent.model.x - deltaX;\n                    pointCurrent.model.controlPointPreviousY = pointCurrent.model.y - deltaX * pointCurrent.mK;\n                }\n                if (pointAfter && !pointAfter.model.skip) {\n                    deltaX = (pointAfter.model.x - pointCurrent.model.x) / 3;\n                    pointCurrent.model.controlPointNextX = pointCurrent.model.x + deltaX;\n                    pointCurrent.model.controlPointNextY = pointCurrent.model.y + deltaX * pointCurrent.mK;\n                }\n            }\n        };\n        helpers$1.nextItem = function(collection, index, loop) {\n            if (loop) {\n                return index >= collection.length - 1 ? collection[0] : collection[index + 1];\n            }\n            return index >= collection.length - 1 ? collection[collection.length - 1] : collection[index + 1];\n        };\n        helpers$1.previousItem = function(collection, index, loop) {\n            if (loop) {\n                return index <= 0 ? collection[collection.length - 1] : collection[index - 1];\n            }\n            return index <= 0 ? collection[0] : collection[index - 1];\n        };\n        // Implementation of the nice number algorithm used in determining where axis labels will go\n        helpers$1.niceNum = function(range, round) {\n            var exponent = Math.floor(helpers$1.log10(range));\n            var fraction = range / Math.pow(10, exponent);\n            var niceFraction;\n\n            if (round) {\n                if (fraction < 1.5) {\n                    niceFraction = 1;\n                } else if (fraction < 3) {\n                    niceFraction = 2;\n                } else if (fraction < 7) {\n                    niceFraction = 5;\n                } else {\n                    niceFraction = 10;\n                }\n            } else if (fraction <= 1.0) {\n                niceFraction = 1;\n            } else if (fraction <= 2) {\n                niceFraction = 2;\n            } else if (fraction <= 5) {\n                niceFraction = 5;\n            } else {\n                niceFraction = 10;\n            }\n\n            return niceFraction * Math.pow(10, exponent);\n        };\n        // Request animation polyfill - https://www.paulirish.com/2011/requestanimationframe-for-smart-animating/\n        helpers$1.requestAnimFrame = (function() {\n            if (typeof window === 'undefined') {\n                return function(callback) {\n                    callback();\n                };\n            }\n            return window.requestAnimationFrame ||\n                window.webkitRequestAnimationFrame ||\n                window.mozRequestAnimationFrame ||\n                window.oRequestAnimationFrame ||\n                window.msRequestAnimationFrame ||\n                function(callback) {\n                    return window.setTimeout(callback, 1000 / 60);\n                };\n        }());\n        // -- DOM methods\n        helpers$1.getRelativePosition = function(evt, chart) {\n            var mouseX, mouseY;\n            var e = evt.originalEvent || evt;\n            var canvas = evt.target || evt.srcElement;\n            var boundingRect = canvas.getBoundingClientRect();\n\n            var touches = e.touches;\n            if (touches && touches.length > 0) {\n                mouseX = touches[0].clientX;\n                mouseY = touches[0].clientY;\n\n            } else {\n                mouseX = e.clientX;\n                mouseY = e.clientY;\n            }\n\n            // Scale mouse coordinates into canvas coordinates\n            // by following the pattern laid out by 'jerryj' in the comments of\n            // https://www.html5canvastutorials.com/advanced/html5-canvas-mouse-coordinates/\n            var paddingLeft = parseFloat(helpers$1.getStyle(canvas, 'padding-left'));\n            var paddingTop = parseFloat(helpers$1.getStyle(canvas, 'padding-top'));\n            var paddingRight = parseFloat(helpers$1.getStyle(canvas, 'padding-right'));\n            var paddingBottom = parseFloat(helpers$1.getStyle(canvas, 'padding-bottom'));\n            var width = boundingRect.right - boundingRect.left - paddingLeft - paddingRight;\n            var height = boundingRect.bottom - boundingRect.top - paddingTop - paddingBottom;\n\n            // We divide by the current device pixel ratio, because the canvas is scaled up by that amount in each direction. However\n            // the backend model is in unscaled coordinates. Since we are going to deal with our model coordinates, we go back here\n            mouseX = Math.round((mouseX - boundingRect.left - paddingLeft) / (width) * canvas.width / chart.currentDevicePixelRatio);\n            mouseY = Math.round((mouseY - boundingRect.top - paddingTop) / (height) * canvas.height / chart.currentDevicePixelRatio);\n\n            return {\n                x: mouseX,\n                y: mouseY\n            };\n\n        };\n\n        // Private helper function to convert max-width/max-height values that may be percentages into a number\n        function parseMaxStyle(styleValue, node, parentProperty) {\n            var valueInPixels;\n            if (typeof styleValue === 'string') {\n                valueInPixels = parseInt(styleValue, 10);\n\n                if (styleValue.indexOf('%') !== -1) {\n                    // percentage * size in dimension\n                    valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n                }\n            } else {\n                valueInPixels = styleValue;\n            }\n\n            return valueInPixels;\n        }\n\n        /**\n         * Returns if the given value contains an effective constraint.\n         * @private\n         */\n        function isConstrainedValue(value) {\n            return value !== undefined && value !== null && value !== 'none';\n        }\n\n        /**\n         * Returns the max width or height of the given DOM node in a cross-browser compatible fashion\n         * @param {HTMLElement} domNode - the node to check the constraint on\n         * @param {string} maxStyle - the style that defines the maximum for the direction we are using ('max-width' / 'max-height')\n         * @param {string} percentageProperty - property of parent to use when calculating width as a percentage\n         * @see {@link https://www.nathanaeljones.com/blog/2013/reading-max-width-cross-browser}\n         */\n        function getConstraintDimension(domNode, maxStyle, percentageProperty) {\n            var view = document.defaultView;\n            var parentNode = helpers$1._getParentNode(domNode);\n            var constrainedNode = view.getComputedStyle(domNode)[maxStyle];\n            var constrainedContainer = view.getComputedStyle(parentNode)[maxStyle];\n            var hasCNode = isConstrainedValue(constrainedNode);\n            var hasCContainer = isConstrainedValue(constrainedContainer);\n            var infinity = Number.POSITIVE_INFINITY;\n\n            if (hasCNode || hasCContainer) {\n                return Math.min(\n                    hasCNode ? parseMaxStyle(constrainedNode, domNode, percentageProperty) : infinity,\n                    hasCContainer ? parseMaxStyle(constrainedContainer, parentNode, percentageProperty) : infinity);\n            }\n\n            return 'none';\n        }\n        // returns Number or undefined if no constraint\n        helpers$1.getConstraintWidth = function(domNode) {\n            return getConstraintDimension(domNode, 'max-width', 'clientWidth');\n        };\n        // returns Number or undefined if no constraint\n        helpers$1.getConstraintHeight = function(domNode) {\n            return getConstraintDimension(domNode, 'max-height', 'clientHeight');\n        };\n        /**\n         * @private\n          */\n        helpers$1._calculatePadding = function(container, padding, parentDimension) {\n            padding = helpers$1.getStyle(container, padding);\n\n            return padding.indexOf('%') > -1 ? parentDimension * parseInt(padding, 10) / 100 : parseInt(padding, 10);\n        };\n        /**\n         * @private\n         */\n        helpers$1._getParentNode = function(domNode) {\n            var parent = domNode.parentNode;\n            if (parent && parent.toString() === '[object ShadowRoot]') {\n                parent = parent.host;\n            }\n            return parent;\n        };\n        helpers$1.getMaximumWidth = function(domNode) {\n            var container = helpers$1._getParentNode(domNode);\n            if (!container) {\n                return domNode.clientWidth;\n            }\n\n            var clientWidth = container.clientWidth;\n            var paddingLeft = helpers$1._calculatePadding(container, 'padding-left', clientWidth);\n            var paddingRight = helpers$1._calculatePadding(container, 'padding-right', clientWidth);\n\n            var w = clientWidth - paddingLeft - paddingRight;\n            var cw = helpers$1.getConstraintWidth(domNode);\n            return isNaN(cw) ? w : Math.min(w, cw);\n        };\n        helpers$1.getMaximumHeight = function(domNode) {\n            var container = helpers$1._getParentNode(domNode);\n            if (!container) {\n                return domNode.clientHeight;\n            }\n\n            var clientHeight = container.clientHeight;\n            var paddingTop = helpers$1._calculatePadding(container, 'padding-top', clientHeight);\n            var paddingBottom = helpers$1._calculatePadding(container, 'padding-bottom', clientHeight);\n\n            var h = clientHeight - paddingTop - paddingBottom;\n            var ch = helpers$1.getConstraintHeight(domNode);\n            return isNaN(ch) ? h : Math.min(h, ch);\n        };\n        helpers$1.getStyle = function(el, property) {\n            return el.currentStyle ?\n                el.currentStyle[property] :\n                document.defaultView.getComputedStyle(el, null).getPropertyValue(property);\n        };\n        helpers$1.retinaScale = function(chart, forceRatio) {\n            var pixelRatio = chart.currentDevicePixelRatio = forceRatio || (typeof window !== 'undefined' && window.devicePixelRatio) || 1;\n            if (pixelRatio === 1) {\n                return;\n            }\n\n            var canvas = chart.canvas;\n            var height = chart.height;\n            var width = chart.width;\n\n            canvas.height = height * pixelRatio;\n            canvas.width = width * pixelRatio;\n            chart.ctx.scale(pixelRatio, pixelRatio);\n\n            // If no style has been set on the canvas, the render size is used as display size,\n            // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n            // See https://github.com/chartjs/Chart.js/issues/3575\n            if (!canvas.style.height && !canvas.style.width) {\n                canvas.style.height = height + 'px';\n                canvas.style.width = width + 'px';\n            }\n        };\n        // -- Canvas methods\n        helpers$1.fontString = function(pixelSize, fontStyle, fontFamily) {\n            return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n        };\n        helpers$1.longestText = function(ctx, font, arrayOfThings, cache) {\n            cache = cache || {};\n            var data = cache.data = cache.data || {};\n            var gc = cache.garbageCollect = cache.garbageCollect || [];\n\n            if (cache.font !== font) {\n                data = cache.data = {};\n                gc = cache.garbageCollect = [];\n                cache.font = font;\n            }\n\n            ctx.font = font;\n            var longest = 0;\n            helpers$1.each(arrayOfThings, function(thing) {\n                // Undefined strings and arrays should not be measured\n                if (thing !== undefined && thing !== null && helpers$1.isArray(thing) !== true) {\n                    longest = helpers$1.measureText(ctx, data, gc, longest, thing);\n                } else if (helpers$1.isArray(thing)) {\n                    // if it is an array lets measure each element\n                    // to do maybe simplify this function a bit so we can do this more recursively?\n                    helpers$1.each(thing, function(nestedThing) {\n                        // Undefined strings and arrays should not be measured\n                        if (nestedThing !== undefined && nestedThing !== null && !helpers$1.isArray(nestedThing)) {\n                            longest = helpers$1.measureText(ctx, data, gc, longest, nestedThing);\n                        }\n                    });\n                }\n            });\n\n            var gcLen = gc.length / 2;\n            if (gcLen > arrayOfThings.length) {\n                for (var i = 0; i < gcLen; i++) {\n                    delete data[gc[i]];\n                }\n                gc.splice(0, gcLen);\n            }\n            return longest;\n        };\n        helpers$1.measureText = function(ctx, data, gc, longest, string) {\n            var textWidth = data[string];\n            if (!textWidth) {\n                textWidth = data[string] = ctx.measureText(string).width;\n                gc.push(string);\n            }\n            if (textWidth > longest) {\n                longest = textWidth;\n            }\n            return longest;\n        };\n        helpers$1.numberOfLabelLines = function(arrayOfThings) {\n            var numberOfLines = 1;\n            helpers$1.each(arrayOfThings, function(thing) {\n                if (helpers$1.isArray(thing)) {\n                    if (thing.length > numberOfLines) {\n                        numberOfLines = thing.length;\n                    }\n                }\n            });\n            return numberOfLines;\n        };\n\n        helpers$1.color = !chartjsColor ?\n            function(value) {\n                console.error('Color.js not found!');\n                return value;\n            } :\n            function(value) {\n                /* global CanvasGradient */\n                if (value instanceof CanvasGradient) {\n                    value = core_defaults.global.defaultColor;\n                }\n\n                return chartjsColor(value);\n            };\n\n        helpers$1.getHoverColor = function(colorValue) {\n            /* global CanvasPattern */\n            return (colorValue instanceof CanvasPattern || colorValue instanceof CanvasGradient) ?\n                colorValue :\n                helpers$1.color(colorValue).saturate(0.5).darken(0.1).rgbString();\n        };\n    };\n\n    function abstract() {\n        throw new Error(\n            'This method is not implemented: either no adapter can ' +\n            'be found or an incomplete integration was provided.'\n        );\n    }\n\n    /**\n     * Date adapter (current used by the time scale)\n     * @namespace Chart._adapters._date\n     * @memberof Chart._adapters\n     * @private\n     */\n\n    /**\n     * Currently supported unit string values.\n     * @typedef {('millisecond'|'second'|'minute'|'hour'|'day'|'week'|'month'|'quarter'|'year')}\n     * @memberof Chart._adapters._date\n     * @name Unit\n     */\n\n    /**\n     * @class\n     */\n    function DateAdapter(options) {\n        this.options = options || {};\n    }\n\n    helpers$1.extend(DateAdapter.prototype, /** @lends DateAdapter */ {\n        /**\n         * Returns a map of time formats for the supported formatting units defined\n         * in Unit as well as 'datetime' representing a detailed date/time string.\n         * @returns {{string: string}}\n         */\n        formats: abstract,\n\n        /**\n         * Parses the given `value` and return the associated timestamp.\n         * @param {any} value - the value to parse (usually comes from the data)\n         * @param {string} [format] - the expected data format\n         * @returns {(number|null)}\n         * @function\n         */\n        parse: abstract,\n\n        /**\n         * Returns the formatted date in the specified `format` for a given `timestamp`.\n         * @param {number} timestamp - the timestamp to format\n         * @param {string} format - the date/time token\n         * @return {string}\n         * @function\n         */\n        format: abstract,\n\n        /**\n         * Adds the specified `amount` of `unit` to the given `timestamp`.\n         * @param {number} timestamp - the input timestamp\n         * @param {number} amount - the amount to add\n         * @param {Unit} unit - the unit as string\n         * @return {number}\n         * @function\n         */\n        add: abstract,\n\n        /**\n         * Returns the number of `unit` between the given timestamps.\n         * @param {number} max - the input timestamp (reference)\n         * @param {number} min - the timestamp to substract\n         * @param {Unit} unit - the unit as string\n         * @return {number}\n         * @function\n         */\n        diff: abstract,\n\n        /**\n         * Returns start of `unit` for the given `timestamp`.\n         * @param {number} timestamp - the input timestamp\n         * @param {Unit} unit - the unit as string\n         * @param {number} [weekday] - the ISO day of the week with 1 being Monday\n         * and 7 being Sunday (only needed if param *unit* is `isoWeek`).\n         * @function\n         */\n        startOf: abstract,\n\n        /**\n         * Returns end of `unit` for the given `timestamp`.\n         * @param {number} timestamp - the input timestamp\n         * @param {Unit} unit - the unit as string\n         * @function\n         */\n        endOf: abstract,\n\n        // DEPRECATIONS\n\n        /**\n         * Provided for backward compatibility for scale.getValueForPixel(),\n         * this method should be overridden only by the moment adapter.\n         * @deprecated since version 2.8.0\n         * @todo remove at version 3\n         * @private\n         */\n        _create: function(value) {\n            return value;\n        }\n    });\n\n    DateAdapter.override = function(members) {\n        helpers$1.extend(DateAdapter.prototype, members);\n    };\n\n    var _date = DateAdapter;\n\n    var core_adapters = {\n        _date: _date\n    };\n\n    /**\n     * Namespace to hold static tick generation functions\n     * @namespace Chart.Ticks\n     */\n    var core_ticks = {\n        /**\n         * Namespace to hold formatters for different types of ticks\n         * @namespace Chart.Ticks.formatters\n         */\n        formatters: {\n            /**\n             * Formatter for value labels\n             * @method Chart.Ticks.formatters.values\n             * @param value the value to display\n             * @return {string|string[]} the label to display\n             */\n            values: function(value) {\n                return helpers$1.isArray(value) ? value : '' + value;\n            },\n\n            /**\n             * Formatter for linear numeric ticks\n             * @method Chart.Ticks.formatters.linear\n             * @param tickValue {number} the value to be formatted\n             * @param index {number} the position of the tickValue parameter in the ticks array\n             * @param ticks {number[]} the list of ticks being converted\n             * @return {string} string representation of the tickValue parameter\n             */\n            linear: function(tickValue, index, ticks) {\n                // If we have lots of ticks, don't use the ones\n                var delta = ticks.length > 3 ? ticks[2] - ticks[1] : ticks[1] - ticks[0];\n\n                // If we have a number like 2.5 as the delta, figure out how many decimal places we need\n                if (Math.abs(delta) > 1) {\n                    if (tickValue !== Math.floor(tickValue)) {\n                        // not an integer\n                        delta = tickValue - Math.floor(tickValue);\n                    }\n                }\n\n                var logDelta = helpers$1.log10(Math.abs(delta));\n                var tickString = '';\n\n                if (tickValue !== 0) {\n                    var maxTick = Math.max(Math.abs(ticks[0]), Math.abs(ticks[ticks.length - 1]));\n                    if (maxTick < 1e-4) { // all ticks are small numbers; use scientific notation\n                        var logTick = helpers$1.log10(Math.abs(tickValue));\n                        tickString = tickValue.toExponential(Math.floor(logTick) - Math.floor(logDelta));\n                    } else {\n                        var numDecimal = -1 * Math.floor(logDelta);\n                        numDecimal = Math.max(Math.min(numDecimal, 20), 0); // toFixed has a max of 20 decimal places\n                        tickString = tickValue.toFixed(numDecimal);\n                    }\n                } else {\n                    tickString = '0'; // never show decimal places for 0\n                }\n\n                return tickString;\n            },\n\n            logarithmic: function(tickValue, index, ticks) {\n                var remain = tickValue / (Math.pow(10, Math.floor(helpers$1.log10(tickValue))));\n\n                if (tickValue === 0) {\n                    return '0';\n                } else if (remain === 1 || remain === 2 || remain === 5 || index === 0 || index === ticks.length - 1) {\n                    return tickValue.toExponential();\n                }\n                return '';\n            }\n        }\n    };\n\n    var valueOrDefault$9 = helpers$1.valueOrDefault;\n    var valueAtIndexOrDefault = helpers$1.valueAtIndexOrDefault;\n\n    core_defaults._set('scale', {\n        display: true,\n        position: 'left',\n        offset: false,\n\n        // grid line settings\n        gridLines: {\n            display: true,\n            color: 'rgba(0, 0, 0, 0.1)',\n            lineWidth: 1,\n            drawBorder: true,\n            drawOnChartArea: true,\n            drawTicks: true,\n            tickMarkLength: 10,\n            zeroLineWidth: 1,\n            zeroLineColor: 'rgba(0,0,0,0.25)',\n            zeroLineBorderDash: [],\n            zeroLineBorderDashOffset: 0.0,\n            offsetGridLines: false,\n            borderDash: [],\n            borderDashOffset: 0.0\n        },\n\n        // scale label\n        scaleLabel: {\n            // display property\n            display: false,\n\n            // actual label\n            labelString: '',\n\n            // top/bottom padding\n            padding: {\n                top: 4,\n                bottom: 4\n            }\n        },\n\n        // label settings\n        ticks: {\n            beginAtZero: false,\n            minRotation: 0,\n            maxRotation: 50,\n            mirror: false,\n            padding: 0,\n            reverse: false,\n            display: true,\n            autoSkip: true,\n            autoSkipPadding: 0,\n            labelOffset: 0,\n            // We pass through arrays to be rendered as multiline labels, we convert Others to strings here.\n            callback: core_ticks.formatters.values,\n            minor: {},\n            major: {}\n        }\n    });\n\n    function labelsFromTicks(ticks) {\n        var labels = [];\n        var i, ilen;\n\n        for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n            labels.push(ticks[i].label);\n        }\n\n        return labels;\n    }\n\n    function getPixelForGridLine(scale, index, offsetGridLines) {\n        var lineValue = scale.getPixelForTick(index);\n\n        if (offsetGridLines) {\n            if (scale.getTicks().length === 1) {\n                lineValue -= scale.isHorizontal() ?\n                    Math.max(lineValue - scale.left, scale.right - lineValue) :\n                    Math.max(lineValue - scale.top, scale.bottom - lineValue);\n            } else if (index === 0) {\n                lineValue -= (scale.getPixelForTick(1) - lineValue) / 2;\n            } else {\n                lineValue -= (lineValue - scale.getPixelForTick(index - 1)) / 2;\n            }\n        }\n        return lineValue;\n    }\n\n    function computeTextSize(context, tick, font) {\n        return helpers$1.isArray(tick) ?\n            helpers$1.longestText(context, font, tick) :\n            context.measureText(tick).width;\n    }\n\n    var core_scale = core_element.extend({\n        /**\n         * Get the padding needed for the scale\n         * @method getPadding\n         * @private\n         * @returns {Padding} the necessary padding\n         */\n        getPadding: function() {\n            var me = this;\n            return {\n                left: me.paddingLeft || 0,\n                top: me.paddingTop || 0,\n                right: me.paddingRight || 0,\n                bottom: me.paddingBottom || 0\n            };\n        },\n\n        /**\n         * Returns the scale tick objects ({label, major})\n         * @since 2.7\n         */\n        getTicks: function() {\n            return this._ticks;\n        },\n\n        // These methods are ordered by lifecyle. Utilities then follow.\n        // Any function defined here is inherited by all scale types.\n        // Any function can be extended by the scale type\n\n        mergeTicksOptions: function() {\n            var ticks = this.options.ticks;\n            if (ticks.minor === false) {\n                ticks.minor = {\n                    display: false\n                };\n            }\n            if (ticks.major === false) {\n                ticks.major = {\n                    display: false\n                };\n            }\n            for (var key in ticks) {\n                if (key !== 'major' && key !== 'minor') {\n                    if (typeof ticks.minor[key] === 'undefined') {\n                        ticks.minor[key] = ticks[key];\n                    }\n                    if (typeof ticks.major[key] === 'undefined') {\n                        ticks.major[key] = ticks[key];\n                    }\n                }\n            }\n        },\n        beforeUpdate: function() {\n            helpers$1.callback(this.options.beforeUpdate, [this]);\n        },\n\n        update: function(maxWidth, maxHeight, margins) {\n            var me = this;\n            var i, ilen, labels, label, ticks, tick;\n\n            // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n            me.beforeUpdate();\n\n            // Absorb the master measurements\n            me.maxWidth = maxWidth;\n            me.maxHeight = maxHeight;\n            me.margins = helpers$1.extend({\n                left: 0,\n                right: 0,\n                top: 0,\n                bottom: 0\n            }, margins);\n\n            me._maxLabelLines = 0;\n            me.longestLabelWidth = 0;\n            me.longestTextCache = me.longestTextCache || {};\n\n            // Dimensions\n            me.beforeSetDimensions();\n            me.setDimensions();\n            me.afterSetDimensions();\n\n            // Data min/max\n            me.beforeDataLimits();\n            me.determineDataLimits();\n            me.afterDataLimits();\n\n            // Ticks - `this.ticks` is now DEPRECATED!\n            // Internal ticks are now stored as objects in the PRIVATE `this._ticks` member\n            // and must not be accessed directly from outside this class. `this.ticks` being\n            // around for long time and not marked as private, we can't change its structure\n            // without unexpected breaking changes. If you need to access the scale ticks,\n            // use scale.getTicks() instead.\n\n            me.beforeBuildTicks();\n\n            // New implementations should return an array of objects but for BACKWARD COMPAT,\n            // we still support no return (`this.ticks` internally set by calling this method).\n            ticks = me.buildTicks() || [];\n\n            // Allow modification of ticks in callback.\n            ticks = me.afterBuildTicks(ticks) || ticks;\n\n            me.beforeTickToLabelConversion();\n\n            // New implementations should return the formatted tick labels but for BACKWARD\n            // COMPAT, we still support no return (`this.ticks` internally changed by calling\n            // this method and supposed to contain only string values).\n            labels = me.convertTicksToLabels(ticks) || me.ticks;\n\n            me.afterTickToLabelConversion();\n\n            me.ticks = labels;   // BACKWARD COMPATIBILITY\n\n            // IMPORTANT: from this point, we consider that `this.ticks` will NEVER change!\n\n            // BACKWARD COMPAT: synchronize `_ticks` with labels (so potentially `this.ticks`)\n            for (i = 0, ilen = labels.length; i < ilen; ++i) {\n                label = labels[i];\n                tick = ticks[i];\n                if (!tick) {\n                    ticks.push(tick = {\n                        label: label,\n                        major: false\n                    });\n                } else {\n                    tick.label = label;\n                }\n            }\n\n            me._ticks = ticks;\n\n            // Tick Rotation\n            me.beforeCalculateTickRotation();\n            me.calculateTickRotation();\n            me.afterCalculateTickRotation();\n            // Fit\n            me.beforeFit();\n            me.fit();\n            me.afterFit();\n            //\n            me.afterUpdate();\n\n            return me.minSize;\n\n        },\n        afterUpdate: function() {\n            helpers$1.callback(this.options.afterUpdate, [this]);\n        },\n\n        //\n\n        beforeSetDimensions: function() {\n            helpers$1.callback(this.options.beforeSetDimensions, [this]);\n        },\n        setDimensions: function() {\n            var me = this;\n            // Set the unconstrained dimension before label rotation\n            if (me.isHorizontal()) {\n                // Reset position before calculating rotation\n                me.width = me.maxWidth;\n                me.left = 0;\n                me.right = me.width;\n            } else {\n                me.height = me.maxHeight;\n\n                // Reset position before calculating rotation\n                me.top = 0;\n                me.bottom = me.height;\n            }\n\n            // Reset padding\n            me.paddingLeft = 0;\n            me.paddingTop = 0;\n            me.paddingRight = 0;\n            me.paddingBottom = 0;\n        },\n        afterSetDimensions: function() {\n            helpers$1.callback(this.options.afterSetDimensions, [this]);\n        },\n\n        // Data limits\n        beforeDataLimits: function() {\n            helpers$1.callback(this.options.beforeDataLimits, [this]);\n        },\n        determineDataLimits: helpers$1.noop,\n        afterDataLimits: function() {\n            helpers$1.callback(this.options.afterDataLimits, [this]);\n        },\n\n        //\n        beforeBuildTicks: function() {\n            helpers$1.callback(this.options.beforeBuildTicks, [this]);\n        },\n        buildTicks: helpers$1.noop,\n        afterBuildTicks: function(ticks) {\n            var me = this;\n            // ticks is empty for old axis implementations here\n            if (helpers$1.isArray(ticks) && ticks.length) {\n                return helpers$1.callback(me.options.afterBuildTicks, [me, ticks]);\n            }\n            // Support old implementations (that modified `this.ticks` directly in buildTicks)\n            me.ticks = helpers$1.callback(me.options.afterBuildTicks, [me, me.ticks]) || me.ticks;\n            return ticks;\n        },\n\n        beforeTickToLabelConversion: function() {\n            helpers$1.callback(this.options.beforeTickToLabelConversion, [this]);\n        },\n        convertTicksToLabels: function() {\n            var me = this;\n            // Convert ticks to strings\n            var tickOpts = me.options.ticks;\n            me.ticks = me.ticks.map(tickOpts.userCallback || tickOpts.callback, this);\n        },\n        afterTickToLabelConversion: function() {\n            helpers$1.callback(this.options.afterTickToLabelConversion, [this]);\n        },\n\n        //\n\n        beforeCalculateTickRotation: function() {\n            helpers$1.callback(this.options.beforeCalculateTickRotation, [this]);\n        },\n        calculateTickRotation: function() {\n            var me = this;\n            var context = me.ctx;\n            var tickOpts = me.options.ticks;\n            var labels = labelsFromTicks(me._ticks);\n\n            // Get the width of each grid by calculating the difference\n            // between x offsets between 0 and 1.\n            var tickFont = helpers$1.options._parseFont(tickOpts);\n            context.font = tickFont.string;\n\n            var labelRotation = tickOpts.minRotation || 0;\n\n            if (labels.length && me.options.display && me.isHorizontal()) {\n                var originalLabelWidth = helpers$1.longestText(context, tickFont.string, labels, me.longestTextCache);\n                var labelWidth = originalLabelWidth;\n                var cosRotation, sinRotation;\n\n                // Allow 3 pixels x2 padding either side for label readability\n                var tickWidth = me.getPixelForTick(1) - me.getPixelForTick(0) - 6;\n\n                // Max label rotation can be set or default to 90 - also act as a loop counter\n                while (labelWidth > tickWidth && labelRotation < tickOpts.maxRotation) {\n                    var angleRadians = helpers$1.toRadians(labelRotation);\n                    cosRotation = Math.cos(angleRadians);\n                    sinRotation = Math.sin(angleRadians);\n\n                    if (sinRotation * originalLabelWidth > me.maxHeight) {\n                        // go back one step\n                        labelRotation--;\n                        break;\n                    }\n\n                    labelRotation++;\n                    labelWidth = cosRotation * originalLabelWidth;\n                }\n            }\n\n            me.labelRotation = labelRotation;\n        },\n        afterCalculateTickRotation: function() {\n            helpers$1.callback(this.options.afterCalculateTickRotation, [this]);\n        },\n\n        //\n\n        beforeFit: function() {\n            helpers$1.callback(this.options.beforeFit, [this]);\n        },\n        fit: function() {\n            var me = this;\n            // Reset\n            var minSize = me.minSize = {\n                width: 0,\n                height: 0\n            };\n\n            var labels = labelsFromTicks(me._ticks);\n\n            var opts = me.options;\n            var tickOpts = opts.ticks;\n            var scaleLabelOpts = opts.scaleLabel;\n            var gridLineOpts = opts.gridLines;\n            var display = me._isVisible();\n            var position = opts.position;\n            var isHorizontal = me.isHorizontal();\n\n            var parseFont = helpers$1.options._parseFont;\n            var tickFont = parseFont(tickOpts);\n            var tickMarkLength = opts.gridLines.tickMarkLength;\n\n            // Width\n            if (isHorizontal) {\n                // subtract the margins to line up with the chartArea if we are a full width scale\n                minSize.width = me.isFullWidth() ? me.maxWidth - me.margins.left - me.margins.right : me.maxWidth;\n            } else {\n                minSize.width = display && gridLineOpts.drawTicks ? tickMarkLength : 0;\n            }\n\n            // height\n            if (isHorizontal) {\n                minSize.height = display && gridLineOpts.drawTicks ? tickMarkLength : 0;\n            } else {\n                minSize.height = me.maxHeight; // fill all the height\n            }\n\n            // Are we showing a title for the scale?\n            if (scaleLabelOpts.display && display) {\n                var scaleLabelFont = parseFont(scaleLabelOpts);\n                var scaleLabelPadding = helpers$1.options.toPadding(scaleLabelOpts.padding);\n                var deltaHeight = scaleLabelFont.lineHeight + scaleLabelPadding.height;\n\n                if (isHorizontal) {\n                    minSize.height += deltaHeight;\n                } else {\n                    minSize.width += deltaHeight;\n                }\n            }\n\n            // Don't bother fitting the ticks if we are not showing the labels\n            if (tickOpts.display && display) {\n                var largestTextWidth = helpers$1.longestText(me.ctx, tickFont.string, labels, me.longestTextCache);\n                var tallestLabelHeightInLines = helpers$1.numberOfLabelLines(labels);\n                var lineSpace = tickFont.size * 0.5;\n                var tickPadding = me.options.ticks.padding;\n\n                // Store max number of lines and widest label for _autoSkip\n                me._maxLabelLines = tallestLabelHeightInLines;\n                me.longestLabelWidth = largestTextWidth;\n\n                if (isHorizontal) {\n                    var angleRadians = helpers$1.toRadians(me.labelRotation);\n                    var cosRotation = Math.cos(angleRadians);\n                    var sinRotation = Math.sin(angleRadians);\n\n                    // TODO - improve this calculation\n                    var labelHeight = (sinRotation * largestTextWidth)\n                        + (tickFont.lineHeight * tallestLabelHeightInLines)\n                        + lineSpace; // padding\n\n                    minSize.height = Math.min(me.maxHeight, minSize.height + labelHeight + tickPadding);\n\n                    me.ctx.font = tickFont.string;\n                    var firstLabelWidth = computeTextSize(me.ctx, labels[0], tickFont.string);\n                    var lastLabelWidth = computeTextSize(me.ctx, labels[labels.length - 1], tickFont.string);\n                    var offsetLeft = me.getPixelForTick(0) - me.left;\n                    var offsetRight = me.right - me.getPixelForTick(labels.length - 1);\n                    var paddingLeft, paddingRight;\n\n                    // Ensure that our ticks are always inside the canvas. When rotated, ticks are right aligned\n                    // which means that the right padding is dominated by the font height\n                    if (me.labelRotation !== 0) {\n                        paddingLeft = position === 'bottom' ? (cosRotation * firstLabelWidth) : (cosRotation * lineSpace);\n                        paddingRight = position === 'bottom' ? (cosRotation * lineSpace) : (cosRotation * lastLabelWidth);\n                    } else {\n                        paddingLeft = firstLabelWidth / 2;\n                        paddingRight = lastLabelWidth / 2;\n                    }\n                    me.paddingLeft = Math.max(paddingLeft - offsetLeft, 0) + 3; // add 3 px to move away from canvas edges\n                    me.paddingRight = Math.max(paddingRight - offsetRight, 0) + 3;\n                } else {\n                    // A vertical axis is more constrained by the width. Labels are the\n                    // dominant factor here, so get that length first and account for padding\n                    if (tickOpts.mirror) {\n                        largestTextWidth = 0;\n                    } else {\n                        // use lineSpace for consistency with horizontal axis\n                        // tickPadding is not implemented for horizontal\n                        largestTextWidth += tickPadding + lineSpace;\n                    }\n\n                    minSize.width = Math.min(me.maxWidth, minSize.width + largestTextWidth);\n\n                    me.paddingTop = tickFont.size / 2;\n                    me.paddingBottom = tickFont.size / 2;\n                }\n            }\n\n            me.handleMargins();\n\n            me.width = minSize.width;\n            me.height = minSize.height;\n        },\n\n        /**\n         * Handle margins and padding interactions\n         * @private\n         */\n        handleMargins: function() {\n            var me = this;\n            if (me.margins) {\n                me.paddingLeft = Math.max(me.paddingLeft - me.margins.left, 0);\n                me.paddingTop = Math.max(me.paddingTop - me.margins.top, 0);\n                me.paddingRight = Math.max(me.paddingRight - me.margins.right, 0);\n                me.paddingBottom = Math.max(me.paddingBottom - me.margins.bottom, 0);\n            }\n        },\n\n        afterFit: function() {\n            helpers$1.callback(this.options.afterFit, [this]);\n        },\n\n        // Shared Methods\n        isHorizontal: function() {\n            return this.options.position === 'top' || this.options.position === 'bottom';\n        },\n        isFullWidth: function() {\n            return (this.options.fullWidth);\n        },\n\n        // Get the correct value. NaN bad inputs, If the value type is object get the x or y based on whether we are horizontal or not\n        getRightValue: function(rawValue) {\n            // Null and undefined values first\n            if (helpers$1.isNullOrUndef(rawValue)) {\n                return NaN;\n            }\n            // isNaN(object) returns true, so make sure NaN is checking for a number; Discard Infinite values\n            if ((typeof rawValue === 'number' || rawValue instanceof Number) && !isFinite(rawValue)) {\n                return NaN;\n            }\n            // If it is in fact an object, dive in one more level\n            if (rawValue) {\n                if (this.isHorizontal()) {\n                    if (rawValue.x !== undefined) {\n                        return this.getRightValue(rawValue.x);\n                    }\n                } else if (rawValue.y !== undefined) {\n                    return this.getRightValue(rawValue.y);\n                }\n            }\n\n            // Value is good, return it\n            return rawValue;\n        },\n\n        /**\n         * Used to get the value to display in the tooltip for the data at the given index\n         * @param index\n         * @param datasetIndex\n         */\n        getLabelForIndex: helpers$1.noop,\n\n        /**\n         * Returns the location of the given data point. Value can either be an index or a numerical value\n         * The coordinate (0, 0) is at the upper-left corner of the canvas\n         * @param value\n         * @param index\n         * @param datasetIndex\n         */\n        getPixelForValue: helpers$1.noop,\n\n        /**\n         * Used to get the data value from a given pixel. This is the inverse of getPixelForValue\n         * The coordinate (0, 0) is at the upper-left corner of the canvas\n         * @param pixel\n         */\n        getValueForPixel: helpers$1.noop,\n\n        /**\n         * Returns the location of the tick at the given index\n         * The coordinate (0, 0) is at the upper-left corner of the canvas\n         */\n        getPixelForTick: function(index) {\n            var me = this;\n            var offset = me.options.offset;\n            if (me.isHorizontal()) {\n                var innerWidth = me.width - (me.paddingLeft + me.paddingRight);\n                var tickWidth = innerWidth / Math.max((me._ticks.length - (offset ? 0 : 1)), 1);\n                var pixel = (tickWidth * index) + me.paddingLeft;\n\n                if (offset) {\n                    pixel += tickWidth / 2;\n                }\n\n                var finalVal = me.left + pixel;\n                finalVal += me.isFullWidth() ? me.margins.left : 0;\n                return finalVal;\n            }\n            var innerHeight = me.height - (me.paddingTop + me.paddingBottom);\n            return me.top + (index * (innerHeight / (me._ticks.length - 1)));\n        },\n\n        /**\n         * Utility for getting the pixel location of a percentage of scale\n         * The coordinate (0, 0) is at the upper-left corner of the canvas\n         */\n        getPixelForDecimal: function(decimal) {\n            var me = this;\n            if (me.isHorizontal()) {\n                var innerWidth = me.width - (me.paddingLeft + me.paddingRight);\n                var valueOffset = (innerWidth * decimal) + me.paddingLeft;\n\n                var finalVal = me.left + valueOffset;\n                finalVal += me.isFullWidth() ? me.margins.left : 0;\n                return finalVal;\n            }\n            return me.top + (decimal * me.height);\n        },\n\n        /**\n         * Returns the pixel for the minimum chart value\n         * The coordinate (0, 0) is at the upper-left corner of the canvas\n         */\n        getBasePixel: function() {\n            return this.getPixelForValue(this.getBaseValue());\n        },\n\n        getBaseValue: function() {\n            var me = this;\n            var min = me.min;\n            var max = me.max;\n\n            return me.beginAtZero ? 0 :\n                min < 0 && max < 0 ? max :\n                min > 0 && max > 0 ? min :\n                0;\n        },\n\n        /**\n         * Returns a subset of ticks to be plotted to avoid overlapping labels.\n         * @private\n         */\n        _autoSkip: function(ticks) {\n            var me = this;\n            var isHorizontal = me.isHorizontal();\n            var optionTicks = me.options.ticks.minor;\n            var tickCount = ticks.length;\n            var skipRatio = false;\n            var maxTicks = optionTicks.maxTicksLimit;\n\n            // Total space needed to display all ticks. First and last ticks are\n            // drawn as their center at end of axis, so tickCount-1\n            var ticksLength = me._tickSize() * (tickCount - 1);\n\n            // Axis length\n            var axisLength = isHorizontal\n                ? me.width - (me.paddingLeft + me.paddingRight)\n                : me.height - (me.paddingTop + me.PaddingBottom);\n\n            var result = [];\n            var i, tick;\n\n            if (ticksLength > axisLength) {\n                skipRatio = 1 + Math.floor(ticksLength / axisLength);\n            }\n\n            // if they defined a max number of optionTicks,\n            // increase skipRatio until that number is met\n            if (tickCount > maxTicks) {\n                skipRatio = Math.max(skipRatio, 1 + Math.floor(tickCount / maxTicks));\n            }\n\n            for (i = 0; i < tickCount; i++) {\n                tick = ticks[i];\n\n                if (skipRatio > 1 && i % skipRatio > 0) {\n                    // leave tick in place but make sure it's not displayed (#4635)\n                    delete tick.label;\n                }\n                result.push(tick);\n            }\n            return result;\n        },\n\n        /**\n         * @private\n         */\n        _tickSize: function() {\n            var me = this;\n            var isHorizontal = me.isHorizontal();\n            var optionTicks = me.options.ticks.minor;\n\n            // Calculate space needed by label in axis direction.\n            var rot = helpers$1.toRadians(me.labelRotation);\n            var cos = Math.abs(Math.cos(rot));\n            var sin = Math.abs(Math.sin(rot));\n\n            var padding = optionTicks.autoSkipPadding || 0;\n            var w = (me.longestLabelWidth + padding) || 0;\n\n            var tickFont = helpers$1.options._parseFont(optionTicks);\n            var h = (me._maxLabelLines * tickFont.lineHeight + padding) || 0;\n\n            // Calculate space needed for 1 tick in axis direction.\n            return isHorizontal\n                ? h * cos > w * sin ? w / cos : h / sin\n                : h * sin < w * cos ? h / cos : w / sin;\n        },\n\n        /**\n         * @private\n         */\n        _isVisible: function() {\n            var me = this;\n            var chart = me.chart;\n            var display = me.options.display;\n            var i, ilen, meta;\n\n            if (display !== 'auto') {\n                return !!display;\n            }\n\n            // When 'auto', the scale is visible if at least one associated dataset is visible.\n            for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {\n                if (chart.isDatasetVisible(i)) {\n                    meta = chart.getDatasetMeta(i);\n                    if (meta.xAxisID === me.id || meta.yAxisID === me.id) {\n                        return true;\n                    }\n                }\n            }\n\n            return false;\n        },\n\n        /**\n         * Actually draw the scale on the canvas\n         * @param {object} chartArea - the area of the chart to draw full grid lines on\n         */\n        draw: function(chartArea) {\n            var me = this;\n            var options = me.options;\n\n            if (!me._isVisible()) {\n                return;\n            }\n\n            var chart = me.chart;\n            var context = me.ctx;\n            var globalDefaults = core_defaults.global;\n            var defaultFontColor = globalDefaults.defaultFontColor;\n            var optionTicks = options.ticks.minor;\n            var optionMajorTicks = options.ticks.major || optionTicks;\n            var gridLines = options.gridLines;\n            var scaleLabel = options.scaleLabel;\n            var position = options.position;\n\n            var isRotated = me.labelRotation !== 0;\n            var isMirrored = optionTicks.mirror;\n            var isHorizontal = me.isHorizontal();\n\n            var parseFont = helpers$1.options._parseFont;\n            var ticks = optionTicks.display && optionTicks.autoSkip ? me._autoSkip(me.getTicks()) : me.getTicks();\n            var tickFontColor = valueOrDefault$9(optionTicks.fontColor, defaultFontColor);\n            var tickFont = parseFont(optionTicks);\n            var lineHeight = tickFont.lineHeight;\n            var majorTickFontColor = valueOrDefault$9(optionMajorTicks.fontColor, defaultFontColor);\n            var majorTickFont = parseFont(optionMajorTicks);\n            var tickPadding = optionTicks.padding;\n            var labelOffset = optionTicks.labelOffset;\n\n            var tl = gridLines.drawTicks ? gridLines.tickMarkLength : 0;\n\n            var scaleLabelFontColor = valueOrDefault$9(scaleLabel.fontColor, defaultFontColor);\n            var scaleLabelFont = parseFont(scaleLabel);\n            var scaleLabelPadding = helpers$1.options.toPadding(scaleLabel.padding);\n            var labelRotationRadians = helpers$1.toRadians(me.labelRotation);\n\n            var itemsToDraw = [];\n\n            var axisWidth = gridLines.drawBorder ? valueAtIndexOrDefault(gridLines.lineWidth, 0, 0) : 0;\n            var alignPixel = helpers$1._alignPixel;\n            var borderValue, tickStart, tickEnd;\n\n            if (position === 'top') {\n                borderValue = alignPixel(chart, me.bottom, axisWidth);\n                tickStart = me.bottom - tl;\n                tickEnd = borderValue - axisWidth / 2;\n            } else if (position === 'bottom') {\n                borderValue = alignPixel(chart, me.top, axisWidth);\n                tickStart = borderValue + axisWidth / 2;\n                tickEnd = me.top + tl;\n            } else if (position === 'left') {\n                borderValue = alignPixel(chart, me.right, axisWidth);\n                tickStart = me.right - tl;\n                tickEnd = borderValue - axisWidth / 2;\n            } else {\n                borderValue = alignPixel(chart, me.left, axisWidth);\n                tickStart = borderValue + axisWidth / 2;\n                tickEnd = me.left + tl;\n            }\n\n            var epsilon = 0.0000001; // 0.0000001 is margin in pixels for Accumulated error.\n\n            helpers$1.each(ticks, function(tick, index) {\n                // autoskipper skipped this tick (#4635)\n                if (helpers$1.isNullOrUndef(tick.label)) {\n                    return;\n                }\n\n                var label = tick.label;\n                var lineWidth, lineColor, borderDash, borderDashOffset;\n                if (index === me.zeroLineIndex && options.offset === gridLines.offsetGridLines) {\n                    // Draw the first index specially\n                    lineWidth = gridLines.zeroLineWidth;\n                    lineColor = gridLines.zeroLineColor;\n                    borderDash = gridLines.zeroLineBorderDash || [];\n                    borderDashOffset = gridLines.zeroLineBorderDashOffset || 0.0;\n                } else {\n                    lineWidth = valueAtIndexOrDefault(gridLines.lineWidth, index);\n                    lineColor = valueAtIndexOrDefault(gridLines.color, index);\n                    borderDash = gridLines.borderDash || [];\n                    borderDashOffset = gridLines.borderDashOffset || 0.0;\n                }\n\n                // Common properties\n                var tx1, ty1, tx2, ty2, x1, y1, x2, y2, labelX, labelY, textOffset, textAlign;\n                var labelCount = helpers$1.isArray(label) ? label.length : 1;\n                var lineValue = getPixelForGridLine(me, index, gridLines.offsetGridLines);\n\n                if (isHorizontal) {\n                    var labelYOffset = tl + tickPadding;\n\n                    if (lineValue < me.left - epsilon) {\n                        lineColor = 'rgba(0,0,0,0)';\n                    }\n\n                    tx1 = tx2 = x1 = x2 = alignPixel(chart, lineValue, lineWidth);\n                    ty1 = tickStart;\n                    ty2 = tickEnd;\n                    labelX = me.getPixelForTick(index) + labelOffset; // x values for optionTicks (need to consider offsetLabel option)\n\n                    if (position === 'top') {\n                        y1 = alignPixel(chart, chartArea.top, axisWidth) + axisWidth / 2;\n                        y2 = chartArea.bottom;\n                        textOffset = ((!isRotated ? 0.5 : 1) - labelCount) * lineHeight;\n                        textAlign = !isRotated ? 'center' : 'left';\n                        labelY = me.bottom - labelYOffset;\n                    } else {\n                        y1 = chartArea.top;\n                        y2 = alignPixel(chart, chartArea.bottom, axisWidth) - axisWidth / 2;\n                        textOffset = (!isRotated ? 0.5 : 0) * lineHeight;\n                        textAlign = !isRotated ? 'center' : 'right';\n                        labelY = me.top + labelYOffset;\n                    }\n                } else {\n                    var labelXOffset = (isMirrored ? 0 : tl) + tickPadding;\n\n                    if (lineValue < me.top - epsilon) {\n                        lineColor = 'rgba(0,0,0,0)';\n                    }\n\n                    tx1 = tickStart;\n                    tx2 = tickEnd;\n                    ty1 = ty2 = y1 = y2 = alignPixel(chart, lineValue, lineWidth);\n                    labelY = me.getPixelForTick(index) + labelOffset;\n                    textOffset = (1 - labelCount) * lineHeight / 2;\n\n                    if (position === 'left') {\n                        x1 = alignPixel(chart, chartArea.left, axisWidth) + axisWidth / 2;\n                        x2 = chartArea.right;\n                        textAlign = isMirrored ? 'left' : 'right';\n                        labelX = me.right - labelXOffset;\n                    } else {\n                        x1 = chartArea.left;\n                        x2 = alignPixel(chart, chartArea.right, axisWidth) - axisWidth / 2;\n                        textAlign = isMirrored ? 'right' : 'left';\n                        labelX = me.left + labelXOffset;\n                    }\n                }\n\n                itemsToDraw.push({\n                    tx1: tx1,\n                    ty1: ty1,\n                    tx2: tx2,\n                    ty2: ty2,\n                    x1: x1,\n                    y1: y1,\n                    x2: x2,\n                    y2: y2,\n                    labelX: labelX,\n                    labelY: labelY,\n                    glWidth: lineWidth,\n                    glColor: lineColor,\n                    glBorderDash: borderDash,\n                    glBorderDashOffset: borderDashOffset,\n                    rotation: -1 * labelRotationRadians,\n                    label: label,\n                    major: tick.major,\n                    textOffset: textOffset,\n                    textAlign: textAlign\n                });\n            });\n\n            // Draw all of the tick labels, tick marks, and grid lines at the correct places\n            helpers$1.each(itemsToDraw, function(itemToDraw) {\n                var glWidth = itemToDraw.glWidth;\n                var glColor = itemToDraw.glColor;\n\n                if (gridLines.display && glWidth && glColor) {\n                    context.save();\n                    context.lineWidth = glWidth;\n                    context.strokeStyle = glColor;\n                    if (context.setLineDash) {\n                        context.setLineDash(itemToDraw.glBorderDash);\n                        context.lineDashOffset = itemToDraw.glBorderDashOffset;\n                    }\n\n                    context.beginPath();\n\n                    if (gridLines.drawTicks) {\n                        context.moveTo(itemToDraw.tx1, itemToDraw.ty1);\n                        context.lineTo(itemToDraw.tx2, itemToDraw.ty2);\n                    }\n\n                    if (gridLines.drawOnChartArea) {\n                        context.moveTo(itemToDraw.x1, itemToDraw.y1);\n                        context.lineTo(itemToDraw.x2, itemToDraw.y2);\n                    }\n\n                    context.stroke();\n                    context.restore();\n                }\n\n                if (optionTicks.display) {\n                    // Make sure we draw text in the correct color and font\n                    context.save();\n                    context.translate(itemToDraw.labelX, itemToDraw.labelY);\n                    context.rotate(itemToDraw.rotation);\n                    context.font = itemToDraw.major ? majorTickFont.string : tickFont.string;\n                    context.fillStyle = itemToDraw.major ? majorTickFontColor : tickFontColor;\n                    context.textBaseline = 'middle';\n                    context.textAlign = itemToDraw.textAlign;\n\n                    var label = itemToDraw.label;\n                    var y = itemToDraw.textOffset;\n                    if (helpers$1.isArray(label)) {\n                        for (var i = 0; i < label.length; ++i) {\n                            // We just make sure the multiline element is a string here..\n                            context.fillText('' + label[i], 0, y);\n                            y += lineHeight;\n                        }\n                    } else {\n                        context.fillText(label, 0, y);\n                    }\n                    context.restore();\n                }\n            });\n\n            if (scaleLabel.display) {\n                // Draw the scale label\n                var scaleLabelX;\n                var scaleLabelY;\n                var rotation = 0;\n                var halfLineHeight = scaleLabelFont.lineHeight / 2;\n\n                if (isHorizontal) {\n                    scaleLabelX = me.left + ((me.right - me.left) / 2); // midpoint of the width\n                    scaleLabelY = position === 'bottom'\n                        ? me.bottom - halfLineHeight - scaleLabelPadding.bottom\n                        : me.top + halfLineHeight + scaleLabelPadding.top;\n                } else {\n                    var isLeft = position === 'left';\n                    scaleLabelX = isLeft\n                        ? me.left + halfLineHeight + scaleLabelPadding.top\n                        : me.right - halfLineHeight - scaleLabelPadding.top;\n                    scaleLabelY = me.top + ((me.bottom - me.top) / 2);\n                    rotation = isLeft ? -0.5 * Math.PI : 0.5 * Math.PI;\n                }\n\n                context.save();\n                context.translate(scaleLabelX, scaleLabelY);\n                context.rotate(rotation);\n                context.textAlign = 'center';\n                context.textBaseline = 'middle';\n                context.fillStyle = scaleLabelFontColor; // render in correct colour\n                context.font = scaleLabelFont.string;\n                context.fillText(scaleLabel.labelString, 0, 0);\n                context.restore();\n            }\n\n            if (axisWidth) {\n                // Draw the line at the edge of the axis\n                var firstLineWidth = axisWidth;\n                var lastLineWidth = valueAtIndexOrDefault(gridLines.lineWidth, ticks.length - 1, 0);\n                var x1, x2, y1, y2;\n\n                if (isHorizontal) {\n                    x1 = alignPixel(chart, me.left, firstLineWidth) - firstLineWidth / 2;\n                    x2 = alignPixel(chart, me.right, lastLineWidth) + lastLineWidth / 2;\n                    y1 = y2 = borderValue;\n                } else {\n                    y1 = alignPixel(chart, me.top, firstLineWidth) - firstLineWidth / 2;\n                    y2 = alignPixel(chart, me.bottom, lastLineWidth) + lastLineWidth / 2;\n                    x1 = x2 = borderValue;\n                }\n\n                context.lineWidth = axisWidth;\n                context.strokeStyle = valueAtIndexOrDefault(gridLines.color, 0);\n                context.beginPath();\n                context.moveTo(x1, y1);\n                context.lineTo(x2, y2);\n                context.stroke();\n            }\n        }\n    });\n\n    var defaultConfig = {\n        position: 'bottom'\n    };\n\n    var scale_category = core_scale.extend({\n        /**\n        * Internal function to get the correct labels. If data.xLabels or data.yLabels are defined, use those\n        * else fall back to data.labels\n        * @private\n        */\n        getLabels: function() {\n            var data = this.chart.data;\n            return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels;\n        },\n\n        determineDataLimits: function() {\n            var me = this;\n            var labels = me.getLabels();\n            me.minIndex = 0;\n            me.maxIndex = labels.length - 1;\n            var findIndex;\n\n            if (me.options.ticks.min !== undefined) {\n                // user specified min value\n                findIndex = labels.indexOf(me.options.ticks.min);\n                me.minIndex = findIndex !== -1 ? findIndex : me.minIndex;\n            }\n\n            if (me.options.ticks.max !== undefined) {\n                // user specified max value\n                findIndex = labels.indexOf(me.options.ticks.max);\n                me.maxIndex = findIndex !== -1 ? findIndex : me.maxIndex;\n            }\n\n            me.min = labels[me.minIndex];\n            me.max = labels[me.maxIndex];\n        },\n\n        buildTicks: function() {\n            var me = this;\n            var labels = me.getLabels();\n            // If we are viewing some subset of labels, slice the original array\n            me.ticks = (me.minIndex === 0 && me.maxIndex === labels.length - 1) ? labels : labels.slice(me.minIndex, me.maxIndex + 1);\n        },\n\n        getLabelForIndex: function(index, datasetIndex) {\n            var me = this;\n            var chart = me.chart;\n\n            if (chart.getDatasetMeta(datasetIndex).controller._getValueScaleId() === me.id) {\n                return me.getRightValue(chart.data.datasets[datasetIndex].data[index]);\n            }\n\n            return me.ticks[index - me.minIndex];\n        },\n\n        // Used to get data value locations.  Value can either be an index or a numerical value\n        getPixelForValue: function(value, index) {\n            var me = this;\n            var offset = me.options.offset;\n            // 1 is added because we need the length but we have the indexes\n            var offsetAmt = Math.max((me.maxIndex + 1 - me.minIndex - (offset ? 0 : 1)), 1);\n\n            // If value is a data object, then index is the index in the data array,\n            // not the index of the scale. We need to change that.\n            var valueCategory;\n            if (value !== undefined && value !== null) {\n                valueCategory = me.isHorizontal() ? value.x : value.y;\n            }\n            if (valueCategory !== undefined || (value !== undefined && isNaN(index))) {\n                var labels = me.getLabels();\n                value = valueCategory || value;\n                var idx = labels.indexOf(value);\n                index = idx !== -1 ? idx : index;\n            }\n\n            if (me.isHorizontal()) {\n                var valueWidth = me.width / offsetAmt;\n                var widthOffset = (valueWidth * (index - me.minIndex));\n\n                if (offset) {\n                    widthOffset += (valueWidth / 2);\n                }\n\n                return me.left + widthOffset;\n            }\n            var valueHeight = me.height / offsetAmt;\n            var heightOffset = (valueHeight * (index - me.minIndex));\n\n            if (offset) {\n                heightOffset += (valueHeight / 2);\n            }\n\n            return me.top + heightOffset;\n        },\n\n        getPixelForTick: function(index) {\n            return this.getPixelForValue(this.ticks[index], index + this.minIndex, null);\n        },\n\n        getValueForPixel: function(pixel) {\n            var me = this;\n            var offset = me.options.offset;\n            var value;\n            var offsetAmt = Math.max((me._ticks.length - (offset ? 0 : 1)), 1);\n            var horz = me.isHorizontal();\n            var valueDimension = (horz ? me.width : me.height) / offsetAmt;\n\n            pixel -= horz ? me.left : me.top;\n\n            if (offset) {\n                pixel -= (valueDimension / 2);\n            }\n\n            if (pixel <= 0) {\n                value = 0;\n            } else {\n                value = Math.round(pixel / valueDimension);\n            }\n\n            return value + me.minIndex;\n        },\n\n        getBasePixel: function() {\n            return this.bottom;\n        }\n    });\n\n    // INTERNAL: static default options, registered in src/index.js\n    var _defaults = defaultConfig;\n    scale_category._defaults = _defaults;\n\n    var noop = helpers$1.noop;\n    var isNullOrUndef = helpers$1.isNullOrUndef;\n\n    /**\n     * Generate a set of linear ticks\n     * @param generationOptions the options used to generate the ticks\n     * @param dataRange the range of the data\n     * @returns {number[]} array of tick values\n     */\n    function generateTicks(generationOptions, dataRange) {\n        var ticks = [];\n        // To get a \"nice\" value for the tick spacing, we will use the appropriately named\n        // \"nice number\" algorithm. See https://stackoverflow.com/questions/8506881/nice-label-algorithm-for-charts-with-minimum-ticks\n        // for details.\n\n        var MIN_SPACING = 1e-14;\n        var stepSize = generationOptions.stepSize;\n        var unit = stepSize || 1;\n        var maxNumSpaces = generationOptions.maxTicks - 1;\n        var min = generationOptions.min;\n        var max = generationOptions.max;\n        var precision = generationOptions.precision;\n        var rmin = dataRange.min;\n        var rmax = dataRange.max;\n        var spacing = helpers$1.niceNum((rmax - rmin) / maxNumSpaces / unit) * unit;\n        var factor, niceMin, niceMax, numSpaces;\n\n        // Beyond MIN_SPACING floating point numbers being to lose precision\n        // such that we can't do the math necessary to generate ticks\n        if (spacing < MIN_SPACING && isNullOrUndef(min) && isNullOrUndef(max)) {\n            return [rmin, rmax];\n        }\n\n        numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n        if (numSpaces > maxNumSpaces) {\n            // If the calculated num of spaces exceeds maxNumSpaces, recalculate it\n            spacing = helpers$1.niceNum(numSpaces * spacing / maxNumSpaces / unit) * unit;\n        }\n\n        if (stepSize || isNullOrUndef(precision)) {\n            // If a precision is not specified, calculate factor based on spacing\n            factor = Math.pow(10, helpers$1._decimalPlaces(spacing));\n        } else {\n            // If the user specified a precision, round to that number of decimal places\n            factor = Math.pow(10, precision);\n            spacing = Math.ceil(spacing * factor) / factor;\n        }\n\n        niceMin = Math.floor(rmin / spacing) * spacing;\n        niceMax = Math.ceil(rmax / spacing) * spacing;\n\n        // If min, max and stepSize is set and they make an evenly spaced scale use it.\n        if (stepSize) {\n            // If very close to our whole number, use it.\n            if (!isNullOrUndef(min) && helpers$1.almostWhole(min / spacing, spacing / 1000)) {\n                niceMin = min;\n            }\n            if (!isNullOrUndef(max) && helpers$1.almostWhole(max / spacing, spacing / 1000)) {\n                niceMax = max;\n            }\n        }\n\n        numSpaces = (niceMax - niceMin) / spacing;\n        // If very close to our rounded value, use it.\n        if (helpers$1.almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n            numSpaces = Math.round(numSpaces);\n        } else {\n            numSpaces = Math.ceil(numSpaces);\n        }\n\n        niceMin = Math.round(niceMin * factor) / factor;\n        niceMax = Math.round(niceMax * factor) / factor;\n        ticks.push(isNullOrUndef(min) ? niceMin : min);\n        for (var j = 1; j < numSpaces; ++j) {\n            ticks.push(Math.round((niceMin + j * spacing) * factor) / factor);\n        }\n        ticks.push(isNullOrUndef(max) ? niceMax : max);\n\n        return ticks;\n    }\n\n    var scale_linearbase = core_scale.extend({\n        getRightValue: function(value) {\n            if (typeof value === 'string') {\n                return +value;\n            }\n            return core_scale.prototype.getRightValue.call(this, value);\n        },\n\n        handleTickRangeOptions: function() {\n            var me = this;\n            var opts = me.options;\n            var tickOpts = opts.ticks;\n\n            // If we are forcing it to begin at 0, but 0 will already be rendered on the chart,\n            // do nothing since that would make the chart weird. If the user really wants a weird chart\n            // axis, they can manually override it\n            if (tickOpts.beginAtZero) {\n                var minSign = helpers$1.sign(me.min);\n                var maxSign = helpers$1.sign(me.max);\n\n                if (minSign < 0 && maxSign < 0) {\n                    // move the top up to 0\n                    me.max = 0;\n                } else if (minSign > 0 && maxSign > 0) {\n                    // move the bottom down to 0\n                    me.min = 0;\n                }\n            }\n\n            var setMin = tickOpts.min !== undefined || tickOpts.suggestedMin !== undefined;\n            var setMax = tickOpts.max !== undefined || tickOpts.suggestedMax !== undefined;\n\n            if (tickOpts.min !== undefined) {\n                me.min = tickOpts.min;\n            } else if (tickOpts.suggestedMin !== undefined) {\n                if (me.min === null) {\n                    me.min = tickOpts.suggestedMin;\n                } else {\n                    me.min = Math.min(me.min, tickOpts.suggestedMin);\n                }\n            }\n\n            if (tickOpts.max !== undefined) {\n                me.max = tickOpts.max;\n            } else if (tickOpts.suggestedMax !== undefined) {\n                if (me.max === null) {\n                    me.max = tickOpts.suggestedMax;\n                } else {\n                    me.max = Math.max(me.max, tickOpts.suggestedMax);\n                }\n            }\n\n            if (setMin !== setMax) {\n                // We set the min or the max but not both.\n                // So ensure that our range is good\n                // Inverted or 0 length range can happen when\n                // ticks.min is set, and no datasets are visible\n                if (me.min >= me.max) {\n                    if (setMin) {\n                        me.max = me.min + 1;\n                    } else {\n                        me.min = me.max - 1;\n                    }\n                }\n            }\n\n            if (me.min === me.max) {\n                me.max++;\n\n                if (!tickOpts.beginAtZero) {\n                    me.min--;\n                }\n            }\n        },\n\n        getTickLimit: function() {\n            var me = this;\n            var tickOpts = me.options.ticks;\n            var stepSize = tickOpts.stepSize;\n            var maxTicksLimit = tickOpts.maxTicksLimit;\n            var maxTicks;\n\n            if (stepSize) {\n                maxTicks = Math.ceil(me.max / stepSize) - Math.floor(me.min / stepSize) + 1;\n            } else {\n                maxTicks = me._computeTickLimit();\n                maxTicksLimit = maxTicksLimit || 11;\n            }\n\n            if (maxTicksLimit) {\n                maxTicks = Math.min(maxTicksLimit, maxTicks);\n            }\n\n            return maxTicks;\n        },\n\n        _computeTickLimit: function() {\n            return Number.POSITIVE_INFINITY;\n        },\n\n        handleDirectionalChanges: noop,\n\n        buildTicks: function() {\n            var me = this;\n            var opts = me.options;\n            var tickOpts = opts.ticks;\n\n            // Figure out what the max number of ticks we can support it is based on the size of\n            // the axis area. For now, we say that the minimum tick spacing in pixels must be 40\n            // We also limit the maximum number of ticks to 11 which gives a nice 10 squares on\n            // the graph. Make sure we always have at least 2 ticks\n            var maxTicks = me.getTickLimit();\n            maxTicks = Math.max(2, maxTicks);\n\n            var numericGeneratorOptions = {\n                maxTicks: maxTicks,\n                min: tickOpts.min,\n                max: tickOpts.max,\n                precision: tickOpts.precision,\n                stepSize: helpers$1.valueOrDefault(tickOpts.fixedStepSize, tickOpts.stepSize)\n            };\n            var ticks = me.ticks = generateTicks(numericGeneratorOptions, me);\n\n            me.handleDirectionalChanges();\n\n            // At this point, we need to update our max and min given the tick values since we have expanded the\n            // range of the scale\n            me.max = helpers$1.max(ticks);\n            me.min = helpers$1.min(ticks);\n\n            if (tickOpts.reverse) {\n                ticks.reverse();\n\n                me.start = me.max;\n                me.end = me.min;\n            } else {\n                me.start = me.min;\n                me.end = me.max;\n            }\n        },\n\n        convertTicksToLabels: function() {\n            var me = this;\n            me.ticksAsNumbers = me.ticks.slice();\n            me.zeroLineIndex = me.ticks.indexOf(0);\n\n            core_scale.prototype.convertTicksToLabels.call(me);\n        }\n    });\n\n    var defaultConfig$1 = {\n        position: 'left',\n        ticks: {\n            callback: core_ticks.formatters.linear\n        }\n    };\n\n    var scale_linear = scale_linearbase.extend({\n        determineDataLimits: function() {\n            var me = this;\n            var opts = me.options;\n            var chart = me.chart;\n            var data = chart.data;\n            var datasets = data.datasets;\n            var isHorizontal = me.isHorizontal();\n            var DEFAULT_MIN = 0;\n            var DEFAULT_MAX = 1;\n\n            function IDMatches(meta) {\n                return isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;\n            }\n\n            // First Calculate the range\n            me.min = null;\n            me.max = null;\n\n            var hasStacks = opts.stacked;\n            if (hasStacks === undefined) {\n                helpers$1.each(datasets, function(dataset, datasetIndex) {\n                    if (hasStacks) {\n                        return;\n                    }\n\n                    var meta = chart.getDatasetMeta(datasetIndex);\n                    if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) &&\n                        meta.stack !== undefined) {\n                        hasStacks = true;\n                    }\n                });\n            }\n\n            if (opts.stacked || hasStacks) {\n                var valuesPerStack = {};\n\n                helpers$1.each(datasets, function(dataset, datasetIndex) {\n                    var meta = chart.getDatasetMeta(datasetIndex);\n                    var key = [\n                        meta.type,\n                        // we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\n                        ((opts.stacked === undefined && meta.stack === undefined) ? datasetIndex : ''),\n                        meta.stack\n                    ].join('.');\n\n                    if (valuesPerStack[key] === undefined) {\n                        valuesPerStack[key] = {\n                            positiveValues: [],\n                            negativeValues: []\n                        };\n                    }\n\n                    // Store these per type\n                    var positiveValues = valuesPerStack[key].positiveValues;\n                    var negativeValues = valuesPerStack[key].negativeValues;\n\n                    if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n                        helpers$1.each(dataset.data, function(rawValue, index) {\n                            var value = +me.getRightValue(rawValue);\n                            if (isNaN(value) || meta.data[index].hidden) {\n                                return;\n                            }\n\n                            positiveValues[index] = positiveValues[index] || 0;\n                            negativeValues[index] = negativeValues[index] || 0;\n\n                            if (opts.relativePoints) {\n                                positiveValues[index] = 100;\n                            } else if (value < 0) {\n                                negativeValues[index] += value;\n                            } else {\n                                positiveValues[index] += value;\n                            }\n                        });\n                    }\n                });\n\n                helpers$1.each(valuesPerStack, function(valuesForType) {\n                    var values = valuesForType.positiveValues.concat(valuesForType.negativeValues);\n                    var minVal = helpers$1.min(values);\n                    var maxVal = helpers$1.max(values);\n                    me.min = me.min === null ? minVal : Math.min(me.min, minVal);\n                    me.max = me.max === null ? maxVal : Math.max(me.max, maxVal);\n                });\n\n            } else {\n                helpers$1.each(datasets, function(dataset, datasetIndex) {\n                    var meta = chart.getDatasetMeta(datasetIndex);\n                    if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n                        helpers$1.each(dataset.data, function(rawValue, index) {\n                            var value = +me.getRightValue(rawValue);\n                            if (isNaN(value) || meta.data[index].hidden) {\n                                return;\n                            }\n\n                            if (me.min === null) {\n                                me.min = value;\n                            } else if (value < me.min) {\n                                me.min = value;\n                            }\n\n                            if (me.max === null) {\n                                me.max = value;\n                            } else if (value > me.max) {\n                                me.max = value;\n                            }\n                        });\n                    }\n                });\n            }\n\n            me.min = isFinite(me.min) && !isNaN(me.min) ? me.min : DEFAULT_MIN;\n            me.max = isFinite(me.max) && !isNaN(me.max) ? me.max : DEFAULT_MAX;\n\n            // Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\n            this.handleTickRangeOptions();\n        },\n\n        // Returns the maximum number of ticks based on the scale dimension\n        _computeTickLimit: function() {\n            var me = this;\n            var tickFont;\n\n            if (me.isHorizontal()) {\n                return Math.ceil(me.width / 40);\n            }\n            tickFont = helpers$1.options._parseFont(me.options.ticks);\n            return Math.ceil(me.height / tickFont.lineHeight);\n        },\n\n        // Called after the ticks are built. We need\n        handleDirectionalChanges: function() {\n            if (!this.isHorizontal()) {\n                // We are in a vertical orientation. The top value is the highest. So reverse the array\n                this.ticks.reverse();\n            }\n        },\n\n        getLabelForIndex: function(index, datasetIndex) {\n            return +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n        },\n\n        // Utils\n        getPixelForValue: function(value) {\n            // This must be called after fit has been run so that\n            // this.left, this.top, this.right, and this.bottom have been defined\n            var me = this;\n            var start = me.start;\n\n            var rightValue = +me.getRightValue(value);\n            var pixel;\n            var range = me.end - start;\n\n            if (me.isHorizontal()) {\n                pixel = me.left + (me.width / range * (rightValue - start));\n            } else {\n                pixel = me.bottom - (me.height / range * (rightValue - start));\n            }\n            return pixel;\n        },\n\n        getValueForPixel: function(pixel) {\n            var me = this;\n            var isHorizontal = me.isHorizontal();\n            var innerDimension = isHorizontal ? me.width : me.height;\n            var offset = (isHorizontal ? pixel - me.left : me.bottom - pixel) / innerDimension;\n            return me.start + ((me.end - me.start) * offset);\n        },\n\n        getPixelForTick: function(index) {\n            return this.getPixelForValue(this.ticksAsNumbers[index]);\n        }\n    });\n\n    // INTERNAL: static default options, registered in src/index.js\n    var _defaults$1 = defaultConfig$1;\n    scale_linear._defaults = _defaults$1;\n\n    var valueOrDefault$a = helpers$1.valueOrDefault;\n\n    /**\n     * Generate a set of logarithmic ticks\n     * @param generationOptions the options used to generate the ticks\n     * @param dataRange the range of the data\n     * @returns {number[]} array of tick values\n     */\n    function generateTicks$1(generationOptions, dataRange) {\n        var ticks = [];\n\n        var tickVal = valueOrDefault$a(generationOptions.min, Math.pow(10, Math.floor(helpers$1.log10(dataRange.min))));\n\n        var endExp = Math.floor(helpers$1.log10(dataRange.max));\n        var endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n        var exp, significand;\n\n        if (tickVal === 0) {\n            exp = Math.floor(helpers$1.log10(dataRange.minNotZero));\n            significand = Math.floor(dataRange.minNotZero / Math.pow(10, exp));\n\n            ticks.push(tickVal);\n            tickVal = significand * Math.pow(10, exp);\n        } else {\n            exp = Math.floor(helpers$1.log10(tickVal));\n            significand = Math.floor(tickVal / Math.pow(10, exp));\n        }\n        var precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n\n        do {\n            ticks.push(tickVal);\n\n            ++significand;\n            if (significand === 10) {\n                significand = 1;\n                ++exp;\n                precision = exp >= 0 ? 1 : precision;\n            }\n\n            tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n        } while (exp < endExp || (exp === endExp && significand < endSignificand));\n\n        var lastTick = valueOrDefault$a(generationOptions.max, tickVal);\n        ticks.push(lastTick);\n\n        return ticks;\n    }\n\n    var defaultConfig$2 = {\n        position: 'left',\n\n        // label settings\n        ticks: {\n            callback: core_ticks.formatters.logarithmic\n        }\n    };\n\n    // TODO(v3): change this to positiveOrDefault\n    function nonNegativeOrDefault(value, defaultValue) {\n        return helpers$1.isFinite(value) && value >= 0 ? value : defaultValue;\n    }\n\n    var scale_logarithmic = core_scale.extend({\n        determineDataLimits: function() {\n            var me = this;\n            var opts = me.options;\n            var chart = me.chart;\n            var data = chart.data;\n            var datasets = data.datasets;\n            var isHorizontal = me.isHorizontal();\n            function IDMatches(meta) {\n                return isHorizontal ? meta.xAxisID === me.id : meta.yAxisID === me.id;\n            }\n\n            // Calculate Range\n            me.min = null;\n            me.max = null;\n            me.minNotZero = null;\n\n            var hasStacks = opts.stacked;\n            if (hasStacks === undefined) {\n                helpers$1.each(datasets, function(dataset, datasetIndex) {\n                    if (hasStacks) {\n                        return;\n                    }\n\n                    var meta = chart.getDatasetMeta(datasetIndex);\n                    if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta) &&\n                        meta.stack !== undefined) {\n                        hasStacks = true;\n                    }\n                });\n            }\n\n            if (opts.stacked || hasStacks) {\n                var valuesPerStack = {};\n\n                helpers$1.each(datasets, function(dataset, datasetIndex) {\n                    var meta = chart.getDatasetMeta(datasetIndex);\n                    var key = [\n                        meta.type,\n                        // we have a separate stack for stack=undefined datasets when the opts.stacked is undefined\n                        ((opts.stacked === undefined && meta.stack === undefined) ? datasetIndex : ''),\n                        meta.stack\n                    ].join('.');\n\n                    if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n                        if (valuesPerStack[key] === undefined) {\n                            valuesPerStack[key] = [];\n                        }\n\n                        helpers$1.each(dataset.data, function(rawValue, index) {\n                            var values = valuesPerStack[key];\n                            var value = +me.getRightValue(rawValue);\n                            // invalid, hidden and negative values are ignored\n                            if (isNaN(value) || meta.data[index].hidden || value < 0) {\n                                return;\n                            }\n                            values[index] = values[index] || 0;\n                            values[index] += value;\n                        });\n                    }\n                });\n\n                helpers$1.each(valuesPerStack, function(valuesForType) {\n                    if (valuesForType.length > 0) {\n                        var minVal = helpers$1.min(valuesForType);\n                        var maxVal = helpers$1.max(valuesForType);\n                        me.min = me.min === null ? minVal : Math.min(me.min, minVal);\n                        me.max = me.max === null ? maxVal : Math.max(me.max, maxVal);\n                    }\n                });\n\n            } else {\n                helpers$1.each(datasets, function(dataset, datasetIndex) {\n                    var meta = chart.getDatasetMeta(datasetIndex);\n                    if (chart.isDatasetVisible(datasetIndex) && IDMatches(meta)) {\n                        helpers$1.each(dataset.data, function(rawValue, index) {\n                            var value = +me.getRightValue(rawValue);\n                            // invalid, hidden and negative values are ignored\n                            if (isNaN(value) || meta.data[index].hidden || value < 0) {\n                                return;\n                            }\n\n                            if (me.min === null) {\n                                me.min = value;\n                            } else if (value < me.min) {\n                                me.min = value;\n                            }\n\n                            if (me.max === null) {\n                                me.max = value;\n                            } else if (value > me.max) {\n                                me.max = value;\n                            }\n\n                            if (value !== 0 && (me.minNotZero === null || value < me.minNotZero)) {\n                                me.minNotZero = value;\n                            }\n                        });\n                    }\n                });\n            }\n\n            // Common base implementation to handle ticks.min, ticks.max\n            this.handleTickRangeOptions();\n        },\n\n        handleTickRangeOptions: function() {\n            var me = this;\n            var tickOpts = me.options.ticks;\n            var DEFAULT_MIN = 1;\n            var DEFAULT_MAX = 10;\n\n            me.min = nonNegativeOrDefault(tickOpts.min, me.min);\n            me.max = nonNegativeOrDefault(tickOpts.max, me.max);\n\n            if (me.min === me.max) {\n                if (me.min !== 0 && me.min !== null) {\n                    me.min = Math.pow(10, Math.floor(helpers$1.log10(me.min)) - 1);\n                    me.max = Math.pow(10, Math.floor(helpers$1.log10(me.max)) + 1);\n                } else {\n                    me.min = DEFAULT_MIN;\n                    me.max = DEFAULT_MAX;\n                }\n            }\n            if (me.min === null) {\n                me.min = Math.pow(10, Math.floor(helpers$1.log10(me.max)) - 1);\n            }\n            if (me.max === null) {\n                me.max = me.min !== 0\n                    ? Math.pow(10, Math.floor(helpers$1.log10(me.min)) + 1)\n                    : DEFAULT_MAX;\n            }\n            if (me.minNotZero === null) {\n                if (me.min > 0) {\n                    me.minNotZero = me.min;\n                } else if (me.max < 1) {\n                    me.minNotZero = Math.pow(10, Math.floor(helpers$1.log10(me.max)));\n                } else {\n                    me.minNotZero = DEFAULT_MIN;\n                }\n            }\n        },\n\n        buildTicks: function() {\n            var me = this;\n            var tickOpts = me.options.ticks;\n            var reverse = !me.isHorizontal();\n\n            var generationOptions = {\n                min: nonNegativeOrDefault(tickOpts.min),\n                max: nonNegativeOrDefault(tickOpts.max)\n            };\n            var ticks = me.ticks = generateTicks$1(generationOptions, me);\n\n            // At this point, we need to update our max and min given the tick values since we have expanded the\n            // range of the scale\n            me.max = helpers$1.max(ticks);\n            me.min = helpers$1.min(ticks);\n\n            if (tickOpts.reverse) {\n                reverse = !reverse;\n                me.start = me.max;\n                me.end = me.min;\n            } else {\n                me.start = me.min;\n                me.end = me.max;\n            }\n            if (reverse) {\n                ticks.reverse();\n            }\n        },\n\n        convertTicksToLabels: function() {\n            this.tickValues = this.ticks.slice();\n\n            core_scale.prototype.convertTicksToLabels.call(this);\n        },\n\n        // Get the correct tooltip label\n        getLabelForIndex: function(index, datasetIndex) {\n            return +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n        },\n\n        getPixelForTick: function(index) {\n            return this.getPixelForValue(this.tickValues[index]);\n        },\n\n        /**\n         * Returns the value of the first tick.\n         * @param {number} value - The minimum not zero value.\n         * @return {number} The first tick value.\n         * @private\n         */\n        _getFirstTickValue: function(value) {\n            var exp = Math.floor(helpers$1.log10(value));\n            var significand = Math.floor(value / Math.pow(10, exp));\n\n            return significand * Math.pow(10, exp);\n        },\n\n        getPixelForValue: function(value) {\n            var me = this;\n            var tickOpts = me.options.ticks;\n            var reverse = tickOpts.reverse;\n            var log10 = helpers$1.log10;\n            var firstTickValue = me._getFirstTickValue(me.minNotZero);\n            var offset = 0;\n            var innerDimension, pixel, start, end, sign;\n\n            value = +me.getRightValue(value);\n            if (reverse) {\n                start = me.end;\n                end = me.start;\n                sign = -1;\n            } else {\n                start = me.start;\n                end = me.end;\n                sign = 1;\n            }\n            if (me.isHorizontal()) {\n                innerDimension = me.width;\n                pixel = reverse ? me.right : me.left;\n            } else {\n                innerDimension = me.height;\n                sign *= -1; // invert, since the upper-left corner of the canvas is at pixel (0, 0)\n                pixel = reverse ? me.top : me.bottom;\n            }\n            if (value !== start) {\n                if (start === 0) { // include zero tick\n                    offset = valueOrDefault$a(tickOpts.fontSize, core_defaults.global.defaultFontSize);\n                    innerDimension -= offset;\n                    start = firstTickValue;\n                }\n                if (value !== 0) {\n                    offset += innerDimension / (log10(end) - log10(start)) * (log10(value) - log10(start));\n                }\n                pixel += sign * offset;\n            }\n            return pixel;\n        },\n\n        getValueForPixel: function(pixel) {\n            var me = this;\n            var tickOpts = me.options.ticks;\n            var reverse = tickOpts.reverse;\n            var log10 = helpers$1.log10;\n            var firstTickValue = me._getFirstTickValue(me.minNotZero);\n            var innerDimension, start, end, value;\n\n            if (reverse) {\n                start = me.end;\n                end = me.start;\n            } else {\n                start = me.start;\n                end = me.end;\n            }\n            if (me.isHorizontal()) {\n                innerDimension = me.width;\n                value = reverse ? me.right - pixel : pixel - me.left;\n            } else {\n                innerDimension = me.height;\n                value = reverse ? pixel - me.top : me.bottom - pixel;\n            }\n            if (value !== start) {\n                if (start === 0) { // include zero tick\n                    var offset = valueOrDefault$a(tickOpts.fontSize, core_defaults.global.defaultFontSize);\n                    value -= offset;\n                    innerDimension -= offset;\n                    start = firstTickValue;\n                }\n                value *= log10(end) - log10(start);\n                value /= innerDimension;\n                value = Math.pow(10, log10(start) + value);\n            }\n            return value;\n        }\n    });\n\n    // INTERNAL: static default options, registered in src/index.js\n    var _defaults$2 = defaultConfig$2;\n    scale_logarithmic._defaults = _defaults$2;\n\n    var valueOrDefault$b = helpers$1.valueOrDefault;\n    var valueAtIndexOrDefault$1 = helpers$1.valueAtIndexOrDefault;\n    var resolve$7 = helpers$1.options.resolve;\n\n    var defaultConfig$3 = {\n        display: true,\n\n        // Boolean - Whether to animate scaling the chart from the centre\n        animate: true,\n        position: 'chartArea',\n\n        angleLines: {\n            display: true,\n            color: 'rgba(0, 0, 0, 0.1)',\n            lineWidth: 1,\n            borderDash: [],\n            borderDashOffset: 0.0\n        },\n\n        gridLines: {\n            circular: false\n        },\n\n        // label settings\n        ticks: {\n            // Boolean - Show a backdrop to the scale label\n            showLabelBackdrop: true,\n\n            // String - The colour of the label backdrop\n            backdropColor: 'rgba(255,255,255,0.75)',\n\n            // Number - The backdrop padding above & below the label in pixels\n            backdropPaddingY: 2,\n\n            // Number - The backdrop padding to the side of the label in pixels\n            backdropPaddingX: 2,\n\n            callback: core_ticks.formatters.linear\n        },\n\n        pointLabels: {\n            // Boolean - if true, show point labels\n            display: true,\n\n            // Number - Point label font size in pixels\n            fontSize: 10,\n\n            // Function - Used to convert point labels\n            callback: function(label) {\n                return label;\n            }\n        }\n    };\n\n    function getValueCount(scale) {\n        var opts = scale.options;\n        return opts.angleLines.display || opts.pointLabels.display ? scale.chart.data.labels.length : 0;\n    }\n\n    function getTickBackdropHeight(opts) {\n        var tickOpts = opts.ticks;\n\n        if (tickOpts.display && opts.display) {\n            return valueOrDefault$b(tickOpts.fontSize, core_defaults.global.defaultFontSize) + tickOpts.backdropPaddingY * 2;\n        }\n        return 0;\n    }\n\n    function measureLabelSize(ctx, lineHeight, label) {\n        if (helpers$1.isArray(label)) {\n            return {\n                w: helpers$1.longestText(ctx, ctx.font, label),\n                h: label.length * lineHeight\n            };\n        }\n\n        return {\n            w: ctx.measureText(label).width,\n            h: lineHeight\n        };\n    }\n\n    function determineLimits(angle, pos, size, min, max) {\n        if (angle === min || angle === max) {\n            return {\n                start: pos - (size / 2),\n                end: pos + (size / 2)\n            };\n        } else if (angle < min || angle > max) {\n            return {\n                start: pos - size,\n                end: pos\n            };\n        }\n\n        return {\n            start: pos,\n            end: pos + size\n        };\n    }\n\n    /**\n     * Helper function to fit a radial linear scale with point labels\n     */\n    function fitWithPointLabels(scale) {\n\n        // Right, this is really confusing and there is a lot of maths going on here\n        // The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9\n        //\n        // Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif\n        //\n        // Solution:\n        //\n        // We assume the radius of the polygon is half the size of the canvas at first\n        // at each index we check if the text overlaps.\n        //\n        // Where it does, we store that angle and that index.\n        //\n        // After finding the largest index and angle we calculate how much we need to remove\n        // from the shape radius to move the point inwards by that x.\n        //\n        // We average the left and right distances to get the maximum shape radius that can fit in the box\n        // along with labels.\n        //\n        // Once we have that, we can find the centre point for the chart, by taking the x text protrusion\n        // on each side, removing that from the size, halving it and adding the left x protrusion width.\n        //\n        // This will mean we have a shape fitted to the canvas, as large as it can be with the labels\n        // and position it in the most space efficient manner\n        //\n        // https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif\n\n        var plFont = helpers$1.options._parseFont(scale.options.pointLabels);\n\n        // Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.\n        // Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points\n        var furthestLimits = {\n            l: 0,\n            r: scale.width,\n            t: 0,\n            b: scale.height - scale.paddingTop\n        };\n        var furthestAngles = {};\n        var i, textSize, pointPosition;\n\n        scale.ctx.font = plFont.string;\n        scale._pointLabelSizes = [];\n\n        var valueCount = getValueCount(scale);\n        for (i = 0; i < valueCount; i++) {\n            pointPosition = scale.getPointPosition(i, scale.drawingArea + 5);\n            textSize = measureLabelSize(scale.ctx, plFont.lineHeight, scale.pointLabels[i] || '');\n            scale._pointLabelSizes[i] = textSize;\n\n            // Add quarter circle to make degree 0 mean top of circle\n            var angleRadians = scale.getIndexAngle(i);\n            var angle = helpers$1.toDegrees(angleRadians) % 360;\n            var hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n            var vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n\n            if (hLimits.start < furthestLimits.l) {\n                furthestLimits.l = hLimits.start;\n                furthestAngles.l = angleRadians;\n            }\n\n            if (hLimits.end > furthestLimits.r) {\n                furthestLimits.r = hLimits.end;\n                furthestAngles.r = angleRadians;\n            }\n\n            if (vLimits.start < furthestLimits.t) {\n                furthestLimits.t = vLimits.start;\n                furthestAngles.t = angleRadians;\n            }\n\n            if (vLimits.end > furthestLimits.b) {\n                furthestLimits.b = vLimits.end;\n                furthestAngles.b = angleRadians;\n            }\n        }\n\n        scale.setReductions(scale.drawingArea, furthestLimits, furthestAngles);\n    }\n\n    function getTextAlignForAngle(angle) {\n        if (angle === 0 || angle === 180) {\n            return 'center';\n        } else if (angle < 180) {\n            return 'left';\n        }\n\n        return 'right';\n    }\n\n    function fillText(ctx, text, position, lineHeight) {\n        var y = position.y + lineHeight / 2;\n        var i, ilen;\n\n        if (helpers$1.isArray(text)) {\n            for (i = 0, ilen = text.length; i < ilen; ++i) {\n                ctx.fillText(text[i], position.x, y);\n                y += lineHeight;\n            }\n        } else {\n            ctx.fillText(text, position.x, y);\n        }\n    }\n\n    function adjustPointPositionForLabelHeight(angle, textSize, position) {\n        if (angle === 90 || angle === 270) {\n            position.y -= (textSize.h / 2);\n        } else if (angle > 270 || angle < 90) {\n            position.y -= textSize.h;\n        }\n    }\n\n    function drawPointLabels(scale) {\n        var ctx = scale.ctx;\n        var opts = scale.options;\n        var angleLineOpts = opts.angleLines;\n        var gridLineOpts = opts.gridLines;\n        var pointLabelOpts = opts.pointLabels;\n        var lineWidth = valueOrDefault$b(angleLineOpts.lineWidth, gridLineOpts.lineWidth);\n        var lineColor = valueOrDefault$b(angleLineOpts.color, gridLineOpts.color);\n        var tickBackdropHeight = getTickBackdropHeight(opts);\n\n        ctx.save();\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = lineColor;\n        if (ctx.setLineDash) {\n            ctx.setLineDash(resolve$7([angleLineOpts.borderDash, gridLineOpts.borderDash, []]));\n            ctx.lineDashOffset = resolve$7([angleLineOpts.borderDashOffset, gridLineOpts.borderDashOffset, 0.0]);\n        }\n\n        var outerDistance = scale.getDistanceFromCenterForValue(opts.ticks.reverse ? scale.min : scale.max);\n\n        // Point Label Font\n        var plFont = helpers$1.options._parseFont(pointLabelOpts);\n\n        ctx.font = plFont.string;\n        ctx.textBaseline = 'middle';\n\n        for (var i = getValueCount(scale) - 1; i >= 0; i--) {\n            if (angleLineOpts.display && lineWidth && lineColor) {\n                var outerPosition = scale.getPointPosition(i, outerDistance);\n                ctx.beginPath();\n                ctx.moveTo(scale.xCenter, scale.yCenter);\n                ctx.lineTo(outerPosition.x, outerPosition.y);\n                ctx.stroke();\n            }\n\n            if (pointLabelOpts.display) {\n                // Extra pixels out for some label spacing\n                var extra = (i === 0 ? tickBackdropHeight / 2 : 0);\n                var pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + 5);\n\n                // Keep this in loop since we may support array properties here\n                var pointLabelFontColor = valueAtIndexOrDefault$1(pointLabelOpts.fontColor, i, core_defaults.global.defaultFontColor);\n                ctx.fillStyle = pointLabelFontColor;\n\n                var angleRadians = scale.getIndexAngle(i);\n                var angle = helpers$1.toDegrees(angleRadians);\n                ctx.textAlign = getTextAlignForAngle(angle);\n                adjustPointPositionForLabelHeight(angle, scale._pointLabelSizes[i], pointLabelPosition);\n                fillText(ctx, scale.pointLabels[i] || '', pointLabelPosition, plFont.lineHeight);\n            }\n        }\n        ctx.restore();\n    }\n\n    function drawRadiusLine(scale, gridLineOpts, radius, index) {\n        var ctx = scale.ctx;\n        var circular = gridLineOpts.circular;\n        var valueCount = getValueCount(scale);\n        var lineColor = valueAtIndexOrDefault$1(gridLineOpts.color, index - 1);\n        var lineWidth = valueAtIndexOrDefault$1(gridLineOpts.lineWidth, index - 1);\n        var pointPosition;\n\n        if ((!circular && !valueCount) || !lineColor || !lineWidth) {\n            return;\n        }\n\n        ctx.save();\n        ctx.strokeStyle = lineColor;\n        ctx.lineWidth = lineWidth;\n        if (ctx.setLineDash) {\n            ctx.setLineDash(gridLineOpts.borderDash || []);\n            ctx.lineDashOffset = gridLineOpts.borderDashOffset || 0.0;\n        }\n\n        ctx.beginPath();\n        if (circular) {\n            // Draw circular arcs between the points\n            ctx.arc(scale.xCenter, scale.yCenter, radius, 0, Math.PI * 2);\n        } else {\n            // Draw straight lines connecting each index\n            pointPosition = scale.getPointPosition(0, radius);\n            ctx.moveTo(pointPosition.x, pointPosition.y);\n\n            for (var i = 1; i < valueCount; i++) {\n                pointPosition = scale.getPointPosition(i, radius);\n                ctx.lineTo(pointPosition.x, pointPosition.y);\n            }\n        }\n        ctx.closePath();\n        ctx.stroke();\n        ctx.restore();\n    }\n\n    function numberOrZero(param) {\n        return helpers$1.isNumber(param) ? param : 0;\n    }\n\n    var scale_radialLinear = scale_linearbase.extend({\n        setDimensions: function() {\n            var me = this;\n\n            // Set the unconstrained dimension before label rotation\n            me.width = me.maxWidth;\n            me.height = me.maxHeight;\n            me.paddingTop = getTickBackdropHeight(me.options) / 2;\n            me.xCenter = Math.floor(me.width / 2);\n            me.yCenter = Math.floor((me.height - me.paddingTop) / 2);\n            me.drawingArea = Math.min(me.height - me.paddingTop, me.width) / 2;\n        },\n\n        determineDataLimits: function() {\n            var me = this;\n            var chart = me.chart;\n            var min = Number.POSITIVE_INFINITY;\n            var max = Number.NEGATIVE_INFINITY;\n\n            helpers$1.each(chart.data.datasets, function(dataset, datasetIndex) {\n                if (chart.isDatasetVisible(datasetIndex)) {\n                    var meta = chart.getDatasetMeta(datasetIndex);\n\n                    helpers$1.each(dataset.data, function(rawValue, index) {\n                        var value = +me.getRightValue(rawValue);\n                        if (isNaN(value) || meta.data[index].hidden) {\n                            return;\n                        }\n\n                        min = Math.min(value, min);\n                        max = Math.max(value, max);\n                    });\n                }\n            });\n\n            me.min = (min === Number.POSITIVE_INFINITY ? 0 : min);\n            me.max = (max === Number.NEGATIVE_INFINITY ? 0 : max);\n\n            // Common base implementation to handle ticks.min, ticks.max, ticks.beginAtZero\n            me.handleTickRangeOptions();\n        },\n\n        // Returns the maximum number of ticks based on the scale dimension\n        _computeTickLimit: function() {\n            return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n        },\n\n        convertTicksToLabels: function() {\n            var me = this;\n\n            scale_linearbase.prototype.convertTicksToLabels.call(me);\n\n            // Point labels\n            me.pointLabels = me.chart.data.labels.map(me.options.pointLabels.callback, me);\n        },\n\n        getLabelForIndex: function(index, datasetIndex) {\n            return +this.getRightValue(this.chart.data.datasets[datasetIndex].data[index]);\n        },\n\n        fit: function() {\n            var me = this;\n            var opts = me.options;\n\n            if (opts.display && opts.pointLabels.display) {\n                fitWithPointLabels(me);\n            } else {\n                me.setCenterPoint(0, 0, 0, 0);\n            }\n        },\n\n        /**\n         * Set radius reductions and determine new radius and center point\n         * @private\n         */\n        setReductions: function(largestPossibleRadius, furthestLimits, furthestAngles) {\n            var me = this;\n            var radiusReductionLeft = furthestLimits.l / Math.sin(furthestAngles.l);\n            var radiusReductionRight = Math.max(furthestLimits.r - me.width, 0) / Math.sin(furthestAngles.r);\n            var radiusReductionTop = -furthestLimits.t / Math.cos(furthestAngles.t);\n            var radiusReductionBottom = -Math.max(furthestLimits.b - (me.height - me.paddingTop), 0) / Math.cos(furthestAngles.b);\n\n            radiusReductionLeft = numberOrZero(radiusReductionLeft);\n            radiusReductionRight = numberOrZero(radiusReductionRight);\n            radiusReductionTop = numberOrZero(radiusReductionTop);\n            radiusReductionBottom = numberOrZero(radiusReductionBottom);\n\n            me.drawingArea = Math.min(\n                Math.floor(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2),\n                Math.floor(largestPossibleRadius - (radiusReductionTop + radiusReductionBottom) / 2));\n            me.setCenterPoint(radiusReductionLeft, radiusReductionRight, radiusReductionTop, radiusReductionBottom);\n        },\n\n        setCenterPoint: function(leftMovement, rightMovement, topMovement, bottomMovement) {\n            var me = this;\n            var maxRight = me.width - rightMovement - me.drawingArea;\n            var maxLeft = leftMovement + me.drawingArea;\n            var maxTop = topMovement + me.drawingArea;\n            var maxBottom = (me.height - me.paddingTop) - bottomMovement - me.drawingArea;\n\n            me.xCenter = Math.floor(((maxLeft + maxRight) / 2) + me.left);\n            me.yCenter = Math.floor(((maxTop + maxBottom) / 2) + me.top + me.paddingTop);\n        },\n\n        getIndexAngle: function(index) {\n            var angleMultiplier = (Math.PI * 2) / getValueCount(this);\n            var startAngle = this.chart.options && this.chart.options.startAngle ?\n                this.chart.options.startAngle :\n                0;\n\n            var startAngleRadians = startAngle * Math.PI * 2 / 360;\n\n            // Start from the top instead of right, so remove a quarter of the circle\n            return index * angleMultiplier + startAngleRadians;\n        },\n\n        getDistanceFromCenterForValue: function(value) {\n            var me = this;\n\n            if (value === null) {\n                return 0; // null always in center\n            }\n\n            // Take into account half font size + the yPadding of the top value\n            var scalingFactor = me.drawingArea / (me.max - me.min);\n            if (me.options.ticks.reverse) {\n                return (me.max - value) * scalingFactor;\n            }\n            return (value - me.min) * scalingFactor;\n        },\n\n        getPointPosition: function(index, distanceFromCenter) {\n            var me = this;\n            var thisAngle = me.getIndexAngle(index) - (Math.PI / 2);\n            return {\n                x: Math.cos(thisAngle) * distanceFromCenter + me.xCenter,\n                y: Math.sin(thisAngle) * distanceFromCenter + me.yCenter\n            };\n        },\n\n        getPointPositionForValue: function(index, value) {\n            return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n        },\n\n        getBasePosition: function() {\n            var me = this;\n            var min = me.min;\n            var max = me.max;\n\n            return me.getPointPositionForValue(0,\n                me.beginAtZero ? 0 :\n                min < 0 && max < 0 ? max :\n                min > 0 && max > 0 ? min :\n                0);\n        },\n\n        draw: function() {\n            var me = this;\n            var opts = me.options;\n            var gridLineOpts = opts.gridLines;\n            var tickOpts = opts.ticks;\n\n            if (opts.display) {\n                var ctx = me.ctx;\n                var startAngle = this.getIndexAngle(0);\n                var tickFont = helpers$1.options._parseFont(tickOpts);\n\n                if (opts.angleLines.display || opts.pointLabels.display) {\n                    drawPointLabels(me);\n                }\n\n                helpers$1.each(me.ticks, function(label, index) {\n                    // Don't draw a centre value (if it is minimum)\n                    if (index > 0 || tickOpts.reverse) {\n                        var yCenterOffset = me.getDistanceFromCenterForValue(me.ticksAsNumbers[index]);\n\n                        // Draw circular lines around the scale\n                        if (gridLineOpts.display && index !== 0) {\n                            drawRadiusLine(me, gridLineOpts, yCenterOffset, index);\n                        }\n\n                        if (tickOpts.display) {\n                            var tickFontColor = valueOrDefault$b(tickOpts.fontColor, core_defaults.global.defaultFontColor);\n                            ctx.font = tickFont.string;\n\n                            ctx.save();\n                            ctx.translate(me.xCenter, me.yCenter);\n                            ctx.rotate(startAngle);\n\n                            if (tickOpts.showLabelBackdrop) {\n                                var labelWidth = ctx.measureText(label).width;\n                                ctx.fillStyle = tickOpts.backdropColor;\n                                ctx.fillRect(\n                                    -labelWidth / 2 - tickOpts.backdropPaddingX,\n                                    -yCenterOffset - tickFont.size / 2 - tickOpts.backdropPaddingY,\n                                    labelWidth + tickOpts.backdropPaddingX * 2,\n                                    tickFont.size + tickOpts.backdropPaddingY * 2\n                                );\n                            }\n\n                            ctx.textAlign = 'center';\n                            ctx.textBaseline = 'middle';\n                            ctx.fillStyle = tickFontColor;\n                            ctx.fillText(label, 0, -yCenterOffset);\n                            ctx.restore();\n                        }\n                    }\n                });\n            }\n        }\n    });\n\n    // INTERNAL: static default options, registered in src/index.js\n    var _defaults$3 = defaultConfig$3;\n    scale_radialLinear._defaults = _defaults$3;\n\n    var valueOrDefault$c = helpers$1.valueOrDefault;\n\n    // Integer constants are from the ES6 spec.\n    var MIN_INTEGER = Number.MIN_SAFE_INTEGER || -9007199254740991;\n    var MAX_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\n\n    var INTERVALS = {\n        millisecond: {\n            common: true,\n            size: 1,\n            steps: [1, 2, 5, 10, 20, 50, 100, 250, 500]\n        },\n        second: {\n            common: true,\n            size: 1000,\n            steps: [1, 2, 5, 10, 15, 30]\n        },\n        minute: {\n            common: true,\n            size: 60000,\n            steps: [1, 2, 5, 10, 15, 30]\n        },\n        hour: {\n            common: true,\n            size: 3600000,\n            steps: [1, 2, 3, 6, 12]\n        },\n        day: {\n            common: true,\n            size: 86400000,\n            steps: [1, 2, 5]\n        },\n        week: {\n            common: false,\n            size: 604800000,\n            steps: [1, 2, 3, 4]\n        },\n        month: {\n            common: true,\n            size: 2.628e9,\n            steps: [1, 2, 3]\n        },\n        quarter: {\n            common: false,\n            size: 7.884e9,\n            steps: [1, 2, 3, 4]\n        },\n        year: {\n            common: true,\n            size: 3.154e10\n        }\n    };\n\n    var UNITS = Object.keys(INTERVALS);\n\n    function sorter(a, b) {\n        return a - b;\n    }\n\n    function arrayUnique(items) {\n        var hash = {};\n        var out = [];\n        var i, ilen, item;\n\n        for (i = 0, ilen = items.length; i < ilen; ++i) {\n            item = items[i];\n            if (!hash[item]) {\n                hash[item] = true;\n                out.push(item);\n            }\n        }\n\n        return out;\n    }\n\n    /**\n     * Returns an array of {time, pos} objects used to interpolate a specific `time` or position\n     * (`pos`) on the scale, by searching entries before and after the requested value. `pos` is\n     * a decimal between 0 and 1: 0 being the start of the scale (left or top) and 1 the other\n     * extremity (left + width or top + height). Note that it would be more optimized to directly\n     * store pre-computed pixels, but the scale dimensions are not guaranteed at the time we need\n     * to create the lookup table. The table ALWAYS contains at least two items: min and max.\n     *\n     * @param {number[]} timestamps - timestamps sorted from lowest to highest.\n     * @param {string} distribution - If 'linear', timestamps will be spread linearly along the min\n     * and max range, so basically, the table will contains only two items: {min, 0} and {max, 1}.\n     * If 'series', timestamps will be positioned at the same distance from each other. In this\n     * case, only timestamps that break the time linearity are registered, meaning that in the\n     * best case, all timestamps are linear, the table contains only min and max.\n     */\n    function buildLookupTable(timestamps, min, max, distribution) {\n        if (distribution === 'linear' || !timestamps.length) {\n            return [\n                {time: min, pos: 0},\n                {time: max, pos: 1}\n            ];\n        }\n\n        var table = [];\n        var items = [min];\n        var i, ilen, prev, curr, next;\n\n        for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n            curr = timestamps[i];\n            if (curr > min && curr < max) {\n                items.push(curr);\n            }\n        }\n\n        items.push(max);\n\n        for (i = 0, ilen = items.length; i < ilen; ++i) {\n            next = items[i + 1];\n            prev = items[i - 1];\n            curr = items[i];\n\n            // only add points that breaks the scale linearity\n            if (prev === undefined || next === undefined || Math.round((next + prev) / 2) !== curr) {\n                table.push({time: curr, pos: i / (ilen - 1)});\n            }\n        }\n\n        return table;\n    }\n\n    // @see adapted from https://www.anujgakhar.com/2014/03/01/binary-search-in-javascript/\n    function lookup(table, key, value) {\n        var lo = 0;\n        var hi = table.length - 1;\n        var mid, i0, i1;\n\n        while (lo >= 0 && lo <= hi) {\n            mid = (lo + hi) >> 1;\n            i0 = table[mid - 1] || null;\n            i1 = table[mid];\n\n            if (!i0) {\n                // given value is outside table (before first item)\n                return {lo: null, hi: i1};\n            } else if (i1[key] < value) {\n                lo = mid + 1;\n            } else if (i0[key] > value) {\n                hi = mid - 1;\n            } else {\n                return {lo: i0, hi: i1};\n            }\n        }\n\n        // given value is outside table (after last item)\n        return {lo: i1, hi: null};\n    }\n\n    /**\n     * Linearly interpolates the given source `value` using the table items `skey` values and\n     * returns the associated `tkey` value. For example, interpolate(table, 'time', 42, 'pos')\n     * returns the position for a timestamp equal to 42. If value is out of bounds, values at\n     * index [0, 1] or [n - 1, n] are used for the interpolation.\n     */\n    function interpolate$1(table, skey, sval, tkey) {\n        var range = lookup(table, skey, sval);\n\n        // Note: the lookup table ALWAYS contains at least 2 items (min and max)\n        var prev = !range.lo ? table[0] : !range.hi ? table[table.length - 2] : range.lo;\n        var next = !range.lo ? table[1] : !range.hi ? table[table.length - 1] : range.hi;\n\n        var span = next[skey] - prev[skey];\n        var ratio = span ? (sval - prev[skey]) / span : 0;\n        var offset = (next[tkey] - prev[tkey]) * ratio;\n\n        return prev[tkey] + offset;\n    }\n\n    function toTimestamp(scale, input) {\n        var adapter = scale._adapter;\n        var options = scale.options.time;\n        var parser = options.parser;\n        var format = parser || options.format;\n        var value = input;\n\n        if (typeof parser === 'function') {\n            value = parser(value);\n        }\n\n        // Only parse if its not a timestamp already\n        if (!helpers$1.isFinite(value)) {\n            value = typeof format === 'string'\n                ? adapter.parse(value, format)\n                : adapter.parse(value);\n        }\n\n        if (value !== null) {\n            return +value;\n        }\n\n        // Labels are in an incompatible format and no `parser` has been provided.\n        // The user might still use the deprecated `format` option for parsing.\n        if (!parser && typeof format === 'function') {\n            value = format(input);\n\n            // `format` could return something else than a timestamp, if so, parse it\n            if (!helpers$1.isFinite(value)) {\n                value = adapter.parse(value);\n            }\n        }\n\n        return value;\n    }\n\n    function parse(scale, input) {\n        if (helpers$1.isNullOrUndef(input)) {\n            return null;\n        }\n\n        var options = scale.options.time;\n        var value = toTimestamp(scale, scale.getRightValue(input));\n        if (value === null) {\n            return value;\n        }\n\n        if (options.round) {\n            value = +scale._adapter.startOf(value, options.round);\n        }\n\n        return value;\n    }\n\n    /**\n     * Returns the number of unit to skip to be able to display up to `capacity` number of ticks\n     * in `unit` for the given `min` / `max` range and respecting the interval steps constraints.\n     */\n    function determineStepSize(min, max, unit, capacity) {\n        var range = max - min;\n        var interval = INTERVALS[unit];\n        var milliseconds = interval.size;\n        var steps = interval.steps;\n        var i, ilen, factor;\n\n        if (!steps) {\n            return Math.ceil(range / (capacity * milliseconds));\n        }\n\n        for (i = 0, ilen = steps.length; i < ilen; ++i) {\n            factor = steps[i];\n            if (Math.ceil(range / (milliseconds * factor)) <= capacity) {\n                break;\n            }\n        }\n\n        return factor;\n    }\n\n    /**\n     * Figures out what unit results in an appropriate number of auto-generated ticks\n     */\n    function determineUnitForAutoTicks(minUnit, min, max, capacity) {\n        var ilen = UNITS.length;\n        var i, interval, factor;\n\n        for (i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n            interval = INTERVALS[UNITS[i]];\n            factor = interval.steps ? interval.steps[interval.steps.length - 1] : MAX_INTEGER;\n\n            if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n                return UNITS[i];\n            }\n        }\n\n        return UNITS[ilen - 1];\n    }\n\n    /**\n     * Figures out what unit to format a set of ticks with\n     */\n    function determineUnitForFormatting(scale, ticks, minUnit, min, max) {\n        var ilen = UNITS.length;\n        var i, unit;\n\n        for (i = ilen - 1; i >= UNITS.indexOf(minUnit); i--) {\n            unit = UNITS[i];\n            if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= ticks.length) {\n                return unit;\n            }\n        }\n\n        return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n    }\n\n    function determineMajorUnit(unit) {\n        for (var i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n            if (INTERVALS[UNITS[i]].common) {\n                return UNITS[i];\n            }\n        }\n    }\n\n    /**\n     * Generates a maximum of `capacity` timestamps between min and max, rounded to the\n     * `minor` unit, aligned on the `major` unit and using the given scale time `options`.\n     * Important: this method can return ticks outside the min and max range, it's the\n     * responsibility of the calling code to clamp values if needed.\n     */\n    function generate(scale, min, max, capacity) {\n        var adapter = scale._adapter;\n        var options = scale.options;\n        var timeOpts = options.time;\n        var minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, capacity);\n        var major = determineMajorUnit(minor);\n        var stepSize = valueOrDefault$c(timeOpts.stepSize, timeOpts.unitStepSize);\n        var weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n        var majorTicksEnabled = options.ticks.major.enabled;\n        var interval = INTERVALS[minor];\n        var first = min;\n        var last = max;\n        var ticks = [];\n        var time;\n\n        if (!stepSize) {\n            stepSize = determineStepSize(min, max, minor, capacity);\n        }\n\n        // For 'week' unit, handle the first day of week option\n        if (weekday) {\n            first = +adapter.startOf(first, 'isoWeek', weekday);\n            last = +adapter.startOf(last, 'isoWeek', weekday);\n        }\n\n        // Align first/last ticks on unit\n        first = +adapter.startOf(first, weekday ? 'day' : minor);\n        last = +adapter.startOf(last, weekday ? 'day' : minor);\n\n        // Make sure that the last tick include max\n        if (last < max) {\n            last = +adapter.add(last, 1, minor);\n        }\n\n        time = first;\n\n        if (majorTicksEnabled && major && !weekday && !timeOpts.round) {\n            // Align the first tick on the previous `minor` unit aligned on the `major` unit:\n            // we first aligned time on the previous `major` unit then add the number of full\n            // stepSize there is between first and the previous major time.\n            time = +adapter.startOf(time, major);\n            time = +adapter.add(time, ~~((first - time) / (interval.size * stepSize)) * stepSize, minor);\n        }\n\n        for (; time < last; time = +adapter.add(time, stepSize, minor)) {\n            ticks.push(+time);\n        }\n\n        ticks.push(+time);\n\n        return ticks;\n    }\n\n    /**\n     * Returns the start and end offsets from edges in the form of {start, end}\n     * where each value is a relative width to the scale and ranges between 0 and 1.\n     * They add extra margins on the both sides by scaling down the original scale.\n     * Offsets are added when the `offset` option is true.\n     */\n    function computeOffsets(table, ticks, min, max, options) {\n        var start = 0;\n        var end = 0;\n        var first, last;\n\n        if (options.offset && ticks.length) {\n            if (!options.time.min) {\n                first = interpolate$1(table, 'time', ticks[0], 'pos');\n                if (ticks.length === 1) {\n                    start = 1 - first;\n                } else {\n                    start = (interpolate$1(table, 'time', ticks[1], 'pos') - first) / 2;\n                }\n            }\n            if (!options.time.max) {\n                last = interpolate$1(table, 'time', ticks[ticks.length - 1], 'pos');\n                if (ticks.length === 1) {\n                    end = last;\n                } else {\n                    end = (last - interpolate$1(table, 'time', ticks[ticks.length - 2], 'pos')) / 2;\n                }\n            }\n        }\n\n        return {start: start, end: end};\n    }\n\n    function ticksFromTimestamps(scale, values, majorUnit) {\n        var ticks = [];\n        var i, ilen, value, major;\n\n        for (i = 0, ilen = values.length; i < ilen; ++i) {\n            value = values[i];\n            major = majorUnit ? value === +scale._adapter.startOf(value, majorUnit) : false;\n\n            ticks.push({\n                value: value,\n                major: major\n            });\n        }\n\n        return ticks;\n    }\n\n    var defaultConfig$4 = {\n        position: 'bottom',\n\n        /**\n         * Data distribution along the scale:\n         * - 'linear': data are spread according to their time (distances can vary),\n         * - 'series': data are spread at the same distance from each other.\n         * @see https://github.com/chartjs/Chart.js/pull/4507\n         * @since 2.7.0\n         */\n        distribution: 'linear',\n\n        /**\n         * Scale boundary strategy (bypassed by min/max time options)\n         * - `data`: make sure data are fully visible, ticks outside are removed\n         * - `ticks`: make sure ticks are fully visible, data outside are truncated\n         * @see https://github.com/chartjs/Chart.js/pull/4556\n         * @since 2.7.0\n         */\n        bounds: 'data',\n\n        adapters: {},\n        time: {\n            parser: false, // false == a pattern string from https://momentjs.com/docs/#/parsing/string-format/ or a custom callback that converts its argument to a moment\n            format: false, // DEPRECATED false == date objects, moment object, callback or a pattern string from https://momentjs.com/docs/#/parsing/string-format/\n            unit: false, // false == automatic or override with week, month, year, etc.\n            round: false, // none, or override with week, month, year, etc.\n            displayFormat: false, // DEPRECATED\n            isoWeekday: false, // override week start day - see https://momentjs.com/docs/#/get-set/iso-weekday/\n            minUnit: 'millisecond',\n            displayFormats: {}\n        },\n        ticks: {\n            autoSkip: false,\n\n            /**\n             * Ticks generation input values:\n             * - 'auto': generates \"optimal\" ticks based on scale size and time options.\n             * - 'data': generates ticks from data (including labels from data {t|x|y} objects).\n             * - 'labels': generates ticks from user given `data.labels` values ONLY.\n             * @see https://github.com/chartjs/Chart.js/pull/4507\n             * @since 2.7.0\n             */\n            source: 'auto',\n\n            major: {\n                enabled: false\n            }\n        }\n    };\n\n    var scale_time = core_scale.extend({\n        initialize: function() {\n            this.mergeTicksOptions();\n            core_scale.prototype.initialize.call(this);\n        },\n\n        update: function() {\n            var me = this;\n            var options = me.options;\n            var time = options.time || (options.time = {});\n            var adapter = me._adapter = new core_adapters._date(options.adapters.date);\n\n            // DEPRECATIONS: output a message only one time per update\n            if (time.format) {\n                console.warn('options.time.format is deprecated and replaced by options.time.parser.');\n            }\n\n            // Backward compatibility: before introducing adapter, `displayFormats` was\n            // supposed to contain *all* unit/string pairs but this can't be resolved\n            // when loading the scale (adapters are loaded afterward), so let's populate\n            // missing formats on update\n            helpers$1.mergeIf(time.displayFormats, adapter.formats());\n\n            return core_scale.prototype.update.apply(me, arguments);\n        },\n\n        /**\n         * Allows data to be referenced via 't' attribute\n         */\n        getRightValue: function(rawValue) {\n            if (rawValue && rawValue.t !== undefined) {\n                rawValue = rawValue.t;\n            }\n            return core_scale.prototype.getRightValue.call(this, rawValue);\n        },\n\n        determineDataLimits: function() {\n            var me = this;\n            var chart = me.chart;\n            var adapter = me._adapter;\n            var timeOpts = me.options.time;\n            var unit = timeOpts.unit || 'day';\n            var min = MAX_INTEGER;\n            var max = MIN_INTEGER;\n            var timestamps = [];\n            var datasets = [];\n            var labels = [];\n            var i, j, ilen, jlen, data, timestamp;\n            var dataLabels = chart.data.labels || [];\n\n            // Convert labels to timestamps\n            for (i = 0, ilen = dataLabels.length; i < ilen; ++i) {\n                labels.push(parse(me, dataLabels[i]));\n            }\n\n            // Convert data to timestamps\n            for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {\n                if (chart.isDatasetVisible(i)) {\n                    data = chart.data.datasets[i].data;\n\n                    // Let's consider that all data have the same format.\n                    if (helpers$1.isObject(data[0])) {\n                        datasets[i] = [];\n\n                        for (j = 0, jlen = data.length; j < jlen; ++j) {\n                            timestamp = parse(me, data[j]);\n                            timestamps.push(timestamp);\n                            datasets[i][j] = timestamp;\n                        }\n                    } else {\n                        for (j = 0, jlen = labels.length; j < jlen; ++j) {\n                            timestamps.push(labels[j]);\n                        }\n                        datasets[i] = labels.slice(0);\n                    }\n                } else {\n                    datasets[i] = [];\n                }\n            }\n\n            if (labels.length) {\n                // Sort labels **after** data have been converted\n                labels = arrayUnique(labels).sort(sorter);\n                min = Math.min(min, labels[0]);\n                max = Math.max(max, labels[labels.length - 1]);\n            }\n\n            if (timestamps.length) {\n                timestamps = arrayUnique(timestamps).sort(sorter);\n                min = Math.min(min, timestamps[0]);\n                max = Math.max(max, timestamps[timestamps.length - 1]);\n            }\n\n            min = parse(me, timeOpts.min) || min;\n            max = parse(me, timeOpts.max) || max;\n\n            // In case there is no valid min/max, set limits based on unit time option\n            min = min === MAX_INTEGER ? +adapter.startOf(Date.now(), unit) : min;\n            max = max === MIN_INTEGER ? +adapter.endOf(Date.now(), unit) + 1 : max;\n\n            // Make sure that max is strictly higher than min (required by the lookup table)\n            me.min = Math.min(min, max);\n            me.max = Math.max(min + 1, max);\n\n            // PRIVATE\n            me._horizontal = me.isHorizontal();\n            me._table = [];\n            me._timestamps = {\n                data: timestamps,\n                datasets: datasets,\n                labels: labels\n            };\n        },\n\n        buildTicks: function() {\n            var me = this;\n            var min = me.min;\n            var max = me.max;\n            var options = me.options;\n            var timeOpts = options.time;\n            var timestamps = [];\n            var ticks = [];\n            var i, ilen, timestamp;\n\n            switch (options.ticks.source) {\n            case 'data':\n                timestamps = me._timestamps.data;\n                break;\n            case 'labels':\n                timestamps = me._timestamps.labels;\n                break;\n            case 'auto':\n            default:\n                timestamps = generate(me, min, max, me.getLabelCapacity(min), options);\n            }\n\n            if (options.bounds === 'ticks' && timestamps.length) {\n                min = timestamps[0];\n                max = timestamps[timestamps.length - 1];\n            }\n\n            // Enforce limits with user min/max options\n            min = parse(me, timeOpts.min) || min;\n            max = parse(me, timeOpts.max) || max;\n\n            // Remove ticks outside the min/max range\n            for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n                timestamp = timestamps[i];\n                if (timestamp >= min && timestamp <= max) {\n                    ticks.push(timestamp);\n                }\n            }\n\n            me.min = min;\n            me.max = max;\n\n            // PRIVATE\n            me._unit = timeOpts.unit || determineUnitForFormatting(me, ticks, timeOpts.minUnit, me.min, me.max);\n            me._majorUnit = determineMajorUnit(me._unit);\n            me._table = buildLookupTable(me._timestamps.data, min, max, options.distribution);\n            me._offsets = computeOffsets(me._table, ticks, min, max, options);\n\n            if (options.ticks.reverse) {\n                ticks.reverse();\n            }\n\n            return ticksFromTimestamps(me, ticks, me._majorUnit);\n        },\n\n        getLabelForIndex: function(index, datasetIndex) {\n            var me = this;\n            var adapter = me._adapter;\n            var data = me.chart.data;\n            var timeOpts = me.options.time;\n            var label = data.labels && index < data.labels.length ? data.labels[index] : '';\n            var value = data.datasets[datasetIndex].data[index];\n\n            if (helpers$1.isObject(value)) {\n                label = me.getRightValue(value);\n            }\n            if (timeOpts.tooltipFormat) {\n                return adapter.format(toTimestamp(me, label), timeOpts.tooltipFormat);\n            }\n            if (typeof label === 'string') {\n                return label;\n            }\n            return adapter.format(toTimestamp(me, label), timeOpts.displayFormats.datetime);\n        },\n\n        /**\n         * Function to format an individual tick mark\n         * @private\n         */\n        tickFormatFunction: function(time, index, ticks, format) {\n            var me = this;\n            var adapter = me._adapter;\n            var options = me.options;\n            var formats = options.time.displayFormats;\n            var minorFormat = formats[me._unit];\n            var majorUnit = me._majorUnit;\n            var majorFormat = formats[majorUnit];\n            var majorTime = +adapter.startOf(time, majorUnit);\n            var majorTickOpts = options.ticks.major;\n            var major = majorTickOpts.enabled && majorUnit && majorFormat && time === majorTime;\n            var label = adapter.format(time, format ? format : major ? majorFormat : minorFormat);\n            var tickOpts = major ? majorTickOpts : options.ticks.minor;\n            var formatter = valueOrDefault$c(tickOpts.callback, tickOpts.userCallback);\n\n            return formatter ? formatter(label, index, ticks) : label;\n        },\n\n        convertTicksToLabels: function(ticks) {\n            var labels = [];\n            var i, ilen;\n\n            for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n                labels.push(this.tickFormatFunction(ticks[i].value, i, ticks));\n            }\n\n            return labels;\n        },\n\n        /**\n         * @private\n         */\n        getPixelForOffset: function(time) {\n            var me = this;\n            var isReverse = me.options.ticks.reverse;\n            var size = me._horizontal ? me.width : me.height;\n            var start = me._horizontal ? isReverse ? me.right : me.left : isReverse ? me.bottom : me.top;\n            var pos = interpolate$1(me._table, 'time', time, 'pos');\n            var offset = size * (me._offsets.start + pos) / (me._offsets.start + 1 + me._offsets.end);\n\n            return isReverse ? start - offset : start + offset;\n        },\n\n        getPixelForValue: function(value, index, datasetIndex) {\n            var me = this;\n            var time = null;\n\n            if (index !== undefined && datasetIndex !== undefined) {\n                time = me._timestamps.datasets[datasetIndex][index];\n            }\n\n            if (time === null) {\n                time = parse(me, value);\n            }\n\n            if (time !== null) {\n                return me.getPixelForOffset(time);\n            }\n        },\n\n        getPixelForTick: function(index) {\n            var ticks = this.getTicks();\n            return index >= 0 && index < ticks.length ?\n                this.getPixelForOffset(ticks[index].value) :\n                null;\n        },\n\n        getValueForPixel: function(pixel) {\n            var me = this;\n            var size = me._horizontal ? me.width : me.height;\n            var start = me._horizontal ? me.left : me.top;\n            var pos = (size ? (pixel - start) / size : 0) * (me._offsets.start + 1 + me._offsets.start) - me._offsets.end;\n            var time = interpolate$1(me._table, 'pos', pos, 'time');\n\n            // DEPRECATION, we should return time directly\n            return me._adapter._create(time);\n        },\n\n        /**\n         * Crude approximation of what the label width might be\n         * @private\n         */\n        getLabelWidth: function(label) {\n            var me = this;\n            var ticksOpts = me.options.ticks;\n            var tickLabelWidth = me.ctx.measureText(label).width;\n            var angle = helpers$1.toRadians(ticksOpts.maxRotation);\n            var cosRotation = Math.cos(angle);\n            var sinRotation = Math.sin(angle);\n            var tickFontSize = valueOrDefault$c(ticksOpts.fontSize, core_defaults.global.defaultFontSize);\n\n            return (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation);\n        },\n\n        /**\n         * @private\n         */\n        getLabelCapacity: function(exampleTime) {\n            var me = this;\n\n            // pick the longest format (milliseconds) for guestimation\n            var format = me.options.time.displayFormats.millisecond;\n            var exampleLabel = me.tickFormatFunction(exampleTime, 0, [], format);\n            var tickLabelWidth = me.getLabelWidth(exampleLabel);\n            var innerWidth = me.isHorizontal() ? me.width : me.height;\n            var capacity = Math.floor(innerWidth / tickLabelWidth);\n\n            return capacity > 0 ? capacity : 1;\n        }\n    });\n\n    // INTERNAL: static default options, registered in src/index.js\n    var _defaults$4 = defaultConfig$4;\n    scale_time._defaults = _defaults$4;\n\n    var scales = {\n        category: scale_category,\n        linear: scale_linear,\n        logarithmic: scale_logarithmic,\n        radialLinear: scale_radialLinear,\n        time: scale_time\n    };\n\n    var FORMATS = {\n        datetime: 'MMM D, YYYY, h:mm:ss a',\n        millisecond: 'h:mm:ss.SSS a',\n        second: 'h:mm:ss a',\n        minute: 'h:mm a',\n        hour: 'hA',\n        day: 'MMM D',\n        week: 'll',\n        month: 'MMM YYYY',\n        quarter: '[Q]Q - YYYY',\n        year: 'YYYY'\n    };\n\n    core_adapters._date.override(typeof moment === 'function' ? {\n        _id: 'moment', // DEBUG ONLY\n\n        formats: function() {\n            return FORMATS;\n        },\n\n        parse: function(value, format) {\n            if (typeof value === 'string' && typeof format === 'string') {\n                value = moment(value, format);\n            } else if (!(value instanceof moment)) {\n                value = moment(value);\n            }\n            return value.isValid() ? value.valueOf() : null;\n        },\n\n        format: function(time, format) {\n            return moment(time).format(format);\n        },\n\n        add: function(time, amount, unit) {\n            return moment(time).add(amount, unit).valueOf();\n        },\n\n        diff: function(max, min, unit) {\n            return moment.duration(moment(max).diff(moment(min))).as(unit);\n        },\n\n        startOf: function(time, unit, weekday) {\n            time = moment(time);\n            if (unit === 'isoWeek') {\n                return time.isoWeekday(weekday).valueOf();\n            }\n            return time.startOf(unit).valueOf();\n        },\n\n        endOf: function(time, unit) {\n            return moment(time).endOf(unit).valueOf();\n        },\n\n        // DEPRECATIONS\n\n        /**\n         * Provided for backward compatibility with scale.getValueForPixel().\n         * @deprecated since version 2.8.0\n         * @todo remove at version 3\n         * @private\n         */\n        _create: function(time) {\n            return moment(time);\n        },\n    } : {});\n\n    core_defaults._set('global', {\n        plugins: {\n            filler: {\n                propagate: true\n            }\n        }\n    });\n\n    var mappers = {\n        dataset: function(source) {\n            var index = source.fill;\n            var chart = source.chart;\n            var meta = chart.getDatasetMeta(index);\n            var visible = meta && chart.isDatasetVisible(index);\n            var points = (visible && meta.dataset._children) || [];\n            var length = points.length || 0;\n\n            return !length ? null : function(point, i) {\n                return (i < length && points[i]._view) || null;\n            };\n        },\n\n        boundary: function(source) {\n            var boundary = source.boundary;\n            var x = boundary ? boundary.x : null;\n            var y = boundary ? boundary.y : null;\n\n            return function(point) {\n                return {\n                    x: x === null ? point.x : x,\n                    y: y === null ? point.y : y,\n                };\n            };\n        }\n    };\n\n    // @todo if (fill[0] === '#')\n    function decodeFill(el, index, count) {\n        var model = el._model || {};\n        var fill = model.fill;\n        var target;\n\n        if (fill === undefined) {\n            fill = !!model.backgroundColor;\n        }\n\n        if (fill === false || fill === null) {\n            return false;\n        }\n\n        if (fill === true) {\n            return 'origin';\n        }\n\n        target = parseFloat(fill, 10);\n        if (isFinite(target) && Math.floor(target) === target) {\n            if (fill[0] === '-' || fill[0] === '+') {\n                target = index + target;\n            }\n\n            if (target === index || target < 0 || target >= count) {\n                return false;\n            }\n\n            return target;\n        }\n\n        switch (fill) {\n        // compatibility\n        case 'bottom':\n            return 'start';\n        case 'top':\n            return 'end';\n        case 'zero':\n            return 'origin';\n        // supported boundaries\n        case 'origin':\n        case 'start':\n        case 'end':\n            return fill;\n        // invalid fill values\n        default:\n            return false;\n        }\n    }\n\n    function computeBoundary(source) {\n        var model = source.el._model || {};\n        var scale = source.el._scale || {};\n        var fill = source.fill;\n        var target = null;\n        var horizontal;\n\n        if (isFinite(fill)) {\n            return null;\n        }\n\n        // Backward compatibility: until v3, we still need to support boundary values set on\n        // the model (scaleTop, scaleBottom and scaleZero) because some external plugins and\n        // controllers might still use it (e.g. the Smith chart).\n\n        if (fill === 'start') {\n            target = model.scaleBottom === undefined ? scale.bottom : model.scaleBottom;\n        } else if (fill === 'end') {\n            target = model.scaleTop === undefined ? scale.top : model.scaleTop;\n        } else if (model.scaleZero !== undefined) {\n            target = model.scaleZero;\n        } else if (scale.getBasePosition) {\n            target = scale.getBasePosition();\n        } else if (scale.getBasePixel) {\n            target = scale.getBasePixel();\n        }\n\n        if (target !== undefined && target !== null) {\n            if (target.x !== undefined && target.y !== undefined) {\n                return target;\n            }\n\n            if (helpers$1.isFinite(target)) {\n                horizontal = scale.isHorizontal();\n                return {\n                    x: horizontal ? target : null,\n                    y: horizontal ? null : target\n                };\n            }\n        }\n\n        return null;\n    }\n\n    function resolveTarget(sources, index, propagate) {\n        var source = sources[index];\n        var fill = source.fill;\n        var visited = [index];\n        var target;\n\n        if (!propagate) {\n            return fill;\n        }\n\n        while (fill !== false && visited.indexOf(fill) === -1) {\n            if (!isFinite(fill)) {\n                return fill;\n            }\n\n            target = sources[fill];\n            if (!target) {\n                return false;\n            }\n\n            if (target.visible) {\n                return fill;\n            }\n\n            visited.push(fill);\n            fill = target.fill;\n        }\n\n        return false;\n    }\n\n    function createMapper(source) {\n        var fill = source.fill;\n        var type = 'dataset';\n\n        if (fill === false) {\n            return null;\n        }\n\n        if (!isFinite(fill)) {\n            type = 'boundary';\n        }\n\n        return mappers[type](source);\n    }\n\n    function isDrawable(point) {\n        return point && !point.skip;\n    }\n\n    function drawArea(ctx, curve0, curve1, len0, len1) {\n        var i;\n\n        if (!len0 || !len1) {\n            return;\n        }\n\n        // building first area curve (normal)\n        ctx.moveTo(curve0[0].x, curve0[0].y);\n        for (i = 1; i < len0; ++i) {\n            helpers$1.canvas.lineTo(ctx, curve0[i - 1], curve0[i]);\n        }\n\n        // joining the two area curves\n        ctx.lineTo(curve1[len1 - 1].x, curve1[len1 - 1].y);\n\n        // building opposite area curve (reverse)\n        for (i = len1 - 1; i > 0; --i) {\n            helpers$1.canvas.lineTo(ctx, curve1[i], curve1[i - 1], true);\n        }\n    }\n\n    function doFill(ctx, points, mapper, view, color, loop) {\n        var count = points.length;\n        var span = view.spanGaps;\n        var curve0 = [];\n        var curve1 = [];\n        var len0 = 0;\n        var len1 = 0;\n        var i, ilen, index, p0, p1, d0, d1;\n\n        ctx.beginPath();\n\n        for (i = 0, ilen = (count + !!loop); i < ilen; ++i) {\n            index = i % count;\n            p0 = points[index]._view;\n            p1 = mapper(p0, index, view);\n            d0 = isDrawable(p0);\n            d1 = isDrawable(p1);\n\n            if (d0 && d1) {\n                len0 = curve0.push(p0);\n                len1 = curve1.push(p1);\n            } else if (len0 && len1) {\n                if (!span) {\n                    drawArea(ctx, curve0, curve1, len0, len1);\n                    len0 = len1 = 0;\n                    curve0 = [];\n                    curve1 = [];\n                } else {\n                    if (d0) {\n                        curve0.push(p0);\n                    }\n                    if (d1) {\n                        curve1.push(p1);\n                    }\n                }\n            }\n        }\n\n        drawArea(ctx, curve0, curve1, len0, len1);\n\n        ctx.closePath();\n        ctx.fillStyle = color;\n        ctx.fill();\n    }\n\n    var plugin_filler = {\n        id: 'filler',\n\n        afterDatasetsUpdate: function(chart, options) {\n            var count = (chart.data.datasets || []).length;\n            var propagate = options.propagate;\n            var sources = [];\n            var meta, i, el, source;\n\n            for (i = 0; i < count; ++i) {\n                meta = chart.getDatasetMeta(i);\n                el = meta.dataset;\n                source = null;\n\n                if (el && el._model && el instanceof elements.Line) {\n                    source = {\n                        visible: chart.isDatasetVisible(i),\n                        fill: decodeFill(el, i, count),\n                        chart: chart,\n                        el: el\n                    };\n                }\n\n                meta.$filler = source;\n                sources.push(source);\n            }\n\n            for (i = 0; i < count; ++i) {\n                source = sources[i];\n                if (!source) {\n                    continue;\n                }\n\n                source.fill = resolveTarget(sources, i, propagate);\n                source.boundary = computeBoundary(source);\n                source.mapper = createMapper(source);\n            }\n        },\n\n        beforeDatasetDraw: function(chart, args) {\n            var meta = args.meta.$filler;\n            if (!meta) {\n                return;\n            }\n\n            var ctx = chart.ctx;\n            var el = meta.el;\n            var view = el._view;\n            var points = el._children || [];\n            var mapper = meta.mapper;\n            var color = view.backgroundColor || core_defaults.global.defaultColor;\n\n            if (mapper && color && points.length) {\n                helpers$1.canvas.clipArea(ctx, chart.chartArea);\n                doFill(ctx, points, mapper, view, color, el._loop);\n                helpers$1.canvas.unclipArea(ctx);\n            }\n        }\n    };\n\n    var noop$1 = helpers$1.noop;\n    var valueOrDefault$d = helpers$1.valueOrDefault;\n\n    core_defaults._set('global', {\n        legend: {\n            display: true,\n            position: 'top',\n            fullWidth: true,\n            reverse: false,\n            weight: 1000,\n\n            // a callback that will handle\n            onClick: function(e, legendItem) {\n                var index = legendItem.datasetIndex;\n                var ci = this.chart;\n                var meta = ci.getDatasetMeta(index);\n\n                // See controller.isDatasetVisible comment\n                meta.hidden = meta.hidden === null ? !ci.data.datasets[index].hidden : null;\n\n                // We hid a dataset ... rerender the chart\n                ci.update();\n            },\n\n            onHover: null,\n            onLeave: null,\n\n            labels: {\n                boxWidth: 40,\n                padding: 10,\n                // Generates labels shown in the legend\n                // Valid properties to return:\n                // text : text to display\n                // fillStyle : fill of coloured box\n                // strokeStyle: stroke of coloured box\n                // hidden : if this legend item refers to a hidden item\n                // lineCap : cap style for line\n                // lineDash\n                // lineDashOffset :\n                // lineJoin :\n                // lineWidth :\n                generateLabels: function(chart) {\n                    var data = chart.data;\n                    return helpers$1.isArray(data.datasets) ? data.datasets.map(function(dataset, i) {\n                        return {\n                            text: dataset.label,\n                            fillStyle: (!helpers$1.isArray(dataset.backgroundColor) ? dataset.backgroundColor : dataset.backgroundColor[0]),\n                            hidden: !chart.isDatasetVisible(i),\n                            lineCap: dataset.borderCapStyle,\n                            lineDash: dataset.borderDash,\n                            lineDashOffset: dataset.borderDashOffset,\n                            lineJoin: dataset.borderJoinStyle,\n                            lineWidth: dataset.borderWidth,\n                            strokeStyle: dataset.borderColor,\n                            pointStyle: dataset.pointStyle,\n\n                            // Below is extra data used for toggling the datasets\n                            datasetIndex: i\n                        };\n                    }, this) : [];\n                }\n            }\n        },\n\n        legendCallback: function(chart) {\n            var text = [];\n            text.push('<ul class=\"' + chart.id + '-legend\">');\n            for (var i = 0; i < chart.data.datasets.length; i++) {\n                text.push('<li><span style=\"background-color:' + chart.data.datasets[i].backgroundColor + '\"></span>');\n                if (chart.data.datasets[i].label) {\n                    text.push(chart.data.datasets[i].label);\n                }\n                text.push('</li>');\n            }\n            text.push('</ul>');\n            return text.join('');\n        }\n    });\n\n    /**\n     * Helper function to get the box width based on the usePointStyle option\n     * @param {object} labelopts - the label options on the legend\n     * @param {number} fontSize - the label font size\n     * @return {number} width of the color box area\n     */\n    function getBoxWidth(labelOpts, fontSize) {\n        return labelOpts.usePointStyle && labelOpts.boxWidth > fontSize ?\n            fontSize :\n            labelOpts.boxWidth;\n    }\n\n    /**\n     * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!\n     */\n    var Legend = core_element.extend({\n\n        initialize: function(config) {\n            helpers$1.extend(this, config);\n\n            // Contains hit boxes for each dataset (in dataset order)\n            this.legendHitBoxes = [];\n\n            /**\n              * @private\n              */\n            this._hoveredItem = null;\n\n            // Are we in doughnut mode which has a different data type\n            this.doughnutMode = false;\n        },\n\n        // These methods are ordered by lifecycle. Utilities then follow.\n        // Any function defined here is inherited by all legend types.\n        // Any function can be extended by the legend type\n\n        beforeUpdate: noop$1,\n        update: function(maxWidth, maxHeight, margins) {\n            var me = this;\n\n            // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n            me.beforeUpdate();\n\n            // Absorb the master measurements\n            me.maxWidth = maxWidth;\n            me.maxHeight = maxHeight;\n            me.margins = margins;\n\n            // Dimensions\n            me.beforeSetDimensions();\n            me.setDimensions();\n            me.afterSetDimensions();\n            // Labels\n            me.beforeBuildLabels();\n            me.buildLabels();\n            me.afterBuildLabels();\n\n            // Fit\n            me.beforeFit();\n            me.fit();\n            me.afterFit();\n            //\n            me.afterUpdate();\n\n            return me.minSize;\n        },\n        afterUpdate: noop$1,\n\n        //\n\n        beforeSetDimensions: noop$1,\n        setDimensions: function() {\n            var me = this;\n            // Set the unconstrained dimension before label rotation\n            if (me.isHorizontal()) {\n                // Reset position before calculating rotation\n                me.width = me.maxWidth;\n                me.left = 0;\n                me.right = me.width;\n            } else {\n                me.height = me.maxHeight;\n\n                // Reset position before calculating rotation\n                me.top = 0;\n                me.bottom = me.height;\n            }\n\n            // Reset padding\n            me.paddingLeft = 0;\n            me.paddingTop = 0;\n            me.paddingRight = 0;\n            me.paddingBottom = 0;\n\n            // Reset minSize\n            me.minSize = {\n                width: 0,\n                height: 0\n            };\n        },\n        afterSetDimensions: noop$1,\n\n        //\n\n        beforeBuildLabels: noop$1,\n        buildLabels: function() {\n            var me = this;\n            var labelOpts = me.options.labels || {};\n            var legendItems = helpers$1.callback(labelOpts.generateLabels, [me.chart], me) || [];\n\n            if (labelOpts.filter) {\n                legendItems = legendItems.filter(function(item) {\n                    return labelOpts.filter(item, me.chart.data);\n                });\n            }\n\n            if (me.options.reverse) {\n                legendItems.reverse();\n            }\n\n            me.legendItems = legendItems;\n        },\n        afterBuildLabels: noop$1,\n\n        //\n\n        beforeFit: noop$1,\n        fit: function() {\n            var me = this;\n            var opts = me.options;\n            var labelOpts = opts.labels;\n            var display = opts.display;\n\n            var ctx = me.ctx;\n\n            var labelFont = helpers$1.options._parseFont(labelOpts);\n            var fontSize = labelFont.size;\n\n            // Reset hit boxes\n            var hitboxes = me.legendHitBoxes = [];\n\n            var minSize = me.minSize;\n            var isHorizontal = me.isHorizontal();\n\n            if (isHorizontal) {\n                minSize.width = me.maxWidth; // fill all the width\n                minSize.height = display ? 10 : 0;\n            } else {\n                minSize.width = display ? 10 : 0;\n                minSize.height = me.maxHeight; // fill all the height\n            }\n\n            // Increase sizes here\n            if (display) {\n                ctx.font = labelFont.string;\n\n                if (isHorizontal) {\n                    // Labels\n\n                    // Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n                    var lineWidths = me.lineWidths = [0];\n                    var totalHeight = 0;\n\n                    ctx.textAlign = 'left';\n                    ctx.textBaseline = 'top';\n\n                    helpers$1.each(me.legendItems, function(legendItem, i) {\n                        var boxWidth = getBoxWidth(labelOpts, fontSize);\n                        var width = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n                        if (i === 0 || lineWidths[lineWidths.length - 1] + width + labelOpts.padding > minSize.width) {\n                            totalHeight += fontSize + labelOpts.padding;\n                            lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = labelOpts.padding;\n                        }\n\n                        // Store the hitbox width and height here. Final position will be updated in `draw`\n                        hitboxes[i] = {\n                            left: 0,\n                            top: 0,\n                            width: width,\n                            height: fontSize\n                        };\n\n                        lineWidths[lineWidths.length - 1] += width + labelOpts.padding;\n                    });\n\n                    minSize.height += totalHeight;\n\n                } else {\n                    var vPadding = labelOpts.padding;\n                    var columnWidths = me.columnWidths = [];\n                    var totalWidth = labelOpts.padding;\n                    var currentColWidth = 0;\n                    var currentColHeight = 0;\n                    var itemHeight = fontSize + vPadding;\n\n                    helpers$1.each(me.legendItems, function(legendItem, i) {\n                        var boxWidth = getBoxWidth(labelOpts, fontSize);\n                        var itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n\n                        // If too tall, go to new column\n                        if (i > 0 && currentColHeight + itemHeight > minSize.height - vPadding) {\n                            totalWidth += currentColWidth + labelOpts.padding;\n                            columnWidths.push(currentColWidth); // previous column width\n\n                            currentColWidth = 0;\n                            currentColHeight = 0;\n                        }\n\n                        // Get max width\n                        currentColWidth = Math.max(currentColWidth, itemWidth);\n                        currentColHeight += itemHeight;\n\n                        // Store the hitbox width and height here. Final position will be updated in `draw`\n                        hitboxes[i] = {\n                            left: 0,\n                            top: 0,\n                            width: itemWidth,\n                            height: fontSize\n                        };\n                    });\n\n                    totalWidth += currentColWidth;\n                    columnWidths.push(currentColWidth);\n                    minSize.width += totalWidth;\n                }\n            }\n\n            me.width = minSize.width;\n            me.height = minSize.height;\n        },\n        afterFit: noop$1,\n\n        // Shared Methods\n        isHorizontal: function() {\n            return this.options.position === 'top' || this.options.position === 'bottom';\n        },\n\n        // Actually draw the legend on the canvas\n        draw: function() {\n            var me = this;\n            var opts = me.options;\n            var labelOpts = opts.labels;\n            var globalDefaults = core_defaults.global;\n            var defaultColor = globalDefaults.defaultColor;\n            var lineDefault = globalDefaults.elements.line;\n            var legendWidth = me.width;\n            var lineWidths = me.lineWidths;\n\n            if (opts.display) {\n                var ctx = me.ctx;\n                var fontColor = valueOrDefault$d(labelOpts.fontColor, globalDefaults.defaultFontColor);\n                var labelFont = helpers$1.options._parseFont(labelOpts);\n                var fontSize = labelFont.size;\n                var cursor;\n\n                // Canvas setup\n                ctx.textAlign = 'left';\n                ctx.textBaseline = 'middle';\n                ctx.lineWidth = 0.5;\n                ctx.strokeStyle = fontColor; // for strikethrough effect\n                ctx.fillStyle = fontColor; // render in correct colour\n                ctx.font = labelFont.string;\n\n                var boxWidth = getBoxWidth(labelOpts, fontSize);\n                var hitboxes = me.legendHitBoxes;\n\n                // current position\n                var drawLegendBox = function(x, y, legendItem) {\n                    if (isNaN(boxWidth) || boxWidth <= 0) {\n                        return;\n                    }\n\n                    // Set the ctx for the box\n                    ctx.save();\n\n                    var lineWidth = valueOrDefault$d(legendItem.lineWidth, lineDefault.borderWidth);\n                    ctx.fillStyle = valueOrDefault$d(legendItem.fillStyle, defaultColor);\n                    ctx.lineCap = valueOrDefault$d(legendItem.lineCap, lineDefault.borderCapStyle);\n                    ctx.lineDashOffset = valueOrDefault$d(legendItem.lineDashOffset, lineDefault.borderDashOffset);\n                    ctx.lineJoin = valueOrDefault$d(legendItem.lineJoin, lineDefault.borderJoinStyle);\n                    ctx.lineWidth = lineWidth;\n                    ctx.strokeStyle = valueOrDefault$d(legendItem.strokeStyle, defaultColor);\n\n                    if (ctx.setLineDash) {\n                        // IE 9 and 10 do not support line dash\n                        ctx.setLineDash(valueOrDefault$d(legendItem.lineDash, lineDefault.borderDash));\n                    }\n\n                    if (opts.labels && opts.labels.usePointStyle) {\n                        // Recalculate x and y for drawPoint() because its expecting\n                        // x and y to be center of figure (instead of top left)\n                        var radius = boxWidth * Math.SQRT2 / 2;\n                        var centerX = x + boxWidth / 2;\n                        var centerY = y + fontSize / 2;\n\n                        // Draw pointStyle as legend symbol\n                        helpers$1.canvas.drawPoint(ctx, legendItem.pointStyle, radius, centerX, centerY);\n                    } else {\n                        // Draw box as legend symbol\n                        if (lineWidth !== 0) {\n                            ctx.strokeRect(x, y, boxWidth, fontSize);\n                        }\n                        ctx.fillRect(x, y, boxWidth, fontSize);\n                    }\n\n                    ctx.restore();\n                };\n                var fillText = function(x, y, legendItem, textWidth) {\n                    var halfFontSize = fontSize / 2;\n                    var xLeft = boxWidth + halfFontSize + x;\n                    var yMiddle = y + halfFontSize;\n\n                    ctx.fillText(legendItem.text, xLeft, yMiddle);\n\n                    if (legendItem.hidden) {\n                        // Strikethrough the text if hidden\n                        ctx.beginPath();\n                        ctx.lineWidth = 2;\n                        ctx.moveTo(xLeft, yMiddle);\n                        ctx.lineTo(xLeft + textWidth, yMiddle);\n                        ctx.stroke();\n                    }\n                };\n\n                // Horizontal\n                var isHorizontal = me.isHorizontal();\n                if (isHorizontal) {\n                    cursor = {\n                        x: me.left + ((legendWidth - lineWidths[0]) / 2) + labelOpts.padding,\n                        y: me.top + labelOpts.padding,\n                        line: 0\n                    };\n                } else {\n                    cursor = {\n                        x: me.left + labelOpts.padding,\n                        y: me.top + labelOpts.padding,\n                        line: 0\n                    };\n                }\n\n                var itemHeight = fontSize + labelOpts.padding;\n                helpers$1.each(me.legendItems, function(legendItem, i) {\n                    var textWidth = ctx.measureText(legendItem.text).width;\n                    var width = boxWidth + (fontSize / 2) + textWidth;\n                    var x = cursor.x;\n                    var y = cursor.y;\n\n                    // Use (me.left + me.minSize.width) and (me.top + me.minSize.height)\n                    // instead of me.right and me.bottom because me.width and me.height\n                    // may have been changed since me.minSize was calculated\n                    if (isHorizontal) {\n                        if (i > 0 && x + width + labelOpts.padding > me.left + me.minSize.width) {\n                            y = cursor.y += itemHeight;\n                            cursor.line++;\n                            x = cursor.x = me.left + ((legendWidth - lineWidths[cursor.line]) / 2) + labelOpts.padding;\n                        }\n                    } else if (i > 0 && y + itemHeight > me.top + me.minSize.height) {\n                        x = cursor.x = x + me.columnWidths[cursor.line] + labelOpts.padding;\n                        y = cursor.y = me.top + labelOpts.padding;\n                        cursor.line++;\n                    }\n\n                    drawLegendBox(x, y, legendItem);\n\n                    hitboxes[i].left = x;\n                    hitboxes[i].top = y;\n\n                    // Fill the actual label\n                    fillText(x, y, legendItem, textWidth);\n\n                    if (isHorizontal) {\n                        cursor.x += width + labelOpts.padding;\n                    } else {\n                        cursor.y += itemHeight;\n                    }\n\n                });\n            }\n        },\n\n        /**\n         * @private\n         */\n        _getLegendItemAt: function(x, y) {\n            var me = this;\n            var i, hitBox, lh;\n\n            if (x >= me.left && x <= me.right && y >= me.top && y <= me.bottom) {\n                // See if we are touching one of the dataset boxes\n                lh = me.legendHitBoxes;\n                for (i = 0; i < lh.length; ++i) {\n                    hitBox = lh[i];\n\n                    if (x >= hitBox.left && x <= hitBox.left + hitBox.width && y >= hitBox.top && y <= hitBox.top + hitBox.height) {\n                        // Touching an element\n                        return me.legendItems[i];\n                    }\n                }\n            }\n\n            return null;\n        },\n\n        /**\n         * Handle an event\n         * @private\n         * @param {IEvent} event - The event to handle\n         */\n        handleEvent: function(e) {\n            var me = this;\n            var opts = me.options;\n            var type = e.type === 'mouseup' ? 'click' : e.type;\n            var hoveredItem;\n\n            if (type === 'mousemove') {\n                if (!opts.onHover && !opts.onLeave) {\n                    return;\n                }\n            } else if (type === 'click') {\n                if (!opts.onClick) {\n                    return;\n                }\n            } else {\n                return;\n            }\n\n            // Chart event already has relative position in it\n            hoveredItem = me._getLegendItemAt(e.x, e.y);\n\n            if (type === 'click') {\n                if (hoveredItem && opts.onClick) {\n                    // use e.native for backwards compatibility\n                    opts.onClick.call(me, e.native, hoveredItem);\n                }\n            } else {\n                if (opts.onLeave && hoveredItem !== me._hoveredItem) {\n                    if (me._hoveredItem) {\n                        opts.onLeave.call(me, e.native, me._hoveredItem);\n                    }\n                    me._hoveredItem = hoveredItem;\n                }\n\n                if (opts.onHover && hoveredItem) {\n                    // use e.native for backwards compatibility\n                    opts.onHover.call(me, e.native, hoveredItem);\n                }\n            }\n        }\n    });\n\n    function createNewLegendAndAttach(chart, legendOpts) {\n        var legend = new Legend({\n            ctx: chart.ctx,\n            options: legendOpts,\n            chart: chart\n        });\n\n        core_layouts.configure(chart, legend, legendOpts);\n        core_layouts.addBox(chart, legend);\n        chart.legend = legend;\n    }\n\n    var plugin_legend = {\n        id: 'legend',\n\n        /**\n         * Backward compatibility: since 2.1.5, the legend is registered as a plugin, making\n         * Chart.Legend obsolete. To avoid a breaking change, we export the Legend as part of\n         * the plugin, which one will be re-exposed in the chart.js file.\n         * https://github.com/chartjs/Chart.js/pull/2640\n         * @private\n         */\n        _element: Legend,\n\n        beforeInit: function(chart) {\n            var legendOpts = chart.options.legend;\n\n            if (legendOpts) {\n                createNewLegendAndAttach(chart, legendOpts);\n            }\n        },\n\n        beforeUpdate: function(chart) {\n            var legendOpts = chart.options.legend;\n            var legend = chart.legend;\n\n            if (legendOpts) {\n                helpers$1.mergeIf(legendOpts, core_defaults.global.legend);\n\n                if (legend) {\n                    core_layouts.configure(chart, legend, legendOpts);\n                    legend.options = legendOpts;\n                } else {\n                    createNewLegendAndAttach(chart, legendOpts);\n                }\n            } else if (legend) {\n                core_layouts.removeBox(chart, legend);\n                delete chart.legend;\n            }\n        },\n\n        afterEvent: function(chart, e) {\n            var legend = chart.legend;\n            if (legend) {\n                legend.handleEvent(e);\n            }\n        }\n    };\n\n    var noop$2 = helpers$1.noop;\n\n    core_defaults._set('global', {\n        title: {\n            display: false,\n            fontStyle: 'bold',\n            fullWidth: true,\n            padding: 10,\n            position: 'top',\n            text: '',\n            weight: 2000         // by default greater than legend (1000) to be above\n        }\n    });\n\n    /**\n     * IMPORTANT: this class is exposed publicly as Chart.Legend, backward compatibility required!\n     */\n    var Title = core_element.extend({\n        initialize: function(config) {\n            var me = this;\n            helpers$1.extend(me, config);\n\n            // Contains hit boxes for each dataset (in dataset order)\n            me.legendHitBoxes = [];\n        },\n\n        // These methods are ordered by lifecycle. Utilities then follow.\n\n        beforeUpdate: noop$2,\n        update: function(maxWidth, maxHeight, margins) {\n            var me = this;\n\n            // Update Lifecycle - Probably don't want to ever extend or overwrite this function ;)\n            me.beforeUpdate();\n\n            // Absorb the master measurements\n            me.maxWidth = maxWidth;\n            me.maxHeight = maxHeight;\n            me.margins = margins;\n\n            // Dimensions\n            me.beforeSetDimensions();\n            me.setDimensions();\n            me.afterSetDimensions();\n            // Labels\n            me.beforeBuildLabels();\n            me.buildLabels();\n            me.afterBuildLabels();\n\n            // Fit\n            me.beforeFit();\n            me.fit();\n            me.afterFit();\n            //\n            me.afterUpdate();\n\n            return me.minSize;\n\n        },\n        afterUpdate: noop$2,\n\n        //\n\n        beforeSetDimensions: noop$2,\n        setDimensions: function() {\n            var me = this;\n            // Set the unconstrained dimension before label rotation\n            if (me.isHorizontal()) {\n                // Reset position before calculating rotation\n                me.width = me.maxWidth;\n                me.left = 0;\n                me.right = me.width;\n            } else {\n                me.height = me.maxHeight;\n\n                // Reset position before calculating rotation\n                me.top = 0;\n                me.bottom = me.height;\n            }\n\n            // Reset padding\n            me.paddingLeft = 0;\n            me.paddingTop = 0;\n            me.paddingRight = 0;\n            me.paddingBottom = 0;\n\n            // Reset minSize\n            me.minSize = {\n                width: 0,\n                height: 0\n            };\n        },\n        afterSetDimensions: noop$2,\n\n        //\n\n        beforeBuildLabels: noop$2,\n        buildLabels: noop$2,\n        afterBuildLabels: noop$2,\n\n        //\n\n        beforeFit: noop$2,\n        fit: function() {\n            var me = this;\n            var opts = me.options;\n            var display = opts.display;\n            var minSize = me.minSize;\n            var lineCount = helpers$1.isArray(opts.text) ? opts.text.length : 1;\n            var fontOpts = helpers$1.options._parseFont(opts);\n            var textSize = display ? (lineCount * fontOpts.lineHeight) + (opts.padding * 2) : 0;\n\n            if (me.isHorizontal()) {\n                minSize.width = me.maxWidth; // fill all the width\n                minSize.height = textSize;\n            } else {\n                minSize.width = textSize;\n                minSize.height = me.maxHeight; // fill all the height\n            }\n\n            me.width = minSize.width;\n            me.height = minSize.height;\n\n        },\n        afterFit: noop$2,\n\n        // Shared Methods\n        isHorizontal: function() {\n            var pos = this.options.position;\n            return pos === 'top' || pos === 'bottom';\n        },\n\n        // Actually draw the title block on the canvas\n        draw: function() {\n            var me = this;\n            var ctx = me.ctx;\n            var opts = me.options;\n\n            if (opts.display) {\n                var fontOpts = helpers$1.options._parseFont(opts);\n                var lineHeight = fontOpts.lineHeight;\n                var offset = lineHeight / 2 + opts.padding;\n                var rotation = 0;\n                var top = me.top;\n                var left = me.left;\n                var bottom = me.bottom;\n                var right = me.right;\n                var maxWidth, titleX, titleY;\n\n                ctx.fillStyle = helpers$1.valueOrDefault(opts.fontColor, core_defaults.global.defaultFontColor); // render in correct colour\n                ctx.font = fontOpts.string;\n\n                // Horizontal\n                if (me.isHorizontal()) {\n                    titleX = left + ((right - left) / 2); // midpoint of the width\n                    titleY = top + offset;\n                    maxWidth = right - left;\n                } else {\n                    titleX = opts.position === 'left' ? left + offset : right - offset;\n                    titleY = top + ((bottom - top) / 2);\n                    maxWidth = bottom - top;\n                    rotation = Math.PI * (opts.position === 'left' ? -0.5 : 0.5);\n                }\n\n                ctx.save();\n                ctx.translate(titleX, titleY);\n                ctx.rotate(rotation);\n                ctx.textAlign = 'center';\n                ctx.textBaseline = 'middle';\n\n                var text = opts.text;\n                if (helpers$1.isArray(text)) {\n                    var y = 0;\n                    for (var i = 0; i < text.length; ++i) {\n                        ctx.fillText(text[i], 0, y, maxWidth);\n                        y += lineHeight;\n                    }\n                } else {\n                    ctx.fillText(text, 0, 0, maxWidth);\n                }\n\n                ctx.restore();\n            }\n        }\n    });\n\n    function createNewTitleBlockAndAttach(chart, titleOpts) {\n        var title = new Title({\n            ctx: chart.ctx,\n            options: titleOpts,\n            chart: chart\n        });\n\n        core_layouts.configure(chart, title, titleOpts);\n        core_layouts.addBox(chart, title);\n        chart.titleBlock = title;\n    }\n\n    var plugin_title = {\n        id: 'title',\n\n        /**\n         * Backward compatibility: since 2.1.5, the title is registered as a plugin, making\n         * Chart.Title obsolete. To avoid a breaking change, we export the Title as part of\n         * the plugin, which one will be re-exposed in the chart.js file.\n         * https://github.com/chartjs/Chart.js/pull/2640\n         * @private\n         */\n        _element: Title,\n\n        beforeInit: function(chart) {\n            var titleOpts = chart.options.title;\n\n            if (titleOpts) {\n                createNewTitleBlockAndAttach(chart, titleOpts);\n            }\n        },\n\n        beforeUpdate: function(chart) {\n            var titleOpts = chart.options.title;\n            var titleBlock = chart.titleBlock;\n\n            if (titleOpts) {\n                helpers$1.mergeIf(titleOpts, core_defaults.global.title);\n\n                if (titleBlock) {\n                    core_layouts.configure(chart, titleBlock, titleOpts);\n                    titleBlock.options = titleOpts;\n                } else {\n                    createNewTitleBlockAndAttach(chart, titleOpts);\n                }\n            } else if (titleBlock) {\n                core_layouts.removeBox(chart, titleBlock);\n                delete chart.titleBlock;\n            }\n        }\n    };\n\n    var plugins = {};\n    var filler = plugin_filler;\n    var legend = plugin_legend;\n    var title = plugin_title;\n    plugins.filler = filler;\n    plugins.legend = legend;\n    plugins.title = title;\n\n    /**\n     * @namespace Chart\n     */\n\n\n    core_controller.helpers = helpers$1;\n\n    // @todo dispatch these helpers into appropriated helpers/helpers.* file and write unit tests!\n    core_helpers(core_controller);\n\n    core_controller._adapters = core_adapters;\n    core_controller.Animation = core_animation;\n    core_controller.animationService = core_animations;\n    core_controller.controllers = controllers;\n    core_controller.DatasetController = core_datasetController;\n    core_controller.defaults = core_defaults;\n    core_controller.Element = core_element;\n    core_controller.elements = elements;\n    core_controller.Interaction = core_interaction;\n    core_controller.layouts = core_layouts;\n    core_controller.platform = platform;\n    core_controller.plugins = core_plugins;\n    core_controller.Scale = core_scale;\n    core_controller.scaleService = core_scaleService;\n    core_controller.Ticks = core_ticks;\n    core_controller.Tooltip = core_tooltip;\n\n    // Register built-in scales\n\n    core_controller.helpers.each(scales, function(scale, type) {\n        core_controller.scaleService.registerScaleType(type, scale, scale._defaults);\n    });\n\n    // Load to register built-in adapters (as side effects)\n\n\n    // Loading built-in plugins\n\n    for (var k in plugins) {\n        if (plugins.hasOwnProperty(k)) {\n            core_controller.plugins.register(plugins[k]);\n        }\n    }\n\n    core_controller.platform.initialize();\n\n    var src = core_controller;\n    if (typeof window !== 'undefined') {\n        window.Chart = core_controller;\n    }\n\n    // DEPRECATIONS\n\n    /**\n     * Provided for backward compatibility, not available anymore\n     * @namespace Chart.Chart\n     * @deprecated since version 2.8.0\n     * @todo remove at version 3\n     * @private\n     */\n    core_controller.Chart = core_controller;\n\n    /**\n     * Provided for backward compatibility, not available anymore\n     * @namespace Chart.Legend\n     * @deprecated since version 2.1.5\n     * @todo remove at version 3\n     * @private\n     */\n    core_controller.Legend = plugins.legend._element;\n\n    /**\n     * Provided for backward compatibility, not available anymore\n     * @namespace Chart.Title\n     * @deprecated since version 2.1.5\n     * @todo remove at version 3\n     * @private\n     */\n    core_controller.Title = plugins.title._element;\n\n    /**\n     * Provided for backward compatibility, use Chart.plugins instead\n     * @namespace Chart.pluginService\n     * @deprecated since version 2.1.5\n     * @todo remove at version 3\n     * @private\n     */\n    core_controller.pluginService = core_controller.plugins;\n\n    /**\n     * Provided for backward compatibility, inheriting from Chart.PlugingBase has no\n     * effect, instead simply create/register plugins via plain JavaScript objects.\n     * @interface Chart.PluginBase\n     * @deprecated since version 2.5.0\n     * @todo remove at version 3\n     * @private\n     */\n    core_controller.PluginBase = core_controller.Element.extend({});\n\n    /**\n     * Provided for backward compatibility, use Chart.helpers.canvas instead.\n     * @namespace Chart.canvasHelpers\n     * @deprecated since version 2.6.0\n     * @todo remove at version 3\n     * @private\n     */\n    core_controller.canvasHelpers = core_controller.helpers.canvas;\n\n    /**\n     * Provided for backward compatibility, use Chart.layouts instead.\n     * @namespace Chart.layoutService\n     * @deprecated since version 2.7.3\n     * @todo remove at version 3\n     * @private\n     */\n    core_controller.layoutService = core_controller.layouts;\n\n    /**\n     * Provided for backward compatibility, not available anymore.\n     * @namespace Chart.LinearScaleBase\n     * @deprecated since version 2.8\n     * @todo remove at version 3\n     * @private\n     */\n    core_controller.LinearScaleBase = scale_linearbase;\n\n    /**\n     * Provided for backward compatibility, instead we should create a new Chart\n     * by setting the type in the config (`new Chart(id, {type: '{chart-type}'}`).\n     * @deprecated since version 2.8.0\n     * @todo remove at version 3\n     */\n    core_controller.helpers.each(\n        [\n            'Bar',\n            'Bubble',\n            'Doughnut',\n            'Line',\n            'PolarArea',\n            'Radar',\n            'Scatter'\n        ],\n        function(klass) {\n            core_controller[klass] = function(ctx, cfg) {\n                return new core_controller(ctx, core_controller.helpers.merge(cfg || {}, {\n                    type: klass.charAt(0).toLowerCase() + klass.slice(1)\n                }));\n            };\n        }\n    );\n\n    return src;\n\n    })));\n","(function (window) {\n  try {\n    new MouseEvent('test');\n    return false; // No need to polyfill\n  } catch (e) {\n    // Need to polyfill - fall through\n  }\n\n  // Polyfills DOM4 MouseEvent\n\n  var MouseEvent = function (eventType, params) {\n    params = params || {\n        bubbles: false,\n        cancelable: false,\n        ctrlKey: false,\n        altKey: false,\n        shiftKey: false,\n        metaKey: false\n      };\n    var mouseEvent = document.createEvent('MouseEvent');\n    mouseEvent.initMouseEvent(eventType, params.bubbles, params.cancelable, window, 0, 0, 0, 0, 0, params.ctrlKey, params.altKey, params.shiftKey, params.metaKey, 0, null);\n\n    return mouseEvent;\n  };\n\n  MouseEvent.prototype = Event.prototype;\n\n  window.MouseEvent = MouseEvent;\n})(window);","//! moment.js\n//! version : 2.8.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n(function(a){function b(a,b,c){switch(arguments.length){case 2:return null!=a?a:b;case 3:return null!=a?a:null!=b?b:c;default:throw new Error(\"Implement me\")}}function c(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1}}function d(a){rb.suppressDeprecationWarnings===!1&&\"undefined\"!=typeof console&&console.warn&&console.warn(\"Deprecation warning: \"+a)}function e(a,b){var c=!0;return l(function(){return c&&(d(a),c=!1),b.apply(this,arguments)},b)}function f(a,b){nc[a]||(d(b),nc[a]=!0)}function g(a,b){return function(c){return o(a.call(this,c),b)}}function h(a,b){return function(c){return this.localeData().ordinal(a.call(this,c),b)}}function i(){}function j(a,b){b!==!1&&E(a),m(this,a),this._d=new Date(+a._d)}function k(a){var b=x(a),c=b.year||0,d=b.quarter||0,e=b.month||0,f=b.week||0,g=b.day||0,h=b.hour||0,i=b.minute||0,j=b.second||0,k=b.millisecond||0;this._milliseconds=+k+1e3*j+6e4*i+36e5*h,this._days=+g+7*f,this._months=+e+3*d+12*c,this._data={},this._locale=rb.localeData(),this._bubble()}function l(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return b.hasOwnProperty(\"toString\")&&(a.toString=b.toString),b.hasOwnProperty(\"valueOf\")&&(a.valueOf=b.valueOf),a}function m(a,b){var c,d,e;if(\"undefined\"!=typeof b._isAMomentObject&&(a._isAMomentObject=b._isAMomentObject),\"undefined\"!=typeof b._i&&(a._i=b._i),\"undefined\"!=typeof b._f&&(a._f=b._f),\"undefined\"!=typeof b._l&&(a._l=b._l),\"undefined\"!=typeof b._strict&&(a._strict=b._strict),\"undefined\"!=typeof b._tzm&&(a._tzm=b._tzm),\"undefined\"!=typeof b._isUTC&&(a._isUTC=b._isUTC),\"undefined\"!=typeof b._offset&&(a._offset=b._offset),\"undefined\"!=typeof b._pf&&(a._pf=b._pf),\"undefined\"!=typeof b._locale&&(a._locale=b._locale),Fb.length>0)for(c in Fb)d=Fb[c],e=b[d],\"undefined\"!=typeof e&&(a[d]=e);return a}function n(a){return 0>a?Math.ceil(a):Math.floor(a)}function o(a,b,c){for(var d=\"\"+Math.abs(a),e=a>=0;d.length<b;)d=\"0\"+d;return(e?c?\"+\":\"\":\"-\")+d}function p(a,b){var c={milliseconds:0,months:0};return c.months=b.month()-a.month()+12*(b.year()-a.year()),a.clone().add(c.months,\"M\").isAfter(b)&&--c.months,c.milliseconds=+b-+a.clone().add(c.months,\"M\"),c}function q(a,b){var c;return b=J(b,a),a.isBefore(b)?c=p(a,b):(c=p(b,a),c.milliseconds=-c.milliseconds,c.months=-c.months),c}function r(a,b){return function(c,d){var e,g;return null===d||isNaN(+d)||(f(b,\"moment().\"+b+\"(period, number) is deprecated. Please use moment().\"+b+\"(number, period).\"),g=c,c=d,d=g),c=\"string\"==typeof c?+c:c,e=rb.duration(c,d),s(this,e,a),this}}function s(a,b,c,d){var e=b._milliseconds,f=b._days,g=b._months;d=null==d?!0:d,e&&a._d.setTime(+a._d+e*c),f&&lb(a,\"Date\",kb(a,\"Date\")+f*c),g&&jb(a,kb(a,\"Month\")+g*c),d&&rb.updateOffset(a,f||g)}function t(a){return\"[object Array]\"===Object.prototype.toString.call(a)}function u(a){return\"[object Date]\"===Object.prototype.toString.call(a)||a instanceof Date}function v(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;e>d;d++)(c&&a[d]!==b[d]||!c&&z(a[d])!==z(b[d]))&&g++;return g+f}function w(a){if(a){var b=a.toLowerCase().replace(/(.)s$/,\"$1\");a=gc[a]||hc[b]||b}return a}function x(a){var b,c,d={};for(c in a)a.hasOwnProperty(c)&&(b=w(c),b&&(d[b]=a[c]));return d}function y(b){var c,d;if(0===b.indexOf(\"week\"))c=7,d=\"day\";else{if(0!==b.indexOf(\"month\"))return;c=12,d=\"month\"}rb[b]=function(e,f){var g,h,i=rb._locale[b],j=[];if(\"number\"==typeof e&&(f=e,e=a),h=function(a){var b=rb().utc().set(d,a);return i.call(rb._locale,b,e||\"\")},null!=f)return h(f);for(g=0;c>g;g++)j.push(h(g));return j}}function z(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=b>=0?Math.floor(b):Math.ceil(b)),c}function A(a,b){return new Date(Date.UTC(a,b+1,0)).getUTCDate()}function B(a,b,c){return fb(rb([a,11,31+b-c]),b,c).week}function C(a){return D(a)?366:365}function D(a){return a%4===0&&a%100!==0||a%400===0}function E(a){var b;a._a&&-2===a._pf.overflow&&(b=a._a[yb]<0||a._a[yb]>11?yb:a._a[zb]<1||a._a[zb]>A(a._a[xb],a._a[yb])?zb:a._a[Ab]<0||a._a[Ab]>23?Ab:a._a[Bb]<0||a._a[Bb]>59?Bb:a._a[Cb]<0||a._a[Cb]>59?Cb:a._a[Db]<0||a._a[Db]>999?Db:-1,a._pf._overflowDayOfYear&&(xb>b||b>zb)&&(b=zb),a._pf.overflow=b)}function F(a){return null==a._isValid&&(a._isValid=!isNaN(a._d.getTime())&&a._pf.overflow<0&&!a._pf.empty&&!a._pf.invalidMonth&&!a._pf.nullInput&&!a._pf.invalidFormat&&!a._pf.userInvalidated,a._strict&&(a._isValid=a._isValid&&0===a._pf.charsLeftOver&&0===a._pf.unusedTokens.length)),a._isValid}function G(a){return a?a.toLowerCase().replace(\"_\",\"-\"):a}function H(a){for(var b,c,d,e,f=0;f<a.length;){for(e=G(a[f]).split(\"-\"),b=e.length,c=G(a[f+1]),c=c?c.split(\"-\"):null;b>0;){if(d=I(e.slice(0,b).join(\"-\")))return d;if(c&&c.length>=b&&v(e,c,!0)>=b-1)break;b--}f++}return null}function I(a){var b=null;if(!Eb[a]&&Gb)try{b=rb.locale(),require(\"./locale/\"+a),rb.locale(b)}catch(c){}return Eb[a]}function J(a,b){return b._isUTC?rb(a).zone(b._offset||0):rb(a).local()}function K(a){return a.match(/\\[[\\s\\S]/)?a.replace(/^\\[|\\]$/g,\"\"):a.replace(/\\\\/g,\"\")}function L(a){var b,c,d=a.match(Kb);for(b=0,c=d.length;c>b;b++)d[b]=mc[d[b]]?mc[d[b]]:K(d[b]);return function(e){var f=\"\";for(b=0;c>b;b++)f+=d[b]instanceof Function?d[b].call(e,a):d[b];return f}}function M(a,b){return a.isValid()?(b=N(b,a.localeData()),ic[b]||(ic[b]=L(b)),ic[b](a)):a.localeData().invalidDate()}function N(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(Lb.lastIndex=0;d>=0&&Lb.test(a);)a=a.replace(Lb,c),Lb.lastIndex=0,d-=1;return a}function O(a,b){var c,d=b._strict;switch(a){case\"Q\":return Wb;case\"DDDD\":return Yb;case\"YYYY\":case\"GGGG\":case\"gggg\":return d?Zb:Ob;case\"Y\":case\"G\":case\"g\":return _b;case\"YYYYYY\":case\"YYYYY\":case\"GGGGG\":case\"ggggg\":return d?$b:Pb;case\"S\":if(d)return Wb;case\"SS\":if(d)return Xb;case\"SSS\":if(d)return Yb;case\"DDD\":return Nb;case\"MMM\":case\"MMMM\":case\"dd\":case\"ddd\":case\"dddd\":return Rb;case\"a\":case\"A\":return b._locale._meridiemParse;case\"X\":return Ub;case\"Z\":case\"ZZ\":return Sb;case\"T\":return Tb;case\"SSSS\":return Qb;case\"MM\":case\"DD\":case\"YY\":case\"GG\":case\"gg\":case\"HH\":case\"hh\":case\"mm\":case\"ss\":case\"ww\":case\"WW\":return d?Xb:Mb;case\"M\":case\"D\":case\"d\":case\"H\":case\"h\":case\"m\":case\"s\":case\"w\":case\"W\":case\"e\":case\"E\":return Mb;case\"Do\":return Vb;default:return c=new RegExp(X(W(a.replace(\"\\\\\",\"\")),\"i\"))}}function P(a){a=a||\"\";var b=a.match(Sb)||[],c=b[b.length-1]||[],d=(c+\"\").match(ec)||[\"-\",0,0],e=+(60*d[1])+z(d[2]);return\"+\"===d[0]?-e:e}function Q(a,b,c){var d,e=c._a;switch(a){case\"Q\":null!=b&&(e[yb]=3*(z(b)-1));break;case\"M\":case\"MM\":null!=b&&(e[yb]=z(b)-1);break;case\"MMM\":case\"MMMM\":d=c._locale.monthsParse(b),null!=d?e[yb]=d:c._pf.invalidMonth=b;break;case\"D\":case\"DD\":null!=b&&(e[zb]=z(b));break;case\"Do\":null!=b&&(e[zb]=z(parseInt(b,10)));break;case\"DDD\":case\"DDDD\":null!=b&&(c._dayOfYear=z(b));break;case\"YY\":e[xb]=rb.parseTwoDigitYear(b);break;case\"YYYY\":case\"YYYYY\":case\"YYYYYY\":e[xb]=z(b);break;case\"a\":case\"A\":c._isPm=c._locale.isPM(b);break;case\"H\":case\"HH\":case\"h\":case\"hh\":e[Ab]=z(b);break;case\"m\":case\"mm\":e[Bb]=z(b);break;case\"s\":case\"ss\":e[Cb]=z(b);break;case\"S\":case\"SS\":case\"SSS\":case\"SSSS\":e[Db]=z(1e3*(\"0.\"+b));break;case\"X\":c._d=new Date(1e3*parseFloat(b));break;case\"Z\":case\"ZZ\":c._useUTC=!0,c._tzm=P(b);break;case\"dd\":case\"ddd\":case\"dddd\":d=c._locale.weekdaysParse(b),null!=d?(c._w=c._w||{},c._w.d=d):c._pf.invalidWeekday=b;break;case\"w\":case\"ww\":case\"W\":case\"WW\":case\"d\":case\"e\":case\"E\":a=a.substr(0,1);case\"gggg\":case\"GGGG\":case\"GGGGG\":a=a.substr(0,2),b&&(c._w=c._w||{},c._w[a]=z(b));break;case\"gg\":case\"GG\":c._w=c._w||{},c._w[a]=rb.parseTwoDigitYear(b)}}function R(a){var c,d,e,f,g,h,i;c=a._w,null!=c.GG||null!=c.W||null!=c.E?(g=1,h=4,d=b(c.GG,a._a[xb],fb(rb(),1,4).year),e=b(c.W,1),f=b(c.E,1)):(g=a._locale._week.dow,h=a._locale._week.doy,d=b(c.gg,a._a[xb],fb(rb(),g,h).year),e=b(c.w,1),null!=c.d?(f=c.d,g>f&&++e):f=null!=c.e?c.e+g:g),i=gb(d,e,f,h,g),a._a[xb]=i.year,a._dayOfYear=i.dayOfYear}function S(a){var c,d,e,f,g=[];if(!a._d){for(e=U(a),a._w&&null==a._a[zb]&&null==a._a[yb]&&R(a),a._dayOfYear&&(f=b(a._a[xb],e[xb]),a._dayOfYear>C(f)&&(a._pf._overflowDayOfYear=!0),d=bb(f,0,a._dayOfYear),a._a[yb]=d.getUTCMonth(),a._a[zb]=d.getUTCDate()),c=0;3>c&&null==a._a[c];++c)a._a[c]=g[c]=e[c];for(;7>c;c++)a._a[c]=g[c]=null==a._a[c]?2===c?1:0:a._a[c];a._d=(a._useUTC?bb:ab).apply(null,g),null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()+a._tzm)}}function T(a){var b;a._d||(b=x(a._i),a._a=[b.year,b.month,b.day,b.hour,b.minute,b.second,b.millisecond],S(a))}function U(a){var b=new Date;return a._useUTC?[b.getUTCFullYear(),b.getUTCMonth(),b.getUTCDate()]:[b.getFullYear(),b.getMonth(),b.getDate()]}function V(a){if(a._f===rb.ISO_8601)return void Z(a);a._a=[],a._pf.empty=!0;var b,c,d,e,f,g=\"\"+a._i,h=g.length,i=0;for(d=N(a._f,a._locale).match(Kb)||[],b=0;b<d.length;b++)e=d[b],c=(g.match(O(e,a))||[])[0],c&&(f=g.substr(0,g.indexOf(c)),f.length>0&&a._pf.unusedInput.push(f),g=g.slice(g.indexOf(c)+c.length),i+=c.length),mc[e]?(c?a._pf.empty=!1:a._pf.unusedTokens.push(e),Q(e,c,a)):a._strict&&!c&&a._pf.unusedTokens.push(e);a._pf.charsLeftOver=h-i,g.length>0&&a._pf.unusedInput.push(g),a._isPm&&a._a[Ab]<12&&(a._a[Ab]+=12),a._isPm===!1&&12===a._a[Ab]&&(a._a[Ab]=0),S(a),E(a)}function W(a){return a.replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,function(a,b,c,d,e){return b||c||d||e})}function X(a){return a.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\")}function Y(a){var b,d,e,f,g;if(0===a._f.length)return a._pf.invalidFormat=!0,void(a._d=new Date(0/0));for(f=0;f<a._f.length;f++)g=0,b=m({},a),b._pf=c(),b._f=a._f[f],V(b),F(b)&&(g+=b._pf.charsLeftOver,g+=10*b._pf.unusedTokens.length,b._pf.score=g,(null==e||e>g)&&(e=g,d=b));l(a,d||b)}function Z(a){var b,c,d=a._i,e=ac.exec(d);if(e){for(a._pf.iso=!0,b=0,c=cc.length;c>b;b++)if(cc[b][1].exec(d)){a._f=cc[b][0]+(e[6]||\" \");break}for(b=0,c=dc.length;c>b;b++)if(dc[b][1].exec(d)){a._f+=dc[b][0];break}d.match(Sb)&&(a._f+=\"Z\"),V(a)}else a._isValid=!1}function $(a){Z(a),a._isValid===!1&&(delete a._isValid,rb.createFromInputFallback(a))}function _(b){var c,d=b._i;d===a?b._d=new Date:u(d)?b._d=new Date(+d):null!==(c=Hb.exec(d))?b._d=new Date(+c[1]):\"string\"==typeof d?$(b):t(d)?(b._a=d.slice(0),S(b)):\"object\"==typeof d?T(b):\"number\"==typeof d?b._d=new Date(d):rb.createFromInputFallback(b)}function ab(a,b,c,d,e,f,g){var h=new Date(a,b,c,d,e,f,g);return 1970>a&&h.setFullYear(a),h}function bb(a){var b=new Date(Date.UTC.apply(null,arguments));return 1970>a&&b.setUTCFullYear(a),b}function cb(a,b){if(\"string\"==typeof a)if(isNaN(a)){if(a=b.weekdaysParse(a),\"number\"!=typeof a)return null}else a=parseInt(a,10);return a}function db(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function eb(a,b,c){var d=rb.duration(a).abs(),e=wb(d.as(\"s\")),f=wb(d.as(\"m\")),g=wb(d.as(\"h\")),h=wb(d.as(\"d\")),i=wb(d.as(\"M\")),j=wb(d.as(\"y\")),k=e<jc.s&&[\"s\",e]||1===f&&[\"m\"]||f<jc.m&&[\"mm\",f]||1===g&&[\"h\"]||g<jc.h&&[\"hh\",g]||1===h&&[\"d\"]||h<jc.d&&[\"dd\",h]||1===i&&[\"M\"]||i<jc.M&&[\"MM\",i]||1===j&&[\"y\"]||[\"yy\",j];return k[2]=b,k[3]=+a>0,k[4]=c,db.apply({},k)}function fb(a,b,c){var d,e=c-b,f=c-a.day();return f>e&&(f-=7),e-7>f&&(f+=7),d=rb(a).add(f,\"d\"),{week:Math.ceil(d.dayOfYear()/7),year:d.year()}}function gb(a,b,c,d,e){var f,g,h=bb(a,0,1).getUTCDay();return h=0===h?7:h,c=null!=c?c:e,f=e-h+(h>d?7:0)-(e>h?7:0),g=7*(b-1)+(c-e)+f+1,{year:g>0?a:a-1,dayOfYear:g>0?g:C(a-1)+g}}function hb(b){var c=b._i,d=b._f;return b._locale=b._locale||rb.localeData(b._l),null===c||d===a&&\"\"===c?rb.invalid({nullInput:!0}):(\"string\"==typeof c&&(b._i=c=b._locale.preparse(c)),rb.isMoment(c)?new j(c,!0):(d?t(d)?Y(b):V(b):_(b),new j(b)))}function ib(a,b){var c,d;if(1===b.length&&t(b[0])&&(b=b[0]),!b.length)return rb();for(c=b[0],d=1;d<b.length;++d)b[d][a](c)&&(c=b[d]);return c}function jb(a,b){var c;return\"string\"==typeof b&&(b=a.localeData().monthsParse(b),\"number\"!=typeof b)?a:(c=Math.min(a.date(),A(a.year(),b)),a._d[\"set\"+(a._isUTC?\"UTC\":\"\")+\"Month\"](b,c),a)}function kb(a,b){return a._d[\"get\"+(a._isUTC?\"UTC\":\"\")+b]()}function lb(a,b,c){return\"Month\"===b?jb(a,c):a._d[\"set\"+(a._isUTC?\"UTC\":\"\")+b](c)}function mb(a,b){return function(c){return null!=c?(lb(this,a,c),rb.updateOffset(this,b),this):kb(this,a)}}function nb(a){return 400*a/146097}function ob(a){return 146097*a/400}function pb(a){rb.duration.fn[a]=function(){return this._data[a]}}function qb(a){\"undefined\"==typeof ender&&(sb=vb.moment,vb.moment=a?e(\"Accessing Moment through the global scope is deprecated, and will be removed in an upcoming release.\",rb):rb)}for(var rb,sb,tb,ub=\"2.8.1\",vb=\"undefined\"!=typeof global?global:this,wb=Math.round,xb=0,yb=1,zb=2,Ab=3,Bb=4,Cb=5,Db=6,Eb={},Fb=[],Gb=\"undefined\"!=typeof module&&module.exports,Hb=/^\\/?Date\\((\\-?\\d+)/i,Ib=/(\\-)?(?:(\\d*)\\.)?(\\d+)\\:(\\d+)(?:\\:(\\d+)\\.?(\\d{3})?)?/,Jb=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/,Kb=/(\\[[^\\[]*\\])|(\\\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|X|zz?|ZZ?|.)/g,Lb=/(\\[[^\\[]*\\])|(\\\\)?(LT|LL?L?L?|l{1,4})/g,Mb=/\\d\\d?/,Nb=/\\d{1,3}/,Ob=/\\d{1,4}/,Pb=/[+\\-]?\\d{1,6}/,Qb=/\\d+/,Rb=/[0-9]*['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+|[\\u0600-\\u06FF\\/]+(\\s*?[\\u0600-\\u06FF]+){1,2}/i,Sb=/Z|[\\+\\-]\\d\\d:?\\d\\d/gi,Tb=/T/i,Ub=/[\\+\\-]?\\d+(\\.\\d{1,3})?/,Vb=/\\d{1,2}/,Wb=/\\d/,Xb=/\\d\\d/,Yb=/\\d{3}/,Zb=/\\d{4}/,$b=/[+-]?\\d{6}/,_b=/[+-]?\\d+/,ac=/^\\s*(?:[+-]\\d{6}|\\d{4})-(?:(\\d\\d-\\d\\d)|(W\\d\\d$)|(W\\d\\d-\\d)|(\\d\\d\\d))((T| )(\\d\\d(:\\d\\d(:\\d\\d(\\.\\d+)?)?)?)?([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,bc=\"YYYY-MM-DDTHH:mm:ssZ\",cc=[[\"YYYYYY-MM-DD\",/[+-]\\d{6}-\\d{2}-\\d{2}/],[\"YYYY-MM-DD\",/\\d{4}-\\d{2}-\\d{2}/],[\"GGGG-[W]WW-E\",/\\d{4}-W\\d{2}-\\d/],[\"GGGG-[W]WW\",/\\d{4}-W\\d{2}/],[\"YYYY-DDD\",/\\d{4}-\\d{3}/]],dc=[[\"HH:mm:ss.SSSS\",/(T| )\\d\\d:\\d\\d:\\d\\d\\.\\d+/],[\"HH:mm:ss\",/(T| )\\d\\d:\\d\\d:\\d\\d/],[\"HH:mm\",/(T| )\\d\\d:\\d\\d/],[\"HH\",/(T| )\\d\\d/]],ec=/([\\+\\-]|\\d\\d)/gi,fc=(\"Date|Hours|Minutes|Seconds|Milliseconds\".split(\"|\"),{Milliseconds:1,Seconds:1e3,Minutes:6e4,Hours:36e5,Days:864e5,Months:2592e6,Years:31536e6}),gc={ms:\"millisecond\",s:\"second\",m:\"minute\",h:\"hour\",d:\"day\",D:\"date\",w:\"week\",W:\"isoWeek\",M:\"month\",Q:\"quarter\",y:\"year\",DDD:\"dayOfYear\",e:\"weekday\",E:\"isoWeekday\",gg:\"weekYear\",GG:\"isoWeekYear\"},hc={dayofyear:\"dayOfYear\",isoweekday:\"isoWeekday\",isoweek:\"isoWeek\",weekyear:\"weekYear\",isoweekyear:\"isoWeekYear\"},ic={},jc={s:45,m:45,h:22,d:26,M:11},kc=\"DDD w W M D d\".split(\" \"),lc=\"M D H h m s w W\".split(\" \"),mc={M:function(){return this.month()+1},MMM:function(a){return this.localeData().monthsShort(this,a)},MMMM:function(a){return this.localeData().months(this,a)},D:function(){return this.date()},DDD:function(){return this.dayOfYear()},d:function(){return this.day()},dd:function(a){return this.localeData().weekdaysMin(this,a)},ddd:function(a){return this.localeData().weekdaysShort(this,a)},dddd:function(a){return this.localeData().weekdays(this,a)},w:function(){return this.week()},W:function(){return this.isoWeek()},YY:function(){return o(this.year()%100,2)},YYYY:function(){return o(this.year(),4)},YYYYY:function(){return o(this.year(),5)},YYYYYY:function(){var a=this.year(),b=a>=0?\"+\":\"-\";return b+o(Math.abs(a),6)},gg:function(){return o(this.weekYear()%100,2)},gggg:function(){return o(this.weekYear(),4)},ggggg:function(){return o(this.weekYear(),5)},GG:function(){return o(this.isoWeekYear()%100,2)},GGGG:function(){return o(this.isoWeekYear(),4)},GGGGG:function(){return o(this.isoWeekYear(),5)},e:function(){return this.weekday()},E:function(){return this.isoWeekday()},a:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!0)},A:function(){return this.localeData().meridiem(this.hours(),this.minutes(),!1)},H:function(){return this.hours()},h:function(){return this.hours()%12||12},m:function(){return this.minutes()},s:function(){return this.seconds()},S:function(){return z(this.milliseconds()/100)},SS:function(){return o(z(this.milliseconds()/10),2)},SSS:function(){return o(this.milliseconds(),3)},SSSS:function(){return o(this.milliseconds(),3)},Z:function(){var a=-this.zone(),b=\"+\";return 0>a&&(a=-a,b=\"-\"),b+o(z(a/60),2)+\":\"+o(z(a)%60,2)},ZZ:function(){var a=-this.zone(),b=\"+\";return 0>a&&(a=-a,b=\"-\"),b+o(z(a/60),2)+o(z(a)%60,2)},z:function(){return this.zoneAbbr()},zz:function(){return this.zoneName()},X:function(){return this.unix()},Q:function(){return this.quarter()}},nc={},oc=[\"months\",\"monthsShort\",\"weekdays\",\"weekdaysShort\",\"weekdaysMin\"];kc.length;)tb=kc.pop(),mc[tb+\"o\"]=h(mc[tb],tb);for(;lc.length;)tb=lc.pop(),mc[tb+tb]=g(mc[tb],2);mc.DDDD=g(mc.DDD,3),l(i.prototype,{set:function(a){var b,c;for(c in a)b=a[c],\"function\"==typeof b?this[c]=b:this[\"_\"+c]=b},_months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),months:function(a){return this._months[a.month()]},_monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),monthsShort:function(a){return this._monthsShort[a.month()]},monthsParse:function(a){var b,c,d;for(this._monthsParse||(this._monthsParse=[]),b=0;12>b;b++)if(this._monthsParse[b]||(c=rb.utc([2e3,b]),d=\"^\"+this.months(c,\"\")+\"|^\"+this.monthsShort(c,\"\"),this._monthsParse[b]=new RegExp(d.replace(\".\",\"\"),\"i\")),this._monthsParse[b].test(a))return b},_weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdays:function(a){return this._weekdays[a.day()]},_weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysShort:function(a){return this._weekdaysShort[a.day()]},_weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),weekdaysMin:function(a){return this._weekdaysMin[a.day()]},weekdaysParse:function(a){var b,c,d;for(this._weekdaysParse||(this._weekdaysParse=[]),b=0;7>b;b++)if(this._weekdaysParse[b]||(c=rb([2e3,1]).day(b),d=\"^\"+this.weekdays(c,\"\")+\"|^\"+this.weekdaysShort(c,\"\")+\"|^\"+this.weekdaysMin(c,\"\"),this._weekdaysParse[b]=new RegExp(d.replace(\".\",\"\"),\"i\")),this._weekdaysParse[b].test(a))return b},_longDateFormat:{LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY LT\",LLLL:\"dddd, MMMM D, YYYY LT\"},longDateFormat:function(a){var b=this._longDateFormat[a];return!b&&this._longDateFormat[a.toUpperCase()]&&(b=this._longDateFormat[a.toUpperCase()].replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a]=b),b},isPM:function(a){return\"p\"===(a+\"\").toLowerCase().charAt(0)},_meridiemParse:/[ap]\\.?m?\\.?/i,meridiem:function(a,b,c){return a>11?c?\"pm\":\"PM\":c?\"am\":\"AM\"},_calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},calendar:function(a,b){var c=this._calendar[a];return\"function\"==typeof c?c.apply(b):c},_relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},relativeTime:function(a,b,c,d){var e=this._relativeTime[c];return\"function\"==typeof e?e(a,b,c,d):e.replace(/%d/i,a)},pastFuture:function(a,b){var c=this._relativeTime[a>0?\"future\":\"past\"];return\"function\"==typeof c?c(b):c.replace(/%s/i,b)},ordinal:function(a){return this._ordinal.replace(\"%d\",a)},_ordinal:\"%d\",preparse:function(a){return a},postformat:function(a){return a},week:function(a){return fb(a,this._week.dow,this._week.doy).week},_week:{dow:0,doy:6},_invalidDate:\"Invalid date\",invalidDate:function(){return this._invalidDate}}),rb=function(b,d,e,f){var g;return\"boolean\"==typeof e&&(f=e,e=a),g={},g._isAMomentObject=!0,g._i=b,g._f=d,g._l=e,g._strict=f,g._isUTC=!1,g._pf=c(),hb(g)},rb.suppressDeprecationWarnings=!1,rb.createFromInputFallback=e(\"moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.\",function(a){a._d=new Date(a._i)}),rb.min=function(){var a=[].slice.call(arguments,0);return ib(\"isBefore\",a)},rb.max=function(){var a=[].slice.call(arguments,0);return ib(\"isAfter\",a)},rb.utc=function(b,d,e,f){var g;return\"boolean\"==typeof e&&(f=e,e=a),g={},g._isAMomentObject=!0,g._useUTC=!0,g._isUTC=!0,g._l=e,g._i=b,g._f=d,g._strict=f,g._pf=c(),hb(g).utc()},rb.unix=function(a){return rb(1e3*a)},rb.duration=function(a,b){var c,d,e,f,g=a,h=null;return rb.isDuration(a)?g={ms:a._milliseconds,d:a._days,M:a._months}:\"number\"==typeof a?(g={},b?g[b]=a:g.milliseconds=a):(h=Ib.exec(a))?(c=\"-\"===h[1]?-1:1,g={y:0,d:z(h[zb])*c,h:z(h[Ab])*c,m:z(h[Bb])*c,s:z(h[Cb])*c,ms:z(h[Db])*c}):(h=Jb.exec(a))?(c=\"-\"===h[1]?-1:1,e=function(a){var b=a&&parseFloat(a.replace(\",\",\".\"));return(isNaN(b)?0:b)*c},g={y:e(h[2]),M:e(h[3]),d:e(h[4]),h:e(h[5]),m:e(h[6]),s:e(h[7]),w:e(h[8])}):\"object\"==typeof g&&(\"from\"in g||\"to\"in g)&&(f=q(rb(g.from),rb(g.to)),g={},g.ms=f.milliseconds,g.M=f.months),d=new k(g),rb.isDuration(a)&&a.hasOwnProperty(\"_locale\")&&(d._locale=a._locale),d},rb.version=ub,rb.defaultFormat=bc,rb.ISO_8601=function(){},rb.momentProperties=Fb,rb.updateOffset=function(){},rb.relativeTimeThreshold=function(b,c){return jc[b]===a?!1:c===a?jc[b]:(jc[b]=c,!0)},rb.lang=e(\"moment.lang is deprecated. Use moment.locale instead.\",function(a,b){return rb.locale(a,b)}),rb.locale=function(a,b){var c;return a&&(c=\"undefined\"!=typeof b?rb.defineLocale(a,b):rb.localeData(a),c&&(rb.duration._locale=rb._locale=c)),rb._locale._abbr},rb.defineLocale=function(a,b){return null!==b?(b.abbr=a,Eb[a]||(Eb[a]=new i),Eb[a].set(b),rb.locale(a),Eb[a]):(delete Eb[a],null)},rb.langData=e(\"moment.langData is deprecated. Use moment.localeData instead.\",function(a){return rb.localeData(a)}),rb.localeData=function(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return rb._locale;if(!t(a)){if(b=I(a))return b;a=[a]}return H(a)},rb.isMoment=function(a){return a instanceof j||null!=a&&a.hasOwnProperty(\"_isAMomentObject\")},rb.isDuration=function(a){return a instanceof k};for(tb=oc.length-1;tb>=0;--tb)y(oc[tb]);rb.normalizeUnits=function(a){return w(a)},rb.invalid=function(a){var b=rb.utc(0/0);return null!=a?l(b._pf,a):b._pf.userInvalidated=!0,b},rb.parseZone=function(){return rb.apply(null,arguments).parseZone()},rb.parseTwoDigitYear=function(a){return z(a)+(z(a)>68?1900:2e3)},l(rb.fn=j.prototype,{clone:function(){return rb(this)},valueOf:function(){return+this._d+6e4*(this._offset||0)},unix:function(){return Math.floor(+this/1e3)},toString:function(){return this.clone().locale(\"en\").format(\"ddd MMM DD YYYY HH:mm:ss [GMT]ZZ\")},toDate:function(){return this._offset?new Date(+this):this._d},toISOString:function(){var a=rb(this).utc();return 0<a.year()&&a.year()<=9999?M(a,\"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]\"):M(a,\"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]\")},toArray:function(){var a=this;return[a.year(),a.month(),a.date(),a.hours(),a.minutes(),a.seconds(),a.milliseconds()]},isValid:function(){return F(this)},isDSTShifted:function(){return this._a?this.isValid()&&v(this._a,(this._isUTC?rb.utc(this._a):rb(this._a)).toArray())>0:!1},parsingFlags:function(){return l({},this._pf)},invalidAt:function(){return this._pf.overflow},utc:function(a){return this.zone(0,a)},local:function(a){return this._isUTC&&(this.zone(0,a),this._isUTC=!1,a&&this.add(this._d.getTimezoneOffset(),\"m\")),this},format:function(a){var b=M(this,a||rb.defaultFormat);return this.localeData().postformat(b)},add:r(1,\"add\"),subtract:r(-1,\"subtract\"),diff:function(a,b,c){var d,e,f=J(a,this),g=6e4*(this.zone()-f.zone());return b=w(b),\"year\"===b||\"month\"===b?(d=432e5*(this.daysInMonth()+f.daysInMonth()),e=12*(this.year()-f.year())+(this.month()-f.month()),e+=(this-rb(this).startOf(\"month\")-(f-rb(f).startOf(\"month\")))/d,e-=6e4*(this.zone()-rb(this).startOf(\"month\").zone()-(f.zone()-rb(f).startOf(\"month\").zone()))/d,\"year\"===b&&(e/=12)):(d=this-f,e=\"second\"===b?d/1e3:\"minute\"===b?d/6e4:\"hour\"===b?d/36e5:\"day\"===b?(d-g)/864e5:\"week\"===b?(d-g)/6048e5:d),c?e:n(e)},from:function(a,b){return rb.duration({to:this,from:a}).locale(this.locale()).humanize(!b)},fromNow:function(a){return this.from(rb(),a)},calendar:function(a){var b=a||rb(),c=J(b,this).startOf(\"day\"),d=this.diff(c,\"days\",!0),e=-6>d?\"sameElse\":-1>d?\"lastWeek\":0>d?\"lastDay\":1>d?\"sameDay\":2>d?\"nextDay\":7>d?\"nextWeek\":\"sameElse\";return this.format(this.localeData().calendar(e,this))},isLeapYear:function(){return D(this.year())},isDST:function(){return this.zone()<this.clone().month(0).zone()||this.zone()<this.clone().month(5).zone()},day:function(a){var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=cb(a,this.localeData()),this.add(a-b,\"d\")):b},month:mb(\"Month\",!0),startOf:function(a){switch(a=w(a)){case\"year\":this.month(0);case\"quarter\":case\"month\":this.date(1);case\"week\":case\"isoWeek\":case\"day\":this.hours(0);case\"hour\":this.minutes(0);case\"minute\":this.seconds(0);case\"second\":this.milliseconds(0)}return\"week\"===a?this.weekday(0):\"isoWeek\"===a&&this.isoWeekday(1),\"quarter\"===a&&this.month(3*Math.floor(this.month()/3)),this},endOf:function(a){return a=w(a),this.startOf(a).add(1,\"isoWeek\"===a?\"week\":a).subtract(1,\"ms\")},isAfter:function(a,b){return b=\"undefined\"!=typeof b?b:\"millisecond\",+this.clone().startOf(b)>+rb(a).startOf(b)},isBefore:function(a,b){return b=\"undefined\"!=typeof b?b:\"millisecond\",+this.clone().startOf(b)<+rb(a).startOf(b)},isSame:function(a,b){return b=b||\"ms\",+this.clone().startOf(b)===+J(a,this).startOf(b)},min:e(\"moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548\",function(a){return a=rb.apply(null,arguments),this>a?this:a}),max:e(\"moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548\",function(a){return a=rb.apply(null,arguments),a>this?this:a}),zone:function(a,b){var c,d=this._offset||0;return null==a?this._isUTC?d:this._d.getTimezoneOffset():(\"string\"==typeof a&&(a=P(a)),Math.abs(a)<16&&(a=60*a),!this._isUTC&&b&&(c=this._d.getTimezoneOffset()),this._offset=a,this._isUTC=!0,null!=c&&this.subtract(c,\"m\"),d!==a&&(!b||this._changeInProgress?s(this,rb.duration(d-a,\"m\"),1,!1):this._changeInProgress||(this._changeInProgress=!0,rb.updateOffset(this,!0),this._changeInProgress=null)),this)},zoneAbbr:function(){return this._isUTC?\"UTC\":\"\"},zoneName:function(){return this._isUTC?\"Coordinated Universal Time\":\"\"},parseZone:function(){return this._tzm?this.zone(this._tzm):\"string\"==typeof this._i&&this.zone(this._i),this},hasAlignedHourOffset:function(a){return a=a?rb(a).zone():0,(this.zone()-a)%60===0},daysInMonth:function(){return A(this.year(),this.month())},dayOfYear:function(a){var b=wb((rb(this).startOf(\"day\")-rb(this).startOf(\"year\"))/864e5)+1;return null==a?b:this.add(a-b,\"d\")},quarter:function(a){return null==a?Math.ceil((this.month()+1)/3):this.month(3*(a-1)+this.month()%3)},weekYear:function(a){var b=fb(this,this.localeData()._week.dow,this.localeData()._week.doy).year;return null==a?b:this.add(a-b,\"y\")},isoWeekYear:function(a){var b=fb(this,1,4).year;return null==a?b:this.add(a-b,\"y\")},week:function(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),\"d\")},isoWeek:function(a){var b=fb(this,1,4).week;return null==a?b:this.add(7*(a-b),\"d\")},weekday:function(a){var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,\"d\")},isoWeekday:function(a){return null==a?this.day()||7:this.day(this.day()%7?a:a-7)},isoWeeksInYear:function(){return B(this.year(),1,4)},weeksInYear:function(){var a=this.localeData()._week;return B(this.year(),a.dow,a.doy)},get:function(a){return a=w(a),this[a]()},set:function(a,b){return a=w(a),\"function\"==typeof this[a]&&this[a](b),this},locale:function(b){return b===a?this._locale._abbr:(this._locale=rb.localeData(b),this)},lang:e(\"moment().lang() is deprecated. Use moment().localeData() instead.\",function(b){return b===a?this.localeData():(this._locale=rb.localeData(b),this)}),localeData:function(){return this._locale}}),rb.fn.millisecond=rb.fn.milliseconds=mb(\"Milliseconds\",!1),rb.fn.second=rb.fn.seconds=mb(\"Seconds\",!1),rb.fn.minute=rb.fn.minutes=mb(\"Minutes\",!1),rb.fn.hour=rb.fn.hours=mb(\"Hours\",!0),rb.fn.date=mb(\"Date\",!0),rb.fn.dates=e(\"dates accessor is deprecated. Use date instead.\",mb(\"Date\",!0)),rb.fn.year=mb(\"FullYear\",!0),rb.fn.years=e(\"years accessor is deprecated. Use year instead.\",mb(\"FullYear\",!0)),rb.fn.days=rb.fn.day,rb.fn.months=rb.fn.month,rb.fn.weeks=rb.fn.week,rb.fn.isoWeeks=rb.fn.isoWeek,rb.fn.quarters=rb.fn.quarter,rb.fn.toJSON=rb.fn.toISOString,l(rb.duration.fn=k.prototype,{_bubble:function(){var a,b,c,d=this._milliseconds,e=this._days,f=this._months,g=this._data,h=0;g.milliseconds=d%1e3,a=n(d/1e3),g.seconds=a%60,b=n(a/60),g.minutes=b%60,c=n(b/60),g.hours=c%24,e+=n(c/24),h=n(nb(e)),e-=n(ob(h)),f+=n(e/30),e%=30,h+=n(f/12),f%=12,g.days=e,g.months=f,g.years=h},abs:function(){return this._milliseconds=Math.abs(this._milliseconds),this._days=Math.abs(this._days),this._months=Math.abs(this._months),this._data.milliseconds=Math.abs(this._data.milliseconds),this._data.seconds=Math.abs(this._data.seconds),this._data.minutes=Math.abs(this._data.minutes),this._data.hours=Math.abs(this._data.hours),this._data.months=Math.abs(this._data.months),this._data.years=Math.abs(this._data.years),this},weeks:function(){return n(this.days()/7)},valueOf:function(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*z(this._months/12)},humanize:function(a){var b=eb(this,!a,this.localeData());return a&&(b=this.localeData().pastFuture(+this,b)),this.localeData().postformat(b)},add:function(a,b){var c=rb.duration(a,b);return this._milliseconds+=c._milliseconds,this._days+=c._days,this._months+=c._months,this._bubble(),this},subtract:function(a,b){var c=rb.duration(a,b);return this._milliseconds-=c._milliseconds,this._days-=c._days,this._months-=c._months,this._bubble(),this},get:function(a){return a=w(a),this[a.toLowerCase()+\"s\"]()},as:function(a){var b,c;if(a=w(a),b=this._days+this._milliseconds/864e5,\"month\"===a||\"year\"===a)return c=this._months+12*nb(b),\"month\"===a?c:c/12;switch(b+=ob(this._months/12),a){case\"week\":return b/7;case\"day\":return b;case\"hour\":return 24*b;case\"minute\":return 24*b*60;case\"second\":return 24*b*60*60;case\"millisecond\":return 24*b*60*60*1e3;default:throw new Error(\"Unknown unit \"+a)}},lang:rb.fn.lang,locale:rb.fn.locale,toIsoString:e(\"toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)\",function(){return this.toISOString()}),toISOString:function(){var a=Math.abs(this.years()),b=Math.abs(this.months()),c=Math.abs(this.days()),d=Math.abs(this.hours()),e=Math.abs(this.minutes()),f=Math.abs(this.seconds()+this.milliseconds()/1e3);return this.asSeconds()?(this.asSeconds()<0?\"-\":\"\")+\"P\"+(a?a+\"Y\":\"\")+(b?b+\"M\":\"\")+(c?c+\"D\":\"\")+(d||e||f?\"T\":\"\")+(d?d+\"H\":\"\")+(e?e+\"M\":\"\")+(f?f+\"S\":\"\"):\"P0D\"},localeData:function(){return this._locale}});for(tb in fc)fc.hasOwnProperty(tb)&&pb(tb.toLowerCase());rb.duration.fn.asMilliseconds=function(){return this.as(\"ms\")},rb.duration.fn.asSeconds=function(){return this.as(\"s\")},rb.duration.fn.asMinutes=function(){return this.as(\"m\")},rb.duration.fn.asHours=function(){return this.as(\"h\")},rb.duration.fn.asDays=function(){return this.as(\"d\")},rb.duration.fn.asWeeks=function(){return this.as(\"weeks\")},rb.duration.fn.asMonths=function(){return this.as(\"M\")},rb.duration.fn.asYears=function(){return this.as(\"y\")},rb.locale(\"en\",{ordinal:function(a){var b=a%10,c=1===z(a%100/10)?\"th\":1===b?\"st\":2===b?\"nd\":3===b?\"rd\":\"th\";return a+c}}),Gb?module.exports=rb:\"function\"==typeof define&&define.amd?(define(\"moment\",function(a,b,c){return c.config&&c.config()&&c.config().noGlobal===!0&&(vb.moment=sb),rb}),qb(!0)):qb()}).call(this);","//! moment-timezone.js\n//! version : 0.5.11\n//! Copyright (c) JS Foundation and other contributors\n//! license : MIT\n//! github.com/moment/moment-timezone\n!function(a,b){\"use strict\";\"function\"==typeof define&&define.amd?define([\"moment\"],b):\"object\"==typeof module&&module.exports?module.exports=b(require(\"moment\")):b(a.moment)}(this,function(a){\"use strict\";function b(a){return a>96?a-87:a>64?a-29:a-48}function c(a){var c,d=0,e=a.split(\".\"),f=e[0],g=e[1]||\"\",h=1,i=0,j=1;for(45===a.charCodeAt(0)&&(d=1,j=-1),d;d<f.length;d++)c=b(f.charCodeAt(d)),i=60*i+c;for(d=0;d<g.length;d++)h/=60,c=b(g.charCodeAt(d)),i+=c*h;return i*j}function d(a){for(var b=0;b<a.length;b++)a[b]=c(a[b])}function e(a,b){for(var c=0;c<b;c++)a[c]=Math.round((a[c-1]||0)+6e4*a[c]);a[b-1]=1/0}function f(a,b){var c,d=[];for(c=0;c<b.length;c++)d[c]=a[b[c]];return d}function g(a){var b=a.split(\"|\"),c=b[2].split(\" \"),g=b[3].split(\"\"),h=b[4].split(\" \");return d(c),d(g),d(h),e(h,g.length),{name:b[0],abbrs:f(b[1].split(\" \"),g),offsets:f(c,g),untils:h,population:0|b[5]}}function h(a){a&&this._set(g(a))}function i(a){var b=a.toTimeString(),c=b.match(/\\([a-z ]+\\)/i);c&&c[0]?(c=c[0].match(/[A-Z]/g),c=c?c.join(\"\"):void 0):(c=b.match(/[A-Z]{3,5}/g),c=c?c[0]:void 0),\"GMT\"===c&&(c=void 0),this.at=+a,this.abbr=c,this.offset=a.getTimezoneOffset()}function j(a){this.zone=a,this.offsetScore=0,this.abbrScore=0}function k(a,b){for(var c,d;d=6e4*((b.at-a.at)/12e4|0);)c=new i(new Date(a.at+d)),c.offset===a.offset?a=c:b=c;return a}function l(){var a,b,c,d=(new Date).getFullYear()-2,e=new i(new Date(d,0,1)),f=[e];for(c=1;c<48;c++)b=new i(new Date(d,c,1)),b.offset!==e.offset&&(a=k(e,b),f.push(a),f.push(new i(new Date(a.at+6e4)))),e=b;for(c=0;c<4;c++)f.push(new i(new Date(d+c,0,1))),f.push(new i(new Date(d+c,6,1)));return f}function m(a,b){return a.offsetScore!==b.offsetScore?a.offsetScore-b.offsetScore:a.abbrScore!==b.abbrScore?a.abbrScore-b.abbrScore:b.zone.population-a.zone.population}function n(a,b){var c,e;for(d(b),c=0;c<b.length;c++)e=b[c],I[e]=I[e]||{},I[e][a]=!0}function o(a){var b,c,d,e=a.length,f={},g=[];for(b=0;b<e;b++){d=I[a[b].offset]||{};for(c in d)d.hasOwnProperty(c)&&(f[c]=!0)}for(b in f)f.hasOwnProperty(b)&&g.push(H[b]);return g}function p(){try{var a=Intl.DateTimeFormat().resolvedOptions().timeZone;if(a){var b=H[r(a)];if(b)return b;z(\"Moment Timezone found \"+a+\" from the Intl api, but did not have that data loaded.\")}}catch(c){}var d,e,f,g=l(),h=g.length,i=o(g),k=[];for(e=0;e<i.length;e++){for(d=new j(t(i[e]),h),f=0;f<h;f++)d.scoreOffsetAt(g[f]);k.push(d)}return k.sort(m),k.length>0?k[0].zone.name:void 0}function q(a){return D&&!a||(D=p()),D}function r(a){return(a||\"\").toLowerCase().replace(/\\//g,\"_\")}function s(a){var b,c,d,e;for(\"string\"==typeof a&&(a=[a]),b=0;b<a.length;b++)d=a[b].split(\"|\"),c=d[0],e=r(c),F[e]=a[b],H[e]=c,d[5]&&n(e,d[2].split(\" \"))}function t(a,b){a=r(a);var c,d=F[a];return d instanceof h?d:\"string\"==typeof d?(d=new h(d),F[a]=d,d):G[a]&&b!==t&&(c=t(G[a],t))?(d=F[a]=new h,d._set(c),d.name=H[a],d):null}function u(){var a,b=[];for(a in H)H.hasOwnProperty(a)&&(F[a]||F[G[a]])&&H[a]&&b.push(H[a]);return b.sort()}function v(a){var b,c,d,e;for(\"string\"==typeof a&&(a=[a]),b=0;b<a.length;b++)c=a[b].split(\"|\"),d=r(c[0]),e=r(c[1]),G[d]=e,H[d]=c[0],G[e]=d,H[e]=c[1]}function w(a){s(a.zones),v(a.links),A.dataVersion=a.version}function x(a){return x.didShowError||(x.didShowError=!0,z(\"moment.tz.zoneExists('\"+a+\"') has been deprecated in favor of !moment.tz.zone('\"+a+\"')\")),!!t(a)}function y(a){return!(!a._a||void 0!==a._tzm)}function z(a){\"undefined\"!=typeof console&&\"function\"==typeof console.error&&console.error(a)}function A(b){var c=Array.prototype.slice.call(arguments,0,-1),d=arguments[arguments.length-1],e=t(d),f=a.utc.apply(null,c);return e&&!a.isMoment(b)&&y(f)&&f.add(e.parse(f),\"minutes\"),f.tz(d),f}function B(a){return function(){return this._z?this._z.abbr(this):a.call(this)}}function C(a){return function(){return this._z=null,a.apply(this,arguments)}}var D,E=\"0.5.11\",F={},G={},H={},I={},J=a.version.split(\".\"),K=+J[0],L=+J[1];(K<2||2===K&&L<6)&&z(\"Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js \"+a.version+\". See momentjs.com\"),h.prototype={_set:function(a){this.name=a.name,this.abbrs=a.abbrs,this.untils=a.untils,this.offsets=a.offsets,this.population=a.population},_index:function(a){var b,c=+a,d=this.untils;for(b=0;b<d.length;b++)if(c<d[b])return b},parse:function(a){var b,c,d,e,f=+a,g=this.offsets,h=this.untils,i=h.length-1;for(e=0;e<i;e++)if(b=g[e],c=g[e+1],d=g[e?e-1:e],b<c&&A.moveAmbiguousForward?b=c:b>d&&A.moveInvalidForward&&(b=d),f<h[e]-6e4*b)return g[e];return g[i]},abbr:function(a){return this.abbrs[this._index(a)]},offset:function(a){return this.offsets[this._index(a)]}},j.prototype.scoreOffsetAt=function(a){this.offsetScore+=Math.abs(this.zone.offset(a.at)-a.offset),this.zone.abbr(a.at).replace(/[^A-Z]/g,\"\")!==a.abbr&&this.abbrScore++},A.version=E,A.dataVersion=\"\",A._zones=F,A._links=G,A._names=H,A.add=s,A.link=v,A.load=w,A.zone=t,A.zoneExists=x,A.guess=q,A.names=u,A.Zone=h,A.unpack=g,A.unpackBase60=c,A.needsOffset=y,A.moveInvalidForward=!0,A.moveAmbiguousForward=!1;var M=a.fn;a.tz=A,a.defaultZone=null,a.updateOffset=function(b,c){var d,e=a.defaultZone;void 0===b._z&&(e&&y(b)&&!b._isUTC&&(b._d=a.utc(b._a)._d,b.utc().add(e.parse(b),\"minutes\")),b._z=e),b._z&&(d=b._z.offset(b),Math.abs(d)<16&&(d/=60),void 0!==b.utcOffset?b.utcOffset(-d,c):b.zone(d,c))},M.tz=function(b){return b?(this._z=t(b),this._z?a.updateOffset(this):z(\"Moment Timezone has no data for \"+b+\". See http://momentjs.com/timezone/docs/#/data-loading/.\"),this):this._z?this._z.name:void 0},M.zoneName=B(M.zoneName),M.zoneAbbr=B(M.zoneAbbr),M.utc=C(M.utc),a.tz.setDefault=function(b){return(K<2||2===K&&L<9)&&z(\"Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js \"+a.version+\".\"),a.defaultZone=b?t(b):null,a};var N=a.momentProperties;return\"[object Array]\"===Object.prototype.toString.call(N)?(N.push(\"_z\"),N.push(\"_a\")):N&&(N._z=null),w({version:\"2016j\",zones:[\"Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5\",\"Africa/Accra|LMT GMT GHST|.Q 0 -k|012121212121212121212121212121212121212121212121|-26BbX.8 6tzX.8 MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE|41e5\",\"Africa/Nairobi|LMT EAT BEAT BEAUT|-2r.g -30 -2u -2J|01231|-1F3Cr.g 3Dzr.g okMu MFXJ|47e5\",\"Africa/Algiers|PMT WET WEST CET CEST|-9.l 0 -10 -10 -20|0121212121212121343431312123431213|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5\",\"Africa/Lagos|LMT WAT|-d.A -10|01|-22y0d.A|17e6\",\"Africa/Bissau|LMT WAT GMT|12.k 10 0|012|-2ldWV.E 2xonV.E|39e4\",\"Africa/Maputo|LMT CAT|-2a.k -20|01|-2GJea.k|26e5\",\"Africa/Cairo|EET EEST|-20 -30|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1bIO0 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0|15e6\",\"Africa/Casablanca|LMT WET WEST CET|u.k 0 -10 -10|0121212121212121213121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0 11A0 5A0 e00 17c0 1fA0 1a00 1a00 1fA0 17c0 1io0 14o0 1lc0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1lc0 14o0 1fA0|32e5\",\"Africa/Ceuta|WET WEST CET CEST|0 -10 -10 -20|010101010101010101010232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-25KN0 11z0 drd0 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1y7p0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|85e3\",\"Africa/El_Aaiun|LMT WAT WET WEST|Q.M 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 Rc0 11A0 e00 e00 U00 11A0 8o0 e00 11A0 11A0 5A0 e00 17c0 1fA0 1a00 1a00 1fA0 17c0 1io0 14o0 1lc0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1lc0 14o0 1fA0|20e4\",\"Africa/Johannesburg|SAST SAST SAST|-1u -20 -30|012121|-2GJdu 1Ajdu 1cL0 1cN0 1cL0|84e5\",\"Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|01212121212121212121212121212121213|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0|51e5\",\"Africa/Monrovia|MMT LRT GMT|H.8 I.u 0|012|-23Lzg.Q 29s01.m|11e5\",\"Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5\",\"Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5\",\"Africa/Tunis|PMT CET CEST|-9.l -10 -20|0121212121212121212121212121212121|-2nco9.l 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5\",\"Africa/Windhoek|SWAT SAST SAST CAT WAT WAST|-1u -20 -30 -20 -10 -20|012134545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2GJdu 1Ajdu 1cL0 1SqL0 9NA0 11D0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0|32e4\",\"America/Adak|NST NWT NPT BST BDT AHST HST HDT|b0 a0 a0 b0 a0 a0 a0 90|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326\",\"America/Anchorage|CAT CAWT CAPT AHST AHDT YST AKST AKDT|a0 90 90 a0 90 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T00 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4\",\"America/Port_of_Spain|LMT AST|46.4 40|01|-2kNvR.U|43e3\",\"America/Araguaina|LMT BRT BRST|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4\",\"America/Argentina/Buenos_Aires|CMT ART ARST ART ARST|4g.M 40 30 30 20|0121212121212121212121212121212121212121213434343434343234343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 g0p0 10M0 j3c0 uL0 1qN0 WL0\",\"America/Argentina/Catamarca|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|0121212121212121212121212121212121212121213434343454343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 g0p0 10M0 ako0 7B0 8zb0 uL0\",\"America/Argentina/Cordoba|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|0121212121212121212121212121212121212121213434343454343234343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 g0p0 10M0 j3c0 uL0 1qN0 WL0\",\"America/Argentina/Jujuy|CMT ART ARST ART ARST WART WARST|4g.M 40 30 30 20 40 30|01212121212121212121212121212121212121212134343456543432343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 g0p0 10M0 j3c0 uL0\",\"America/Argentina/La_Rioja|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|01212121212121212121212121212121212121212134343434534343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 g0p0 10M0 ako0 7B0 8zb0 uL0\",\"America/Argentina/Mendoza|CMT ART ARST ART ARST WART WARST|4g.M 40 30 30 20 40 30|0121212121212121212121212121212121212121213434345656543235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 g0p0 10M0 agM0 Op0 7TX0 uL0\",\"America/Argentina/Rio_Gallegos|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|0121212121212121212121212121212121212121213434343434343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 g0p0 10M0 ako0 7B0 8zb0 uL0\",\"America/Argentina/Salta|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|01212121212121212121212121212121212121212134343434543432343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 g0p0 10M0 j3c0 uL0\",\"America/Argentina/San_Juan|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|01212121212121212121212121212121212121212134343434534343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 g0p0 10M0 ak00 m10 8lb0 uL0\",\"America/Argentina/San_Luis|CMT ART ARST ART ARST WART WARST|4g.M 40 30 30 20 40 30|01212121212121212121212121212121212121212134343456536353465653|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 kin0 10M0 ak00 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0\",\"America/Argentina/Tucuman|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|012121212121212121212121212121212121212121343434345434323534343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 g0p0 10M0 ako0 4N0 8BX0 uL0 1qN0 WL0\",\"America/Argentina/Ushuaia|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|0121212121212121212121212121212121212121213434343434343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 g0p0 10M0 ajA0 8p0 8zb0 uL0\",\"America/Curacao|LMT ANT AST|4z.L 4u 40|012|-2kV7o.d 28KLS.d|15e4\",\"America/Asuncion|AMT PYT PYT PYST|3O.E 40 30 30|012131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313|-1x589.k 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0|28e5\",\"America/Atikokan|CST CDT CWT CPT EST|60 50 50 50 50|0101234|-25TQ0 1in0 Rnb0 3je0 8x30 iw0|28e2\",\"America/Bahia|LMT BRT BRST|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5\",\"America/Bahia_Banderas|LMT MST CST PST MDT CDT|71 70 60 80 60 50|0121212131414141414141414141414141414152525252525252525252525252525252525252525252525252525252|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|84e3\",\"America/Barbados|LMT BMT AST ADT|3W.t 3W.t 40 30|01232323232|-1Q0I1.v jsM0 1ODC1.v IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4\",\"America/Belem|LMT BRT BRST|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5\",\"America/Belize|LMT CST CHDT CDT|5Q.M 60 5u 50|01212121212121212121212121212121212121212121212121213131|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1f0Mu qn0 lxB0 mn0|57e3\",\"America/Blanc-Sablon|AST ADT AWT APT|40 30 30 30|010230|-25TS0 1in0 UGp0 8x50 iu0|11e2\",\"America/Boa_Vista|LMT AMT AMST|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2\",\"America/Bogota|BMT COT COST|4U.g 50 40|0121|-2eb73.I 38yo3.I 2en0|90e5\",\"America/Boise|PST PDT MST MWT MPT MDT|80 70 70 60 60 60|0101023425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-261q0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4\",\"America/Cambridge_Bay|-00 MST MWT MPT MDDT MDT CST CDT EST|0 70 60 60 50 60 60 50 50|0123141515151515151515151515151515151515151515678651515151515151515151515151515151515151515151515151515151515151515151515151|-21Jc0 RO90 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2\",\"America/Campo_Grande|LMT AMT AMST|3C.s 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0|77e4\",\"America/Cancun|LMT CST EST EDT CDT|5L.4 60 50 40 50|0123232341414141414141414141414141414141412|-1UQG0 2q2o0 yLB0 1lb0 14p0 1lb0 14p0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4\",\"America/Caracas|CMT VET VET|4r.E 4u 40|01212|-2kV7w.k 28KM2.k 1IwOu kqo0|29e5\",\"America/Cayenne|LMT GFT GFT|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3\",\"America/Panama|CMT EST|5j.A 50|01|-2uduE.o|15e5\",\"America/Chicago|CST CDT EST CWT CPT|60 50 50 50 50|01010101010101010101010101010101010102010101010103401010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5\",\"America/Chihuahua|LMT MST CST CDT MDT|74.k 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|81e4\",\"America/Costa_Rica|SJMT CST CDT|5A.d 60 50|0121212121|-1Xd6n.L 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5\",\"America/Creston|MST PST|70 80|010|-29DR0 43B0|53e2\",\"America/Cuiaba|LMT AMT AMST|3I.k 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0|54e4\",\"America/Danmarkshavn|LMT WGT WGST GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8\",\"America/Dawson|YST YDT YWT YPT YDDT PST PDT|90 80 80 80 70 80 70|0101023040565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|13e2\",\"America/Dawson_Creek|PST PDT PWT PPT MST|80 70 70 70 70|0102301010101010101010101010101010101010101010101010101014|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3\",\"America/Denver|MST MDT MWT MPT|70 60 60 60|01010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5\",\"America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|01234252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 Jy10 SL0 dnB0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5\",\"America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|01212121212121341212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 LFB0 1cL0 3Cp0 1cL0 66N0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5\",\"America/Eirunepe|LMT ACT ACST AMT|4D.s 50 40 40|0121212121212121212121212121212131|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3\",\"America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5\",\"America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQE0 4PX0 8mM0 8lc0 SN0 1cL0 pHB0 83r0 zI0 5O10 1Rz0 cOO0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5\",\"America/Fort_Nelson|PST PDT PWT PPT MST|80 70 70 70 70|01023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010104|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2\",\"America/Fort_Wayne|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010101023010101010101010101040454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0\",\"America/Fortaleza|LMT BRT BRST|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5\",\"America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3\",\"America/Godthab|LMT WGT WGST|3q.U 30 20|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e3\",\"America/Goose_Bay|NST NDT NST NDT NWT NPT AST ADT ADDT|3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|010232323232323245232323232323232323232323232323232323232326767676767676767676767676767676767676767676768676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-25TSt.8 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2\",\"America/Grand_Turk|KMT EST EDT AST|57.b 50 40 40|0121212121212121212121212121212121212121212121212121212121212121212121212123|-2l1uQ.N 2HHBQ.N 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2\",\"America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5\",\"America/Guayaquil|QMT ECT|5e 50|01|-1yVSK|27e5\",\"America/Guyana|LMT GBGT GYT GYT GYT|3Q.E 3J 3J 30 40|01234|-2dvU7.k 24JzQ.k mlc0 Bxbf|80e4\",\"America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4\",\"America/Havana|HMT CST CDT|5t.A 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Meuu.o 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5\",\"America/Hermosillo|LMT MST CST PST MDT|7n.Q 70 60 80 60|0121212131414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0|64e4\",\"America/Indiana/Knox|CST CDT CWT CPT EST|60 50 50 50 50|0101023010101010101010101010101010101040101010101010101010101010101010101010101010101010141010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0\",\"America/Indiana/Marengo|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010104545454545414545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0\",\"America/Indiana/Petersburg|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010104010101010101010101010141014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0\",\"America/Indiana/Tell_City|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0\",\"America/Indiana/Vevay|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010102304545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0\",\"America/Indiana/Vincennes|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0\",\"America/Indiana/Winamac|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010101010454541054545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0\",\"America/Inuvik|-00 PST PDDT MST MDT|0 80 60 70 60|0121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-FnA0 tWU0 1fA0 wPe0 2pz0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2\",\"America/Iqaluit|-00 EWT EPT EST EDDT EDT CST CDT|0 40 40 50 30 40 60 50|01234353535353535353535353535353535353535353567353535353535353535353535353535353535353535353535353535353535353535353535353|-16K00 7nX0 iv0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2\",\"America/Jamaica|KMT EST EDT|57.b 50 40|0121212121212121212121|-2l1uQ.N 2uM1Q.N 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4\",\"America/Juneau|PST PWT PPT PDT YDT YST AKST AKDT|80 70 70 70 80 90 90 80|01203030303030303030303030403030356767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3\",\"America/Kentucky/Louisville|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101010102301010101010101010101010101454545454545414545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 Bb0 10N0 2bB0 8in0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0\",\"America/Kentucky/Monticello|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0\",\"America/La_Paz|CMT BOST BOT|4w.A 3w.A 40|012|-1x37r.o 13b0|19e5\",\"America/Lima|LMT PET PEST|58.A 50 40|0121212121212121|-2tyGP.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6\",\"America/Los_Angeles|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6\",\"America/Maceio|LMT BRT BRST|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4\",\"America/Managua|MMT CST EST CDT|5J.c 60 50 50|0121313121213131|-1quie.M 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5\",\"America/Manaus|LMT AMT AMST|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5\",\"America/Martinique|FFMT AST ADT|44.k 40 30|0121|-2mPTT.E 2LPbT.E 19X0|39e4\",\"America/Matamoros|LMT CST CDT|6E 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4\",\"America/Mazatlan|LMT MST CST PST MDT|75.E 70 60 80 60|0121212131414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|44e4\",\"America/Menominee|CST CDT CWT CPT EST|60 50 50 50 50|01010230101041010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2\",\"America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQG0 2q2o0 2hz0 wu30 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|11e5\",\"America/Metlakatla|PST PWT PPT PDT AKST AKDT|80 70 70 70 90 80|0120303030303030303030303030303030454545454545454545454545454545454545454545454|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2\",\"America/Mexico_City|LMT MST CST CDT CWT|6A.A 70 60 50 50|012121232324232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|20e6\",\"America/Miquelon|LMT AST PMST PMDT|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mKkf.k 2LTAf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2\",\"America/Moncton|EST AST ADT AWT APT|50 40 30 30 30|012121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsH0 CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3\",\"America/Monterrey|LMT CST CDT|6F.g 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|41e5\",\"America/Montevideo|MMT UYT UYHST UYST UYT UYHST|3I.I 3u 30 20 30 2u|012121212121212121212121213434343434345454543453434343434343434343434343434343434343434|-20UIf.g 8jzJ.g 1cLu 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1qMu WLu 1qMu 11zu 1o0u 11zu NAu 11bu 2iMu zWu Dq10 19X0 pd0 jz0 cm10 19X0 1fB0 1on0 11d0 1oL0 1nB0 1fzu 1aou 1fzu 1aou 1fzu 3nAu Jb0 3MN0 1SLu 4jzu 2PB0 Lb0 3Dd0 1pb0 ixd0 An0 1MN0 An0 1wp0 On0 1wp0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5\",\"America/Toronto|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101012301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1nX0 11z0 1o10 11z0 1o10 1qL0 11D0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5\",\"America/Nassau|LMT EST EDT|59.u 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2kNuO.u 26XdO.u 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|24e4\",\"America/New_York|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6\",\"America/Nipigon|EST EDT EWT EPT|50 40 40 40|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 Rnb0 3je0 8x40 iv0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|16e2\",\"America/Nome|NST NWT NPT BST BDT YST AKST AKDT|b0 a0 a0 b0 a0 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2\",\"America/Noronha|LMT FNT FNST|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2\",\"America/North_Dakota/Beulah|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0\",\"America/North_Dakota/Center|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0\",\"America/North_Dakota/New_Salem|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0\",\"America/Ojinaga|LMT MST CST CDT MDT|6V.E 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3\",\"America/Pangnirtung|-00 AST AWT APT ADDT ADT EDT EST CST CDT|0 40 30 30 20 30 40 50 60 50|012314151515151515151515151515151515167676767689767676767676767676767676767676767676767676767676767676767676767676767676767|-1XiM0 PnG0 8x50 iu0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1o00 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2\",\"America/Paramaribo|LMT PMT PMT NEGT SRT SRT|3E.E 3E.Q 3E.A 3u 3u 30|012345|-2nDUj.k Wqo0.c qanX.I 1dmLN.o lzc0|24e4\",\"America/Phoenix|MST MDT MWT|70 60 60|01010202010|-261r0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5\",\"America/Port-au-Prince|PPMT EST EDT|4N 50 40|01212121212121212121212121212121212121212121|-28RHb 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5\",\"America/Rio_Branco|LMT ACT ACST AMT|4v.c 50 40 40|01212121212121212121212121212131|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4\",\"America/Porto_Velho|LMT AMT AMST|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4\",\"America/Puerto_Rico|AST AWT APT|40 30 30|0120|-17lU0 7XT0 iu0|24e5\",\"America/Rainy_River|CST CDT CWT CPT|60 50 50 50|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TQ0 1in0 Rnb0 3je0 8x30 iw0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|842\",\"America/Rankin_Inlet|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313131313131313131313131313131313131313131313131313131313131313131|-vDc0 keu0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2\",\"America/Recife|LMT BRT BRST|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5\",\"America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4\",\"America/Resolute|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313431313131313131313131313131313131313131313131313131313131313131|-SnA0 GWS0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229\",\"America/Santarem|LMT AMT AMST BRT|3C.M 40 30 30|0121212121212121212121212121213|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4\",\"America/Santiago|SMT CLT CLT CLST CLST|4G.K 50 40 40 30|010203131313131212421242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424|-2q2jh.e fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 jb0 1oN0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|62e5\",\"America/Santo_Domingo|SDMT EST EDT EHDT AST|4E 50 40 4u 40|01213131313131414|-1ttjk 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5\",\"America/Sao_Paulo|LMT BRT BRST|36.s 30 20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0|20e6\",\"America/Scoresbysund|LMT CGT CGST EGST EGT|1r.Q 20 10 0 10|0121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|452\",\"America/Sitka|PST PWT PPT PDT YST AKST AKDT|80 70 70 70 90 90 80|01203030303030303030303030303030345656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2\",\"America/St_Johns|NST NDT NST NDT NWT NPT NDDT|3u.Q 2u.Q 3u 2u 2u 2u 1u|01010101010101010101010101010101010102323232323232324523232323232323232323232323232323232323232323232323232323232323232323232323232323232326232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-28oit.8 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4\",\"America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3\",\"America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5\",\"America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656\",\"America/Thunder_Bay|CST EST EWT EPT EDT|60 50 40 40 40|0123141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-2q5S0 1iaN0 8x40 iv0 XNB0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4\",\"America/Vancouver|PST PDT PWT PPT|80 70 70 70|0102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TO0 1in0 UGp0 8x10 iy0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5\",\"America/Whitehorse|YST YDT YWT YPT YDDT PST PDT|90 80 80 80 70 80 70|0101023040565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 3NA0 vrd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3\",\"America/Winnipeg|CST CDT CWT CPT|60 50 50 50|010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aIi0 WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4\",\"America/Yakutat|YST YWT YPT YDT AKST AKDT|90 80 80 80 90 80|01203030303030303030303030303030304545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-17T10 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642\",\"America/Yellowknife|-00 MST MWT MPT MDDT MDT|0 70 60 60 50 60|012314151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151|-1pdA0 hix0 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3\",\"Antarctica/Casey|-00 +08 +11|0 -80 -b0|0121212|-2q00 1DjS0 T90 40P0 KL0 blz0|10\",\"Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70\",\"Antarctica/DumontDUrville|-00 +10|0 -a0|0101|-U0o0 cfq0 bFm0|80\",\"Antarctica/Macquarie|AEST AEDT -00 MIST|-a0 -b0 0 -b0|0102010101010101010101010101010101010101010101010101010101010101010101010101010101010101013|-29E80 19X0 4SL0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0|1\",\"Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60\",\"Pacific/Auckland|NZMT NZST NZST NZDT|-bu -cu -c0 -d0|01020202020202020202020202023232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1GCVu Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|14e5\",\"Antarctica/Palmer|-00 ARST ART ART ARST CLT CLST|0 30 40 30 20 40 30|0121212121234356565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|40\",\"Antarctica/Rothera|-00 -03|0 30|01|gOo0|130\",\"Antarctica/Syowa|-00 +03|0 -30|01|-vs00|20\",\"Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|40\",\"Antarctica/Vostok|-00 +06|0 -60|01|-tjA0|25\",\"Europe/Oslo|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2awM0 Qm0 W6o0 5pf0 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 wJc0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1qM0 WM0 zpc0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e4\",\"Asia/Riyadh|LMT AST|-36.Q -30|01|-TvD6.Q|57e5\",\"Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|012323232323232323232321232323232323232323232323232|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|15e5\",\"Asia/Amman|LMT EET EEST|-2n.I -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e5\",\"Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3\",\"Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4\",\"Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4\",\"Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4\",\"Asia/Atyrau|LMT +04 +05 +06|-3r.I -40 -50 -60|01232323232323232323212323232323232321212121212|-1Pc3r.I eUnr.I 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0\",\"Asia/Baghdad|BMT AST ADT|-2V.A -30 -40|012121212121212121212121212121212121212121212121212121|-26BeV.A 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5\",\"Asia/Qatar|LMT GST AST|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4\",\"Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5\",\"Asia/Bangkok|BMT ICT|-6G.4 -70|01|-218SG.4|15e6\",\"Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0\",\"Asia/Beirut|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-21aq0 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0|22e5\",\"Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4\",\"Asia/Brunei|LMT BNT BNT|-7D.E -7u -80|012|-1KITD.E gDc9.E|42e4\",\"Asia/Kolkata|HMT BURT IST IST|-5R.k -6u -5u -6u|01232|-18LFR.k 1unn.k HB0 7zX0|15e6\",\"Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4\",\"Asia/Choibalsan|LMT ULAT ULAT CHOST CHOT CHOT CHOST|-7C -70 -80 -a0 -90 -80 -90|0123434343434343434343434343434343434343434343456565656565656565656565656565656565656565656565|-2APHC 2UkoC cKn0 1da0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 3Db0 h1f0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|38e3\",\"Asia/Shanghai|CST CDT|-80 -90|01010101010101010|-1c1I0 LX0 16p0 1jz0 1Myp0 Rb0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6\",\"Asia/Colombo|MMT +0530 +06 +0630|-5j.w -5u -60 -6u|01231321|-2zOtj.w 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5\",\"Asia/Dhaka|HMT BURT IST DACT BDT BDST|-5R.k -6u -5u -60 -60 -70|01213454|-18LFR.k 1unn.k HB0 m6n0 LqMu 1x6n0 1i00|16e6\",\"Asia/Damascus|LMT EET EEST|-2p.c -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|26e5\",\"Asia/Dili|LMT TLT JST TLT WITA|-8m.k -80 -90 -90 -80|012343|-2le8m.k 1dnXm.k 8HA0 1ew00 Xld0|19e4\",\"Asia/Dubai|LMT GST|-3F.c -40|01|-21JfF.c|39e5\",\"Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4\",\"Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0\",\"Asia/Gaza|EET EEST IST IDT|-20 -30 -20 -30|010101010101010101010101010101012323232323232323232323232320101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0|18e5\",\"Asia/Hebron|EET EEST IST IDT|-20 -30 -20 -30|01010101010101010101010101010101232323232323232323232323232010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0|25e4\",\"Asia/Ho_Chi_Minh|LMT PLMT ICT IDT JST|-76.E -76.u -70 -80 -90|0123423232|-2yC76.E bK00.a 1h7b6.u 5lz0 18o0 3Oq0 k5b0 aW00 BAM0|90e5\",\"Asia/Hong_Kong|LMT HKT HKST JST|-7A.G -80 -90 -90|0121312121212121212121212121212121212121212121212121212121212121212121|-2CFHA.G 1sEP6.G 1cL0 ylu 93X0 1qQu 1tX0 Rd0 1In0 NB0 1cL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1kL0 14N0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5\",\"Asia/Hovd|LMT HOVT HOVT HOVST|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|81e3\",\"Asia/Irkutsk|IMT +07 +08 +09|-6V.5 -70 -80 -90|01232323232323232323232123232323232323232323232323232323232323232|-21zGV.5 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4\",\"Europe/Istanbul|IMT EET EEST +04 +03|-1U.U -20 -30 -40 -30|012121212121212121212121212121212121212121212121212121234343434342121212121212121212121212121212121212121212121212121212121212124|-2ogNU.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSp0 CL0 mN0 1Vz0 1gN0 1pz0 5Rd0 1fz0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1jB0 18L0 1ip0 17z0 qdd0 xX0 3S10 Tz0 dA10 11z0 1o10 11z0 1qN0 11z0 1ze0 11B0 WM0 1qO0 WI0 1nX0 1rB0 10L0 11B0 1in0 17d0 1in0 2pX0 19E0 1fU0 16Q0 1iI0 16Q0 1iI0 1Vd0 pb0 3Kp0 14o0 1de0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6\",\"Asia/Jakarta|BMT JAVT WIB JST WIB WIB|-77.c -7k -7u -90 -80 -70|01232425|-1Q0Tk luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6\",\"Asia/Jayapura|LMT WIT ACST|-9m.M -90 -9u|0121|-1uu9m.M sMMm.M L4nu|26e4\",\"Asia/Jerusalem|JMT IST IDT IDDT|-2k.E -20 -30 -40|01212121212132121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-26Bek.E SyMk.E 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 3LB0 Em0 or0 1cn0 1dB0 16n0 10O0 1ja0 1tC0 14o0 1cM0 1a00 11A0 1Na0 An0 1MP0 AJ0 1Kp0 LC0 1oo0 Wl0 EQN0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0|81e4\",\"Asia/Kabul|AFT AFT|-40 -4u|01|-10Qs0|46e5\",\"Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4\",\"Asia/Karachi|LMT IST IST KART PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6\",\"Asia/Urumqi|LMT XJT|-5O.k -60|01|-1GgtO.k|32e5\",\"Asia/Kathmandu|LMT IST NPT|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5\",\"Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2\",\"Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5\",\"Asia/Kuala_Lumpur|SMT MALT MALST MALT MALT JST MYT|-6T.p -70 -7k -7k -7u -90 -80|01234546|-2Bg6T.p 17anT.p 7hXE dM00 17bO 8Fyu 1so1u|71e5\",\"Asia/Kuching|LMT BORT BORT BORTST JST MYT|-7l.k -7u -80 -8k -90 -80|01232323232323232425|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0 1so10|13e4\",\"Asia/Macau|LMT MOT MOST CST|-7y.k -80 -90 -80|0121212121212121212121212121212121212121213|-2le7y.k 1XO34.k 1wn0 Rd0 1wn0 R9u 1wqu U10 1tz0 TVu 1tz0 17gu 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cJu 1cL0 1cN0 1fz0 1cN0 1cOu 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cJu 1cL0 1cN0 1fz0 1cN0 1cL0 KEp0|57e4\",\"Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3\",\"Asia/Makassar|LMT MMT WITA JST|-7V.A -7V.A -80 -90|01232|-21JjV.A vfc0 myLV.A 8ML0|15e5\",\"Asia/Manila|PHT PHST JST|-80 -90 -90|010201010|-1kJI0 AL0 cK10 65X0 mXB0 vX0 VK10 1db0|24e6\",\"Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|32e4\",\"Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4\",\"Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5\",\"Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5\",\"Asia/Oral|LMT +04 +05 +06|-3p.o -40 -50 -60|01232323232323232121212121212121212121212121212|-1Pc3p.o eUnp.o 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4\",\"Asia/Pontianak|LMT PMT WIB JST WIB WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4\",\"Asia/Pyongyang|LMT KST JCST JST KST|-8n -8u -90 -90 -90|012341|-2um8n 97XR 12FXu jdA0 2Onc0|29e5\",\"Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|0123232323232323232323232323232323232323232323|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|73e4\",\"Asia/Rangoon|RMT BURT JST MMT|-6o.E -6u -90 -6u|0123|-21Jio.E SmnS.E 7j9u|48e5\",\"Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4\",\"Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4\",\"Asia/Seoul|LMT KST JCST JST KST KDT KDT|-8r.Q -8u -90 -90 -90 -9u -a0|01234151515151515146464|-2um8r.Q 97XV.Q 12FXu jjA0 kKo0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6\",\"Asia/Singapore|SMT MALT MALST MALT MALT JST SGT SGT|-6T.p -70 -7k -7k -7u -90 -7u -80|012345467|-2Bg6T.p 17anT.p 7hXE dM00 17bO 8Fyu Mspu DTA0|56e5\",\"Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2\",\"Asia/Taipei|JWST JST CST CDT|-80 -90 -80 -90|01232323232323232323232323232323232323232|-1iw80 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5\",\"Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5\",\"Asia/Tbilisi|TBMT +03 +04 +05|-2X.b -30 -40 -50|0123232323232323232323212121232323232323232323212|-1Pc2X.b 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5\",\"Asia/Tehran|LMT TMT IRST IRST IRDT IRDT|-3p.I -3p.I -3u -40 -50 -4u|01234325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2btDp.I 1d3c0 1huLT.I TXu 1pz0 sN0 vAu 1cL0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0|14e6\",\"Asia/Thimphu|LMT IST BTT|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3\",\"Asia/Tokyo|JCST JST JDT|-90 -90 -a0|0121212121|-1iw90 pKq0 QL0 1lB0 13X0 1zB0 NX0 1zB0 NX0|38e6\",\"Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5\",\"Asia/Ulaanbaatar|LMT ULAT ULAT ULAST|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1fx0 1cP0 1cJ0 1cP0 1cJ0 1cP0 1cJ0|12e5\",\"Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2\",\"Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4\",\"Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4\",\"Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5\",\"Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5\",\"Atlantic/Azores|HMT AZOT AZOST AZOMT AZOT AZOST WET|1S.w 20 10 0 10 0 0|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121454545454545454545454545454545456545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2ldW5.s aPX5.s Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|25e4\",\"Atlantic/Bermuda|LMT AST ADT|4j.i 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1BnRE.G 1LTbE.G 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3\",\"Atlantic/Canary|LMT CANT WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4\",\"Atlantic/Cape_Verde|LMT CVT CVST CVT|1y.4 20 10 10|01213|-2xomp.U 1qOMp.U 7zX0 1djf0|50e4\",\"Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|49e3\",\"Atlantic/Madeira|FMT MADT MADST MADMT WET WEST|17.A 10 0 -10 0 -10|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2ldWQ.o aPWQ.o Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e4\",\"Atlantic/Reykjavik|LMT IST ISST GMT|1s 10 0 0|012121212121212121212121212121212121212121212121212121212121212121213|-2uWmw mfaw 1Bd0 ML0 1LB0 Cn0 1LB0 3fX0 C10 HrX0 1cO0 LB0 1EL0 LA0 1C00 Oo0 1wo0 Rc0 1wo0 Rc0 1wo0 Rc0 1zc0 Oo0 1zc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0|12e4\",\"Atlantic/South_Georgia|GST|20|0||30\",\"Atlantic/Stanley|SMT FKT FKST FKT FKST|3P.o 40 30 30 20|0121212121212134343212121212121212121212121212121212121212121212121212|-2kJw8.A 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 U10 1qM0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2\",\"Australia/Sydney|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|40e5\",\"Australia/Adelaide|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|11e5\",\"Australia/Brisbane|AEST AEDT|-a0 -b0|01010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5\",\"Australia/Broken_Hill|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|18e3\",\"Australia/Currie|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|746\",\"Australia/Darwin|ACST ACDT|-9u -au|010101010|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0|12e4\",\"Australia/Eucla|ACWST ACWDT|-8J -9J|0101010101010101010|-293kI xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368\",\"Australia/Hobart|AEST AEDT|-a0 -b0|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 VfB0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|21e4\",\"Australia/Lord_Howe|AEST LHST LHDT LHDT|-a0 -au -bu -b0|0121212121313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313|raC0 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu|347\",\"Australia/Lindeman|AEST AEDT|-a0 -b0|010101010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10\",\"Australia/Melbourne|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|39e5\",\"Australia/Perth|AWST AWDT|-80 -90|0101010101010101010|-293jX xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5\",\"CET|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00\",\"CST6CDT|CST CDT CWT CPT|60 50 50 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0\",\"Pacific/Easter|EMT EAST EASST EAST EASST|7h.s 70 60 60 50|0121212121212121212121212121234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-1uSgG.w 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Dd0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1Nb0 Ap0|30e2\",\"EET|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00\",\"EST|EST|50|0|\",\"EST5EDT|EST EDT EWT EPT|50 40 40 40|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 SgN0 8x40 iv0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0\",\"Europe/Dublin|DMT IST GMT BST IST|p.l -y.D 0 -10 -10|01232323232324242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-2ax9y.D Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g5X0 14p0 1wn0 17d0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5\",\"Etc/GMT+0|GMT|0|0|\",\"Etc/GMT+1|-01|10|0|\",\"Etc/GMT+10|-10|a0|0|\",\"Etc/GMT+11|-11|b0|0|\",\"Etc/GMT+12|-12|c0|0|\",\"Etc/GMT+2|-02|20|0|\",\"Etc/GMT+3|-03|30|0|\",\"Etc/GMT+4|-04|40|0|\",\"Etc/GMT+5|-05|50|0|\",\"Etc/GMT+6|-06|60|0|\",\"Etc/GMT+7|-07|70|0|\",\"Etc/GMT+8|-08|80|0|\",\"Etc/GMT+9|-09|90|0|\",\"Etc/GMT-1|+01|-10|0|\",\"Etc/GMT-10|+10|-a0|0|\",\"Etc/GMT-11|+11|-b0|0|\",\"Etc/GMT-12|+12|-c0|0|\",\"Etc/GMT-13|+13|-d0|0|\",\"Etc/GMT-14|+14|-e0|0|\",\"Etc/GMT-2|+02|-20|0|\",\"Etc/GMT-3|+03|-30|0|\",\"Etc/GMT-4|+04|-40|0|\",\"Etc/GMT-5|+05|-50|0|\",\"Etc/GMT-6|+06|-60|0|\",\"Etc/GMT-7|+07|-70|0|\",\"Etc/GMT-8|+08|-80|0|\",\"Etc/GMT-9|+09|-90|0|\",\"Etc/UCT|UCT|0|0|\",\"Etc/UTC|UTC|0|0|\",\"Europe/Amsterdam|AMT NST NEST NET CEST CET|-j.w -1j.w -1k -k -20 -10|010101010101010101010101010101010101010101012323234545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2aFcj.w 11b0 1iP0 11A0 1io0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1co0 1io0 1yo0 Pc0 1a00 1fA0 1Bc0 Mo0 1tc0 Uo0 1tA0 U00 1uo0 W00 1s00 VA0 1so0 Vc0 1sM0 UM0 1wo0 Rc0 1u00 Wo0 1rA0 W00 1s00 VA0 1sM0 UM0 1w00 fV0 BCX.w 1tA0 U00 1u00 Wo0 1sm0 601k WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|16e5\",\"Europe/Andorra|WET CET CEST|0 -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-UBA0 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|79e3\",\"Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0\",\"Europe/Athens|AMT EET EEST CEST CET|-1y.Q -20 -30 -20 -10|012123434121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a61x.Q CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|35e5\",\"Europe/London|GMT BST BDST|0 -10 -20|0101010101010101010101010101010101010101010101010121212121210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|10e6\",\"Europe/Belgrade|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19RC0 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5\",\"Europe/Berlin|CET CEST CEMT|-10 -20 -30|01010101010101210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e5\",\"Europe/Prague|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 16M0 1lc0 1tA0 17A0 11c0 1io0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|13e5\",\"Europe/Brussels|WET CET CEST WEST|0 -10 -20 -10|0121212103030303030303030303030303030303030303030303212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ehc0 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|21e5\",\"Europe/Bucharest|BMT EET EEST|-1I.o -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1xApI.o 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|19e5\",\"Europe/Budapest|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1ip0 17b0 1op0 1tb0 Q2m0 3Ne0 WM0 1fA0 1cM0 1cM0 1oJ0 1dc0 1030 1fA0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1iM0 1fA0 8Ha0 Rb0 1wN0 Rb0 1BB0 Lz0 1C20 LB0 SNX0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5\",\"Europe/Zurich|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19Lc0 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e4\",\"Europe/Chisinau|CMT BMT EET EEST CEST CET MSK MSD|-1T -1I.o -20 -30 -20 -10 -30 -40|012323232323232323234545467676767676767676767323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-26jdT wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|67e4\",\"Europe/Copenhagen|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 Tz0 VuO0 60q0 WM0 1fA0 1cM0 1cM0 1cM0 S00 1HA0 Nc0 1C00 Dc0 1Nc0 Ao0 1h5A0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5\",\"Europe/Gibraltar|GMT BST BDST CET CEST|0 -10 -20 -10 -20|010101010101010101010101010101010101010101010101012121212121010121010101010101010101034343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|30e3\",\"Europe/Helsinki|HMT EET EEST|-1D.N -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1WuND.N OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5\",\"Europe/Kaliningrad|CET CEST CET CEST MSK MSD EEST EET +03|-10 -20 -20 -30 -30 -40 -30 -20 -30|0101010101010232454545454545454546767676767676767676767676767676767676767676787|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 Am0 Lb0 1en0 op0 1pNz0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4\",\"Europe/Kiev|KMT EET MSK CEST CET MSD EEST|-22.4 -20 -30 -20 -10 -40 -30|0123434252525252525252525256161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc22.4 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|34e5\",\"Europe/Kirov|LMT +03 +04 +05|-3i.M -30 -40 -50|01232323232323232321212121212121212121212121212121212121212121|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4\",\"Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|012121212121212121212121212121212121212121212321232123212321212121212121212121212121212121212121214121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ldXn.f aPWn.f Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 pvy0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e5\",\"Europe/Luxembourg|LMT CET CEST WET WEST WEST WET|-o.A -10 -20 0 -10 -20 -10|0121212134343434343434343434343434343434343434343434565651212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2DG0o.A t6mo.A TB0 1nX0 Up0 1o20 11A0 rW0 CM0 1qP0 R90 1EO0 UK0 1u20 10m0 1ip0 1in0 17e0 19W0 1fB0 1db0 1cp0 1in0 17d0 1fz0 1a10 1in0 1a10 1in0 17f0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 vA0 60L0 WM0 1fA0 1cM0 17c0 1io0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4\",\"Europe/Madrid|WET WEST WEMT CET CEST|0 -10 -20 -10 -20|01010101010101010101010121212121234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-28dd0 11A0 1go0 19A0 1co0 1dA0 b1A0 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 iyo0 Rc0 18o0 1hc0 1io0 1a00 14o0 5aL0 MM0 1vc0 17A0 1i00 1bc0 1eo0 17d0 1in0 17A0 6hA0 10N0 XIL0 1a10 1in0 17d0 19X0 1cN0 1fz0 1a10 1fX0 1cp0 1cO0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e5\",\"Europe/Malta|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4\",\"Europe/Minsk|MMT EET MSK CEST CET MSD EEST +03|-1O -20 -30 -20 -10 -40 -30 -30|01234343252525252525252525261616161616161616161616161616161616161617|-1Pc1O eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5\",\"Europe/Monaco|PMT WET WEST WEMT CET CEST|-9.l 0 -10 -20 -10 -20|01212121212121212121212121212121212121212121212121232323232345454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 2RV0 11z0 11B0 1ze0 WM0 1fA0 1cM0 1fa0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e3\",\"Europe/Moscow|MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|012132345464575454545454545454545458754545454545454545454545454545454545454595|-2ag2u.h 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6\",\"Europe/Paris|PMT WET WEST CEST CET WEMT|-9.l 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123434352543434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-2nco8.l cNb8.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e6\",\"Europe/Riga|RMT LST EET MSK CEST CET MSD EEST|-1A.y -2A.y -20 -30 -20 -10 -40 -30|010102345454536363636363636363727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-25TzA.y 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|64e4\",\"Europe/Rome|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|39e5\",\"Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5\",\"Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810\",\"Europe/Simferopol|SMT EET MSK CEST CET MSD EEST MSK|-2g -20 -30 -20 -10 -40 -30 -40|012343432525252525252525252161616525252616161616161616161616161616161616172|-1Pc2g eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eL0 1cL0 1cN0 1cL0 1cN0 dX0 WL0 1cN0 1cL0 1fB0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4\",\"Europe/Sofia|EET CET CEST EEST|-20 -10 -20 -30|01212103030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030|-168L0 WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5\",\"Europe/Stockholm|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 TB0 2yDe0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|15e5\",\"Europe/Tallinn|TMT CET CEST EET MSK MSD EEST|-1D -10 -20 -20 -30 -40 -30|012103421212454545454545454546363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-26oND teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e4\",\"Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4\",\"Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0\",\"Europe/Uzhgorod|CET CEST MSK MSD EET EEST|-10 -20 -30 -40 -20 -30|010101023232323232323232320454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-1cqL0 6i00 WM0 1fA0 1cM0 1ml0 1Cp0 1r3W0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 1Nf0 2pw0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e4\",\"Europe/Vienna|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1a00 1cM0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|18e5\",\"Europe/Vilnius|WMT KMT CET EET MSK CEST MSD EEST|-1o -1z.A -10 -20 -30 -20 -40 -30|012324525254646464646464646473737373737373737352537373737373737373737373737373737373737373737373737373737373737373737373|-293do 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4\",\"Europe/Volgograd|LMT +03 +04 +05|-2V.E -30 -40 -50|01232323232323232121212121212121212121212121212121212121212121|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5\",\"Europe/Warsaw|WMT CET CEST EET EEST|-1o -10 -20 -20 -30|012121234312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ctdo 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5\",\"Europe/Zaporozhye|CUT EET MSK CEST CET MSD EEST|-2k -20 -30 -20 -10 -40 -30|01234342525252525252525252526161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc2k eUok rdb0 2RE0 WM0 1fA0 8m0 1v9a0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|77e4\",\"HST|HST|a0|0|\",\"Indian/Chagos|LMT IOT IOT|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2\",\"Indian/Christmas|CXT|-70|0||21e2\",\"Indian/Cocos|CCT|-6u|0||596\",\"Indian/Kerguelen|-00 +05|0 -50|01|-MG00|130\",\"Indian/Mahe|LMT SCT|-3F.M -40|01|-2yO3F.M|79e3\",\"Indian/Maldives|MMT MVT|-4S -50|01|-olgS|35e4\",\"Indian/Mauritius|LMT MUT MUST|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4\",\"Indian/Reunion|LMT RET|-3F.Q -40|01|-2mDDF.Q|84e4\",\"Pacific/Kwajalein|MHT KWAT MHT|-b0 c0 -c0|012|-AX0 W9X0|14e3\",\"MET|MET MEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00\",\"MST|MST|70|0|\",\"MST7MDT|MST MDT MWT MPT|70 60 60 60|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0\",\"Pacific/Chatham|CHAST CHAST CHADT|-cf -cJ -dJ|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-WqAf 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|600\",\"PST8PDT|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0\",\"Pacific/Apia|LMT WSST SST SDT WSDT WSST|bq.U bu b0 a0 -e0 -d0|01232345454545454545454545454545454545454545454545454545454|-2nDMx.4 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|37e3\",\"Pacific/Bougainville|PGT JST BST|-a0 -90 -b0|0102|-16Wy0 7CN0 2MQp0|18e4\",\"Pacific/Chuuk|CHUT|-a0|0||49e3\",\"Pacific/Efate|LMT VUT VUST|-bd.g -b0 -c0|0121212121212121212121|-2l9nd.g 2Szcd.g 1cL0 1oN0 10L0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3\",\"Pacific/Enderbury|PHOT PHOT PHOT|c0 b0 -d0|012|nIc0 B8n0|1\",\"Pacific/Fakaofo|TKT TKT|b0 -d0|01|1Gfn0|483\",\"Pacific/Fiji|LMT FJT FJST|-bT.I -c0 -d0|0121212121212121212121212121212121212121212121212121212121212121|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0|88e4\",\"Pacific/Funafuti|TVT|-c0|0||45e2\",\"Pacific/Galapagos|LMT ECT GALT|5W.o 50 60|012|-1yVS1.A 2dTz1.A|25e3\",\"Pacific/Gambier|LMT GAMT|8X.M 90|01|-2jof0.c|125\",\"Pacific/Guadalcanal|LMT SBT|-aD.M -b0|01|-2joyD.M|11e4\",\"Pacific/Guam|GST ChST|-a0 -a0|01|1fpq0|17e4\",\"Pacific/Honolulu|HST HDT HST|au 9u a0|010102|-1thLu 8x0 lef0 8Pz0 46p0|37e4\",\"Pacific/Kiritimati|LINT LINT LINT|aE a0 -e0|012|nIaE B8nk|51e2\",\"Pacific/Kosrae|KOST KOST|-b0 -c0|010|-AX0 1bdz0|66e2\",\"Pacific/Majuro|MHT MHT|-b0 -c0|01|-AX0|28e3\",\"Pacific/Marquesas|LMT MART|9i 9u|01|-2joeG|86e2\",\"Pacific/Pago_Pago|LMT NST BST SST|bm.M b0 b0 b0|0123|-2nDMB.c 2gVzB.c EyM0|37e2\",\"Pacific/Nauru|LMT NRT JST NRT|-b7.E -bu -90 -c0|01213|-1Xdn7.E PvzB.E 5RCu 1ouJu|10e3\",\"Pacific/Niue|NUT NUT NUT|bk bu b0|012|-KfME 17y0a|12e2\",\"Pacific/Norfolk|NMT NFT NFST NFT|-bc -bu -cu -b0|01213|-Kgbc W01G On0 1COp0|25e4\",\"Pacific/Noumea|LMT NCT NCST|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3\",\"Pacific/Palau|PWT|-90|0||21e3\",\"Pacific/Pitcairn|PNT PST|8u 80|01|18Vku|56\",\"Pacific/Pohnpei|PONT|-b0|0||34e3\",\"Pacific/Port_Moresby|PGT|-a0|0||25e4\",\"Pacific/Rarotonga|CKT CKHST CKT|au 9u a0|012121212121212121212121212|lyWu IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3\",\"Pacific/Tahiti|LMT TAHT|9W.g a0|01|-2joe1.I|18e4\",\"Pacific/Tarawa|GILT|-c0|0||29e3\",\"Pacific/Tongatapu|+1220 +13 +14|-ck -d0 -e0|0121212121212121212121212121212121212121212121212121|-1aB0k 2n5dk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0|75e3\",\"Pacific/Wake|WAKT|-c0|0||16e3\",\"Pacific/Wallis|WFT|-c0|0||94\",\"WET|WET WEST|0 -10|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00\"],\n    links:[\"Africa/Abidjan|Africa/Bamako\",\"Africa/Abidjan|Africa/Banjul\",\"Africa/Abidjan|Africa/Conakry\",\"Africa/Abidjan|Africa/Dakar\",\"Africa/Abidjan|Africa/Freetown\",\"Africa/Abidjan|Africa/Lome\",\"Africa/Abidjan|Africa/Nouakchott\",\"Africa/Abidjan|Africa/Ouagadougou\",\"Africa/Abidjan|Africa/Sao_Tome\",\"Africa/Abidjan|Africa/Timbuktu\",\"Africa/Abidjan|Atlantic/St_Helena\",\"Africa/Cairo|Egypt\",\"Africa/Johannesburg|Africa/Maseru\",\"Africa/Johannesburg|Africa/Mbabane\",\"Africa/Khartoum|Africa/Juba\",\"Africa/Lagos|Africa/Bangui\",\"Africa/Lagos|Africa/Brazzaville\",\"Africa/Lagos|Africa/Douala\",\"Africa/Lagos|Africa/Kinshasa\",\"Africa/Lagos|Africa/Libreville\",\"Africa/Lagos|Africa/Luanda\",\"Africa/Lagos|Africa/Malabo\",\"Africa/Lagos|Africa/Niamey\",\"Africa/Lagos|Africa/Porto-Novo\",\"Africa/Maputo|Africa/Blantyre\",\"Africa/Maputo|Africa/Bujumbura\",\"Africa/Maputo|Africa/Gaborone\",\"Africa/Maputo|Africa/Harare\",\"Africa/Maputo|Africa/Kigali\",\"Africa/Maputo|Africa/Lubumbashi\",\"Africa/Maputo|Africa/Lusaka\",\"Africa/Nairobi|Africa/Addis_Ababa\",\"Africa/Nairobi|Africa/Asmara\",\"Africa/Nairobi|Africa/Asmera\",\"Africa/Nairobi|Africa/Dar_es_Salaam\",\"Africa/Nairobi|Africa/Djibouti\",\"Africa/Nairobi|Africa/Kampala\",\"Africa/Nairobi|Africa/Mogadishu\",\"Africa/Nairobi|Indian/Antananarivo\",\"Africa/Nairobi|Indian/Comoro\",\"Africa/Nairobi|Indian/Mayotte\",\"Africa/Tripoli|Libya\",\"America/Adak|America/Atka\",\"America/Adak|US/Aleutian\",\"America/Anchorage|US/Alaska\",\"America/Argentina/Buenos_Aires|America/Buenos_Aires\",\"America/Argentina/Catamarca|America/Argentina/ComodRivadavia\",\"America/Argentina/Catamarca|America/Catamarca\",\"America/Argentina/Cordoba|America/Cordoba\",\"America/Argentina/Cordoba|America/Rosario\",\"America/Argentina/Jujuy|America/Jujuy\",\"America/Argentina/Mendoza|America/Mendoza\",\"America/Atikokan|America/Coral_Harbour\",\"America/Chicago|US/Central\",\"America/Curacao|America/Aruba\",\"America/Curacao|America/Kralendijk\",\"America/Curacao|America/Lower_Princes\",\"America/Denver|America/Shiprock\",\"America/Denver|Navajo\",\"America/Denver|US/Mountain\",\"America/Detroit|US/Michigan\",\"America/Edmonton|Canada/Mountain\",\"America/Fort_Wayne|America/Indiana/Indianapolis\",\"America/Fort_Wayne|America/Indianapolis\",\"America/Fort_Wayne|US/East-Indiana\",\"America/Halifax|Canada/Atlantic\",\"America/Havana|Cuba\",\"America/Indiana/Knox|America/Knox_IN\",\"America/Indiana/Knox|US/Indiana-Starke\",\"America/Jamaica|Jamaica\",\"America/Kentucky/Louisville|America/Louisville\",\"America/Los_Angeles|US/Pacific\",\"America/Los_Angeles|US/Pacific-New\",\"America/Manaus|Brazil/West\",\"America/Mazatlan|Mexico/BajaSur\",\"America/Mexico_City|Mexico/General\",\"America/New_York|US/Eastern\",\"America/Noronha|Brazil/DeNoronha\",\"America/Panama|America/Cayman\",\"America/Phoenix|US/Arizona\",\"America/Port_of_Spain|America/Anguilla\",\"America/Port_of_Spain|America/Antigua\",\"America/Port_of_Spain|America/Dominica\",\"America/Port_of_Spain|America/Grenada\",\"America/Port_of_Spain|America/Guadeloupe\",\"America/Port_of_Spain|America/Marigot\",\"America/Port_of_Spain|America/Montserrat\",\"America/Port_of_Spain|America/St_Barthelemy\",\"America/Port_of_Spain|America/St_Kitts\",\"America/Port_of_Spain|America/St_Lucia\",\"America/Port_of_Spain|America/St_Thomas\",\"America/Port_of_Spain|America/St_Vincent\",\"America/Port_of_Spain|America/Tortola\",\"America/Port_of_Spain|America/Virgin\",\"America/Regina|Canada/East-Saskatchewan\",\"America/Regina|Canada/Saskatchewan\",\"America/Rio_Branco|America/Porto_Acre\",\"America/Rio_Branco|Brazil/Acre\",\"America/Santiago|Chile/Continental\",\"America/Sao_Paulo|Brazil/East\",\"America/St_Johns|Canada/Newfoundland\",\"America/Tijuana|America/Ensenada\",\"America/Tijuana|America/Santa_Isabel\",\"America/Tijuana|Mexico/BajaNorte\",\"America/Toronto|America/Montreal\",\"America/Toronto|Canada/Eastern\",\"America/Vancouver|Canada/Pacific\",\"America/Whitehorse|Canada/Yukon\",\"America/Winnipeg|Canada/Central\",\"Asia/Ashgabat|Asia/Ashkhabad\",\"Asia/Bangkok|Asia/Phnom_Penh\",\"Asia/Bangkok|Asia/Vientiane\",\"Asia/Dhaka|Asia/Dacca\",\"Asia/Dubai|Asia/Muscat\",\"Asia/Ho_Chi_Minh|Asia/Saigon\",\"Asia/Hong_Kong|Hongkong\",\"Asia/Jerusalem|Asia/Tel_Aviv\",\"Asia/Jerusalem|Israel\",\"Asia/Kathmandu|Asia/Katmandu\",\"Asia/Kolkata|Asia/Calcutta\",\"Asia/Macau|Asia/Macao\",\"Asia/Makassar|Asia/Ujung_Pandang\",\"Asia/Nicosia|Europe/Nicosia\",\"Asia/Qatar|Asia/Bahrain\",\"Asia/Rangoon|Asia/Yangon\",\"Asia/Riyadh|Asia/Aden\",\"Asia/Riyadh|Asia/Kuwait\",\"Asia/Seoul|ROK\",\"Asia/Shanghai|Asia/Chongqing\",\"Asia/Shanghai|Asia/Chungking\",\"Asia/Shanghai|Asia/Harbin\",\"Asia/Shanghai|PRC\",\"Asia/Singapore|Singapore\",\"Asia/Taipei|ROC\",\"Asia/Tehran|Iran\",\"Asia/Thimphu|Asia/Thimbu\",\"Asia/Tokyo|Japan\",\"Asia/Ulaanbaatar|Asia/Ulan_Bator\",\"Asia/Urumqi|Asia/Kashgar\",\"Atlantic/Faroe|Atlantic/Faeroe\",\"Atlantic/Reykjavik|Iceland\",\"Australia/Adelaide|Australia/South\",\"Australia/Brisbane|Australia/Queensland\",\"Australia/Broken_Hill|Australia/Yancowinna\",\"Australia/Darwin|Australia/North\",\"Australia/Hobart|Australia/Tasmania\",\"Australia/Lord_Howe|Australia/LHI\",\"Australia/Melbourne|Australia/Victoria\",\"Australia/Perth|Australia/West\",\"Australia/Sydney|Australia/ACT\",\"Australia/Sydney|Australia/Canberra\",\"Australia/Sydney|Australia/NSW\",\"Etc/GMT+0|Etc/GMT\",\"Etc/GMT+0|Etc/GMT-0\",\"Etc/GMT+0|Etc/GMT0\",\"Etc/GMT+0|Etc/Greenwich\",\"Etc/GMT+0|GMT\",\"Etc/GMT+0|GMT+0\",\"Etc/GMT+0|GMT-0\",\"Etc/GMT+0|GMT0\",\"Etc/GMT+0|Greenwich\",\"Etc/UCT|UCT\",\"Etc/UTC|Etc/Universal\",\"Etc/UTC|Etc/Zulu\",\"Etc/UTC|UTC\",\"Etc/UTC|Universal\",\"Etc/UTC|Zulu\",\"Europe/Belgrade|Europe/Ljubljana\",\"Europe/Belgrade|Europe/Podgorica\",\"Europe/Belgrade|Europe/Sarajevo\",\"Europe/Belgrade|Europe/Skopje\",\"Europe/Belgrade|Europe/Zagreb\",\"Europe/Chisinau|Europe/Tiraspol\",\"Europe/Dublin|Eire\",\"Europe/Helsinki|Europe/Mariehamn\",\"Europe/Istanbul|Asia/Istanbul\",\"Europe/Istanbul|Turkey\",\"Europe/Lisbon|Portugal\",\"Europe/London|Europe/Belfast\",\"Europe/London|Europe/Guernsey\",\"Europe/London|Europe/Isle_of_Man\",\"Europe/London|Europe/Jersey\",\"Europe/London|GB\",\"Europe/London|GB-Eire\",\"Europe/Moscow|W-SU\",\"Europe/Oslo|Arctic/Longyearbyen\",\"Europe/Oslo|Atlantic/Jan_Mayen\",\"Europe/Prague|Europe/Bratislava\",\"Europe/Rome|Europe/San_Marino\",\"Europe/Rome|Europe/Vatican\",\"Europe/Warsaw|Poland\",\"Europe/Zurich|Europe/Busingen\",\"Europe/Zurich|Europe/Vaduz\",\"Pacific/Auckland|Antarctica/McMurdo\",\"Pacific/Auckland|Antarctica/South_Pole\",\"Pacific/Auckland|NZ\",\"Pacific/Chatham|NZ-CHAT\",\"Pacific/Chuuk|Pacific/Truk\",\"Pacific/Chuuk|Pacific/Yap\",\"Pacific/Easter|Chile/EasterIsland\",\"Pacific/Guam|Pacific/Saipan\",\"Pacific/Honolulu|Pacific/Johnston\",\"Pacific/Honolulu|US/Hawaii\",\"Pacific/Kwajalein|Kwajalein\",\"Pacific/Pago_Pago|Pacific/Midway\",\"Pacific/Pago_Pago|Pacific/Samoa\",\"Pacific/Pago_Pago|US/Samoa\",\"Pacific/Pohnpei|Pacific/Ponape\"]}),a});\n","//! moment-timezone-utils.js\n//! version : 0.5.11\n//! Copyright (c) JS Foundation and other contributors\n//! license : MIT\n//! github.com/moment/moment-timezone\n!function(a,b){\"use strict\";\"function\"==typeof define&&define.amd?define([\"moment\"],b):\"object\"==typeof module&&module.exports?module.exports=b(require(\"./\")):b(a.moment)}(this,function(a){\"use strict\";function d(a,d){for(var g,e=\".\",f=\"\";d>0;)d-=1,a*=60,g=Math.floor(a+c),e+=b[g],a-=g,g&&(f+=e,e=\"\");return f}function e(a,c){for(var e=\"\",f=Math.abs(a),g=Math.floor(f),h=d(f-g,Math.min(~~c,10));g>0;)e=b[g%60]+e,g=Math.floor(g/60);return a<0&&(e=\"-\"+e),e&&h?e+h:h||\"-\"!==e?e||h||\"0\":\"0\"}function f(a){var d,b=[],c=0;for(d=0;d<a.length-1;d++)b[d]=e(Math.round((a[d]-c)/1e3)/60,1),c=a[d];return b.join(\" \")}function g(a){var h,i,b=0,c=[],d=[],f=[],g={};for(h=0;h<a.abbrs.length;h++)i=a.abbrs[h]+\"|\"+a.offsets[h],void 0===g[i]&&(g[i]=b,c[b]=a.abbrs[h],d[b]=e(Math.round(60*a.offsets[h])/60,1),b++),f[h]=e(g[i],0);return c.join(\" \")+\"|\"+d.join(\" \")+\"|\"+f.join(\"\")}function h(a){if(!a)return\"\";if(a<1e3)return\"|\"+a;var b=String(0|a).length-2,c=Math.round(a/Math.pow(10,b));return\"|\"+c+\"e\"+b}function i(a){if(!a.name)throw new Error(\"Missing name\");if(!a.abbrs)throw new Error(\"Missing abbrs\");if(!a.untils)throw new Error(\"Missing untils\");if(!a.offsets)throw new Error(\"Missing offsets\");if(a.offsets.length!==a.untils.length||a.offsets.length!==a.abbrs.length)throw new Error(\"Mismatched array lengths\")}function j(a){return i(a),[a.name,g(a),f(a.untils)+h(a.population)].join(\"|\")}function k(a,b){var c;if(a.length!==b.length)return!1;for(c=0;c<a.length;c++)if(a[c]!==b[c])return!1;return!0}function l(a,b){return k(a.offsets,b.offsets)&&k(a.abbrs,b.abbrs)&&k(a.untils,b.untils)}function m(a,b,c){var d,e,f,g,h,i,j=[];for(d=0;d<a.length;d++){for(i=!1,f=a[d],e=0;e<j.length;e++)h=j[e],g=h[0],l(f,g)&&(f.population>g.population?h.unshift(f):h.push(f),i=!0);i||j.push([f])}for(d=0;d<j.length;d++)for(h=j[d],b.push(h[0]),e=1;e<h.length;e++)c.push(h[0].name+\"|\"+h[e].name)}function n(a){var b=[],c=[];return a.links&&(c=a.links.slice()),m(a.zones,b,c),{version:a.version,zones:b,links:c.sort()}}function o(a,b,c){var f,g,d=0,e=a.length+1;for(c||(c=b),b>c&&(g=b,b=c,c=g),g=0;g<a.length;g++)null!=a[g]&&(f=new Date(a[g]).getUTCFullYear(),f<b&&(d=g+1),f>c&&(e=Math.min(e,g+1)));return[d,e]}function p(a,b,c){var d=Array.prototype.slice,e=o(a.untils,b,c),f=d.apply(a.untils,e);return f[f.length-1]=null,{name:a.name,abbrs:d.apply(a.abbrs,e),untils:f,offsets:d.apply(a.offsets,e),population:a.population}}function q(a,b,c){var d,g,e=a.zones,f=[];for(d=0;d<e.length;d++)f[d]=p(e[d],b,c);for(g=n({zones:f,links:a.links.slice(),version:a.version}),d=0;d<g.zones.length;d++)g.zones[d]=j(g.zones[d]);return g}if(!a.tz)throw new Error(\"moment-timezone-utils.js must be loaded after moment-timezone.js\");var b=\"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX\",c=1e-6;return a.tz.pack=j,a.tz.packBase60=e,a.tz.createLinks=n,a.tz.filterYears=p,a.tz.filterLinkPack=q,a});\n","// 4.6.4 (2017-06-13)\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};g(\"3\",[],function(){\"use strict\";function a(a,b,c){var d,e,g,h,i,k;return d=b.x,e=b.y,g=a.w,h=a.h,i=b.w,k=b.h,c=(c||\"\").split(\"\"),\"b\"===c[0]&&(e+=k),\"r\"===c[1]&&(d+=i),\"c\"===c[0]&&(e+=j(k/2)),\"c\"===c[1]&&(d+=j(i/2)),\"b\"===c[3]&&(e-=h),\"r\"===c[4]&&(d-=g),\"c\"===c[3]&&(e-=j(h/2)),\"c\"===c[4]&&(d-=j(g/2)),f(d,e,g,h)}function b(b,c,d,e){var f,g;for(g=0;g<e.length;g++)if(f=a(b,c,e[g]),f.x>=d.x&&f.x+f.w<=d.w+d.x&&f.y>=d.y&&f.y+f.h<=d.h+d.y)return e[g];return null}function c(a,b,c){return f(a.x-b,a.y-c,a.w+2*b,a.h+2*c)}function d(a,b){var c,d,e,g;return c=i(a.x,b.x),d=i(a.y,b.y),e=h(a.x+a.w,b.x+b.w),g=h(a.y+a.h,b.y+b.h),e-c<0||g-d<0?null:f(c,d,e-c,g-d)}function e(a,b,c){var d,e,g,h,j,k,l,m,n,o;return j=a.x,k=a.y,l=a.x+a.w,m=a.y+a.h,n=b.x+b.w,o=b.y+b.h,d=i(0,b.x-j),e=i(0,b.y-k),g=i(0,l-n),h=i(0,m-o),j+=d,k+=e,c&&(l+=d,m+=e,j-=g,k-=h),l-=g,m-=h,f(j,k,l-j,m-k)}function f(a,b,c,d){return{x:a,y:b,w:c,h:d}}function g(a){return f(a.left,a.top,a.width,a.height)}var h=Math.min,i=Math.max,j=Math.round;return{inflate:c,relativePosition:a,findBestRelativePosition:b,intersect:d,clamp:e,create:f,fromClientRect:g}}),g(\"4\",[],function(){function a(a,b){return function(){a.apply(b,arguments)}}function b(b){if(\"object\"!=typeof this)throw new TypeError(\"Promises must be constructed via new\");if(\"function\"!=typeof b)throw new TypeError(\"not a function\");this._state=null,this._value=null,this._deferreds=[],h(b,a(d,this),a(e,this))}function c(a){var b=this;return null===this._state?void this._deferreds.push(a):void i(function(){var c=b._state?a.onFulfilled:a.onRejected;if(null===c)return void(b._state?a.resolve:a.reject)(b._value);var d;try{d=c(b._value)}catch(b){return void a.reject(b)}a.resolve(d)})}function d(b){try{if(b===this)throw new TypeError(\"A promise cannot be resolved with itself.\");if(b&&(\"object\"==typeof b||\"function\"==typeof b)){var c=b.then;if(\"function\"==typeof c)return void h(a(c,b),a(d,this),a(e,this))}this._state=!0,this._value=b,f.call(this)}catch(a){e.call(this,a)}}function e(a){this._state=!1,this._value=a,f.call(this)}function f(){for(var a=0,b=this._deferreds.length;a<b;a++)c.call(this,this._deferreds[a]);this._deferreds=null}function g(a,b,c,d){this.onFulfilled=\"function\"==typeof a?a:null,this.onRejected=\"function\"==typeof b?b:null,this.resolve=c,this.reject=d}function h(a,b,c){var d=!1;try{a(function(a){d||(d=!0,b(a))},function(a){d||(d=!0,c(a))})}catch(a){if(d)return;d=!0,c(a)}}if(window.Promise)return window.Promise;var i=b.immediateFn||\"function\"==typeof setImmediate&&setImmediate||function(a){setTimeout(a,1)},j=Array.isArray||function(a){return\"[object Array]\"===Object.prototype.toString.call(a)};return b.prototype[\"catch\"]=function(a){return this.then(null,a)},b.prototype.then=function(a,d){var e=this;return new b(function(b,f){c.call(e,new g(a,d,b,f))})},b.all=function(){var a=Array.prototype.slice.call(1===arguments.length&&j(arguments[0])?arguments[0]:arguments);return new b(function(b,c){function d(f,g){try{if(g&&(\"object\"==typeof g||\"function\"==typeof g)){var h=g.then;if(\"function\"==typeof h)return void h.call(g,function(a){d(f,a)},c)}a[f]=g,0===--e&&b(a)}catch(a){c(a)}}if(0===a.length)return b([]);for(var e=a.length,f=0;f<a.length;f++)d(f,a[f])})},b.resolve=function(a){return a&&\"object\"==typeof a&&a.constructor===b?a:new b(function(b){b(a)})},b.reject=function(a){return new b(function(b,c){c(a)})},b.race=function(a){return new b(function(b,c){for(var d=0,e=a.length;d<e;d++)a[d].then(b,c)})},b}),g(\"5\",[\"4\"],function(a){function b(a,b){function c(a){window.setTimeout(a,0)}var d,e=window.requestAnimationFrame,f=[\"ms\",\"moz\",\"webkit\"];for(d=0;d<f.length&&!e;d++)e=window[f[d]+\"RequestAnimationFrame\"];e||(e=c),e(a,b)}function c(a,b){return\"number\"!=typeof b&&(b=0),setTimeout(a,b)}function d(a,b){return\"number\"!=typeof b&&(b=1),setInterval(a,b)}function e(a){return clearTimeout(a)}function f(a){return clearInterval(a)}function g(a,b){var d,e;return e=function(){var e=arguments;clearTimeout(d),d=c(function(){a.apply(this,e)},b)},e.stop=function(){clearTimeout(d)},e}var h;return{requestAnimationFrame:function(c,d){return h?void h.then(c):void(h=new a(function(a){d||(d=document.body),b(a,d)}).then(c))},setTimeout:c,setInterval:d,setEditorTimeout:function(a,b,d){return c(function(){a.removed||b()},d)},setEditorInterval:function(a,b,c){var e;return e=d(function(){a.removed?clearInterval(e):b()},c)},debounce:g,throttle:g,clearInterval:f,clearTimeout:e}}),g(\"6\",[],function(){function a(a){return\"matchMedia\"in window&&matchMedia(a).matches}var b,c,d,e,f,g,h,i,j,k,l,m,n,o=navigator,p=o.userAgent;b=window.opera&&window.opera.buildNumber,j=/Android/.test(p),c=/WebKit/.test(p),d=!c&&!b&&/MSIE/gi.test(p)&&/Explorer/gi.test(o.appName),d=d&&/MSIE (\\w+)\\./.exec(p)[1],e=p.indexOf(\"Trident/\")!=-1&&(p.indexOf(\"rv:\")!=-1||o.appName.indexOf(\"Netscape\")!=-1)&&11,f=p.indexOf(\"Edge/\")!=-1&&!d&&!e&&12,d=d||e||f,g=!c&&!e&&/Gecko/.test(p),h=p.indexOf(\"Mac\")!=-1,i=/(iPad|iPhone)/.test(p),k=\"FormData\"in window&&\"FileReader\"in window&&\"URL\"in window&&!!URL.createObjectURL,l=a(\"only screen and (max-device-width: 480px)\")&&(j||i),m=a(\"only screen and (min-width: 800px)\")&&(j||i),n=p.indexOf(\"Windows Phone\")!=-1,f&&(c=!1);var q=!i||k||p.match(/AppleWebKit\\/(\\d*)/)[1]>=534;return{opera:b,webkit:c,ie:d,gecko:g,mac:h,iOS:i,android:j,contentEditable:q,transparentSrc:\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\",caretAfter:8!=d,range:window.getSelection&&\"Range\"in window,documentMode:d&&!f?document.documentMode||7:10,fileApi:k,ceFalse:d===!1||d>8,canHaveCSP:d===!1||d>11,desktop:!l&&!m,windowsPhone:n}}),g(\"7\",[\"5\",\"6\"],function(a,b){\"use strict\";function c(a,b,c,d){a.addEventListener?a.addEventListener(b,c,d||!1):a.attachEvent&&a.attachEvent(\"on\"+b,c)}function d(a,b,c,d){a.removeEventListener?a.removeEventListener(b,c,d||!1):a.detachEvent&&a.detachEvent(\"on\"+b,c)}function e(a,b){var c,d=b;return c=a.path,c&&c.length>0&&(d=c[0]),a.deepPath&&(c=a.deepPath(),c&&c.length>0&&(d=c[0])),d}function f(a,c){var d,f,g=c||{};for(d in a)k[d]||(g[d]=a[d]);if(g.target||(g.target=g.srcElement||document),b.experimentalShadowDom&&(g.target=e(a,g.target)),a&&j.test(a.type)&&a.pageX===f&&a.clientX!==f){var h=g.target.ownerDocument||document,i=h.documentElement,o=h.body;g.pageX=a.clientX+(i&&i.scrollLeft||o&&o.scrollLeft||0)-(i&&i.clientLeft||o&&o.clientLeft||0),g.pageY=a.clientY+(i&&i.scrollTop||o&&o.scrollTop||0)-(i&&i.clientTop||o&&o.clientTop||0)}return g.preventDefault=function(){g.isDefaultPrevented=n,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},g.stopPropagation=function(){g.isPropagationStopped=n,a&&(a.stopPropagation?a.stopPropagation():a.cancelBubble=!0)},g.stopImmediatePropagation=function(){g.isImmediatePropagationStopped=n,g.stopPropagation()},l(g)===!1&&(g.isDefaultPrevented=m,g.isPropagationStopped=m,g.isImmediatePropagationStopped=m),\"undefined\"==typeof g.metaKey&&(g.metaKey=!1),g}function g(e,f,g){function h(){return\"complete\"===l.readyState||\"interactive\"===l.readyState&&l.body}function i(){g.domLoaded||(g.domLoaded=!0,f(m))}function j(){h()&&(d(l,\"readystatechange\",j),i())}function k(){try{l.documentElement.doScroll(\"left\")}catch(b){return void a.setTimeout(k)}i()}var l=e.document,m={type:\"ready\"};return g.domLoaded?void f(m):(!l.addEventListener||b.ie&&b.ie<11?(c(l,\"readystatechange\",j),l.documentElement.doScroll&&e.self===e.top&&k()):h()?i():c(e,\"DOMContentLoaded\",i),void c(e,\"load\",i))}function h(){function a(a,b){var c,d,e,f,g=m[b];if(c=g&&g[a.type])for(d=0,e=c.length;d<e;d++)if(f=c[d],f&&f.func.call(f.scope,a)===!1&&a.preventDefault(),a.isImmediatePropagationStopped())return}var b,e,h,j,k,l=this,m={};e=i+(+new Date).toString(32),j=\"onmouseenter\"in document.documentElement,h=\"onfocusin\"in document.documentElement,k={mouseenter:\"mouseover\",mouseleave:\"mouseout\"},b=1,l.domLoaded=!1,l.events=m,l.bind=function(d,i,n,o){function p(b){a(f(b||x.event),q)}var q,r,s,t,u,v,w,x=window;if(d&&3!==d.nodeType&&8!==d.nodeType){for(d[e]?q=d[e]:(q=b++,d[e]=q,m[q]={}),o=o||d,i=i.split(\" \"),s=i.length;s--;)t=i[s],v=p,u=w=!1,\"DOMContentLoaded\"===t&&(t=\"ready\"),l.domLoaded&&\"ready\"===t&&\"complete\"==d.readyState?n.call(o,f({type:t})):(j||(u=k[t],u&&(v=function(b){var c,d;if(c=b.currentTarget,d=b.relatedTarget,d&&c.contains)d=c.contains(d);else for(;d&&d!==c;)d=d.parentNode;d||(b=f(b||x.event),b.type=\"mouseout\"===b.type?\"mouseleave\":\"mouseenter\",b.target=c,a(b,q))})),h||\"focusin\"!==t&&\"focusout\"!==t||(w=!0,u=\"focusin\"===t?\"focus\":\"blur\",v=function(b){b=f(b||x.event),b.type=\"focus\"===b.type?\"focusin\":\"focusout\",a(b,q)}),r=m[q][t],r?\"ready\"===t&&l.domLoaded?n({type:t}):r.push({func:n,scope:o}):(m[q][t]=r=[{func:n,scope:o}],r.fakeName=u,r.capture=w,r.nativeHandler=v,\"ready\"===t?g(d,v,l):c(d,u||t,v,w)));return d=r=0,n}},l.unbind=function(a,b,c){var f,g,h,i,j,k;if(!a||3===a.nodeType||8===a.nodeType)return l;if(f=a[e]){if(k=m[f],b){for(b=b.split(\" \"),h=b.length;h--;)if(j=b[h],g=k[j]){if(c)for(i=g.length;i--;)if(g[i].func===c){var n=g.nativeHandler,o=g.fakeName,p=g.capture;g=g.slice(0,i).concat(g.slice(i+1)),g.nativeHandler=n,g.fakeName=o,g.capture=p,k[j]=g}c&&0!==g.length||(delete k[j],d(a,g.fakeName||j,g.nativeHandler,g.capture))}}else{for(j in k)g=k[j],d(a,g.fakeName||j,g.nativeHandler,g.capture);k={}}for(j in k)return l;delete m[f];try{delete a[e]}catch(b){a[e]=null}}return l},l.fire=function(b,c,d){var g;if(!b||3===b.nodeType||8===b.nodeType)return l;d=f(null,d),d.type=c,d.target=b;do g=b[e],g&&a(d,g),b=b.parentNode||b.ownerDocument||b.defaultView||b.parentWindow;while(b&&!d.isPropagationStopped());return l},l.clean=function(a){var b,c,d=l.unbind;if(!a||3===a.nodeType||8===a.nodeType)return l;if(a[e]&&d(a),a.getElementsByTagName||(a=a.document),a&&a.getElementsByTagName)for(d(a),c=a.getElementsByTagName(\"*\"),b=c.length;b--;)a=c[b],a[e]&&d(a);return l},l.destroy=function(){m={}},l.cancel=function(a){return a&&(a.preventDefault(),a.stopImmediatePropagation()),!1}}var i=\"mce-data-\",j=/^(?:mouse|contextmenu)|click/,k={keyLocation:1,layerX:1,layerY:1,returnValue:1,webkitMovementX:1,webkitMovementY:1,keyIdentifier:1},l=function(a){return a.isDefaultPrevented===n||a.isDefaultPrevented===m},m=function(){return!1},n=function(){return!0};return h.Event=new h,h.Event.bind(window,\"ready\",function(){}),h}),g(\"8\",[],function(){function a(a,b,c,d){var e,f,g,h,i,k,m,n,o,p;if((b?b.ownerDocument||b:N)!==F&&E(b),b=b||F,c=c||[],!a||\"string\"!=typeof a)return c;if(1!==(h=b.nodeType)&&9!==h)return[];if(H&&!d){if(e=qa.exec(a))if(g=e[1]){if(9===h){if(f=b.getElementById(g),!f||!f.parentNode)return c;if(f.id===g)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(g))&&L(b,f)&&f.id===g)return c.push(f),c}else{if(e[2])return $.apply(c,b.getElementsByTagName(a)),c;if((g=e[3])&&u.getElementsByClassName)return $.apply(c,b.getElementsByClassName(g)),c}if(u.qsa&&(!I||!I.test(a))){if(n=m=M,o=b,p=9===h&&a,1===h&&\"object\"!==b.nodeName.toLowerCase()){for(k=y(a),(m=b.getAttribute(\"id\"))?n=m.replace(sa,\"\\\\$&\"):b.setAttribute(\"id\",n),n=\"[id='\"+n+\"'] \",i=k.length;i--;)k[i]=n+l(k[i]);o=ra.test(a)&&j(b.parentNode)||b,p=k.join(\",\")}if(p)try{return $.apply(c,o.querySelectorAll(p)),c}catch(a){}finally{m||b.removeAttribute(\"id\")}}}return A(a.replace(ga,\"$1\"),b,c,d)}function b(){function a(c,d){return b.push(c+\" \")>v.cacheLength&&delete a[b.shift()],a[c+\" \"]=d}var b=[];return a}function c(a){return a[M]=!0,a}function d(a){var b=F.createElement(\"div\");try{return!!a(b)}catch(a){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function e(a,b){for(var c=a.split(\"|\"),d=a.length;d--;)v.attrHandle[c[d]]=b}function f(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||V)-(~a.sourceIndex||V);if(d)return d;if(c)for(;c=c.nextSibling;)if(c===b)return-1;return a?1:-1}function g(a){return function(b){var c=b.nodeName.toLowerCase();return\"input\"===c&&b.type===a}}function h(a){return function(b){var c=b.nodeName.toLowerCase();return(\"input\"===c||\"button\"===c)&&b.type===a}}function i(a){return c(function(b){return b=+b,c(function(c,d){for(var e,f=a([],c.length,b),g=f.length;g--;)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function j(a){return a&&typeof a.getElementsByTagName!==U&&a}function k(){}function l(a){for(var b=0,c=a.length,d=\"\";b<c;b++)d+=a[b].value;return d}function m(a,b,c){var d=b.dir,e=c&&\"parentNode\"===d,f=P++;return b.first?function(b,c,f){for(;b=b[d];)if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[O,f];if(g){for(;b=b[d];)if((1===b.nodeType||e)&&a(b,c,g))return!0}else for(;b=b[d];)if(1===b.nodeType||e){if(i=b[M]||(b[M]={}),(h=i[d])&&h[0]===O&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function n(a){return a.length>1?function(b,c,d){for(var e=a.length;e--;)if(!a[e](b,c,d))return!1;return!0}:a[0]}function o(b,c,d){for(var e=0,f=c.length;e<f;e++)a(b,c[e],d);return d}function p(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function q(a,b,d,e,f,g){return e&&!e[M]&&(e=q(e)),f&&!f[M]&&(f=q(f,g)),c(function(c,g,h,i){var j,k,l,m=[],n=[],q=g.length,r=c||o(b||\"*\",h.nodeType?[h]:h,[]),s=!a||!c&&b?r:p(r,m,a,h,i),t=d?f||(c?a:q||e)?[]:g:s;if(d&&d(s,t,h,i),e)for(j=p(t,n),e(j,[],h,i),k=j.length;k--;)(l=j[k])&&(t[n[k]]=!(s[n[k]]=l));if(c){if(f||a){if(f){for(j=[],k=t.length;k--;)(l=t[k])&&j.push(s[k]=l);f(null,t=[],j,i)}for(k=t.length;k--;)(l=t[k])&&(j=f?aa.call(c,l):m[k])>-1&&(c[j]=!(g[j]=l))}}else t=p(t===g?t.splice(q,t.length):t),f?f(null,g,t,i):$.apply(g,t)})}function r(a){for(var b,c,d,e=a.length,f=v.relative[a[0].type],g=f||v.relative[\" \"],h=f?1:0,i=m(function(a){return a===b},g,!0),j=m(function(a){return aa.call(b,a)>-1},g,!0),k=[function(a,c,d){return!f&&(d||c!==B)||((b=c).nodeType?i(a,c,d):j(a,c,d))}];h<e;h++)if(c=v.relative[a[h].type])k=[m(n(k),c)];else{if(c=v.filter[a[h].type].apply(null,a[h].matches),c[M]){for(d=++h;d<e&&!v.relative[a[d].type];d++);return q(h>1&&n(k),h>1&&l(a.slice(0,h-1).concat({value:\" \"===a[h-2].type?\"*\":\"\"})).replace(ga,\"$1\"),c,h<d&&r(a.slice(h,d)),d<e&&r(a=a.slice(d)),d<e&&l(a))}k.push(c)}return n(k)}function s(b,d){var e=d.length>0,f=b.length>0,g=function(c,g,h,i,j){var k,l,m,n=0,o=\"0\",q=c&&[],r=[],s=B,t=c||f&&v.find.TAG(\"*\",j),u=O+=null==s?1:Math.random()||.1,w=t.length;for(j&&(B=g!==F&&g);o!==w&&null!=(k=t[o]);o++){if(f&&k){for(l=0;m=b[l++];)if(m(k,g,h)){i.push(k);break}j&&(O=u)}e&&((k=!m&&k)&&n--,c&&q.push(k))}if(n+=o,e&&o!==n){for(l=0;m=d[l++];)m(q,r,g,h);if(c){if(n>0)for(;o--;)q[o]||r[o]||(r[o]=Y.call(i));r=p(r)}$.apply(i,r),j&&!c&&r.length>0&&n+d.length>1&&a.uniqueSort(i)}return j&&(O=u,B=s),q};return e?c(g):g}var t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M=\"sizzle\"+-new Date,N=window.document,O=0,P=0,Q=b(),R=b(),S=b(),T=function(a,b){return a===b&&(D=!0),0},U=\"undefined\",V=1<<31,W={}.hasOwnProperty,X=[],Y=X.pop,Z=X.push,$=X.push,_=X.slice,aa=X.indexOf||function(a){for(var b=0,c=this.length;b<c;b++)if(this[b]===a)return b;return-1},ba=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",ca=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",da=\"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",ea=\"\\\\[\"+ca+\"*(\"+da+\")(?:\"+ca+\"*([*^$|!~]?=)\"+ca+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+da+\"))|)\"+ca+\"*\\\\]\",fa=\":(\"+da+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+ea+\")*)|.*)\\\\)|)\",ga=new RegExp(\"^\"+ca+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+ca+\"+$\",\"g\"),ha=new RegExp(\"^\"+ca+\"*,\"+ca+\"*\"),ia=new RegExp(\"^\"+ca+\"*([>+~]|\"+ca+\")\"+ca+\"*\"),ja=new RegExp(\"=\"+ca+\"*([^\\\\]'\\\"]*?)\"+ca+\"*\\\\]\",\"g\"),ka=new RegExp(fa),la=new RegExp(\"^\"+da+\"$\"),ma={ID:new RegExp(\"^#(\"+da+\")\"),CLASS:new RegExp(\"^\\\\.(\"+da+\")\"),TAG:new RegExp(\"^(\"+da+\"|[*])\"),ATTR:new RegExp(\"^\"+ea),PSEUDO:new RegExp(\"^\"+fa),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+ca+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+ca+\"*(?:([+-]|)\"+ca+\"*(\\\\d+)|))\"+ca+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+ba+\")$\",\"i\"),needsContext:new RegExp(\"^\"+ca+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+ca+\"*((?:-\\\\d)?\\\\d*)\"+ca+\"*\\\\)|)(?=[^-]|$)\",\"i\")},na=/^(?:input|select|textarea|button)$/i,oa=/^h\\d$/i,pa=/^[^{]+\\{\\s*\\[native \\w/,qa=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ra=/[+~]/,sa=/'|\\\\/g,ta=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+ca+\"?|(\"+ca+\")|.)\",\"ig\"),ua=function(a,b,c){var d=\"0x\"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{$.apply(X=_.call(N.childNodes),N.childNodes),X[N.childNodes.length].nodeType}catch(a){$={apply:X.length?function(a,b){Z.apply(a,_.call(b))}:function(a,b){for(var c=a.length,d=0;a[c++]=b[d++];);a.length=c-1}}}u=a.support={},x=a.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&\"HTML\"!==b.nodeName},E=a.setDocument=function(a){function b(a){try{return a.top}catch(a){}return null}var c,e=a?a.ownerDocument||a:N,g=e.defaultView;return e!==F&&9===e.nodeType&&e.documentElement?(F=e,G=e.documentElement,H=!x(e),g&&g!==b(g)&&(g.addEventListener?g.addEventListener(\"unload\",function(){E()},!1):g.attachEvent&&g.attachEvent(\"onunload\",function(){E()})),u.attributes=d(function(a){return a.className=\"i\",!a.getAttribute(\"className\")}),u.getElementsByTagName=d(function(a){return a.appendChild(e.createComment(\"\")),!a.getElementsByTagName(\"*\").length}),u.getElementsByClassName=pa.test(e.getElementsByClassName),u.getById=d(function(a){return G.appendChild(a).id=M,!e.getElementsByName||!e.getElementsByName(M).length}),u.getById?(v.find.ID=function(a,b){if(typeof b.getElementById!==U&&H){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},v.filter.ID=function(a){var b=a.replace(ta,ua);return function(a){return a.getAttribute(\"id\")===b}}):(delete v.find.ID,v.filter.ID=function(a){var b=a.replace(ta,ua);return function(a){var c=typeof a.getAttributeNode!==U&&a.getAttributeNode(\"id\");return c&&c.value===b}}),v.find.TAG=u.getElementsByTagName?function(a,b){if(typeof b.getElementsByTagName!==U)return b.getElementsByTagName(a)}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if(\"*\"===a){for(;c=f[e++];)1===c.nodeType&&d.push(c);return d}return f},v.find.CLASS=u.getElementsByClassName&&function(a,b){if(H)return b.getElementsByClassName(a)},J=[],I=[],(u.qsa=pa.test(e.querySelectorAll))&&(d(function(a){a.innerHTML=\"<select msallowcapture=''><option selected=''></option></select>\",a.querySelectorAll(\"[msallowcapture^='']\").length&&I.push(\"[*^$]=\"+ca+\"*(?:''|\\\"\\\")\"),a.querySelectorAll(\"[selected]\").length||I.push(\"\\\\[\"+ca+\"*(?:value|\"+ba+\")\"),a.querySelectorAll(\":checked\").length||I.push(\":checked\")}),d(function(a){var b=e.createElement(\"input\");b.setAttribute(\"type\",\"hidden\"),a.appendChild(b).setAttribute(\"name\",\"D\"),a.querySelectorAll(\"[name=d]\").length&&I.push(\"name\"+ca+\"*[*^$|!~]?=\"),a.querySelectorAll(\":enabled\").length||I.push(\":enabled\",\":disabled\"),a.querySelectorAll(\"*,:x\"),I.push(\",.*:\")})),(u.matchesSelector=pa.test(K=G.matches||G.webkitMatchesSelector||G.mozMatchesSelector||G.oMatchesSelector||G.msMatchesSelector))&&d(function(a){u.disconnectedMatch=K.call(a,\"div\"),K.call(a,\"[s!='']:x\"),J.push(\"!=\",fa)}),I=I.length&&new RegExp(I.join(\"|\")),J=J.length&&new RegExp(J.join(\"|\")),c=pa.test(G.compareDocumentPosition),L=c||pa.test(G.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)for(;b=b.parentNode;)if(b===a)return!0;return!1},T=c?function(a,b){if(a===b)return D=!0,0;var c=!a.compareDocumentPosition-!b.compareDocumentPosition;return c?c:(c=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&c||!u.sortDetached&&b.compareDocumentPosition(a)===c?a===e||a.ownerDocument===N&&L(N,a)?-1:b===e||b.ownerDocument===N&&L(N,b)?1:C?aa.call(C,a)-aa.call(C,b):0:4&c?-1:1)}:function(a,b){if(a===b)return D=!0,0;var c,d=0,g=a.parentNode,h=b.parentNode,i=[a],j=[b];if(!g||!h)return a===e?-1:b===e?1:g?-1:h?1:C?aa.call(C,a)-aa.call(C,b):0;if(g===h)return f(a,b);for(c=a;c=c.parentNode;)i.unshift(c);for(c=b;c=c.parentNode;)j.unshift(c);for(;i[d]===j[d];)d++;return d?f(i[d],j[d]):i[d]===N?-1:j[d]===N?1:0},e):F},a.matches=function(b,c){return a(b,null,null,c)},a.matchesSelector=function(b,c){if((b.ownerDocument||b)!==F&&E(b),c=c.replace(ja,\"='$1']\"),u.matchesSelector&&H&&(!J||!J.test(c))&&(!I||!I.test(c)))try{var d=K.call(b,c);if(d||u.disconnectedMatch||b.document&&11!==b.document.nodeType)return d}catch(a){}return a(c,F,null,[b]).length>0},a.contains=function(a,b){return(a.ownerDocument||a)!==F&&E(a),L(a,b)},a.attr=function(a,b){(a.ownerDocument||a)!==F&&E(a);var c=v.attrHandle[b.toLowerCase()],d=c&&W.call(v.attrHandle,b.toLowerCase())?c(a,b,!H):void 0;return void 0!==d?d:u.attributes||!H?a.getAttribute(b):(d=a.getAttributeNode(b))&&d.specified?d.value:null},a.error=function(a){throw new Error(\"Syntax error, unrecognized expression: \"+a)},a.uniqueSort=function(a){var b,c=[],d=0,e=0;if(D=!u.detectDuplicates,C=!u.sortStable&&a.slice(0),a.sort(T),D){for(;b=a[e++];)b===a[e]&&(d=c.push(e));for(;d--;)a.splice(c[d],1)}return C=null,a},w=a.getText=function(a){var b,c=\"\",d=0,e=a.nodeType;if(e){if(1===e||9===e||11===e){if(\"string\"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=w(a)}else if(3===e||4===e)return a.nodeValue}else for(;b=a[d++];)c+=w(b);return c},v=a.selectors={cacheLength:50,createPseudo:c,match:ma,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ta,ua),a[3]=(a[3]||a[4]||a[5]||\"\").replace(ta,ua),\"~=\"===a[2]&&(a[3]=\" \"+a[3]+\" \"),a.slice(0,4)},CHILD:function(b){return b[1]=b[1].toLowerCase(),\"nth\"===b[1].slice(0,3)?(b[3]||a.error(b[0]),b[4]=+(b[4]?b[5]+(b[6]||1):2*(\"even\"===b[3]||\"odd\"===b[3])),b[5]=+(b[7]+b[8]||\"odd\"===b[3])):b[3]&&a.error(b[0]),b},PSEUDO:function(a){var b,c=!a[6]&&a[2];return ma.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||\"\":c&&ka.test(c)&&(b=y(c,!0))&&(b=c.indexOf(\")\",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ta,ua).toLowerCase();return\"*\"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=Q[a+\" \"];return b||(b=new RegExp(\"(^|\"+ca+\")\"+a+\"(\"+ca+\"|$)\"))&&Q(a,function(a){return b.test(\"string\"==typeof a.className&&a.className||typeof a.getAttribute!==U&&a.getAttribute(\"class\")||\"\")})},ATTR:function(b,c,d){return function(e){var f=a.attr(e,b);return null==f?\"!=\"===c:!c||(f+=\"\",\"=\"===c?f===d:\"!=\"===c?f!==d:\"^=\"===c?d&&0===f.indexOf(d):\"*=\"===c?d&&f.indexOf(d)>-1:\"$=\"===c?d&&f.slice(-d.length)===d:\"~=\"===c?(\" \"+f+\" \").indexOf(d)>-1:\"|=\"===c&&(f===d||f.slice(0,d.length+1)===d+\"-\"))}},CHILD:function(a,b,c,d,e){var f=\"nth\"!==a.slice(0,3),g=\"last\"!==a.slice(-4),h=\"of-type\"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?\"nextSibling\":\"previousSibling\",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){for(;p;){for(l=b;l=l[p];)if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p=\"only\"===a&&!o&&\"nextSibling\"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){for(k=q[M]||(q[M]={}),j=k[a]||[],n=j[0]===O&&j[1],m=j[0]===O&&j[2],l=n&&q.childNodes[n];l=++n&&l&&l[p]||(m=n=0)||o.pop();)if(1===l.nodeType&&++m&&l===b){k[a]=[O,n,m];break}}else if(s&&(j=(b[M]||(b[M]={}))[a])&&j[0]===O)m=j[1];else for(;(l=++n&&l&&l[p]||(m=n=0)||o.pop())&&((h?l.nodeName.toLowerCase()!==r:1!==l.nodeType)||!++m||(s&&((l[M]||(l[M]={}))[a]=[O,m]),l!==b)););return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(b,d){var e,f=v.pseudos[b]||v.setFilters[b.toLowerCase()]||a.error(\"unsupported pseudo: \"+b);return f[M]?f(d):f.length>1?(e=[b,b,\"\",d],v.setFilters.hasOwnProperty(b.toLowerCase())?c(function(a,b){for(var c,e=f(a,d),g=e.length;g--;)c=aa.call(a,e[g]),a[c]=!(b[c]=e[g])}):function(a){return f(a,0,e)}):f}},pseudos:{not:c(function(a){var b=[],d=[],e=z(a.replace(ga,\"$1\"));return e[M]?c(function(a,b,c,d){for(var f,g=e(a,null,d,[]),h=a.length;h--;)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,c,f){return b[0]=a,e(b,null,f,d),!d.pop()}}),has:c(function(b){return function(c){return a(b,c).length>0}}),contains:c(function(a){return a=a.replace(ta,ua),function(b){return(b.textContent||b.innerText||w(b)).indexOf(a)>-1}}),lang:c(function(b){return la.test(b||\"\")||a.error(\"unsupported lang: \"+b),b=b.replace(ta,ua).toLowerCase(),function(a){var c;do if(c=H?a.lang:a.getAttribute(\"xml:lang\")||a.getAttribute(\"lang\"))return c=c.toLowerCase(),c===b||0===c.indexOf(b+\"-\");while((a=a.parentNode)&&1===a.nodeType);return!1}}),target:function(a){var b=window.location&&window.location.hash;return b&&b.slice(1)===a.id},root:function(a){return a===G},focus:function(a){return a===F.activeElement&&(!F.hasFocus||F.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return\"input\"===b&&!!a.checked||\"option\"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!v.pseudos.empty(a)},header:function(a){return oa.test(a.nodeName)},input:function(a){return na.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return\"input\"===b&&\"button\"===a.type||\"button\"===b},text:function(a){var b;return\"input\"===a.nodeName.toLowerCase()&&\"text\"===a.type&&(null==(b=a.getAttribute(\"type\"))||\"text\"===b.toLowerCase())},first:i(function(){return[0]}),last:i(function(a,b){return[b-1]}),eq:i(function(a,b,c){return[c<0?c+b:c]}),even:i(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:i(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:i(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:i(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},v.pseudos.nth=v.pseudos.eq;for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})v.pseudos[t]=g(t);for(t in{submit:!0,reset:!0})v.pseudos[t]=h(t);return k.prototype=v.filters=v.pseudos,v.setFilters=new k,y=a.tokenize=function(b,c){var d,e,f,g,h,i,j,k=R[b+\" \"];if(k)return c?0:k.slice(0);for(h=b,i=[],j=v.preFilter;h;){d&&!(e=ha.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),d=!1,(e=ia.exec(h))&&(d=e.shift(),f.push({value:d,type:e[0].replace(ga,\" \")}),h=h.slice(d.length));for(g in v.filter)!(e=ma[g].exec(h))||j[g]&&!(e=j[g](e))||(d=e.shift(),f.push({value:d,type:g,matches:e}),h=h.slice(d.length));if(!d)break}return c?h.length:h?a.error(b):R(b,i).slice(0)},z=a.compile=function(a,b){var c,d=[],e=[],f=S[a+\" \"];if(!f){for(b||(b=y(a)),c=b.length;c--;)f=r(b[c]),f[M]?d.push(f):e.push(f);f=S(a,s(e,d)),f.selector=a}return f},A=a.select=function(a,b,c,d){var e,f,g,h,i,k=\"function\"==typeof a&&a,m=!d&&y(a=k.selector||a);if(c=c||[],1===m.length){if(f=m[0]=m[0].slice(0),f.length>2&&\"ID\"===(g=f[0]).type&&u.getById&&9===b.nodeType&&H&&v.relative[f[1].type]){if(b=(v.find.ID(g.matches[0].replace(ta,ua),b)||[])[0],!b)return c;k&&(b=b.parentNode),a=a.slice(f.shift().value.length)}for(e=ma.needsContext.test(a)?0:f.length;e--&&(g=f[e],!v.relative[h=g.type]);)if((i=v.find[h])&&(d=i(g.matches[0].replace(ta,ua),ra.test(f[0].type)&&j(b.parentNode)||b))){if(f.splice(e,1),a=d.length&&l(f),!a)return $.apply(c,d),c;break}}return(k||z(a,m))(d,b,!H,c,ra.test(a)&&j(b.parentNode)||b),c},u.sortStable=M.split(\"\").sort(T).join(\"\")===M,u.detectDuplicates=!!D,E(),u.sortDetached=d(function(a){return 1&a.compareDocumentPosition(F.createElement(\"div\"))}),d(function(a){return a.innerHTML=\"<a href='#'></a>\",\"#\"===a.firstChild.getAttribute(\"href\")})||e(\"type|href|height|width\",function(a,b,c){if(!c)return a.getAttribute(b,\"type\"===b.toLowerCase()?1:2)}),u.attributes&&d(function(a){return a.innerHTML=\"<input/>\",a.firstChild.setAttribute(\"value\",\"\"),\"\"===a.firstChild.getAttribute(\"value\")})||e(\"value\",function(a,b,c){if(!c&&\"input\"===a.nodeName.toLowerCase())return a.defaultValue}),d(function(a){return null==a.getAttribute(\"disabled\")})||e(ba,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),a}),g(\"1g\",[],function(){function a(a){var b,c,d=a;if(!j(a))for(d=[],b=0,c=a.length;b<c;b++)d[b]=a[b];return d}function b(a,b,c){var d,e;if(!a)return 0;if(c=c||a,void 0!==a.length){for(d=0,e=a.length;d<e;d++)if(b.call(c,a[d],d,a)===!1)return 0}else for(d in a)if(a.hasOwnProperty(d)&&b.call(c,a[d],d,a)===!1)return 0;return 1}function c(a,c){var d=[];return b(a,function(b,e){d.push(c(b,e,a))}),d}function d(a,c){var d=[];return b(a,function(b,e){c&&!c(b,e,a)||d.push(b)}),d}function e(a,b){var c,d;if(a)for(c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1}function f(a,b,c,d){var e=0;for(arguments.length<3&&(c=a[0]);e<a.length;e++)c=b.call(d,c,a[e],e);return c}function g(a,b,c){var d,e;for(d=0,e=a.length;d<e;d++)if(b.call(c,a[d],d,a))return d;return-1}function h(a,b,c){var d=g(a,b,c);if(d!==-1)return a[d]}function i(a){return a[a.length-1]}var j=Array.isArray||function(a){return\"[object Array]\"===Object.prototype.toString.call(a)};return{isArray:j,toArray:a,each:b,map:c,filter:d,indexOf:e,reduce:f,findIndex:g,find:h,last:i}}),g(\"9\",[\"6\",\"1g\"],function(a,b){function c(a){return null===a||void 0===a?\"\":(\"\"+a).replace(n,\"\")}function d(a,c){return c?!(\"array\"!=c||!b.isArray(a))||typeof a==c:void 0!==a}function e(a,b,c){var d;for(a=a||[],b=b||\",\",\"string\"==typeof a&&(a=a.split(b)),c=c||{},d=a.length;d--;)c[a[d]]={};return c}function f(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function g(a,b,c){var d,e,f,g,h,i=this,j=0;if(a=/^((static) )?([\\w.]+)(:([\\w.]+))?/.exec(a),f=a[3].match(/(^|\\.)(\\w+)$/i)[2],e=i.createNS(a[3].replace(/\\.\\w+$/,\"\"),c),!e[f]){if(\"static\"==a[2])return e[f]=b,void(this.onCreate&&this.onCreate(a[2],a[3],e[f]));b[f]||(b[f]=function(){},j=1),e[f]=b[f],i.extend(e[f].prototype,b),a[5]&&(d=i.resolve(a[5]).prototype,g=a[5].match(/\\.(\\w+)$/i)[1],h=e[f],j?e[f]=function(){return d[g].apply(this,arguments)}:e[f]=function(){return this.parent=d[g],h.apply(this,arguments)},e[f].prototype[f]=e[f],i.each(d,function(a,b){e[f].prototype[b]=d[b]}),i.each(b,function(a,b){d[b]?e[f].prototype[b]=function(){return this.parent=d[b],a.apply(this,arguments)}:b!=f&&(e[f].prototype[b]=a)})),i.each(b[\"static\"],function(a,b){e[f][b]=a})}}function h(a,b){var c,d,e,f,g=arguments;for(c=1,d=g.length;c<d;c++){b=g[c];for(e in b)b.hasOwnProperty(e)&&(f=b[e],void 0!==f&&(a[e]=f))}return a}function i(a,c,d,e){e=e||this,a&&(d&&(a=a[d]),b.each(a,function(a,b){return c.call(e,a,b,d)!==!1&&void i(a,c,d,e)}))}function j(a,b){var c,d;for(b=b||window,a=a.split(\".\"),c=0;c<a.length;c++)d=a[c],b[d]||(b[d]={}),b=b[d];return b}function k(a,b){var c,d;for(b=b||window,a=a.split(\".\"),c=0,d=a.length;c<d&&(b=b[a[c]],b);c++);return b}function l(a,e){return!a||d(a,\"array\")?a:b.map(a.split(e||\",\"),c)}function m(b){var c=a.cacheSuffix;return c&&(b+=(b.indexOf(\"?\")===-1?\"?\":\"&\")+c),b}var n=/^\\s*|\\s*$/g;return{trim:c,isArray:b.isArray,is:d,toArray:b.toArray,makeMap:e,each:b.each,map:b.map,\ngrep:b.filter,inArray:b.indexOf,hasOwn:f,extend:h,create:g,walk:i,createNS:j,resolve:k,explode:l,_addCacheSuffix:m}}),g(\"a\",[\"7\",\"8\",\"9\",\"6\"],function(a,b,c,d){function e(a){return\"undefined\"!=typeof a}function f(a){return\"string\"==typeof a}function g(a){return a&&a==a.window}function h(a,b){var c,d,e;for(b=b||w,e=b.createElement(\"div\"),c=b.createDocumentFragment(),e.innerHTML=a;d=e.firstChild;)c.appendChild(d);return c}function i(a,b,c,d){var e;if(f(b))b=h(b,q(a[0]));else if(b.length&&!b.nodeType){if(b=l.makeArray(b),d)for(e=b.length-1;e>=0;e--)i(a,b[e],c,d);else for(e=0;e<b.length;e++)i(a,b[e],c,d);return a}if(b.nodeType)for(e=a.length;e--;)c.call(a[e],b);return a}function j(a,b){return a&&b&&(\" \"+a.className+\" \").indexOf(\" \"+b+\" \")!==-1}function k(a,b,c){var d,e;return b=l(b)[0],a.each(function(){var a=this;c&&d==a.parentNode?e.appendChild(a):(d=a.parentNode,e=b.cloneNode(!1),a.parentNode.insertBefore(e,a),e.appendChild(a))}),a}function l(a,b){return new l.fn.init(a,b)}function m(a,b){var c;if(b.indexOf)return b.indexOf(a);for(c=b.length;c--;)if(b[c]===a)return c;return-1}function n(a){return null===a||a===v?\"\":(\"\"+a).replace(I,\"\")}function o(a,b){var c,d,e,f,g;if(a)if(c=a.length,c===f){for(d in a)if(a.hasOwnProperty(d)&&(g=a[d],b.call(g,d,g)===!1))break}else for(e=0;e<c&&(g=a[e],b.call(g,e,g)!==!1);e++);return a}function p(a,b){var c=[];return o(a,function(a,d){b(d,a)&&c.push(d)}),c}function q(a){return a?9==a.nodeType?a:a.ownerDocument:w}function r(a,b,c){var d=[],e=a[b];for(\"string\"!=typeof c&&c instanceof l&&(c=c[0]);e&&9!==e.nodeType;){if(void 0!==c){if(e===c)break;if(\"string\"==typeof c&&l(e).is(c))break}1===e.nodeType&&d.push(e),e=e[b]}return d}function s(a,b,c,d){var e=[];for(d instanceof l&&(d=d[0]);a;a=a[b])if(!c||a.nodeType===c){if(void 0!==d){if(a===d)break;if(\"string\"==typeof d&&l(a).is(d))break}e.push(a)}return e}function t(a,b,c){for(a=a[b];a;a=a[b])if(a.nodeType==c)return a;return null}function u(a,b,c){o(c,function(c,d){a[c]=a[c]||{},a[c][b]=d})}var v,w=document,x=Array.prototype.push,y=Array.prototype.slice,z=/^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/,A=a.Event,B=c.makeMap(\"children,contents,next,prev\"),C=c.makeMap(\"fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom\",\" \"),D=c.makeMap(\"checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected\",\" \"),E={\"for\":\"htmlFor\",\"class\":\"className\",readonly:\"readOnly\"},F={\"float\":\"cssFloat\"},G={},H={},I=/^\\s*|\\s*$/g;return l.fn=l.prototype={constructor:l,selector:\"\",context:null,length:0,init:function(a,b){var c,d,e=this;if(!a)return e;if(a.nodeType)return e.context=e[0]=a,e.length=1,e;if(b&&b.nodeType)e.context=b;else{if(b)return l(a).attr(b);e.context=b=document}if(f(a)){if(e.selector=a,c=\"<\"===a.charAt(0)&&\">\"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c)return l(b).find(a);if(c[1])for(d=h(a,q(b)).firstChild;d;)x.call(e,d),d=d.nextSibling;else{if(d=q(b).getElementById(c[2]),!d)return e;if(d.id!==c[2])return e.find(a);e.length=1,e[0]=d}}else this.add(a,!1);return e},toArray:function(){return c.toArray(this)},add:function(a,b){var c,d,e=this;if(f(a))return e.add(l(a));if(b!==!1)for(c=l.unique(e.toArray().concat(l.makeArray(a))),e.length=c.length,d=0;d<c.length;d++)e[d]=c[d];else x.apply(e,l.makeArray(a));return e},attr:function(a,b){var c,d=this;if(\"object\"==typeof a)o(a,function(a,b){d.attr(a,b)});else{if(!e(b)){if(d[0]&&1===d[0].nodeType){if(c=G[a],c&&c.get)return c.get(d[0],a);if(D[a])return d.prop(a)?a:v;b=d[0].getAttribute(a,2),null===b&&(b=v)}return b}this.each(function(){var c;if(1===this.nodeType){if(c=G[a],c&&c.set)return void c.set(this,b);null===b?this.removeAttribute(a,2):this.setAttribute(a,b,2)}})}return d},removeAttr:function(a){return this.attr(a,null)},prop:function(a,b){var c=this;if(a=E[a]||a,\"object\"==typeof a)o(a,function(a,b){c.prop(a,b)});else{if(!e(b))return c[0]&&c[0].nodeType&&a in c[0]?c[0][a]:b;this.each(function(){1==this.nodeType&&(this[a]=b)})}return c},css:function(a,b){function c(a){return a.replace(/-(\\D)/g,function(a,b){return b.toUpperCase()})}function d(a){return a.replace(/[A-Z]/g,function(a){return\"-\"+a})}var f,g,h=this;if(\"object\"==typeof a)o(a,function(a,b){h.css(a,b)});else if(e(b))a=c(a),\"number\"!=typeof b||C[a]||(b+=\"px\"),h.each(function(){var c=this.style;if(g=H[a],g&&g.set)return void g.set(this,b);try{this.style[F[a]||a]=b}catch(a){}null!==b&&\"\"!==b||(c.removeProperty?c.removeProperty(d(a)):c.removeAttribute(a))});else{if(f=h[0],g=H[a],g&&g.get)return g.get(f);if(f.ownerDocument.defaultView)try{return f.ownerDocument.defaultView.getComputedStyle(f,null).getPropertyValue(d(a))}catch(a){return v}else if(f.currentStyle)return f.currentStyle[c(a)]}return h},remove:function(){for(var a,b=this,c=this.length;c--;)a=b[c],A.clean(a),a.parentNode&&a.parentNode.removeChild(a);return this},empty:function(){for(var a,b=this,c=this.length;c--;)for(a=b[c];a.firstChild;)a.removeChild(a.firstChild);return this},html:function(a){var b,c=this;if(e(a)){b=c.length;try{for(;b--;)c[b].innerHTML=a}catch(d){l(c[b]).empty().append(a)}return c}return c[0]?c[0].innerHTML:\"\"},text:function(a){var b,c=this;if(e(a)){for(b=c.length;b--;)\"innerText\"in c[b]?c[b].innerText=a:c[0].textContent=a;return c}return c[0]?c[0].innerText||c[0].textContent:\"\"},append:function(){return i(this,arguments,function(a){(1===this.nodeType||this.host&&1===this.host.nodeType)&&this.appendChild(a)})},prepend:function(){return i(this,arguments,function(a){(1===this.nodeType||this.host&&1===this.host.nodeType)&&this.insertBefore(a,this.firstChild)},!0)},before:function(){var a=this;return a[0]&&a[0].parentNode?i(a,arguments,function(a){this.parentNode.insertBefore(a,this)}):a},after:function(){var a=this;return a[0]&&a[0].parentNode?i(a,arguments,function(a){this.parentNode.insertBefore(a,this.nextSibling)},!0):a},appendTo:function(a){return l(a).append(this),this},prependTo:function(a){return l(a).prepend(this),this},replaceWith:function(a){return this.before(a).remove()},wrap:function(a){return k(this,a)},wrapAll:function(a){return k(this,a,!0)},wrapInner:function(a){return this.each(function(){l(this).contents().wrapAll(a)}),this},unwrap:function(){return this.parent().each(function(){l(this).replaceWith(this.childNodes)})},clone:function(){var a=[];return this.each(function(){a.push(this.cloneNode(!0))}),l(a)},addClass:function(a){return this.toggleClass(a,!0)},removeClass:function(a){return this.toggleClass(a,!1)},toggleClass:function(a,b){var c=this;return\"string\"!=typeof a?c:(a.indexOf(\" \")!==-1?o(a.split(\" \"),function(){c.toggleClass(this,b)}):c.each(function(c,d){var e,f;f=j(d,a),f!==b&&(e=d.className,f?d.className=n((\" \"+e+\" \").replace(\" \"+a+\" \",\" \")):d.className+=e?\" \"+a:a)}),c)},hasClass:function(a){return j(this[0],a)},each:function(a){return o(this,a)},on:function(a,b){return this.each(function(){A.bind(this,a,b)})},off:function(a,b){return this.each(function(){A.unbind(this,a,b)})},trigger:function(a){return this.each(function(){\"object\"==typeof a?A.fire(this,a.type,a):A.fire(this,a)})},show:function(){return this.css(\"display\",\"\")},hide:function(){return this.css(\"display\",\"none\")},slice:function(){return new l(y.apply(this,arguments))},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},find:function(a){var b,c,d=[];for(b=0,c=this.length;b<c;b++)l.find(a,this[b],d);return l(d)},filter:function(a){return l(\"function\"==typeof a?p(this.toArray(),function(b,c){return a(c,b)}):l.filter(a,this.toArray()))},closest:function(a){var b=[];return a instanceof l&&(a=a[0]),this.each(function(c,d){for(;d;){if(\"string\"==typeof a&&l(d).is(a)){b.push(d);break}if(d==a){b.push(d);break}d=d.parentNode}}),l(b)},offset:function(a){var b,c,d,e,f=0,g=0;return a?this.css(a):(b=this[0],b&&(c=b.ownerDocument,d=c.documentElement,b.getBoundingClientRect&&(e=b.getBoundingClientRect(),f=e.left+(d.scrollLeft||c.body.scrollLeft)-d.clientLeft,g=e.top+(d.scrollTop||c.body.scrollTop)-d.clientTop)),{left:f,top:g})},push:x,sort:[].sort,splice:[].splice},c.extend(l,{extend:c.extend,makeArray:function(a){return g(a)||a.nodeType?[a]:c.toArray(a)},inArray:m,isArray:c.isArray,each:o,trim:n,grep:p,find:b,expr:b.selectors,unique:b.uniqueSort,text:b.getText,contains:b.contains,filter:function(a,b,c){var d=b.length;for(c&&(a=\":not(\"+a+\")\");d--;)1!=b[d].nodeType&&b.splice(d,1);return b=1===b.length?l.find.matchesSelector(b[0],a)?[b[0]]:[]:l.find.matches(a,b)}}),o({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return r(a,\"parentNode\")},next:function(a){return t(a,\"nextSibling\",1)},prev:function(a){return t(a,\"previousSibling\",1)},children:function(a){return s(a.firstChild,\"nextSibling\",1)},contents:function(a){return c.toArray((\"iframe\"===a.nodeName?a.contentDocument||a.contentWindow.document:a).childNodes)}},function(a,b){l.fn[a]=function(c){var d=this,e=[];return d.each(function(){var a=b.call(e,this,c,e);a&&(l.isArray(a)?e.push.apply(e,a):e.push(a))}),this.length>1&&(B[a]||(e=l.unique(e)),0===a.indexOf(\"parents\")&&(e=e.reverse())),e=l(e),c?e.filter(c):e}}),o({parentsUntil:function(a,b){return r(a,\"parentNode\",b)},nextUntil:function(a,b){return s(a,\"nextSibling\",1,b).slice(1)},prevUntil:function(a,b){return s(a,\"previousSibling\",1,b).slice(1)}},function(a,b){l.fn[a]=function(c,d){var e=this,f=[];return e.each(function(){var a=b.call(f,this,c,f);a&&(l.isArray(a)?f.push.apply(f,a):f.push(a))}),this.length>1&&(f=l.unique(f),0!==a.indexOf(\"parents\")&&\"prevUntil\"!==a||(f=f.reverse())),f=l(f),d?f.filter(d):f}}),l.fn.is=function(a){return!!a&&this.filter(a).length>0},l.fn.init.prototype=l.fn,l.overrideDefaults=function(a){function b(d,e){return c=c||a(),0===arguments.length&&(d=c.element),e||(e=c.context),new b.fn.init(d,e)}var c;return l.extend(b,this),b},d.ie&&d.ie<8&&(u(G,\"get\",{maxlength:function(a){var b=a.maxLength;return 2147483647===b?v:b},size:function(a){var b=a.size;return 20===b?v:b},\"class\":function(a){return a.className},style:function(a){var b=a.style.cssText;return 0===b.length?v:b}}),u(G,\"set\",{\"class\":function(a,b){a.className=b},style:function(a,b){a.style.cssText=b}})),d.ie&&d.ie<9&&(F[\"float\"]=\"styleFloat\",u(H,\"set\",{opacity:function(a,b){var c=a.style;null===b||\"\"===b?c.removeAttribute(\"filter\"):(c.zoom=1,c.filter=\"alpha(opacity=\"+100*b+\")\")}})),l.attrHooks=G,l.cssHooks=H,l}),g(\"b\",[],function(){return function(a,b){function c(a,b,c,d){function e(a){return a=parseInt(a,10).toString(16),a.length>1?a:\"0\"+a}return\"#\"+e(b)+e(c)+e(d)}var d,e,f,g,h=/rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)/gi,i=/(?:url(?:(?:\\(\\s*\\\"([^\\\"]+)\\\"\\s*\\))|(?:\\(\\s*\\'([^\\']+)\\'\\s*\\))|(?:\\(\\s*([^)\\s]+)\\s*\\))))|(?:\\'([^\\']+)\\')|(?:\\\"([^\\\"]+)\\\")/gi,j=/\\s*([^:]+):\\s*([^;]+);?/g,k=/\\s+$/,l={},m=\"\\ufeff\";for(a=a||{},b&&(f=b.getValidStyles(),g=b.getInvalidStyles()),e=(\"\\\\\\\" \\\\' \\\\; \\\\: ; : \"+m).split(\" \"),d=0;d<e.length;d++)l[e[d]]=m+d,l[m+d]=e[d];return{toHex:function(a){return a.replace(h,c)},parse:function(b){function e(a,b,c){var e,f,g,h;if(e=w[a+\"-top\"+b],e&&(f=w[a+\"-right\"+b],f&&(g=w[a+\"-bottom\"+b],g&&(h=w[a+\"-left\"+b])))){var i=[e,f,g,h];for(d=i.length-1;d--&&i[d]===i[d+1];);d>-1&&c||(w[a+b]=d==-1?i[0]:i.join(\" \"),delete w[a+\"-top\"+b],delete w[a+\"-right\"+b],delete w[a+\"-bottom\"+b],delete w[a+\"-left\"+b])}}function f(a){var b,c=w[a];if(c){for(c=c.split(\" \"),b=c.length;b--;)if(c[b]!==c[0])return!1;return w[a]=c[0],!0}}function g(a,b,c,d){f(b)&&f(c)&&f(d)&&(w[a]=w[b]+\" \"+w[c]+\" \"+w[d],delete w[b],delete w[c],delete w[d])}function n(a){return v=!0,l[a]}function o(a,b){return v&&(a=a.replace(/\\uFEFF[0-9]/g,function(a){return l[a]})),b||(a=a.replace(/\\\\([\\'\\\";:])/g,\"$1\")),a}function p(a){return String.fromCharCode(parseInt(a.slice(1),16))}function q(a){return a.replace(/\\\\[0-9a-f]+/gi,p)}function r(b,c,d,e,f,g){if(f=f||g)return f=o(f),\"'\"+f.replace(/\\'/g,\"\\\\'\")+\"'\";if(c=o(c||d||e),!a.allow_script_urls){var h=c.replace(/[\\s\\r\\n]+/g,\"\");if(/(java|vb)script:/i.test(h))return\"\";if(!a.allow_svg_data_urls&&/^data:image\\/svg/i.test(h))return\"\"}return x&&(c=x.call(y,c,\"style\")),\"url('\"+c.replace(/\\'/g,\"\\\\'\")+\"')\"}var s,t,u,v,w={},x=a.url_converter,y=a.url_converter_scope||this;if(b){for(b=b.replace(/[\\u0000-\\u001F]/g,\"\"),b=b.replace(/\\\\[\\\"\\';:\\uFEFF]/g,n).replace(/\\\"[^\\\"]+\\\"|\\'[^\\']+\\'/g,function(a){return a.replace(/[;:]/g,n)});s=j.exec(b);)if(j.lastIndex=s.index+s[0].length,t=s[1].replace(k,\"\").toLowerCase(),u=s[2].replace(k,\"\"),t&&u){if(t=q(t),u=q(u),t.indexOf(m)!==-1||t.indexOf('\"')!==-1)continue;if(!a.allow_script_urls&&(\"behavior\"==t||/expression\\s*\\(|\\/\\*|\\*\\//.test(u)))continue;\"font-weight\"===t&&\"700\"===u?u=\"bold\":\"color\"!==t&&\"background-color\"!==t||(u=u.toLowerCase()),u=u.replace(h,c),u=u.replace(i,r),w[t]=v?o(u,!0):u}e(\"border\",\"\",!0),e(\"border\",\"-width\"),e(\"border\",\"-color\"),e(\"border\",\"-style\"),e(\"padding\",\"\"),e(\"margin\",\"\"),g(\"border\",\"border-width\",\"border-style\",\"border-color\"),\"medium none\"===w.border&&delete w.border,\"none\"===w[\"border-image\"]&&delete w[\"border-image\"]}return w},serialize:function(a,b){function c(b){var c,d,e,g;if(c=f[b])for(d=0,e=c.length;d<e;d++)b=c[d],g=a[b],g&&(i+=(i.length>0?\" \":\"\")+b+\": \"+g+\";\")}function d(a,b){var c;return c=g[\"*\"],(!c||!c[a])&&(c=g[b],!c||!c[a])}var e,h,i=\"\";if(b&&f)c(\"*\"),c(b);else for(e in a)h=a[e],!h||g&&!d(e,b)||(i+=(i.length>0?\" \":\"\")+e+\": \"+h+\";\");return i}}}}),g(\"c\",[],function(){return function(a,b){function c(a,c,d,e){var f,g;if(a){if(!e&&a[c])return a[c];if(a!=b){if(f=a[d])return f;for(g=a.parentNode;g&&g!=b;g=g.parentNode)if(f=g[d])return f}}}function d(a,c,d,e){var f,g,h;if(a){if(f=a[d],b&&f===b)return;if(f){if(!e)for(h=f[c];h;h=h[c])if(!h[c])return h;return f}if(g=a.parentNode,g&&g!==b)return g}}var e=a;this.current=function(){return e},this.next=function(a){return e=c(e,\"firstChild\",\"nextSibling\",a)},this.prev=function(a){return e=c(e,\"lastChild\",\"previousSibling\",a)},this.prev2=function(a){return e=d(e,\"lastChild\",\"previousSibling\",a)}}}),g(\"d\",[\"9\"],function(a){function b(a){var b;return b=document.createElement(\"div\"),b.innerHTML=a,b.textContent||b.innerText||a}function c(a,b){var c,d,f,g={};if(a){for(a=a.split(\",\"),b=b||10,c=0;c<a.length;c+=2)d=String.fromCharCode(parseInt(a[c],b)),e[d]||(f=\"&\"+a[c+1]+\";\",g[d]=f,g[f]=d);return g}}var d,e,f,g=a.makeMap,h=/[&<>\\\"\\u0060\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,i=/[<>&\\u007E-\\uD7FF\\uE000-\\uFFEF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,j=/[<>&\\\"\\']/g,k=/&#([a-z0-9]+);?|&([a-z0-9]+);/gi,l={128:\"\\u20ac\",130:\"\\u201a\",131:\"\\u0192\",132:\"\\u201e\",133:\"\\u2026\",134:\"\\u2020\",135:\"\\u2021\",136:\"\\u02c6\",137:\"\\u2030\",138:\"\\u0160\",139:\"\\u2039\",140:\"\\u0152\",142:\"\\u017d\",145:\"\\u2018\",146:\"\\u2019\",147:\"\\u201c\",148:\"\\u201d\",149:\"\\u2022\",150:\"\\u2013\",151:\"\\u2014\",152:\"\\u02dc\",153:\"\\u2122\",154:\"\\u0161\",155:\"\\u203a\",156:\"\\u0153\",158:\"\\u017e\",159:\"\\u0178\"};e={'\"':\"&quot;\",\"'\":\"&#39;\",\"<\":\"&lt;\",\">\":\"&gt;\",\"&\":\"&amp;\",\"`\":\"&#96;\"},f={\"&lt;\":\"<\",\"&gt;\":\">\",\"&amp;\":\"&\",\"&quot;\":'\"',\"&apos;\":\"'\"},d=c(\"50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro\",32);var m={encodeRaw:function(a,b){return a.replace(b?h:i,function(a){return e[a]||a})},encodeAllRaw:function(a){return(\"\"+a).replace(j,function(a){return e[a]||a})},encodeNumeric:function(a,b){return a.replace(b?h:i,function(a){return a.length>1?\"&#\"+(1024*(a.charCodeAt(0)-55296)+(a.charCodeAt(1)-56320)+65536)+\";\":e[a]||\"&#\"+a.charCodeAt(0)+\";\"})},encodeNamed:function(a,b,c){return c=c||d,a.replace(b?h:i,function(a){return e[a]||c[a]||a})},getEncodeFunc:function(a,b){function f(a,c){return a.replace(c?h:i,function(a){return void 0!==e[a]?e[a]:void 0!==b[a]?b[a]:a.length>1?\"&#\"+(1024*(a.charCodeAt(0)-55296)+(a.charCodeAt(1)-56320)+65536)+\";\":\"&#\"+a.charCodeAt(0)+\";\"})}function j(a,c){return m.encodeNamed(a,c,b)}return b=c(b)||d,a=g(a.replace(/\\+/g,\",\")),a.named&&a.numeric?f:a.named?b?j:m.encodeNamed:a.numeric?m.encodeNumeric:m.encodeRaw},decode:function(a){return a.replace(k,function(a,c){return c?(c=\"x\"===c.charAt(0).toLowerCase()?parseInt(c.substr(1),16):parseInt(c,10),c>65535?(c-=65536,String.fromCharCode(55296+(c>>10),56320+(1023&c))):l[c]||String.fromCharCode(c)):f[a]||d[a]||b(a)})}};return m}),g(\"1h\",[\"9\"],function(a){function b(c){function d(){return J.createDocumentFragment()}function e(a,b){x(N,a,b)}function f(a,b){x(O,a,b)}function g(a){e(a.parentNode,U(a))}function h(a){e(a.parentNode,U(a)+1)}function i(a){f(a.parentNode,U(a))}function j(a){f(a.parentNode,U(a)+1)}function k(a){a?(I[R]=I[Q],I[S]=I[P]):(I[Q]=I[R],I[P]=I[S]),I.collapsed=N}function l(a){g(a),j(a)}function m(a){e(a,0),f(a,1===a.nodeType?a.childNodes.length:a.nodeValue.length)}function n(a,b){var c=I[Q],d=I[P],e=I[R],f=I[S],g=b.startContainer,h=b.startOffset,i=b.endContainer,j=b.endOffset;return 0===a?w(c,d,g,h):1===a?w(e,f,g,h):2===a?w(e,f,i,j):3===a?w(c,d,i,j):void 0}function o(){y(M)}function p(){return y(K)}function q(){return y(L)}function r(a){var b,d,e=this[Q],f=this[P];3!==e.nodeType&&4!==e.nodeType||!e.nodeValue?(e.childNodes.length>0&&(d=e.childNodes[f]),d?e.insertBefore(a,d):3==e.nodeType?c.insertAfter(a,e):e.appendChild(a)):f?f>=e.nodeValue.length?c.insertAfter(a,e):(b=e.splitText(f),e.parentNode.insertBefore(a,b)):e.parentNode.insertBefore(a,e)}function s(a){var b=I.extractContents();I.insertNode(a),a.appendChild(b),I.selectNode(a)}function t(){return T(new b(c),{startContainer:I[Q],startOffset:I[P],endContainer:I[R],endOffset:I[S],collapsed:I.collapsed,commonAncestorContainer:I.commonAncestorContainer})}function u(a,b){var c;if(3==a.nodeType)return a;if(b<0)return a;for(c=a.firstChild;c&&b>0;)--b,c=c.nextSibling;return c?c:a}function v(){return I[Q]==I[R]&&I[P]==I[S]}function w(a,b,d,e){var f,g,h,i,j,k;if(a==d)return b==e?0:b<e?-1:1;for(f=d;f&&f.parentNode!=a;)f=f.parentNode;if(f){for(g=0,h=a.firstChild;h!=f&&g<b;)g++,h=h.nextSibling;return b<=g?-1:1}for(f=a;f&&f.parentNode!=d;)f=f.parentNode;if(f){for(g=0,h=d.firstChild;h!=f&&g<e;)g++,h=h.nextSibling;return g<e?-1:1}for(i=c.findCommonAncestor(a,d),j=a;j&&j.parentNode!=i;)j=j.parentNode;for(j||(j=i),k=d;k&&k.parentNode!=i;)k=k.parentNode;if(k||(k=i),j==k)return 0;for(h=i.firstChild;h;){if(h==j)return-1;if(h==k)return 1;h=h.nextSibling}}function x(a,b,d){var e,f;for(a?(I[Q]=b,I[P]=d):(I[R]=b,I[S]=d),e=I[R];e.parentNode;)e=e.parentNode;for(f=I[Q];f.parentNode;)f=f.parentNode;f==e?w(I[Q],I[P],I[R],I[S])>0&&I.collapse(a):I.collapse(a),I.collapsed=v(),I.commonAncestorContainer=c.findCommonAncestor(I[Q],I[R])}function y(a){var b,c,d,e,f,g,h,i=0,j=0;if(I[Q]==I[R])return z(a);for(b=I[R],c=b.parentNode;c;b=c,c=c.parentNode){if(c==I[Q])return A(b,a);++i}for(b=I[Q],c=b.parentNode;c;b=c,c=c.parentNode){if(c==I[R])return B(b,a);++j}for(d=j-i,e=I[Q];d>0;)e=e.parentNode,d--;for(f=I[R];d<0;)f=f.parentNode,d++;for(g=e.parentNode,h=f.parentNode;g!=h;g=g.parentNode,h=h.parentNode)e=g,f=h;return C(e,f,a)}function z(a){var b,c,e,f,g,h,i,j,k;if(a!=M&&(b=d()),I[P]==I[S])return b;if(3==I[Q].nodeType){if(c=I[Q].nodeValue,e=c.substring(I[P],I[S]),a!=L&&(f=I[Q],j=I[P],k=I[S]-I[P],0===j&&k>=f.nodeValue.length-1?f.parentNode.removeChild(f):f.deleteData(j,k),I.collapse(N)),a==M)return;return e.length>0&&b.appendChild(J.createTextNode(e)),b}for(f=u(I[Q],I[P]),g=I[S]-I[P];f&&g>0;)h=f.nextSibling,i=G(f,a),b&&b.appendChild(i),--g,f=h;return a!=L&&I.collapse(N),b}function A(a,b){var c,e,f,g,h,i;if(b!=M&&(c=d()),e=D(a,b),c&&c.appendChild(e),f=U(a),g=f-I[P],g<=0)return b!=L&&(I.setEndBefore(a),I.collapse(O)),c;for(e=a.previousSibling;g>0;)h=e.previousSibling,i=G(e,b),c&&c.insertBefore(i,c.firstChild),--g,e=h;return b!=L&&(I.setEndBefore(a),I.collapse(O)),c}function B(a,b){var c,e,f,g,h,i;for(b!=M&&(c=d()),f=E(a,b),c&&c.appendChild(f),e=U(a),++e,g=I[S]-e,f=a.nextSibling;f&&g>0;)h=f.nextSibling,i=G(f,b),c&&c.appendChild(i),--g,f=h;return b!=L&&(I.setStartAfter(a),I.collapse(N)),c}function C(a,b,c){var e,f,g,h,i,j,k;for(c!=M&&(f=d()),e=E(a,c),f&&f.appendChild(e),g=U(a),h=U(b),++g,i=h-g,j=a.nextSibling;i>0;)k=j.nextSibling,e=G(j,c),f&&f.appendChild(e),j=k,--i;return e=D(b,c),f&&f.appendChild(e),c!=L&&(I.setStartAfter(a),I.collapse(N)),f}function D(a,b){var c,d,e,f,g,h=u(I[R],I[S]-1),i=h!=I[R];if(h==a)return F(h,i,O,b);for(c=h.parentNode,d=F(c,O,O,b);c;){for(;h;)e=h.previousSibling,f=F(h,i,O,b),b!=M&&d.insertBefore(f,d.firstChild),i=N,h=e;if(c==a)return d;h=c.previousSibling,c=c.parentNode,g=F(c,O,O,b),b!=M&&g.appendChild(d),d=g}}function E(a,b){var c,d,e,f,g,h=u(I[Q],I[P]),i=h!=I[Q];if(h==a)return F(h,i,N,b);for(c=h.parentNode,d=F(c,O,N,b);c;){for(;h;)e=h.nextSibling,f=F(h,i,N,b),b!=M&&d.appendChild(f),i=N,h=e;if(c==a)return d;h=c.nextSibling,c=c.parentNode,g=F(c,O,N,b),b!=M&&g.appendChild(d),d=g}}function F(a,b,d,e){var f,g,h,i,j;if(b)return G(a,e);if(3==a.nodeType){if(f=a.nodeValue,d?(i=I[P],g=f.substring(i),h=f.substring(0,i)):(i=I[S],g=f.substring(0,i),h=f.substring(i)),e!=L&&(a.nodeValue=h),e==M)return;return j=c.clone(a,O),j.nodeValue=g,j}if(e!=M)return c.clone(a,O)}function G(a,b){return b!=M?b==L?c.clone(a,N):a:void a.parentNode.removeChild(a)}function H(){return c.create(\"body\",null,q()).outerText}var I=this,J=c.doc,K=0,L=1,M=2,N=!0,O=!1,P=\"startOffset\",Q=\"startContainer\",R=\"endContainer\",S=\"endOffset\",T=a.extend,U=c.nodeIndex;return T(I,{startContainer:J,startOffset:0,endContainer:J,endOffset:0,collapsed:N,commonAncestorContainer:J,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:e,setEnd:f,setStartBefore:g,setStartAfter:h,setEndBefore:i,setEndAfter:j,collapse:k,selectNode:l,selectNodeContents:m,compareBoundaryPoints:n,deleteContents:o,extractContents:p,cloneContents:q,insertNode:r,surroundContents:s,cloneRange:t,toStringIE:H}),I}return b.prototype.toString=function(){return this.toStringIE()},b}),h(\"3y\",Array),h(\"3z\",Error),g(\"1m\",[\"3y\",\"3z\"],function(a,b){var c=function(){},d=function(a,b){return function(){return a(b.apply(null,arguments))}},e=function(a){return function(){return a}},f=function(a){return a},g=function(a,b){return a===b},h=function(b){for(var c=new a(arguments.length-1),d=1;d<arguments.length;d++)c[d-1]=arguments[d];return function(){for(var d=new a(arguments.length),e=0;e<d.length;e++)d[e]=arguments[e];var f=c.concat(d);return b.apply(null,f)}},i=function(a){return function(){return!a.apply(null,arguments)}},j=function(a){return function(){throw new b(a)}},k=function(a){return a()},l=function(a){a()},m=e(!1),n=e(!0);return{noop:c,compose:d,constant:e,identity:f,tripleEquals:g,curry:h,not:i,die:j,apply:k,call:l,never:m,always:n}}),h(\"5s\",Object),g(\"4z\",[\"1m\",\"5s\"],function(a,b){var c=a.never,d=a.always,e=function(){return f},f=function(){var f=function(a){return a.isNone()},g=function(a){return a()},h=function(a){return a},i=function(){},j={fold:function(a,b){return a()},is:c,isSome:c,isNone:d,getOr:h,getOrThunk:g,getOrDie:function(a){throw new Error(a||\"error: getOrDie called on none.\")},or:h,orThunk:g,map:e,ap:e,each:i,bind:e,flatten:e,exists:c,forall:d,filter:e,equals:f,equals_:f,toArray:function(){return[]},toString:a.constant(\"none()\")};return b.freeze&&b.freeze(j),j}(),g=function(a){var b=function(){return a},h=function(){return k},i=function(b){return g(b(a))},j=function(b){return b(a)},k={fold:function(b,c){return c(a)},is:function(b){return a===b},isSome:d,isNone:c,getOr:b,getOrThunk:b,getOrDie:b,or:h,orThunk:h,map:i,ap:function(b){return b.fold(e,function(b){return g(b(a))})},each:function(b){b(a)},bind:j,flatten:b,exists:j,forall:j,filter:function(b){return b(a)?k:f},equals:function(b){return b.is(a)},equals_:function(b,d){return b.fold(c,function(b){return d(a,b)})},toArray:function(){return[a]},toString:function(){return\"some(\"+a+\")\"}};return k},h=function(a){return null===a||void 0===a?f:g(a)};return{some:g,none:e,from:h}}),h(\"50\",String),g(\"3x\",[\"4z\",\"3y\",\"3z\",\"50\"],function(a,b,c,d){var e=function(){var a=b.prototype.indexOf,c=function(b,c){return a.call(b,c)},d=function(a,b){return u(a,b)};return void 0===a?d:c}(),f=function(b,c){var d=e(b,c);return d===-1?a.none():a.some(d)},g=function(a,b){return e(a,b)>-1},h=function(a,b){return t(a,b).isSome()},i=function(a,b){for(var c=[],d=0;d<a;d++)c.push(b(d));return c},j=function(a,b){for(var c=[],d=0;d<a.length;d+=b){var e=a.slice(d,d+b);c.push(e)}return c},k=function(a,c){for(var d=a.length,e=new b(d),f=0;f<d;f++){var g=a[f];e[f]=c(g,f,a)}return e},l=function(a,b){for(var c=0,d=a.length;c<d;c++){var e=a[c];b(e,c,a)}},m=function(a,b){for(var c=a.length-1;c>=0;c--){var d=a[c];b(d,c,a)}},n=function(a,b){for(var c=[],d=[],e=0,f=a.length;e<f;e++){var g=a[e],h=b(g,e,a)?c:d;h.push(g)}return{pass:c,fail:d}},o=function(a,b){for(var c=[],d=0,e=a.length;d<e;d++){var f=a[d];b(f,d,a)&&c.push(f)}return c},p=function(a,b){if(0===a.length)return[];for(var c=b(a[0]),d=[],e=[],f=0,g=a.length;f<g;f++){var h=a[f],i=b(h);i!==c&&(d.push(e),e=[]),c=i,e.push(h)}return 0!==e.length&&d.push(e),d},q=function(a,b,c){return m(a,function(a){c=b(c,a)}),c},r=function(a,b,c){return l(a,function(a){c=b(c,a)}),c},s=function(b,c){for(var d=0,e=b.length;d<e;d++){var f=b[d];if(c(f,d,b))return a.some(f)}return a.none()},t=function(b,c){for(var d=0,e=b.length;d<e;d++){var f=b[d];if(c(f,d,b))return a.some(d)}return a.none()},u=function(a,b){for(var c=0,d=a.length;c<d;++c)if(a[c]===b)return c;return-1},v=b.prototype.push,w=function(a){for(var d=[],e=0,f=a.length;e<f;++e){if(!b.prototype.isPrototypeOf(a[e]))throw new c(\"Arr.flatten item \"+e+\" was not an array, input: \"+a);v.apply(d,a[e])}return d},x=function(a,b){var c=k(a,b);return w(c)},y=function(a,b){for(var c=0,d=a.length;c<d;++c){var e=a[c];if(b(e,c,a)!==!0)return!1}return!0},z=function(a,b){return a.length===b.length&&y(a,function(a,c){return a===b[c]})},A=b.prototype.slice,B=function(a){var b=A.call(a,0);return b.reverse(),b},C=function(a,b){return o(a,function(a){return!g(b,a)})},D=function(a,b){for(var c={},e=0,f=a.length;e<f;e++){var g=a[e];c[d(g)]=b(g,e)}return c},E=function(a){return[a]},F=function(a,b){var c=A.call(a,0);return c.sort(b),c};return{map:k,each:l,eachr:m,partition:n,filter:o,groupBy:p,indexOf:f,foldr:q,foldl:r,find:s,findIndex:t,flatten:w,bind:x,forall:y,exists:h,contains:g,equal:z,reverse:B,chunk:j,difference:C,mapToObject:D,pure:E,sort:F,range:i}}),h(\"5t\",setTimeout),g(\"51\",[\"3x\",\"4z\",\"5t\"],function(a,b,c){var d=function(e){var f=b.none(),g=[],h=function(a){return d(function(b){i(function(c){b(a(c))})})},i=function(a){k()?m(a):g.push(a)},j=function(a){f=b.some(a),l(g),g=[]},k=function(){return f.isSome()},l=function(b){a.each(b,m)},m=function(a){f.each(function(b){c(function(){a(b)},0)})};return e(j),{get:i,map:h,isReady:k}},e=function(a){return d(function(b){b(a)})};return{nu:d,pure:e}}),g(\"52\",[\"3y\",\"5t\"],function(a,b){var c=function(c){return function(){var d=a.prototype.slice.call(arguments),e=this;b(function(){c.apply(e,d)},0)}};return{bounce:c}}),g(\"40\",[\"51\",\"52\"],function(a,b){var c=function(d){var e=function(a){d(b.bounce(a))},f=function(a){return c(function(b){e(function(c){var d=a(c);b(d)})})},g=function(a){return c(function(b){e(function(c){a(c).get(b)})})},h=function(a){return c(function(b){e(function(c){a.get(b)})})},i=function(){return a.nu(e)};return{map:f,bind:g,anonBind:h,toLazy:i,get:e}},d=function(a){return c(function(b){b(a)})};return{nu:c,pure:d}}),g(\"53\",[\"3x\"],function(a){var b=function(b,c){return c(function(c){var d=[],e=0,f=function(a){return function(f){d[a]=f,e++,e>=b.length&&c(d)}};0===b.length?c([]):a.each(b,function(a,b){a.get(f(b))})})};return{par:b}}),g(\"41\",[\"3x\",\"40\",\"53\"],function(a,b,c){var d=function(a){return c.par(a,b.nu)},e=function(b,c){var e=a.map(b,c);return d(e)},f=function(a,b){return function(c){return b(c).bind(a)}};return{par:d,mapM:e,compose:f}}),g(\"42\",[\"1m\",\"4z\"],function(a,b){var c=function(d){var e=function(a){return d===a},f=function(a){return c(d)},g=function(a){return c(d)},h=function(a){return c(a(d))},i=function(a){a(d)},j=function(a){return a(d)},k=function(a,b){return b(d)},l=function(a){return a(d)},m=function(a){return a(d)},n=function(){return b.some(d)};return{is:e,isValue:a.constant(!0),isError:a.constant(!1),getOr:a.constant(d),getOrThunk:a.constant(d),getOrDie:a.constant(d),or:f,orThunk:g,fold:k,map:h,each:i,bind:j,exists:l,forall:m,toOption:n}},d=function(c){var e=function(a){return a()},f=function(){return a.die(c)()},g=function(a){return a},h=function(a){return a()},i=function(a){return d(c)},j=function(a){return d(c)},k=function(a,b){return a(c)};return{is:a.constant(!1),isValue:a.constant(!1),isError:a.constant(!0),getOr:a.identity,getOrThunk:e,getOrDie:f,or:g,orThunk:h,fold:k,map:i,each:a.noop,bind:j,exists:a.constant(!1),forall:a.constant(!0),toOption:b.none}};return{value:c,error:d}}),g(\"1i\",[\"3x\",\"1m\",\"40\",\"41\",\"42\",\"5\",\"9\"],function(a,b,c,d,e,f,g){\"use strict\";return function(h,i){function j(a){h.getElementsByTagName(\"head\")[0].appendChild(a)}function k(a,b,c){function d(){for(var a=t.passed,b=a.length;b--;)a[b]();t.status=2,t.passed=[],t.failed=[]}function e(){for(var a=t.failed,b=a.length;b--;)a[b]();t.status=3,t.passed=[],t.failed=[]}function i(){var a=navigator.userAgent.match(/WebKit\\/(\\d*)/);return!!(a&&a[1]<536)}function k(a,b){a()||((new Date).getTime()-s<l?f.setTimeout(b):e())}function o(){k(function(){for(var a,b,c=h.styleSheets,e=c.length;e--;)if(a=c[e],b=a.ownerNode?a.ownerNode:a.owningElement,b&&b.id===q.id)return d(),!0},o)}function p(){k(function(){try{var a=r.sheet.cssRules;return d(),!!a}catch(a){}},p)}var q,r,s,t;if(a=g._addCacheSuffix(a),n[a]?t=n[a]:(t={passed:[],failed:[]},n[a]=t),b&&t.passed.push(b),c&&t.failed.push(c),1!=t.status){if(2==t.status)return void d();if(3==t.status)return void e();if(t.status=1,q=h.createElement(\"link\"),q.rel=\"stylesheet\",q.type=\"text/css\",q.id=\"u\"+m++,q.async=!1,q.defer=!1,s=(new Date).getTime(),\"onload\"in q&&!i())q.onload=o,q.onerror=e;else{if(navigator.userAgent.indexOf(\"Firefox\")>0)return r=h.createElement(\"style\"),\nr.textContent='@import \"'+a+'\"',p(),void j(r);o()}j(q),q.href=a}}var l,m=0,n={};i=i||{},l=i.maxLoadTime||5e3;var o=function(a){return c.nu(function(c){k(a,b.compose(c,b.constant(e.value(a))),b.compose(c,b.constant(e.error(a))))})},p=function(a){return a.fold(b.identity,b.identity)},q=function(b,c,e){d.par(a.map(b,o)).get(function(b){var d=a.partition(b,function(a){return a.isValue()});d.fail.length>0?e(d.fail.map(p)):c(d.pass.map(p))})};return{load:k,loadAll:q}}}),g(\"j\",[\"9\"],function(a){function b(b,c){return b=a.trim(b),b?b.split(c||\" \"):[]}function c(a){function c(a,c,d){function e(a,b){var c,d,e={};for(c=0,d=a.length;c<d;c++)e[a[c]]=b||{};return e}var h,i,j;for(d=d||[],c=c||\"\",\"string\"==typeof d&&(d=b(d)),a=b(a),h=a.length;h--;)i=b([g,c].join(\" \")),j={attributes:e(i),attributesOrder:i,children:e(d,f)},n[a[h]]=j}function d(a,c){var d,e,f,g;for(a=b(a),d=a.length,c=b(c);d--;)for(e=n[a[d]],f=0,g=c.length;f<g;f++)e.attributes[c[f]]={},e.attributesOrder.push(c[f])}var g,i,j,k,l,m,n={};return e[a]?e[a]:(g=\"id accesskey class dir lang style tabindex title role\",i=\"address blockquote div dl fieldset form h1 h2 h3 h4 h5 h6 hr menu ol p pre table ul\",j=\"a abbr b bdo br button cite code del dfn em embed i iframe img input ins kbd label map noscript object q s samp script select small span strong sub sup textarea u var #text #comment\",\"html4\"!=a&&(g+=\" contenteditable contextmenu draggable dropzone hidden spellcheck translate\",i+=\" article aside details dialog figure header footer hgroup section nav\",j+=\" audio canvas command datalist mark meter output picture progress time wbr video ruby bdi keygen\"),\"html5-strict\"!=a&&(g+=\" xml:lang\",m=\"acronym applet basefont big font strike tt\",j=[j,m].join(\" \"),h(b(m),function(a){c(a,\"\",j)}),l=\"center dir isindex noframes\",i=[i,l].join(\" \"),k=[i,j].join(\" \"),h(b(l),function(a){c(a,\"\",k)})),k=k||[i,j].join(\" \"),c(\"html\",\"manifest\",\"head body\"),c(\"head\",\"\",\"base command link meta noscript script style title\"),c(\"title hr noscript br\"),c(\"base\",\"href target\"),c(\"link\",\"href rel media hreflang type sizes hreflang\"),c(\"meta\",\"name http-equiv content charset\"),c(\"style\",\"media type scoped\"),c(\"script\",\"src async defer type charset\"),c(\"body\",\"onafterprint onbeforeprint onbeforeunload onblur onerror onfocus onhashchange onload onmessage onoffline ononline onpagehide onpageshow onpopstate onresize onscroll onstorage onunload\",k),c(\"address dt dd div caption\",\"\",k),c(\"h1 h2 h3 h4 h5 h6 pre p abbr code var samp kbd sub sup i b u bdo span legend em strong small s cite dfn\",\"\",j),c(\"blockquote\",\"cite\",k),c(\"ol\",\"reversed start type\",\"li\"),c(\"ul\",\"\",\"li\"),c(\"li\",\"value\",k),c(\"dl\",\"\",\"dt dd\"),c(\"a\",\"href target rel media hreflang type\",j),c(\"q\",\"cite\",j),c(\"ins del\",\"cite datetime\",k),c(\"img\",\"src sizes srcset alt usemap ismap width height\"),c(\"iframe\",\"src name width height\",k),c(\"embed\",\"src type width height\"),c(\"object\",\"data type typemustmatch name usemap form width height\",[k,\"param\"].join(\" \")),c(\"param\",\"name value\"),c(\"map\",\"name\",[k,\"area\"].join(\" \")),c(\"area\",\"alt coords shape href target rel media hreflang type\"),c(\"table\",\"border\",\"caption colgroup thead tfoot tbody tr\"+(\"html4\"==a?\" col\":\"\")),c(\"colgroup\",\"span\",\"col\"),c(\"col\",\"span\"),c(\"tbody thead tfoot\",\"\",\"tr\"),c(\"tr\",\"\",\"td th\"),c(\"td\",\"colspan rowspan headers\",k),c(\"th\",\"colspan rowspan headers scope abbr\",k),c(\"form\",\"accept-charset action autocomplete enctype method name novalidate target\",k),c(\"fieldset\",\"disabled form name\",[k,\"legend\"].join(\" \")),c(\"label\",\"form for\",j),c(\"input\",\"accept alt autocomplete checked dirname disabled form formaction formenctype formmethod formnovalidate formtarget height list max maxlength min multiple name pattern readonly required size src step type value width\"),c(\"button\",\"disabled form formaction formenctype formmethod formnovalidate formtarget name type value\",\"html4\"==a?k:j),c(\"select\",\"disabled form multiple name required size\",\"option optgroup\"),c(\"optgroup\",\"disabled label\",\"option\"),c(\"option\",\"disabled label selected value\"),c(\"textarea\",\"cols dirname disabled form maxlength name readonly required rows wrap\"),c(\"menu\",\"type label\",[k,\"li\"].join(\" \")),c(\"noscript\",\"\",k),\"html4\"!=a&&(c(\"wbr\"),c(\"ruby\",\"\",[j,\"rt rp\"].join(\" \")),c(\"figcaption\",\"\",k),c(\"mark rt rp summary bdi\",\"\",j),c(\"canvas\",\"width height\",k),c(\"video\",\"src crossorigin poster preload autoplay mediagroup loop muted controls width height buffered\",[k,\"track source\"].join(\" \")),c(\"audio\",\"src crossorigin preload autoplay mediagroup loop muted controls buffered volume\",[k,\"track source\"].join(\" \")),c(\"picture\",\"\",\"img source\"),c(\"source\",\"src srcset type media sizes\"),c(\"track\",\"kind src srclang label default\"),c(\"datalist\",\"\",[j,\"option\"].join(\" \")),c(\"article section nav aside header footer\",\"\",k),c(\"hgroup\",\"\",\"h1 h2 h3 h4 h5 h6\"),c(\"figure\",\"\",[k,\"figcaption\"].join(\" \")),c(\"time\",\"datetime\",j),c(\"dialog\",\"open\",k),c(\"command\",\"type label icon disabled checked radiogroup command\"),c(\"output\",\"for form name\",j),c(\"progress\",\"value max\",j),c(\"meter\",\"value min max low high optimum\",j),c(\"details\",\"open\",[k,\"summary\"].join(\" \")),c(\"keygen\",\"autofocus challenge disabled form keytype name\")),\"html5-strict\"!=a&&(d(\"script\",\"language xml:space\"),d(\"style\",\"xml:space\"),d(\"object\",\"declare classid code codebase codetype archive standby align border hspace vspace\"),d(\"embed\",\"align name hspace vspace\"),d(\"param\",\"valuetype type\"),d(\"a\",\"charset name rev shape coords\"),d(\"br\",\"clear\"),d(\"applet\",\"codebase archive code object alt name width height align hspace vspace\"),d(\"img\",\"name longdesc align border hspace vspace\"),d(\"iframe\",\"longdesc frameborder marginwidth marginheight scrolling align\"),d(\"font basefont\",\"size color face\"),d(\"input\",\"usemap align\"),d(\"select\",\"onchange\"),d(\"textarea\"),d(\"h1 h2 h3 h4 h5 h6 div p legend caption\",\"align\"),d(\"ul\",\"type compact\"),d(\"li\",\"type\"),d(\"ol dl menu dir\",\"compact\"),d(\"pre\",\"width xml:space\"),d(\"hr\",\"align noshade size width\"),d(\"isindex\",\"prompt\"),d(\"table\",\"summary width frame rules cellspacing cellpadding align bgcolor\"),d(\"col\",\"width align char charoff valign\"),d(\"colgroup\",\"width align char charoff valign\"),d(\"thead\",\"align char charoff valign\"),d(\"tr\",\"align char charoff valign bgcolor\"),d(\"th\",\"axis align char charoff valign nowrap bgcolor width height\"),d(\"form\",\"accept\"),d(\"td\",\"abbr axis scope align char charoff valign nowrap bgcolor width height\"),d(\"tfoot\",\"align char charoff valign\"),d(\"tbody\",\"align char charoff valign\"),d(\"area\",\"nohref\"),d(\"body\",\"background bgcolor text link vlink alink\")),\"html4\"!=a&&(d(\"input button select textarea\",\"autofocus\"),d(\"input textarea\",\"placeholder\"),d(\"a\",\"download\"),d(\"link script img\",\"crossorigin\"),d(\"iframe\",\"sandbox seamless allowfullscreen\")),h(b(\"a form meter progress dfn\"),function(a){n[a]&&delete n[a].children[a]}),delete n.caption.children.table,delete n.script,e[a]=n,n)}function d(a,b){var c;return a&&(c={},\"string\"==typeof a&&(a={\"*\":a}),h(a,function(a,d){c[d]=c[d.toUpperCase()]=\"map\"==b?g(a,/[, ]/):j(a,/[, ]/)})),c}var e={},f={},g=a.makeMap,h=a.each,i=a.extend,j=a.explode,k=a.inArray;return function(a){function f(b,c,d){var f=a[b];return f?f=g(f,/[, ]/,g(f.toUpperCase(),/[, ]/)):(f=e[b],f||(f=g(c,\" \",g(c.toUpperCase(),\" \")),f=i(f,d),e[b]=f)),f}function l(a){return new RegExp(\"^\"+a.replace(/([?+*])/g,\".$1\")+\"$\")}function m(a){var c,d,e,f,h,i,j,m,n,o,p,q,r,s,t,u,v,w,x,y=/^([#+\\-])?([^\\[!\\/]+)(?:\\/([^\\[!]+))?(?:(!?)\\[([^\\]]+)\\])?$/,z=/^([!\\-])?(\\w+::\\w+|[^=:<]+)?(?:([=:<])(.*))?$/,A=/[*?+]/;if(a)for(a=b(a,\",\"),F[\"@\"]&&(u=F[\"@\"].attributes,v=F[\"@\"].attributesOrder),c=0,d=a.length;c<d;c++)if(h=y.exec(a[c])){if(s=h[1],n=h[2],t=h[3],m=h[5],q={},r=[],i={attributes:q,attributesOrder:r},\"#\"===s&&(i.paddEmpty=!0),\"-\"===s&&(i.removeEmpty=!0),\"!\"===h[4]&&(i.removeEmptyAttrs=!0),u){for(w in u)q[w]=u[w];r.push.apply(r,v)}if(m)for(m=b(m,\"|\"),e=0,f=m.length;e<f;e++)if(h=z.exec(m[e])){if(j={},p=h[1],o=h[2].replace(/::/g,\":\"),s=h[3],x=h[4],\"!\"===p&&(i.attributesRequired=i.attributesRequired||[],i.attributesRequired.push(o),j.required=!0),\"-\"===p){delete q[o],r.splice(k(r,o),1);continue}s&&(\"=\"===s&&(i.attributesDefault=i.attributesDefault||[],i.attributesDefault.push({name:o,value:x}),j.defaultValue=x),\":\"===s&&(i.attributesForced=i.attributesForced||[],i.attributesForced.push({name:o,value:x}),j.forcedValue=x),\"<\"===s&&(j.validValues=g(x,\"?\"))),A.test(o)?(i.attributePatterns=i.attributePatterns||[],j.pattern=l(o),i.attributePatterns.push(j)):(q[o]||r.push(o),q[o]=j)}u||\"@\"!=n||(u=q,v=r),t&&(i.outputName=n,F[t]=i),A.test(n)?(i.pattern=l(n),H.push(i)):F[n]=i}}function n(a){F={},H=[],m(a),h(t,function(a,b){G[b]=a.children})}function o(a){var c=/^(~)?(.+)$/;a&&(e.text_block_elements=e.block_elements=null,h(b(a,\",\"),function(a){var b=c.exec(a),d=\"~\"===b[1],e=d?\"span\":\"div\",f=b[2];if(G[f]=G[e],I[f]=e,d||(z[f.toUpperCase()]={},z[f]={}),!F[f]){var g=F[e];g=i({},g),delete g.removeEmptyAttrs,delete g.removeEmpty,F[f]=g}h(G,function(a,b){a[e]&&(G[b]=a=i({},G[b]),a[f]=a[e])})}))}function p(c){var d=/^([+\\-]?)(\\w+)\\[([^\\]]+)\\]$/;e[a.schema]=null,c&&h(b(c,\",\"),function(a){var c,e,f=d.exec(a);f&&(e=f[1],c=e?G[f[2]]:G[f[2]]={\"#comment\":{}},c=G[f[2]],h(b(f[3],\"|\"),function(a){\"-\"===e?delete c[a]:c[a]={}}))})}function q(a){var b,c=F[a];if(c)return c;for(b=H.length;b--;)if(c=H[b],c.pattern.test(a))return c}var r,s,t,u,v,w,x,y,z,A,B,C,D,E=this,F={},G={},H=[],I={},J={};a=a||{},t=c(a.schema),a.verify_html===!1&&(a.valid_elements=\"*[*]\"),r=d(a.valid_styles),s=d(a.invalid_styles,\"map\"),y=d(a.valid_classes,\"map\"),u=f(\"whitespace_elements\",\"pre script noscript style textarea video audio iframe object code\"),v=f(\"self_closing_elements\",\"colgroup dd dt li option p td tfoot th thead tr\"),w=f(\"short_ended_elements\",\"area base basefont br col frame hr img input isindex link meta param embed source wbr track\"),x=f(\"boolean_attributes\",\"checked compact declare defer disabled ismap multiple nohref noresize noshade nowrap readonly selected autoplay loop controls\"),A=f(\"non_empty_elements\",\"td th iframe video audio object script pre code\",w),B=f(\"move_caret_before_on_enter_elements\",\"table\",A),C=f(\"text_block_elements\",\"h1 h2 h3 h4 h5 h6 p div address pre form blockquote center dir fieldset header footer article section hgroup aside nav figure\"),z=f(\"block_elements\",\"hr table tbody thead tfoot th tr td li ol ul caption dl dt dd noscript menu isindex option datalist select optgroup figcaption\",C),D=f(\"text_inline_elements\",\"span strong b em i font strike u var cite dfn code mark q sup sub samp\"),h((a.special||\"script noscript noframes noembed title style textarea xmp\").split(\" \"),function(a){J[a]=new RegExp(\"</\"+a+\"[^>]*>\",\"gi\")}),a.valid_elements?n(a.valid_elements):(h(t,function(a,b){F[b]={attributes:a.attributes,attributesOrder:a.attributesOrder},G[b]=a.children}),\"html5\"!=a.schema&&h(b(\"strong/b em/i\"),function(a){a=b(a,\"/\"),F[a[1]].outputName=a[0]}),h(b(\"ol ul sub sup blockquote span font a table tbody tr strong em b i\"),function(a){F[a]&&(F[a].removeEmpty=!0)}),h(b(\"p h1 h2 h3 h4 h5 h6 th td pre div address caption\"),function(a){F[a].paddEmpty=!0}),h(b(\"span\"),function(a){F[a].removeEmptyAttrs=!0})),o(a.custom_elements),p(a.valid_children),m(a.extended_valid_elements),p(\"+ol[ul|ol],+ul[ul|ol]\"),h({dd:\"dl\",dt:\"dl\",li:\"ul ol\",td:\"tr\",th:\"tr\",tr:\"tbody thead tfoot\",tbody:\"table\",thead:\"table\",tfoot:\"table\",legend:\"fieldset\",area:\"map\",param:\"video audio object\"},function(a,c){F[c]&&(F[c].parentsRequired=b(a))}),a.invalid_elements&&h(j(a.invalid_elements),function(a){F[a]&&delete F[a]}),q(\"span\")||m(\"span[!data-mce-type|*]\"),E.children=G,E.getValidStyles=function(){return r},E.getInvalidStyles=function(){return s},E.getValidClasses=function(){return y},E.getBoolAttrs=function(){return x},E.getBlockElements=function(){return z},E.getTextBlockElements=function(){return C},E.getTextInlineElements=function(){return D},E.getShortEndedElements=function(){return w},E.getSelfClosingElements=function(){return v},E.getNonEmptyElements=function(){return A},E.getMoveCaretBeforeOnEnterElements=function(){return B},E.getWhiteSpaceElements=function(){return u},E.getSpecialElements=function(){return J},E.isValidChild=function(a,b){var c=G[a.toLowerCase()];return!(!c||!c[b.toLowerCase()])},E.isValid=function(a,b){var c,d,e=q(a);if(e){if(!b)return!0;if(e.attributes[b])return!0;if(c=e.attributePatterns)for(d=c.length;d--;)if(c[d].pattern.test(a))return!0}return!1},E.getElementRule=q,E.getCustomElements=function(){return I},E.addValidElements=m,E.setValidElements=n,E.addCustomElements=o,E.addValidChildren=p,E.elements=F}}),g(\"e\",[\"a\",\"7\",\"1h\",\"8\",\"1i\",\"c\",\"6\",\"d\",\"j\",\"b\",\"9\"],function(a,b,c,d,e,f,g,h,i,j,k){function l(a,b){var c,d={},e=b.keep_values;return c={set:function(c,d,e){b.url_converter&&(d=b.url_converter.call(b.url_converter_scope||a,d,e,c[0])),c.attr(\"data-mce-\"+e,d).attr(e,d)},get:function(a,b){return a.attr(\"data-mce-\"+b)||a.attr(b)}},d={style:{set:function(a,b){return null!==b&&\"object\"==typeof b?void a.css(b):(e&&a.attr(\"data-mce-style\",b),void a.attr(\"style\",b))},get:function(b){var c=b.attr(\"data-mce-style\")||b.attr(\"style\");return c=a.serializeStyle(a.parseStyle(c),b[0].nodeName)}}},e&&(d.href=d.src=c),d}function m(a,b){var c=b.attr(\"style\");c=a.serializeStyle(a.parseStyle(c),b[0].nodeName),c||(c=null),b.attr(\"data-mce-style\",c)}function n(a,b){var c,d,e=0;if(a)for(c=a.nodeType,a=a.previousSibling;a;a=a.previousSibling)d=a.nodeType,(!b||3!=d||d!=c&&a.nodeValue.length)&&(e++,c=d);return e}function o(c,d){var f,g=this;g.doc=c,g.win=window,g.files={},g.counter=0,g.stdMode=!t||c.documentMode>=8,g.boxModel=!t||\"CSS1Compat\"==c.compatMode||g.stdMode,g.styleSheetLoader=new e(c),g.boundEvents=[],g.settings=d=d||{},g.schema=d.schema?d.schema:new i({}),g.styles=new j({url_converter:d.url_converter,url_converter_scope:d.url_converter_scope},d.schema),g.fixDoc(c),g.events=d.ownEvents?new b(d.proxy):b.Event,g.attrHooks=l(g,d),f=d.schema?d.schema.getBlockElements():{},g.$=a.overrideDefaults(function(){return{context:c,element:g.getRoot()}}),g.isBlock=function(a){if(!a)return!1;var b=a.nodeType;return b?!(1!==b||!f[a.nodeName]):!!f[a]}}var p=k.each,q=k.is,r=k.grep,s=k.trim,t=g.ie,u=/^([a-z0-9],?)+$/i,v=/^[ \\t\\r\\n]*$/;return o.prototype={$$:function(a){return\"string\"==typeof a&&(a=this.get(a)),this.$(a)},root:null,fixDoc:function(a){var b,c=this.settings;if(t&&c.schema){\"abbr article aside audio canvas details figcaption figure footer header hgroup mark menu meter nav output progress section summary time video\".replace(/\\w+/g,function(b){a.createElement(b)});for(b in c.schema.getCustomElements())a.createElement(b)}},clone:function(a,b){var c,d,e=this;return!t||1!==a.nodeType||b?a.cloneNode(b):(d=e.doc,b?c.firstChild:(c=d.createElement(a.nodeName),p(e.getAttribs(a),function(b){e.setAttrib(c,b.nodeName,e.getAttrib(a,b.nodeName))}),c))},getRoot:function(){var a=this;return a.settings.root_element||a.doc.body},getViewPort:function(a){var b,c;return a=a?a:this.win,b=a.document,c=this.boxModel?b.documentElement:b.body,{x:a.pageXOffset||c.scrollLeft,y:a.pageYOffset||c.scrollTop,w:a.innerWidth||c.clientWidth,h:a.innerHeight||c.clientHeight}},getRect:function(a){var b,c,d=this;return a=d.get(a),b=d.getPos(a),c=d.getSize(a),{x:b.x,y:b.y,w:c.w,h:c.h}},getSize:function(a){var b,c,d=this;return a=d.get(a),b=d.getStyle(a,\"width\"),c=d.getStyle(a,\"height\"),b.indexOf(\"px\")===-1&&(b=0),c.indexOf(\"px\")===-1&&(c=0),{w:parseInt(b,10)||a.offsetWidth||a.clientWidth,h:parseInt(c,10)||a.offsetHeight||a.clientHeight}},getParent:function(a,b,c){return this.getParents(a,b,c,!1)},getParents:function(a,b,c,d){var e,f=this,g=[];for(a=f.get(a),d=void 0===d,c=c||(\"BODY\"!=f.getRoot().nodeName?f.getRoot().parentNode:null),q(b,\"string\")&&(e=b,b=\"*\"===b?function(a){return 1==a.nodeType}:function(a){return f.is(a,e)});a&&a!=c&&a.nodeType&&9!==a.nodeType;){if(!b||b(a)){if(!d)return a;g.push(a)}a=a.parentNode}return d?g:null},get:function(a){var b;return a&&this.doc&&\"string\"==typeof a&&(b=a,a=this.doc.getElementById(a),a&&a.id!==b)?this.doc.getElementsByName(b)[1]:a},getNext:function(a,b){return this._findSib(a,b,\"nextSibling\")},getPrev:function(a,b){return this._findSib(a,b,\"previousSibling\")},select:function(a,b){var c=this;return d(a,c.get(b)||c.settings.root_element||c.doc,[])},is:function(a,b){var c;if(!a)return!1;if(void 0===a.length){if(\"*\"===b)return 1==a.nodeType;if(u.test(b)){for(b=b.toLowerCase().split(/,/),a=a.nodeName.toLowerCase(),c=b.length-1;c>=0;c--)if(b[c]==a)return!0;return!1}}if(a.nodeType&&1!=a.nodeType)return!1;var e=a.nodeType?[a]:a;return d(b,e[0].ownerDocument||e[0],null,e).length>0},add:function(a,b,c,d,e){var f=this;return this.run(a,function(a){var g;return g=q(b,\"string\")?f.doc.createElement(b):b,f.setAttribs(g,c),d&&(d.nodeType?g.appendChild(d):f.setHTML(g,d)),e?g:a.appendChild(g)})},create:function(a,b,c){return this.add(this.doc.createElement(a),a,b,c,1)},createHTML:function(a,b,c){var d,e=\"\";e+=\"<\"+a;for(d in b)b.hasOwnProperty(d)&&null!==b[d]&&\"undefined\"!=typeof b[d]&&(e+=\" \"+d+'=\"'+this.encode(b[d])+'\"');return\"undefined\"!=typeof c?e+\">\"+c+\"</\"+a+\">\":e+\" />\"},createFragment:function(a){var b,c,d,e=this.doc;for(d=e.createElement(\"div\"),b=e.createDocumentFragment(),a&&(d.innerHTML=a);c=d.firstChild;)b.appendChild(c);return b},remove:function(a,b){return a=this.$$(a),b?a.each(function(){for(var a;a=this.firstChild;)3==a.nodeType&&0===a.data.length?this.removeChild(a):this.parentNode.insertBefore(a,this)}).remove():a.remove(),a.length>1?a.toArray():a[0]},setStyle:function(a,b,c){a=this.$$(a).css(b,c),this.settings.update_styles&&m(this,a)},getStyle:function(a,b,c){return a=this.$$(a),c?a.css(b):(b=b.replace(/-(\\D)/g,function(a,b){return b.toUpperCase()}),\"float\"==b&&(b=g.ie&&g.ie<12?\"styleFloat\":\"cssFloat\"),a[0]&&a[0].style?a[0].style[b]:void 0)},setStyles:function(a,b){a=this.$$(a).css(b),this.settings.update_styles&&m(this,a)},removeAllAttribs:function(a){return this.run(a,function(a){var b,c=a.attributes;for(b=c.length-1;b>=0;b--)a.removeAttributeNode(c.item(b))})},setAttrib:function(a,b,c){var d,e,f=this,g=f.settings;\"\"===c&&(c=null),a=f.$$(a),d=a.attr(b),a.length&&(e=f.attrHooks[b],e&&e.set?e.set(a,c,b):a.attr(b,c),d!=c&&g.onSetAttrib&&g.onSetAttrib({attrElm:a,attrName:b,attrValue:c}))},setAttribs:function(a,b){var c=this;c.$$(a).each(function(a,d){p(b,function(a,b){c.setAttrib(d,b,a)})})},getAttrib:function(a,b,c){var d,e,f=this;return a=f.$$(a),a.length&&(d=f.attrHooks[b],e=d&&d.get?d.get(a,b):a.attr(b)),\"undefined\"==typeof e&&(e=c||\"\"),e},getPos:function(b,c){var d,e,f=this,g=0,h=0,i=f.doc,j=i.body;if(b=f.get(b),c=c||j,b){if(c===j&&b.getBoundingClientRect&&\"static\"===a(j).css(\"position\"))return e=b.getBoundingClientRect(),c=f.boxModel?i.documentElement:j,g=e.left+(i.documentElement.scrollLeft||j.scrollLeft)-c.clientLeft,h=e.top+(i.documentElement.scrollTop||j.scrollTop)-c.clientTop,{x:g,y:h};for(d=b;d&&d!=c&&d.nodeType;)g+=d.offsetLeft||0,h+=d.offsetTop||0,d=d.offsetParent;for(d=b.parentNode;d&&d!=c&&d.nodeType;)g-=d.scrollLeft||0,h-=d.scrollTop||0,d=d.parentNode}return{x:g,y:h}},parseStyle:function(a){return this.styles.parse(a)},serializeStyle:function(a,b){return this.styles.serialize(a,b)},addStyle:function(a){var b,c,d=this,e=d.doc;if(d!==o.DOM&&e===document){var f=o.DOM.addedStyles;if(f=f||[],f[a])return;f[a]=!0,o.DOM.addedStyles=f}c=e.getElementById(\"mceDefaultStyles\"),c||(c=e.createElement(\"style\"),c.id=\"mceDefaultStyles\",c.type=\"text/css\",b=e.getElementsByTagName(\"head\")[0],b.firstChild?b.insertBefore(c,b.firstChild):b.appendChild(c)),c.styleSheet?c.styleSheet.cssText+=a:c.appendChild(e.createTextNode(a))},loadCSS:function(a){var b,c=this,d=c.doc;return c!==o.DOM&&d===document?void o.DOM.loadCSS(a):(a||(a=\"\"),b=d.getElementsByTagName(\"head\")[0],void p(a.split(\",\"),function(a){var e;a=k._addCacheSuffix(a),c.files[a]||(c.files[a]=!0,e=c.create(\"link\",{rel:\"stylesheet\",href:a}),t&&d.documentMode&&d.recalc&&(e.onload=function(){d.recalc&&d.recalc(),e.onload=null}),b.appendChild(e))}))},addClass:function(a,b){this.$$(a).addClass(b)},removeClass:function(a,b){this.toggleClass(a,b,!1)},hasClass:function(a,b){return this.$$(a).hasClass(b)},toggleClass:function(b,c,d){this.$$(b).toggleClass(c,d).each(function(){\"\"===this.className&&a(this).attr(\"class\",null)})},show:function(a){this.$$(a).show()},hide:function(a){this.$$(a).hide()},isHidden:function(a){return\"none\"==this.$$(a).css(\"display\")},uniqueId:function(a){return(a?a:\"mce_\")+this.counter++},setHTML:function(b,c){b=this.$$(b),t?b.each(function(b,d){if(d.canHaveHTML!==!1){for(;d.firstChild;)d.removeChild(d.firstChild);try{d.innerHTML=\"<br>\"+c,d.removeChild(d.firstChild)}catch(b){a(\"<div></div>\").html(\"<br>\"+c).contents().slice(1).appendTo(d)}return c}}):b.html(c)},getOuterHTML:function(b){return b=this.get(b),1==b.nodeType&&\"outerHTML\"in b?b.outerHTML:a(\"<div></div>\").append(a(b).clone()).html()},setOuterHTML:function(b,c){var d=this;d.$$(b).each(function(){try{if(\"outerHTML\"in this)return void(this.outerHTML=c)}catch(a){}d.remove(a(this).html(c),!0)})},decode:h.decode,encode:h.encodeAllRaw,insertAfter:function(a,b){return b=this.get(b),this.run(a,function(a){var c,d;return c=b.parentNode,d=b.nextSibling,d?c.insertBefore(a,d):c.appendChild(a),a})},replace:function(a,b,c){var d=this;return d.run(b,function(b){return q(b,\"array\")&&(a=a.cloneNode(!0)),c&&p(r(b.childNodes),function(b){a.appendChild(b)}),b.parentNode.replaceChild(a,b)})},rename:function(a,b){var c,d=this;return a.nodeName!=b.toUpperCase()&&(c=d.create(b),p(d.getAttribs(a),function(b){d.setAttrib(c,b.nodeName,d.getAttrib(a,b.nodeName))}),d.replace(c,a,1)),c||a},findCommonAncestor:function(a,b){for(var c,d=a;d;){for(c=b;c&&d!=c;)c=c.parentNode;if(d==c)break;d=d.parentNode}return!d&&a.ownerDocument?a.ownerDocument.documentElement:d},toHex:function(a){return this.styles.toHex(k.trim(a))},run:function(a,b,c){var d,e=this;return\"string\"==typeof a&&(a=e.get(a)),!!a&&(c=c||this,a.nodeType||!a.length&&0!==a.length?b.call(c,a):(d=[],p(a,function(a,f){a&&(\"string\"==typeof a&&(a=e.get(a)),d.push(b.call(c,a,f)))}),d))},getAttribs:function(a){var b;if(a=this.get(a),!a)return[];if(t){if(b=[],\"OBJECT\"==a.nodeName)return a.attributes;\"OPTION\"===a.nodeName&&this.getAttrib(a,\"selected\")&&b.push({specified:1,nodeName:\"selected\"});var c=/<\\/?[\\w:\\-]+ ?|=[\\\"][^\\\"]+\\\"|=\\'[^\\']+\\'|=[\\w\\-]+|>/gi;return a.cloneNode(!1).outerHTML.replace(c,\"\").replace(/[\\w:\\-]+/gi,function(a){b.push({specified:1,nodeName:a})}),b}return a.attributes},isEmpty:function(a,b){var c,d,e,g,h,i,j=this,k=0;if(a=a.firstChild){h=new f(a,a.parentNode),b=b||(j.schema?j.schema.getNonEmptyElements():null),g=j.schema?j.schema.getWhiteSpaceElements():{};do{if(e=a.nodeType,1===e){var l=a.getAttribute(\"data-mce-bogus\");if(l){a=h.next(\"all\"===l);continue}if(i=a.nodeName.toLowerCase(),b&&b[i]){if(\"br\"===i){k++,a=h.next();continue}return!1}for(d=j.getAttribs(a),c=d.length;c--;)if(i=d[c].nodeName,\"name\"===i||\"data-mce-bookmark\"===i)return!1}if(8==e)return!1;if(3===e&&!v.test(a.nodeValue))return!1;if(3===e&&a.parentNode&&g[a.parentNode.nodeName]&&v.test(a.nodeValue))return!1;a=h.next()}while(a)}return k<=1},createRng:function(){var a=this.doc;return a.createRange?a.createRange():new c(this)},nodeIndex:n,split:function(a,b,c){function d(a){function b(a){var b=a.previousSibling&&\"SPAN\"==a.previousSibling.nodeName,c=a.nextSibling&&\"SPAN\"==a.nextSibling.nodeName;return b&&c}var c,e=a.childNodes,f=a.nodeType;if(1!=f||\"bookmark\"!=a.getAttribute(\"data-mce-type\")){for(c=e.length-1;c>=0;c--)d(e[c]);if(9!=f){if(3==f&&a.nodeValue.length>0){var g=s(a.nodeValue).length;if(!h.isBlock(a.parentNode)||g>0||0===g&&b(a))return}else if(1==f&&(e=a.childNodes,1==e.length&&e[0]&&1==e[0].nodeType&&\"bookmark\"==e[0].getAttribute(\"data-mce-type\")&&a.parentNode.insertBefore(e[0],a),e.length||/^(br|hr|input|img)$/i.test(a.nodeName)))return;h.remove(a)}return a}}var e,f,g,h=this,i=h.createRng();if(a&&b)return i.setStart(a.parentNode,h.nodeIndex(a)),i.setEnd(b.parentNode,h.nodeIndex(b)),e=i.extractContents(),i=h.createRng(),i.setStart(b.parentNode,h.nodeIndex(b)+1),i.setEnd(a.parentNode,h.nodeIndex(a)+1),f=i.extractContents(),g=a.parentNode,g.insertBefore(d(e),a),c?g.insertBefore(c,a):g.insertBefore(b,a),g.insertBefore(d(f),a),h.remove(a),c||b},bind:function(a,b,c,d){var e=this;if(k.isArray(a)){for(var f=a.length;f--;)a[f]=e.bind(a[f],b,c,d);return a}return!e.settings.collect||a!==e.doc&&a!==e.win||e.boundEvents.push([a,b,c,d]),e.events.bind(a,b,c,d||e)},unbind:function(a,b,c){var d,e=this;if(k.isArray(a)){for(d=a.length;d--;)a[d]=e.unbind(a[d],b,c);return a}if(e.boundEvents&&(a===e.doc||a===e.win))for(d=e.boundEvents.length;d--;){var f=e.boundEvents[d];a!=f[0]||b&&b!=f[1]||c&&c!=f[2]||this.events.unbind(f[0],f[1],f[2])}return this.events.unbind(a,b,c)},fire:function(a,b,c){return this.events.fire(a,b,c)},getContentEditable:function(a){var b;return a&&1==a.nodeType?(b=a.getAttribute(\"data-mce-contenteditable\"),b&&\"inherit\"!==b?b:\"inherit\"!==a.contentEditable?a.contentEditable:null):null},getContentEditableParent:function(a){for(var b=this.getRoot(),c=null;a&&a!==b&&(c=this.getContentEditable(a),null===c);a=a.parentNode);return c},destroy:function(){var a=this;if(a.boundEvents){for(var b=a.boundEvents.length;b--;){var c=a.boundEvents[b];this.events.unbind(c[0],c[1],c[2])}a.boundEvents=null}d.setDocument&&d.setDocument(),a.win=a.doc=a.root=a.events=a.frag=null},isChildOf:function(a,b){for(;a;){if(b===a)return!0;a=a.parentNode}return!1},dumpRng:function(a){return\"startContainer: \"+a.startContainer.nodeName+\", startOffset: \"+a.startOffset+\", endContainer: \"+a.endContainer.nodeName+\", endOffset: \"+a.endOffset},_findSib:function(a,b,c){var d=this,e=b;if(a)for(\"string\"==typeof e&&(e=function(a){return d.is(a,b)}),a=a[c];a;a=a[c])if(e(a))return a;return null}},o.DOM=new o(document),o.nodeIndex=n,o}),g(\"f\",[\"e\",\"9\"],function(a,b){function c(){function a(a,c,e){function f(){k.remove(j),i&&(i.onreadystatechange=i.onload=i=null),c()}function h(){g(e)?e():\"undefined\"!=typeof console&&console.log&&console.log(\"Failed to load script: \"+a)}var i,j,k=d;j=k.uniqueId(),i=document.createElement(\"script\"),i.id=j,i.type=\"text/javascript\",i.src=b._addCacheSuffix(a),\"onreadystatechange\"in i?i.onreadystatechange=function(){/loaded|complete/.test(i.readyState)&&f()}:i.onload=f,i.onerror=h,(document.getElementsByTagName(\"head\")[0]||document.body).appendChild(i)}var c,h=0,i=1,j=2,k=3,l={},m=[],n={},o=[],p=0;this.isDone=function(a){return l[a]==j},this.markDone=function(a){l[a]=j},this.add=this.load=function(a,b,d,e){var f=l[a];f==c&&(m.push(a),l[a]=h),b&&(n[a]||(n[a]=[]),n[a].push({success:b,failure:e,scope:d||this}))},this.remove=function(a){delete l[a],delete n[a]},this.loadQueue=function(a,b,c){this.loadScripts(m,a,b,c)},this.loadScripts=function(b,d,h,m){function q(a,b){e(n[b],function(b){g(b[a])&&b[a].call(b.scope)}),n[b]=c}var r,s=[];o.push({success:d,failure:m,scope:h||this}),(r=function(){var c=f(b);b.length=0,e(c,function(b){return l[b]===j?void q(\"success\",b):l[b]===k?void q(\"failure\",b):void(l[b]!==i&&(l[b]=i,p++,a(b,function(){l[b]=j,p--,q(\"success\",b),r()},function(){l[b]=k,p--,s.push(b),q(\"failure\",b),r()})))}),p||(e(o,function(a){0===s.length?g(a.success)&&a.success.call(a.scope):g(a.failure)&&a.failure.call(a.scope,s)}),o.length=0)})()}}var d=a.DOM,e=b.each,f=b.grep,g=function(a){return\"function\"==typeof a};return c.ScriptLoader=new c,c}),g(\"g\",[\"f\",\"9\"],function(a,b){function c(){var a=this;a.items=[],a.urls={},a.lookup={}}var d=b.each;return c.prototype={get:function(a){if(this.lookup[a])return this.lookup[a].instance},dependencies:function(a){var b;return this.lookup[a]&&(b=this.lookup[a].dependencies),b||[]},requireLangPack:function(b,d){var e=c.language;if(e&&c.languageLoad!==!1){if(d)if(d=\",\"+d+\",\",d.indexOf(\",\"+e.substr(0,2)+\",\")!=-1)e=e.substr(0,2);else if(d.indexOf(\",\"+e+\",\")==-1)return;a.ScriptLoader.add(this.urls[b]+\"/langs/\"+e+\".js\")}},add:function(a,b,c){return this.items.push(b),this.lookup[a]={instance:b,dependencies:c},b},remove:function(a){delete this.urls[a],delete this.lookup[a]},createUrl:function(a,b){return\"object\"==typeof b?b:{prefix:a.prefix,resource:b,suffix:a.suffix}},addComponents:function(b,c){var e=this.urls[b];d(c,function(b){a.ScriptLoader.add(e+\"/\"+b)})},load:function(b,e,f,g,h){function i(){var c=j.dependencies(b);d(c,function(a){var b=j.createUrl(e,a);j.load(b.resource,b,void 0,void 0)}),f&&(g?f.call(g):f.call(a))}var j=this,k=e;j.urls[b]||(\"object\"==typeof e&&(k=e.prefix+e.resource+e.suffix),0!==k.indexOf(\"/\")&&k.indexOf(\"://\")==-1&&(k=c.baseURL+\"/\"+k),j.urls[b]=k.substring(0,k.lastIndexOf(\"/\")),j.lookup[b]?i():a.ScriptLoader.add(k,i,g,h))}},c.PluginManager=new c,c.ThemeManager=new c,c}),g(\"1j\",[],function(){function a(a){return function(b){return!!b&&b.nodeType==a}}function b(a){return a=a.toLowerCase().split(\" \"),function(b){var c,d;if(b&&b.nodeType)for(d=b.nodeName.toLowerCase(),c=0;c<a.length;c++)if(d===a[c])return!0;return!1}}function c(a,b){return b=b.toLowerCase().split(\" \"),function(c){var d,e;if(i(c))for(d=0;d<b.length;d++)if(e=c.ownerDocument.defaultView.getComputedStyle(c,null).getPropertyValue(a),e===b[d])return!0;return!1}}function d(a,b){return function(c){return i(c)&&c[a]===b}}function e(a,b){return function(b){return i(b)&&b.hasAttribute(a)}}function f(a,b){return function(c){return i(c)&&c.getAttribute(a)===b}}function g(a){return i(a)&&a.hasAttribute(\"data-mce-bogus\")}function h(a){return function(b){if(i(b)){if(b.contentEditable===a)return!0;if(b.getAttribute(\"data-mce-contenteditable\")===a)return!0}return!1}}var i=a(1);return{isText:a(3),isElement:i,isComment:a(8),isBr:b(\"br\"),isContentEditableTrue:h(\"true\"),isContentEditableFalse:h(\"false\"),matchNodeNames:b,hasPropValue:d,hasAttribute:e,hasAttributeValue:f,matchStyleValues:c,isBogus:g}}),g(\"1l\",[],function(){var a=\"\\ufeff\",b=function(b){return b===a},c=function(b){return b.replace(new RegExp(a,\"g\"),\"\")};return{isZwsp:b,ZWSP:a,trim:c}}),g(\"1k\",[\"1j\",\"1l\"],function(a,b){function c(a){return n(a)&&(a=a.parentNode),m(a)&&a.hasAttribute(\"data-mce-caret\")}function d(a){return n(a)&&b.isZwsp(a.data)}function e(a){return c(a)||d(a)}function f(a,c){var d,f,g,h;if(d=a.ownerDocument,g=d.createTextNode(b.ZWSP),h=a.parentNode,c){if(f=a.previousSibling,n(f)){if(e(f))return f;if(j(f))return f.splitText(f.data.length-1)}h.insertBefore(g,a)}else{if(f=a.nextSibling,n(f)){if(e(f))return f;if(i(f))return f.splitText(1),f}a.nextSibling?h.insertBefore(g,a.nextSibling):h.appendChild(g)}return g}function g(){var a=document.createElement(\"br\");return a.setAttribute(\"data-mce-bogus\",\"1\"),a}function h(a,b,c){var d,e,f;return d=b.ownerDocument,e=d.createElement(a),e.setAttribute(\"data-mce-caret\",c?\"before\":\"after\"),e.setAttribute(\"data-mce-bogus\",\"all\"),e.appendChild(g()),f=b.parentNode,c?f.insertBefore(e,b):b.nextSibling?f.insertBefore(e,b.nextSibling):f.appendChild(e),e}function i(a){return n(a)&&a.data[0]==b.ZWSP}function j(a){return n(a)&&a.data[a.data.length-1]==b.ZWSP}function k(b){var c=b.getElementsByTagName(\"br\"),d=c[c.length-1];a.isBogus(d)&&d.parentNode.removeChild(d)}function l(a){return a&&a.hasAttribute(\"data-mce-caret\")?(k(a),a.removeAttribute(\"data-mce-caret\"),a.removeAttribute(\"data-mce-bogus\"),a.removeAttribute(\"style\"),a.removeAttribute(\"_moz_abspos\"),a):null}var m=a.isElement,n=a.isText,o=function(b){return b.firstChild!==b.lastChild||!a.isBr(b.firstChild)},p=function(c){if(a.isText(c)){var d=c.data;return d.length>0&&d.charAt(0)!==b.ZWSP&&c.insertData(0,b.ZWSP),c}return null},q=function(c){if(a.isText(c)){var d=c.data;return d.length>0&&d.charAt(d.length-1)!==b.ZWSP&&c.insertData(d.length,b.ZWSP),c}return null},r=function(c){return c&&a.isText(c.container())&&c.container().data.charAt(c.offset())===b.ZWSP},s=function(c){return c&&a.isText(c.container())&&c.container().data.charAt(c.offset()-1)===b.ZWSP};return{isCaretContainer:e,isCaretContainerBlock:c,isCaretContainerInline:d,showCaretContainerBlock:l,insertInline:f,prependInline:p,appendInline:q,isBeforeInline:r,\nisAfterInline:s,insertBlock:h,hasContent:o,startsWithCaretContainer:i,endsWithCaretContainer:j}}),g(\"h\",[\"9\",\"c\",\"1j\",\"1h\",\"1k\"],function(a,b,c,d,e){function f(a){return q(a)||r(a)}function g(a,b){var c=a.childNodes;return b--,b>c.length-1?b=c.length-1:b<0&&(b=0),c[b]||a}function h(a,b,c){for(;a&&a!==b;){if(c(a))return a;a=a.parentNode}return null}function i(a,b,c){return null!==h(a,b,c)}function j(a,b,c){return i(a,b,function(a){return a.nodeName===c})}function k(a){return\"_mce_caret\"===a.id}function l(a,b){return s(a)&&i(a,b,k)===!1}function m(a){this.walk=function(b,c){function d(a){var b;return b=a[0],3===b.nodeType&&b===q&&r>=b.nodeValue.length&&a.splice(0,1),b=a[a.length-1],0===t&&a.length>0&&b===s&&3===b.nodeType&&a.splice(a.length-1,1),a}function e(a,b,c){for(var d=[];a&&a!=c;a=a[b])d.push(a);return d}function f(a,b){do{if(a.parentNode==b)return a;a=a.parentNode}while(a)}function h(a,b,f){var g=f?\"nextSibling\":\"previousSibling\";for(l=a,m=l.parentNode;l&&l!=b;l=m)m=l.parentNode,n=e(l==a?l:l[g],g),n.length&&(f||n.reverse(),c(d(n)))}var i,j,k,l,m,n,o,q=b.startContainer,r=b.startOffset,s=b.endContainer,t=b.endOffset;if(o=a.select(\"td[data-mce-selected],th[data-mce-selected]\"),o.length>0)return void p(o,function(a){c([a])});if(1==q.nodeType&&q.hasChildNodes()&&(q=q.childNodes[r]),1==s.nodeType&&s.hasChildNodes()&&(s=g(s,t)),q==s)return c(d([q]));for(i=a.findCommonAncestor(q,s),l=q;l;l=l.parentNode){if(l===s)return h(q,i,!0);if(l===i)break}for(l=s;l;l=l.parentNode){if(l===q)return h(s,i);if(l===i)break}j=f(q,i)||q,k=f(s,i)||s,h(q,j,!0),n=e(j==q?j:j.nextSibling,\"nextSibling\",k==s?k.nextSibling:k),n.length&&c(d(n)),h(s,k)},this.split=function(a){function b(a,b){return a.splitText(b)}var c=a.startContainer,d=a.startOffset,e=a.endContainer,f=a.endOffset;return c==e&&3==c.nodeType?d>0&&d<c.nodeValue.length&&(e=b(c,d),c=e.previousSibling,f>d?(f-=d,c=e=b(e,f).previousSibling,f=e.nodeValue.length,d=0):f=0):(3==c.nodeType&&d>0&&d<c.nodeValue.length&&(c=b(c,d),d=0),3==e.nodeType&&f>0&&f<e.nodeValue.length&&(e=b(e,f).previousSibling,f=e.nodeValue.length)),{startContainer:c,startOffset:d,endContainer:e,endOffset:f}},this.normalize=function(c){function d(d){function g(a){return a&&/^(TD|TH|CAPTION)$/.test(a.nodeName)}function h(c,d){for(var e=new b(c,a.getParent(c.parentNode,a.isBlock)||w);c=e[d?\"prev\":\"next\"]();)if(\"BR\"===c.nodeName)return!0}function i(a){for(;a&&a!=w;){if(r(a))return!0;a=a.parentNode}return!1}function k(a,b){return a.previousSibling&&a.previousSibling.nodeName==b}function m(c,d){var g,h,i;if(d=d||n,i=a.getParent(d.parentNode,a.isBlock)||w,c&&\"BR\"==d.nodeName&&v&&a.isEmpty(i))return n=d.parentNode,o=a.nodeIndex(d),void(f=!0);for(g=new b(d,i);q=g[c?\"prev\":\"next\"]();){if(\"false\"===a.getContentEditableParent(q)||l(q,a.getRoot()))return;if(3===q.nodeType&&q.nodeValue.length>0)return void(j(q,w,\"A\")===!1&&(n=q,o=c?q.nodeValue.length:0,f=!0));if(a.isBlock(q)||t[q.nodeName.toLowerCase()])return;h=q}e&&h&&(n=h,f=!0,o=0)}var n,o,p,q,t,u,v,w=a.getRoot();if(n=c[(d?\"start\":\"end\")+\"Container\"],o=c[(d?\"start\":\"end\")+\"Offset\"],v=1==n.nodeType&&o===n.childNodes.length,t=a.schema.getNonEmptyElements(),u=d,!s(n)){if(1==n.nodeType&&o>n.childNodes.length-1&&(u=!1),9===n.nodeType&&(n=a.getRoot(),o=0),n===w){if(u&&(q=n.childNodes[o>0?o-1:0])){if(s(q))return;if(t[q.nodeName]||\"TABLE\"==q.nodeName)return}if(n.hasChildNodes()){if(o=Math.min(!u&&o>0?o-1:o,n.childNodes.length-1),n=n.childNodes[o],o=0,!e&&n===w.lastChild&&\"TABLE\"===n.nodeName)return;if(i(n)||s(n))return;if(n.hasChildNodes()&&!/TABLE/.test(n.nodeName)){q=n,p=new b(n,w);do{if(r(q)||s(q)){f=!1;break}if(3===q.nodeType&&q.nodeValue.length>0){o=u?0:q.nodeValue.length,n=q,f=!0;break}if(t[q.nodeName.toLowerCase()]&&!g(q)){o=a.nodeIndex(q),n=q.parentNode,\"IMG\"!=q.nodeName||u||o++,f=!0;break}}while(q=u?p.next():p.prev())}}}e&&(3===n.nodeType&&0===o&&m(!0),1===n.nodeType&&(q=n.childNodes[o],q||(q=n.childNodes[o-1]),!q||\"BR\"!==q.nodeName||k(q,\"A\")||h(q)||h(q,!0)||m(!0,q))),u&&!e&&3===n.nodeType&&o===n.nodeValue.length&&m(!1),f&&c[\"set\"+(d?\"Start\":\"End\")](n,o)}}var e,f=!1;return e=c.collapsed,d(!0),e||d(),f&&e&&c.collapse(!0),f}}function n(b,c,d){var e,f,g;if(e=d.elementFromPoint(b,c),f=d.body.createTextRange(),e&&\"HTML\"!=e.tagName||(e=d.body),f.moveToElementText(e),g=a.toArray(f.getClientRects()),g=g.sort(function(a,b){return a=Math.abs(Math.max(a.top-c,a.bottom-c)),b=Math.abs(Math.max(b.top-c,b.bottom-c)),a-b}),g.length>0){c=(g[0].bottom+g[0].top)/2;try{return f.moveToPoint(b,c),f.collapse(!0),f}catch(a){}}return null}function o(a,b){var c=a&&a.parentElement?a.parentElement():null;return r(h(c,b,f))?null:a}var p=a.each,q=c.isContentEditableTrue,r=c.isContentEditableFalse,s=e.isCaretContainer;return m.compareRanges=function(a,b){if(a&&b){if(!a.item&&!a.duplicate)return a.startContainer==b.startContainer&&a.startOffset==b.startOffset;if(a.item&&b.item&&a.item(0)===b.item(0))return!0;if(a.isEqual&&b.isEqual&&b.isEqual(a))return!0}return!1},m.getCaretRangeFromPoint=function(a,b,c){var d,e;if(c.caretPositionFromPoint)e=c.caretPositionFromPoint(a,b),d=c.createRange(),d.setStart(e.offsetNode,e.offset),d.collapse(!0);else if(c.caretRangeFromPoint)d=c.caretRangeFromPoint(a,b);else if(c.body.createTextRange){d=c.body.createTextRange();try{d.moveToPoint(a,b),d.collapse(!0)}catch(e){d=n(a,b,c)}return o(d,c.body)}return d},m.getSelectedNode=function(a){var b=a.startContainer,c=a.startOffset;return b.hasChildNodes()&&a.endOffset==c+1?b.childNodes[c]:null},m.getNode=function(a,b){return 1==a.nodeType&&a.hasChildNodes()&&(b>=a.childNodes.length&&(b=a.childNodes.length-1),a=a.childNodes[b]),a},m}),g(\"i\",[],function(){function a(a,b,c){var d,e,f=c?\"lastChild\":\"firstChild\",g=c?\"prev\":\"next\";if(a[f])return a[f];if(a!==b){if(d=a[g])return d;for(e=a.parent;e&&e!==b;e=e.parent)if(d=e[g])return d}}function b(a,b){this.name=a,this.type=b,1===b&&(this.attributes=[],this.attributes.map={})}var c=/^[ \\t\\r\\n]*$/,d={\"#text\":3,\"#comment\":8,\"#cdata\":4,\"#pi\":7,\"#doctype\":10,\"#document-fragment\":11};return b.prototype={replace:function(a){var b=this;return a.parent&&a.remove(),b.insert(a,b),b.remove(),b},attr:function(a,b){var c,d,e,f=this;if(\"string\"!=typeof a){for(d in a)f.attr(d,a[d]);return f}if(c=f.attributes){if(b!==e){if(null===b){if(a in c.map)for(delete c.map[a],d=c.length;d--;)if(c[d].name===a)return c=c.splice(d,1),f;return f}if(a in c.map){for(d=c.length;d--;)if(c[d].name===a){c[d].value=b;break}}else c.push({name:a,value:b});return c.map[a]=b,f}return c.map[a]}},clone:function(){var a,c,d,e,f,g=this,h=new b(g.name,g.type);if(d=g.attributes){for(f=[],f.map={},a=0,c=d.length;a<c;a++)e=d[a],\"id\"!==e.name&&(f[f.length]={name:e.name,value:e.value},f.map[e.name]=e.value);h.attributes=f}return h.value=g.value,h.shortEnded=g.shortEnded,h},wrap:function(a){var b=this;return b.parent.insert(a,b),a.append(b),b},unwrap:function(){var a,b,c=this;for(a=c.firstChild;a;)b=a.next,c.insert(a,c,!0),a=b;c.remove()},remove:function(){var a=this,b=a.parent,c=a.next,d=a.prev;return b&&(b.firstChild===a?(b.firstChild=c,c&&(c.prev=null)):d.next=c,b.lastChild===a?(b.lastChild=d,d&&(d.next=null)):c.prev=d,a.parent=a.next=a.prev=null),a},append:function(a){var b,c=this;return a.parent&&a.remove(),b=c.lastChild,b?(b.next=a,a.prev=b,c.lastChild=a):c.lastChild=c.firstChild=a,a.parent=c,a},insert:function(a,b,c){var d;return a.parent&&a.remove(),d=b.parent||this,c?(b===d.firstChild?d.firstChild=a:b.prev.next=a,a.prev=b.prev,a.next=b,b.prev=a):(b===d.lastChild?d.lastChild=a:b.next.prev=a,a.next=b.next,a.prev=b,b.next=a),a.parent=d,a},getAll:function(b){var c,d=this,e=[];for(c=d.firstChild;c;c=a(c,d))c.name===b&&e.push(c);return e},empty:function(){var b,c,d,e=this;if(e.firstChild){for(b=[],d=e.firstChild;d;d=a(d,e))b.push(d);for(c=b.length;c--;)d=b[c],d.parent=d.firstChild=d.lastChild=d.next=d.prev=null}return e.firstChild=e.lastChild=null,e},isEmpty:function(b,d){var e,f,g=this,h=g.firstChild;if(d=d||{},h)do{if(1===h.type){if(h.attributes.map[\"data-mce-bogus\"])continue;if(b[h.name])return!1;for(e=h.attributes.length;e--;)if(f=h.attributes[e].name,\"name\"===f||0===f.indexOf(\"data-mce-bookmark\"))return!1}if(8===h.type)return!1;if(3===h.type&&!c.test(h.value))return!1;if(3===h.type&&h.parent&&d[h.parent.name]&&c.test(h.value))return!1}while(h=a(h,g));return!0},walk:function(b){return a(this,null,b)}},b.create=function(a,c){var e,f;if(e=new b(a,d[a]||1),c)for(f in c)e.attr(f,c[f]);return e},b}),g(\"k\",[\"j\",\"d\",\"9\"],function(a,b,c){function d(a,b,c){var d,e,f,g,h=1;for(g=a.getShortEndedElements(),f=/<([!?\\/])?([A-Za-z0-9\\-_\\:\\.]+)((?:\\s+[^\"\\'>]+(?:(?:\"[^\"]*\")|(?:\\'[^\\']*\\')|[^>]*))*|\\/|\\s+)>/g,f.lastIndex=d=c;e=f.exec(b);){if(d=f.lastIndex,\"/\"===e[1])h--;else if(!e[1]){if(e[2]in g)continue;h++}if(0===h)break}return d}function e(e,i){function j(){}var k=this;e=e||{},k.schema=i=i||new a,e.fix_self_closing!==!1&&(e.fix_self_closing=!0),f(\"comment cdata text start end pi doctype\".split(\" \"),function(a){a&&(k[a]=e[a]||j)}),k.parse=function(a){function f(a){var b,c;for(b=Q.length;b--&&Q[b].name!==a;);if(b>=0){for(c=Q.length-1;c>=b;c--)a=Q[c],a.valid&&O.end(a.name);Q.length=b}}function j(a,b,c,d,f){var h,i,j=/[\\s\\u0000-\\u001F]+/g;if(b=b.toLowerCase(),c=b in u?b:S(c||d||f||\"\"),w&&!r&&g(b)===!1){if(h=B[b],!h&&C){for(i=C.length;i--&&(h=C[i],!h.pattern.test(b)););i===-1&&(h=null)}if(!h)return;if(h.validValues&&!(c in h.validValues))return}if(T[b]&&!e.allow_script_urls){var k=c.replace(j,\"\");try{k=decodeURIComponent(k)}catch(a){k=unescape(k)}if(U.test(k))return;if(!e.allow_html_data_urls&&V.test(k)&&!/^data:image\\//i.test(k))return}r&&(b in T||0===b.indexOf(\"on\"))||(n.map[b]=c,n.push({name:b,value:c}))}var k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O=this,P=0,Q=[],R=0,S=b.decode,T=c.makeMap(\"src,href,data,background,formaction,poster\"),U=/((java|vb)script|mhtml):/i,V=/^data:/i;for(J=new RegExp(\"<(?:(?:!--([\\\\w\\\\W]*?)-->)|(?:!\\\\[CDATA\\\\[([\\\\w\\\\W]*?)\\\\]\\\\]>)|(?:!DOCTYPE([\\\\w\\\\W]*?)>)|(?:\\\\?([^\\\\s\\\\/<>]+) ?([\\\\w\\\\W]*?)[?/]>)|(?:\\\\/([A-Za-z][A-Za-z0-9\\\\-_\\\\:\\\\.]*)>)|(?:([A-Za-z][A-Za-z0-9\\\\-_\\\\:\\\\.]*)((?:\\\\s+[^\\\"'>]+(?:(?:\\\"[^\\\"]*\\\")|(?:'[^']*')|[^>]*))*|\\\\/|\\\\s+)>))\",\"g\"),K=/([\\w:\\-]+)(?:\\s*=\\s*(?:(?:\\\"((?:[^\\\"])*)\\\")|(?:\\'((?:[^\\'])*)\\')|([^>\\s]+)))?/g,t=i.getShortEndedElements(),I=e.self_closing_elements||i.getSelfClosingElements(),u=i.getBoolAttrs(),w=e.validate,s=e.remove_internals,N=e.fix_self_closing,L=i.getSpecialElements(),G=a+\">\";k=J.exec(G);){if(P<k.index&&O.text(S(a.substr(P,k.index-P))),l=k[6])l=l.toLowerCase(),\":\"===l.charAt(0)&&(l=l.substr(1)),f(l);else if(l=k[7]){if(k.index+k[0].length>a.length){O.text(S(a.substr(k.index))),P=k.index+k[0].length;continue}if(l=l.toLowerCase(),\":\"===l.charAt(0)&&(l=l.substr(1)),v=l in t,N&&I[l]&&Q.length>0&&Q[Q.length-1].name===l&&f(l),!w||(x=i.getElementRule(l))){if(y=!0,w&&(B=x.attributes,C=x.attributePatterns),(A=k[8])?(r=A.indexOf(\"data-mce-type\")!==-1,r&&s&&(y=!1),n=[],n.map={},A.replace(K,j)):(n=[],n.map={}),w&&!r){if(D=x.attributesRequired,E=x.attributesDefault,F=x.attributesForced,H=x.removeEmptyAttrs,H&&!n.length&&(y=!1),F)for(o=F.length;o--;)z=F[o],q=z.name,M=z.value,\"{$uid}\"===M&&(M=\"mce_\"+R++),n.map[q]=M,n.push({name:q,value:M});if(E)for(o=E.length;o--;)z=E[o],q=z.name,q in n.map||(M=z.value,\"{$uid}\"===M&&(M=\"mce_\"+R++),n.map[q]=M,n.push({name:q,value:M}));if(D){for(o=D.length;o--&&!(D[o]in n.map););o===-1&&(y=!1)}if(z=n.map[\"data-mce-bogus\"]){if(\"all\"===z){P=d(i,a,J.lastIndex),J.lastIndex=P;continue}y=!1}}y&&O.start(l,n,v)}else y=!1;if(m=L[l]){m.lastIndex=P=k.index+k[0].length,(k=m.exec(a))?(y&&(p=a.substr(P,k.index-P)),P=k.index+k[0].length):(p=a.substr(P),P=a.length),y&&(p.length>0&&O.text(p,!0),O.end(l)),J.lastIndex=P;continue}v||(A&&A.indexOf(\"/\")==A.length-1?y&&O.end(l):Q.push({name:l,valid:y}))}else(l=k[1])?(\">\"===l.charAt(0)&&(l=\" \"+l),e.allow_conditional_comments||\"[if\"!==l.substr(0,3).toLowerCase()||(l=\" \"+l),O.comment(l)):(l=k[2])?O.cdata(h(l)):(l=k[3])?O.doctype(l):(l=k[4])&&O.pi(l,k[5]);P=k.index+k[0].length}for(P<a.length&&O.text(S(a.substr(P))),o=Q.length-1;o>=0;o--)l=Q[o],l.valid&&O.end(l.name)}}var f=c.each,g=function(a){return 0===a.indexOf(\"data-\")||0===a.indexOf(\"aria-\")},h=function(a){return a.replace(/<!--|-->/g,\"\")};return e.findEndTag=d,e}),g(\"l\",[\"i\",\"j\",\"k\",\"9\"],function(a,b,c,d){var e=d.makeMap,f=d.each,g=d.explode,h=d.extend,i=function(b,c){b.padd_empty_with_br?c.empty().append(new a(\"br\",\"1\")).shortEnded=!0:c.empty().append(new a(\"#text\",\"3\")).value=\"\\xa0\"},j=function(a,b){return a&&a.firstChild===a.lastChild&&a.firstChild.name===b};return function(k,l){function m(b){var c,d,f,g,h,i,k,m,o,p,q,r,s,t,u,v;for(r=e(\"tr,td,th,tbody,thead,tfoot,table\"),p=l.getNonEmptyElements(),q=l.getWhiteSpaceElements(),s=l.getTextBlockElements(),t=l.getSpecialElements(),c=0;c<b.length;c++)if(d=b[c],d.parent&&!d.fixed)if(s[d.name]&&\"li\"==d.parent.name){for(u=d.next;u&&s[u.name];)u.name=\"li\",u.fixed=!0,d.parent.insert(u,d.parent),u=u.next;d.unwrap(d)}else{for(g=[d],f=d.parent;f&&!l.isValidChild(f.name,d.name)&&!r[f.name];f=f.parent)g.push(f);if(f&&g.length>1){for(g.reverse(),h=i=n.filterNode(g[0].clone()),o=0;o<g.length-1;o++){for(l.isValidChild(i.name,g[o].name)?(k=n.filterNode(g[o].clone()),i.append(k)):k=i,m=g[o].firstChild;m&&m!=g[o+1];)v=m.next,k.append(m),m=v;i=k}h.isEmpty(p,q)?f.insert(d,g[0],!0):(f.insert(h,g[0],!0),f.insert(d,h)),f=g[0],(f.isEmpty(p,q)||j(f,\"br\"))&&f.empty().remove()}else if(d.parent){if(\"li\"===d.name){if(u=d.prev,u&&(\"ul\"===u.name||\"ul\"===u.name)){u.append(d);continue}if(u=d.next,u&&(\"ul\"===u.name||\"ul\"===u.name)){u.insert(d,u.firstChild,!0);continue}d.wrap(n.filterNode(new a(\"ul\",1)));continue}l.isValidChild(d.parent.name,\"div\")&&l.isValidChild(\"div\",d.name)?d.wrap(n.filterNode(new a(\"div\",1))):t[d.name]?d.empty().remove():d.unwrap()}}}var n=this,o={},p=[],q={},r={};k=k||{},k.validate=!(\"validate\"in k)||k.validate,k.root_name=k.root_name||\"body\",n.schema=l=l||new b,n.filterNode=function(a){var b,c,d;c in o&&(d=q[c],d?d.push(a):q[c]=[a]),b=p.length;for(;b--;)c=p[b].name,c in a.attributes.map&&(d=r[c],d?d.push(a):r[c]=[a]);return a},n.addNodeFilter=function(a,b){f(g(a),function(a){var c=o[a];c||(o[a]=c=[]),c.push(b)})},n.addAttributeFilter=function(a,b){f(g(a),function(a){var c;for(c=0;c<p.length;c++)if(p[c].name===a)return void p[c].callbacks.push(b);p.push({name:a,callbacks:[b]})})},n.parse=function(b,d){function f(){function a(a){a&&(d=a.firstChild,d&&3==d.type&&(d.value=d.value.replace(E,\"\")),d=a.lastChild,d&&3==d.type&&(d.value=d.value.replace(G,\"\")))}var b,c,d=t.firstChild;if(l.isValidChild(t.name,M.toLowerCase())){for(;d;)b=d.next,3==d.type||1==d.type&&\"p\"!==d.name&&!D[d.name]&&!d.attr(\"data-mce-type\")?c?c.append(d):(c=g(M,1),c.attr(k.forced_root_block_attrs),t.insert(c,d),c.append(d)):(a(c),c=null),d=b;a(c)}}function g(b,c){var d,e=new a(b,c);return b in o&&(d=q[b],d?d.push(e):q[b]=[e]),e}function j(a){var b,c,d,e,f=l.getBlockElements();for(b=a.prev;b&&3===b.type;){if(d=b.value.replace(G,\"\"),d.length>0)return void(b.value=d);if(c=b.next){if(3==c.type&&c.value.length){b=b.prev;continue}if(!f[c.name]&&\"script\"!=c.name&&\"style\"!=c.name){b=b.prev;continue}}e=b.prev,b.remove(),b=e}}function n(a){var b,c={};for(b in a)\"li\"!==b&&\"p\"!=b&&(c[b]=a[b]);return c}var s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N=[];if(d=d||{},q={},r={},D=h(e(\"script,style,head,html,body,title,meta,param\"),l.getBlockElements()),L=l.getNonEmptyElements(),K=l.children,C=k.validate,M=\"forced_root_block\"in d?d.forced_root_block:k.forced_root_block,J=l.getWhiteSpaceElements(),E=/^[ \\t\\r\\n]+/,G=/[ \\t\\r\\n]+$/,H=/[ \\t\\r\\n]+/g,I=/^[ \\t\\r\\n]+$/,s=new c({validate:C,allow_script_urls:k.allow_script_urls,allow_conditional_comments:k.allow_conditional_comments,self_closing_elements:n(l.getSelfClosingElements()),cdata:function(a){u.append(g(\"#cdata\",4)).value=a},text:function(a,b){var c;F||(a=a.replace(H,\" \"),u.lastChild&&D[u.lastChild.name]&&(a=a.replace(E,\"\"))),0!==a.length&&(c=g(\"#text\",3),c.raw=!!b,u.append(c).value=a)},comment:function(a){u.append(g(\"#comment\",8)).value=a},pi:function(a,b){u.append(g(a,7)).value=b,j(u)},doctype:function(a){var b;b=u.append(g(\"#doctype\",10)),b.value=a,j(u)},start:function(a,b,c){var d,e,f,h,i;if(f=C?l.getElementRule(a):{}){for(d=g(f.outputName||a,1),d.attributes=b,d.shortEnded=c,u.append(d),i=K[u.name],i&&K[d.name]&&!i[d.name]&&N.push(d),e=p.length;e--;)h=p[e].name,h in b.map&&(A=r[h],A?A.push(d):r[h]=[d]);D[a]&&j(d),c||(u=d),!F&&J[a]&&(F=!0)}},end:function(a){var b,c,d,e,f;if(c=C?l.getElementRule(a):{}){if(D[a]&&!F){if(b=u.firstChild,b&&3===b.type)if(d=b.value.replace(E,\"\"),d.length>0)b.value=d,b=b.next;else for(e=b.next,b.remove(),b=e;b&&3===b.type;)d=b.value,e=b.next,(0===d.length||I.test(d))&&(b.remove(),b=e),b=e;if(b=u.lastChild,b&&3===b.type)if(d=b.value.replace(G,\"\"),d.length>0)b.value=d,b=b.prev;else for(e=b.prev,b.remove(),b=e;b&&3===b.type;)d=b.value,e=b.prev,(0===d.length||I.test(d))&&(b.remove(),b=e),b=e}if(F&&J[a]&&(F=!1),(c.removeEmpty||c.paddEmpty)&&u.isEmpty(L,J))if(c.paddEmpty)i(k,u);else if(!u.attributes.map.name&&!u.attributes.map.id)return f=u.parent,D[u.name]?u.empty().remove():u.unwrap(),void(u=f);u=u.parent}}},l),t=u=new a(d.context||k.root_name,11),s.parse(b),C&&N.length&&(d.context?d.invalid=!0:m(N)),M&&(\"body\"==t.name||d.isRootContent)&&f(),!d.invalid){for(B in q){for(A=o[B],v=q[B],y=v.length;y--;)v[y].parent||v.splice(y,1);for(w=0,x=A.length;w<x;w++)A[w](v,B,d)}for(w=0,x=p.length;w<x;w++)if(A=p[w],A.name in r){for(v=r[A.name],y=v.length;y--;)v[y].parent||v.splice(y,1);for(y=0,z=A.callbacks.length;y<z;y++)A.callbacks[y](v,A.name,d)}}return t},k.remove_trailing_brs&&n.addNodeFilter(\"br\",function(b){var c,d,e,f,g,j,m,n,o=b.length,p=h({},l.getBlockElements()),q=l.getNonEmptyElements(),r=l.getNonEmptyElements();for(p.body=1,c=0;c<o;c++)if(d=b[c],e=d.parent,p[d.parent.name]&&d===e.lastChild){for(g=d.prev;g;){if(j=g.name,\"span\"!==j||\"bookmark\"!==g.attr(\"data-mce-type\")){if(\"br\"!==j)break;if(\"br\"===j){d=null;break}}g=g.prev}d&&(d.remove(),e.isEmpty(q,r)&&(m=l.getElementRule(e.name),m&&(m.removeEmpty?e.remove():m.paddEmpty&&i(k,e))))}else{for(f=d;e&&e.firstChild===f&&e.lastChild===f&&(f=e,!p[e.name]);)e=e.parent;f===e&&k.padd_empty_with_br!==!0&&(n=new a(\"#text\",3),n.value=\"\\xa0\",d.replace(n))}}),n.addAttributeFilter(\"href\",function(a){var b,c=a.length,e=function(a){var b=a.split(\" \").filter(function(a){return a.length>0});return b.concat([\"noopener\"]).sort().join(\" \")},f=function(a){var b=a?d.trim(a):\"\";return/\\b(noopener)\\b/g.test(b)?b:e(b)};if(!k.allow_unsafe_link_target)for(;c--;)b=a[c],\"a\"===b.name&&\"_blank\"===b.attr(\"target\")&&b.attr(\"rel\",f(b.attr(\"rel\")))}),k.allow_html_in_named_anchor||n.addAttributeFilter(\"id,name\",function(a){for(var b,c,d,e,f=a.length;f--;)if(e=a[f],\"a\"===e.name&&e.firstChild&&!e.attr(\"href\")){d=e.parent,b=e.lastChild;do c=b.prev,d.insert(b,e),b=c;while(b)}}),k.fix_list_elements&&n.addNodeFilter(\"ul,ol\",function(b){for(var c,d,e=b.length;e--;)if(c=b[e],d=c.parent,\"ul\"===d.name||\"ol\"===d.name)if(c.prev&&\"li\"===c.prev.name)c.prev.append(c);else{var f=new a(\"li\",1);f.attr(\"style\",\"list-style-type: none\"),c.wrap(f)}}),k.validate&&l.getValidClasses()&&n.addAttributeFilter(\"class\",function(a){for(var b,c,d,e,f,g,h,i=a.length,j=l.getValidClasses();i--;){for(b=a[i],c=b.attr(\"class\").split(\" \"),f=\"\",d=0;d<c.length;d++)e=c[d],h=!1,g=j[\"*\"],g&&g[e]&&(h=!0),g=j[b.name],!h&&g&&g[e]&&(h=!0),h&&(f&&(f+=\" \"),f+=e);f.length||(f=null),b.attr(\"class\",f)}})}}),g(\"m\",[\"d\",\"9\"],function(a,b){var c=b.makeMap;return function(b){var d,e,f,g,h,i=[];return b=b||{},d=b.indent,e=c(b.indent_before||\"\"),f=c(b.indent_after||\"\"),g=a.getEncodeFunc(b.entity_encoding||\"raw\",b.entities),h=\"html\"==b.element_format,{start:function(a,b,c){var j,k,l,m;if(d&&e[a]&&i.length>0&&(m=i[i.length-1],m.length>0&&\"\\n\"!==m&&i.push(\"\\n\")),i.push(\"<\",a),b)for(j=0,k=b.length;j<k;j++)l=b[j],i.push(\" \",l.name,'=\"',g(l.value,!0),'\"');!c||h?i[i.length]=\">\":i[i.length]=\" />\",c&&d&&f[a]&&i.length>0&&(m=i[i.length-1],m.length>0&&\"\\n\"!==m&&i.push(\"\\n\"))},end:function(a){var b;i.push(\"</\",a,\">\"),d&&f[a]&&i.length>0&&(b=i[i.length-1],b.length>0&&\"\\n\"!==b&&i.push(\"\\n\"))},text:function(a,b){a.length>0&&(i[i.length]=b?a:g(a))},cdata:function(a){i.push(\"<![CDATA[\",a,\"]]>\")},comment:function(a){i.push(\"<!--\",a,\"-->\")},pi:function(a,b){b?i.push(\"<?\",a,\" \",g(b),\"?>\"):i.push(\"<?\",a,\"?>\"),d&&i.push(\"\\n\")},doctype:function(a){i.push(\"<!DOCTYPE\",a,\">\",d?\"\\n\":\"\")},reset:function(){i.length=0},getContent:function(){return i.join(\"\").replace(/\\n$/,\"\")}}}}),g(\"n\",[\"m\",\"j\"],function(a,b){return function(c,d){var e=this,f=new a(c);c=c||{},c.validate=!(\"validate\"in c)||c.validate,e.schema=d=d||new b,e.writer=f,e.serialize=function(a){function b(a){var c,h,i,j,k,l,m,n,o,p=e[a.type];if(p)p(a);else{if(c=a.name,h=a.shortEnded,i=a.attributes,g&&i&&i.length>1&&(l=[],l.map={},o=d.getElementRule(a.name))){for(m=0,n=o.attributesOrder.length;m<n;m++)j=o.attributesOrder[m],j in i.map&&(k=i.map[j],l.map[j]=k,l.push({name:j,value:k}));for(m=0,n=i.length;m<n;m++)j=i[m].name,j in l.map||(k=i.map[j],l.map[j]=k,l.push({name:j,value:k}));i=l}if(f.start(a.name,i,h),!h){if(a=a.firstChild)do b(a);while(a=a.next);f.end(c)}}}var e,g;return g=c.validate,e={3:function(a){f.text(a.value,a.raw)},8:function(a){f.comment(a.value)},7:function(a){f.pi(a.name,a.value)},10:function(a){f.doctype(a.value)},4:function(a){f.cdata(a.value)},11:function(a){if(a=a.firstChild)do b(a);while(a=a.next)}},f.reset(),1!=a.type||c.inner?e[11](a):b(a),f.getContent()}}}),g(\"o\",[\"e\",\"l\",\"k\",\"d\",\"n\",\"i\",\"j\",\"6\",\"9\",\"1l\"],function(a,b,c,d,e,f,g,h,i,j){function k(a){function b(a){return a&&\"br\"===a.name}var c,d;c=a.lastChild,b(c)&&(d=c.prev,b(d)&&(c.remove(),d.remove()))}var l=i.each,m=i.trim,n=a.DOM;return function(a,f){function o(a){var b=new RegExp([\"<span[^>]+data-mce-bogus[^>]+>[\\u200b\\ufeff]+<\\\\/span>\",\"\\\\s?(\"+v.join(\"|\")+')=\"[^\"]+\"'].join(\"|\"),\"gi\");return a=j.trim(a.replace(b,\"\"))}function p(a){var b,d,e,g,h,i=a,j=/<(\\w+) [^>]*data-mce-bogus=\"all\"[^>]*>/g,k=f.schema;for(i=o(i),h=k.getShortEndedElements();g=j.exec(i);)d=j.lastIndex,e=g[0].length,b=h[g[1]]?d:c.findEndTag(k,i,d),i=i.substring(0,d-e)+i.substring(b),j.lastIndex=d-e;return i}function q(){return p(f.getBody().innerHTML)}function r(a){i.inArray(v,a)===-1&&(u.addAttributeFilter(a,function(a,b){for(var c=a.length;c--;)a[c].attr(b,null)}),v.push(a))}var s,t,u,v=[\"data-mce-selected\"];return f&&(s=f.dom,t=f.schema),s=s||n,t=t||new g(a),a.entity_encoding=a.entity_encoding||\"named\",a.remove_trailing_brs=!(\"remove_trailing_brs\"in a)||a.remove_trailing_brs,u=new b(a,t),u.addAttributeFilter(\"data-mce-tabindex\",function(a,b){for(var c,d=a.length;d--;)c=a[d],c.attr(\"tabindex\",c.attributes.map[\"data-mce-tabindex\"]),c.attr(b,null)}),u.addAttributeFilter(\"src,href,style\",function(b,c){for(var d,e,f,g=b.length,h=\"data-mce-\"+c,i=a.url_converter,j=a.url_converter_scope;g--;)d=b[g],e=d.attributes.map[h],e!==f?(d.attr(c,e.length>0?e:null),d.attr(h,null)):(e=d.attributes.map[c],\"style\"===c?e=s.serializeStyle(s.parseStyle(e),d.name):i&&(e=i.call(j,e,c,d.name)),d.attr(c,e.length>0?e:null))}),u.addAttributeFilter(\"class\",function(a){for(var b,c,d=a.length;d--;)b=a[d],c=b.attr(\"class\"),c&&(c=b.attr(\"class\").replace(/(?:^|\\s)mce-item-\\w+(?!\\S)/g,\"\"),b.attr(\"class\",c.length>0?c:null))}),u.addAttributeFilter(\"data-mce-type\",function(a,b,c){for(var d,e=a.length;e--;)d=a[e],\"bookmark\"!==d.attributes.map[\"data-mce-type\"]||c.cleanup||d.remove()}),u.addNodeFilter(\"noscript\",function(a){for(var b,c=a.length;c--;)b=a[c].firstChild,b&&(b.value=d.decode(b.value))}),u.addNodeFilter(\"script,style\",function(a,b){function c(a){return a.replace(/(<!--\\[CDATA\\[|\\]\\]-->)/g,\"\\n\").replace(/^[\\r\\n]*|[\\r\\n]*$/g,\"\").replace(/^\\s*((<!--)?(\\s*\\/\\/)?\\s*<!\\[CDATA\\[|(<!--\\s*)?\\/\\*\\s*<!\\[CDATA\\[\\s*\\*\\/|(\\/\\/)?\\s*<!--|\\/\\*\\s*<!--\\s*\\*\\/)\\s*[\\r\\n]*/gi,\"\").replace(/\\s*(\\/\\*\\s*\\]\\]>\\s*\\*\\/(-->)?|\\s*\\/\\/\\s*\\]\\]>(-->)?|\\/\\/\\s*(-->)?|\\]\\]>|\\/\\*\\s*-->\\s*\\*\\/|\\s*-->\\s*)\\s*$/g,\"\")}for(var d,e,f,g=a.length;g--;)d=a[g],e=d.firstChild?d.firstChild.value:\"\",\"script\"===b?(f=d.attr(\"type\"),f&&d.attr(\"type\",\"mce-no/type\"==f?null:f.replace(/^mce\\-/,\"\")),e.length>0&&(d.firstChild.value=\"// <![CDATA[\\n\"+c(e)+\"\\n// ]]>\")):e.length>0&&(d.firstChild.value=\"<!--\\n\"+c(e)+\"\\n-->\")}),u.addNodeFilter(\"#comment\",function(a){for(var b,c=a.length;c--;)b=a[c],0===b.value.indexOf(\"[CDATA[\")?(b.name=\"#cdata\",b.type=4,b.value=b.value.replace(/^\\[CDATA\\[|\\]\\]$/g,\"\")):0===b.value.indexOf(\"mce:protected \")&&(b.name=\"#text\",b.type=3,b.raw=!0,b.value=unescape(b.value).substr(14))}),u.addNodeFilter(\"xml:namespace,input\",function(a,b){for(var c,d=a.length;d--;)c=a[d],7===c.type?c.remove():1===c.type&&(\"input\"!==b||\"type\"in c.attributes.map||c.attr(\"type\",\"text\"))}),u.addAttributeFilter(\"data-mce-src,data-mce-href,data-mce-style,data-mce-selected,data-mce-expando,data-mce-type,data-mce-resize\",function(a,b){for(var c=a.length;c--;)a[c].attr(b,null)}),{schema:t,addNodeFilter:u.addNodeFilter,addAttributeFilter:u.addAttributeFilter,serialize:function(b,c){var d,f,g,i,n,o,p=this;return h.ie&&s.select(\"script,style,select,map\").length>0?(n=b.innerHTML,b=b.cloneNode(!1),s.setHTML(b,n)):b=b.cloneNode(!0),d=document.implementation,d.createHTMLDocument&&(f=d.createHTMLDocument(\"\"),l(\"BODY\"==b.nodeName?b.childNodes:[b],function(a){f.body.appendChild(f.importNode(a,!0))}),b=\"BODY\"!=b.nodeName?f.body.firstChild:f.body,g=s.doc,s.doc=f),c=c||{},c.format=c.format||\"html\",c.selection&&(c.forced_root_block=\"\"),c.no_events||(c.node=b,p.onPreProcess(c)),o=u.parse(m(c.getInner?b.innerHTML:s.getOuterHTML(b)),c),k(o),i=new e(a,t),c.content=i.serialize(o),c.cleanup||(c.content=j.trim(c.content),c.content=c.content.replace(/\\uFEFF/g,\"\")),c.no_events||p.onPostProcess(c),g&&(s.doc=g),c.node=null,c.content},addRules:function(a){t.addValidElements(a)},setRules:function(a){t.setValidElements(a)},onPreProcess:function(a){f&&f.fire(\"PreProcess\",a)},onPostProcess:function(a){f&&f.fire(\"PostProcess\",a)},addTempAttr:r,trimHtml:o,getTrimmedContent:q,trimContent:p}}}),g(\"p\",[\"6\"],function(a){return{BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(a){return a.shiftKey||a.ctrlKey||a.altKey||this.metaKeyPressed(a)},metaKeyPressed:function(b){return a.mac?b.metaKey:b.ctrlKey&&!b.altKey}}}),g(\"43\",[],function(){function a(a){return a?{left:k(a.left),top:k(a.top),bottom:k(a.bottom),right:k(a.right),width:k(a.width),height:k(a.height)}:{left:0,top:0,bottom:0,right:0,width:0,height:0}}function b(b,c){return b=a(b),c?b.right=b.left:(b.left=b.left+b.width,b.right=b.left),b.width=0,b}function c(a,b){return a.left===b.left&&a.top===b.top&&a.bottom===b.bottom&&a.right===b.right}function d(a,b,c){return a>=0&&a<=Math.min(b.height,c.height)/2}function e(a,b){return a.bottom-a.height/2<b.top||!(a.top>b.bottom)&&d(b.top-a.bottom,a,b)}function f(a,b){return a.top>b.bottom||!(a.bottom<b.top)&&d(b.bottom-a.top,a,b)}function g(a,b){return a.left<b.left}function h(a,b){return a.right>b.right}function i(a,b){return e(a,b)?-1:f(a,b)?1:g(a,b)?-1:h(a,b)?1:0}function j(a,b,c){return b>=a.left&&b<=a.right&&c>=a.top&&c<=a.bottom}var k=Math.round;return{clone:a,collapse:b,isEqual:c,isAbove:e,isBelow:f,isLeft:g,isRight:h,compare:i,containsXY:j}}),g(\"1n\",[\"3x\",\"43\"],function(a,b){var c=function(c,d,e){return!e.collapsed&&a.foldl(e.getClientRects(),function(a,e){return a||b.containsXY(e,c,d)},!1)};return{isXYWithinRange:c}}),g(\"q\",[\"1m\",\"1j\",\"1n\",\"6\",\"5\",\"9\",\"p\"],function(a,b,c,d,e,f,g){function h(a,b){for(;b&&b!=a;){if(j(b)||i(b))return b;b=b.parentNode}return null}var i=b.isContentEditableFalse,j=b.isContentEditableTrue,k=function(a){return a&&\"IMG\"===a.nodeName},l=function(a,b){return k(a.target)&&!c.isXYWithinRange(a.clientX,a.clientY,b)},m=function(a,b){var c=b.target;l(b,a.selection.getRng())&&!b.isDefaultPrevented()&&(b.preventDefault(),a.selection.select(c))};return function(b,c){function j(a){var b=c.settings.object_resizing;return b!==!1&&!d.iOS&&(\"string\"!=typeof b&&(b=\"table,img,div\"),\"false\"!==a.getAttribute(\"data-mce-resize\")&&(a!=c.getBody()&&c.dom.is(a,b)))}function k(a){var b,d,e,f,h;b=a.screenX-H,d=a.screenY-I,P=b*F[2]+L,Q=d*F[3]+M,P=P<5?5:P,Q=Q<5?5:Q,e=\"IMG\"==B.nodeName&&c.settings.resize_img_proportional!==!1?!g.modifierPressed(a):g.modifierPressed(a)||\"IMG\"==B.nodeName&&F[2]*F[3]!==0,e&&(Y(b)>Y(d)?(Q=Z(P*N),P=Z(Q/N)):(P=Z(Q/N),Q=Z(P*N))),T.setStyles(C,{width:P,height:Q}),f=F.startPos.x+b,h=F.startPos.y+d,f=f>0?f:0,h=h>0?h:0,T.setStyles(D,{left:f,top:h,display:\"block\"}),D.innerHTML=P+\" &times; \"+Q,F[2]<0&&C.clientWidth<=P&&T.setStyle(C,\"left\",J+(L-P)),F[3]<0&&C.clientHeight<=Q&&T.setStyle(C,\"top\",K+(M-Q)),b=$.scrollWidth-R,d=$.scrollHeight-S,b+d!==0&&T.setStyles(D,{left:f-b,top:h-d}),O||(c.fire(\"ObjectResizeStart\",{target:B,width:L,height:M}),O=!0)}function l(){function a(a,b){b&&(B.style[a]||!c.schema.isValid(B.nodeName.toLowerCase(),a)?T.setStyle(B,a,b):T.setAttrib(B,a,b))}O=!1,a(\"width\",P),a(\"height\",Q),T.unbind(V,\"mousemove\",k),T.unbind(V,\"mouseup\",l),W!=V&&(T.unbind(W,\"mousemove\",k),T.unbind(W,\"mouseup\",l)),T.remove(C),T.remove(D),X&&\"TABLE\"!=B.nodeName||n(B),c.fire(\"ObjectResized\",{target:B,width:P,height:Q}),T.setAttrib(B,\"style\",T.getAttrib(B,\"style\")),c.nodeChanged()}function n(a,b,e){var f,g,h,i,m;o(),x(),f=T.getPos(a,$),J=f.x,K=f.y,m=a.getBoundingClientRect(),g=m.width||m.right-m.left,h=m.height||m.bottom-m.top,B!=a&&(w(),B=a,P=Q=0),i=c.fire(\"ObjectSelected\",{target:a}),j(a)&&!i.isDefaultPrevented()?U(E,function(a,c){function f(b){H=b.screenX,I=b.screenY,L=B.clientWidth,M=B.clientHeight,N=M/L,F=a,a.startPos={x:g*a[0]+J,y:h*a[1]+K},R=$.scrollWidth,S=$.scrollHeight,C=B.cloneNode(!0),T.addClass(C,\"mce-clonedresizable\"),T.setAttrib(C,\"data-mce-bogus\",\"all\"),C.contentEditable=!1,C.unSelectabe=!0,T.setStyles(C,{left:J,top:K,margin:0}),C.removeAttribute(\"data-mce-selected\"),$.appendChild(C),T.bind(V,\"mousemove\",k),T.bind(V,\"mouseup\",l),W!=V&&(T.bind(W,\"mousemove\",k),T.bind(W,\"mouseup\",l)),D=T.add($,\"div\",{\"class\":\"mce-resize-helper\",\"data-mce-bogus\":\"all\"},L+\" &times; \"+M)}var i;return b?void(c==b&&f(e)):(i=T.get(\"mceResizeHandle\"+c),i&&T.remove(i),i=T.add($,\"div\",{id:\"mceResizeHandle\"+c,\"data-mce-bogus\":\"all\",\"class\":\"mce-resizehandle\",unselectable:!0,style:\"cursor:\"+c+\"-resize; margin:0; padding:0\"}),d.ie&&(i.contentEditable=!1),T.bind(i,\"mousedown\",function(a){a.stopImmediatePropagation(),a.preventDefault(),f(a)}),a.elm=i,void T.setStyles(i,{left:g*a[0]+J-i.offsetWidth/2,top:h*a[1]+K-i.offsetHeight/2}))}):o(),B.setAttribute(\"data-mce-selected\",\"1\")}function o(){var a,b;x(),B&&B.removeAttribute(\"data-mce-selected\");for(a in E)b=T.get(\"mceResizeHandle\"+a),b&&(T.unbind(b),T.remove(b))}function p(a){function d(a,b){if(a)do if(a===b)return!0;while(a=a.parentNode)}var e,f;if(!O&&!c.removed)return U(T.select(\"img[data-mce-selected],hr[data-mce-selected]\"),function(a){a.removeAttribute(\"data-mce-selected\")}),f=\"mousedown\"==a.type?a.target:b.getNode(),f=T.$(f).closest(X?\"table\":\"table,img,hr\")[0],d(f,$)&&(y(),e=b.getStart(!0),d(e,f)&&d(b.getEnd(!0),f)&&(!X||f!=e&&\"IMG\"!==e.nodeName))?void n(f):void o()}function q(a,b,c){a&&a.attachEvent&&a.attachEvent(\"on\"+b,c)}function r(a,b,c){a&&a.detachEvent&&a.detachEvent(\"on\"+b,c)}function s(a){var b,d,e,f,g,h,i,j=a.srcElement;b=j.getBoundingClientRect(),h=G.clientX-b.left,i=G.clientY-b.top;for(d in E)if(e=E[d],f=j.offsetWidth*e[0],g=j.offsetHeight*e[1],Y(f-h)<8&&Y(g-i)<8){F=e;break}O=!0,c.fire(\"ObjectResizeStart\",{target:B,width:B.clientWidth,height:B.clientHeight}),c.getDoc().selection.empty(),n(j,d,G)}function t(a){a.preventDefault?a.preventDefault():a.returnValue=!1}function u(a){return i(h(c.getBody(),a))}function v(a){var b=a.srcElement;if(u(b))return void t(a);if(b!=B){if(c.fire(\"ObjectSelected\",{target:b}),w(),0===b.id.indexOf(\"mceResizeHandle\"))return void(a.returnValue=!1);\"IMG\"!=b.nodeName&&\"TABLE\"!=b.nodeName||(o(),B=b,q(b,\"resizestart\",s))}}function w(){r(B,\"resizestart\",s)}function x(){for(var a in E){var b=E[a];b.elm&&(T.unbind(b.elm),delete b.elm)}}function y(){try{c.getDoc().execCommand(\"enableObjectResizing\",!1,!1);\n}catch(a){}}function z(a){var b;if(X){b=V.body.createControlRange();try{return b.addElement(a),b.select(),!0}catch(a){}}}function A(){B=C=null,X&&(w(),r($,\"controlselect\",v))}var B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T=c.dom,U=f.each,V=c.getDoc(),W=document,X=d.ie&&d.ie<11,Y=Math.abs,Z=Math.round,$=c.getBody();E={nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};var _=\".mce-content-body\";return c.contentStyles.push(_+\" div.mce-resizehandle {position: absolute;border: 1px solid black;box-sizing: box-sizing;background: #FFF;width: 7px;height: 7px;z-index: 10000}\"+_+\" .mce-resizehandle:hover {background: #000}\"+_+\" img[data-mce-selected],\"+_+\" hr[data-mce-selected] {outline: 1px solid black;resize: none}\"+_+\" .mce-clonedresizable {position: absolute;\"+(d.gecko?\"\":\"outline: 1px dashed black;\")+\"opacity: .5;filter: alpha(opacity=50);z-index: 10000}\"+_+\" .mce-resize-helper {background: #555;background: rgba(0,0,0,0.75);border-radius: 3px;border: 1px;color: white;display: none;font-family: sans-serif;font-size: 12px;white-space: nowrap;line-height: 14px;margin: 5px 10px;padding: 5px;position: absolute;z-index: 10001}\"),c.on(\"init\",function(){X?(c.on(\"ObjectResized\",function(a){\"TABLE\"!=a.target.nodeName&&(o(),z(a.target))}),q($,\"controlselect\",v),c.on(\"mousedown\",function(a){G=a})):(y(),d.ie>=11&&(c.on(\"mousedown click\",function(a){var b=a.target,d=b.nodeName;O||!/^(TABLE|IMG|HR)$/.test(d)||u(b)||(2!==a.button&&c.selection.select(b,\"TABLE\"==d),\"mousedown\"==a.type&&c.nodeChanged())}),c.dom.bind($,\"mscontrolselect\",function(a){function b(a){e.setEditorTimeout(c,function(){c.selection.select(a)})}return u(a.target)?(a.preventDefault(),void b(a.target)):void(/^(TABLE|IMG|HR)$/.test(a.target.nodeName)&&(a.preventDefault(),\"IMG\"==a.target.tagName&&b(a.target)))})));var b=e.throttle(function(a){c.composing||p(a)});c.on(\"nodechange ResizeEditor ResizeWindow drop\",b),c.on(\"keyup compositionend\",function(a){B&&\"TABLE\"==B.nodeName&&b(a)}),c.on(\"hide blur\",o),c.on(\"contextmenu\",a.curry(m,c))}),c.on(\"remove\",x),{isResizable:j,showResizeRect:n,hideResizeRect:o,updateResizeRect:p,controlSelect:z,destroy:A}}}),g(\"1w\",[],function(){function a(a){return function(){return a}}function b(a){return function(b){return!a(b)}}function c(a,b){return function(c){return a(b(c))}}function d(){var a=h.call(arguments);return function(b){for(var c=0;c<a.length;c++)if(a[c](b))return!0;return!1}}function e(){var a=h.call(arguments);return function(b){for(var c=0;c<a.length;c++)if(!a[c](b))return!1;return!0}}function f(a){var b=h.call(arguments);return b.length-1>=a.length?a.apply(this,b.slice(1)):function(){var a=b.concat([].slice.call(arguments));return f.apply(this,a)}}function g(){}var h=[].slice;return{constant:a,negate:b,and:e,or:d,curry:f,compose:c,noop:g}}),g(\"44\",[\"1j\",\"1g\",\"1k\"],function(a,b,c){function d(a){return!p(a)&&(l(a)?!m(a.parentNode):n(a)||k(a)||o(a)||j(a))}function e(a,b){for(a=a.parentNode;a&&a!=b;a=a.parentNode){if(j(a))return!1;if(i(a))return!0}return!0}function f(a){return!!j(a)&&b.reduce(a.getElementsByTagName(\"*\"),function(a,b){return a||i(b)},!1)!==!0}function g(a){return n(a)||f(a)}function h(a,b){return d(a)&&e(a,b)}var i=a.isContentEditableTrue,j=a.isContentEditableFalse,k=a.isBr,l=a.isText,m=a.matchNodeNames(\"script style textarea\"),n=a.matchNodeNames(\"img input textarea hr iframe video audio object\"),o=a.matchNodeNames(\"table\"),p=c.isCaretContainer;return{isCaretCandidate:d,isInEditable:e,isAtomic:g,isEditableCaretCandidate:h}}),g(\"45\",[],function(){function a(a){return\"string\"==typeof a&&a.charCodeAt(0)>=768&&b.test(a)}var b=new RegExp(\"[\\u0300-\\u036f\\u0483-\\u0487\\u0488-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1-\\u05c2\\u05c4-\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065f\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7-\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u08e3-\\u0902\\u093a\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0957\\u0962-\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2-\\u09e3\\u0a01-\\u0a02\\u0a3c\\u0a41-\\u0a42\\u0a47-\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70-\\u0a71\\u0a75\\u0a81-\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7-\\u0ac8\\u0acd\\u0ae2-\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62-\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c00\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55-\\u0c56\\u0c62-\\u0c63\\u0c81\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc-\\u0ccd\\u0cd5-\\u0cd6\\u0ce2-\\u0ce3\\u0d01\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62-\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb-\\u0ebc\\u0ec8-\\u0ecd\\u0f18-\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86-\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039-\\u103a\\u103d-\\u103e\\u1058-\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085-\\u1086\\u108d\\u109d\\u135d-\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752-\\u1753\\u1772-\\u1773\\u17b4-\\u17b5\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927-\\u1928\\u1932\\u1939-\\u193b\\u1a17-\\u1a18\\u1a1b\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1ab0-\\u1abd\\u1abe\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80-\\u1b81\\u1ba2-\\u1ba5\\u1ba8-\\u1ba9\\u1bab-\\u1bad\\u1be6\\u1be8-\\u1be9\\u1bed\\u1bef-\\u1bf1\\u1c2c-\\u1c33\\u1c36-\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1cf4\\u1cf8-\\u1cf9\\u1dc0-\\u1df5\\u1dfc-\\u1dff\\u200c-\\u200d\\u20d0-\\u20dc\\u20dd-\\u20e0\\u20e1\\u20e2-\\u20e4\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302d\\u302e-\\u302f\\u3099-\\u309a\\ua66f\\ua670-\\ua672\\ua674-\\ua67d\\ua69e-\\ua69f\\ua6f0-\\ua6f1\\ua802\\ua806\\ua80b\\ua825-\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\ua9e5\\uaa29-\\uaa2e\\uaa31-\\uaa32\\uaa35-\\uaa36\\uaa43\\uaa4c\\uaa7c\\uaab0\\uaab2-\\uaab4\\uaab7-\\uaab8\\uaabe-\\uaabf\\uaac1\\uaaec-\\uaaed\\uaaf6\\uabe5\\uabe8\\uabed\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\uff9e-\\uff9f]\");return{isExtendingChar:a}}),g(\"1p\",[\"1w\",\"1j\",\"e\",\"h\",\"44\",\"43\",\"45\"],function(a,b,c,d,e,f,g){function h(a){return\"createRange\"in a?a.createRange():c.DOM.createRng()}function i(a){return a&&/[\\r\\n\\t ]/.test(a)}function j(a){var b,c=a.startContainer,d=a.startOffset;return!!(i(a.toString())&&r(c.parentNode)&&(b=c.data,i(b[d-1])||i(b[d+1])))}function k(a){function b(a){var b,c=a.ownerDocument,d=h(c),e=c.createTextNode(\"\\xa0\"),g=a.parentNode;return g.insertBefore(e,a),d.setStart(e,0),d.setEnd(e,1),b=f.clone(d.getBoundingClientRect()),g.removeChild(e),b}function c(a){var c,d;return d=a.getClientRects(),c=d.length>0?f.clone(d[0]):f.clone(a.getBoundingClientRect()),t(a)&&0===c.left?b(a):c}function d(a,b){return a=f.collapse(a,b),a.width=1,a.right=a.left+1,a}function e(a){0!==a.height&&(n.length>0&&f.isEqual(a,n[n.length-1])||n.push(a))}function i(a,b){var f=h(a.ownerDocument);if(b<a.data.length){if(g.isExtendingChar(a.data[b]))return n;if(g.isExtendingChar(a.data[b-1])&&(f.setStart(a,b),f.setEnd(a,b+1),!j(f)))return e(d(c(f),!1)),n}b>0&&(f.setStart(a,b-1),f.setEnd(a,b),j(f)||e(d(c(f),!1))),b<a.data.length&&(f.setStart(a,b),f.setEnd(a,b+1),j(f)||e(d(c(f),!0)))}var k,l,n=[];if(s(a.container()))return i(a.container(),a.offset()),n;if(m(a.container()))if(a.isAtEnd())l=v(a.container(),a.offset()),s(l)&&i(l,l.data.length),q(l)&&!t(l)&&e(d(c(l),!1));else{if(l=v(a.container(),a.offset()),s(l)&&i(l,0),q(l)&&a.isAtEnd())return e(d(c(l),!1)),n;k=v(a.container(),a.offset()-1),q(k)&&!t(k)&&(o(k)||o(l)||!q(l))&&e(d(c(k),!1)),q(l)&&e(d(c(l),!0))}return n}function l(b,c,d){function e(){return s(b)?0===c:0===c}function f(){return s(b)?c>=b.data.length:c>=b.childNodes.length}function g(){var a;return a=h(b.ownerDocument),a.setStart(b,c),a.setEnd(b,c),a}function i(){return d||(d=k(new l(b,c))),d}function j(){return i().length>0}function m(a){return a&&b===a.container()&&c===a.offset()}function n(a){return v(b,a?c-1:c)}return{container:a.constant(b),offset:a.constant(c),toRange:g,getClientRects:i,isVisible:j,isAtStart:e,isAtEnd:f,isEqual:m,getNode:n}}var m=b.isElement,n=e.isCaretCandidate,o=b.matchStyleValues(\"display\",\"block table\"),p=b.matchStyleValues(\"float\",\"left right\"),q=a.and(m,n,a.negate(p)),r=a.negate(b.matchStyleValues(\"white-space\",\"pre pre-line pre-wrap\")),s=b.isText,t=b.isBr,u=c.nodeIndex,v=d.getNode;return l.fromRangeStart=function(a){return new l(a.startContainer,a.startOffset)},l.fromRangeEnd=function(a){return new l(a.endContainer,a.endOffset)},l.after=function(a){return new l(a.parentNode,u(a)+1)},l.before=function(a){return new l(a.parentNode,u(a))},l.isAtStart=function(a){return!!a&&a.isAtStart()},l.isAtEnd=function(a){return!!a&&a.isAtEnd()},l.isTextPosition=function(a){return!!a&&b.isText(a.container())},l}),g(\"1o\",[\"1j\",\"e\",\"1w\",\"1g\",\"1p\"],function(a,b,c,d,e){function f(a){var b=a.parentNode;return r(b)?f(b):b}function g(a){return a?d.reduce(a.childNodes,function(a,b){return r(b)&&\"BR\"!=b.nodeName?a=a.concat(g(b)):a.push(b),a},[]):[]}function h(a,b){for(;(a=a.previousSibling)&&q(a);)b+=a.data.length;return b}function i(a){return function(b){return a===b}}function j(b){var c,e,h;return c=g(f(b)),e=d.findIndex(c,i(b),b),c=c.slice(0,e+1),h=d.reduce(c,function(a,b,d){return q(b)&&q(c[d-1])&&a++,a},0),c=d.filter(c,a.matchNodeNames(b.nodeName)),e=d.findIndex(c,i(b),b),e-h}function k(a){var b;return b=q(a)?\"text()\":a.nodeName.toLowerCase(),b+\"[\"+j(a)+\"]\"}function l(a,b,c){var d=[];for(b=b.parentNode;b!=a&&(!c||!c(b));b=b.parentNode)d.push(b);return d}function m(b,e){var f,g,i,j,m,n=[];return f=e.container(),g=e.offset(),q(f)?i=h(f,g):(j=f.childNodes,g>=j.length?(i=\"after\",g=j.length-1):i=\"before\",f=j[g]),n.push(k(f)),m=l(b,f),m=d.filter(m,c.negate(a.isBogus)),n=n.concat(d.map(m,function(a){return k(a)})),n.reverse().join(\"/\")+\",\"+i}function n(b,c,e){var f=g(b);return f=d.filter(f,function(a,b){return!q(a)||!q(f[b-1])}),f=d.filter(f,a.matchNodeNames(c)),f[e]}function o(a,b){for(var c,d=a,f=0;q(d);){if(c=d.data.length,b>=f&&b<=f+c){a=d,b-=f;break}if(!q(d.nextSibling)){a=d,b=c;break}f+=c,d=d.nextSibling}return b>a.data.length&&(b=a.data.length),new e(a,b)}function p(a,b){var c,f,g;return b?(c=b.split(\",\"),b=c[0].split(\"/\"),g=c.length>1?c[1]:\"before\",f=d.reduce(b,function(a,b){return(b=/([\\w\\-\\(\\)]+)\\[([0-9]+)\\]/.exec(b))?(\"text()\"===b[1]&&(b[1]=\"#text\"),n(a,b[1],parseInt(b[2],10))):null},a),f?q(f)?o(f,parseInt(g,10)):(g=\"after\"===g?s(f)+1:s(f),new e(f.parentNode,g)):null):null}var q=a.isText,r=a.isBogus,s=b.nodeIndex;return{create:m,resolve:p}}),g(\"r\",[\"1o\",\"1k\",\"1p\",\"1j\",\"h\",\"6\",\"1l\",\"9\"],function(a,b,c,d,e,f,g,h){function i(g){var i=g.dom;this.getBookmark=function(f,l){function m(a,b){var c=0;return h.each(i.select(a),function(a){if(\"all\"!==a.getAttribute(\"data-mce-bogus\"))return a!=b&&void c++}),c}function n(a){function b(b){var c,d,e,f=b?\"start\":\"end\";c=a[f+\"Container\"],d=a[f+\"Offset\"],1==c.nodeType&&\"TR\"==c.nodeName&&(e=c.childNodes,c=e[Math.min(b?d:d-1,e.length-1)],c&&(d=b?0:c.childNodes.length,a[\"set\"+(b?\"Start\":\"End\")](c,d)))}return b(!0),b(),a}function o(a){function b(a,b){var d,e=a[b?\"startContainer\":\"endContainer\"],f=a[b?\"startOffset\":\"endOffset\"],g=[],h=0;for(3===e.nodeType?g.push(l?k(e,f):f):(d=e.childNodes,f>=d.length&&d.length&&(h=1,f=Math.max(0,d.length-1)),g.push(i.nodeIndex(d[f],l)+h));e&&e!=c;e=e.parentNode)g.push(i.nodeIndex(e,l));return g}var c=i.getRoot(),d={};return d.start=b(a,!0),g.isCollapsed()||(d.end=b(a)),d}function p(a){function c(a,c){var f;if(d.isElement(a)&&(a=e.getNode(a,c),j(a)))return a;if(b.isCaretContainer(a)){if(d.isText(a)&&b.isCaretContainerBlock(a)&&(a=a.parentNode),f=a.previousSibling,j(f))return f;if(f=a.nextSibling,j(f))return f}}return c(a.startContainer,a.startOffset)||c(a.endContainer,a.endOffset)}var q,r,s,t,u,v,w,x=\"&#xFEFF;\";if(2==f)return v=g.getNode(),u=v?v.nodeName:null,q=g.getRng(),j(v)||\"IMG\"==u?{name:u,index:m(u,v)}:g.tridentSel?g.tridentSel.getBookmark(f):(v=p(q),v?(u=v.tagName,{name:u,index:m(u,v)}):o(q));if(3==f)return q=g.getRng(),{start:a.create(i.getRoot(),c.fromRangeStart(q)),end:a.create(i.getRoot(),c.fromRangeEnd(q))};if(f)return{rng:g.getRng()};if(q=g.getRng(),s=i.uniqueId(),t=g.isCollapsed(),w=\"overflow:hidden;line-height:0px\",q.duplicate||q.item){if(q.item)return v=q.item(0),u=v.nodeName,{name:u,index:m(u,v)};r=q.duplicate();try{q.collapse(),q.pasteHTML('<span data-mce-type=\"bookmark\" id=\"'+s+'_start\" style=\"'+w+'\">'+x+\"</span>\"),t||(r.collapse(!1),q.moveToElementText(r.parentElement()),0===q.compareEndPoints(\"StartToEnd\",r)&&r.move(\"character\",-1),r.pasteHTML('<span data-mce-type=\"bookmark\" id=\"'+s+'_end\" style=\"'+w+'\">'+x+\"</span>\"))}catch(a){return null}}else{if(v=g.getNode(),u=v.nodeName,\"IMG\"==u)return{name:u,index:m(u,v)};r=n(q.cloneRange()),t||(r.collapse(!1),r.insertNode(i.create(\"span\",{\"data-mce-type\":\"bookmark\",id:s+\"_end\",style:w},x))),q=n(q),q.collapse(!0),q.insertNode(i.create(\"span\",{\"data-mce-type\":\"bookmark\",id:s+\"_start\",style:w},x))}return g.moveToBookmark({id:s,keep:1}),{id:s}},this.moveToBookmark=function(b){function c(a){var c,d,e,f,g=b[a?\"start\":\"end\"];if(g){for(e=g[0],d=l,c=g.length-1;c>=1;c--){if(f=d.childNodes,g[c]>f.length-1)return;d=f[g[c]]}3===d.nodeType&&(e=Math.min(g[0],d.nodeValue.length)),1===d.nodeType&&(e=Math.min(g[0],d.childNodes.length)),a?k.setStart(d,e):k.setEnd(d,e)}return!0}function d(a){var c,d,e,g,j=i.get(b.id+\"_\"+a),k=b.keep;if(j&&(c=j.parentNode,\"start\"==a?(k?(c=j.firstChild,d=1):d=i.nodeIndex(j),m=n=c,o=p=d):(k?(c=j.firstChild,d=1):d=i.nodeIndex(j),n=c,p=d),!k)){for(g=j.previousSibling,e=j.nextSibling,h.each(h.grep(j.childNodes),function(a){3==a.nodeType&&(a.nodeValue=a.nodeValue.replace(/\\uFEFF/g,\"\"))});j=i.get(b.id+\"_\"+a);)i.remove(j,1);g&&e&&g.nodeType==e.nodeType&&3==g.nodeType&&!f.opera&&(d=g.nodeValue.length,g.appendData(e.nodeValue),i.remove(e),\"start\"==a?(m=n=g,o=p=d):(n=g,p=d))}}function e(a){return!i.isBlock(a)||a.innerHTML||f.ie||(a.innerHTML='<br data-mce-bogus=\"1\" />'),a}function j(){var c,d;return c=i.createRng(),d=a.resolve(i.getRoot(),b.start),c.setStart(d.container(),d.offset()),d=a.resolve(i.getRoot(),b.end),c.setEnd(d.container(),d.offset()),c}var k,l,m,n,o,p;if(b)if(h.isArray(b.start)){if(k=i.createRng(),l=i.getRoot(),g.tridentSel)return g.tridentSel.moveToBookmark(b);c(!0)&&c()&&g.setRng(k)}else\"string\"==typeof b.start?g.setRng(j(b)):b.id?(d(\"start\"),d(\"end\"),m&&(k=i.createRng(),k.setStart(e(m),o),k.setEnd(e(n),p),g.setRng(k))):b.name?g.select(i.select(b.name)[b.index]):b.rng&&g.setRng(b.rng)}}var j=d.isContentEditableFalse,k=function(a,b){var c,d;for(d=g.trim(a.data.slice(0,b)).length,c=a.previousSibling;c&&3===c.nodeType;c=c.previousSibling)d+=g.trim(c.data).length;return d};return i.isBookmarkNode=function(a){return a&&\"SPAN\"===a.tagName&&\"bookmark\"===a.getAttribute(\"data-mce-type\")},i}),g(\"6j\",[],function(){return\"undefined\"!=typeof window?window:Function(\"return this;\")()}),g(\"5u\",[\"6j\"],function(a){var b=function(b,c){for(var d=void 0!==c?c:a,e=0;e<b.length&&void 0!==d&&null!==d;++e)d=d[b[e]];return d},c=function(a,c){var d=a.split(\".\");return b(d,c)},d=function(a,b){return void 0!==a[b]&&null!==a[b]||(a[b]={}),a[b]},e=function(b,c){for(var e=void 0!==c?c:a,f=0;f<b.length;++f)e=d(e,b[f]);return e},f=function(a,b){var c=a.split(\".\");return e(c,b)};return{path:b,resolve:c,forge:e,namespace:f}}),g(\"54\",[\"5u\"],function(a){var b=function(b,c){return a.resolve(b,c)},c=function(a,c){var d=b(a,c);if(void 0===d)throw a+\" not available on this browser\";return d};return{getOrDie:c}}),g(\"46\",[\"54\"],function(a){var b=function(){var b=a.getOrDie(\"Node\");return b},c=function(a,b,c){return 0!==(a.compareDocumentPosition(b)&c)},d=function(a,d){return c(a,d,b().DOCUMENT_POSITION_PRECEDING)},e=function(a,d){return c(a,d,b().DOCUMENT_POSITION_CONTAINED_BY)};return{documentPositionPreceding:d,documentPositionContainedBy:e}}),g(\"55\",[],function(){var a=function(a){var b,c=!1;return function(){return c||(c=!0,b=a.apply(null,arguments)),b}};return{cached:a}}),h(\"75\",Number),g(\"6k\",[\"3x\",\"75\",\"50\"],function(a,b,c){var d=function(a,b){for(var c=0;c<a.length;c++){var d=a[c];if(d.test(b))return d}},e=function(a,c){var e=d(a,c);if(!e)return{major:0,minor:0};var f=function(a){return b(c.replace(e,\"$\"+a))};return h(f(1),f(2))},f=function(a,b){var d=c(b).toLowerCase();return 0===a.length?g():e(a,d)},g=function(){return h(0,0)},h=function(a,b){return{major:a,minor:b}};return{nu:h,detect:f,unknown:g}}),g(\"5v\",[\"1m\",\"6k\"],function(a,b){var c=\"Edge\",d=\"Chrome\",e=\"IE\",f=\"Opera\",g=\"Firefox\",h=\"Safari\",i=function(a,b){return function(){return b===a}},j=function(){return k({current:void 0,version:b.unknown()})},k=function(a){var b=a.current,j=a.version;return{current:b,version:j,isEdge:i(c,b),isChrome:i(d,b),isIE:i(e,b),isOpera:i(f,b),isFirefox:i(g,b),isSafari:i(h,b)}};return{unknown:j,nu:k,edge:a.constant(c),chrome:a.constant(d),ie:a.constant(e),opera:a.constant(f),firefox:a.constant(g),safari:a.constant(h)}}),g(\"5w\",[\"1m\",\"6k\"],function(a,b){var c=\"Windows\",d=\"iOS\",e=\"Android\",f=\"Linux\",g=\"OSX\",h=\"Solaris\",i=\"FreeBSD\",j=function(a,b){return function(){return b===a}},k=function(){return l({current:void 0,version:b.unknown()})},l=function(a){var b=a.current,k=a.version;return{current:b,version:k,isWindows:j(c,b),isiOS:j(d,b),isAndroid:j(e,b),isOSX:j(g,b),isLinux:j(f,b),isSolaris:j(h,b),isFreeBSD:j(i,b)}};return{unknown:k,nu:l,windows:a.constant(c),ios:a.constant(d),android:a.constant(e),linux:a.constant(f),osx:a.constant(g),solaris:a.constant(h),freebsd:a.constant(i)}}),g(\"5x\",[\"1m\"],function(a){return function(b,c,d){var e=b.isiOS()&&/ipad/i.test(d)===!0,f=b.isiOS()&&!e,g=b.isAndroid()&&3===b.version.major,h=b.isAndroid()&&4===b.version.major,i=e||g||h&&/mobile/i.test(d)===!0,j=b.isiOS()||b.isAndroid(),k=j&&!i,l=c.isSafari()&&b.isiOS()&&/safari/i.test(d)===!1;return{isiPad:a.constant(e),isiPhone:a.constant(f),isTablet:a.constant(i),isPhone:a.constant(k),isTouch:a.constant(j),isAndroid:b.isAndroid,isiOS:b.isiOS,isWebView:a.constant(l)}}}),g(\"5y\",[\"3x\",\"6k\",\"50\"],function(a,b,c){var d=function(b,d){var e=c(d).toLowerCase();return a.find(b,function(a){return a.search(e)})},e=function(a,c){return d(a,c).map(function(a){var d=b.detect(a.versionRegexes,c);return{current:a.name,version:d}})},f=function(a,c){return d(a,c).map(function(a){var d=b.detect(a.versionRegexes,c);return{current:a.name,version:d}})};return{detectBrowser:e,detectOs:f}}),g(\"76\",[],function(){var a=function(a,b){return b+a},b=function(a,b){return a+b},c=function(a,b){return a.substring(b)},d=function(a,b){return a.substring(0,a.length-b)};return{addToStart:a,addToEnd:b,removeFromStart:c,removeFromEnd:d}}),g(\"77\",[\"4z\",\"3z\"],function(a,b){var c=function(a,b){return a.substr(0,b)},d=function(a,b){return a.substr(a.length-b,a.length)},e=function(b){return\"\"===b?a.none():a.some(b.substr(0,1))},f=function(b){return\"\"===b?a.none():a.some(b.substring(1))};return{first:c,last:d,head:e,tail:f}}),g(\"6l\",[\"76\",\"77\",\"3z\"],function(a,b,c){var d=function(a,b,c){if(\"\"===b)return!0;if(a.length<b.length)return!1;var d=a.substr(c,c+b.length);return d===b},e=function(a,b){var c=function(a){var b=typeof a;return\"string\"===b||\"number\"===b};return a.replace(/\\${([^{}]*)}/g,function(a,d){var e=b[d];return c(e)?e:a})},f=function(b,c){return l(b,c)?a.removeFromStart(b,c.length):b},g=function(b,c){return m(b,c)?a.removeFromEnd(b,c.length):b},h=function(b,c){return l(b,c)?b:a.addToStart(b,c)},i=function(b,c){return m(b,c)?b:a.addToEnd(b,c)},j=function(a,b){return a.indexOf(b)!==-1},k=function(a){return b.head(a).bind(function(c){return b.tail(a).map(function(a){return c.toUpperCase()+a})}).getOr(a)},l=function(a,b){return d(a,b,0)},m=function(a,b){return d(a,b,a.length-b.length)},n=function(a){return a.replace(/^\\s+|\\s+$/g,\"\")},o=function(a){return a.replace(/^\\s+/g,\"\")},p=function(a){return a.replace(/\\s+$/g,\"\")};return{supplant:e,startsWith:l,removeLeading:f,removeTrailing:g,ensureLeading:h,ensureTrailing:i,endsWith:m,contains:j,trim:n,lTrim:o,rTrim:p,capitalize:k}}),g(\"5z\",[\"1m\",\"6l\"],function(a,b){var c=/.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,d=function(a){return function(c){return b.contains(c,a)}},e=[{name:\"Edge\",versionRegexes:[/.*?edge\\/ ?([0-9]+)\\.([0-9]+)$/],search:function(a){var c=b.contains(a,\"edge/\")&&b.contains(a,\"chrome\")&&b.contains(a,\"safari\")&&b.contains(a,\"applewebkit\");return c}},{name:\"Chrome\",versionRegexes:[/.*?chrome\\/([0-9]+)\\.([0-9]+).*/,c],search:function(a){return b.contains(a,\"chrome\")&&!b.contains(a,\"chromeframe\")}},{name:\"IE\",versionRegexes:[/.*?msie\\ ?([0-9]+)\\.([0-9]+).*/,/.*?rv:([0-9]+)\\.([0-9]+).*/],search:function(a){return b.contains(a,\"msie\")||b.contains(a,\"trident\")}},{name:\"Opera\",versionRegexes:[c,/.*?opera\\/([0-9]+)\\.([0-9]+).*/],search:d(\"opera\")},{name:\"Firefox\",versionRegexes:[/.*?firefox\\/\\ ?([0-9]+)\\.([0-9]+).*/],search:d(\"firefox\")},{name:\"Safari\",versionRegexes:[c,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:function(a){return(b.contains(a,\"safari\")||b.contains(a,\"mobile/\"))&&b.contains(a,\"applewebkit\")}}],f=[{name:\"Windows\",search:d(\"win\"),versionRegexes:[/.*?windows\\ nt\\ ?([0-9]+)\\.([0-9]+).*/]},{name:\"iOS\",search:function(a){return b.contains(a,\"iphone\")||b.contains(a,\"ipad\")},versionRegexes:[/.*?version\\/\\ ?([0-9]+)\\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:\"Android\",search:d(\"android\"),versionRegexes:[/.*?android\\ ?([0-9]+)\\.([0-9]+).*/]},{name:\"OSX\",search:d(\"os x\"),versionRegexes:[/.*?os\\ x\\ ?([0-9]+)_([0-9]+).*/]},{name:\"Linux\",search:d(\"linux\"),versionRegexes:[]},{name:\"Solaris\",search:d(\"sunos\"),versionRegexes:[]},{name:\"FreeBSD\",search:d(\"freebsd\"),versionRegexes:[]}];return{browsers:a.constant(e),oses:a.constant(f)}}),g(\"56\",[\"5v\",\"5w\",\"5x\",\"5y\",\"5z\"],function(a,b,c,d,e){var f=function(f){var g=e.browsers(),h=e.oses(),i=d.detectBrowser(g,f).fold(a.unknown,a.nu),j=d.detectOs(h,f).fold(b.unknown,b.nu),k=c(j,i,f);return{browser:i,os:j,deviceType:k}};return{detect:f}}),h(\"57\",navigator),g(\"47\",[\"55\",\"56\",\"57\"],function(a,b,c){var d=a.cached(function(){var a=c.userAgent;return b.detect(a)});return{detect:d}}),g(\"49\",[],function(){return\"undefined\"==typeof console&&(console={log:function(){}}),console}),h(\"22\",document),g(\"1r\",[\"1m\",\"3z\",\"49\",\"22\"],function(a,b,c,d){var e=function(a,b){var e=b||d,f=e.createElement(\"div\");if(f.innerHTML=a,!f.hasChildNodes()||f.childNodes.length>1)throw c.error(\"HTML does not have a single root node\",a),\"HTML must have a single root node\";return h(f.childNodes[0])},f=function(a,b){var c=b||d,e=c.createElement(a);return h(e)},g=function(a,b){var c=b||d,e=c.createTextNode(a);return h(e)},h=function(c){if(null===c||void 0===c)throw new b(\"Node cannot be null or undefined\");return{dom:a.constant(c)}};return{fromHtml:e,fromTag:f,fromText:g,fromDom:h}}),g(\"58\",[],function(){return{ATTRIBUTE:2,CDATA_SECTION:4,COMMENT:8,DOCUMENT:9,DOCUMENT_TYPE:10,DOCUMENT_FRAGMENT:11,ELEMENT:1,TEXT:3,PROCESSING_INSTRUCTION:7,ENTITY_REFERENCE:5,ENTITY:6,NOTATION:12}}),g(\"48\",[\"3x\",\"4z\",\"1r\",\"58\",\"3z\",\"22\"],function(a,b,c,d,e,f){var g=0,h=1,i=2,j=3,k=function(){var a=f.createElement(\"span\");return void 0!==a.matches?g:void 0!==a.msMatchesSelector?h:void 0!==a.webkitMatchesSelector?i:void 0!==a.mozMatchesSelector?j:-1}(),l=d.ELEMENT,m=d.DOCUMENT,n=function(a,b){var c=a.dom();if(c.nodeType!==l)return!1;if(k===g)return c.matches(b);if(k===h)return c.msMatchesSelector(b);if(k===i)return c.webkitMatchesSelector(b);if(k===j)return c.mozMatchesSelector(b);throw new e(\"Browser lacks native selectors\")},o=function(a){return a.nodeType!==l&&a.nodeType!==m||0===a.childElementCount},p=function(b,d){var e=void 0===d?f:d.dom();return o(e)?[]:a.map(e.querySelectorAll(b),c.fromDom)},q=function(a,d){var e=void 0===d?f:d.dom();return o(e)?b.none():b.from(e.querySelector(a)).map(c.fromDom)};return{all:p,is:n,one:q}}),g(\"1q\",[\"3x\",\"1m\",\"46\",\"47\",\"48\"],function(a,b,c,d,e){var f=function(a,b){return a.dom()===b.dom()},g=function(a,b){return a.dom().isEqualNode(b.dom())},h=function(c,d){return a.exists(d,b.curry(f,c))},i=function(a,b){var c=a.dom(),d=b.dom();return c!==d&&c.contains(d)},j=function(a,b){return c.documentPositionContainedBy(a.dom(),b.dom())},k=d.detect().browser,l=k.isIE()?j:i;return{eq:f,isEqualNode:g,member:h,contains:l,is:e.is}}),g(\"1s\",[\"1j\"],function(a){var b=function(a){for(var b=0,c=0,d=a;d&&d.nodeType;)b+=d.offsetLeft||0,c+=d.offsetTop||0,d=d.offsetParent;return{x:b,y:c}},c=function(a,b,c){var d={elm:b,alignToTop:c};return a.fire(\"scrollIntoView\",d),d.isDefaultPrevented()},d=function(d,e,f){var g,h,i,j,k=d.dom,l=k.getRoot(),m=0;if(!c(d,e,f)&&a.isElement(e)){if(f===!1&&(m=e.offsetHeight),\"BODY\"!==l.nodeName){var n=d.selection.getScrollContainer();if(n)return g=b(e).y-b(n).y+m,j=n.clientHeight,i=n.scrollTop,void((g<i||g+25>i+j)&&(n.scrollTop=g<i?g:g-j+25))}h=k.getViewPort(d.getWin()),g=k.getPos(e).y+m,i=h.y,j=h.h,(g<h.y||g+25>i+j)&&d.getWin().scrollTo(0,g<i?g:g-j+25)}};return{scrollIntoView:d}}),g(\"1t\",[],function(){function a(a){function b(b,c){var d,e,f,g,h,i,j,k,l=0,m=-1;if(d=b.duplicate(),d.collapse(c),k=d.parentElement(),k.ownerDocument===a.dom.doc){for(;\"false\"===k.contentEditable;)k=k.parentNode;if(!k.hasChildNodes())return{node:k,inside:1};for(g=k.children,e=g.length-1;l<=e;)if(j=Math.floor((l+e)/2),h=g[j],d.moveToElementText(h),m=d.compareEndPoints(c?\"StartToStart\":\"EndToEnd\",b),m>0)e=j-1;else{if(!(m<0))return{node:h};l=j+1}if(m<0)for(h?d.collapse(!1):(d.moveToElementText(k),d.collapse(!0),h=k,f=!0),i=0;0!==d.compareEndPoints(c?\"StartToStart\":\"StartToEnd\",b)&&0!==d.move(\"character\",1)&&k==d.parentElement();)i++;else for(d.collapse(!0),i=0;0!==d.compareEndPoints(c?\"StartToStart\":\"StartToEnd\",b)&&0!==d.move(\"character\",-1)&&k==d.parentElement();)i++;return{node:h,position:m,offset:i,inside:f}}}function c(){function c(a){var c,d,e,f,g,h=b(k,a),i=0;if(c=h.node,d=h.offset,h.inside&&!c.hasChildNodes())return void l[a?\"setStart\":\"setEnd\"](c,0);if(d===f)return void l[a?\"setStartBefore\":\"setEndAfter\"](c);if(h.position<0){if(e=h.inside?c.firstChild:c.nextSibling,!e)return void l[a?\"setStartAfter\":\"setEndAfter\"](c);if(!d)return void(3==e.nodeType?l[a?\"setStart\":\"setEnd\"](e,0):l[a?\"setStartBefore\":\"setEndBefore\"](e));for(;e;){if(3==e.nodeType&&(g=e.nodeValue,i+=g.length,i>=d)){c=e,i-=d,i=g.length-i;break}e=e.nextSibling}}else{if(e=c.previousSibling,!e)return l[a?\"setStartBefore\":\"setEndBefore\"](c);if(!d)return void(3==c.nodeType?l[a?\"setStart\":\"setEnd\"](e,c.nodeValue.length):l[a?\"setStartAfter\":\"setEndAfter\"](e));for(;e;){if(3==e.nodeType&&(i+=e.nodeValue.length,i>=d)){c=e,i-=d;break}e=e.previousSibling}}l[a?\"setStart\":\"setEnd\"](c,i)}var f,g,h,i,j,k=a.getRng(),l=e.createRng();if(f=k.item?k.item(0):k.parentElement(),f.ownerDocument!=e.doc)return l;if(g=a.isCollapsed(),k.item)return l.setStart(f.parentNode,e.nodeIndex(f)),l.setEnd(l.startContainer,l.startOffset+1),l;try{c(!0),g||c()}catch(b){if(b.number!=-2147024809)throw b;j=d.getBookmark(2),h=k.duplicate(),h.collapse(!0),f=h.parentElement(),g||(h=k.duplicate(),h.collapse(!1),i=h.parentElement(),i.innerHTML=i.innerHTML),f.innerHTML=f.innerHTML,d.moveToBookmark(j),k=a.getRng(),c(!0),g||c()}return l}var d=this,e=a.dom,f=!1;this.getBookmark=function(c){function d(a){var b,c,d,f,g=[];for(b=a.parentNode,c=e.getRoot().parentNode;b!=c&&9!==b.nodeType;){for(d=b.children,f=d.length;f--;)if(a===d[f]){g.push(f);break}a=b,b=b.parentNode}return g}function f(a){var c;if(c=b(g,a))return{position:c.position,offset:c.offset,indexes:d(c.node),inside:c.inside}}var g=a.getRng(),h={};return 2===c&&(g.item?h.start={ctrl:!0,indexes:d(g.item(0))}:(h.start=f(!0),a.isCollapsed()||(h.end=f()))),h},this.moveToBookmark=function(a){function b(a){var b,c,d,f;for(b=e.getRoot(),c=a.length-1;c>=0;c--)f=b.children,d=a[c],d<=f.length-1&&(b=f[d]);return b}function c(c){var e,g,h,i,j=a[c?\"start\":\"end\"];j&&(e=j.position>0,g=f.createTextRange(),g.moveToElementText(b(j.indexes)),i=j.offset,i!==h?(g.collapse(j.inside||e),g.moveStart(\"character\",e?-i:i)):g.collapse(c),d.setEndPoint(c?\"StartToStart\":\"EndToStart\",g),c&&d.collapse(!0))}var d,f=e.doc.body;a.start&&(a.start.ctrl?(d=f.createControlRange(),d.addElement(b(a.start.indexes)),d.select()):(d=f.createTextRange(),c(!0),c(),d.select()))},this.addRange=function(b){function c(a){var b,c,g,l,m;g=e.create(\"a\"),b=a?h:j,c=a?i:k,l=d.duplicate(),b!=o&&b!=o.documentElement||(b=p,c=0),3==b.nodeType?(b.parentNode.insertBefore(g,b),l.moveToElementText(g),l.moveStart(\"character\",c),e.remove(g),d.setEndPoint(a?\"StartToStart\":\"EndToEnd\",l)):(m=b.childNodes,m.length?(c>=m.length?e.insertAfter(g,m[m.length-1]):b.insertBefore(g,m[c]),l.moveToElementText(g)):b.canHaveHTML&&(b.innerHTML=\"<span>&#xFEFF;</span>\",g=b.firstChild,l.moveToElementText(g),l.collapse(f)),d.setEndPoint(a?\"StartToStart\":\"EndToEnd\",l),e.remove(g))}var d,g,h,i,j,k,l,m,n,o=a.dom.doc,p=o.body;if(h=b.startContainer,i=b.startOffset,j=b.endContainer,k=b.endOffset,d=p.createTextRange(),h==j&&1==h.nodeType){if(i==k&&!h.hasChildNodes()){if(h.canHaveHTML)return l=h.previousSibling,l&&!l.hasChildNodes()&&e.isBlock(l)?l.innerHTML=\"&#xFEFF;\":l=null,h.innerHTML=\"<span>&#xFEFF;</span><span>&#xFEFF;</span>\",d.moveToElementText(h.lastChild),d.select(),e.doc.selection.clear(),h.innerHTML=\"\",void(l&&(l.innerHTML=\"\"));i=e.nodeIndex(h),h=h.parentNode}if(i==k-1)try{if(n=h.childNodes[i],g=p.createControlRange(),g.addElement(n),g.select(),m=a.getRng(),m.item&&n===m.item(0))return}catch(a){}}c(!0),c(),d.select()},this.getRangeAt=c}return a}),g(\"60\",[\"3y\",\"50\"],function(a,b){var c=function(c){if(null===c)return\"null\";var d=typeof c;return\"object\"===d&&a.prototype.isPrototypeOf(c)?\"array\":\"object\"===d&&b.prototype.isPrototypeOf(c)?\"string\":d},d=function(a){return function(b){return c(b)===a}};return{isString:d(\"string\"),isObject:d(\"object\"),isArray:d(\"array\"),isNull:d(\"null\"),isBoolean:d(\"boolean\"),isUndefined:d(\"undefined\"),isFunction:d(\"function\"),isNumber:d(\"number\")}}),g(\"6m\",[\"3x\",\"1m\",\"3y\",\"3z\"],function(a,b,c,d){return function(){var e=arguments;return function(){for(var f=new c(arguments.length),g=0;g<f.length;g++)f[g]=arguments[g];if(e.length!==f.length)throw new d('Wrong number of arguments to struct. Expected \"['+e.length+']\", got '+f.length+\" arguments\");var h={};return a.each(e,function(a,c){h[a]=b.constant(f[c])}),h}}}),g(\"63\",[\"4z\",\"5s\"],function(a,b){var c=function(){var a=b.keys,c=function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c);return b};return void 0===a?c:a}(),d=function(a,b){for(var d=c(a),e=0,f=d.length;e<f;e++){var g=d[e],h=a[g];b(h,g,a)}},e=function(a,b){return f(a,function(a,c,d){return{k:c,v:b(a,c,d)}})},f=function(a,b){var c={};return d(a,function(d,e){var f=b(d,e,a);c[f.k]=f.v}),c},g=function(a,b){var c={},e={};return d(a,function(a,d){var f=b(a,d)?c:e;f[d]=a}),{t:c,f:e}},h=function(a,b){var c=[];return d(a,function(a,d){c.push(b(a,d))}),c},i=function(b,d){for(var e=c(b),f=0,g=e.length;f<g;f++){var h=e[f],i=b[h];if(d(i,h,b))return a.some(i)}return a.none()},j=function(a){return h(a,function(a){return a})},k=function(a){return j(a).length};return{bifilter:g,each:d,map:e,mapToArray:h,tupleMap:f,find:i,keys:c,values:j,size:k}}),g(\"78\",[\"3x\",\"60\",\"3z\"],function(a,b,c){var d=function(a){return a.slice(0).sort()},e=function(a,b){throw new c(\"All required keys (\"+d(a).join(\", \")+\") were not specified. Specified keys were: \"+d(b).join(\", \")+\".\")},f=function(a){throw new c(\"Unsupported keys for object: \"+d(a).join(\", \"))},g=function(d,e){if(!b.isArray(e))throw new c(\"The \"+d+\" fields must be an array. Was: \"+e+\".\");a.each(e,function(a){if(!b.isString(a))throw new c(\"The value \"+a+\" in the \"+d+\" fields was not a string.\")})},h=function(a,b){throw new c(\"All values need to be of type: \"+b+\". Keys (\"+d(a).join(\", \")+\") were not.\")},i=function(b){var e=d(b),f=a.find(e,function(a,b){return b<e.length-1&&a===e[b+1]});f.each(function(a){throw new c(\"The field: \"+a+\" occurs more than once in the combined fields: [\"+e.join(\", \")+\"].\")})};return{sort:d,reqMessage:e,unsuppMessage:f,validateStrArr:g,invalidTypeMessage:h,checkDupes:i}}),g(\"6n\",[\"3x\",\"1m\",\"63\",\"4z\",\"78\",\"3z\",\"5s\"],function(a,b,c,d,e,f,g){return function(h,i){var j=h.concat(i);if(0===j.length)throw new f(\"You must specify at least one required or optional field.\");\nreturn e.validateStrArr(\"required\",h),e.validateStrArr(\"optional\",i),e.checkDupes(j),function(f){var k=c.keys(f),l=a.forall(h,function(b){return a.contains(k,b)});l||e.reqMessage(h,k);var m=a.filter(k,function(b){return!a.contains(j,b)});m.length>0&&e.unsuppMessage(m);var n={};return a.each(h,function(a){n[a]=b.constant(f[a])}),a.each(i,function(a){n[a]=b.constant(g.prototype.hasOwnProperty.call(f,a)?d.some(f[a]):d.none())}),n}}}),g(\"61\",[\"6m\",\"6n\"],function(a,b){return{immutable:a,immutableBag:b}}),g(\"62\",[],function(){var a=function(a,b){var c=[],d=function(a){return c.push(a),b(a)},e=b(a);do e=e.bind(d);while(e.isSome());return c};return{toArray:a}}),g(\"59\",[\"60\",\"3x\",\"1m\",\"4z\",\"61\",\"62\",\"1q\",\"1r\"],function(a,b,c,d,e,f,g,h){var i=function(a){return h.fromDom(a.dom().ownerDocument)},j=function(a){var b=i(a);return h.fromDom(b.dom().documentElement)},k=function(a){var b=a.dom(),c=b.ownerDocument.defaultView;return h.fromDom(c)},l=function(a){var b=a.dom();return d.from(b.parentNode).map(h.fromDom)},m=function(a){return l(a).bind(function(c){var d=u(c);return b.findIndex(d,function(b){return g.eq(a,b)})})},n=function(b,d){for(var e=a.isFunction(d)?d:c.constant(!1),f=b.dom(),g=[];null!==f.parentNode&&void 0!==f.parentNode;){var i=f.parentNode,j=h.fromDom(i);if(g.push(j),e(j)===!0)break;f=i}return g},o=function(a){var c=function(c){return b.filter(c,function(b){return!g.eq(a,b)})};return l(a).map(u).map(c).getOr([])},p=function(a){var b=a.dom();return d.from(b.offsetParent).map(h.fromDom)},q=function(a){var b=a.dom();return d.from(b.previousSibling).map(h.fromDom)},r=function(a){var b=a.dom();return d.from(b.nextSibling).map(h.fromDom)},s=function(a){return b.reverse(f.toArray(a,q))},t=function(a){return f.toArray(a,r)},u=function(a){var c=a.dom();return b.map(c.childNodes,h.fromDom)},v=function(a,b){var c=a.dom().childNodes;return d.from(c[b]).map(h.fromDom)},w=function(a){return v(a,0)},x=function(a){return v(a,a.dom().childNodes.length-1)},y=e.immutable(\"element\",\"offset\"),z=function(a,b){var c=u(a);return c.length>0&&b<c.length?y(c[b],0):y(a,b)};return{owner:i,defaultView:k,documentElement:j,parent:l,findIndex:m,parents:n,siblings:o,prevSibling:q,offsetParent:p,prevSiblings:s,nextSibling:r,nextSiblings:t,children:u,child:v,firstChild:w,lastChild:x,leaf:z}}),g(\"4a\",[\"59\"],function(a){var b=function(b,c){var d=a.parent(b);d.each(function(a){a.dom().insertBefore(c.dom(),b.dom())})},c=function(c,d){var f=a.nextSibling(c);f.fold(function(){var b=a.parent(c);b.each(function(a){e(a,d)})},function(a){b(a,d)})},d=function(b,c){var d=a.firstChild(b);d.fold(function(){e(b,c)},function(a){b.dom().insertBefore(c.dom(),a.dom())})},e=function(a,b){a.dom().appendChild(b.dom())},f=function(c,d,f){a.child(c,f).fold(function(){e(c,d)},function(a){b(a,d)})},g=function(a,c){b(a,c),e(c,a)};return{before:b,after:c,prepend:d,append:e,appendAt:f,wrap:g}}),g(\"4d\",[\"58\"],function(a){var b=function(a){var b=a.dom().nodeName;return b.toLowerCase()},c=function(a){return a.dom().nodeType},d=function(a){return a.dom().nodeValue},e=function(a){return function(b){return c(b)===a}},f=function(d){return c(d)===a.COMMENT||\"#comment\"===b(d)},g=e(a.ELEMENT),h=e(a.TEXT),i=e(a.DOCUMENT);return{name:b,type:c,value:d,isElement:g,isText:h,isDocument:i,isComment:f}}),g(\"5a\",[\"60\",\"3x\",\"63\",\"4d\",\"3z\",\"49\"],function(a,b,c,d,e,f){var g=function(b,c,d){if(!(a.isString(d)||a.isBoolean(d)||a.isNumber(d)))throw f.error(\"Invalid call to Attr.set. Key \",c,\":: Value \",d,\":: Element \",b),new e(\"Attribute value was not simple\");b.setAttribute(c,d+\"\")},h=function(a,b,c){g(a.dom(),b,c)},i=function(a,b){var d=a.dom();c.each(b,function(a,b){g(d,b,a)})},j=function(a,b){var c=a.dom().getAttribute(b);return null===c?void 0:c},k=function(a,b){var c=a.dom();return!(!c||!c.hasAttribute)&&c.hasAttribute(b)},l=function(a,b){a.dom().removeAttribute(b)},m=function(a){var b=a.dom().attributes;return void 0===b||null===b||0===b.length},n=function(a){return b.foldl(a.dom().attributes,function(a,b){return a[b.name]=b.value,a},{})},o=function(a,b,c){k(a,c)&&!k(b,c)&&h(b,c,j(a,c))},p=function(a,c,e){d.isElement(a)&&d.isElement(c)&&b.each(e,function(b){o(a,c,b)})};return{clone:n,set:h,setAll:i,get:j,has:k,remove:l,hasNone:m,transfer:p}}),g(\"5b\",[\"3x\",\"4a\"],function(a,b){var c=function(c,d){a.each(d,function(a){b.before(c,a)})},d=function(c,d){a.each(d,function(a,e){var f=0===e?c:d[e-1];b.after(f,a)})},e=function(c,d){a.each(d.slice().reverse(),function(a){b.prepend(c,a)})},f=function(c,d){a.each(d,function(a){b.append(c,a)})};return{before:c,after:d,prepend:e,append:f}}),g(\"5c\",[\"3x\",\"5b\",\"59\"],function(a,b,c){var d=function(b){b.dom().textContent=\"\",a.each(c.children(b),function(a){e(a)})},e=function(a){var b=a.dom();null!==b.parentNode&&b.parentNode.removeChild(b)},f=function(a){var d=c.children(a);d.length>0&&b.before(a,d),e(a)};return{empty:d,remove:e,unwrap:f}}),g(\"4b\",[\"5a\",\"1r\",\"4a\",\"5b\",\"5c\",\"59\"],function(a,b,c,d,e,f){var g=function(a,c){return b.fromDom(a.dom().cloneNode(c))},h=function(a){return g(a,!1)},i=function(a){return g(a,!0)},j=function(c,d){var e=b.fromTag(d),f=a.clone(c);return a.setAll(e,f),e},k=function(a,b){var c=j(a,b),e=f.children(i(a));return d.append(c,e),c},l=function(a,b){var g=j(a,b);c.before(a,g);var h=f.children(a);return d.append(g,h),e.remove(a),g};return{shallow:h,shallowAs:j,deep:i,copy:k,mutate:l}}),g(\"4c\",[\"3x\",\"1r\",\"22\"],function(a,b,c){var d=function(d,e){var f=e||c,g=f.createDocumentFragment();return a.each(d,function(a){g.appendChild(a.dom())}),b.fromDom(g)};return{fromElements:d}}),g(\"4e\",[\"3x\",\"1m\",\"4d\"],function(a,b,c){var d=[\"article\",\"aside\",\"details\",\"div\",\"dt\",\"figcaption\",\"footer\",\"form\",\"fieldset\",\"header\",\"hgroup\",\"html\",\"main\",\"nav\",\"section\",\"summary\",\"body\",\"p\",\"dl\",\"multicol\",\"dd\",\"figure\",\"address\",\"center\",\"blockquote\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"listing\",\"xmp\",\"pre\",\"plaintext\",\"menu\",\"dir\",\"ul\",\"ol\",\"li\",\"hr\",\"table\",\"tbody\",\"thead\",\"tfoot\",\"th\",\"tr\",\"td\",\"caption\"],e=[\"area\",\"base\",\"basefont\",\"br\",\"col\",\"frame\",\"hr\",\"img\",\"input\",\"isindex\",\"link\",\"meta\",\"param\",\"embed\",\"source\",\"wbr\",\"track\"],f=[\"td\",\"th\"],g=[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"p\",\"div\",\"address\",\"pre\",\"form\",\"blockquote\",\"center\",\"dir\",\"fieldset\",\"header\",\"footer\",\"article\",\"section\",\"hgroup\",\"aside\",\"nav\",\"figure\"],h=[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"],i=function(d){var e;return function(f){return e=e?e:a.mapToObject(d,b.constant(!0)),e.hasOwnProperty(c.name(f))}},j=i(h),k=i(d),l=function(a){return c.isElement(a)&&!k(a)};return{isBlock:k,isInline:l,isHeading:j,isTextBlock:i(g),isVoid:i(e),isTableCell:i(f)}}),g(\"4f\",[\"1m\",\"1q\",\"59\"],function(a,b,c){var d=function(a){return a.slice(0,-1)},e=function(a,e,f){return b.contains(e,a)?d(c.parents(a,function(a){return f(a)||b.eq(a,e)})):[]},f=function(b,c){return e(b,c,a.constant(!1))},g=function(a,b){return[a].concat(f(a,b))};return{parentsUntil:e,parents:f,parentsAndSelf:g}}),g(\"5d\",[\"4z\"],function(a){var b=function(a){for(var b=[],c=function(a){b.push(a)},d=0;d<a.length;d++)a[d].each(c);return b},c=function(b,c){for(var d=0;d<b.length;d++){var e=c(b[d],d);if(e.isSome())return e}return a.none()},d=function(b,c){for(var d=[],e=0;e<b.length;e++){var f=b[e];if(!f.isSome())return a.none();d.push(f.getOrDie())}return a.some(c.apply(null,d))};return{cat:b,findMap:c,liftN:d}}),g(\"4g\",[\"3x\",\"1m\",\"4z\",\"5d\",\"1q\",\"1r\",\"4d\",\"59\",\"1j\"],function(a,b,c,d,e,f,g,h,i){var j=function(a){var b=a.startContainer,d=a.startOffset;return i.isText(b)?0===d?c.some(f.fromDom(b)):c.none():c.from(b.childNodes[d]).map(f.fromDom)},k=function(a){var b=a.endContainer,d=a.endOffset;return i.isText(b)?d===b.data.length?c.some(f.fromDom(b)):c.none():c.from(b.childNodes[d-1]).map(f.fromDom)},l=function(a){return h.firstChild(a).fold(b.constant([a]),function(b){return[a].concat(l(b))})},m=function(a){return h.lastChild(a).fold(b.constant([a]),function(b){return\"br\"===g.name(b)?h.prevSibling(b).map(function(b){return[a].concat(m(b))}).getOr([]):[a].concat(m(b))})},n=function(c,f){return d.liftN([j(f),k(f)],function(d,f){var g=a.find(l(c),b.curry(e.eq,d)),h=a.find(m(c),b.curry(e.eq,f));return g.isSome()&&h.isSome()}).getOr(!1)};return{hasAllContentsSelected:n}}),g(\"1u\",[\"3x\",\"1m\",\"4a\",\"4b\",\"1r\",\"4c\",\"4d\",\"4e\",\"4f\",\"4g\"],function(a,b,c,d,e,f,g,h,i,j){var k=function(b){return a.find(b,function(a){return\"ul\"===g.name(a)||\"ol\"===g.name(a)})},l=function(c,d){return a.find(c,function(a){return\"li\"===g.name(a)&&j.hasAllContentsSelected(a,d)}).fold(b.constant([]),function(a){return k(c).map(function(a){return[e.fromTag(\"li\"),e.fromTag(g.name(a))]}).getOr([])})},m=function(b,d){var e=a.foldl(d,function(a,b){return c.append(b,a),b},b);return d.length>0?f.fromElements([e]):e},n=function(b,c){var f=i.parentsAndSelf(e.fromDom(c.commonAncestorContainer),e.fromDom(b)),g=a.filter(f,function(a){return h.isInline(a)||h.isHeading(a)}),j=l(f,c);return a.map(g.concat(j),d.shallow)},o=function(a,b){return m(e.fromDom(b.cloneContents()),n(a,b))},p=function(a,b){return b.collapsed?f.fromElements([]):o(a,b)};return{read:p}}),g(\"s\",[\"1q\",\"1r\",\"1p\",\"r\",\"q\",\"1j\",\"h\",\"1s\",\"c\",\"1t\",\"6\",\"1u\",\"1l\",\"9\"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){function o(a,b,c,f){var g=this;g.dom=a,g.win=b,g.serializer=c,g.editor=f,g.bookmarkManager=new d(g),g.controlSelection=new e(g,f),g.win.getSelection||(g.tridentSel=new j(g))}var p=n.each,q=n.trim,r=k.ie,s=function(c){return!(!c||!c.ownerDocument)&&a.contains(b.fromDom(c.ownerDocument),b.fromDom(c))},t=function(a){return!!a&&(!!a.select||s(a.startContainer)&&s(a.endContainer))};return o.prototype={setCursorLocation:function(a,b){var c=this,d=c.dom.createRng();a?(d.setStart(a,b),d.setEnd(a,b),c.setRng(d),c.collapse(!1)):(c._moveEndPoint(d,c.editor.getBody(),!0),c.setRng(d))},getContent:function(a){var b,c,d,e=this,f=e.getRng(),g=e.dom.create(\"body\"),h=e.getSel();return a=a||{},b=c=\"\",a.get=!0,a.format=a.format||\"html\",a.selection=!0,e.editor.fire(\"BeforeGetContent\",a),\"text\"===a.format?e.isCollapsed()?\"\":m.trim(f.text||(h.toString?h.toString():\"\")):(f.cloneContents?(d=a.contextual?l.read(e.editor.getBody(),f).dom():f.cloneContents(),d&&g.appendChild(d)):void 0!==f.item||void 0!==f.htmlText?(g.innerHTML=\"<br>\"+(f.item?f.item(0).outerHTML:f.htmlText),g.removeChild(g.firstChild)):g.innerHTML=f.toString(),/^\\s/.test(g.innerHTML)&&(b=\" \"),/\\s+$/.test(g.innerHTML)&&(c=\" \"),a.getInner=!0,a.content=e.isCollapsed()?\"\":b+e.serializer.serialize(g,a)+c,e.editor.fire(\"GetContent\",a),a.content)},setContent:function(a,b){var c,d,e,f=this,g=f.getRng(),h=f.win.document;if(b=b||{format:\"html\"},b.set=!0,b.selection=!0,b.content=a,b.no_events||f.editor.fire(\"BeforeSetContent\",b),a=b.content,g.insertNode){a+='<span id=\"__caret\">_</span>',g.startContainer==h&&g.endContainer==h?h.body.innerHTML=a:(g.deleteContents(),0===h.body.childNodes.length?h.body.innerHTML=a:g.createContextualFragment?g.insertNode(g.createContextualFragment(a)):(d=h.createDocumentFragment(),e=h.createElement(\"div\"),d.appendChild(e),e.outerHTML=a,g.insertNode(d))),c=f.dom.get(\"__caret\"),g=h.createRange(),g.setStartBefore(c),g.setEndBefore(c),f.setRng(g),f.dom.remove(\"__caret\");try{f.setRng(g)}catch(a){}}else g.item&&(h.execCommand(\"Delete\",!1,null),g=f.getRng()),/^\\s+/.test(a)?(g.pasteHTML('<span id=\"__mce_tmp\">_</span>'+a),f.dom.remove(\"__mce_tmp\")):g.pasteHTML(a);b.no_events||f.editor.fire(\"SetContent\",b)},getStart:function(a){var b,c,d,e,f=this,g=f.getRng();if(g.duplicate||g.item){if(g.item)return g.item(0);for(d=g.duplicate(),d.collapse(1),b=d.parentElement(),b.ownerDocument!==f.dom.doc&&(b=f.dom.getRoot()),c=e=g.parentElement();e=e.parentNode;)if(e==b){b=c;break}return b}return b=g.startContainer,1==b.nodeType&&b.hasChildNodes()&&(a&&g.collapsed||(b=b.childNodes[Math.min(b.childNodes.length-1,g.startOffset)])),b&&3==b.nodeType?b.parentNode:b},getEnd:function(a){var b,c,d=this,e=d.getRng();return e.duplicate||e.item?e.item?e.item(0):(e=e.duplicate(),e.collapse(0),b=e.parentElement(),b.ownerDocument!==d.dom.doc&&(b=d.dom.getRoot()),b&&\"BODY\"==b.nodeName?b.lastChild||b:b):(b=e.endContainer,c=e.endOffset,1==b.nodeType&&b.hasChildNodes()&&(a&&e.collapsed||(b=b.childNodes[c>0?c-1:c])),b&&3==b.nodeType?b.parentNode:b)},getBookmark:function(a,b){return this.bookmarkManager.getBookmark(a,b)},moveToBookmark:function(a){return this.bookmarkManager.moveToBookmark(a)},select:function(a,b){var c,d=this,e=d.dom,f=e.createRng();if(d.lastFocusBookmark=null,a){if(!b&&d.controlSelection.controlSelect(a))return;c=e.nodeIndex(a),f.setStart(a.parentNode,c),f.setEnd(a.parentNode,c+1),b&&(d._moveEndPoint(f,a,!0),d._moveEndPoint(f,a)),d.setRng(f)}return a},isCollapsed:function(){var a=this,b=a.getRng(),c=a.getSel();return!(!b||b.item)&&(b.compareEndPoints?0===b.compareEndPoints(\"StartToEnd\",b):!c||b.collapsed)},collapse:function(a){var b,c=this,d=c.getRng();d.item&&(b=d.item(0),d=c.win.document.body.createTextRange(),d.moveToElementText(b)),d.collapse(!!a),c.setRng(d)},getSel:function(){var a=this.win;return a.getSelection?a.getSelection():a.document.selection},getRng:function(a){function b(a,b,c){try{return b.compareBoundaryPoints(a,c)}catch(a){return-1}}var c,d,e,f,g,h,i=this;if(!i.win)return null;if(f=i.win.document,\"undefined\"==typeof f||null===f)return null;if(!a&&i.lastFocusBookmark){var j=i.lastFocusBookmark;return j.startContainer?(d=f.createRange(),d.setStart(j.startContainer,j.startOffset),d.setEnd(j.endContainer,j.endOffset)):d=j,d}if(a&&i.tridentSel)return i.tridentSel.getRangeAt(0);try{(c=i.getSel())&&(d=c.rangeCount>0?c.getRangeAt(0):c.createRange?c.createRange():f.createRange())}catch(a){}if(h=i.editor.fire(\"GetSelectionRange\",{range:d}),h.range!==d)return h.range;if(r&&d&&d.setStart&&f.selection){try{g=f.selection.createRange()}catch(a){}g&&g.item&&(e=g.item(0),d=f.createRange(),d.setStartBefore(e),d.setEndAfter(e))}return d||(d=f.createRange?f.createRange():f.body.createTextRange()),d.setStart&&9===d.startContainer.nodeType&&d.collapsed&&(e=i.dom.getRoot(),d.setStart(e,0),d.setEnd(e,0)),i.selectedRange&&i.explicitRange&&(0===b(d.START_TO_START,d,i.selectedRange)&&0===b(d.END_TO_END,d,i.selectedRange)?d=i.explicitRange:(i.selectedRange=null,i.explicitRange=null)),d},setRng:function(a,b){var c,d,e,f=this;if(t(a))if(a.select){f.explicitRange=null;try{a.select()}catch(a){}}else if(f.tridentSel){if(a.cloneRange)try{f.tridentSel.addRange(a)}catch(a){}}else{if(c=f.getSel(),e=f.editor.fire(\"SetSelectionRange\",{range:a,forward:b}),a=e.range,c){f.explicitRange=a;try{c.removeAllRanges(),c.addRange(a)}catch(a){}b===!1&&c.extend&&(c.collapse(a.endContainer,a.endOffset),c.extend(a.startContainer,a.startOffset)),f.selectedRange=c.rangeCount>0?c.getRangeAt(0):null}a.collapsed||a.startContainer!==a.endContainer||!c.setBaseAndExtent||k.ie||a.endOffset-a.startOffset<2&&a.startContainer.hasChildNodes()&&(d=a.startContainer.childNodes[a.startOffset],d&&\"IMG\"===d.tagName&&(c.setBaseAndExtent(a.startContainer,a.startOffset,a.endContainer,a.endOffset),c.anchorNode===a.startContainer&&c.focusNode===a.endContainer||c.setBaseAndExtent(d,0,d,1))),f.editor.fire(\"AfterSetSelectionRange\",{range:a,forward:b})}},setNode:function(a){var b=this;return b.setContent(b.dom.getOuterHTML(a)),a},getNode:function(){function a(a,b){for(var c=a;a&&3===a.nodeType&&0===a.length;)a=b?a.nextSibling:a.previousSibling;return a||c}var b,c,d,e,f,g=this,h=g.getRng(),i=g.dom.getRoot();return h?(c=h.startContainer,d=h.endContainer,e=h.startOffset,f=h.endOffset,h.setStart?(b=h.commonAncestorContainer,!h.collapsed&&(c==d&&f-e<2&&c.hasChildNodes()&&(b=c.childNodes[e]),3===c.nodeType&&3===d.nodeType&&(c=c.length===e?a(c.nextSibling,!0):c.parentNode,d=0===f?a(d.previousSibling,!1):d.parentNode,c&&c===d))?c:b&&3==b.nodeType?b.parentNode:b):(b=h.item?h.item(0):h.parentElement(),b.ownerDocument!==g.win.document&&(b=i),b)):i},getSelectedBlocks:function(a,b){var c,d,e=this,f=e.dom,g=[];if(d=f.getRoot(),a=f.getParent(a||e.getStart(),f.isBlock),b=f.getParent(b||e.getEnd(),f.isBlock),a&&a!=d&&g.push(a),a&&b&&a!=b){c=a;for(var h=new i(a,d);(c=h.next())&&c!=b;)f.isBlock(c)&&g.push(c)}return b&&a!=b&&b!=d&&g.push(b),g},isForward:function(){var a,b,c=this.dom,d=this.getSel();return!(d&&d.anchorNode&&d.focusNode)||(a=c.createRng(),a.setStart(d.anchorNode,d.anchorOffset),a.collapse(!0),b=c.createRng(),b.setStart(d.focusNode,d.focusOffset),b.collapse(!0),a.compareBoundaryPoints(a.START_TO_START,b)<=0)},normalize:function(){var a=this,b=a.getRng();return k.range&&new g(a.dom).normalize(b)&&a.setRng(b,a.isForward()),b},selectorChanged:function(a,b){var c,d=this;return d.selectorChangedData||(d.selectorChangedData={},c={},d.editor.on(\"NodeChange\",function(a){var b=a.element,e=d.dom,f=e.getParents(b,null,e.getRoot()),g={};p(d.selectorChangedData,function(a,b){p(f,function(d){if(e.is(d,b))return c[b]||(p(a,function(a){a(!0,{node:d,selector:b,parents:f})}),c[b]=a),g[b]=a,!1})}),p(c,function(a,d){g[d]||(delete c[d],p(a,function(a){a(!1,{node:b,selector:d,parents:f})}))})})),d.selectorChangedData[a]||(d.selectorChangedData[a]=[]),d.selectorChangedData[a].push(b),d},getScrollContainer:function(){for(var a,b=this.dom.getRoot();b&&\"BODY\"!=b.nodeName;){if(b.scrollHeight>b.clientHeight){a=b;break}b=b.parentNode}return a},scrollIntoView:function(a,b){h.scrollIntoView(this.editor,a,b)},placeCaretAt:function(a,b){this.setRng(g.getCaretRangeFromPoint(a,b,this.editor.getDoc()))},_moveEndPoint:function(a,b,c){var d=b,e=new i(b,d),f=this.dom.schema.getNonEmptyElements();do{if(3==b.nodeType&&0!==q(b.nodeValue).length)return void(c?a.setStart(b,0):a.setEnd(b,b.nodeValue.length));if(f[b.nodeName]&&!/^(TD|TH)$/.test(b.nodeName))return void(c?a.setStartBefore(b):\"BR\"==b.nodeName?a.setEndBefore(b):a.setEndAfter(b));if(k.ie&&k.ie<11&&this.dom.isBlock(b)&&this.dom.isEmpty(b))return void(c?a.setStart(b,0):a.setEnd(b,0))}while(b=c?e.next():e.prev());\"BODY\"==d.nodeName&&(c?a.setStart(d,0):a.setEnd(d,d.childNodes.length))},getBoundingClientRect:function(){var a=this.getRng();return a.collapsed?c.fromRangeStart(a).getClientRects()[0]:a.getBoundingClientRect()},destroy:function(){this.win=null,this.controlSelection.destroy()}},o}),g(\"1v\",[\"r\",\"9\"],function(a,b){function c(b){this.compare=function(c,e){function f(a){var c={};return d(b.getAttribs(a),function(d){var e=d.nodeName.toLowerCase();0!==e.indexOf(\"_\")&&\"style\"!==e&&0!==e.indexOf(\"data-\")&&(c[e]=b.getAttrib(a,e))}),c}function g(a,b){var c,d;for(d in a)if(a.hasOwnProperty(d)){if(c=b[d],\"undefined\"==typeof c)return!1;if(a[d]!=c)return!1;delete b[d]}for(d in b)if(b.hasOwnProperty(d))return!1;return!0}return c.nodeName==e.nodeName&&(!!g(f(c),f(e))&&(!!g(b.parseStyle(b.getAttrib(c,\"style\")),b.parseStyle(b.getAttrib(e,\"style\")))&&(!a.isBookmarkNode(c)&&!a.isBookmarkNode(e))))}}var d=b.each;return c}),g(\"1x\",[\"e\",\"9\",\"j\"],function(a,b,c){function d(a,d){function e(a,b){b.classes.length&&j.addClass(a,b.classes.join(\" \")),j.setAttribs(a,b.attrs)}function f(a){var b;return k=\"string\"==typeof a?{name:a,classes:[],attrs:{}}:a,b=j.create(k.name),e(b,k),b}function g(a,c){var d=\"string\"!=typeof a?a.nodeName.toLowerCase():a,e=m.getElementRule(d),f=e&&e.parentsRequired;return!(!f||!f.length)&&(c&&b.inArray(f,c)!==-1?c:f[0])}function h(a,c,d){var e,i,k,l=c.length>0&&c[0],m=l&&l.name;if(k=g(a,m))m==k?(i=c[0],c=c.slice(1)):i=k;else if(l)i=c[0],c=c.slice(1);else if(!d)return a;return i&&(e=f(i),e.appendChild(a)),d&&(e||(e=j.create(\"div\"),e.appendChild(a)),b.each(d,function(b){var c=f(b);e.insertBefore(c,a)})),h(e,c,i&&i.siblings)}var i,k,l,m=d&&d.schema||new c({});return a&&a.length?(k=a[0],i=f(k),l=j.create(\"div\"),l.appendChild(h(i,a.slice(1),k.siblings)),l):\"\"}function e(a,b){return d(g(a),b)}function f(a){var c,d={classes:[],attrs:{}};return a=d.selector=b.trim(a),\"*\"!==a&&(c=a.replace(/(?:([#\\.]|::?)([\\w\\-]+)|(\\[)([^\\]]+)\\]?)/g,function(a,c,e,f,g){switch(c){case\"#\":d.attrs.id=e;break;case\".\":d.classes.push(e);break;case\":\":b.inArray(\"checked disabled enabled read-only required\".split(\" \"),e)!==-1&&(d.attrs[e]=e)}if(\"[\"==f){var h=g.match(/([\\w\\-]+)(?:\\=\\\"([^\\\"]+))?/);h&&(d.attrs[h[1]]=h[2])}return\"\"})),d.name=c||\"div\",d}function g(a){return a&&\"string\"==typeof a?(a=a.split(/\\s*,\\s*/)[0],a=a.replace(/\\s*(~\\+|~|\\+|>)\\s*/g,\"$1\"),b.map(a.split(/(?:>|\\s+(?![^\\[\\]]+\\]))/),function(a){var c=b.map(a.split(/(?:~\\+|~|\\+)/),f),d=c.pop();return c.length&&(d.siblings=c),d}).reverse()):[]}function h(a,b){function c(a){return a.replace(/%(\\w+)/g,\"\")}var e,f,h,k,l,m,n=\"\";if(m=a.settings.preview_styles,m===!1)return\"\";if(\"string\"!=typeof m&&(m=\"font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow\"),\"string\"==typeof b){if(b=a.formatter.get(b),!b)return;b=b[0]}return\"preview\"in b&&(m=b.preview,m===!1)?\"\":(e=b.block||b.inline||\"span\",k=g(b.selector),k.length?(k[0].name||(k[0].name=e),e=b.selector,f=d(k,a)):f=d([e],a),h=j.select(e,f)[0]||f.firstChild,i(b.styles,function(a,b){a=c(a),a&&j.setStyle(h,b,a)}),i(b.attributes,function(a,b){a=c(a),a&&j.setAttrib(h,b,a)}),i(b.classes,function(a){a=c(a),j.hasClass(h,a)||j.addClass(h,a)}),a.fire(\"PreviewFormats\"),j.setStyles(f,{position:\"absolute\",left:-65535}),a.getBody().appendChild(f),l=j.getStyle(a.getBody(),\"fontSize\",!0),l=/px$/.test(l)?parseInt(l,10):0,i(m.split(\" \"),function(b){var c=j.getStyle(h,b,!0);if(!(\"background-color\"==b&&/transparent|rgba\\s*\\([^)]+,\\s*0\\)/.test(c)&&(c=j.getStyle(a.getBody(),b,!0),\"#ffffff\"==j.toHex(c).toLowerCase())||\"color\"==b&&\"#000000\"==j.toHex(c).toLowerCase())){if(\"font-size\"==b&&/em|%$/.test(c)){if(0===l)return;c=parseFloat(c,10)/(/%$/.test(c)?100:1),c=c*l+\"px\"}\"border\"==b&&c&&(n+=\"padding:0 2px;\"),n+=b+\":\"+c+\";\"}}),a.fire(\"AfterPreviewFormats\"),j.remove(f),n)}var i=b.each,j=a.DOM;return{getCssText:h,parseSelector:g,selectorToHtml:e}}),g(\"1y\",[\"1g\",\"1j\",\"a\"],function(a,b,c){function d(a,b){var c=f[a];c||(f[a]=c=[]),f[a].push(b)}function e(a,b){h(f[a],function(a){a(b)})}var f={},g=a.filter,h=a.each;return d(\"pre\",function(d){function e(b){return i(b.previousSibling)&&a.indexOf(j,b.previousSibling)!=-1}function f(a,b){c(b).remove(),c(a).append(\"<br><br>\").append(b.childNodes)}var i,j,k=d.selection.getRng();i=b.matchNodeNames(\"pre\"),k.collapsed||(j=d.selection.getSelectedBlocks(),h(g(g(j,i),e),function(a){f(a.previousSibling,a)}))}),{postProcess:e}}),g(\"t\",[\"c\",\"h\",\"r\",\"1v\",\"1j\",\"1w\",\"9\",\"1x\",\"1y\"],function(a,b,c,d,e,f,g,h,i){return function(j){function k(a){return a.nodeType&&(a=a.nodeName),!!j.schema.getTextBlockElements()[a.toLowerCase()]}function l(a){return/^(TH|TD)$/.test(a.nodeName)}function m(a){return a&&/^(IMG)$/.test(a.nodeName)}function n(a,b){return da.getParents(a,b,da.getRoot())}function o(a){return 1===a.nodeType&&\"_mce_caret\"===a.id}function p(){s({valigntop:[{selector:\"td,th\",styles:{verticalAlign:\"top\"}}],valignmiddle:[{selector:\"td,th\",styles:{verticalAlign:\"middle\"}}],valignbottom:[{selector:\"td,th\",styles:{verticalAlign:\"bottom\"}}],alignleft:[{selector:\"figure.image\",collapsed:!1,classes:\"align-left\",ceFalseOverride:!0,preview:\"font-family font-size\"},{selector:\"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li\",styles:{textAlign:\"left\"},inherit:!1,preview:!1,defaultBlock:\"div\"},{selector:\"img,table\",collapsed:!1,styles:{\"float\":\"left\"},preview:\"font-family font-size\"}],aligncenter:[{selector:\"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li\",styles:{textAlign:\"center\"},inherit:!1,preview:!1,defaultBlock:\"div\"},{selector:\"figure.image\",collapsed:!1,classes:\"align-center\",ceFalseOverride:!0,preview:\"font-family font-size\"},{selector:\"img\",collapsed:!1,styles:{display:\"block\",marginLeft:\"auto\",marginRight:\"auto\"},preview:!1},{selector:\"table\",collapsed:!1,styles:{marginLeft:\"auto\",marginRight:\"auto\"},preview:\"font-family font-size\"}],alignright:[{selector:\"figure.image\",collapsed:!1,classes:\"align-right\",ceFalseOverride:!0,preview:\"font-family font-size\"},{selector:\"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li\",styles:{textAlign:\"right\"},inherit:!1,preview:\"font-family font-size\",defaultBlock:\"div\"},{selector:\"img,table\",collapsed:!1,styles:{\"float\":\"right\"},preview:\"font-family font-size\"}],alignjustify:[{selector:\"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li\",styles:{textAlign:\"justify\"},inherit:!1,defaultBlock:\"div\",preview:\"font-family font-size\"}],bold:[{inline:\"strong\",remove:\"all\"},{inline:\"span\",styles:{fontWeight:\"bold\"}},{inline:\"b\",remove:\"all\"}],italic:[{inline:\"em\",remove:\"all\"},{inline:\"span\",styles:{fontStyle:\"italic\"}},{inline:\"i\",remove:\"all\"}],underline:[{inline:\"span\",styles:{textDecoration:\"underline\"},exact:!0},{inline:\"u\",remove:\"all\"}],strikethrough:[{inline:\"span\",styles:{textDecoration:\"line-through\"},exact:!0},{inline:\"strike\",remove:\"all\"}],forecolor:{inline:\"span\",styles:{color:\"%value\"},links:!0,remove_similar:!0,clear_child_styles:!0},hilitecolor:{inline:\"span\",styles:{backgroundColor:\"%value\"},links:!0,remove_similar:!0,clear_child_styles:!0},fontname:{inline:\"span\",styles:{fontFamily:\"%value\"},clear_child_styles:!0},fontsize:{inline:\"span\",styles:{fontSize:\"%value\"},clear_child_styles:!0},fontsize_class:{inline:\"span\",attributes:{\"class\":\"%value\"}},blockquote:{block:\"blockquote\",wrapper:1,remove:\"all\"},subscript:{inline:\"sub\"},superscript:{inline:\"sup\"},code:{inline:\"code\"},link:{inline:\"a\",selector:\"a\",remove:\"all\",split:!0,deep:!0,onmatch:function(){return!0},onformat:function(a,b,c){qa(c,function(b,c){da.setAttrib(a,c,b)})}},removeformat:[{selector:\"b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins\",remove:\"all\",split:!0,expand:!1,block_expand:!0,deep:!0},{selector:\"span\",attributes:[\"style\",\"class\"],remove:\"empty\",split:!0,expand:!1,deep:!0},{selector:\"*\",attributes:[\"style\",\"class\"],split:!1,expand:!1,deep:!0}]}),qa(\"p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp\".split(/\\s/),function(a){s(a,{block:a,remove:\"all\"})}),s(j.settings.formats)}function q(){j.addShortcut(\"meta+b\",\"bold_desc\",\"Bold\"),j.addShortcut(\"meta+i\",\"italic_desc\",\"Italic\"),j.addShortcut(\"meta+u\",\"underline_desc\",\"Underline\");for(var a=1;a<=6;a++)j.addShortcut(\"access+\"+a,\"\",[\"FormatBlock\",!1,\"h\"+a]);j.addShortcut(\"access+7\",\"\",[\"FormatBlock\",!1,\"p\"]),j.addShortcut(\"access+8\",\"\",[\"FormatBlock\",!1,\"div\"]),j.addShortcut(\"access+9\",\"\",[\"FormatBlock\",!1,\"address\"])}function r(a){return a?ca[a]:ca}function s(a,b){a&&(\"string\"!=typeof a?qa(a,function(a,b){s(b,a)}):(b=b.length?b:[b],qa(b,function(a){a.deep===_&&(a.deep=!a.selector),a.split===_&&(a.split=!a.selector||a.inline),a.remove===_&&a.selector&&!a.inline&&(a.remove=\"none\"),a.selector&&a.inline&&(a.mixed=!0,a.block_expand=!0),\"string\"==typeof a.classes&&(a.classes=a.classes.split(/\\s+/))}),ca[a]=b))}function t(a){return a&&ca[a]&&delete ca[a],ca}function u(a,b){var c=r(b);if(c)for(var d=0;d<c.length;d++)if(c[d].inherit===!1&&da.is(a,c[d].selector))return!0;return!1}function v(a){var b;return j.dom.getParent(a,function(a){return b=j.dom.getStyle(a,\"text-decoration\"),b&&\"none\"!==b}),b}function w(a){var b;1===a.nodeType&&a.parentNode&&1===a.parentNode.nodeType&&(b=v(a.parentNode),j.dom.getStyle(a,\"color\")&&b?j.dom.setStyle(a,\"text-decoration\",b):j.dom.getStyle(a,\"text-decoration\")===b&&j.dom.setStyle(a,\"text-decoration\",null))}function x(b,c,d){function e(a,b){if(b=b||p,a){if(b.onformat&&b.onformat(a,b,c,d),qa(b.styles,function(b,d){da.setStyle(a,d,O(b,c))}),b.styles){var e=da.getAttrib(a,\"style\");e&&a.setAttribute(\"data-mce-style\",e)}qa(b.attributes,function(b,d){da.setAttrib(a,d,O(b,c))}),qa(b.classes,function(b){b=O(b,c),da.hasClass(a,b)||da.addClass(a,b)})}}function f(a,b){var c=!1;return!!p.selector&&(qa(a,function(a){if(!(\"collapsed\"in a&&a.collapsed!==q))return da.is(b,a.selector)&&!o(b)?(e(b,a),c=!0,!1):void 0}),c)}function g(){function b(b,c){var e=new a(c);for(d=e.prev2();d;d=e.prev2()){if(3==d.nodeType&&d.data.length>0)return d;if(d.childNodes.length>1||d==b||\"BR\"==d.tagName)return d}}var c=j.selection.getRng(),e=c.startContainer,f=c.endContainer;if(e!=f&&0===c.endOffset){var g=b(e,f),h=3==g.nodeType?g.data.length:g.childNodes.length;c.setEnd(g,h)}return c}function h(a,d,g){var h,i,j=[],l=!0;h=p.inline||p.block,i=da.create(h),e(i),fa.walk(a,function(a){function d(a){var q,r,s,t;if(t=l,q=a.nodeName.toLowerCase(),r=a.parentNode.nodeName.toLowerCase(),1===a.nodeType&&oa(a)&&(t=l,l=\"true\"===oa(a),s=!0),H(q,\"br\"))return m=0,void(p.block&&da.remove(a));if(p.wrapper&&A(a,b,c))return void(m=0);if(l&&!s&&p.block&&!p.wrapper&&k(q)&&ga(r,h))return a=da.rename(a,h),e(a),j.push(a),void(m=0);if(p.selector){var u=f(n,a);if(!p.inline||u)return void(m=0)}!l||s||!ga(h,q)||!ga(r,h)||!g&&3===a.nodeType&&1===a.nodeValue.length&&65279===a.nodeValue.charCodeAt(0)||o(a)||p.inline&&ha(a)?(m=0,qa(ra(a.childNodes),d),s&&(l=t),m=0):(m||(m=da.clone(i,ma),a.parentNode.insertBefore(m,a),j.push(m)),m.appendChild(a))}var m;qa(a,d)}),p.links===!0&&qa(j,function(a){function b(a){\"A\"===a.nodeName&&e(a,p),qa(ra(a.childNodes),b)}b(a)}),qa(j,function(a){function d(a){var b=0;return qa(a.childNodes,function(a){P(a)||pa(a)||b++}),b}function f(a){var b=!1;return qa(a.childNodes,function(a){if(J(a))return b=a,!1}),b}function g(a,b){do{if(1!==d(a))break;if(a=f(a),!a)break;if(b(a))return a}while(a);return null}function h(a){var b,c;return b=f(a),b&&!pa(b)&&G(b,p)&&(c=da.clone(b,ma),e(c),da.replace(c,a,na),da.remove(b,1)),c||a}var i;if(i=d(a),(j.length>1||!ha(a))&&0===i)return void da.remove(a,1);if(p.inline||p.wrapper){if(p.exact||1!==i||(a=h(a)),qa(n,function(b){qa(da.select(b.inline,a),function(a){J(a)&&T(b,c,a,b.exact?a:null)}),ua(b,a)}),A(a.parentNode,b,c)&&T(p,c,a)&&(a=0),p.merge_with_parents&&da.getParent(a.parentNode,function(d){if(A(d,b,c))return T(p,c,a)&&(a=0),na}),a&&!ha(a)&&!M(a,\"fontSize\")){var k=g(a,K(\"fontSize\"));k&&x(\"fontsize\",{value:M(k,\"fontSize\")},a)}a&&p.merge_siblings!==!1&&(a=W(V(a),a),a=W(a,V(a,na)))}})}var l,m,n=r(b),p=n[0],q=!d&&ea.isCollapsed();if(\"false\"!==oa(ea.getNode())){if(p){if(d)d.nodeType?f(n,d)||(m=da.createRng(),m.setStartBefore(d),m.setEndAfter(d),h(R(m,n),null,!0)):h(d,null,!0);else if(q&&p.inline&&!da.select(\"td[data-mce-selected],th[data-mce-selected]\").length)Y(\"apply\",b,c);else{var s=j.selection.getNode();ia||!n[0].defaultBlock||da.getParent(s,da.isBlock)||x(n[0].defaultBlock),j.selection.setRng(g()),l=ea.getBookmark(),h(R(ea.getRng(na),n),l),p.styles&&((p.styles.color||p.styles.textDecoration)&&(sa(s,w,\"childNodes\"),w(s)),p.styles.backgroundColor&&I(s,K(\"fontSize\"),L(\"backgroundColor\",O(p.styles.backgroundColor,c)))),ea.moveToBookmark(l),Z(ea.getRng(na)),j.nodeChanged()}i.postProcess(b,j)}}else{d=ea.getNode();for(var t=0,u=n.length;t<u;t++)if(n[t].ceFalseOverride&&da.is(d,n[t].selector))return void e(d,n[t])}}function y(a,b,c,d){function e(a){var c,d,f,g,h;if(1===a.nodeType&&oa(a)&&(g=s,s=\"true\"===oa(a),h=!0),c=ra(a.childNodes),s&&!h)for(d=0,f=p.length;d<f&&!T(p[d],b,a,a);d++);if(q.deep&&c.length){for(d=0,f=c.length;d<f;d++)e(c[d]);h&&(s=g)}}function f(c){var e;return qa(n(c.parentNode).reverse(),function(c){var f;e||\"_start\"==c.id||\"_end\"==c.id||(f=A(c,a,b,d),f&&f.split!==!1&&(e=c))}),e}function g(a,c,d,e){var f,g,h,i,j,k;if(a){for(k=a.parentNode,f=c.parentNode;f&&f!=k;f=f.parentNode){for(g=da.clone(f,ma),j=0;j<p.length;j++)if(T(p[j],b,g,g)){g=0;break}g&&(h&&g.appendChild(h),i||(i=g),h=g)}!e||q.mixed&&ha(a)||(c=da.split(a,c)),h&&(d.parentNode.insertBefore(h,d),i.appendChild(d))}return c}function h(a){return g(f(a),a,a,!0)}function i(a){var b=da.get(a?\"_start\":\"_end\"),c=b[a?\"firstChild\":\"lastChild\"];return pa(c)&&(c=c[a?\"firstChild\":\"lastChild\"]),3==c.nodeType&&0===c.data.length&&(c=a?b.previousSibling||b.nextSibling:b.nextSibling||b.previousSibling),da.remove(b,!0),c}function k(a){var b,c,d=a.commonAncestorContainer;if(a=R(a,p,na),q.split){if(b=X(a,na),c=X(a),b!=c){if(/^(TR|TH|TD)$/.test(b.nodeName)&&b.firstChild&&(b=\"TR\"==b.nodeName?b.firstChild.firstChild||b:b.firstChild||b),d&&/^T(HEAD|BODY|FOOT|R)$/.test(d.nodeName)&&l(c)&&c.firstChild&&(c=c.firstChild||c),da.isChildOf(b,c)&&!ha(c)&&!l(b)&&!l(c))return b=Q(b,\"span\",{id:\"_start\",\"data-mce-type\":\"bookmark\"}),h(b),void(b=i(na));b=Q(b,\"span\",{\nid:\"_start\",\"data-mce-type\":\"bookmark\"}),c=Q(c,\"span\",{id:\"_end\",\"data-mce-type\":\"bookmark\"}),h(b),h(c),b=i(na),c=i()}else b=c=h(b);a.startContainer=b.parentNode?b.parentNode:b,a.startOffset=ja(b),a.endContainer=c.parentNode?c.parentNode:c,a.endOffset=ja(c)+1}fa.walk(a,function(a){qa(a,function(a){e(a),1===a.nodeType&&\"underline\"===j.dom.getStyle(a,\"text-decoration\")&&a.parentNode&&\"underline\"===v(a.parentNode)&&T({deep:!1,exact:!0,inline:\"span\",styles:{textDecoration:\"underline\"}},null,a)})})}var m,o,p=r(a),q=p[0],s=!0;if(c)return void(c.nodeType?(o=da.createRng(),o.setStartBefore(c),o.setEndAfter(c),k(o)):k(c));if(\"false\"!==oa(ea.getNode()))ea.isCollapsed()&&q.inline&&!da.select(\"td[data-mce-selected],th[data-mce-selected]\").length?Y(\"remove\",a,b,d):(m=ea.getBookmark(),k(ea.getRng(na)),ea.moveToBookmark(m),q.inline&&B(a,b,ea.getStart())&&Z(ea.getRng(!0)),j.nodeChanged());else{c=ea.getNode();for(var t=0,u=p.length;t<u&&(!p[t].ceFalseOverride||!T(p[t],b,c,c));t++);}}function z(a,b,c){var d=r(a);!B(a,b,c)||\"toggle\"in d[0]&&!d[0].toggle?x(a,b,c):y(a,b,c)}function A(a,b,c,d){function e(a,b,e){var f,g,h,i=b[e];if(b.onmatch)return b.onmatch(a,b,e);if(i)if(i.length===_){for(f in i)if(i.hasOwnProperty(f)){if(g=\"attributes\"===e?da.getAttrib(a,f):M(a,f),d&&!g&&!b.exact)return;if((!d||b.exact)&&!H(g,N(O(i[f],c),f)))return}}else for(h=0;h<i.length;h++)if(\"attributes\"===e?da.getAttrib(a,i[h]):M(a,i[h]))return b;return b}var f,g,h,i=r(b);if(i&&a)for(g=0;g<i.length;g++)if(f=i[g],G(a,f)&&e(a,f,\"attributes\")&&e(a,f,\"styles\")){if(h=f.classes)for(g=0;g<h.length;g++)if(!da.hasClass(a,h[g]))return;return f}}function B(a,b,c){function d(c){var d=da.getRoot();return c!==d&&(c=da.getParent(c,function(c){return!!u(c,a)||(c.parentNode===d||!!A(c,a,b,!0))}),A(c,a,b))}var e;return c?d(c):(c=ea.getNode(),d(c)?na:(e=ea.getStart(),e!=c&&d(e)?na:ma))}function C(a,b){var c,d=[],e={};return c=ea.getStart(),da.getParent(c,function(c){var f,g;for(f=0;f<a.length;f++)g=a[f],!e[g]&&A(c,g,b)&&(e[g]=!0,d.push(g))},da.getRoot()),d}function D(a){var b,c,d,e,f,g=r(a);if(g)for(b=ea.getStart(),c=n(b),e=g.length-1;e>=0;e--){if(f=g[e].selector,!f||g[e].defaultBlock)return na;for(d=c.length-1;d>=0;d--)if(da.is(c[d],f))return na}return ma}function E(a,b,c){var d;return $||($={},d={},j.on(\"NodeChange\",function(a){var b=n(a.element),c={};b=g.grep(b,function(a){return 1==a.nodeType&&!a.getAttribute(\"data-mce-bogus\")}),qa($,function(a,e){qa(b,function(f){return A(f,e,{},a.similar)?(d[e]||(qa(a,function(a){a(!0,{node:f,format:e,parents:b})}),d[e]=a),c[e]=a,!1):!u(f,e)&&void 0})}),qa(d,function(e,f){c[f]||(delete d[f],qa(e,function(c){c(!1,{node:a.element,format:f,parents:b})}))})})),qa(a.split(\",\"),function(a){$[a]||($[a]=[],$[a].similar=c),$[a].push(b)}),this}function F(a){return h.getCssText(j,a)}function G(a,b){return H(a,b.inline)?na:H(a,b.block)?na:b.selector?1==a.nodeType&&da.is(a,b.selector):void 0}function H(a,b){return a=a||\"\",b=b||\"\",a=\"\"+(a.nodeName||a),b=\"\"+(b.nodeName||b),a.toLowerCase()==b.toLowerCase()}function I(a,b,c){qa(a.childNodes,function(a){J(a)&&(b(a)&&c(a),a.hasChildNodes()&&I(a,b,c))})}function J(a){return a&&1===a.nodeType&&!pa(a)&&!o(a)&&!e.isBogus(a)}function K(a){return f.curry(function(a,b){return!(!b||!M(b,a))},a)}function L(a,b){return f.curry(function(a,b,c){da.setStyle(c,a,b)},a,b)}function M(a,b){return N(da.getStyle(a,b),b)}function N(a,b){return\"color\"!=b&&\"backgroundColor\"!=b||(a=da.toHex(a)),\"fontWeight\"==b&&700==a&&(a=\"bold\"),\"fontFamily\"==b&&(a=a.replace(/[\\'\\\"]/g,\"\").replace(/,\\s+/g,\",\")),\"\"+a}function O(a,b){return\"string\"!=typeof a?a=a(b):b&&(a=a.replace(/%(\\w+)/g,function(a,c){return b[c]||a})),a}function P(a){return a&&3===a.nodeType&&/^([\\t \\r\\n]+|)$/.test(a.nodeValue)}function Q(a,b,c){var d=da.create(b,c);return a.parentNode.insertBefore(d,a),d.appendChild(a),d}function R(b,c,d){function e(a){function b(a){return\"BR\"==a.nodeName&&a.getAttribute(\"data-mce-bogus\")&&!a.nextSibling}var d,e,f,g,h;if(d=e=a?q:s,g=a?\"previousSibling\":\"nextSibling\",h=da.getRoot(),3==d.nodeType&&!P(d)&&(a?r>0:t<d.nodeValue.length))return d;for(;;){if(!c[0].block_expand&&ha(e))return e;for(f=e[g];f;f=f[g])if(!pa(f)&&!P(f)&&!b(f))return e;if(e==h||e.parentNode==h){d=e;break}e=e.parentNode}return d}function f(a,b){for(b===_&&(b=3===a.nodeType?a.length:a.childNodes.length);a&&a.hasChildNodes();)a=a.childNodes[b],a&&(b=3===a.nodeType?a.length:a.childNodes.length);return{node:a,offset:b}}function g(a){for(var b=a;b;){if(1===b.nodeType&&oa(b))return\"false\"===oa(b)?b:a;b=b.parentNode}return a}function h(b,c,e){function f(a,b){var c,f,g=a.nodeValue;return\"undefined\"==typeof b&&(b=e?g.length:0),e?(c=g.lastIndexOf(\" \",b),f=g.lastIndexOf(\"\\xa0\",b),c=c>f?c:f,c===-1||d||c++):(c=g.indexOf(\" \",b),f=g.indexOf(\"\\xa0\",b),c=c!==-1&&(f===-1||c<f)?c:f),c}var g,h,i,k;if(3===b.nodeType){if(i=f(b,c),i!==-1)return{container:b,offset:i};k=b}for(g=new a(b,da.getParent(b,ha)||j.getBody());h=g[e?\"prev\":\"next\"]();)if(3===h.nodeType){if(k=h,i=f(h),i!==-1)return{container:h,offset:i}}else if(ha(h))break;if(k)return c=e?0:k.length,{container:k,offset:c}}function i(a,d){var e,f,g,h;for(3==a.nodeType&&0===a.nodeValue.length&&a[d]&&(a=a[d]),e=n(a),f=0;f<e.length;f++)for(g=0;g<c.length;g++)if(h=c[g],!(\"collapsed\"in h&&h.collapsed!==b.collapsed)&&da.is(e[f],h.selector))return e[f];return a}function l(a,b){var d,e=da.getRoot();if(c[0].wrapper||(d=da.getParent(a,c[0].block,e)),d||(d=da.getParent(3==a.nodeType?a.parentNode:a,function(a){return a!=e&&k(a)})),d&&c[0].wrapper&&(d=n(d,\"ul,ol\").reverse()[0]||d),!d)for(d=a;d[b]&&!ha(d[b])&&(d=d[b],!H(d,\"br\")););return d||a}var m,o,p,q=b.startContainer,r=b.startOffset,s=b.endContainer,t=b.endOffset;if(1==q.nodeType&&q.hasChildNodes()&&(m=q.childNodes.length-1,q=q.childNodes[r>m?m:r],3==q.nodeType&&(r=0)),1==s.nodeType&&s.hasChildNodes()&&(m=s.childNodes.length-1,s=s.childNodes[t>m?m:t-1],3==s.nodeType&&(t=s.nodeValue.length)),q=g(q),s=g(s),(pa(q.parentNode)||pa(q))&&(q=pa(q)?q:q.parentNode,q=q.nextSibling||q,3==q.nodeType&&(r=0)),(pa(s.parentNode)||pa(s))&&(s=pa(s)?s:s.parentNode,s=s.previousSibling||s,3==s.nodeType&&(t=s.length)),c[0].inline&&(b.collapsed&&(p=h(q,r,!0),p&&(q=p.container,r=p.offset),p=h(s,t),p&&(s=p.container,t=p.offset)),o=f(s,t),o.node)){for(;o.node&&0===o.offset&&o.node.previousSibling;)o=f(o.node.previousSibling);o.node&&o.offset>0&&3===o.node.nodeType&&\" \"===o.node.nodeValue.charAt(o.offset-1)&&o.offset>1&&(s=o.node,s.splitText(o.offset-1))}return(c[0].inline||c[0].block_expand)&&(c[0].inline&&3==q.nodeType&&0!==r||(q=e(!0)),c[0].inline&&3==s.nodeType&&t!==s.nodeValue.length||(s=e())),c[0].selector&&c[0].expand!==ma&&!c[0].inline&&(q=i(q,\"previousSibling\"),s=i(s,\"nextSibling\")),(c[0].block||c[0].selector)&&(q=l(q,\"previousSibling\"),s=l(s,\"nextSibling\"),c[0].block&&(ha(q)||(q=e(!0)),ha(s)||(s=e()))),1==q.nodeType&&(r=ja(q),q=q.parentNode),1==s.nodeType&&(t=ja(s)+1,s=s.parentNode),{startContainer:q,startOffset:r,endContainer:s,endOffset:t}}function S(a,b){return b.links&&\"A\"==a.tagName}function T(a,b,c,d){var e,f,g;if(!G(c,a)&&!S(c,a))return ma;if(\"all\"!=a.remove)for(qa(a.styles,function(e,f){e=N(O(e,b),f),\"number\"==typeof f&&(f=e,d=0),(a.remove_similar||!d||H(M(d,f),e))&&da.setStyle(c,f,\"\"),g=1}),g&&\"\"===da.getAttrib(c,\"style\")&&(c.removeAttribute(\"style\"),c.removeAttribute(\"data-mce-style\")),qa(a.attributes,function(a,e){var f;if(a=O(a,b),\"number\"==typeof e&&(e=a,d=0),!d||H(da.getAttrib(d,e),a)){if(\"class\"==e&&(a=da.getAttrib(c,e),a&&(f=\"\",qa(a.split(/\\s+/),function(a){/mce\\-\\w+/.test(a)&&(f+=(f?\" \":\"\")+a)}),f)))return void da.setAttrib(c,e,f);\"class\"==e&&c.removeAttribute(\"className\"),la.test(e)&&c.removeAttribute(\"data-mce-\"+e),c.removeAttribute(e)}}),qa(a.classes,function(a){a=O(a,b),d&&!da.hasClass(d,a)||da.removeClass(c,a)}),f=da.getAttribs(c),e=0;e<f.length;e++){var h=f[e].nodeName;if(0!==h.indexOf(\"_\")&&0!==h.indexOf(\"data-\"))return ma}return\"none\"!=a.remove?(U(c,a),na):void 0}function U(a,b){function c(a,b,c){return a=V(a,b,c),!a||\"BR\"==a.nodeName||ha(a)}var d,e=a.parentNode;b.block&&(ia?e==da.getRoot()&&(b.list_block&&H(a,b.list_block)||qa(ra(a.childNodes),function(a){ga(ia,a.nodeName.toLowerCase())?d?d.appendChild(a):(d=Q(a,ia),da.setAttribs(d,j.settings.forced_root_block_attrs)):d=0})):ha(a)&&!ha(e)&&(c(a,ma)||c(a.firstChild,na,1)||a.insertBefore(da.create(\"br\"),a.firstChild),c(a,na)||c(a.lastChild,ma,1)||a.appendChild(da.create(\"br\")))),b.selector&&b.inline&&!H(b.inline,a)||da.remove(a,1)}function V(a,b,c){if(a)for(b=b?\"nextSibling\":\"previousSibling\",a=c?a:a[b];a;a=a[b])if(1==a.nodeType||!P(a))return a}function W(a,b){function c(a,b){for(e=a;e;e=e[b]){if(3==e.nodeType&&0!==e.nodeValue.length)return a;if(1==e.nodeType&&!pa(e))return e}return a}var e,f,g=new d(da);if(a&&b&&(a=c(a,\"previousSibling\"),b=c(b,\"nextSibling\"),g.compare(a,b))){for(e=a.nextSibling;e&&e!=b;)f=e,e=e.nextSibling,a.appendChild(f);return da.remove(b),qa(ra(b.childNodes),function(b){a.appendChild(b)}),a}return b}function X(b,c){var d,e,f;return d=b[c?\"startContainer\":\"endContainer\"],e=b[c?\"startOffset\":\"endOffset\"],1==d.nodeType&&(f=d.childNodes.length-1,!c&&e&&e--,d=d.childNodes[e>f?f:e]),3===d.nodeType&&c&&e>=d.nodeValue.length&&(d=new a(d,j.getBody()).next()||d),3!==d.nodeType||c||0!==e||(d=new a(d,j.getBody()).prev()||d),d}function Y(b,c,d,e){function f(a){var b=da.create(\"span\",{id:p,\"data-mce-bogus\":!0,style:q?\"color:red\":\"\"});return a&&b.appendChild(j.getDoc().createTextNode(ka)),b}function g(a,b){for(;a;){if(3===a.nodeType&&a.nodeValue!==ka||a.childNodes.length>1)return!1;b&&1===a.nodeType&&b.push(a),a=a.firstChild}return!0}function h(a){for(;a;){if(a.id===p)return a;a=a.parentNode}}function i(b){var c;if(b)for(c=new a(b,b),b=c.current();b;b=c.next())if(3===b.nodeType)return b}function l(a,b){var c,d;if(a)d=ea.getRng(!0),g(a)?(b!==!1&&(d.setStartBefore(a),d.setEndBefore(a)),da.remove(a)):(c=i(a),c.nodeValue.charAt(0)===ka&&(c.deleteData(0,1),d.startContainer==c&&d.startOffset>0&&d.setStart(c,d.startOffset-1),d.endContainer==c&&d.endOffset>0&&d.setEnd(c,d.endOffset-1)),da.remove(a,1)),ea.setRng(d);else if(a=h(ea.getStart()),!a)for(;a=da.get(p);)l(a,!1)}function m(){var a,b,e,g,j,k,l;a=ea.getRng(!0),g=a.startOffset,k=a.startContainer,l=k.nodeValue,b=h(ea.getStart()),b&&(e=i(b));var m=/[^\\s\\u00a0\\u00ad\\u200b\\ufeff]/;l&&g>0&&g<l.length&&m.test(l.charAt(g))&&m.test(l.charAt(g-1))?(j=ea.getBookmark(),a.collapse(!0),a=R(a,r(c)),a=fa.split(a),x(c,d,a),ea.moveToBookmark(j)):(b&&e.nodeValue===ka?x(c,d,b):(b=f(!0),e=b.firstChild,a.insertNode(b),g=1,x(c,d,b)),ea.setCursorLocation(e,g))}function n(){var a,b,g,h,i,j,l,m,n=ea.getRng(!0),o=[];for(a=n.startContainer,b=n.startOffset,i=a,3==a.nodeType&&(b!=a.nodeValue.length&&(h=!0),i=i.parentNode);i;){if(A(i,c,d,e)){j=i;break}i.nextSibling&&(h=!0),o.push(i),i=i.parentNode}if(j)if(h)g=ea.getBookmark(),n.collapse(!0),n=R(n,r(c),!0),n=fa.split(n),y(c,d,n),ea.moveToBookmark(g);else{for(m=f(),i=m,l=o.length-1;l>=0;l--)i.appendChild(da.clone(o[l],!1)),i=i.firstChild;i.appendChild(da.doc.createTextNode(ka)),i=i.firstChild;var p=da.getParent(j,k);p&&da.isEmpty(p)?j.parentNode.replaceChild(m,j):da.insertAfter(m,j),ea.setCursorLocation(i,1),da.isEmpty(j)&&da.remove(j)}}function o(){var a;a=h(ea.getStart()),a&&!da.isEmpty(a)&&sa(a,function(a){1!=a.nodeType||a.id===p||da.isEmpty(a)||da.setAttrib(a,\"data-mce-bogus\",null)},\"childNodes\")}var p=\"_mce_caret\",q=j.settings.caret_debug;j._hasCaretEvents||(ba=function(){var a,b=[];if(g(h(ea.getStart()),b))for(a=b.length;a--;)da.setAttrib(b[a],\"data-mce-bogus\",\"1\")},aa=function(a){var b=a.keyCode;l(),8==b&&ea.isCollapsed()&&ea.getStart().innerHTML==ka&&l(h(ea.getStart())),37!=b&&39!=b||l(h(ea.getStart())),o()},j.on(\"SetContent\",function(a){a.selection&&o()}),j._hasCaretEvents=!0),\"apply\"==b?m():n()}function Z(b){var c,d,e,f=b.startContainer,g=b.startOffset;if((b.startContainer!=b.endContainer||!m(b.startContainer.childNodes[b.startOffset]))&&(3==f.nodeType&&g>=f.nodeValue.length&&(g=ja(f),f=f.parentNode),1==f.nodeType))for(e=f.childNodes,g<e.length?(f=e[g],c=new a(f,da.getParent(f,da.isBlock))):(f=e[e.length-1],c=new a(f,da.getParent(f,da.isBlock)),c.next(!0)),d=c.current();d;d=c.next())if(3==d.nodeType&&!P(d))return b.setStart(d,0),void ea.setRng(b)}var $,_,aa,ba,ca={},da=j.dom,ea=j.selection,fa=new b(da),ga=j.schema.isValidChild,ha=da.isBlock,ia=j.settings.forced_root_block,ja=da.nodeIndex,ka=\"\\ufeff\",la=/^(src|href|style)$/,ma=!1,na=!0,oa=da.getContentEditable,pa=c.isBookmarkNode,qa=g.each,ra=g.grep,sa=g.walk,ta=g.extend,ua=function(a,b){a.clear_child_styles&&qa(da.select(\"*\",b),function(b){qa(a.styles,function(a,c){da.setStyle(b,c,\"\")})})};ta(this,{get:r,register:s,unregister:t,apply:x,remove:y,toggle:z,match:B,matchAll:C,matchNode:A,canApply:D,formatChanged:E,getCssText:F}),p(),q(),j.on(\"BeforeGetContent\",function(a){ba&&\"raw\"!=a.format&&ba()}),j.on(\"mouseup keydown\",function(a){aa&&aa(a)})}}),g(\"5e\",[],function(){var a=0,b=1,c=2,d=function(d,e){var f=d.length+e.length+2,g=new Array(f),h=new Array(f),i=function(a,b,c){return{start:a,end:b,diag:c}},j=function(f,g,h,i,k){var m=l(f,g,h,i);if(null===m||m.start===g&&m.diag===g-i||m.end===f&&m.diag===f-h)for(var n=f,o=h;n<g||o<i;)n<g&&o<i&&d[n]===e[o]?(k.push([a,d[n]]),++n,++o):g-f>i-h?(k.push([c,d[n]]),++n):(k.push([b,e[o]]),++o);else{j(f,m.start,h,m.start-m.diag,k);for(var p=m.start;p<m.end;++p)k.push([a,d[p]]);j(m.end,g,m.end-m.diag,i,k)}},k=function(a,b,c,f){for(var g=a;g-b<f&&g<c&&d[g]===e[g-b];)++g;return i(a,g,b)},l=function(a,b,c,f){var i=b-a,j=f-c;if(0===i||0===j)return null;var l=i-j,m=j+i,n=(m%2===0?m:m+1)/2;g[1+n]=a,h[1+n]=b+1;for(var o=0;o<=n;++o){for(var p=-o;p<=o;p+=2){var q=p+n;p===-o||p!=o&&g[q-1]<g[q+1]?g[q]=g[q+1]:g[q]=g[q-1]+1;for(var r=g[q],s=r-a+c-p;r<b&&s<f&&d[r]===e[s];)g[q]=++r,++s;if(l%2!=0&&l-o<=p&&p<=l+o&&h[q-l]<=g[q])return k(h[q-l],p+a-c,b,f)}for(p=l-o;p<=l+o;p+=2){for(q=p+n-l,p===l-o||p!=l+o&&h[q+1]<=h[q-1]?h[q]=h[q+1]-1:h[q]=h[q-1],r=h[q]-1,s=r-a+c-p;r>=a&&s>=c&&d[r]===e[s];)h[q]=r--,s--;if(l%2===0&&-o<=p&&p<=o&&h[q]<=g[q+l])return k(h[q],p+a-c,b,f)}}},m=[];return j(0,d.length,0,e.length,m),m};return{KEEP:a,DELETE:c,INSERT:b,diff:d}}),g(\"4h\",[\"1g\",\"d\",\"5e\"],function(a,b,c){var d=function(a){return 1===a.nodeType?a.outerHTML:3===a.nodeType?b.encodeRaw(a.data,!1):8===a.nodeType?\"<!--\"+a.data+\"-->\":\"\"},e=function(a){var b,c,d;for(d=document.createElement(\"div\"),b=document.createDocumentFragment(),a&&(d.innerHTML=a);c=d.firstChild;)b.appendChild(c);return b},f=function(a,b,c){var d=e(b);if(a.hasChildNodes()&&c<a.childNodes.length){var f=a.childNodes[c];f.parentNode.insertBefore(d,f)}else a.appendChild(d)},g=function(a,b){if(a.hasChildNodes()&&b<a.childNodes.length){var c=a.childNodes[b];c.parentNode.removeChild(c)}},h=function(b,d){var e=0;a.each(b,function(a){a[0]===c.KEEP?e++:a[0]===c.INSERT?(f(d,a[1],e),e++):a[0]===c.DELETE&&g(d,e)})},i=function(b){return a.filter(a.map(b.childNodes,d),function(a){return a.length>0})},j=function(b,e){var f=a.map(e.childNodes,d);return h(c.diff(f,b),e),e};return{read:i,write:j}}),g(\"1z\",[\"1g\",\"4h\"],function(a,b){var c=function(a){return a.indexOf(\"</iframe>\")!==-1},d=function(a){return{type:\"fragmented\",fragments:a,content:\"\",bookmark:null,beforeBookmark:null}},e=function(a){return{type:\"complete\",fragments:null,content:a,bookmark:null,beforeBookmark:null}},f=function(f){var g,h,i;return g=b.read(f.getBody()),i=a.map(g,function(a){return f.serializer.trimContent(a)}),h=i.join(\"\"),c(h)?d(i):e(h)},g=function(a,c,d){\"fragmented\"===c.type?b.write(c.fragments,a.getBody()):a.setContent(c.content,{format:\"raw\"}),a.selection.moveToBookmark(d?c.beforeBookmark:c.bookmark)},h=function(a){return\"fragmented\"===a.type?a.fragments.join(\"\"):a.content},i=function(a,b){return h(a)===h(b)};return{createFragmentedLevel:d,createCompleteLevel:e,createFromEditor:f,applyToEditor:g,isEq:i}}),g(\"u\",[\"p\",\"9\",\"1z\"],function(a,b,c){return function(a){function d(b){a.setDirty(b)}function e(a){n(!1),i.add({},a)}function f(){i.typing&&(n(!1),i.add())}var g,h,i=this,j=0,k=[],l=0,m=function(){return 0===l},n=function(a){m()&&(i.typing=a)};return a.on(\"init\",function(){i.add()}),a.on(\"BeforeExecCommand\",function(a){var b=a.command;\"Undo\"!==b&&\"Redo\"!==b&&\"mceRepaint\"!==b&&(f(),i.beforeChange())}),a.on(\"ExecCommand\",function(a){var b=a.command;\"Undo\"!==b&&\"Redo\"!==b&&\"mceRepaint\"!==b&&e(a)}),a.on(\"ObjectResizeStart Cut\",function(){i.beforeChange()}),a.on(\"SaveContent ObjectResized blur\",e),a.on(\"DragEnd\",e),a.on(\"KeyUp\",function(b){var f=b.keyCode;b.isDefaultPrevented()||((f>=33&&f<=36||f>=37&&f<=40||45===f||b.ctrlKey)&&(e(),a.nodeChanged()),46!==f&&8!==f||a.nodeChanged(),h&&i.typing&&c.isEq(c.createFromEditor(a),k[0])===!1&&(a.isDirty()===!1&&(d(!0),a.fire(\"change\",{level:k[0],lastLevel:null})),a.fire(\"TypingUndo\"),h=!1,a.nodeChanged()))}),a.on(\"KeyDown\",function(a){var b=a.keyCode;if(!a.isDefaultPrevented()){if(b>=33&&b<=36||b>=37&&b<=40||45===b)return void(i.typing&&e(a));var c=a.ctrlKey&&!a.altKey||a.metaKey;!(b<16||b>20)||224===b||91===b||i.typing||c||(i.beforeChange(),n(!0),i.add({},a),h=!0)}}),a.on(\"MouseDown\",function(a){i.typing&&e(a)}),a.addShortcut(\"meta+z\",\"\",\"Undo\"),a.addShortcut(\"meta+y,meta+shift+z\",\"\",\"Redo\"),a.on(\"AddUndo Undo Redo ClearUndos\",function(b){b.isDefaultPrevented()||a.nodeChanged()}),i={data:k,typing:!1,beforeChange:function(){m()&&(g=a.selection.getBookmark(2,!0))},add:function(e,f){var h,i,l,n=a.settings;if(l=c.createFromEditor(a),e=e||{},e=b.extend(e,l),m()===!1||a.removed)return null;if(i=k[j],a.fire(\"BeforeAddUndo\",{level:e,lastLevel:i,originalEvent:f}).isDefaultPrevented())return null;if(i&&c.isEq(i,e))return null;if(k[j]&&(k[j].beforeBookmark=g),n.custom_undo_redo_levels&&k.length>n.custom_undo_redo_levels){for(h=0;h<k.length-1;h++)k[h]=k[h+1];k.length--,j=k.length}e.bookmark=a.selection.getBookmark(2,!0),j<k.length-1&&(k.length=j+1),k.push(e),j=k.length-1;var o={level:e,lastLevel:i,originalEvent:f};return a.fire(\"AddUndo\",o),j>0&&(d(!0),a.fire(\"change\",o)),e},undo:function(){var b;return i.typing&&(i.add(),i.typing=!1,n(!1)),j>0&&(b=k[--j],c.applyToEditor(a,b,!0),d(!0),a.fire(\"undo\",{level:b})),b},redo:function(){var b;return j<k.length-1&&(b=k[++j],c.applyToEditor(a,b,!1),d(!0),a.fire(\"redo\",{level:b})),b},clear:function(){k=[],j=0,i.typing=!1,i.data=k,a.fire(\"ClearUndos\")},hasUndo:function(){return j>0||i.typing&&k[0]&&!c.isEq(c.createFromEditor(a),k[0])},hasRedo:function(){return j<k.length-1&&!i.typing},transact:function(a){return f(),i.beforeChange(),i.ignore(a),i.add()},ignore:function(a){try{l++,a()}finally{l--}},extra:function(b,d){var e,f;i.transact(b)&&(f=k[j].bookmark,e=k[j-1],c.applyToEditor(a,e,!0),i.transact(d)&&(k[j-1].beforeBookmark=f))}}}}),g(\"6o\",[\"55\",\"1r\",\"4d\",\"22\"],function(a,b,c,d){var e=function(a){var b=c.isText(a)?a.dom().parentNode:a.dom();return void 0!==b&&null!==b&&b.ownerDocument.body.contains(b)},f=a.cached(function(){return g(b.fromDom(d))}),g=function(a){var c=a.dom().body;if(null===c||void 0===c)throw\"Body is not available yet\";return b.fromDom(c)};return{body:f,getBody:g,inBody:e}}),g(\"6p\",[\"60\",\"4z\"],function(a,b){return function(c,d,e,f,g){return c(e,f)?b.some(e):a.isFunction(g)&&g(e)?b.none():d(e,f,g)}}),g(\"64\",[\"60\",\"3x\",\"1m\",\"4z\",\"6o\",\"1q\",\"1r\",\"6p\"],function(a,b,c,d,e,f,g,h){var i=function(a){return n(e.body(),a)},j=function(b,e,f){for(var h=b.dom(),i=a.isFunction(f)?f:c.constant(!1);h.parentNode;){h=h.parentNode;var j=g.fromDom(h);if(e(j))return d.some(j);if(i(j))break}return d.none()},k=function(a,b,c){var d=function(a){return b(a)};return h(d,j,a,b,c)},l=function(a,b){var c=a.dom();return c.parentNode?m(g.fromDom(c.parentNode),function(c){return!f.eq(a,c)&&b(c)}):d.none()},m=function(a,d){var e=b.find(a.dom().childNodes,c.compose(d,g.fromDom));return e.map(g.fromDom)},n=function(a,b){var c=function(a){for(var e=0;e<a.childNodes.length;e++){if(b(g.fromDom(a.childNodes[e])))return d.some(g.fromDom(a.childNodes[e]));var f=c(a.childNodes[e]);if(f.isSome())return f}return d.none()};return c(a.dom())};return{first:i,ancestor:j,closest:k,sibling:l,child:m,descendant:n}}),g(\"5i\",[\"1w\",\"c\",\"1j\",\"1p\",\"1k\",\"44\"],function(a,b,c,d,e,f){function g(a){return a>0}function h(a){return a<0}function i(a,b){for(var c;c=a(b);)if(!y(c))return c;return null}function j(a,c,d,e,f){var j=new b(a,e);if(h(c)){if((v(a)||y(a))&&(a=i(j.prev,!0),d(a)))return a;for(;a=i(j.prev,f);)if(d(a))return a}if(g(c)){if((v(a)||y(a))&&(a=i(j.next,!0),d(a)))return a;for(;a=i(j.next,f);)if(d(a))return a}return null}function k(a,b){for(a=a.parentNode;a&&a!=b;a=a.parentNode)if(u(a))return a;return b}function l(a,b){for(;a&&a!=b;){if(w(a))return a;a=a.parentNode}return null}function m(a,b,c){return l(a.container(),c)==l(b.container(),c)}function n(a,b,c){return k(a.container(),c)==k(b.container(),c)}function o(a,b){var c,d;return b?(c=b.container(),d=b.offset(),A(c)?c.childNodes[d+a]:null):null}function p(a,b){var c=b.ownerDocument.createRange();return a?(c.setStartBefore(b),c.setEndBefore(b)):(c.setStartAfter(b),c.setEndAfter(b)),c}function q(a,b,c){return l(b,a)==l(c,a)}function r(a,b,c){var d,e;for(e=a?\"previousSibling\":\"nextSibling\";c&&c!=b;){if(d=c[e],x(d)&&(d=d[e]),v(d)){if(q(b,d,c))return d;break}if(B(d))break;c=c.parentNode}return null}function s(a,b,d){var f,g,h,i,j=z(r,!0,b),k=z(r,!1,b);if(g=d.startContainer,h=d.startOffset,e.isCaretContainerBlock(g)){if(A(g)||(g=g.parentNode),i=g.getAttribute(\"data-mce-caret\"),\"before\"==i&&(f=g.nextSibling,v(f)))return C(f);if(\"after\"==i&&(f=g.previousSibling,v(f)))return D(f)}if(!d.collapsed)return d;if(c.isText(g)){if(x(g)){if(1===a){if(f=k(g))return C(f);if(f=j(g))return D(f)}if(a===-1){if(f=j(g))return D(f);if(f=k(g))return C(f)}return d}if(e.endsWithCaretContainer(g)&&h>=g.data.length-1)return 1===a&&(f=k(g))?C(f):d;if(e.startsWithCaretContainer(g)&&h<=1)return a===-1&&(f=j(g))?D(f):d;if(h===g.data.length)return f=k(g),f?C(f):d;if(0===h)return f=j(g),f?D(f):d}return d}function t(a,b){return v(o(a,b))}var u=c.isContentEditableTrue,v=c.isContentEditableFalse,w=c.matchStyleValues(\"display\",\"block table table-cell table-caption list-item\"),x=e.isCaretContainer,y=e.isCaretContainerBlock,z=a.curry,A=c.isElement,B=f.isCaretCandidate,C=z(p,!0),D=z(p,!1);return{isForwards:g,isBackwards:h,findNode:j,getEditingHost:k,getParentBlock:l,isInSameBlock:m,isInSameEditingHost:n,isBeforeContentEditableFalse:z(t,0),isAfterContentEditableFalse:z(t,-1),normalizeRange:s}}),g(\"4m\",[\"1j\",\"44\",\"1p\",\"5i\",\"1g\",\"1w\"],function(a,b,c,d,e,f){function g(a,b){for(var c=[];a&&a!=b;)c.push(a),a=a.parentNode;return c}function h(a,b){return a.hasChildNodes()&&b<a.childNodes.length?a.childNodes[b]:null}function i(a,b){if(p(a)){if(r(b.previousSibling)&&!m(b.previousSibling))return c.before(b);if(m(b))return c(b,0)}if(q(a)){if(r(b.nextSibling)&&!m(b.nextSibling))return c.after(b);if(m(b))return c(b,b.data.length)}return q(a)?o(b)?c.before(b):c.after(b):c.before(b)}function j(b,e){var f;return!!a.isBr(b)&&(f=k(1,c.after(b),e),!!f&&!d.isInSameBlock(c.before(b),c.before(f),e))}function k(a,b,u){var v,w,x,y,z,A,B;if(!n(u)||!b)return null;if(b.isEqual(c.after(u))&&u.lastChild){if(B=c.after(u.lastChild),q(a)&&r(u.lastChild)&&n(u.lastChild))return o(u.lastChild)?c.before(u.lastChild):B}else B=b;if(v=B.container(),w=B.offset(),m(v)){if(q(a)&&w>0)return c(v,--w);if(p(a)&&w<v.length)return c(v,++w);x=v}else{if(q(a)&&w>0&&(y=h(v,w-1),r(y)))return!s(y)&&(z=d.findNode(y,a,t,y))?m(z)?c(z,z.data.length):c.after(z):m(y)?c(y,y.data.length):c.before(y);if(p(a)&&w<v.childNodes.length&&(y=h(v,w),r(y)))return j(y,u)?k(a,c.after(y),u):!s(y)&&(z=d.findNode(y,a,t,y))?m(z)?c(z,0):c.before(z):m(y)?c(y,0):c.after(y);x=B.getNode()}return(p(a)&&B.isAtEnd()||q(a)&&B.isAtStart())&&(x=d.findNode(x,a,f.constant(!0),u,!0),t(x))?i(a,x):(y=d.findNode(x,a,t,u),A=e.last(e.filter(g(v,u),l)),!A||y&&A.contains(y)?y?i(a,y):null:B=p(a)?c.after(A):c.before(A))}var l=a.isContentEditableFalse,m=a.isText,n=a.isElement,o=a.isBr,p=d.isForwards,q=d.isBackwards,r=b.isCaretCandidate,s=b.isAtomic,t=b.isEditableCaretCandidate;return function(a){return{next:function(b){return k(1,b,a)},prev:function(b){return k(-1,b,a)}}}}),g(\"5l\",[\"1m\",\"4z\",\"44\",\"1p\",\"5i\",\"4m\",\"1j\"],function(a,b,c,d,e,f,g){var h=function(a,b,c){var e=a?d.before(c):d.after(c);return o(a,b,e)},i=function(a){return g.isBr(a)?d.before(a):d.after(a)},j=function(a){return d.isTextPosition(a)?0===a.offset():c.isCaretCandidate(a.getNode())},k=function(a){return d.isTextPosition(a)?a.offset()===a.container().data.length:c.isCaretCandidate(a.getNode(!0))},l=function(a,b){return!d.isTextPosition(a)&&!d.isTextPosition(b)&&a.getNode()===b.getNode(!0)},m=function(a){return!d.isTextPosition(a)&&g.isBr(a.getNode())},n=function(a,b,c){return a?!l(b,c)&&!m(b)&&k(b)&&j(c):!l(c,b)&&j(b)&&k(c)},o=function(a,c,d){var e=new f(c);return b.from(a?e.next(d):e.prev(d))},p=function(a,c,d){return o(a,c,d).bind(function(f){return e.isInSameBlock(d,f,c)&&n(a,d,f)?o(a,c,f):b.some(f)})},q=function(a,e){var f=a?e.firstChild:e.lastChild;return g.isText(f)?b.some(new d(f,a?0:f.data.length)):f?c.isCaretCandidate(f)?b.some(a?d.before(f):i(f)):h(a,e,f):b.none()};return{fromPosition:o,navigate:p,positionIn:q}}),g(\"5h\",[\"3x\",\"4z\",\"1q\",\"1r\",\"4d\",\"64\"],function(a,b,c,d,e,f){var g=function(b){var c=a.foldl(b,function(a,b){return a[b]=!0,a},{});return function(a){return c[e.name(a)]===!0}},h=g([\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"p\",\"div\",\"address\",\"pre\",\"form\",\"blockquote\",\"center\",\"dir\",\"fieldset\",\"header\",\"footer\",\"article\",\"section\",\"hgroup\",\"aside\",\"nav\",\"figure\"]),i=function(a){return function(b){return c.eq(a,d.fromDom(b.dom().parentNode))}},j=function(a,d){return c.contains(a,d)?f.closest(d,h,i(a)):b.none()};return{getParentTextBlock:j}}),g(\"79\",[\"64\",\"48\",\"6p\"],function(a,b,c){var d=function(a){return b.one(a)},e=function(c,d,e){return a.ancestor(c,function(a){return b.is(a,d)},e)},f=function(c,d){return a.sibling(c,function(a){return b.is(a,d)})},g=function(c,d){return a.child(c,function(a){return b.is(a,d)})},h=function(a,c){return b.one(c,a)},i=function(a,d,f){return c(b.is,e,a,d,f)};return{first:d,ancestor:e,sibling:f,child:g,descendant:h,closest:i}}),g(\"6q\",[\"79\"],function(a){var b=function(b){return a.first(b).isSome()},c=function(b,c,d){return a.ancestor(b,c,d).isSome()},d=function(b,c){return a.sibling(b,c).isSome()},e=function(b,c){return a.child(b,c).isSome()},f=function(b,c){return a.descendant(b,c).isSome()},g=function(b,c,d){return a.closest(b,c,d).isSome()};return{any:b,ancestor:c,sibling:d,child:e,descendant:f,closest:g}}),g(\"65\",[\"1m\",\"1q\",\"1r\",\"6q\",\"44\",\"1j\",\"c\"],function(a,b,c,d,e,f,g){var h=function(e,f){var g=c.fromDom(e),h=c.fromDom(f);return d.ancestor(h,\"pre,code\",a.curry(b.eq,g))},i=function(a,b){return f.isText(b)&&/^[ \\t\\r\\n]*$/.test(b.data)&&h(a,b)===!1},j=function(a){return f.isElement(a)&&\"A\"===a.nodeName&&a.hasAttribute(\"name\")},k=function(a,b){return e.isCaretCandidate(b)&&i(a,b)===!1||j(b)||l(b)},l=f.hasAttribute(\"data-mce-bookmark\"),m=f.hasAttribute(\"data-mce-bogus\"),n=f.hasAttributeValue(\"data-mce-bogus\",\"all\"),o=function(a){var b,c,d=0;if(k(a,a))return!1;if(c=a.firstChild,!c)return!0;b=new g(c,a);do if(n(c))c=b.next(!0);else if(m(c))c=b.next();else if(f.isBr(c))d++,c=b.next();else{if(k(a,c))return!1;c=b.next()}while(c);return d<=1},p=function(a){return o(a.dom())};return{isEmpty:p}}),g(\"5f\",[\"3x\",\"1m\",\"4z\",\"5d\",\"61\",\"1q\",\"1r\",\"4d\",\"64\",\"59\",\"5l\",\"1p\",\"5h\",\"65\",\"1j\"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){var p=e.immutable(\"block\",\"position\"),q=e.immutable(\"from\",\"to\"),r=function(a,b){var c=g.fromDom(a),d=g.fromDom(b.container());return m.getParentTextBlock(c,d).map(function(a){return p(a,b)})},s=function(a){return f.eq(a.from().block(),a.to().block())===!1},t=function(a){return j.parent(a.from().block()).bind(function(b){return j.parent(a.to().block()).filter(function(a){return f.eq(b,a)})}).isSome()},u=function(a){return o.isContentEditableFalse(a.from().block())===!1&&o.isContentEditableFalse(a.to().block())===!1},v=function(a,b,d){return o.isBr(d.position().getNode())&&n.isEmpty(d.block())===!1?k.positionIn(!1,d.block().dom()).bind(function(e){return e.isEqual(d.position())?k.fromPosition(b,a,e).bind(function(b){return r(a,b)}):c.some(d)}).getOr(d):d},w=function(a,b,c){var e=r(a,l.fromRangeStart(c)),f=e.bind(function(c){return k.fromPosition(b,a,c.position()).bind(function(c){return r(a,c).map(function(c){return v(a,b,c)})})});return d.liftN([e,f],q).filter(function(a){return s(a)&&t(a)&&u(a)})},x=function(a,b,d){return d.collapsed?w(a,b,d):c.none()};return{read:x}}),g(\"5g\",[\"3x\",\"4z\",\"4a\",\"5c\",\"1r\",\"59\",\"5l\",\"1p\",\"65\",\"1j\"],function(a,b,c,d,e,f,g,h,i,j){var k=function(h,k,l,m){var n=f.children(k);return j.isBr(m.getNode())&&(d.remove(e.fromDom(m.getNode())),m=g.positionIn(!1,l.dom()).getOr(m)),i.isEmpty(k)===!1&&a.each(n,function(a){c.append(l,a)}),i.isEmpty(k)&&d.remove(k),n.length>0?b.from(m):b.none()},l=function(a,b,c){return a?i.isEmpty(b)?(d.remove(b),g.positionIn(!0,c.dom())):g.positionIn(!1,b.dom()).bind(function(d){return k(a,c,b,d)}):i.isEmpty(c)?(d.remove(c),g.positionIn(!0,b.dom())):g.positionIn(!1,c.dom()).bind(function(d){return k(a,b,c,d)})};return{mergeBlocks:l}}),g(\"4i\",[\"5f\",\"5g\"],function(a,b){var c=function(c,d){var e;return e=a.read(c.getBody(),d,c.selection.getRng()).bind(function(a){return b.mergeBlocks(d,a.from().block(),a.to().block())}),e.each(function(a){c.selection.setRng(a.toRange())}),e.isSome()};return{backspaceDelete:c}}),g(\"4j\",[\"5d\",\"1q\",\"1r\",\"5h\",\"5g\"],function(a,b,c,d,e){var f=function(f,g){var h=g.getRng();return a.liftN([d.getParentTextBlock(f,c.fromDom(h.startContainer)),d.getParentTextBlock(f,c.fromDom(h.endContainer))],function(a,c){return b.eq(a,c)===!1&&(h.deleteContents(),e.mergeBlocks(!0,a,c).each(function(a){g.setRng(a.toRange())}),!0)}).getOr(!1)},g=function(a,b){var d=c.fromDom(a.getBody());return a.selection.isCollapsed()===!1&&f(d,a.selection)};return{backspaceDelete:g}}),g(\"66\",[\"3x\",\"63\",\"60\",\"3y\",\"3z\",\"49\"],function(a,b,c,d,e,f){var g=function(g){if(!c.isArray(g))throw new e(\"cases must be an array\");if(0===g.length)throw new e(\"there must be at least one case\");var h=[],i={};return a.each(g,function(j,k){var l=b.keys(j);if(1!==l.length)throw new e(\"one and only one name per case\");var m=l[0],n=j[m];if(void 0!==i[m])throw new e(\"duplicate key detected:\"+m);if(\"cata\"===m)throw new e(\"cannot have a case named cata (sorry)\");if(!c.isArray(n))throw new e(\"case arguments must be an array\");h.push(m),i[m]=function(){var c=arguments.length;if(c!==n.length)throw new e(\"Wrong number of arguments to case \"+m+\". Expected \"+n.length+\" (\"+n+\"), got \"+c);for(var i=new d(c),j=0;j<i.length;j++)i[j]=arguments[j];var l=function(c){var d=b.keys(c);if(h.length!==d.length)throw new e(\"Wrong number of arguments to match. Expected: \"+h.join(\",\")+\"\\nActual: \"+d.join(\",\"));var f=a.forall(h,function(b){return a.contains(d,b)});if(!f)throw new e(\"Not all branches were specified when using match. Specified: \"+d.join(\", \")+\"\\nRequired: \"+h.join(\", \"));return c[m].apply(null,i)};return{fold:function(){if(arguments.length!==g.length)throw new e(\"Wrong number of arguments to fold. Expected \"+g.length+\", got \"+arguments.length);var a=arguments[k];return a.apply(null,i)},match:l,log:function(a){f.log(a,{constructors:h,constructor:m,params:i})}}}}),i};return{generate:g}}),g(\"5j\",[\"66\",\"4z\",\"1r\",\"5l\",\"1p\",\"5i\",\"5h\",\"65\",\"1j\"],function(a,b,c,d,e,f,g,h,i){var j=a.generate([{remove:[\"element\"]},{moveToElement:[\"element\"]},{moveToPosition:[\"position\"]}]),k=function(a,b){var c=b.getNode(a===!1),d=a?\"after\":\"before\";return i.isElement(c)&&c.getAttribute(\"data-mce-caret\")===d},l=function(a,d,e,f){var i=f.getNode(d===!1);return g.getParentTextBlock(c.fromDom(a),c.fromDom(e.getNode())).map(function(a){return h.isEmpty(a)?j.remove(a.dom()):j.moveToElement(i)}).orThunk(function(){return b.some(j.moveToElement(i))})},m=function(a,c,e){return d.fromPosition(c,a,e).bind(function(d){return c&&i.isContentEditableFalse(d.getNode())?l(a,c,e,d):c===!1&&i.isContentEditableFalse(d.getNode(!0))?l(a,c,e,d):c&&f.isAfterContentEditableFalse(e)?b.some(j.moveToPosition(d)):c===!1&&f.isBeforeContentEditableFalse(e)?b.some(j.moveToPosition(d)):b.none();\n})},n=function(a,c){return a&&i.isContentEditableFalse(c.nextSibling)?b.some(j.moveToElement(c.nextSibling)):a===!1&&i.isContentEditableFalse(c.previousSibling)?b.some(j.moveToElement(c.previousSibling)):b.none()},o=function(a,c,d){return k(c,d)?n(c,d.getNode(c===!1)).fold(function(){return m(a,c,d)},b.some):m(a,c,d)},p=function(a,c,d){var g=f.normalizeRange(c?1:-1,a,d),h=e.fromRangeStart(g);return c===!1&&f.isAfterContentEditableFalse(h)?b.some(j.remove(h.getNode(!0))):c&&f.isBeforeContentEditableFalse(h)?b.some(j.remove(h.getNode())):o(a,c,h)};return{read:p}}),g(\"67\",[],function(){var a=/[\\u0591-\\u07FF\\uFB1D-\\uFDFF\\uFE70-\\uFEFC]/,b=function(b){return a.test(b)};return{hasStrongRtl:b}}),g(\"5p\",[\"3x\",\"1m\",\"4z\",\"5d\",\"1k\",\"5l\",\"1p\",\"5i\",\"4m\",\"e\",\"1j\",\"67\"],function(a,b,c,d,e,f,g,h,i,j,k,l){var m=function(a){return j.DOM.is(a,\"a[href],code\")},n=function(a){return\"rtl\"===j.DOM.getStyle(a,\"direction\",!0)||l.hasStrongRtl(a.textContent)},o=function(b,c){return a.filter(j.DOM.getParents(c.container(),\"*\",b),m)},p=function(a,b){var d=o(a,b);return c.from(d[0])},q=function(a,b){var d=o(a,b);return c.from(d[d.length-1])},r=function(a,b,c){var d=h.getParentBlock(b,a),e=h.getParentBlock(c,a);return d&&d===e},s=function(a,b){return!!b&&q(a,b).isSome()},t=function(a,b){return q(a,b).map(function(a){return w(a,!1,b).isNone()||w(a,!0,b).isNone()}).getOr(!1)},u=function(a){return e.isBeforeInline(a)||e.isAfterInline(a)},v=function(a,b){return f.positionIn(b,a)},w=function(a,b,c){return f.fromPosition(b,a,c)},x=function(a,b){var c=b.container(),d=b.offset();return a?e.isCaretContainerInline(c)?k.isText(c.nextSibling)?new g(c.nextSibling,0):g.after(c):e.isBeforeInline(b)?new g(c,d+1):b:e.isCaretContainerInline(c)?k.isText(c.previousSibling)?new g(c.previousSibling,c.previousSibling.data.length):g.before(c):e.isAfterInline(b)?new g(c,d-1):b},y=b.curry(x,!0),z=b.curry(x,!1);return{isInlineTarget:m,findInline:p,findRootInline:q,isInInline:s,isRtl:n,isAtInlineEndPoint:t,isAtZwsp:u,findCaretPositionIn:v,findCaretPosition:w,normalizePosition:x,normalizeForwards:y,normalizeBackwards:z,hasSameParentBlock:r}}),g(\"5k\",[\"1m\",\"4z\",\"5d\",\"4a\",\"5c\",\"1r\",\"4d\",\"64\",\"59\",\"44\",\"1p\",\"65\",\"1j\",\"5p\"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){var o=function(a,b){var c=a.container(),d=a.offset();return k.isTextPosition(a)===!1&&c===b.parentNode&&d>k.before(b).offset()},p=function(a,b){return o(b,a)?new k(b.container(),b.offset()-1):b},q=function(a){return m.isText(a)?new k(a,0):k.before(a)},r=function(a){return m.isText(a)?new k(a,a.data.length):k.after(a)},s=function(a){return j.isCaretCandidate(a.previousSibling)?b.some(r(a.previousSibling)):a.previousSibling?n.findCaretPositionIn(a.previousSibling,!1):b.none()},t=function(a){return j.isCaretCandidate(a.nextSibling)?b.some(q(a.nextSibling)):a.nextSibling?n.findCaretPositionIn(a.nextSibling,!0):b.none()},u=function(a,c){var d=k.before(c.previousSibling?c.previousSibling:c.parentNode);return n.findCaretPosition(a,!1,d).fold(function(){return n.findCaretPosition(a,!0,k.after(c))},b.some)},v=function(a,c){return n.findCaretPosition(a,!0,k.after(c)).fold(function(){return n.findCaretPosition(a,!1,k.before(c))},b.some)},w=function(a,b){return s(b).orThunk(function(){return t(b)}).orThunk(function(){return u(a,b)})},x=function(a,b){return t(b).orThunk(function(){return s(b)}).orThunk(function(){return v(a,b)})},y=function(a,b,c){return a?x(b,c):w(b,c)},z=function(b,c,d){return y(b,c,d).map(a.curry(p,d))},A=function(a,b,c){c.fold(function(){a.focus()},function(c){a.selection.setRng(c.toRange(),b)})},B=function(a){return function(b){return b.dom()===a}},C=function(a,b){return b&&a.schema.getBlockElements().hasOwnProperty(g.name(b))},D=function(a){if(l.isEmpty(a)){var c=f.fromHtml('<br data-mce-bogus=\"1\">');return e.empty(a),d.append(a,c),b.some(k.before(c.dom()))}return b.none()},E=function(a,b){return c.liftN([i.prevSibling(a),i.nextSibling(a),b],function(b,c,d){var f,g=b.dom(),h=c.dom();return m.isText(g)&&m.isText(h)?(f=g.data.length,g.appendData(h.data),e.remove(c),e.remove(a),d.container()===h?new k(g,f):d):(e.remove(a),d)}).orThunk(function(){return e.remove(a),b})},F=function(c,d,e){var f=z(d,c.getBody(),e.dom()),g=h.ancestor(e,a.curry(C,c),B(c.getBody())),i=E(e,f);g.bind(D).fold(function(){A(c,d,i)},function(a){A(c,d,b.some(a))})};return{deleteElement:F}}),g(\"4k\",[\"1r\",\"1p\",\"5i\",\"5f\",\"5j\",\"5k\",\"5g\",\"1j\"],function(a,b,c,d,e,f,g,h){var i=function(b,c){return function(d){return f.deleteElement(b,c,a.fromDom(d)),!0}},j=function(a,c){return function(d){var e=c?b.before(d):b.after(d);return a.selection.setRng(e.toRange()),!0}},k=function(a){return function(b){return a.selection.setRng(b.toRange()),!0}},l=function(a,b){var c=e.read(a.getBody(),b,a.selection.getRng()).map(function(c){return c.fold(i(a,b),j(a,b),k(a))});return c.getOr(!1)},m=function(b,c){var d=b.selection.getNode();return!!h.isContentEditableFalse(d)&&(f.deleteElement(b,c,a.fromDom(b.selection.getNode())),!0)},n=function(a,b){for(;b&&b!==a;){if(h.isContentEditableTrue(b)||h.isContentEditableFalse(b))return b;b=b.parentNode}return null},o=function(a){var c,d=n(a.getBody(),a.selection.getNode());return h.isContentEditableTrue(d)&&a.dom.isBlock(d)&&a.dom.isEmpty(d)&&(c=a.dom.create(\"br\",{\"data-mce-bogus\":\"1\"}),a.dom.setHTML(d,\"\"),d.appendChild(c),a.selection.setRng(b.before(c).toRange())),!0},p=function(a,b){return a.selection.isCollapsed()?l(a,b):m(a,b)};return{backspaceDelete:p,paddEmptyElement:o}}),g(\"68\",[\"1m\",\"1j\",\"1l\"],function(a,b,c){var d=b.isText,e=function(a){return d(a)&&a.data[0]===c.ZWSP},f=function(a){return d(a)&&a.data[a.data.length-1]===c.ZWSP},g=function(a){return a.ownerDocument.createTextNode(c.ZWSP)},h=function(a){if(d(a.previousSibling))return f(a.previousSibling)?a.previousSibling:(a.previousSibling.appendData(c.ZWSP),a.previousSibling);if(d(a))return e(a)?a:(a.insertData(0,c.ZWSP),a);var b=g(a);return a.parentNode.insertBefore(b,a),b},i=function(a){if(d(a.nextSibling))return e(a.nextSibling)?a.nextSibling:(a.nextSibling.insertData(0,c.ZWSP),a.nextSibling);if(d(a))return f(a)?a:(a.appendData(c.ZWSP),a);var b=g(a);return a.nextSibling?a.parentNode.insertBefore(b,a.nextSibling):a.parentNode.appendChild(b),b},j=function(a,b){return a?h(b):i(b)};return{insertInline:j,insertInlineBefore:a.curry(j,!0),insertInlineAfter:a.curry(j,!1)}}),g(\"69\",[\"3x\",\"1k\",\"1p\",\"1j\",\"1l\",\"9\"],function(a,b,c,d,e,f){var g=d.isElement,h=d.isText,i=function(a){var b=a.parentNode;b&&b.removeChild(a)},j=function(a){try{return a.nodeValue}catch(a){return\"\"}},k=function(a,b){0===b.length?i(a):a.nodeValue=b},l=function(a){var b=e.trim(a);return{count:a.length-b.length,text:b}},m=function(a,b){return s(a),b},n=function(a,b){var d=l(a.data.substr(0,b.offset())),e=l(a.data.substr(b.offset())),f=d.text+e.text;return f.length>0?(k(a,f),new c(a,b.offset()-d.count)):b},o=function(b,d){var e=d.container(),f=a.indexOf(e.childNodes,b).map(function(a){return a<d.offset()?new c(e,d.offset()-1):d}).getOr(d);return s(b),f},p=function(a,b){return b.container()===a?n(a,b):m(a,b)},q=function(a,b){return b.container()===a.parentNode?o(a,b):m(a,b)},r=function(a,b){return c.isTextPosition(b)?p(a,b):q(a,b)},s=function(a){if(g(a)&&b.isCaretContainer(a)&&(b.hasContent(a)?a.removeAttribute(\"data-mce-caret\"):i(a)),h(a)){var c=e.trim(j(a));k(a,c)}};return{removeAndReposition:r,remove:s}}),g(\"5m\",[\"4z\",\"1k\",\"68\",\"69\",\"1p\",\"1j\",\"5p\"],function(a,b,c,d,e,f,g){var h=function(a,b){return f.isText(a.container())?c.insertInline(b,a.container()):c.insertInline(b,a.getNode())},i=function(a,c){var d=c.get();return d&&a.container()===d&&b.isCaretContainerInline(d)},j=function(b,f){return f.fold(function(f){d.remove(b.get());var g=c.insertInlineBefore(f);return b.set(g),a.some(new e(g,g.length-1))},function(a){return g.findCaretPositionIn(a,!0).map(function(a){if(i(a,b))return new e(b.get(),1);d.remove(b.get());var c=h(a,!0);return b.set(c),new e(c,1)})},function(a){return g.findCaretPositionIn(a,!1).map(function(a){if(i(a,b))return new e(b.get(),b.get().length-1);d.remove(b.get());var c=h(a,!1);return b.set(c),new e(c,c.length-1)})},function(f){d.remove(b.get());var g=c.insertInlineAfter(f);return b.set(g),a.some(new e(g,1))})};return{renderCaret:j}}),g(\"6a\",[\"4z\"],function(a){var b=function(b,c){for(var d=0;d<b.length;d++){var e=b[d].apply(null,c);if(e.isSome())return e}return a.none()};return{evaluateUntil:b}}),g(\"5n\",[\"66\",\"1m\",\"4z\",\"5d\",\"1k\",\"1p\",\"5i\",\"1j\",\"5p\",\"6a\"],function(a,b,c,d,e,f,g,h,i,j){var k=a.generate([{before:[\"element\"]},{start:[\"element\"]},{end:[\"element\"]},{after:[\"element\"]}]),l=function(a,b){var c=g.getParentBlock(b,a);return c?c:a},m=function(a,d){var e=i.normalizeForwards(d),f=l(a,e.container());return i.findRootInline(f,e).fold(function(){return i.findCaretPosition(f,!0,e).bind(b.curry(i.findRootInline,f)).map(function(a){return k.before(a)})},c.none)},n=function(a,b){var d=i.normalizeBackwards(b);return i.findRootInline(a,d).bind(function(a){var b=i.findCaretPosition(a,!1,d);return b.isNone()?c.some(k.start(a)):c.none()})},o=function(a,b){var d=i.normalizeForwards(b);return i.findRootInline(a,d).bind(function(a){var b=i.findCaretPosition(a,!0,d);return b.isNone()?c.some(k.end(a)):c.none()})},p=function(a,d){var e=i.normalizeBackwards(d),f=l(a,e.container());return i.findRootInline(f,e).fold(function(){return i.findCaretPosition(f,!1,e).bind(b.curry(i.findRootInline,f)).map(function(a){return k.after(a)})},c.none)},q=function(a){return i.isRtl(s(a))===!1},r=function(a,b){var c=j.evaluateUntil([m,n,o,p],[a,b]);return c.filter(q)},s=function(a){return a.fold(b.identity,b.identity,b.identity,b.identity)},t=function(a){return a.fold(b.constant(\"before\"),b.constant(\"start\"),b.constant(\"end\"),b.constant(\"after\"))},u=function(a){return a.fold(k.before,k.before,k.after,k.after)},v=function(a){return a.fold(k.start,k.start,k.end,k.end)},w=function(a,b){return t(a)===t(b)&&s(a)===s(b)},x=function(a,b,c,e,f){return d.liftN([i.findRootInline(b,c),i.findRootInline(b,e)],function(c,d){return c!==d&&i.hasSameParentBlock(b,c,d)?k.after(a?c:d):f}).getOr(f)},y=function(a,c){return a.fold(b.constant(!0),function(a){return!w(a,c)})},z=function(a,c,d,e){var f=i.normalizePosition(a,e),g=i.findCaretPosition(c,a,f).map(b.curry(i.normalizePosition,a)),h=g.fold(function(){return d.map(u)},function(e){return r(c,e).map(b.curry(x,a,c,f,e)).filter(b.curry(y,d))});return h.filter(q)},A=function(a,d){return a?d.fold(b.compose(c.some,k.start),c.none,b.compose(c.some,k.after),c.none):d.fold(c.none,b.compose(c.some,k.before),c.none,b.compose(c.some,k.end))},B=function(a,c,d){var e=i.normalizePosition(a,d),f=r(c,e);return r(c,e).bind(b.curry(A,a)).orThunk(function(){return z(a,c,f,d)})};return{readLocation:r,prevLocation:b.curry(B,!1),nextLocation:b.curry(B,!0),getElement:s,outside:u,inside:v}}),g(\"6b\",[],function(){var a=function(b){var c=b,d=function(){return c},e=function(a){c=a},f=function(){return a(d())};return{get:d,set:e,clone:f}};return a}),g(\"5o\",[\"3x\",\"6b\",\"1m\",\"69\",\"1p\",\"5m\",\"5n\",\"5p\"],function(a,b,c,d,e,f,g,h){var i=function(a,b){var c=a.dom.createRng();c.setStart(b.container(),b.offset()),c.setEnd(b.container(),b.offset()),a.selection.setRng(c)},j=function(a){return a.settings.inline_boundaries!==!1},k=function(a,b){a?b.setAttribute(\"data-mce-selected\",\"1\"):b.removeAttribute(\"data-mce-selected\",\"1\")},l=function(a,b,c){return f.renderCaret(b,c).map(function(b){return i(a,b),c})},m=function(a,b,c){var d=a.getBody(),f=e.fromRangeStart(a.selection.getRng()),h=c?g.nextLocation(d,f):g.prevLocation(d,f);return h.bind(function(c){return l(a,b,c)})},n=function(b,d){var e=b.select(\"a[href][data-mce-selected],code[data-mce-selected]\"),f=a.filter(d,h.isInlineTarget);a.each(a.difference(e,f),c.curry(k,!1)),a.each(a.difference(f,e),c.curry(k,!0))},o=function(a,b){if(a.selection.isCollapsed()&&a.composing!==!0&&b.get()){var c=e.fromRangeStart(a.selection.getRng());e.isTextPosition(c)&&h.isAtZwsp(c)===!1&&(i(a,d.removeAndReposition(b.get(),c)),b.set(null))}},p=function(b,c,d){if(b.selection.isCollapsed()){var f=a.filter(d,h.isInlineTarget);a.each(f,function(a){var d=e.fromRangeStart(b.selection.getRng());g.readLocation(b.getBody(),d).bind(function(a){return l(b,c,a)})})}},q=function(a,b,c){return function(){return!!j(a)&&m(a,b,c).isSome()}},r=function(a){var c=new b(null);return a.on(\"NodeChange\",function(b){j(a)&&(n(a.dom,b.parents),o(a,c),p(a,c,b.parents))}),c};return{move:q,setupSelectedState:r,setCaretPosition:i}}),g(\"4l\",[\"1m\",\"4z\",\"5d\",\"1r\",\"1k\",\"5l\",\"1p\",\"5i\",\"5k\",\"5m\",\"5n\",\"5o\",\"5p\"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n=function(a){return a.settings.inline_boundaries!==!1},o=function(a,b){var c=document.createRange();return c.setStart(a.container(),a.offset()),c.setEnd(b.container(),b.offset()),c},p=function(a){return c.liftN([m.findCaretPositionIn(a,!0),m.findCaretPositionIn(a,!1)],function(b,c){var d=m.normalizePosition(!0,b),e=m.normalizePosition(!1,c);return m.findCaretPosition(a,!0,d).map(function(a){return a.isEqual(e)}).getOr(!0)}).getOr(!0)},q=function(a,b){return function(c){return j.renderCaret(b,c).map(function(b){return l.setCaretPosition(a,b),!0}).getOr(!1)}},r=function(a,b,c,d){var e=a.getBody();a.undoManager.ignore(function(){a.selection.setRng(o(c,d)),a.execCommand(\"Delete\"),k.readLocation(e,g.fromRangeStart(a.selection.getRng())).map(k.inside).map(q(a,b))}),a.nodeChanged()},s=function(a,b){var c=h.getParentBlock(b,a);return c?c:a},t=function(c,e,g,h){var j=s(c.getBody(),h.container()),l=k.readLocation(j,h);return l.bind(function(c){return g?c.fold(a.constant(b.some(k.inside(c))),b.none,a.constant(b.some(k.outside(c))),b.none):c.fold(b.none,a.constant(b.some(k.outside(c))),b.none,a.constant(b.some(k.inside(c))))}).map(q(c,e)).getOrThunk(function(){var a=f.navigate(g,j,h),b=a.bind(function(a){return k.readLocation(j,a)});return l.isSome()&&b.isSome()?m.findRootInline(j,h).map(function(a){return!!p(a)&&(i.deleteElement(c,g,d.fromDom(a)),!0)}).getOr(!1):b.bind(function(b){return a.map(function(a){return g?r(c,e,h,a):r(c,e,a,h),!0})}).getOr(!1)})},u=function(a,b,c){if(a.selection.isCollapsed()&&n(a)){var d=g.fromRangeStart(a.selection.getRng());return t(a,b,c,d)}return!1};return{backspaceDelete:u}}),g(\"20\",[\"4i\",\"4j\",\"4k\",\"4l\"],function(a,b,c,d){var e=function(a,b){a.getDoc().execCommand(b,!1,null)},f=function(a){var b=a.dom,c=a.getBody();b.isEmpty(c)&&(a.setContent(\"\"),c.firstChild&&b.isBlock(c.firstChild)?a.selection.setCursorLocation(c.firstChild,0):a.selection.setCursorLocation(c,0))},g=function(g){c.backspaceDelete(g,!1)||d.backspaceDelete(g,!1)||a.backspaceDelete(g,!1)||b.backspaceDelete(g,!1)||(e(g,\"Delete\"),f(g))},h=function(f){c.backspaceDelete(f,!0)||d.backspaceDelete(f,!0)||a.backspaceDelete(f,!0)||b.backspaceDelete(f,!0)||e(f,\"ForwardDelete\")};return{deleteCommand:g,forwardDeleteCommand:h}}),g(\"4n\",[\"5l\",\"1p\",\"5i\",\"1j\"],function(a,b,c,d){var e=function(a){return d.isElement(a)&&/^(P|H[1-6]|DIV)$/.test(a.nodeName)},f=function(a,b){return b(a.endContainer)},g=function(a,b,c,d){var e=document.createRange();return e.setStart(a,b),e.setEnd(c,d),e},h=function(d){var h=b.fromRangeStart(d),i=b.fromRangeEnd(d),j=d.commonAncestorContainer;return d.collapsed===!1&&f(d,e)&&0===d.endOffset?a.fromPosition(!1,j,i).map(function(a){return!c.isInSameBlock(h,i,j)&&c.isInSameBlock(h,a,j)?g(h.container(),h.offset(),a.container(),a.offset()):d}).getOr(d):d},i=function(a){return h(a)};return{normalize:i}}),g(\"4o\",[\"9\",\"4m\",\"1p\"],function(a,b,c){var d=function(a){var b=a.firstChild,c=a.lastChild;return b&&\"meta\"===b.name&&(b=b.next),c&&\"mce_marker\"===c.attr(\"id\")&&(c=c.prev),!(!b||b!==c)&&(\"ul\"===b.name||\"ol\"===b.name)},e=function(a){var b=a.firstChild,c=a.lastChild;return b&&\"META\"===b.nodeName&&b.parentNode.removeChild(b),c&&\"mce_marker\"===c.id&&c.parentNode.removeChild(c),a},f=function(a,b,c){var d=b.serialize(c),f=a.createFragment(d);return e(f)},g=function(b){return a.grep(b.childNodes,function(a){return\"LI\"===a.nodeName})},h=function(a){return!a.firstChild},i=function(a){return a.length>0&&h(a[a.length-1])?a.slice(0,-1):a},j=function(a,b){var c=a.getParent(b,a.isBlock);return c&&\"LI\"===c.nodeName?c:null},k=function(a,b){return!!j(a,b)},l=function(a,b){var c=b.cloneRange(),d=b.cloneRange();return c.setStartBefore(a),d.setEndAfter(a),[c.cloneContents(),d.cloneContents()]},m=function(a,d){var e=c.before(a),f=new b(d),g=f.next(e);return g?g.toRange():null},n=function(a,d){var e=c.after(a),f=new b(d),g=f.prev(e);return g?g.toRange():null},o=function(b,c,d,e){var f=l(b,e),g=b.parentNode;return g.insertBefore(f[0],b),a.each(c,function(a){g.insertBefore(a,b)}),g.insertBefore(f[1],b),g.removeChild(b),n(c[c.length-1],d)},p=function(b,c,d){var e=b.parentNode;return a.each(c,function(a){e.insertBefore(a,b)}),m(b,d)},q=function(a,b,c,d){return d.insertAfter(b.reverse(),a),n(b[0],c)},r=function(a,d,e,h){var k=f(d,a,h),l=j(d,e.startContainer),m=i(g(k.firstChild)),n=1,r=2,s=d.getRoot(),t=function(a){var f=c.fromRangeStart(e),g=new b(d.getRoot()),h=a===n?g.prev(f):g.next(f);return!h||j(d,h.getNode())!==l};return t(n)?p(l,m,s):t(r)?q(l,m,s,d):o(l,m,s,e)};return{isListFragment:d,insertAtCaret:r,isParentBlockLi:k,trimListItems:i,listItems:g}}),g(\"21\",[\"1p\",\"4m\",\"1v\",\"1j\",\"4n\",\"6\",\"n\",\"4o\",\"9\"],function(a,b,c,d,e,f,g,h,i){var j=d.matchNodeNames(\"td th\"),k=function(a,b,c){if(\"all\"===c.getAttribute(\"data-mce-bogus\"))c.parentNode.insertBefore(a.dom.createFragment(b),c);else{var d=c.firstChild,e=c.lastChild;!d||d===e&&\"BR\"===d.nodeName?a.dom.setHTML(c,b):a.selection.setContent(b)}},l=function(d,l,m){function n(a){function b(a){return d[a]&&3==d[a].nodeType}var c,d,e;return c=I.getRng(!0),d=c.startContainer,e=c.startOffset,3==d.nodeType&&(e>0?a=a.replace(/^&nbsp;/,\" \"):b(\"previousSibling\")||(a=a.replace(/^ /,\"&nbsp;\")),e<d.length?a=a.replace(/&nbsp;(<br>|)$/,\" \"):b(\"nextSibling\")||(a=a.replace(/(&nbsp;| )(<br>|)$/,\"&nbsp;\"))),a}function o(){var a,b,c;a=I.getRng(!0),b=a.startContainer,c=a.startOffset,3==b.nodeType&&a.collapsed&&(\"\\xa0\"===b.data[c]?(b.deleteData(c,1),/[\\u00a0| ]$/.test(l)||(l+=\" \")):\"\\xa0\"===b.data[c-1]&&(b.deleteData(c-1,1),/[\\u00a0| ]$/.test(l)||(l=\" \"+l)))}function p(){if(G){var a=d.getBody(),b=new c(J);i.each(J.select(\"*[data-mce-fragment]\"),function(c){for(var d=c.parentNode;d&&d!=a;d=d.parentNode)H[c.nodeName.toLowerCase()]&&b.compare(d,c)&&J.remove(c,!0)})}}function q(a){for(var b=a;b=b.walk();)1===b.type&&b.attr(\"data-mce-fragment\",\"1\")}function r(a){i.each(a.getElementsByTagName(\"*\"),function(a){a.removeAttribute(\"data-mce-fragment\")})}function s(a){return!!a.getAttribute(\"data-mce-fragment\")}function t(a){return a&&!d.schema.getShortEndedElements()[a.nodeName]}function u(c){function e(a){for(var b=d.getBody();a&&a!==b;a=a.parentNode)if(\"false\"===d.dom.getContentEditable(a))return a;return null}function g(c){var e=a.fromRangeStart(c),f=new b(d.getBody());if(e=f.next(e))return e.toRange()}var h,i,k;if(c){if(I.scrollIntoView(c),h=e(c))return J.remove(c),void I.select(h);C=J.createRng(),D=c.previousSibling,D&&3==D.nodeType?(C.setStart(D,D.nodeValue.length),f.ie||(E=c.nextSibling,E&&3==E.nodeType&&(D.appendData(E.data),E.parentNode.removeChild(E)))):(C.setStartBefore(c),C.setEndBefore(c)),i=J.getParent(c,J.isBlock),J.remove(c),i&&J.isEmpty(i)&&(d.$(i).empty(),C.setStart(i,0),C.setEnd(i,0),j(i)||s(i)||!(k=g(C))?J.add(i,J.create(\"br\",{\"data-mce-bogus\":\"1\"})):(C=k,J.remove(i))),I.setRng(C)}}var v,w,x,y,z,A,B,C,D,E,F,G,H=d.schema.getTextInlineElements(),I=d.selection,J=d.dom;/^ | $/.test(l)&&(l=n(l)),v=d.parser,G=m.merge,w=new g({validate:d.settings.validate},d.schema),F='<span id=\"mce_marker\" data-mce-type=\"bookmark\">&#xFEFF;&#x200B;</span>',A={content:l,format:\"html\",selection:!0},d.fire(\"BeforeSetContent\",A),l=A.content,l.indexOf(\"{$caret}\")==-1&&(l+=\"{$caret}\"),l=l.replace(/\\{\\$caret\\}/,F),C=I.getRng();var K=C.startContainer||(C.parentElement?C.parentElement():null),L=d.getBody();K===L&&I.isCollapsed()&&J.isBlock(L.firstChild)&&t(L.firstChild)&&J.isEmpty(L.firstChild)&&(C=J.createRng(),C.setStart(L.firstChild,0),C.setEnd(L.firstChild,0),I.setRng(C)),I.isCollapsed()||(d.selection.setRng(e.normalize(d.selection.getRng())),d.getDoc().execCommand(\"Delete\",!1,null),o()),x=I.getNode();var M={context:x.nodeName.toLowerCase(),data:m.data};if(z=v.parse(l,M),m.paste===!0&&h.isListFragment(z)&&h.isParentBlockLi(J,x))return C=h.insertAtCaret(w,J,d.selection.getRng(!0),z),d.selection.setRng(C),void d.fire(\"SetContent\",A);if(q(z),D=z.lastChild,\"mce_marker\"==D.attr(\"id\"))for(B=D,D=D.prev;D;D=D.walk(!0))if(3==D.type||!J.isBlock(D.name)){d.schema.isValidChild(D.parent.name,\"span\")&&D.parent.insert(B,D,\"br\"===D.name);break}if(d._selectionOverrides.showBlockCaretContainer(x),M.invalid){for(I.setContent(F),x=I.getNode(),y=d.getBody(),9==x.nodeType?x=D=y:D=x;D!==y;)x=D,D=D.parentNode;l=x==y?y.innerHTML:J.getOuterHTML(x),l=w.serialize(v.parse(l.replace(/<span (id=\"mce_marker\"|id=mce_marker).+?<\\/span>/i,function(){return w.serialize(z)}))),x==y?J.setHTML(y,l):J.setOuterHTML(x,l)}else l=w.serialize(z),k(d,l,x);p(),u(J.get(\"mce_marker\")),r(d.getBody()),d.fire(\"SetContent\",A),d.addVisual()},m=function(a){var b;return\"string\"!=typeof a?(b=i.extend({paste:a.paste,data:{paste:a.paste}},a),{content:a.content,details:b}):{content:a,details:{}}},n=function(a,b){var c=m(b);l(a,c.content,c.details)};return{insertAtCaret:n}}),g(\"v\",[\"20\",\"1j\",\"h\",\"c\",\"6\",\"21\",\"9\"],function(a,b,c,d,e,f,g){var h=g.each,i=g.extend,j=g.map,k=g.inArray,l=g.explode,m=e.ie&&e.ie<11,n=!0,o=!1;return function(g){function p(a,b,c,d){var e,f,i=0;if(!g.removed){if(/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(a)||d&&d.skip_focus||g.focus(),d=g.fire(\"BeforeExecCommand\",{command:a,ui:b,value:c}),d.isDefaultPrevented())return!1;if(f=a.toLowerCase(),e=H.exec[f])return e(f,b,c),g.fire(\"ExecCommand\",{command:a,ui:b,value:c}),!0;if(h(g.plugins,function(d){if(d.execCommand&&d.execCommand(a,b,c))return g.fire(\"ExecCommand\",{command:a,ui:b,value:c}),i=!0,!1}),i)return i;if(g.theme&&g.theme.execCommand&&g.theme.execCommand(a,b,c))return g.fire(\"ExecCommand\",{command:a,ui:b,value:c}),!0;try{i=g.getDoc().execCommand(a,b,c)}catch(a){}return!!i&&(g.fire(\"ExecCommand\",{command:a,ui:b,value:c}),!0)}}function q(a){var b;if(!g.quirks.isHidden()&&!g.removed){if(a=a.toLowerCase(),b=H.state[a])return b(a);try{return g.getDoc().queryCommandState(a)}catch(a){}return!1}}function r(a){var b;if(!g.quirks.isHidden()&&!g.removed){if(a=a.toLowerCase(),b=H.value[a])return b(a);try{return g.getDoc().queryCommandValue(a)}catch(a){}}}function s(a,b){b=b||\"exec\",h(a,function(a,c){h(c.toLowerCase().split(\",\"),function(c){H[b][c]=a})})}function t(a,b,c){a=a.toLowerCase(),H.exec[a]=function(a,d,e,f){return b.call(c||g,d,e,f)}}function u(a){if(a=a.toLowerCase(),H.exec[a])return!0;try{return g.getDoc().queryCommandSupported(a)}catch(a){}return!1}function v(a,b,c){a=a.toLowerCase(),H.state[a]=function(){return b.call(c||g)}}function w(a,b,c){a=a.toLowerCase(),H.value[a]=function(){return b.call(c||g)}}function x(a){return a=a.toLowerCase(),!!H.exec[a]}function y(a,b,c){return void 0===b&&(b=o),void 0===c&&(c=null),g.getDoc().execCommand(a,b,c)}function z(a){return F.match(a)}function A(a,b){F.toggle(a,b?{value:b}:void 0),g.nodeChanged()}function B(a){G=E.getBookmark(a)}function C(){E.moveToBookmark(G)}var D,E,F,G,H={state:{},exec:{},value:{}},I=g.settings;g.on(\"PreInit\",function(){D=g.dom,E=g.selection,I=g.settings,F=g.formatter}),i(this,{execCommand:p,queryCommandState:q,queryCommandValue:r,queryCommandSupported:u,addCommands:s,addCommand:t,addQueryStateHandler:v,addQueryValueHandler:w,hasCustomCommand:x}),s({\"mceResetDesignMode,mceBeginUndoLevel\":function(){},\"mceEndUndoLevel,mceAddUndoLevel\":function(){g.undoManager.add()},\"Cut,Copy,Paste\":function(a){var b,c=g.getDoc();try{y(a)}catch(a){b=n}if(\"paste\"!==a||c.queryCommandEnabled(a)||(b=!0),b||!c.queryCommandSupported(a)){var d=g.translate(\"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.\");e.mac&&(d=d.replace(/Ctrl\\+/g,\"\\u2318+\")),g.notificationManager.open({text:d,type:\"error\"})}},unlink:function(){if(E.isCollapsed()){var a=g.dom.getParent(g.selection.getStart(),\"a\");return void(a&&g.dom.remove(a,!0))}F.remove(\"link\")},\"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,JustifyNone\":function(a){var b=a.substring(7);\"full\"==b&&(b=\"justify\"),h(\"left,center,right,justify\".split(\",\"),function(a){b!=a&&F.remove(\"align\"+a)}),\"none\"!=b&&A(\"align\"+b)},\"InsertUnorderedList,InsertOrderedList\":function(a){var b,c;y(a),b=D.getParent(E.getNode(),\"ol,ul\"),b&&(c=b.parentNode,/^(H[1-6]|P|ADDRESS|PRE)$/.test(c.nodeName)&&(B(),D.split(c,b),C()))},\"Bold,Italic,Underline,Strikethrough,Superscript,Subscript\":function(a){A(a)},\"ForeColor,HiliteColor,FontName\":function(a,b,c){A(a,c)},FontSize:function(a,b,c){var d,e;c>=1&&c<=7&&(e=l(I.font_size_style_values),d=l(I.font_size_classes),c=d?d[c-1]||c:e[c-1]||c),A(a,c)},RemoveFormat:function(a){F.remove(a)},mceBlockQuote:function(){A(\"blockquote\")},FormatBlock:function(a,b,c){return A(c||\"p\")},mceCleanup:function(){var a=E.getBookmark();g.setContent(g.getContent({cleanup:n}),{cleanup:n}),E.moveToBookmark(a)},mceRemoveNode:function(a,b,c){var d=c||E.getNode();d!=g.getBody()&&(B(),g.dom.remove(d,n),C())},mceSelectNodeDepth:function(a,b,c){var d=0;D.getParent(E.getNode(),function(a){if(1==a.nodeType&&d++==c)return E.select(a),o},g.getBody())},mceSelectNode:function(a,b,c){E.select(c)},mceInsertContent:function(a,b,c){f.insertAtCaret(g,c)},mceInsertRawHTML:function(a,b,c){E.setContent(\"tiny_mce_marker\"),g.setContent(g.getContent().replace(/tiny_mce_marker/g,function(){return c}))},mceToggleFormat:function(a,b,c){A(c)},mceSetContent:function(a,b,c){g.setContent(c)},\"Indent,Outdent\":function(a){var b,c,d;b=I.indentation,c=/[a-z%]+$/i.exec(b),b=parseInt(b,10),q(\"InsertUnorderedList\")||q(\"InsertOrderedList\")?y(a):(I.forced_root_block||D.getParent(E.getNode(),D.isBlock)||F.apply(\"div\"),h(E.getSelectedBlocks(),function(e){if(\"false\"!==D.getContentEditable(e)&&\"LI\"!==e.nodeName){var f=g.getParam(\"indent_use_margin\",!1)?\"margin\":\"padding\";f=\"TABLE\"===e.nodeName?\"margin\":f,f+=\"rtl\"==D.getStyle(e,\"direction\",!0)?\"Right\":\"Left\",\"outdent\"==a?(d=Math.max(0,parseInt(e.style[f]||0,10)-b),D.setStyle(e,f,d?d+c:\"\")):(d=parseInt(e.style[f]||0,10)+b+c,D.setStyle(e,f,d))}}))},mceRepaint:function(){},InsertHorizontalRule:function(){g.execCommand(\"mceInsertContent\",!1,\"<hr />\")},mceToggleVisualAid:function(){g.hasVisual=!g.hasVisual,g.addVisual()},mceReplaceContent:function(a,b,c){g.execCommand(\"mceInsertContent\",!1,c.replace(/\\{\\$selection\\}/g,E.getContent({format:\"text\"})))},mceInsertLink:function(a,b,c){var d;\"string\"==typeof c&&(c={href:c}),d=D.getParent(E.getNode(),\"a\"),c.href=c.href.replace(\" \",\"%20\"),d&&c.href||F.remove(\"link\"),c.href&&F.apply(\"link\",c,d)},selectAll:function(){var a,c=D.getRoot();if(E.getRng().setStart){var d=D.getParent(E.getStart(),b.isContentEditableTrue);d&&(a=D.createRng(),a.selectNodeContents(d),E.setRng(a))}else a=E.getRng(),a.item||(a.moveToElementText(c),a.select())},\"delete\":function(){a.deleteCommand(g)},forwardDelete:function(){a.forwardDeleteCommand(g)},mceNewDocument:function(){g.setContent(\"\")},InsertLineBreak:function(a,b,e){function f(){for(var a,b=new d(p,r),c=g.schema.getNonEmptyElements();a=b.next();)if(c[a.nodeName.toLowerCase()]||a.length>0)return!0}var h,i,j,k=e,l=E.getRng(!0);new c(D).normalize(l);var o=l.startOffset,p=l.startContainer;if(1==p.nodeType&&p.hasChildNodes()){var q=o>p.childNodes.length-1;p=p.childNodes[Math.min(o,p.childNodes.length-1)]||p,o=q&&3==p.nodeType?p.nodeValue.length:0}var r=D.getParent(p,D.isBlock),s=r?r.nodeName.toUpperCase():\"\",t=r?D.getParent(r.parentNode,D.isBlock):null,u=t?t.nodeName.toUpperCase():\"\",v=k&&k.ctrlKey;\"LI\"!=u||v||(r=t,s=u),p&&3==p.nodeType&&o>=p.nodeValue.length&&(m||f()||(h=D.create(\"br\"),l.insertNode(h),l.setStartAfter(h),l.setEndAfter(h),i=!0)),h=D.create(\"br\"),l.insertNode(h);var w=D.doc.documentMode;return m&&\"PRE\"==s&&(!w||w<8)&&h.parentNode.insertBefore(D.doc.createTextNode(\"\\r\"),h),j=D.create(\"span\",{},\"&nbsp;\"),h.parentNode.insertBefore(j,h),E.scrollIntoView(j),D.remove(j),i?(l.setStartBefore(h),l.setEndBefore(h)):(l.setStartAfter(h),l.setEndAfter(h)),E.setRng(l),g.undoManager.add(),n}}),s({\"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull\":function(a){var b=\"align\"+a.substring(7),c=E.isCollapsed()?[D.getParent(E.getNode(),D.isBlock)]:E.getSelectedBlocks(),d=j(c,function(a){return!!F.matchNode(a,b)});return k(d,n)!==-1},\"Bold,Italic,Underline,Strikethrough,Superscript,Subscript\":function(a){return z(a)},mceBlockQuote:function(){return z(\"blockquote\")},Outdent:function(){var a;if(I.inline_styles){if((a=D.getParent(E.getStart(),D.isBlock))&&parseInt(a.style.paddingLeft,10)>0)return n;if((a=D.getParent(E.getEnd(),D.isBlock))&&parseInt(a.style.paddingLeft,10)>0)return n}return q(\"InsertUnorderedList\")||q(\"InsertOrderedList\")||!I.inline_styles&&!!D.getParent(E.getNode(),\"BLOCKQUOTE\")},\"InsertUnorderedList,InsertOrderedList\":function(a){var b=D.getParent(E.getNode(),\"ul,ol\");return b&&(\"insertunorderedlist\"===a&&\"UL\"===b.tagName||\"insertorderedlist\"===a&&\"OL\"===b.tagName)}},\"state\"),s({\"FontSize,FontName\":function(a){var b,c=0;return(b=D.getParent(E.getNode(),\"span\"))&&(c=\"fontsize\"==a?b.style.fontSize:b.style.fontFamily.replace(/, /g,\",\").replace(/[\\'\\\"]/g,\"\").toLowerCase()),c}},\"value\"),s({Undo:function(){g.undoManager.undo()},Redo:function(){g.undoManager.redo()}})}}),g(\"w\",[\"22\",\"9\"],function(a,b){function c(b,g){var h,i,j=this;if(b=e(b),g=j.settings=g||{},h=g.base_uri,/^([\\w\\-]+):([^\\/]{2})/i.test(b)||/^\\s*#/.test(b))return void(j.source=b);var k=0===b.indexOf(\"//\");0!==b.indexOf(\"/\")||k||(b=(h?h.protocol||\"http\":\"http\")+\"://mce_host\"+b),/^[\\w\\-]*:?\\/\\//.test(b)||(i=g.base_uri?g.base_uri.path:new c(a.location.href).directory,\"\"===g.base_uri.protocol?b=\"//mce_host\"+j.toAbsPath(i,b):(b=/([^#?]*)([#?]?.*)/.exec(b),b=(h&&h.protocol||\"http\")+\"://mce_host\"+j.toAbsPath(i,b[1])+b[2])),b=b.replace(/@@/g,\"(mce_at)\"),b=/^(?:(?![^:@]+:[^:@\\/]*@)([^:\\/?#.]+):)?(?:\\/\\/)?((?:(([^:@\\/]*):?([^:@\\/]*))?@)?([^:\\/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#\\/]*\\.[^?#\\/.]+(?:[?#]|$)))*\\/?)?([^?#\\/]*))(?:\\?([^#]*))?(?:#(.*))?)/.exec(b),d(f,function(a,c){var d=b[c];d&&(d=d.replace(/\\(mce_at\\)/g,\"@@\")),j[a]=d}),h&&(j.protocol||(j.protocol=h.protocol),j.userInfo||(j.userInfo=h.userInfo),j.port||\"mce_host\"!==j.host||(j.port=h.port),j.host&&\"mce_host\"!==j.host||(j.host=h.host),j.source=\"\"),k&&(j.protocol=\"\")}var d=b.each,e=b.trim,f=\"source protocol authority userInfo user password host port relative path directory file query anchor\".split(\" \"),g={ftp:21,http:80,https:443,mailto:25};return c.prototype={setPath:function(a){var b=this;a=/^(.*?)\\/?(\\w+)?$/.exec(a),b.path=a[0],b.directory=a[1],b.file=a[2],b.source=\"\",b.getURI()},toRelative:function(a){var b,d=this;if(\"./\"===a)return a;if(a=new c(a,{base_uri:d}),\"mce_host\"!=a.host&&d.host!=a.host&&a.host||d.port!=a.port||d.protocol!=a.protocol&&\"\"!==a.protocol)return a.getURI();var e=d.getURI(),f=a.getURI();return e==f||\"/\"==e.charAt(e.length-1)&&e.substr(0,e.length-1)==f?e:(b=d.toRelPath(d.path,a.path),a.query&&(b+=\"?\"+a.query),a.anchor&&(b+=\"#\"+a.anchor),b)},toAbsolute:function(a,b){return a=new c(a,{base_uri:this}),a.getURI(b&&this.isSameOrigin(a))},isSameOrigin:function(a){if(this.host==a.host&&this.protocol==a.protocol){if(this.port==a.port)return!0;var b=g[this.protocol];if(b&&(this.port||b)==(a.port||b))return!0}return!1},toRelPath:function(a,b){var c,d,e,f=0,g=\"\";if(a=a.substring(0,a.lastIndexOf(\"/\")),a=a.split(\"/\"),c=b.split(\"/\"),a.length>=c.length)for(d=0,e=a.length;d<e;d++)if(d>=c.length||a[d]!=c[d]){f=d+1;break}if(a.length<c.length)for(d=0,e=c.length;d<e;d++)if(d>=a.length||a[d]!=c[d]){f=d+1;break}if(1===f)return b;for(d=0,e=a.length-(f-1);d<e;d++)g+=\"../\";for(d=f-1,e=c.length;d<e;d++)g+=d!=f-1?\"/\"+c[d]:c[d];return g},toAbsPath:function(a,b){var c,e,f,g=0,h=[];for(e=/\\/$/.test(b)?\"/\":\"\",a=a.split(\"/\"),b=b.split(\"/\"),\nd(a,function(a){a&&h.push(a)}),a=h,c=b.length-1,h=[];c>=0;c--)0!==b[c].length&&\".\"!==b[c]&&(\"..\"!==b[c]?g>0?g--:h.push(b[c]):g++);return c=a.length-g,f=c<=0?h.reverse().join(\"/\"):a.slice(0,c).join(\"/\")+\"/\"+h.reverse().join(\"/\"),0!==f.indexOf(\"/\")&&(f=\"/\"+f),e&&f.lastIndexOf(\"/\")!==f.length-1&&(f+=e),f},getURI:function(a){var b,c=this;return c.source&&!a||(b=\"\",a||(b+=c.protocol?c.protocol+\"://\":\"//\",c.userInfo&&(b+=c.userInfo+\"@\"),c.host&&(b+=c.host),c.port&&(b+=\":\"+c.port)),c.path&&(b+=c.path),c.query&&(b+=\"?\"+c.query),c.anchor&&(b+=\"#\"+c.anchor),c.source=b),c.source}},c.parseDataUri=function(a){var b,c;return a=decodeURIComponent(a).split(\",\"),c=/data:([^;]+)/.exec(a[0]),c&&(b=c[1]),{type:b,data:a[1]}},c.getDocumentBaseUrl=function(a){var b;return b=0!==a.protocol.indexOf(\"http\")&&\"file:\"!==a.protocol?a.href:a.protocol+\"//\"+a.host+a.pathname,/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(b)&&(b=b.replace(/[\\?#].*$/,\"\").replace(/[\\/\\\\][^\\/]+$/,\"\"),/[\\/\\\\]$/.test(b)||(b+=\"/\")),b},c}),g(\"x\",[\"9\"],function(a){function b(){}var c,d,e=a.each,f=a.extend;return b.extend=c=function(a){function b(){var a,b,c,e=this;if(!d&&(e.init&&e.init.apply(e,arguments),b=e.Mixins))for(a=b.length;a--;)c=b[a],c.init&&c.init.apply(e,arguments)}function g(){return this}function h(a,b){return function(){var c,d=this,e=d._super;return d._super=m[a],c=b.apply(d,arguments),d._super=e,c}}var i,j,k,l=this,m=l.prototype;d=!0,i=new l,d=!1,a.Mixins&&(e(a.Mixins,function(b){for(var c in b)\"init\"!==c&&(a[c]=b[c])}),m.Mixins&&(a.Mixins=m.Mixins.concat(a.Mixins))),a.Methods&&e(a.Methods.split(\",\"),function(b){a[b]=g}),a.Properties&&e(a.Properties.split(\",\"),function(b){var c=\"_\"+b;a[b]=function(a){var b,d=this;return a!==b?(d[c]=a,d):d[c]}}),a.Statics&&e(a.Statics,function(a,c){b[c]=a}),a.Defaults&&m.Defaults&&(a.Defaults=f({},m.Defaults,a.Defaults));for(j in a)k=a[j],\"function\"==typeof k&&m[j]?i[j]=h(j,k):i[j]=k;return b.prototype=i,b.constructor=b,b.extend=c,b},b}),g(\"y\",[\"9\"],function(a){function b(b){function c(){return!1}function d(){return!0}function e(a,e){var f,h,i,k;if(a=a.toLowerCase(),e=e||{},e.type=a,e.target||(e.target=j),e.preventDefault||(e.preventDefault=function(){e.isDefaultPrevented=d},e.stopPropagation=function(){e.isPropagationStopped=d},e.stopImmediatePropagation=function(){e.isImmediatePropagationStopped=d},e.isDefaultPrevented=c,e.isPropagationStopped=c,e.isImmediatePropagationStopped=c),b.beforeFire&&b.beforeFire(e),f=m[a])for(h=0,i=f.length;h<i;h++){if(k=f[h],k.once&&g(a,k.func),e.isImmediatePropagationStopped())return e.stopPropagation(),e;if(k.func.call(j,e)===!1)return e.preventDefault(),e}return e}function f(b,d,e,f){var g,h,i;if(d===!1&&(d=c),d)for(d={func:d},f&&a.extend(d,f),h=b.toLowerCase().split(\" \"),i=h.length;i--;)b=h[i],g=m[b],g||(g=m[b]=[],k(b,!0)),e?g.unshift(d):g.push(d);return l}function g(a,b){var c,d,e,f,g;if(a)for(f=a.toLowerCase().split(\" \"),c=f.length;c--;){if(a=f[c],d=m[a],!a){for(e in m)k(e,!1),delete m[e];return l}if(d){if(b)for(g=d.length;g--;)d[g].func===b&&(d=d.slice(0,g).concat(d.slice(g+1)),m[a]=d);else d.length=0;d.length||(k(a,!1),delete m[a])}}else{for(a in m)k(a,!1);m={}}return l}function h(a,b,c){return f(a,b,c,{once:!0})}function i(a){return a=a.toLowerCase(),!(!m[a]||0===m[a].length)}var j,k,l=this,m={};b=b||{},j=b.scope||l,k=b.toggleEvent||c,l.fire=e,l.on=f,l.off=g,l.once=h,l.has=i}var c=a.makeMap(\"focus blur focusin focusout click dblclick mousedown mouseup mousemove mouseover beforepaste paste cut copy selectionchange mouseout mouseenter mouseleave wheel keydown keypress keyup input contextmenu dragstart dragend dragover draggesture dragdrop drop drag submit compositionstart compositionend compositionupdate touchstart touchmove touchend\",\" \");return b.isNative=function(a){return!!c[a.toLowerCase()]},b}),g(\"z\",[\"y\"],function(a){function b(b){return b._eventDispatcher||(b._eventDispatcher=new a({scope:b,toggleEvent:function(c,d){a.isNative(c)&&b.toggleNativeEvent&&b.toggleNativeEvent(c,d)}})),b._eventDispatcher}return{fire:function(a,c,d){var e=this;if(e.removed&&\"remove\"!==a)return c;if(c=b(e).fire(a,c,d),d!==!1&&e.parent)for(var f=e.parent();f&&!c.isPropagationStopped();)f.fire(a,c,!1),f=f.parent();return c},on:function(a,c,d){return b(this).on(a,c,d)},off:function(a,c){return b(this).off(a,c)},once:function(a,c){return b(this).once(a,c)},hasEventListeners:function(a){return b(this).has(a)}}}),g(\"5q\",[],function(){function a(a){this.create=a.create}return a.create=function(b,c){return new a({create:function(a,d){function e(b){a.set(d,b.value)}function f(a){b.set(c,a.value)}var g;return a.on(\"change:\"+d,f),b.on(\"change:\"+c,e),g=a._bindings,g||(g=a._bindings=[],a.on(\"destroy\",function(){for(var a=g.length;a--;)g[a]()})),g.push(function(){b.off(\"change:\"+c,e)}),b.get(c)}})},a}),g(\"4p\",[\"5q\",\"x\",\"z\",\"9\"],function(a,b,c,d){function e(a){return a.nodeType>0}function f(a,b){var c,g;if(a===b)return!0;if(null===a||null===b)return a===b;if(\"object\"!=typeof a||\"object\"!=typeof b)return a===b;if(d.isArray(b)){if(a.length!==b.length)return!1;for(c=a.length;c--;)if(!f(a[c],b[c]))return!1}if(e(a)||e(b))return a===b;g={};for(c in b){if(!f(a[c],b[c]))return!1;g[c]=!0}for(c in a)if(!g[c]&&!f(a[c],b[c]))return!1;return!0}return b.extend({Mixins:[c],init:function(b){var c,d;b=b||{};for(c in b)d=b[c],d instanceof a&&(b[c]=d.create(this,c));this.data=b},set:function(b,c){var d,e,g=this.data[b];if(c instanceof a&&(c=c.create(this,b)),\"object\"==typeof b){for(d in b)this.set(d,b[d]);return this}return f(g,c)||(this.data[b]=c,e={target:this,name:b,value:c,oldValue:g},this.fire(\"change:\"+b,e),this.fire(\"change\",e)),this},get:function(a){return this.data[a]},has:function(a){return a in this.data},bind:function(b){return a.create(this,b)},destroy:function(){this.fire(\"destroy\")}})}),g(\"2d\",[\"x\"],function(a){\"use strict\";function b(a){for(var b,c=[],d=a.length;d--;)b=a[d],b.__checked||(c.push(b),b.__checked=1);for(d=c.length;d--;)delete c[d].__checked;return c}var c,d=/^([\\w\\\\*]+)?(?:#([\\w\\-\\\\]+))?(?:\\.([\\w\\\\\\.]+))?(?:\\[\\@?([\\w\\\\]+)([\\^\\$\\*!~]?=)([\\w\\\\]+)\\])?(?:\\:(.+))?/i,e=/((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\\[\\]]*\\]|['\"][^'\"]*['\"]|[^\\[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g,f=/^\\s*|\\s*$/g,g=a.extend({init:function(a){function b(a){if(a)return a=a.toLowerCase(),function(b){return\"*\"===a||b.type===a}}function c(a){if(a)return function(b){return b._name===a}}function g(a){if(a)return a=a.split(\".\"),function(b){for(var c=a.length;c--;)if(!b.classes.contains(a[c]))return!1;return!0}}function h(a,b,c){if(a)return function(d){var e=d[a]?d[a]():\"\";return b?\"=\"===b?e===c:\"*=\"===b?e.indexOf(c)>=0:\"~=\"===b?(\" \"+e+\" \").indexOf(\" \"+c+\" \")>=0:\"!=\"===b?e!=c:\"^=\"===b?0===e.indexOf(c):\"$=\"===b&&e.substr(e.length-c.length)===c:!!c}}function i(a){var b;if(a)return a=/(?:not\\((.+)\\))|(.+)/i.exec(a),a[1]?(b=k(a[1],[]),function(a){return!l(a,b)}):(a=a[2],function(b,c,d){return\"first\"===a?0===c:\"last\"===a?c===d-1:\"even\"===a?c%2===0:\"odd\"===a?c%2===1:!!b[a]&&b[a]()})}function j(a,e,j){function k(a){a&&e.push(a)}var l;return l=d.exec(a.replace(f,\"\")),k(b(l[1])),k(c(l[2])),k(g(l[3])),k(h(l[4],l[5],l[6])),k(i(l[7])),e.pseudo=!!l[7],e.direct=j,e}function k(a,b){var c,d,f,g=[];do if(e.exec(\"\"),d=e.exec(a),d&&(a=d[3],g.push(d[1]),d[2])){c=d[3];break}while(d);for(c&&k(c,b),a=[],f=0;f<g.length;f++)\">\"!=g[f]&&a.push(j(g[f],[],\">\"===g[f-1]));return b.push(a),b}var l=this.match;this._selectors=k(a,[])},match:function(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;for(b=b||this._selectors,c=0,d=b.length;c<d;c++){for(g=b[c],f=g.length,o=a,n=0,e=f-1;e>=0;e--)for(j=g[e];o;){if(j.pseudo)for(m=o.parent().items(),k=l=m.length;k--&&m[k]!==o;);for(h=0,i=j.length;h<i;h++)if(!j[h](o,k,l)){h=i+1;break}if(h===i){n++;break}if(e===f-1)break;o=o.parent()}if(n===f)return!0}return!1},find:function(a){function d(a,b,c){var e,f,g,i,j,k=b[c];for(e=0,f=a.length;e<f;e++){for(j=a[e],g=0,i=k.length;g<i;g++)if(!k[g](j,e,f)){g=i+1;break}if(g===i)c==b.length-1?h.push(j):j.items&&d(j.items(),b,c+1);else if(k.direct)return;j.items&&d(j.items(),b,c)}}var e,f,h=[],i=this._selectors;if(a.items){for(e=0,f=i.length;e<f;e++)d(a.items(),i[e],0);f>1&&(h=b(h))}return c||(c=g.Collection),new c(h)}});return g}),g(\"2e\",[\"9\",\"2d\",\"x\"],function(a,b,c){\"use strict\";var d,e,f=Array.prototype.push,g=Array.prototype.slice;return e={length:0,init:function(a){a&&this.add(a)},add:function(b){var c=this;return a.isArray(b)?f.apply(c,b):b instanceof d?c.add(b.toArray()):f.call(c,b),c},set:function(a){var b,c=this,d=c.length;for(c.length=0,c.add(a),b=c.length;b<d;b++)delete c[b];return c},filter:function(a){var c,e,f,g,h=this,i=[];for(\"string\"==typeof a?(a=new b(a),g=function(b){return a.match(b)}):g=a,c=0,e=h.length;c<e;c++)f=h[c],g(f)&&i.push(f);return new d(i)},slice:function(){return new d(g.apply(this,arguments))},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},each:function(b){return a.each(this,b),this},toArray:function(){return a.toArray(this)},indexOf:function(a){for(var b=this,c=b.length;c--&&b[c]!==a;);return c},reverse:function(){return new d(a.toArray(this).reverse())},hasClass:function(a){return!!this[0]&&this[0].classes.contains(a)},prop:function(a,b){var c,d,e=this;return b!==c?(e.each(function(c){c[a]&&c[a](b)}),e):(d=e[0],d&&d[a]?d[a]():void 0)},exec:function(b){var c=this,d=a.toArray(arguments).slice(1);return c.each(function(a){a[b]&&a[b].apply(a,d)}),c},remove:function(){for(var a=this.length;a--;)this[a].remove();return this},addClass:function(a){return this.each(function(b){b.classes.add(a)})},removeClass:function(a){return this.each(function(b){b.classes.remove(a)})}},a.each(\"fire on off show hide append prepend before after reflow\".split(\" \"),function(b){e[b]=function(){var c=a.toArray(arguments);return this.each(function(a){b in a&&a[b].apply(a,c)}),this}}),a.each(\"text name disabled active selected checked visible parent value data\".split(\" \"),function(a){e[a]=function(b){return this.prop(a,b)}}),d=c.extend(e),b.Collection=d,d}),g(\"4q\",[\"6\",\"9\",\"e\"],function(a,b,c){\"use strict\";var d=0,e={id:function(){return\"mceu_\"+d++},create:function(a,d,e){var f=document.createElement(a);return c.DOM.setAttribs(f,d),\"string\"==typeof e?f.innerHTML=e:b.each(e,function(a){a.nodeType&&f.appendChild(a)}),f},createFragment:function(a){return c.DOM.createFragment(a)},getWindowSize:function(){return c.DOM.getViewPort()},getSize:function(a){var b,c;if(a.getBoundingClientRect){var d=a.getBoundingClientRect();b=Math.max(d.width||d.right-d.left,a.offsetWidth),c=Math.max(d.height||d.bottom-d.bottom,a.offsetHeight)}else b=a.offsetWidth,c=a.offsetHeight;return{width:b,height:c}},getPos:function(a,b){return c.DOM.getPos(a,b||e.getContainer())},getContainer:function(){return a.container?a.container:document.body},getViewPort:function(a){return c.DOM.getViewPort(a)},get:function(a){return document.getElementById(a)},addClass:function(a,b){return c.DOM.addClass(a,b)},removeClass:function(a,b){return c.DOM.removeClass(a,b)},hasClass:function(a,b){return c.DOM.hasClass(a,b)},toggleClass:function(a,b,d){return c.DOM.toggleClass(a,b,d)},css:function(a,b,d){return c.DOM.setStyle(a,b,d)},getRuntimeStyle:function(a,b){return c.DOM.getStyle(a,b,!0)},on:function(a,b,d,e){return c.DOM.bind(a,b,d,e)},off:function(a,b,d){return c.DOM.unbind(a,b,d)},fire:function(a,b,d){return c.DOM.fire(a,b,d)},innerHtml:function(a,b){c.DOM.setHTML(a,b)}};return e}),g(\"4r\",[],function(){\"use strict\";return{parseBox:function(a){var b,c=10;if(a)return\"number\"==typeof a?(a=a||0,{top:a,left:a,bottom:a,right:a}):(a=a.split(\" \"),b=a.length,1===b?a[1]=a[2]=a[3]=a[0]:2===b?(a[2]=a[0],a[3]=a[1]):3===b&&(a[3]=a[1]),{top:parseInt(a[0],c)||0,right:parseInt(a[1],c)||0,bottom:parseInt(a[2],c)||0,left:parseInt(a[3],c)||0})},measureBox:function(a,b){function c(b){var c=document.defaultView;return c?(b=b.replace(/[A-Z]/g,function(a){return\"-\"+a}),c.getComputedStyle(a,null).getPropertyValue(b)):a.currentStyle[b]}function d(a){var b=parseFloat(c(a),10);return isNaN(b)?0:b}return{top:d(b+\"TopWidth\"),right:d(b+\"RightWidth\"),bottom:d(b+\"BottomWidth\"),left:d(b+\"LeftWidth\")}}}}),g(\"4s\",[\"9\"],function(a){\"use strict\";function b(){}function c(a){this.cls=[],this.cls._map={},this.onchange=a||b,this.prefix=\"\"}return a.extend(c.prototype,{add:function(a){return a&&!this.contains(a)&&(this.cls._map[a]=!0,this.cls.push(a),this._change()),this},remove:function(a){if(this.contains(a)){for(var b=0;b<this.cls.length&&this.cls[b]!==a;b++);this.cls.splice(b,1),delete this.cls._map[a],this._change()}return this},toggle:function(a,b){var c=this.contains(a);return c!==b&&(c?this.remove(a):this.add(a),this._change()),this},contains:function(a){return!!this.cls._map[a]},_change:function(){delete this.clsValue,this.onchange.call(this)}}),c.prototype.toString=function(){var a;if(this.clsValue)return this.clsValue;a=\"\";for(var b=0;b<this.cls.length;b++)b>0&&(a+=\" \"),a+=this.prefix+this.cls[b];return a},c}),g(\"2f\",[\"5\"],function(a){var b,c={};return{add:function(d){var e=d.parent();if(e){if(!e._layout||e._layout.isNative())return;c[e._id]||(c[e._id]=e),b||(b=!0,a.requestAnimationFrame(function(){var a,d;b=!1;for(a in c)d=c[a],d.state.get(\"rendered\")&&d.reflow();c={}},document.body))}},remove:function(a){c[a._id]&&delete c[a._id]}}}),g(\"2g\",[\"x\",\"9\",\"y\",\"4p\",\"2e\",\"4q\",\"a\",\"4r\",\"4s\",\"2f\"],function(a,b,c,d,e,f,g,h,i,j){\"use strict\";function k(a){return a._eventDispatcher||(a._eventDispatcher=new c({scope:a,toggleEvent:function(b,d){d&&c.isNative(b)&&(a._nativeEvents||(a._nativeEvents={}),a._nativeEvents[b]=!0,a.state.get(\"rendered\")&&l(a))}})),a._eventDispatcher}function l(a){function b(b){var c=a.getParentCtrl(b.target);c&&c.fire(b.type,b)}function c(){var a=j._lastHoverCtrl;a&&(a.fire(\"mouseleave\",{target:a.getEl()}),a.parents().each(function(a){a.fire(\"mouseleave\",{target:a.getEl()})}),j._lastHoverCtrl=null)}function d(b){var c,d,e,f=a.getParentCtrl(b.target),g=j._lastHoverCtrl,h=0;if(f!==g){if(j._lastHoverCtrl=f,d=f.parents().toArray().reverse(),d.push(f),g){for(e=g.parents().toArray().reverse(),e.push(g),h=0;h<e.length&&d[h]===e[h];h++);for(c=e.length-1;c>=h;c--)g=e[c],g.fire(\"mouseleave\",{target:g.getEl()})}for(c=h;c<d.length;c++)f=d[c],f.fire(\"mouseenter\",{target:f.getEl()})}}function e(b){b.preventDefault(),\"mousewheel\"==b.type?(b.deltaY=-.025*b.wheelDelta,b.wheelDeltaX&&(b.deltaX=-.025*b.wheelDeltaX)):(b.deltaX=0,b.deltaY=b.detail),b=a.fire(\"wheel\",b)}var f,h,i,j,k,l;if(k=a._nativeEvents){for(i=a.parents().toArray(),i.unshift(a),f=0,h=i.length;!j&&f<h;f++)j=i[f]._eventsRoot;for(j||(j=i[i.length-1]||a),a._eventsRoot=j,h=f,f=0;f<h;f++)i[f]._eventsRoot=j;var m=j._delegates;m||(m=j._delegates={});for(l in k){if(!k)return!1;\"wheel\"!==l||o?(\"mouseenter\"===l||\"mouseleave\"===l?j._hasMouseEnter||(g(j.getEl()).on(\"mouseleave\",c).on(\"mouseover\",d),j._hasMouseEnter=1):m[l]||(g(j.getEl()).on(l,b),m[l]=!0),k[l]=!1):n?g(a.getEl()).on(\"mousewheel\",e):g(a.getEl()).on(\"DOMMouseScroll\",e)}}}var m,n=\"onmousewheel\"in document,o=!1,p=\"mce-\",q=0,r={Statics:{classPrefix:p},isRtl:function(){return m.rtl},classPrefix:p,init:function(a){function c(a){var b;for(a=a.split(\" \"),b=0;b<a.length;b++)j.classes.add(a[b])}var e,f,j=this;j.settings=a=b.extend({},j.Defaults,a),j._id=a.id||\"mceu_\"+q++,j._aria={role:a.role},j._elmCache={},j.$=g,j.state=new d({visible:!0,active:!1,disabled:!1,value:\"\"}),j.data=new d(a.data),j.classes=new i(function(){j.state.get(\"rendered\")&&(j.getEl().className=this.toString())}),j.classes.prefix=j.classPrefix,e=a.classes,e&&(j.Defaults&&(f=j.Defaults.classes,f&&e!=f&&c(f)),c(e)),b.each(\"title text name visible disabled active value\".split(\" \"),function(b){b in a&&j[b](a[b])}),j.on(\"click\",function(){if(j.disabled())return!1}),j.settings=a,j.borderBox=h.parseBox(a.border),j.paddingBox=h.parseBox(a.padding),j.marginBox=h.parseBox(a.margin),a.hidden&&j.hide()},Properties:\"parent,name\",getContainerElm:function(){return f.getContainer()},getParentCtrl:function(a){for(var b,c=this.getRoot().controlIdLookup;a&&c&&!(b=c[a.id]);)a=a.parentNode;return b},initLayoutRect:function(){var a,b,c,d,e,g,i,j,k,l,m=this,n=m.settings,o=m.getEl();a=m.borderBox=m.borderBox||h.measureBox(o,\"border\"),m.paddingBox=m.paddingBox||h.measureBox(o,\"padding\"),m.marginBox=m.marginBox||h.measureBox(o,\"margin\"),l=f.getSize(o),j=n.minWidth,k=n.minHeight,e=j||l.width,g=k||l.height,c=n.width,d=n.height,i=n.autoResize,i=\"undefined\"!=typeof i?i:!c&&!d,c=c||e,d=d||g;var p=a.left+a.right,q=a.top+a.bottom,r=n.maxWidth||65535,s=n.maxHeight||65535;return m._layoutRect=b={x:n.x||0,y:n.y||0,w:c,h:d,deltaW:p,deltaH:q,contentW:c-p,contentH:d-q,innerW:c-p,innerH:d-q,startMinWidth:j||0,startMinHeight:k||0,minW:Math.min(e,r),minH:Math.min(g,s),maxW:r,maxH:s,autoResize:i,scrollW:0},m._lastLayoutRect={},b},layoutRect:function(a){var b,c,d,e,f,g,h=this,i=h._layoutRect;return i||(i=h.initLayoutRect()),a?(d=i.deltaW,e=i.deltaH,a.x!==f&&(i.x=a.x),a.y!==f&&(i.y=a.y),a.minW!==f&&(i.minW=a.minW),a.minH!==f&&(i.minH=a.minH),c=a.w,c!==f&&(c=c<i.minW?i.minW:c,c=c>i.maxW?i.maxW:c,i.w=c,i.innerW=c-d),c=a.h,c!==f&&(c=c<i.minH?i.minH:c,c=c>i.maxH?i.maxH:c,i.h=c,i.innerH=c-e),c=a.innerW,c!==f&&(c=c<i.minW-d?i.minW-d:c,c=c>i.maxW-d?i.maxW-d:c,i.innerW=c,i.w=c+d),c=a.innerH,c!==f&&(c=c<i.minH-e?i.minH-e:c,c=c>i.maxH-e?i.maxH-e:c,i.innerH=c,i.h=c+e),a.contentW!==f&&(i.contentW=a.contentW),a.contentH!==f&&(i.contentH=a.contentH),b=h._lastLayoutRect,b.x===i.x&&b.y===i.y&&b.w===i.w&&b.h===i.h||(g=m.repaintControls,g&&g.map&&!g.map[h._id]&&(g.push(h),g.map[h._id]=!0),b.x=i.x,b.y=i.y,b.w=i.w,b.h=i.h),h):i},repaint:function(){var a,b,c,d,e,f,g,h,i,j,k=this;i=document.createRange?function(a){return a}:Math.round,a=k.getEl().style,d=k._layoutRect,h=k._lastRepaintRect||{},e=k.borderBox,f=e.left+e.right,g=e.top+e.bottom,d.x!==h.x&&(a.left=i(d.x)+\"px\",h.x=d.x),d.y!==h.y&&(a.top=i(d.y)+\"px\",h.y=d.y),d.w!==h.w&&(j=i(d.w-f),a.width=(j>=0?j:0)+\"px\",h.w=d.w),d.h!==h.h&&(j=i(d.h-g),a.height=(j>=0?j:0)+\"px\",h.h=d.h),k._hasBody&&d.innerW!==h.innerW&&(j=i(d.innerW),c=k.getEl(\"body\"),c&&(b=c.style,b.width=(j>=0?j:0)+\"px\"),h.innerW=d.innerW),k._hasBody&&d.innerH!==h.innerH&&(j=i(d.innerH),c=c||k.getEl(\"body\"),c&&(b=b||c.style,b.height=(j>=0?j:0)+\"px\"),h.innerH=d.innerH),k._lastRepaintRect=h,k.fire(\"repaint\",{},!1)},updateLayoutRect:function(){var a=this;a.parent()._lastRect=null,f.css(a.getEl(),{width:\"\",height:\"\"}),a._layoutRect=a._lastRepaintRect=a._lastLayoutRect=null,a.initLayoutRect()},on:function(a,b){function c(a){var b,c;return\"string\"!=typeof a?a:function(e){return b||d.parentsAndSelf().each(function(d){var e=d.settings.callbacks;if(e&&(b=e[a]))return c=d,!1}),b?b.call(c,e):(e.action=a,void this.fire(\"execute\",e))}}var d=this;return k(d).on(a,c(b)),d},off:function(a,b){return k(this).off(a,b),this},fire:function(a,b,c){var d=this;if(b=b||{},b.control||(b.control=d),b=k(d).fire(a,b),c!==!1&&d.parent)for(var e=d.parent();e&&!b.isPropagationStopped();)e.fire(a,b,!1),e=e.parent();return b},hasEventListeners:function(a){return k(this).has(a)},parents:function(a){var b,c=this,d=new e;for(b=c.parent();b;b=b.parent())d.add(b);return a&&(d=d.filter(a)),d},parentsAndSelf:function(a){return new e(this).add(this.parents(a))},next:function(){var a=this.parent().items();return a[a.indexOf(this)+1]},prev:function(){var a=this.parent().items();return a[a.indexOf(this)-1]},innerHtml:function(a){return this.$el.html(a),this},getEl:function(a){var b=a?this._id+\"-\"+a:this._id;return this._elmCache[b]||(this._elmCache[b]=g(\"#\"+b)[0]),this._elmCache[b]},show:function(){return this.visible(!0)},hide:function(){return this.visible(!1)},focus:function(){try{this.getEl().focus()}catch(a){}return this},blur:function(){return this.getEl().blur(),this},aria:function(a,b){var c=this,d=c.getEl(c.ariaTarget);return\"undefined\"==typeof b?c._aria[a]:(c._aria[a]=b,c.state.get(\"rendered\")&&d.setAttribute(\"role\"==a?a:\"aria-\"+a,b),c)},encode:function(a,b){return b!==!1&&(a=this.translate(a)),(a||\"\").replace(/[&<>\"]/g,function(a){return\"&#\"+a.charCodeAt(0)+\";\"})},translate:function(a){return m.translate?m.translate(a):a},before:function(a){var b=this,c=b.parent();return c&&c.insert(a,c.items().indexOf(b),!0),b},after:function(a){var b=this,c=b.parent();return c&&c.insert(a,c.items().indexOf(b)),b},remove:function(){var a,b,c=this,d=c.getEl(),e=c.parent();if(c.items){var f=c.items().toArray();for(b=f.length;b--;)f[b].remove()}e&&e.items&&(a=[],e.items().each(function(b){b!==c&&a.push(b)}),e.items().set(a),e._lastRect=null),c._eventsRoot&&c._eventsRoot==c&&g(d).off();var h=c.getRoot().controlIdLookup;return h&&delete h[c._id],d&&d.parentNode&&d.parentNode.removeChild(d),c.state.set(\"rendered\",!1),c.state.destroy(),c.fire(\"remove\"),c},renderBefore:function(a){return g(a).before(this.renderHtml()),this.postRender(),this},renderTo:function(a){return g(a||this.getContainerElm()).append(this.renderHtml()),this.postRender(),this},preRender:function(){},render:function(){},renderHtml:function(){return'<div id=\"'+this._id+'\" class=\"'+this.classes+'\"></div>'},postRender:function(){var a,b,c,d,e,f=this,h=f.settings;f.$el=g(f.getEl()),f.state.set(\"rendered\",!0);for(d in h)0===d.indexOf(\"on\")&&f.on(d.substr(2),h[d]);if(f._eventsRoot){for(c=f.parent();!e&&c;c=c.parent())e=c._eventsRoot;if(e)for(d in e._nativeEvents)f._nativeEvents[d]=!0}l(f),h.style&&(a=f.getEl(),a&&(a.setAttribute(\"style\",h.style),a.style.cssText=h.style)),f.settings.border&&(b=f.borderBox,f.$el.css({\"border-top-width\":b.top,\"border-right-width\":b.right,\"border-bottom-width\":b.bottom,\"border-left-width\":b.left}));var i=f.getRoot();i.controlIdLookup||(i.controlIdLookup={}),i.controlIdLookup[f._id]=f;for(var k in f._aria)f.aria(k,f._aria[k]);f.state.get(\"visible\")===!1&&(f.getEl().style.display=\"none\"),f.bindStates(),f.state.on(\"change:visible\",function(a){var b,c=a.value;f.state.get(\"rendered\")&&(f.getEl().style.display=c===!1?\"none\":\"\",f.getEl().getBoundingClientRect()),b=f.parent(),b&&(b._lastRect=null),f.fire(c?\"show\":\"hide\"),j.add(f)}),f.fire(\"postrender\",{},!1)},bindStates:function(){},scrollIntoView:function(a){function b(a,b){var c,d,e=a;for(c=d=0;e&&e!=b&&e.nodeType;)c+=e.offsetLeft||0,d+=e.offsetTop||0,e=e.offsetParent;return{x:c,y:d}}var c,d,e,f,g,h,i=this.getEl(),j=i.parentNode,k=b(i,j);return c=k.x,d=k.y,e=i.offsetWidth,f=i.offsetHeight,g=j.clientWidth,h=j.clientHeight,\"end\"==a?(c-=g-e,d-=h-f):\"center\"==a&&(c-=g/2-e/2,d-=h/2-f/2),j.scrollLeft=c,j.scrollTop=d,this},getRoot:function(){for(var a,b=this,c=[];b;){if(b.rootControl){a=b.rootControl;break}c.push(b),a=b,b=b.parent()}a||(a=this);for(var d=c.length;d--;)c[d].rootControl=a;return a},reflow:function(){j.remove(this);var a=this.parent();return a&&a._layout&&!a._layout.isNative()&&a.reflow(),this}};return b.each(\"text title visible disabled active value\".split(\" \"),function(a){r[a]=function(b){return 0===arguments.length?this.state.get(a):(\"undefined\"!=typeof b&&this.state.set(a,b),this)}}),m=a.extend(r)}),g(\"2h\",[],function(){\"use strict\";var a={};return{add:function(b,c){a[b.toLowerCase()]=c},has:function(b){return!!a[b.toLowerCase()]},create:function(b,c){var d;if(\"string\"==typeof b?(c=c||{},c.type=b):(c=b,b=c.type),b=b.toLowerCase(),d=a[b],!d)throw new Error(\"Could not find control by type: \"+b);return d=new d(c),d.type=b,d}}}),g(\"2i\",[],function(){\"use strict\";var a=function(a){return!!a.getAttribute(\"data-mce-tabstop\")};return function(b){function c(a){return a&&1===a.nodeType}function d(a){return a=a||u,c(a)?a.getAttribute(\"role\"):null}function e(a){for(var b,c=a||u;c=c.parentNode;)if(b=d(c))return b}function f(a){var b=u;if(c(b))return b.getAttribute(\"aria-\"+a)}function g(a){var b=a.tagName.toUpperCase();return\"INPUT\"==b||\"TEXTAREA\"==b||\"SELECT\"==b}function h(b){return!(!g(b)||b.hidden)||(!!a(b)||!!/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell|slider)$/.test(d(b)))}function i(a){function b(a){if(1==a.nodeType&&\"none\"!=a.style.display&&!a.disabled){h(a)&&c.push(a);for(var d=0;d<a.childNodes.length;d++)b(a.childNodes[d])}}var c=[];return b(a||w.getEl()),c}function j(a){var b,c;a=a||v,c=a.parents().toArray(),c.unshift(a);for(var d=0;d<c.length&&(b=c[d],!b.settings.ariaRoot);d++);return b}function k(a){var b=j(a),c=i(b.getEl());b.settings.ariaRemember&&\"lastAriaIndex\"in b?l(b.lastAriaIndex,c):l(0,c)}function l(a,b){return a<0?a=b.length-1:a>=b.length&&(a=0),b[a]&&b[a].focus(),a}function m(a,b){var c=-1,d=j();b=b||i(d.getEl());for(var e=0;e<b.length;e++)b[e]===u&&(c=e);c+=a,d.lastAriaIndex=l(c,b)}function n(){var a=e();\"tablist\"==a?m(-1,i(u.parentNode)):v.parent().submenu?s():m(-1)}function o(){var a=d(),b=e();\"tablist\"==b?m(1,i(u.parentNode)):\"menuitem\"==a&&\"menu\"==b&&f(\"haspopup\")?t():m(1)}function p(){m(-1)}function q(){var a=d(),b=e();\"menuitem\"==a&&\"menubar\"==b?t():\"button\"==a&&f(\"haspopup\")?t({key:\"down\"}):m(1)}function r(a){var b=e();if(\"tablist\"==b){var c=i(v.getEl(\"body\"))[0];c&&c.focus()}else m(a.shiftKey?-1:1)}function s(){v.fire(\"cancel\")}function t(a){a=a||{},v.fire(\"click\",{target:u,aria:a})}var u,v,w=b.root;try{u=document.activeElement}catch(a){u=document.body}return v=w.getParentCtrl(u),w.on(\"keydown\",function(b){function c(b,c){g(u)||a(u)||\"slider\"!==d(u)&&c(b)!==!1&&b.preventDefault()}if(!b.isDefaultPrevented())switch(b.keyCode){case 37:c(b,n);break;case 39:c(b,o);break;case 38:c(b,p);break;case 40:c(b,q);break;case 27:s();break;case 14:case 13:case 32:c(b,t);break;case 9:r(b)!==!1&&b.preventDefault()}}),w.on(\"focusin\",function(a){u=a.target,v=a.control}),{focusFirst:k}}}),g(\"2j\",[\"2g\",\"2e\",\"2d\",\"2h\",\"2i\",\"9\",\"a\",\"4s\",\"2f\"],function(a,b,c,d,e,f,g,h,i){\"use strict\";var j={};return a.extend({init:function(a){var c=this;c._super(a),a=c.settings,a.fixed&&c.state.set(\"fixed\",!0),c._items=new b,c.isRtl()&&c.classes.add(\"rtl\"),c.bodyClasses=new h(function(){c.state.get(\"rendered\")&&(c.getEl(\"body\").className=this.toString())}),c.bodyClasses.prefix=c.classPrefix,c.classes.add(\"container\"),c.bodyClasses.add(\"container-body\"),a.containerCls&&c.classes.add(a.containerCls),c._layout=d.create((a.layout||\"\")+\"layout\"),c.settings.items?c.add(c.settings.items):c.add(c.render()),c._hasBody=!0},items:function(){return this._items},find:function(a){return a=j[a]=j[a]||new c(a),a.find(this)},add:function(a){var b=this;return b.items().add(b.create(a)).parent(b),b},focus:function(a){var b,c,d,e=this;return a&&(c=e.keyboardNav||e.parents().eq(-1)[0].keyboardNav)?void c.focusFirst(e):(d=e.find(\"*\"),e.statusbar&&d.add(e.statusbar.items()),d.each(function(a){return a.settings.autofocus?(b=null,!1):void(a.canFocus&&(b=b||a))}),b&&b.focus(),e)},replace:function(a,b){for(var c,d=this.items(),e=d.length;e--;)if(d[e]===a){d[e]=b;break}e>=0&&(c=b.getEl(),c&&c.parentNode.removeChild(c),c=a.getEl(),c&&c.parentNode.removeChild(c)),b.parent(this)},create:function(b){var c,e=this,g=[];return f.isArray(b)||(b=[b]),f.each(b,function(b){b&&(b instanceof a||(\"string\"==typeof b&&(b={type:b}),c=f.extend({},e.settings.defaults,b),b.type=c.type=c.type||b.type||e.settings.defaultType||(c.defaults?c.defaults.type:null),b=d.create(c)),g.push(b))}),g},renderNew:function(){var a=this;return a.items().each(function(b,c){var d;b.parent(a),b.state.get(\"rendered\")||(d=a.getEl(\"body\"),d.hasChildNodes()&&c<=d.childNodes.length-1?g(d.childNodes[c]).before(b.renderHtml()):g(d).append(b.renderHtml()),b.postRender(),i.add(b))}),a._layout.applyClasses(a.items().filter(\":visible\")),a._lastRect=null,a},append:function(a){return this.add(a).renderNew()},prepend:function(a){var b=this;return b.items().set(b.create(a).concat(b.items().toArray())),b.renderNew()},insert:function(a,b,c){var d,e,f,g=this;return a=g.create(a),d=g.items(),!c&&b<d.length-1&&(b+=1),b>=0&&b<d.length&&(e=d.slice(0,b).toArray(),f=d.slice(b).toArray(),d.set(e.concat(a,f))),g.renderNew()},fromJSON:function(a){var b=this;for(var c in a)b.find(\"#\"+c).value(a[c]);return b},toJSON:function(){var a=this,b={};return a.find(\"*\").each(function(a){var c=a.name(),d=a.value();c&&\"undefined\"!=typeof d&&(b[c]=d)}),b},renderHtml:function(){var a=this,b=a._layout,c=this.settings.role;return a.preRender(),b.preRender(a),'<div id=\"'+a._id+'\" class=\"'+a.classes+'\"'+(c?' role=\"'+this.settings.role+'\"':\"\")+'><div id=\"'+a._id+'-body\" class=\"'+a.bodyClasses+'\">'+(a.settings.html||\"\")+b.renderHtml(a)+\"</div></div>\"},postRender:function(){var a,b=this;return b.items().exec(\"postRender\"),b._super(),b._layout.postRender(b),b.state.set(\"rendered\",!0),b.settings.style&&b.$el.css(b.settings.style),b.settings.border&&(a=b.borderBox,b.$el.css({\"border-top-width\":a.top,\"border-right-width\":a.right,\"border-bottom-width\":a.bottom,\"border-left-width\":a.left})),b.parent()||(b.keyboardNav=new e({root:b})),b},initLayoutRect:function(){var a=this,b=a._super();return a._layout.recalc(a),b},recalc:function(){var a=this,b=a._layoutRect,c=a._lastRect;if(!c||c.w!=b.w||c.h!=b.h)return a._layout.recalc(a),b=a.layoutRect(),a._lastRect={x:b.x,y:b.y,w:b.w,h:b.h},!0},reflow:function(){var b;if(i.remove(this),this.visible()){for(a.repaintControls=[],a.repaintControls.map={},this.recalc(),b=a.repaintControls.length;b--;)a.repaintControls[b].repaint();\"flow\"!==this.settings.layout&&\"stack\"!==this.settings.layout&&this.repaint(),a.repaintControls=[]}return this}})}),g(\"2k\",[\"a\"],function(a){\"use strict\";function b(a){var b,c,d,e,f,g,h,i,j=Math.max;return b=a.documentElement,c=a.body,d=j(b.scrollWidth,c.scrollWidth),e=j(b.clientWidth,c.clientWidth),f=j(b.offsetWidth,c.offsetWidth),g=j(b.scrollHeight,c.scrollHeight),h=j(b.clientHeight,c.clientHeight),i=j(b.offsetHeight,c.offsetHeight),{width:d<f?e:d,height:g<i?h:g}}function c(a){var b,c;if(a.changedTouches)for(b=\"screenX screenY pageX pageY clientX clientY\".split(\" \"),c=0;c<b.length;c++)a[b[c]]=a.changedTouches[0][b[c]]}return function(d,e){function f(){return n.getElementById(e.handle||d)}var g,h,i,j,k,l,m,n=e.document||document;e=e||{},i=function(d){var i,o,p=b(n);c(d),d.preventDefault(),h=d.button,i=f(),l=d.screenX,m=d.screenY,o=window.getComputedStyle?window.getComputedStyle(i,null).getPropertyValue(\"cursor\"):i.runtimeStyle.cursor,g=a(\"<div></div>\").css({position:\"absolute\",top:0,left:0,width:p.width,height:p.height,zIndex:2147483647,opacity:1e-4,cursor:o}).appendTo(n.body),a(n).on(\"mousemove touchmove\",k).on(\"mouseup touchend\",j),e.start(d)},k=function(a){return c(a),a.button!==h?j(a):(a.deltaX=a.screenX-l,a.deltaY=a.screenY-m,a.preventDefault(),void e.drag(a))},j=function(b){c(b),a(n).off(\"mousemove touchmove\",k).off(\"mouseup touchend\",j),g.remove(),e.stop&&e.stop(b)},this.destroy=function(){a(f()).off()},a(f()).on(\"mousedown touchstart\",i)}}),g(\"2l\",[\"a\",\"2k\"],function(a,b){\"use strict\";return{init:function(){var a=this;a.on(\"repaint\",a.renderScroll)},renderScroll:function(){function c(){function b(b,g,h,i,j,k){var l,m,n,o,p,q,r,s,t;if(m=e.getEl(\"scroll\"+b)){if(s=g.toLowerCase(),t=h.toLowerCase(),a(e.getEl(\"absend\")).css(s,e.layoutRect()[i]-1),!j)return void a(m).css(\"display\",\"none\");a(m).css(\"display\",\"block\"),l=e.getEl(\"body\"),n=e.getEl(\"scroll\"+b+\"t\"),o=l[\"client\"+h]-2*f,o-=c&&d?m[\"client\"+k]:0,p=l[\"scroll\"+h],q=o/p,r={},r[s]=l[\"offset\"+g]+f,r[t]=o,a(m).css(r),r={},r[s]=l[\"scroll\"+g]*q,r[t]=o*q,a(n).css(r)}}var c,d,g;g=e.getEl(\"body\"),c=g.scrollWidth>g.clientWidth,d=g.scrollHeight>g.clientHeight,b(\"h\",\"Left\",\"Width\",\"contentW\",c,\"Height\"),b(\"v\",\"Top\",\"Height\",\"contentH\",d,\"Width\")}function d(){function c(c,d,g,h,i){var j,k=e._id+\"-scroll\"+c,l=e.classPrefix;a(e.getEl()).append('<div id=\"'+k+'\" class=\"'+l+\"scrollbar \"+l+\"scrollbar-\"+c+'\"><div id=\"'+k+'t\" class=\"'+l+'scrollbar-thumb\"></div></div>'),e.draghelper=new b(k+\"t\",{start:function(){j=e.getEl(\"body\")[\"scroll\"+d],a(\"#\"+k).addClass(l+\"active\")},drag:function(a){var b,k,l,m,n=e.layoutRect();k=n.contentW>n.innerW,l=n.contentH>n.innerH,m=e.getEl(\"body\")[\"client\"+g]-2*f,m-=k&&l?e.getEl(\"scroll\"+c)[\"client\"+i]:0,b=m/e.getEl(\"body\")[\"scroll\"+g],e.getEl(\"body\")[\"scroll\"+d]=j+a[\"delta\"+h]/b},stop:function(){a(\"#\"+k).removeClass(l+\"active\")}})}e.classes.add(\"scroll\"),c(\"v\",\"Top\",\"Height\",\"Y\",\"Width\"),c(\"h\",\"Left\",\"Width\",\"X\",\"Height\")}var e=this,f=2;\ne.settings.autoScroll&&(e._hasScroll||(e._hasScroll=!0,d(),e.on(\"wheel\",function(a){var b=e.getEl(\"body\");b.scrollLeft+=10*(a.deltaX||0),b.scrollTop+=10*a.deltaY,c()}),a(e.getEl(\"body\")).on(\"scroll\",c)),c())}}}),g(\"2m\",[\"2j\",\"2l\"],function(a,b){\"use strict\";return a.extend({Defaults:{layout:\"fit\",containerCls:\"panel\"},Mixins:[b],renderHtml:function(){var a=this,b=a._layout,c=a.settings.html;return a.preRender(),b.preRender(a),\"undefined\"==typeof c?c='<div id=\"'+a._id+'-body\" class=\"'+a.bodyClasses+'\">'+b.renderHtml(a)+\"</div>\":(\"function\"==typeof c&&(c=c.call(a)),a._hasBody=!1),'<div id=\"'+a._id+'\" class=\"'+a.classes+'\" hidefocus=\"1\" tabindex=\"-1\" role=\"group\">'+(a._preBodyHtml||\"\")+c+\"</div>\"}})}),g(\"2n\",[\"4q\"],function(a){\"use strict\";function b(b,c,d){var e,f,g,h,i,j,k,l,m,n;return m=a.getViewPort(),f=a.getPos(c),g=f.x,h=f.y,b.state.get(\"fixed\")&&\"static\"==a.getRuntimeStyle(document.body,\"position\")&&(g-=m.x,h-=m.y),e=b.getEl(),n=a.getSize(e),i=n.width,j=n.height,n=a.getSize(c),k=n.width,l=n.height,d=(d||\"\").split(\"\"),\"b\"===d[0]&&(h+=l),\"r\"===d[1]&&(g+=k),\"c\"===d[0]&&(h+=Math.round(l/2)),\"c\"===d[1]&&(g+=Math.round(k/2)),\"b\"===d[3]&&(h-=j),\"r\"===d[4]&&(g-=i),\"c\"===d[3]&&(h-=Math.round(j/2)),\"c\"===d[4]&&(g-=Math.round(i/2)),{x:g,y:h,w:i,h:j}}return{testMoveRel:function(c,d){for(var e=a.getViewPort(),f=0;f<d.length;f++){var g=b(this,c,d[f]);if(this.state.get(\"fixed\")){if(g.x>0&&g.x+g.w<e.w&&g.y>0&&g.y+g.h<e.h)return d[f]}else if(g.x>e.x&&g.x+g.w<e.w+e.x&&g.y>e.y&&g.y+g.h<e.h+e.y)return d[f]}return d[0]},moveRel:function(a,c){\"string\"!=typeof c&&(c=this.testMoveRel(a,c));var d=b(this,a,c);return this.moveTo(d.x,d.y)},moveBy:function(a,b){var c=this,d=c.layoutRect();return c.moveTo(d.x+a,d.y+b),c},moveTo:function(b,c){function d(a,b,c){return a<0?0:a+c>b?(a=b-c,a<0?0:a):a}var e=this;if(e.settings.constrainToViewport){var f=a.getViewPort(window),g=e.layoutRect();b=d(b,f.w+f.x,g.w),c=d(c,f.h+f.y,g.h)}return e.state.get(\"rendered\")?e.layoutRect({x:b,y:c}).repaint():(e.settings.x=b,e.settings.y=c),e.fire(\"move\",{x:b,y:c}),e}}}),g(\"2o\",[\"4q\"],function(a){\"use strict\";return{resizeToContent:function(){this._layoutRect.autoResize=!0,this._lastRect=null,this.reflow()},resizeTo:function(b,c){if(b<=1||c<=1){var d=a.getWindowSize();b=b<=1?b*d.w:b,c=c<=1?c*d.h:c}return this._layoutRect.autoResize=!1,this.layoutRect({minW:b,minH:c,w:b,h:c}).reflow()},resizeBy:function(a,b){var c=this,d=c.layoutRect();return c.resizeTo(d.w+a,d.h+b)}}}),g(\"2p\",[\"2m\",\"2n\",\"2o\",\"4q\",\"a\",\"5\"],function(a,b,c,d,e,f){\"use strict\";function g(a,b){for(;a;){if(a==b)return!0;a=a.parent()}}function h(a){for(var b=s.length;b--;){var c=s[b],d=c.getParentCtrl(a.target);if(c.settings.autohide){if(d&&(g(d,c)||c.parent()===d))continue;a=c.fire(\"autohide\",{target:a.target}),a.isDefaultPrevented()||c.hide()}}}function i(){o||(o=function(a){2!=a.button&&h(a)},e(document).on(\"click touchstart\",o))}function j(){p||(p=function(){var a;for(a=s.length;a--;)l(s[a])},e(window).on(\"scroll\",p))}function k(){if(!q){var a=document.documentElement,b=a.clientWidth,c=a.clientHeight;q=function(){document.all&&b==a.clientWidth&&c==a.clientHeight||(b=a.clientWidth,c=a.clientHeight,u.hideAll())},e(window).on(\"resize\",q)}}function l(a){function b(b,c){for(var d,e=0;e<s.length;e++)if(s[e]!=a)for(d=s[e].parent();d&&(d=d.parent());)d==a&&s[e].fixed(b).moveBy(0,c).repaint()}var c=d.getViewPort().y;a.settings.autofix&&(a.state.get(\"fixed\")?a._autoFixY>c&&(a.fixed(!1).layoutRect({y:a._autoFixY}).repaint(),b(!1,a._autoFixY-c)):(a._autoFixY=a.layoutRect().y,a._autoFixY<c&&(a.fixed(!0).layoutRect({y:0}).repaint(),b(!0,c-a._autoFixY))))}function m(a,b){var c,d,f=u.zIndex||65535;if(a)t.push(b);else for(c=t.length;c--;)t[c]===b&&t.splice(c,1);if(t.length)for(c=0;c<t.length;c++)t[c].modal&&(f++,d=t[c]),t[c].getEl().style.zIndex=f,t[c].zIndex=f,f++;var g=e(\"#\"+b.classPrefix+\"modal-block\",b.getContainerElm())[0];d?e(g).css(\"z-index\",d.zIndex-1):g&&(g.parentNode.removeChild(g),r=!1),u.currentZIndex=f}function n(a){var b;for(b=s.length;b--;)s[b]===a&&s.splice(b,1);for(b=t.length;b--;)t[b]===a&&t.splice(b,1)}var o,p,q,r,s=[],t=[],u=a.extend({Mixins:[b,c],init:function(a){var b=this;b._super(a),b._eventsRoot=b,b.classes.add(\"floatpanel\"),a.autohide&&(i(),k(),s.push(b)),a.autofix&&(j(),b.on(\"move\",function(){l(this)})),b.on(\"postrender show\",function(a){if(a.control==b){var c,d=b.classPrefix;b.modal&&!r&&(c=e(\"#\"+d+\"modal-block\",b.getContainerElm()),c[0]||(c=e('<div id=\"'+d+'modal-block\" class=\"'+d+\"reset \"+d+'fade\"></div>').appendTo(b.getContainerElm())),f.setTimeout(function(){c.addClass(d+\"in\"),e(b.getEl()).addClass(d+\"in\")}),r=!0),m(!0,b)}}),b.on(\"show\",function(){b.parents().each(function(a){if(a.state.get(\"fixed\"))return b.fixed(!0),!1})}),a.popover&&(b._preBodyHtml='<div class=\"'+b.classPrefix+'arrow\"></div>',b.classes.add(\"popover\").add(\"bottom\").add(b.isRtl()?\"end\":\"start\")),b.aria(\"label\",a.ariaLabel),b.aria(\"labelledby\",b._id),b.aria(\"describedby\",b.describedBy||b._id+\"-none\")},fixed:function(a){var b=this;if(b.state.get(\"fixed\")!=a){if(b.state.get(\"rendered\")){var c=d.getViewPort();a?b.layoutRect().y-=c.y:b.layoutRect().y+=c.y}b.classes.toggle(\"fixed\",a),b.state.set(\"fixed\",a)}return b},show:function(){var a,b=this,c=b._super();for(a=s.length;a--&&s[a]!==b;);return a===-1&&s.push(b),c},hide:function(){return n(this),m(!1,this),this._super()},hideAll:function(){u.hideAll()},close:function(){var a=this;return a.fire(\"close\").isDefaultPrevented()||(a.remove(),m(!1,a)),a},remove:function(){n(this),this._super()},postRender:function(){var a=this;return a.settings.bodyRole&&this.getEl(\"body\").setAttribute(\"role\",a.settings.bodyRole),a._super()}});return u.hideAll=function(){for(var a=s.length;a--;){var b=s[a];b&&b.settings.autohide&&(b.hide(),s.splice(a,1))}},u}),g(\"23\",[\"2p\",\"2m\",\"4q\",\"a\",\"2k\",\"4r\",\"6\",\"5\"],function(a,b,c,d,e,f,g,h){\"use strict\";function i(a){var b,c=\"width=device-width,initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0\",e=d(\"meta[name=viewport]\")[0];g.overrideViewPort!==!1&&(e||(e=document.createElement(\"meta\"),e.setAttribute(\"name\",\"viewport\"),document.getElementsByTagName(\"head\")[0].appendChild(e)),b=e.getAttribute(\"content\"),b&&\"undefined\"!=typeof n&&(n=b),e.setAttribute(\"content\",a?c:n))}function j(a,b){k()&&b===!1&&d([document.documentElement,document.body]).removeClass(a+\"fullscreen\")}function k(){for(var a=0;a<m.length;a++)if(m[a]._fullscreen)return!0;return!1}function l(){function a(){var a,b,d=c.getWindowSize();for(a=0;a<m.length;a++)b=m[a].layoutRect(),m[a].moveTo(m[a].settings.x||Math.max(0,d.w/2-b.w/2),m[a].settings.y||Math.max(0,d.h/2-b.h/2))}if(!g.desktop){var b={w:window.innerWidth,h:window.innerHeight};h.setInterval(function(){var a=window.innerWidth,c=window.innerHeight;b.w==a&&b.h==c||(b={w:a,h:c},d(window).trigger(\"resize\"))},100)}d(window).on(\"resize\",a)}var m=[],n=\"\",o=a.extend({modal:!0,Defaults:{border:1,layout:\"flex\",containerCls:\"panel\",role:\"dialog\",callbacks:{submit:function(){this.fire(\"submit\",{data:this.toJSON()})},close:function(){this.close()}}},init:function(a){var d=this;d._super(a),d.isRtl()&&d.classes.add(\"rtl\"),d.classes.add(\"window\"),d.bodyClasses.add(\"window-body\"),d.state.set(\"fixed\",!0),a.buttons&&(d.statusbar=new b({layout:\"flex\",border:\"1 0 0 0\",spacing:3,padding:10,align:\"center\",pack:d.isRtl()?\"start\":\"end\",defaults:{type:\"button\"},items:a.buttons}),d.statusbar.classes.add(\"foot\"),d.statusbar.parent(d)),d.on(\"click\",function(a){var b=d.classPrefix+\"close\";(c.hasClass(a.target,b)||c.hasClass(a.target.parentNode,b))&&d.close()}),d.on(\"cancel\",function(){d.close()}),d.aria(\"describedby\",d.describedBy||d._id+\"-none\"),d.aria(\"label\",a.title),d._fullscreen=!1},recalc:function(){var a,b,d,e,f=this,g=f.statusbar;f._fullscreen&&(f.layoutRect(c.getWindowSize()),f.layoutRect().contentH=f.layoutRect().innerH),f._super(),a=f.layoutRect(),f.settings.title&&!f._fullscreen&&(b=a.headerW,b>a.w&&(d=a.x-Math.max(0,b/2),f.layoutRect({w:b,x:d}),e=!0)),g&&(g.layoutRect({w:f.layoutRect().innerW}).recalc(),b=g.layoutRect().minW+a.deltaW,b>a.w&&(d=a.x-Math.max(0,b-a.w),f.layoutRect({w:b,x:d}),e=!0)),e&&f.recalc()},initLayoutRect:function(){var a,b=this,d=b._super(),e=0;if(b.settings.title&&!b._fullscreen){a=b.getEl(\"head\");var f=c.getSize(a);d.headerW=f.width,d.headerH=f.height,e+=d.headerH}b.statusbar&&(e+=b.statusbar.layoutRect().h),d.deltaH+=e,d.minH+=e,d.h+=e;var g=c.getWindowSize();return d.x=b.settings.x||Math.max(0,g.w/2-d.w/2),d.y=b.settings.y||Math.max(0,g.h/2-d.h/2),d},renderHtml:function(){var a=this,b=a._layout,c=a._id,d=a.classPrefix,e=a.settings,f=\"\",g=\"\",h=e.html;return a.preRender(),b.preRender(a),e.title&&(f='<div id=\"'+c+'-head\" class=\"'+d+'window-head\"><div id=\"'+c+'-title\" class=\"'+d+'title\">'+a.encode(e.title)+'</div><div id=\"'+c+'-dragh\" class=\"'+d+'dragh\"></div><button type=\"button\" class=\"'+d+'close\" aria-hidden=\"true\"><i class=\"mce-ico mce-i-remove\"></i></button></div>'),e.url&&(h='<iframe src=\"'+e.url+'\" tabindex=\"-1\"></iframe>'),\"undefined\"==typeof h&&(h=b.renderHtml(a)),a.statusbar&&(g=a.statusbar.renderHtml()),'<div id=\"'+c+'\" class=\"'+a.classes+'\" hidefocus=\"1\"><div class=\"'+a.classPrefix+'reset\" role=\"application\">'+f+'<div id=\"'+c+'-body\" class=\"'+a.bodyClasses+'\">'+h+\"</div>\"+g+\"</div></div>\"},fullscreen:function(a){var b,e,g=this,i=document.documentElement,j=g.classPrefix;if(a!=g._fullscreen)if(d(window).on(\"resize\",function(){var a;if(g._fullscreen)if(b)g._timer||(g._timer=h.setTimeout(function(){var a=c.getWindowSize();g.moveTo(0,0).resizeTo(a.w,a.h),g._timer=0},50));else{a=(new Date).getTime();var d=c.getWindowSize();g.moveTo(0,0).resizeTo(d.w,d.h),(new Date).getTime()-a>50&&(b=!0)}}),e=g.layoutRect(),g._fullscreen=a,a){g._initial={x:e.x,y:e.y,w:e.w,h:e.h},g.borderBox=f.parseBox(\"0\"),g.getEl(\"head\").style.display=\"none\",e.deltaH-=e.headerH+2,d([i,document.body]).addClass(j+\"fullscreen\"),g.classes.add(\"fullscreen\");var k=c.getWindowSize();g.moveTo(0,0).resizeTo(k.w,k.h)}else g.borderBox=f.parseBox(g.settings.border),g.getEl(\"head\").style.display=\"\",e.deltaH+=e.headerH,d([i,document.body]).removeClass(j+\"fullscreen\"),g.classes.remove(\"fullscreen\"),g.moveTo(g._initial.x,g._initial.y).resizeTo(g._initial.w,g._initial.h);return g.reflow()},postRender:function(){var a,b=this;setTimeout(function(){b.classes.add(\"in\"),b.fire(\"open\")},0),b._super(),b.statusbar&&b.statusbar.postRender(),b.focus(),this.dragHelper=new e(b._id+\"-dragh\",{start:function(){a={x:b.layoutRect().x,y:b.layoutRect().y}},drag:function(c){b.moveTo(a.x+c.deltaX,a.y+c.deltaY)}}),b.on(\"submit\",function(a){a.isDefaultPrevented()||b.close()}),m.push(b),i(!0)},submit:function(){return this.fire(\"submit\",{data:this.toJSON()})},remove:function(){var a,b=this;for(b.dragHelper.destroy(),b._super(),b.statusbar&&this.statusbar.remove(),j(b.classPrefix,!1),a=m.length;a--;)m[a]===b&&m.splice(a,1);i(m.length>0)},getContentWindow:function(){var a=this.getEl().getElementsByTagName(\"iframe\")[0];return a?a.contentWindow:null}});return l(),o}),g(\"24\",[\"23\"],function(a){\"use strict\";var b=a.extend({init:function(a){a={border:1,padding:20,layout:\"flex\",pack:\"center\",align:\"center\",containerCls:\"panel\",autoScroll:!0,buttons:{type:\"button\",text:\"Ok\",action:\"ok\"},items:{type:\"label\",multiline:!0,maxWidth:500,maxHeight:200}},this._super(a)},Statics:{OK:1,OK_CANCEL:2,YES_NO:3,YES_NO_CANCEL:4,msgBox:function(c){function d(a,b,c){return{type:\"button\",text:a,subtype:c?\"primary\":\"\",onClick:function(a){a.control.parents()[1].close(),f(b)}}}var e,f=c.callback||function(){};switch(c.buttons){case b.OK_CANCEL:e=[d(\"Ok\",!0,!0),d(\"Cancel\",!1)];break;case b.YES_NO:case b.YES_NO_CANCEL:e=[d(\"Yes\",1,!0),d(\"No\",0)],c.buttons==b.YES_NO_CANCEL&&e.push(d(\"Cancel\",-1));break;default:e=[d(\"Ok\",!0,!0)]}return new a({padding:20,x:c.x,y:c.y,minWidth:300,minHeight:100,layout:\"flex\",pack:\"center\",align:\"center\",buttons:e,title:c.title,role:\"alertdialog\",items:{type:\"label\",multiline:!0,maxWidth:500,maxHeight:200,text:c.text},onPostRender:function(){this.aria(\"describedby\",this.items()[0]._id)},onClose:c.onClose,onCancel:function(){f(!1)}}).renderTo(document.body).reflow()},alert:function(a,c){return\"string\"==typeof a&&(a={text:a}),a.callback=c,b.msgBox(a)},confirm:function(a,c){return\"string\"==typeof a&&(a={text:a}),a.callback=c,a.buttons=b.OK_CANCEL,b.msgBox(a)}}});return b}),g(\"10\",[\"23\",\"24\"],function(a,b){return function(c){function d(){if(h.length)return h[h.length-1]}function e(a){c.fire(\"OpenWindow\",{win:a})}function f(a){c.fire(\"CloseWindow\",{win:a})}var g=this,h=[];g.windows=h,c.on(\"remove\",function(){for(var a=h.length;a--;)h[a].close()}),g.open=function(b,d){var g;return c.editorManager.setActive(c),b.title=b.title||\" \",b.url=b.url||b.file,b.url&&(b.width=parseInt(b.width||320,10),b.height=parseInt(b.height||240,10)),b.body&&(b.items={defaults:b.defaults,type:b.bodyType||\"form\",items:b.body,data:b.data,callbacks:b.commands}),b.url||b.buttons||(b.buttons=[{text:\"Ok\",subtype:\"primary\",onclick:function(){g.find(\"form\")[0].submit()}},{text:\"Cancel\",onclick:function(){g.close()}}]),g=new a(b),h.push(g),g.on(\"close\",function(){for(var a=h.length;a--;)h[a]===g&&h.splice(a,1);h.length||c.focus(),f(g)}),b.data&&g.on(\"postRender\",function(){this.find(\"*\").each(function(a){var c=a.name();c in b.data&&a.value(b.data[c])})}),g.features=b||{},g.params=d||{},1===h.length&&c.nodeChanged(),g=g.renderTo().reflow(),e(g),g},g.alert=function(a,d,g){var h;h=b.alert(a,function(){d?d.call(g||this):c.focus()}),h.on(\"close\",function(){f(h)}),e(h)},g.confirm=function(a,c,d){var g;g=b.confirm(a,function(a){c.call(d||this,a)}),g.on(\"close\",function(){f(g)}),e(g)},g.close=function(){d()&&d().close()},g.getParams=function(){return d()?d().params:null},g.setParams=function(a){d()&&(d().params=a)},g.getWindows=function(){return h}}}),g(\"2q\",[\"2g\",\"2n\"],function(a,b){return a.extend({Mixins:[b],Defaults:{classes:\"widget tooltip tooltip-n\"},renderHtml:function(){var a=this,b=a.classPrefix;return'<div id=\"'+a._id+'\" class=\"'+a.classes+'\" role=\"presentation\"><div class=\"'+b+'tooltip-arrow\"></div><div class=\"'+b+'tooltip-inner\">'+a.encode(a.state.get(\"text\"))+\"</div></div>\"},bindStates:function(){var a=this;return a.state.on(\"change:text\",function(b){a.getEl().lastChild.innerHTML=a.encode(b.value)}),a._super()},repaint:function(){var a,b,c=this;a=c.getEl().style,b=c._layoutRect,a.left=b.x+\"px\",a.top=b.y+\"px\",a.zIndex=131070}})}),g(\"2r\",[\"2g\",\"2q\"],function(a,b){\"use strict\";var c,d=a.extend({init:function(a){var b=this;b._super(a),a=b.settings,b.canFocus=!0,a.tooltip&&d.tooltips!==!1&&(b.on(\"mouseenter\",function(c){var d=b.tooltip().moveTo(-65535);if(c.control==b){var e=d.text(a.tooltip).show().testMoveRel(b.getEl(),[\"bc-tc\",\"bc-tl\",\"bc-tr\"]);d.classes.toggle(\"tooltip-n\",\"bc-tc\"==e),d.classes.toggle(\"tooltip-nw\",\"bc-tl\"==e),d.classes.toggle(\"tooltip-ne\",\"bc-tr\"==e),d.moveRel(b.getEl(),e)}else d.hide()}),b.on(\"mouseleave mousedown click\",function(){b.tooltip().hide()})),b.aria(\"label\",a.ariaLabel||a.tooltip)},tooltip:function(){return c||(c=new b({type:\"tooltip\"}),c.renderTo()),c},postRender:function(){var a=this,b=a.settings;a._super(),a.parent()||!b.width&&!b.height||(a.initLayoutRect(),a.repaint()),b.autofocus&&a.focus()},bindStates:function(){function a(a){c.aria(\"disabled\",a),c.classes.toggle(\"disabled\",a)}function b(a){c.aria(\"pressed\",a),c.classes.toggle(\"active\",a)}var c=this;return c.state.on(\"change:disabled\",function(b){a(b.value)}),c.state.on(\"change:active\",function(a){b(a.value)}),c.state.get(\"disabled\")&&a(!0),c.state.get(\"active\")&&b(!0),c._super()},remove:function(){this._super(),c&&(c.remove(),c=null)}});return d}),g(\"2s\",[\"2r\"],function(a){\"use strict\";return a.extend({Defaults:{value:0},init:function(a){var b=this;b._super(a),b.classes.add(\"progress\"),b.settings.filter||(b.settings.filter=function(a){return Math.round(a)})},renderHtml:function(){var a=this,b=a._id,c=this.classPrefix;return'<div id=\"'+b+'\" class=\"'+a.classes+'\"><div class=\"'+c+'bar-container\"><div class=\"'+c+'bar\"></div></div><div class=\"'+c+'text\">0%</div></div>'},postRender:function(){var a=this;return a._super(),a.value(a.settings.value),a},bindStates:function(){function a(a){a=b.settings.filter(a),b.getEl().lastChild.innerHTML=a+\"%\",b.getEl().firstChild.firstChild.style.width=a+\"%\"}var b=this;return b.state.on(\"change:value\",function(b){a(b.value)}),a(b.state.get(\"value\")),b._super()}})}),g(\"25\",[\"2g\",\"2n\",\"2s\",\"5\"],function(a,b,c,d){return a.extend({Mixins:[b],Defaults:{classes:\"widget notification\"},init:function(a){var b=this;b._super(a),a.text&&b.text(a.text),a.icon&&(b.icon=a.icon),a.color&&(b.color=a.color),a.type&&b.classes.add(\"notification-\"+a.type),a.timeout&&(a.timeout<0||a.timeout>0)&&!a.closeButton?b.closeButton=!1:(b.classes.add(\"has-close\"),b.closeButton=!0),a.progressBar&&(b.progressBar=new c),b.on(\"click\",function(a){a.target.className.indexOf(b.classPrefix+\"close\")!=-1&&b.close()})},renderHtml:function(){var a=this,b=a.classPrefix,c=\"\",d=\"\",e=\"\",f=\"\";return a.icon&&(c='<i class=\"'+b+\"ico \"+b+\"i-\"+a.icon+'\"></i>'),a.color&&(f=' style=\"background-color: '+a.color+'\"'),a.closeButton&&(d='<button type=\"button\" class=\"'+b+'close\" aria-hidden=\"true\">\\xd7</button>'),a.progressBar&&(e=a.progressBar.renderHtml()),'<div id=\"'+a._id+'\" class=\"'+a.classes+'\"'+f+' role=\"presentation\">'+c+'<div class=\"'+b+'notification-inner\">'+a.state.get(\"text\")+\"</div>\"+e+d+\"</div>\"},postRender:function(){var a=this;return d.setTimeout(function(){a.$el.addClass(a.classPrefix+\"in\")}),a._super()},bindStates:function(){var a=this;return a.state.on(\"change:text\",function(b){a.getEl().childNodes[1].innerHTML=b.value}),a.progressBar&&a.progressBar.bindStates(),a._super()},close:function(){var a=this;return a.fire(\"close\").isDefaultPrevented()||a.remove(),a},repaint:function(){var a,b,c=this;a=c.getEl().style,b=c._layoutRect,a.left=b.x+\"px\",a.top=b.y+\"px\",a.zIndex=65534}})}),g(\"11\",[\"25\",\"5\",\"9\"],function(a,b,c){return function(d){function e(){if(m.length)return m[m.length-1]}function f(){b.requestAnimationFrame(function(){g(),h()})}function g(){for(var a=0;a<m.length;a++)m[a].moveTo(0,0)}function h(){if(m.length>0){var a=m.slice(0,1)[0],b=d.inline?d.getElement():d.getContentAreaContainer();if(a.moveRel(b,\"tc-tc\"),m.length>1)for(var c=1;c<m.length;c++)m[c].moveRel(m[c-1].getEl(),\"bc-tc\")}}function i(a,b){if(!k(b))return null;var d=c.grep(a,function(a){return j(b,a)});return 0===d.length?null:d[0]}function j(a,b){return a.type===b.settings.type&&a.text===b.settings.text}function k(a){return!a.progressBar&&!a.timeout}var l=this,m=[];l.notifications=m,d.on(\"remove\",function(){for(var a=m.length;a--;)m[a].close()}),d.on(\"ResizeEditor\",h),d.on(\"ResizeWindow\",f),l.open=function(b){if(!d.removed){var c;d.editorManager.setActive(d);var e=i(m,b);return null===e?(c=new a(b),m.push(c),b.timeout>0&&(c.timer=setTimeout(function(){c.close()},b.timeout)),c.on(\"close\",function(){var a=m.length;for(c.timer&&d.getWin().clearTimeout(c.timer);a--;)m[a]===c&&m.splice(a,1);h()}),c.renderTo(),h()):c=e,c}},l.close=function(){e()&&e().close()},l.getNotifications=function(){return m},d.on(\"SkinLoaded\",function(){var a=d.settings.service_message;a&&d.notificationManager.open({text:a,type:\"warning\",timeout:0,icon:\"\"})})}}),g(\"12\",[\"z\",\"e\",\"9\"],function(a,b,c){function d(a,b){return\"selectionchange\"==b?a.getDoc():!a.inline&&/^mouse|touch|click|contextmenu|drop|dragover|dragend/.test(b)?a.getDoc().documentElement:a.settings.event_root?(a.eventRoot||(a.eventRoot=g.select(a.settings.event_root)[0]),a.eventRoot):a.getBody()}function e(a,b){function c(a){return!a.hidden&&!a.readonly}var e,h;if(a.delegates||(a.delegates={}),!a.delegates[b]&&!a.removed)if(e=d(a,b),a.settings.event_root){if(f||(f={},a.editorManager.on(\"removeEditor\",function(){var b;if(!a.editorManager.activeEditor&&f){for(b in f)a.dom.unbind(d(a,b));f=null}})),f[b])return;h=function(d){for(var e=d.target,f=a.editorManager.editors,h=f.length;h--;){var i=f[h].getBody();(i===e||g.isChildOf(e,i))&&c(f[h])&&f[h].fire(b,d)}},f[b]=h,g.bind(e,b,h)}else h=function(d){c(a)&&a.fire(b,d)},g.bind(e,b,h),a.delegates[b]=h}var f,g=b.DOM,h={bindPendingEventDelegates:function(){var a=this;c.each(a._pendingNativeEvents,function(b){e(a,b)})},toggleNativeEvent:function(a,b){var c=this;\"focus\"!=a&&\"blur\"!=a&&(b?c.initialized?e(c,a):c._pendingNativeEvents?c._pendingNativeEvents.push(a):c._pendingNativeEvents=[a]:c.initialized&&(c.dom.unbind(d(c,a),a,c.delegates[a]),delete c.delegates[a]))},unbindAllNativeEvents:function(){var a,b=this;if(b.delegates){for(a in b.delegates)b.dom.unbind(d(b,a),a,b.delegates[a]);delete b.delegates}b.inline||(b.getBody().onload=null,b.dom.unbind(b.getWin()),b.dom.unbind(b.getDoc())),b.dom.unbind(b.getBody()),b.dom.unbind(b.getContainer())}};return h=c.extend({},a,h)}),g(\"13\",[\"9\",\"6\"],function(a,b){var c=a.each,d=a.explode,e={f9:120,f10:121,f11:122},f=a.makeMap(\"alt,ctrl,shift,meta,access\");return function(g){function h(a){var g,h,i={};c(d(a,\"+\"),function(a){a in f?i[a]=!0:/^[0-9]{2,}$/.test(a)?i.keyCode=parseInt(a,10):(i.charCode=a.charCodeAt(0),i.keyCode=e[a]||a.toUpperCase().charCodeAt(0))}),g=[i.keyCode];for(h in f)i[h]?g.push(h):i[h]=!1;return i.id=g.join(\",\"),i.access&&(i.alt=!0,b.mac?i.ctrl=!0:i.shift=!0),i.meta&&(b.mac?i.meta=!0:(i.ctrl=!0,i.meta=!1)),i}function i(b,c,e,f){var i;return i=a.map(d(b,\">\"),h),i[i.length-1]=a.extend(i[i.length-1],{func:e,scope:f||g}),a.extend(i[0],{desc:g.translate(c),subpatterns:i.slice(1)})}function j(a){return a.altKey||a.ctrlKey||a.metaKey}function k(a){return\"keydown\"===a.type&&a.keyCode>=112&&a.keyCode<=123}function l(a,b){return!!b&&(b.ctrl==a.ctrlKey&&b.meta==a.metaKey&&(b.alt==a.altKey&&b.shift==a.shiftKey&&(!!(a.keyCode==b.keyCode||a.charCode&&a.charCode==b.charCode)&&(a.preventDefault(),!0))))}function m(a){return a.func?a.func.call(a.scope):null}var n=this,o={},p=[];g.on(\"keyup keypress keydown\",function(a){!j(a)&&!k(a)||a.isDefaultPrevented()||(c(o,function(b){if(l(a,b))return p=b.subpatterns.slice(0),\"keydown\"==a.type&&m(b),!0}),l(a,p[0])&&(1===p.length&&\"keydown\"==a.type&&m(p[0]),p.shift()))}),n.add=function(b,e,f,h){var j;return j=f,\"string\"==typeof f?f=function(){g.execCommand(j,!1,null)}:a.isArray(j)&&(f=function(){g.execCommand(j[0],j[1],j[2])}),c(d(a.trim(b.toLowerCase())),function(a){var b=i(a,e,f,h);o[b.id]=b}),!0},n.remove=function(a){var b=i(a);return!!o[b.id]&&(delete o[b.id],!0)}}}),g(\"26\",[\"9\"],function(a){var b=function(b,c,d,e,f){return f=a.extend({id:c,theme:\"modern\",delta_width:0,delta_height:0,popup_css:\"\",plugins:\"\",document_base_url:d,add_form_submit_trigger:!0,submit_patch:!0,add_unload_trigger:!0,convert_urls:!0,relative_urls:!0,remove_script_host:!0,object_resizing:!0,doctype:\"<!DOCTYPE html>\",visual:!0,font_size_style_values:\"xx-small,x-small,small,medium,large,x-large,xx-large\",font_size_legacy_values:\"xx-small,small,medium,large,x-large,xx-large,300%\",forced_root_block:\"p\",hidden_input:!0,padd_empty_editor:!0,render_ui:!0,indentation:\"30px\",inline_styles:!0,convert_fonts_to_spans:!0,indent:\"simple\",indent_before:\"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,figcaption,option,optgroup,datalist\",indent_after:\"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,figcaption,option,optgroup,datalist\",entity_encoding:\"named\",url_converter:b.convertURL,url_converter_scope:b,ie7_compat:!0},e,f,{validate:!0,content_editable:f.inline}),e&&e.external_plugins&&f.external_plugins&&(f.external_plugins=a.extend({},e.external_plugins,f.external_plugins)),f};return{getEditorSettings:b}}),h(\"4t\",window),g(\"2b\",[\"g\"],function(a){var b=a.PluginManager,c=function(a,c){for(var d in b.urls){var e=b.urls[d]+\"/plugin\"+c+\".js\";if(e===a)return d}return null},d=function(a,b){var d=c(b,a.suffix);return d?\"Failed to load plugin: \"+d+\" from url \"+b:\"Failed to load plugin url: \"+b},e=function(a,b){a.notificationManager.open({type:\"error\",text:b})},f=function(a,b){a._skinLoaded?e(a,b):a.on(\"SkinLoaded\",function(){e(a,b)})},g=function(a,b){f(a,\"Failed to upload image: \"+b)},h=function(a,b){f(a,d(a,b))},i=function(a,b){f(a,\"Failed to load content css: \"+b[0])},j=function(a){var b=window.console;b&&!window.test&&(b.error?b.error.apply(b,arguments):b.log.apply(b,arguments))};return{pluginLoadError:h,uploadError:g,displayError:f,contentCssError:i,initError:j}}),g(\"6c\",[\"1m\",\"1k\"],function(a,b){var c=function(a){return a.dom.select(\"*[data-mce-caret]\")[0]},d=function(a){a.selection.setRng(a.selection.getRng())},e=function(a,c){c.hasAttribute(\"data-mce-caret\")&&(b.showCaretContainerBlock(c),d(a),a.selection.scrollIntoView(c))},f=function(a,d){var f=c(a);if(f)return\"compositionstart\"===d.type?(d.preventDefault(),d.stopPropagation(),void e(f)):void(b.hasContent(f)&&e(a,f))},g=function(b){b.on(\"keyup compositionstart\",a.curry(f,b))};return{setup:g}}),g(\"6r\",[\"4\",\"9\",\"1w\"],function(a,b,c){return function(c,d){function e(a,b){return a?a.replace(/\\/$/,\"\")+\"/\"+b.replace(/^\\//,\"\"):b}function f(a,b,c,f){var g,h;g=new XMLHttpRequest,g.open(\"POST\",d.url),g.withCredentials=d.credentials,g.upload.onprogress=function(a){f(a.loaded/a.total*100)},g.onerror=function(){c(\"Image upload failed due to a XHR Transport error. Code: \"+g.status)},g.onload=function(){var a;return g.status<200||g.status>=300?void c(\"HTTP Error: \"+g.status):(a=JSON.parse(g.responseText),a&&\"string\"==typeof a.location?void b(e(d.basePath,a.location)):void c(\"Invalid JSON: \"+g.responseText))},h=new FormData,h.append(\"file\",a.blob(),a.filename()),g.send(h)}function g(){return new a(function(a){a([])})}function h(a,b){return{url:b,blobInfo:a,status:!0}}function i(a,b){return{url:\"\",blobInfo:a,status:!1,error:b}}function j(a,c){b.each(p[a],function(a){a(c)}),delete p[a]}function k(b,d,e){return c.markPending(b.blobUri()),new a(function(a){var f,g,k=function(){};try{var l=function(){f&&(f.close(),g=k)},m=function(d){l(),c.markUploaded(b.blobUri(),d),j(b.blobUri(),h(b,d)),a(h(b,d))},n=function(d){l(),c.removeFailed(b.blobUri()),j(b.blobUri(),i(b,d)),a(i(b,d))};g=function(a){a<0||a>100||(f||(f=e()),f.progressBar.value(a))},d(b,m,n,g)}catch(c){a(i(b,c.message))}})}function l(a){return a===f}function m(b){var c=b.blobUri();return new a(function(a){p[c]=p[c]||[],p[c].push(a)})}function n(e,f){return e=b.grep(e,function(a){return!c.isUploaded(a.blobUri())}),a.all(b.map(e,function(a){return c.isPending(a.blobUri())?m(a):k(a,d.handler,f)}))}function o(a,b){return!d.url&&l(d.handler)?g():n(a,b)}var p={};return d=b.extend({credentials:!1,handler:f},d),{upload:o}}}),g(\"7a\",[\"4\"],function(a){function b(b){return new a(function(a,c){var d=function(){c(\"Cannot convert \"+b+\" to Blob. Resource might not exist or is inaccessible.\")};try{var e=new XMLHttpRequest;e.open(\"GET\",b,!0),e.responseType=\"blob\",e.onload=function(){200==this.status?a(this.response):d()},e.onerror=d,e.send()}catch(a){d()}})}function c(a){var b,c;return a=decodeURIComponent(a).split(\",\"),c=/data:([^;]+)/.exec(a[0]),c&&(b=c[1]),{type:b,data:a[1]}}function d(b){return new a(function(a){var d,e,f;b=c(b);try{d=atob(b.data)}catch(b){return void a(new Blob([]))}for(e=new Uint8Array(d.length),f=0;f<e.length;f++)e[f]=d.charCodeAt(f);a(new Blob([e],{type:b.type}))})}function e(a){return 0===a.indexOf(\"blob:\")?b(a):0===a.indexOf(\"data:\")?d(a):null}function f(b){return new a(function(a){var c=new FileReader;c.onloadend=function(){a(c.result)},c.readAsDataURL(b)})}return{uriToBlob:e,blobToDataUri:f,parseDataUri:c}}),g(\"6s\",[\"4\",\"1g\",\"1w\",\"7a\",\"6\"],function(a,b,c,d,e){var f=0,g=function(a){return(a||\"blobid\")+f++},h=function(a,b,c,e){var f,h;return 0===b.src.indexOf(\"blob:\")?(h=a.getByUri(b.src),void(h?c({image:b,blobInfo:h}):d.uriToBlob(b.src).then(function(e){d.blobToDataUri(e).then(function(i){f=d.parseDataUri(i).data,h=a.create(g(),e,f),a.add(h),c({image:b,blobInfo:h})})},function(a){e(a)}))):(f=d.parseDataUri(b.src).data,h=a.findFirst(function(a){return a.base64()===f}),void(h?c({image:b,blobInfo:h}):d.uriToBlob(b.src).then(function(d){h=a.create(g(),d,f),a.add(h),c({image:b,blobInfo:h})},function(a){e(a)})))},i=function(a){return a?a.getElementsByTagName(\"img\"):[]};return function(d,f){function g(g,k){var l,m;return k||(k=c.constant(!0)),l=b.filter(i(g),function(a){var b=a.src;return!!e.fileApi&&(!a.hasAttribute(\"data-mce-bogus\")&&(!a.hasAttribute(\"data-mce-placeholder\")&&(!(!b||b==e.transparentSrc)&&(0===b.indexOf(\"blob:\")?!d.isUploaded(b):0===b.indexOf(\"data:\")&&k(a)))))}),m=b.map(l,function(b){var c;return j[b.src]?new a(function(a){j[b.src].then(function(c){return\"string\"==typeof c?c:void a({image:b,blobInfo:c.blobInfo})})}):(c=new a(function(a,c){h(f,b,a,c)}).then(function(a){return delete j[a.image.src],a})[\"catch\"](function(a){return delete j[b.src],a}),j[b.src]=c,c)}),a.all(m)}var j={};return{findAll:g}}}),g(\"2a\",[],function(){var a=0,b=function(){var a=function(){return Math.round(4294967295*Math.random()).toString(36)},b=(new Date).getTime();return\"s\"+b.toString(36)+a()+a()+a()},c=function(c){return c+a++ +b()};return{uuid:c}}),h(\"7b\",URL),g(\"6t\",[\"1g\",\"1w\",\"2a\",\"7b\"],function(a,b,c,d){return function(){function e(a){var b={\"image/jpeg\":\"jpg\",\"image/jpg\":\"jpg\",\"image/gif\":\"gif\",\"image/png\":\"png\"};return b[a.toLowerCase()]||\"dat\"}function f(a,b,c,d){return g(\"object\"==typeof a?a:{id:a,name:d,blob:b,base64:c})}function g(a){var b,f;if(!a.blob||!a.base64)throw\"blob and base64 representations of the image are required for BlobInfo to be created\";return b=a.id||c.uuid(\"blobid\"),f=a.name||b,{id:o(b),name:o(f),filename:o(f+\".\"+e(a.blob.type)),blob:o(a.blob),base64:o(a.base64),blobUri:o(a.blobUri||d.createObjectURL(a.blob)),uri:o(a.uri)}}function h(a){i(a.id())||n.push(a)}function i(a){return j(function(b){return b.id()===a})}function j(b){return a.filter(n,b)[0]}function k(a){return j(function(b){return b.blobUri()==a})}function l(b){n=a.filter(n,function(a){return a.blobUri()!==b||(d.revokeObjectURL(a.blobUri()),!1)})}function m(){a.each(n,function(a){d.revokeObjectURL(a.blobUri())}),n=[]}var n=[],o=b.constant;return{create:f,add:h,get:i,getByUri:k,findFirst:j,removeByUri:l,destroy:m}}}),g(\"6u\",[],function(){return function(){function a(a,b){return{status:a,resultUri:b}}function b(a){return a in l}function c(a){var b=l[a];return b?b.resultUri:null}function d(a){return!!b(a)&&l[a].status===j}function e(a){return!!b(a)&&l[a].status===k}function f(b){l[b]=a(j,null)}function g(b,c){l[b]=a(k,c)}function h(a){delete l[a]}function i(){l={}}var j=1,k=2,l={};return{hasBlobUri:b,getResultUri:c,isPending:d,isUploaded:e,markPending:f,markUploaded:g,removeFailed:h,destroy:i}}}),g(\"6d\",[\"1g\",\"6r\",\"6s\",\"6t\",\"6u\",\"2b\"],function(a,b,c,d,e,f){return function(g){function h(a){return function(b){return g.selection?a(b):[]}}function i(){return\"?\"+(new Date).getTime()}function j(a,b,c){var d=0;do d=a.indexOf(b,d),d!==-1&&(a=a.substring(0,d)+c+a.substr(d+b.length),d+=c.length-b.length+1);while(d!==-1);return a}function k(a,b,c){return a=j(a,'src=\"'+b+'\"','src=\"'+c+'\"'),a=j(a,'data-mce-src=\"'+b+'\"','data-mce-src=\"'+c+'\"')}function l(b,c){a.each(g.undoManager.data,function(d){\"fragmented\"===d.type?d.fragments=a.map(d.fragments,function(a){return k(a,b,c)}):d.content=k(d.content,b,c)})}function m(){return g.notificationManager.open({text:g.translate(\"Image uploading...\"),type:\"info\",timeout:-1,progressBar:!0})}function n(a,b){w.removeByUri(a.src),l(a.src,b),g.$(a).attr({src:x.images_reuse_filename?b+i():b,\"data-mce-src\":g.convertURL(b,\"src\")})}function o(c){return u||(u=new b(y,{url:x.images_upload_url,basePath:x.images_upload_base_path,credentials:x.images_upload_credentials,handler:x.images_upload_handler})),r().then(h(function(b){var d;return d=a.map(b,function(a){return a.blobInfo}),u.upload(d,m).then(h(function(d){var e=a.map(d,function(a,c){var d=b[c].image;return a.status&&g.settings.images_replace_blob_uris!==!1?n(d,a.url):a.error&&f.uploadError(g,a.error),{element:d,\nstatus:a.status}});return c&&c(e),e}))}))}function p(a){if(x.automatic_uploads!==!1)return o(a)}function q(a){return!x.images_dataimg_filter||x.images_dataimg_filter(a)}function r(){return v||(v=new c(y,w)),v.findAll(g.getBody(),q).then(h(function(b){return b=a.filter(b,function(a){return\"string\"!=typeof a||(f.displayError(g,a),!1)}),a.each(b,function(a){l(a.image.src,a.blobInfo.blobUri()),a.image.src=a.blobInfo.blobUri(),a.image.removeAttribute(\"data-mce-src\")}),b}))}function s(){w.destroy(),y.destroy(),v=u=null}function t(b){return b.replace(/src=\"(blob:[^\"]+)\"/g,function(b,c){var d=y.getResultUri(c);if(d)return'src=\"'+d+'\"';var e=w.getByUri(c);return e||(e=a.reduce(g.editorManager.editors,function(a,b){return a||b.editorUpload&&b.editorUpload.blobCache.getByUri(c)},null)),e?'src=\"data:'+e.blob().type+\";base64,\"+e.base64()+'\"':b})}var u,v,w=new d,x=g.settings,y=new e;return g.on(\"setContent\",function(){g.settings.automatic_uploads!==!1?p():r()}),g.on(\"RawSaveContent\",function(a){a.content=t(a.content)}),g.on(\"getContent\",function(a){a.source_view||\"raw\"==a.format||(a.content=t(a.content))}),g.on(\"PostRender\",function(){g.parser.addNodeFilter(\"img\",function(b){a.each(b,function(a){var b=a.attr(\"src\");if(!w.getByUri(b)){var c=y.getResultUri(b);c&&a.attr(\"src\",c)}})})}),{blobCache:w,uploadImages:o,uploadImagesAuto:p,scanForImages:r,destroy:s}}}),g(\"6e\",[\"1m\"],function(a){var b=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n=a.settings,o=a.dom,p=a.selection,q=a.schema,r=q.getBlockElements(),s=p.getStart(),t=a.getBody(),u=-16777215;if(m=n.forced_root_block,s&&1===s.nodeType&&m){for(;s&&s!==t;){if(r[s.nodeName])return;s=s.parentNode}if(b=p.getRng(),b.setStart){c=b.startContainer,d=b.startOffset,e=b.endContainer,f=b.endOffset;try{j=a.getDoc().activeElement===t}catch(a){}}else b.item&&(s=b.item(0),b=a.getDoc().body.createTextRange(),b.moveToElementText(s)),j=b.parentElement().ownerDocument===a.getDoc(),k=b.duplicate(),k.collapse(!0),d=k.move(\"character\",u)*-1,k.collapsed||(k=b.duplicate(),k.collapse(!1),f=k.move(\"character\",u)*-1-d);for(s=t.firstChild,l=t.nodeName.toLowerCase();s;)if((3===s.nodeType||1==s.nodeType&&!r[s.nodeName])&&q.isValidChild(l,m.toLowerCase())){if(3===s.nodeType&&0===s.nodeValue.length){h=s,s=s.nextSibling,o.remove(h);continue}g||(g=o.create(m,a.settings.forced_root_block_attrs),s.parentNode.insertBefore(g,s),i=!0),h=s,s=s.nextSibling,g.appendChild(h)}else g=null,s=s.nextSibling;if(i&&j){if(b.setStart)b.setStart(c,d),b.setEnd(e,f),p.setRng(b);else try{b=a.getDoc().body.createTextRange(),b.moveToElementText(t),b.collapse(!0),b.moveStart(\"character\",d),f>0&&b.moveEnd(\"character\",f),b.select()}catch(a){}a.nodeChanged()}}},c=function(c){c.settings.forced_root_block&&c.on(\"NodeChange\",a.curry(b,c))};return{setup:c}}),g(\"7f\",[\"1g\",\"1j\",\"43\"],function(a,b,c){function d(e){function f(b){return a.map(b,function(a){return a=c.clone(a),a.node=e,a})}if(a.isArray(e))return a.reduce(e,function(a,b){return a.concat(d(b))},[]);if(b.isElement(e))return f(e.getClientRects());if(b.isText(e)){var g=e.ownerDocument.createRange();return g.setStart(e,0),g.setEnd(e,e.data.length),f(g.getClientRects())}}return{getClientRects:d}}),g(\"70\",[\"1w\",\"1g\",\"1j\",\"7f\",\"43\",\"5i\",\"44\"],function(a,b,c,d,e,f,g){function h(a,b){return Math.abs(a.left-b)}function i(a,b){return Math.abs(a.right-b)}function j(a,c){function d(a,b){return a>=b.left&&a<=b.right}return b.reduce(a,function(a,b){var e,f;return e=Math.min(h(a,c),i(a,c)),f=Math.min(h(b,c),i(b,c)),d(c,b)?b:d(c,a)?a:f==e&&p(b.node)?b:f<e?b:a})}function k(a,b,c,d){for(;d=q(d,a,g.isEditableCaretCandidate,b);)if(c(d))return}function l(a,c){function f(a,e){var f;return f=b.filter(d.getClientRects(e),function(b){return!a(b,c)}),g=g.concat(f),0===f.length}var g=[];return g.push(c),k(-1,a,r(f,e.isAbove),c.node),k(1,a,r(f,e.isBelow),c.node),g}function m(a){return b.filter(b.toArray(a.getElementsByTagName(\"*\")),p)}function n(a,b){return{node:a.node,before:h(a,b)<i(a,b)}}function o(a,c,e){var f,g;return f=d.getClientRects(m(a)),f=b.filter(f,function(a){return e>=a.top&&e<=a.bottom}),g=j(f,c),g&&(g=j(l(a,g),c),g&&p(g.node))?n(g,c):null}var p=c.isContentEditableFalse,q=f.findNode,r=a.curry;return{findClosestClientRect:j,findLineNodeRects:l,closestCaret:o}}),g(\"7i\",[\"1w\",\"1g\",\"7f\",\"44\",\"5i\",\"4m\",\"1p\",\"43\"],function(a,b,c,d,e,f,g,h){function i(a,b,c,f){for(;f=e.findNode(f,a,d.isEditableCaretCandidate,b);)if(c(f))return}function j(a,d,e,f,g,h){function j(f){var h,i,j;for(j=c.getClientRects(f),a==-1&&(j=j.reverse()),h=0;h<j.length;h++)if(i=j[h],!e(i,l)){if(n.length>0&&d(i,b.last(n))&&m++,i.line=m,g(i))return!0;n.push(i)}}var k,l,m=0,n=[];return(l=b.last(h.getClientRects()))?(k=h.getNode(),j(k),i(a,f,j,k),n):n}function k(a,b){return b.line>a}function l(a,b){return b.line===a}function m(a,c,d,e){function i(c){return 1==a?b.last(c.getClientRects()):b.last(c.getClientRects())}var j,k,l,m,n,o,p=new f(c),q=[],r=0;1==a?(j=p.next,k=h.isBelow,l=h.isAbove,m=g.after(e)):(j=p.prev,k=h.isAbove,l=h.isBelow,m=g.before(e)),o=i(m);do if(m.isVisible()&&(n=i(m),!l(n,o))){if(q.length>0&&k(n,b.last(q))&&r++,n=h.clone(n),n.position=m,n.line=r,d(n))return q;q.push(n)}while(m=j(m));return q}var n=a.curry,o=n(j,-1,h.isAbove,h.isBelow),p=n(j,1,h.isBelow,h.isAbove);return{upUntil:o,downUntil:p,positionsUntil:m,isAboveLine:n(k),isLine:n(l)}}),g(\"73\",[\"1p\",\"5i\",\"1j\",\"1w\"],function(a,b,c,d){var e=c.isContentEditableTrue,f=c.isContentEditableFalse,g=function(a,b,c,d){return b._selectionOverrides.showCaret(a,c,d)},h=function(a){var b=a.ownerDocument.createRange();return b.selectNode(a),b},i=function(a,b){var c;return c=a.fire(\"BeforeObjectSelected\",{target:b}),c.isDefaultPrevented()?null:h(b)},j=function(c,h){var i,j;return h=b.normalizeRange(1,c.getBody(),h),i=a.fromRangeStart(h),f(i.getNode())?g(1,c,i.getNode(),!i.isAtEnd()):f(i.getNode(!0))?g(1,c,i.getNode(!0),!1):(j=c.dom.getParent(i.getNode(),d.or(f,e)),f(j)?g(1,c,j,!1):null)},k=function(a,b){var c;return b&&b.collapsed?(c=j(a,b),c?c:b):b};return{showCaret:g,selectNode:i,renderCaretAtRange:j,renderRangeCaret:k}}),g(\"7c\",[\"1k\",\"1p\",\"5i\",\"4m\",\"70\",\"7i\",\"1j\",\"h\",\"6\",\"73\",\"1g\",\"1w\"],function(a,b,c,d,e,f,g,h,i,j,k,l){var m=g.isContentEditableFalse,n=h.getSelectedNode,o=c.isAfterContentEditableFalse,p=c.isBeforeContentEditableFalse,q=function(a,b){for(;b=a(b);)if(b.isVisible())return b;return b},r=function(a,b){var d=c.isInSameBlock(a,b);return!(d||!g.isBr(a.getNode()))||d},s=function(b){return a.isCaretContainerBlock(b.startContainer)},t=function(a,d,e){return e=c.normalizeRange(a,d,e),a===-1?b.fromRangeStart(e):b.fromRangeEnd(e)},u=function(a,b,c,d,e){var f,g,h,i;return!e.collapsed&&(f=n(e),m(f))?j.showCaret(a,b,f,a===-1):(i=s(e),g=t(a,b.getBody(),e),d(g)?j.selectNode(b,g.getNode(a===-1)):(g=c(g))?d(g)?j.showCaret(a,b,g.getNode(a===-1),1===a):(h=c(g),d(h)&&r(g,h)?j.showCaret(a,b,h.getNode(a===-1),1===a):i?j.renderRangeCaret(b,g.toRange()):null):i?e:null)},v=function(a,b,c,d){var g,h,i,l,q,r,s,u,v;if(v=n(d),g=t(a,b.getBody(),d),h=c(b.getBody(),f.isAboveLine(1),g),i=k.filter(h,f.isLine(1)),q=k.last(g.getClientRects()),p(g)&&(v=g.getNode()),o(g)&&(v=g.getNode(!0)),!q)return null;if(r=q.left,l=e.findClosestClientRect(i,r),l&&m(l.node))return s=Math.abs(r-l.left),u=Math.abs(r-l.right),j.showCaret(a,b,l.node,s<u);if(v){var w=f.positionsUntil(a,b.getBody(),f.isAboveLine(1),v);if(l=e.findClosestClientRect(k.filter(w,f.isLine(1)),r))return j.renderRangeCaret(b,l.position.toRange());if(l=k.last(k.filter(w,f.isLine(0))))return j.renderRangeCaret(b,l.position.toRange())}},w=function(a){var b=a.dom.create(a.settings.forced_root_block);return(!i.ie||i.ie>=11)&&(b.innerHTML='<br data-mce-bogus=\"1\">'),b},x=function(a,c,e){var f,g,h,i=new d(a.getBody()),j=l.curry(q,i.next),k=l.curry(q,i.prev);if(e.collapsed&&a.settings.forced_root_block){if(f=a.dom.getParent(e.startContainer,\"PRE\"),!f)return;g=1===c?j(b.fromRangeStart(e)):k(b.fromRangeStart(e)),g||(h=w(a),1===c?a.$(f).after(h):a.$(f).before(h),a.selection.select(h,!0),a.selection.collapse())}},y=function(a,b){var c,e=new d(a.getBody()),f=l.curry(q,e.next),g=l.curry(q,e.prev),h=b?1:-1,i=b?f:g,j=b?p:o,k=a.selection.getRng();return(c=u(h,a,i,j,k))?c:(c=x(a,h,k),c?c:null)},z=function(a,b){var c,d=b?1:-1,e=b?f.downUntil:f.upUntil,g=a.selection.getRng();return(c=v(d,a,e,g))?c:(c=x(a,d,g),c?c:null)},A=function(a,b){return function(){var c=y(a,b);return!!c&&(a.selection.setRng(c),!0)}},B=function(a,b){return function(){var c=z(a,b);return!!c&&(a.selection.setRng(c),!0)}};return{moveH:A,moveV:B}}),g(\"7j\",[\"60\",\"3y\",\"3z\"],function(a,b,c){var d=function(a,b){return b},e=function(b,c){var d=a.isObject(b)&&a.isObject(c);return d?g(b,c):c},f=function(a){return function(){for(var d=new b(arguments.length),e=0;e<d.length;e++)d[e]=arguments[e];if(0===d.length)throw new c(\"Can't merge zero objects\");for(var f={},g=0;g<d.length;g++){var h=d[g];for(var i in h)h.hasOwnProperty(i)&&(f[i]=a(f[i],h[i]))}return f}},g=f(e),h=f(d);return{deepMerge:g,merge:h}}),g(\"7d\",[\"3x\",\"1m\",\"7j\"],function(a,b,c){var d=function(d){return a.map(d,function(a){return c.merge({shiftKey:!1,altKey:!1,ctrlKey:!1,metaKey:!1,keyCode:0,action:b.noop},a)})},e=function(a,b){return b.keyCode===a.keyCode&&b.shiftKey===a.shiftKey&&b.altKey===a.altKey&&b.ctrlKey===a.ctrlKey&&b.metaKey===a.metaKey},f=function(b,c){return a.bind(d(b),function(a){return e(a,c)?[a]:[]})},g=function(a){var b=Array.prototype.slice.call(arguments,1);return function(){return a.apply(null,b)}};return{match:f,action:g}}),g(\"6v\",[\"3x\",\"6b\",\"5o\",\"7c\",\"7d\",\"p\"],function(a,b,c,d,e,f){var g=function(b,g,h){var i=e.match([{keyCode:f.RIGHT,action:d.moveH(b,!0)},{keyCode:f.LEFT,action:d.moveH(b,!1)},{keyCode:f.UP,action:d.moveV(b,!1)},{keyCode:f.DOWN,action:d.moveV(b,!0)},{keyCode:f.RIGHT,action:c.move(b,g,!0)},{keyCode:f.LEFT,action:c.move(b,g,!1)}],h);a.find(i,function(a){return a.action()}).each(function(a){h.preventDefault()})},h=function(a,b){a.on(\"keydown\",function(c){c.isDefaultPrevented()===!1&&g(a,b,c)})};return{setup:h}}),g(\"6w\",[\"3x\",\"4i\",\"4j\",\"4k\",\"4l\",\"7d\",\"p\"],function(a,b,c,d,e,f,g){var h=function(h,i,j){var k=f.match([{keyCode:g.BACKSPACE,action:f.action(d.backspaceDelete,h,!1)},{keyCode:g.DELETE,action:f.action(d.backspaceDelete,h,!0)},{keyCode:g.BACKSPACE,action:f.action(e.backspaceDelete,h,i,!1)},{keyCode:g.DELETE,action:f.action(e.backspaceDelete,h,i,!0)},{keyCode:g.BACKSPACE,action:f.action(c.backspaceDelete,h,!1)},{keyCode:g.DELETE,action:f.action(c.backspaceDelete,h,!0)},{keyCode:g.BACKSPACE,action:f.action(b.backspaceDelete,h,!1)},{keyCode:g.DELETE,action:f.action(b.backspaceDelete,h,!0)}],j);a.find(k,function(a){return a.action()}).each(function(a){j.preventDefault()})},i=function(b,c){var e=f.match([{keyCode:g.BACKSPACE,action:f.action(d.paddEmptyElement,b)},{keyCode:g.DELETE,action:f.action(d.paddEmptyElement,b)}],c);a.find(e,function(a){return a.action()})},j=function(a,b){a.on(\"keydown\",function(c){c.isDefaultPrevented()===!1&&h(a,b,c)}),a.on(\"keyup\",function(b){b.isDefaultPrevented()===!1&&i(a,b)})};return{setup:j}}),g(\"6x\",[\"1k\",\"1j\",\"h\",\"c\",\"6\",\"1l\",\"9\"],function(a,b,c,d,e,f,g){var h=e.ie&&e.ie<11,i=function(a){return a&&\"A\"===a.nodeName&&0===g.trim(f.trim(a.innerText||a.textContent)).length},j=function(a){return a&&/^(TD|TH|CAPTION)$/.test(a.nodeName)},k=function(a){a.innerHTML=h?\"\":'<br data-mce-bogus=\"1\">'},l=function(a,b){return a.nodeName===b||a.previousSibling&&a.previousSibling.nodeName===b},m=function(a,b){return b&&a.isBlock(b)&&!/^(TD|TH|CAPTION|FORM)$/.test(b.nodeName)&&!/^(fixed|absolute)/i.test(b.style.position)&&\"true\"!==a.getContentEditable(b)},n=function(a,b,c){var d;a.isBlock(c)&&(d=b.getRng(),c.appendChild(a.create(\"span\",null,\"\\xa0\")),b.select(c),c.lastChild.outerHTML=\"\",b.setRng(d))},o=function(a,b,c){var d,e=c,f=[];if(e){for(;e=e.firstChild;){if(a.isBlock(e))return;1!=e.nodeType||b[e.nodeName.toLowerCase()]||f.push(e)}for(d=f.length;d--;)e=f[d],!e.hasChildNodes()||e.firstChild==e.lastChild&&\"\"===e.firstChild.nodeValue?a.remove(e):i(e)&&a.remove(e)}},p=function(a,c,d){return b.isText(c)===!1?d:a?1===d&&c.data.charAt(d-1)===f.ZWSP?0:d:d===c.data.length-1&&c.data.charAt(d)===f.ZWSP?c.data.length:d},q=function(a){var b=a.cloneRange();return b.setStart(a.startContainer,p(!0,a.startContainer,a.startOffset)),b.setEnd(a.endContainer,p(!1,a.endContainer,a.endOffset)),b},r=function(a){for(;a;){if(1===a.nodeType||3===a.nodeType&&a.data&&/[\\r\\n\\s]/.test(a.data))return a;a=a.nextSibling}},s=function(b){function f(f){function x(a){var b,c,f,h,j=a;if(a){if(e.ie&&e.ie<9&&N&&N.firstChild&&N.firstChild==N.lastChild&&\"BR\"==N.firstChild.tagName&&g.remove(N.firstChild),/^(LI|DT|DD)$/.test(a.nodeName)){var k=r(a.firstChild);k&&/^(UL|OL|DL)$/.test(k.nodeName)&&a.insertBefore(g.doc.createTextNode(\"\\xa0\"),a.firstChild)}if(f=g.createRng(),e.ie||a.normalize(),a.hasChildNodes()){for(b=new d(a,a);c=b.current();){if(3==c.nodeType){f.setStart(c,0),f.setEnd(c,0);break}if(w[c.nodeName.toLowerCase()]){f.setStartBefore(c),f.setEndBefore(c);break}j=c,c=b.next()}c||(f.setStart(j,0),f.setEnd(j,0))}else\"BR\"==a.nodeName?a.nextSibling&&g.isBlock(a.nextSibling)?((!O||O<9)&&(h=g.create(\"br\"),a.parentNode.insertBefore(h,a)),f.setStartBefore(a),f.setEndBefore(a)):(f.setStartAfter(a),f.setEndAfter(a)):(f.setStart(a,0),f.setEnd(a,0));i.setRng(f),g.remove(h),i.scrollIntoView(a)}}function y(a){var b=s.forced_root_block;b&&b.toLowerCase()===a.tagName.toLowerCase()&&g.setAttribs(a,s.forced_root_block_attrs)}function z(a){var b,c,d,e=L,f=u.getTextInlineElements();if(a||\"TABLE\"==T||\"HR\"==T?(b=g.create(a||V),y(b)):b=N.cloneNode(!1),d=b,s.keep_styles===!1)g.setAttrib(b,\"style\",null),g.setAttrib(b,\"class\",null);else do if(f[e.nodeName]){if(\"_mce_caret\"==e.id)continue;c=e.cloneNode(!1),g.setAttrib(c,\"id\",\"\"),b.hasChildNodes()?(c.appendChild(b.firstChild),b.appendChild(c)):(d=c,b.appendChild(c))}while((e=e.parentNode)&&e!=K);return h||(d.innerHTML='<br data-mce-bogus=\"1\">'),b}function A(a){var b,c,e,f;if(f=p(a,L,M),3==L.nodeType&&(a?f>0:f<L.nodeValue.length))return!1;if(L.parentNode==N&&W&&!a)return!0;if(a&&1==L.nodeType&&L==N.firstChild)return!0;if(l(L,\"TABLE\")||l(L,\"HR\"))return W&&!a||!W&&a;for(b=new d(L,N),3==L.nodeType&&(a&&0===f?b.prev():a||f!=L.nodeValue.length||b.next());c=b.current();){if(1===c.nodeType){if(!c.getAttribute(\"data-mce-bogus\")&&(e=c.nodeName.toLowerCase(),v[e]&&\"br\"!==e))return!1}else if(3===c.nodeType&&!/^[ \\t\\r\\n]*$/.test(c.nodeValue))return!1;a?b.prev():b.next()}return!0}function B(a,c){var d,e,f,h,i,k,l=V||\"P\";if(e=g.getParent(a,g.isBlock),!e||!m(g,e)){if(e=e||K,k=e==b.getBody()||j(e)?e.nodeName.toLowerCase():e.parentNode.nodeName.toLowerCase(),!e.hasChildNodes())return d=g.create(l),y(d),e.appendChild(d),I.setStart(d,0),I.setEnd(d,0),d;for(h=a;h.parentNode!=e;)h=h.parentNode;for(;h&&!g.isBlock(h);)f=h,h=h.previousSibling;if(f&&u.isValidChild(k,l.toLowerCase())){for(d=g.create(l),y(d),f.parentNode.insertBefore(d,f),h=f;h&&!g.isBlock(h);)i=h.nextSibling,d.appendChild(h),h=i;I.setStart(a,c),I.setEnd(a,c)}}return a}function C(){function a(a){for(var b=S[a?\"firstChild\":\"lastChild\"];b&&1!=b.nodeType;)b=b[a?\"nextSibling\":\"previousSibling\"];return b===N}function c(){var a=S.parentNode;return/^(LI|DT|DD)$/.test(a.nodeName)?a:S}if(S!=b.getBody()){var d=S.parentNode.nodeName;/^(OL|UL|LI)$/.test(d)&&(V=\"LI\"),Q=V?z(V):g.create(\"BR\"),a(!0)&&a()?\"LI\"==d?g.insertAfter(Q,c()):g.replace(Q,S):a(!0)?\"LI\"==d?(g.insertAfter(Q,c()),Q.appendChild(g.doc.createTextNode(\" \")),Q.appendChild(S)):S.parentNode.insertBefore(Q,S):a()?(g.insertAfter(Q,c()),n(g,i,Q)):(S=c(),J=I.cloneRange(),J.setStartAfter(N),J.setEndAfter(S),R=J.extractContents(),\"LI\"==V&&\"LI\"==R.firstChild.nodeName?(Q=R.firstChild,g.insertAfter(R,S)):(g.insertAfter(R,S),g.insertAfter(Q,S))),g.remove(N),x(Q),t.add()}}function D(){b.execCommand(\"InsertLineBreak\",!1,f)}function E(a){do 3===a.nodeType&&(a.nodeValue=a.nodeValue.replace(/^[\\r\\n]+/,\"\")),a=a.firstChild;while(a)}function F(a){var b,c,d=g.getRoot();for(b=a;b!==d&&\"false\"!==g.getContentEditable(b);)\"true\"===g.getContentEditable(b)&&(c=b),b=b.parentNode;return b!==d?c:d}function G(a){var b;h||(a.normalize(),b=a.lastChild,b&&!/^(left|right)$/gi.test(g.getStyle(b,\"float\",!0))||g.add(a,\"br\"))}function H(){Q=/^(H[1-6]|PRE|FIGURE)$/.test(T)&&\"HGROUP\"!=U?z(V):z(),s.end_container_on_empty_block&&m(g,S)&&g.isEmpty(N)?Q=g.split(S,N):g.insertAfter(Q,N),x(Q)}var I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W;if(I=i.getRng(!0),!f.isDefaultPrevented()){if(!I.collapsed)return void b.execCommand(\"Delete\");if(new c(g).normalize(I),L=I.startContainer,M=I.startOffset,V=(s.force_p_newlines?\"p\":\"\")||s.forced_root_block,V=V?V.toUpperCase():\"\",O=g.doc.documentMode,P=f.shiftKey,1==L.nodeType&&L.hasChildNodes()&&(W=M>L.childNodes.length-1,L=L.childNodes[Math.min(M,L.childNodes.length-1)]||L,M=W&&3==L.nodeType?L.nodeValue.length:0),K=F(L)){if(t.beforeChange(),!g.isBlock(K)&&K!=g.getRoot())return void(V&&!P||D());if((V&&!P||!V&&P)&&(L=B(L,M)),N=g.getParent(L,g.isBlock),S=N?g.getParent(N.parentNode,g.isBlock):null,T=N?N.nodeName.toUpperCase():\"\",U=S?S.nodeName.toUpperCase():\"\",\"LI\"!=U||f.ctrlKey||(N=S,T=U),b.undoManager.typing&&(b.undoManager.typing=!1,b.undoManager.add()),/^(LI|DT|DD)$/.test(T)){if(!V&&P)return void D();if(g.isEmpty(N))return void C()}if(\"PRE\"==T&&s.br_in_pre!==!1){if(!P)return void D()}else if(!V&&!P&&\"LI\"!=T||V&&P)return void D();V&&N===b.getBody()||(V=V||\"P\",a.isCaretContainerBlock(N)?(Q=a.showCaretContainerBlock(N),g.isEmpty(N)&&k(N),x(Q)):A()?H():A(!0)?(Q=N.parentNode.insertBefore(z(),N),n(g,i,Q),x(l(N,\"HR\")?Q:N)):(J=q(I).cloneRange(),J.setEndAfter(N),R=J.extractContents(),E(R),Q=R.firstChild,g.insertAfter(R,N),o(g,v,Q),G(N),g.isEmpty(N)&&k(N),Q.normalize(),g.isEmpty(Q)?(g.remove(Q),H()):x(Q)),g.setAttrib(Q,\"id\",\"\"),b.fire(\"NewBlock\",{newBlock:Q}),t.typing=!1,t.add())}}}var g=b.dom,i=b.selection,s=b.settings,t=b.undoManager,u=b.schema,v=u.getNonEmptyElements(),w=u.getMoveCaretBeforeOnEnterElements();b.on(\"keydown\",function(a){13==a.keyCode&&f(a)!==!1&&a.preventDefault()})};return{setup:s}}),g(\"7e\",[\"1m\",\"1p\",\"1j\",\"5n\"],function(a,b,c,d){var e=function(a,b){return i(a)&&c.isText(b.container())},f=function(a,b){var c=b.container(),d=b.offset();c.insertData(d,\"\\xa0\"),a.selection.setCursorLocation(c,d+1)},g=function(a,b,c){return!!e(c,b)&&(f(a,b),!0)},h=function(c){var e=b.fromRangeStart(c.selection.getRng()),f=d.readLocation(c.getBody(),e);return f.map(a.curry(g,c,e)).getOr(!1)},i=function(b){return b.fold(a.constant(!1),a.constant(!0),a.constant(!0),a.constant(!1))},j=function(a){return!!a.selection.isCollapsed()&&h(a)};return{insertAtSelection:j}}),g(\"6y\",[\"3x\",\"7e\",\"7d\",\"p\"],function(a,b,c,d){var e=function(e,f){var g=c.match([{keyCode:d.SPACEBAR,action:c.action(b.insertAtSelection,e)}],f);a.find(g,function(a){return a.action()}).each(function(a){f.preventDefault()})},f=function(a){a.on(\"keydown\",function(b){b.isDefaultPrevented()===!1&&e(a,b)})};return{setup:f}}),g(\"6f\",[\"6v\",\"5o\",\"6w\",\"6x\",\"6y\"],function(a,b,c,d,e){var f=function(f){var g=b.setupSelectedState(f);a.setup(f,g),c.setup(f,g),d.setup(f),e.setup(f)};return{setup:f}}),g(\"6g\",[\"h\",\"6\",\"5\"],function(a,b,c){return function(d){function e(a){var b,c;if(c=d.$(a).parentsUntil(d.getBody()).add(a),c.length===g.length){for(b=c.length;b>=0&&c[b]===g[b];b--);if(b===-1)return g=c,!0}return g=c,!1}var f,g=[];\"onselectionchange\"in d.getDoc()||d.on(\"NodeChange Click MouseUp KeyUp Focus\",function(b){var c,e;c=d.selection.getRng(),e={startContainer:c.startContainer,startOffset:c.startOffset,endContainer:c.endContainer,endOffset:c.endOffset},\"nodechange\"!=b.type&&a.compareRanges(e,f)||d.fire(\"SelectionChange\"),f=e}),d.on(\"contextmenu\",function(){d.fire(\"SelectionChange\")}),d.on(\"SelectionChange\",function(){var a=d.selection.getStart(!0);!b.range&&d.selection.isCollapsed()||!e(a)&&d.dom.isChildOf(a,d.getBody())&&d.nodeChanged({selectionChange:!0})}),d.on(\"MouseUp\",function(a){a.isDefaultPrevented()||(\"IMG\"==d.selection.getNode().nodeName?c.setEditorTimeout(d,function(){d.nodeChanged()}):d.nodeChanged())}),this.nodeChanged=function(a){var b,c,e,f=d.selection;d.initialized&&f&&!d.settings.disable_nodechange&&!d.readonly&&(e=d.getBody(),b=f.getStart(!0)||e,b.ownerDocument==d.getDoc()&&d.dom.isChildOf(b,e)||(b=e),c=[],d.dom.getParent(b,function(a){return a===e||void c.push(a)}),a=a||{},a.element=b,a.parents=c,d.fire(\"NodeChange\",a))}}}),g(\"6z\",[\"1k\",\"69\",\"1p\",\"a\",\"1j\",\"h\",\"43\",\"5\"],function(a,b,c,d,e,f,g,h){var i=e.isContentEditableFalse,j=function(a){return a&&/^(TD|TH)$/i.test(a.nodeName)};return function(c,e){function f(a,b){var d,e,f,h,i,j=g.collapse(a.getBoundingClientRect(),b);return\"BODY\"==c.tagName?(d=c.ownerDocument.documentElement,e=c.scrollLeft||d.scrollLeft,f=c.scrollTop||d.scrollTop):(i=c.getBoundingClientRect(),e=c.scrollLeft-i.left,f=c.scrollTop-i.top),j.left+=e,j.right+=e,j.top+=f,j.bottom+=f,j.width=1,h=a.offsetWidth-a.clientWidth,h>0&&(b&&(h*=-1),j.left+=h,j.right+=h),j}function k(){var b,e,f,g,h;for(b=d(\"*[contentEditable=false]\",c),g=0;g<b.length;g++)e=b[g],f=e.previousSibling,a.endsWithCaretContainer(f)&&(h=f.data,1==h.length?f.parentNode.removeChild(f):f.deleteData(h.length-1,1)),f=e.nextSibling,a.startsWithCaretContainer(f)&&(h=f.data,1==h.length?f.parentNode.removeChild(f):f.deleteData(0,1));return null}function l(b,g){var h,k;return m(),j(g)?null:e(g)?(s=a.insertBlock(\"p\",g,b),h=f(g,b),d(s).css(\"top\",h.top),r=d('<div class=\"mce-visual-caret\" data-mce-bogus=\"all\"></div>').css(h).appendTo(c),b&&r.addClass(\"mce-visual-caret-before\"),n(),k=g.ownerDocument.createRange(),k.setStart(s,0),k.setEnd(s,0),k):(s=a.insertInline(g,b),k=g.ownerDocument.createRange(),i(s.nextSibling)?(k.setStart(s,0),k.setEnd(s,0)):(k.setStart(s,1),k.setEnd(s,1)),k)}function m(){k(),s&&(b.remove(s),s=null),r&&(r.remove(),r=null),clearInterval(q)}function n(){q=h.setInterval(function(){d(\"div.mce-visual-caret\",c).toggleClass(\"mce-visual-caret-hidden\")},500)}function o(){h.clearInterval(q)}function p(){return\".mce-visual-caret {position: absolute;background-color: black;background-color: currentcolor;}.mce-visual-caret-hidden {display: none;}*[data-mce-caret] {position: absolute;left: -1000px;right: auto;top: 0;margin: 0;padding: 0;}\"}var q,r,s;return{show:l,hide:m,getCss:p,destroy:o}}});g(\"7g\",[],function(){var a=function(a){var b,c,d,e;return e=a.getBoundingClientRect(),b=a.ownerDocument,c=b.documentElement,d=b.defaultView,{top:e.top+d.pageYOffset-c.clientTop,left:e.left+d.pageXOffset-c.clientLeft}},b=function(b){return b.inline?a(b.getBody()):{left:0,top:0}},c=function(a){var b=a.getBody();return a.inline?{left:b.scrollLeft,top:b.scrollTop}:{left:0,top:0}},d=function(a){var b=a.getBody(),c=a.getDoc().documentElement,d={left:b.scrollLeft,top:b.scrollTop},e={left:b.scrollLeft||c.scrollLeft,top:b.scrollTop||c.scrollTop};return a.inline?d:e},e=function(b,c){if(c.target.ownerDocument!==b.getDoc()){var e=a(b.getContentAreaContainer()),f=d(b);return{left:c.pageX-e.left+f.left,top:c.pageY-e.top+f.top}}return{left:c.pageX,top:c.pageY}},f=function(a,b,c){return{pageX:c.left-a.left+b.left,pageY:c.top-a.top+b.top}},g=function(a,d){return f(b(a),c(a),e(a,d))};return{calc:g}});g(\"71\",[\"1j\",\"1g\",\"1w\",\"5\",\"e\",\"7g\"],function(a,b,c,d,e,f){var g=a.isContentEditableFalse,h=a.isContentEditableTrue,i=function(a,b){return g(b)&&b!==a},j=function(a,b,c){return b!==c&&!a.dom.isChildOf(b,c)&&!g(b)},k=function(a){var b=a.cloneNode(!0);return b.removeAttribute(\"data-mce-selected\"),b},l=function(a,b,c,d){var e=b.cloneNode(!0);a.dom.setStyles(e,{width:c,height:d}),a.dom.setAttrib(e,\"data-mce-selected\",null);var f=a.dom.create(\"div\",{\"class\":\"mce-drag-container\",\"data-mce-bogus\":\"all\",unselectable:\"on\",contenteditable:\"false\"});return a.dom.setStyles(f,{position:\"absolute\",opacity:.5,overflow:\"hidden\",border:0,padding:0,margin:0,width:c,height:d}),a.dom.setStyles(e,{margin:0,boxSizing:\"border-box\"}),f.appendChild(e),f},m=function(a,b){a.parentNode!==b&&b.appendChild(a)},n=function(a,b,c,d,e,f){var g=0,h=0;a.style.left=b.pageX+\"px\",a.style.top=b.pageY+\"px\",b.pageX+c>e&&(g=b.pageX+c-e),b.pageY+d>f&&(h=b.pageY+d-f),a.style.width=c-g+\"px\",a.style.height=d-h+\"px\"},o=function(a){a&&a.parentNode&&a.parentNode.removeChild(a)},p=function(a){return 0===a.button},q=function(a){return a.element},r=function(a,b){return{pageX:b.pageX-a.relX,pageY:b.pageY+5}},s=function(a,d){return function(e){if(p(e)){var f=b.find(d.dom.getParents(e.target),c.or(g,h));if(i(d.getBody(),f)){var j=d.dom.getPos(f),k=d.getBody(),m=d.getDoc().documentElement;a.element=f,a.screenX=e.screenX,a.screenY=e.screenY,a.maxX=(d.inline?k.scrollWidth:m.offsetWidth)-2,a.maxY=(d.inline?k.scrollHeight:m.offsetHeight)-2,a.relX=e.pageX-j.x,a.relY=e.pageY-j.y,a.width=f.offsetWidth,a.height=f.offsetHeight,a.ghost=l(d,f,a.width,a.height)}}}},t=function(a,b){var c=d.throttle(function(a,c){b._selectionOverrides.hideFakeCaret(),b.selection.placeCaretAt(a,c)},0);return function(d){var e=Math.max(Math.abs(d.screenX-a.screenX),Math.abs(d.screenY-a.screenY));if(q(a)&&!a.dragging&&e>10){var g=b.fire(\"dragstart\",{target:a.element});if(g.isDefaultPrevented())return;a.dragging=!0,b.focus()}if(a.dragging){var h=r(a,f.calc(b,d));m(a.ghost,b.getBody()),n(a.ghost,h,a.width,a.height,a.maxX,a.maxY),c(d.clientX,d.clientY)}}},u=function(a){var b=a.getSel().getRangeAt(0),c=b.startContainer;return 3===c.nodeType?c.parentNode:c},v=function(a,b){return function(c){if(a.dragging&&j(b,u(b.selection),a.element)){var d=k(a.element),e=b.fire(\"drop\",{targetClone:d,clientX:c.clientX,clientY:c.clientY});e.isDefaultPrevented()||(d=e.targetClone,b.undoManager.transact(function(){o(a.element),b.insertContent(b.dom.getOuterHTML(d)),b._selectionOverrides.hideFakeCaret()}))}x(a)}},w=function(a,b){return function(){x(a),a.dragging&&b.fire(\"dragend\")}},x=function(a){a.dragging=!1,a.element=null,o(a.ghost)},y=function(a){var b,c,d,f,g,h,i={};b=e.DOM,h=document,c=s(i,a),d=t(i,a),f=v(i,a),g=w(i,a),a.on(\"mousedown\",c),a.on(\"mousemove\",d),a.on(\"mouseup\",f),b.bind(h,\"mousemove\",d),b.bind(h,\"mouseup\",g),a.on(\"remove\",function(){b.unbind(h,\"mousemove\",d),b.unbind(h,\"mouseup\",g)})},z=function(a){a.on(\"drop\",function(b){var c=\"undefined\"!=typeof b.clientX?a.getDoc().elementFromPoint(b.clientX,b.clientY):null;(g(c)||g(a.dom.getContentEditableParent(c)))&&b.preventDefault()})},A=function(a){y(a),z(a)};return{init:A}}),g(\"7k\",[],function(){var a=function(a){return void 0!==a.style};return{isSupported:a}}),g(\"7h\",[\"60\",\"3x\",\"63\",\"4z\",\"5a\",\"6o\",\"1r\",\"4d\",\"7k\",\"6l\",\"3z\",\"49\",\"4t\"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n=function(b,c,d){if(!a.isString(d))throw l.error(\"Invalid call to CSS.set. Property \",c,\":: Value \",d,\":: Element \",b),new k(\"CSS value must be a string: \"+d);i.isSupported(b)&&b.style.setProperty(c,d)},o=function(a,b){i.isSupported(a)&&a.style.removeProperty(b)},p=function(a,b,c){var d=a.dom();n(d,b,c)},q=function(a,b){var d=a.dom();c.each(b,function(a,b){n(d,b,a)})},r=function(a,b){var d=a.dom();c.each(b,function(a,b){a.fold(function(){o(d,b)},function(a){n(d,b,a)})})},s=function(a,b){var c=a.dom(),d=m.getComputedStyle(c),e=d.getPropertyValue(b),g=\"\"!==e||f.inBody(a)?e:t(c,b);return null===g?void 0:g},t=function(a,b){return i.isSupported(a)?a.style.getPropertyValue(b):\"\"},u=function(a,b){var c=a.dom(),e=t(c,b);return d.from(e).filter(function(a){return a.length>0})},v=function(a,b,c){var d=g.fromTag(a);p(d,b,c);var e=u(d,b);return e.isSome()},w=function(a,b){var c=a.dom();o(c,b),e.has(a,\"style\")&&\"\"===j.trim(e.get(a,\"style\"))&&e.remove(a,\"style\")},x=function(a,b){var c=e.get(a,\"style\"),d=b(a),f=void 0===c?e.remove:e.set;return f(a,\"style\",c),d},y=function(a,b){var c=a.dom(),d=b.dom();i.isSupported(c)&&i.isSupported(d)&&(d.style.cssText=c.style.cssText)},z=function(a){return a.dom().offsetWidth},A=function(a,b,c){u(a,c).each(function(a){u(b,c).isNone()&&p(b,c,a)})},B=function(a,c,d){h.isElement(a)&&h.isElement(c)&&b.each(d,function(b){A(a,c,b)})};return{copy:y,set:p,preserve:x,setAll:q,setOptions:r,remove:w,get:s,getRaw:u,isValidValue:v,reflow:z,transfer:B}}),g(\"72\",[\"1m\",\"1r\",\"7h\",\"59\"],function(a,b,c,d){var e=function(a,b){var c=b.dom();return c[a]},f=function(a,b){return parseInt(c.get(b,a),10)},g=a.curry(e,\"clientWidth\"),h=a.curry(e,\"clientHeight\"),i=a.curry(f,\"margin-top\"),j=a.curry(f,\"margin-left\"),k=function(a){return a.dom().getBoundingClientRect()},l=function(a,b,c){var d=g(a),e=h(a);return b>=0&&c>=0&&b<=d&&c<=e},m=function(a,b,c,d){var e=k(b),f=a?e.left+b.dom().clientLeft+j(b):0,g=a?e.top+b.dom().clientTop+i(b):0,h=c-f,l=d-g;return{x:h,y:l}},n=function(a,c,e){var f=b.fromDom(a.getBody()),g=a.inline?f:d.documentElement(f),h=m(a.inline,g,c,e);return l(g,h.x,h.y)};return{isXYInContentArea:n}}),g(\"6h\",[\"1k\",\"1p\",\"5i\",\"4m\",\"6z\",\"70\",\"1j\",\"1n\",\"71\",\"72\",\"6\",\"73\",\"5\",\"p\"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){function o(g){function o(a){return g.dom.hasClass(a,\"mce-offscreen-selection\")}function t(){var a=g.dom.get(M);return a?a.getElementsByTagName(\"*\")[0]:a}function u(a){return g.dom.isBlock(a)}function v(a){a&&g.selection.setRng(a)}function w(){return g.selection.getRng()}function x(a,b){g.selection.scrollIntoView(a,b)}function y(a,b,c){var d;return d=g.fire(\"ShowCaret\",{target:b,direction:a,before:c}),d.isDefaultPrevented()?null:(x(b,a===-1),L.show(c,b))}function z(a,d){return d=c.normalizeRange(a,K,d),a==-1?b.fromRangeStart(d):b.fromRangeEnd(d)}function A(b){b.hasAttribute(\"data-mce-caret\")&&(a.showCaretContainerBlock(b),v(w()),x(b[0]))}function B(){function a(a){for(var b=g.getBody();a&&a!=b;){if(p(a)||q(a))return a;a=a.parentNode}return null}function c(b){var c=!1;b.on(\"touchstart\",function(){c=!1}),b.on(\"touchmove\",function(){c=!0}),b.on(\"touchend\",function(d){var e=a(d.target);q(e)&&(c||(d.preventDefault(),F(l.selectNode(b,e))))})}g.on(\"mouseup\",function(a){var b=w();b.collapsed&&j.isXYInContentArea(g,a.clientX,a.clientY)&&v(l.renderCaretAtRange(g,b))}),g.on(\"click\",function(b){var c;c=a(b.target),c&&(q(c)&&(b.preventDefault(),g.focus()),p(c)&&g.dom.isChildOf(c,g.selection.getNode())&&G())}),g.on(\"blur NewBlock\",function(){G(),I()});var e=function(a){var c=new d(a);if(!a.firstChild)return!1;var e=b.before(a.firstChild),f=c.next(e);return f&&!s(f)&&!r(f)},u=function(a,b){var c=g.dom.getParent(a,g.dom.isBlock),d=g.dom.getParent(b,g.dom.isBlock);return c===d},x=function(a,b){var c=g.dom.getParent(a,g.dom.isBlock),d=g.dom.getParent(b,g.dom.isBlock);return c&&!u(c,d)&&e(c)};c(g),g.on(\"mousedown\",function(b){var c;if(j.isXYInContentArea(g,b.clientX,b.clientY)!==!1)if(c=a(b.target))q(c)?(b.preventDefault(),F(l.selectNode(g,c))):(G(),p(c)&&b.shiftKey||h.isXYWithinRange(b.clientX,b.clientY,g.selection.getRng())||g.selection.placeCaretAt(b.clientX,b.clientY));else{G(),I();var d=f.closestCaret(K,b.clientX,b.clientY);d&&(x(b.target,d.node)||(b.preventDefault(),g.getBody().focus(),v(y(1,d.node,d.before))))}}),g.on(\"keypress\",function(a){if(!n.modifierPressed(a))switch(a.keyCode){default:q(g.selection.getNode())&&a.preventDefault()}}),g.on(\"getSelectionRange\",function(a){var b=a.range;if(J){if(!J.parentNode)return void(J=null);b=b.cloneRange(),b.selectNode(J),a.range=b}}),g.on(\"setSelectionRange\",function(a){var b;b=F(a.range,a.forward),b&&(a.range=b)}),g.on(\"AfterSetSelectionRange\",function(a){var b=a.range;E(b)||I(),o(b.startContainer.parentNode)||G()}),g.on(\"focus\",function(){m.setEditorTimeout(g,function(){g.selection.setRng(l.renderRangeCaret(g,g.selection.getRng()))},0)}),g.on(\"copy\",function(a){var b=a.clipboardData;if(!a.isDefaultPrevented()&&a.clipboardData&&!k.ie){var c=t();c&&(a.preventDefault(),b.clearData(),b.setData(\"text/html\",c.outerHTML),b.setData(\"text/plain\",c.outerText))}}),i.init(g)}function C(){var a=g.contentStyles,b=\".mce-content-body\";a.push(L.getCss()),a.push(b+\" .mce-offscreen-selection {position: absolute;left: -9999999999px;max-width: 1000000px;}\"+b+\" *[contentEditable=false] {cursor: default;}\"+b+\" *[contentEditable=true] {cursor: text;}\")}function D(b){return a.isCaretContainer(b)||a.startsWithCaretContainer(b)||a.endsWithCaretContainer(b)}function E(a){return D(a.startContainer)||D(a.endContainer);\n}function F(a,b){var c,d,e,f,h,i,j,l,m,n,o=g.$,p=g.dom;if(!a)return null;if(a.collapsed){if(!E(a))if(b===!1){if(l=z(-1,a),q(l.getNode(!0)))return y(-1,l.getNode(!0),!1);if(q(l.getNode()))return y(-1,l.getNode(),!l.isAtEnd())}else{if(l=z(1,a),q(l.getNode()))return y(1,l.getNode(),!l.isAtEnd());if(q(l.getNode(!0)))return y(1,l.getNode(!0),!1)}return null}return f=a.startContainer,h=a.startOffset,i=a.endOffset,3==f.nodeType&&0==h&&q(f.parentNode)&&(f=f.parentNode,h=p.nodeIndex(f),f=f.parentNode),1!=f.nodeType?null:(i==h+1&&(c=f.childNodes[h]),q(c)?(m=n=c.cloneNode(!0),j=g.fire(\"ObjectSelected\",{target:c,targetClone:m}),j.isDefaultPrevented()?null:(m=j.targetClone,d=o(\"#\"+M),0===d.length&&(d=o('<div data-mce-bogus=\"all\" class=\"mce-offscreen-selection\"></div>').attr(\"id\",M),d.appendTo(g.getBody())),a=g.dom.createRng(),m===n&&k.ie?(d.empty().append('<p style=\"font-size: 0\" data-mce-bogus=\"all\">\\xa0</p>').append(m),a.setStartAfter(d[0].firstChild.firstChild),a.setEndAfter(m)):(d.empty().append(\"\\xa0\").append(m).append(\"\\xa0\"),a.setStart(d[0].firstChild,1),a.setEnd(d[0].lastChild,0)),d.css({top:p.getPos(c,g.getBody()).y}),d[0].focus(),e=g.selection.getSel(),e.removeAllRanges(),e.addRange(a),g.$(\"*[data-mce-selected]\").removeAttr(\"data-mce-selected\"),c.setAttribute(\"data-mce-selected\",1),J=c,I(),a)):null)}function G(){J&&(J.removeAttribute(\"data-mce-selected\"),g.$(\"#\"+M).remove(),J=null)}function H(){L.destroy(),J=null}function I(){L.hide()}var J,K=g.getBody(),L=new e(g.getBody(),u),M=\"sel-\"+g.dom.uniqueId();return k.ceFalse&&(B(),C()),{showCaret:y,showBlockCaretContainer:A,hideFakeCaret:I,destroy:H}}var p=g.isContentEditableTrue,q=g.isContentEditableFalse,r=c.isAfterContentEditableFalse,s=c.isBeforeContentEditableFalse;return o}),g(\"74\",[\"e\"],function(a){function b(b,c,d){for(var e=[];c&&c!=b;c=c.parentNode)e.push(a.nodeIndex(c,d));return e}function c(a,b){var c,d,e;for(d=a,c=b.length-1;c>=0;c--){if(e=d.childNodes,b[c]>e.length-1)return null;d=e[b[c]]}return d}return{create:b,resolve:c}}),g(\"6i\",[\"p\",\"h\",\"c\",\"74\",\"i\",\"d\",\"6\",\"9\",\"5\",\"1k\",\"1p\",\"4m\"],function(a,b,c,d,e,f,g,h,i,j,k,l){return function(c){function d(a,b){try{c.getDoc().execCommand(a,!1,b)}catch(a){}}function m(){var a=c.getDoc().documentMode;return a?a:6}function n(a){return a.isDefaultPrevented()}function o(a){var b,d;a.dataTransfer&&(c.selection.isCollapsed()&&\"IMG\"==a.target.tagName&&_.select(a.target),b=c.selection.getContent(),b.length>0&&(d=ga+escape(c.id)+\",\"+escape(b),a.dataTransfer.setData(ha,d)))}function p(a){var b;return a.dataTransfer&&(b=a.dataTransfer.getData(ha),b&&b.indexOf(ga)>=0)?(b=b.substr(ga.length).split(\",\"),{id:unescape(b[0]),html:unescape(b[1])}):null}function q(a,b){c.queryCommandSupported(\"mceInsertClipboardContent\")?c.execCommand(\"mceInsertClipboardContent\",!1,{content:a,internal:b}):c.execCommand(\"mceInsertContent\",!1,a)}function r(){function a(a){var b=$.create(\"body\"),c=a.cloneContents();return b.appendChild(c),_.serializer.serialize(b,{format:\"html\"})}function d(d){if(!d.setStart){if(d.item)return!1;var e=d.duplicate();return e.moveToElementText(c.getBody()),b.compareRanges(d,e)}var f=a(d),g=$.createRng();g.selectNode(c.getBody());var h=a(g);return f===h}c.on(\"keydown\",function(a){var b,e,f=a.keyCode;if(!n(a)&&(f==Z||f==Y)){if(b=c.selection.isCollapsed(),e=c.getBody(),b&&!$.isEmpty(e))return;if(!b&&!d(c.selection.getRng()))return;a.preventDefault(),c.setContent(\"\"),e.firstChild&&$.isBlock(e.firstChild)?c.selection.setCursorLocation(e.firstChild,0):c.selection.setCursorLocation(e,0),c.nodeChanged()}})}function s(){c.shortcuts.add(\"meta+a\",null,\"SelectAll\")}function t(){c.settings.content_editable||$.bind(c.getDoc(),\"mousedown mouseup\",function(a){var b;if(a.target==c.getDoc().documentElement)if(b=_.getRng(),c.getBody().focus(),\"mousedown\"==a.type){if(j.isCaretContainer(b.startContainer))return;_.placeCaretAt(a.clientX,a.clientY)}else _.setRng(b)})}function u(){c.on(\"keydown\",function(a){if(!n(a)&&a.keyCode===Y){if(!c.getBody().getElementsByTagName(\"hr\").length)return;if(_.isCollapsed()&&0===_.getRng(!0).startOffset){var b=_.getNode(),d=b.previousSibling;if(\"HR\"==b.nodeName)return $.remove(b),void a.preventDefault();d&&d.nodeName&&\"hr\"===d.nodeName.toLowerCase()&&($.remove(d),a.preventDefault())}}})}function v(){window.Range.prototype.getClientRects||c.on(\"mousedown\",function(a){if(!n(a)&&\"HTML\"===a.target.nodeName){var b=c.getBody();b.blur(),i.setEditorTimeout(c,function(){b.focus()})}})}function w(){c.on(\"click\",function(a){var b=a.target;/^(IMG|HR)$/.test(b.nodeName)&&\"false\"!==$.getContentEditableParent(b)&&(a.preventDefault(),c.selection.select(b),c.nodeChanged()),\"A\"==b.nodeName&&$.hasClass(b,\"mce-item-anchor\")&&(a.preventDefault(),_.select(b))})}function x(){function a(){var a=$.getAttribs(_.getStart().cloneNode(!1));return function(){var b=_.getStart();b!==c.getBody()&&($.setAttrib(b,\"style\",null),X(a,function(a){b.setAttributeNode(a.cloneNode(!0))}))}}function b(){return!_.isCollapsed()&&$.getParent(_.getStart(),$.isBlock)!=$.getParent(_.getEnd(),$.isBlock)}c.on(\"keypress\",function(d){var e;if(!n(d)&&(8==d.keyCode||46==d.keyCode)&&b())return e=a(),c.getDoc().execCommand(\"delete\",!1,null),e(),d.preventDefault(),!1}),$.bind(c.getDoc(),\"cut\",function(d){var e;!n(d)&&b()&&(e=a(),i.setEditorTimeout(c,function(){e()}))})}function y(){document.body.setAttribute(\"role\",\"application\")}function z(){c.on(\"keydown\",function(a){if(!n(a)&&a.keyCode===Y&&_.isCollapsed()&&0===_.getRng(!0).startOffset){var b=_.getNode().previousSibling;if(b&&b.nodeName&&\"table\"===b.nodeName.toLowerCase())return a.preventDefault(),!1}})}function A(){m()>7||(d(\"RespectVisibilityInDesign\",!0),c.contentStyles.push(\".mceHideBrInPre pre br {display: none}\"),$.addClass(c.getBody(),\"mceHideBrInPre\"),ba.addNodeFilter(\"pre\",function(a){for(var b,c,d,f,g=a.length;g--;)for(b=a[g].getAll(\"br\"),c=b.length;c--;)d=b[c],f=d.prev,f&&3===f.type&&\"\\n\"!=f.value.charAt(f.value-1)?f.value+=\"\\n\":d.parent.insert(new e(\"#text\",3),d,!0).value=\"\\n\"}),ca.addNodeFilter(\"pre\",function(a){for(var b,c,d,e,f=a.length;f--;)for(b=a[f].getAll(\"br\"),c=b.length;c--;)d=b[c],e=d.prev,e&&3==e.type&&(e.value=e.value.replace(/\\r?\\n$/,\"\"))}))}function B(){$.bind(c.getBody(),\"mouseup\",function(){var a,b=_.getNode();\"IMG\"==b.nodeName&&((a=$.getStyle(b,\"width\"))&&($.setAttrib(b,\"width\",a.replace(/[^0-9%]+/g,\"\")),$.setStyle(b,\"width\",\"\")),(a=$.getStyle(b,\"height\"))&&($.setAttrib(b,\"height\",a.replace(/[^0-9%]+/g,\"\")),$.setStyle(b,\"height\",\"\")))})}function C(){c.on(\"keydown\",function(b){var d,e,f,g,h;if(!n(b)&&b.keyCode==a.BACKSPACE&&(d=_.getRng(),e=d.startContainer,f=d.startOffset,g=$.getRoot(),h=e,d.collapsed&&0===f)){for(;h&&h.parentNode&&h.parentNode.firstChild==h&&h.parentNode!=g;)h=h.parentNode;\"BLOCKQUOTE\"===h.tagName&&(c.formatter.toggle(\"blockquote\",null,h),d=$.createRng(),d.setStart(e,0),d.setEnd(e,0),_.setRng(d))}})}function D(){function a(){U(),d(\"StyleWithCSS\",!1),d(\"enableInlineTableEditing\",!1),aa.object_resizing||d(\"enableObjectResizing\",!1)}aa.readonly||c.on(\"BeforeExecCommand MouseDown\",a)}function E(){function a(){X($.select(\"a\"),function(a){var b=a.parentNode,c=$.getRoot();if(b.lastChild===a){for(;b&&!$.isBlock(b);){if(b.parentNode.lastChild!==b||b===c)return;b=b.parentNode}$.add(b,\"br\",{\"data-mce-bogus\":1})}})}c.on(\"SetContent ExecCommand\",function(b){\"setcontent\"!=b.type&&\"mceInsertLink\"!==b.command||a()})}function F(){aa.forced_root_block&&c.on(\"init\",function(){d(\"DefaultParagraphSeparator\",aa.forced_root_block)})}function G(){c.on(\"keydown\",function(a){var b;n(a)||a.keyCode!=Y||(b=c.getDoc().selection.createRange(),b&&b.item&&(a.preventDefault(),c.undoManager.beforeChange(),$.remove(b.item(0)),c.undoManager.add()))})}function H(){var a;m()>=10&&(a=\"\",X(\"p div h1 h2 h3 h4 h5 h6\".split(\" \"),function(b,c){a+=(c>0?\",\":\"\")+b+\":empty\"}),c.contentStyles.push(a+\"{padding-right: 1px !important}\"))}function I(){m()<9&&(ba.addNodeFilter(\"noscript\",function(a){for(var b,c,d=a.length;d--;)b=a[d],c=b.firstChild,c&&b.attr(\"data-mce-innertext\",c.value)}),ca.addNodeFilter(\"noscript\",function(a){for(var b,c,d,g=a.length;g--;)b=a[g],c=a[g].firstChild,c?c.value=f.decode(c.value):(d=b.attributes.map[\"data-mce-innertext\"],d&&(b.attr(\"data-mce-innertext\",null),c=new e(\"#text\",3),c.value=d,c.raw=!0,b.append(c)))}))}function J(){function a(a,b){var c=h.createTextRange();try{c.moveToPoint(a,b)}catch(a){c=null}return c}function b(b){var d;b.button?(d=a(b.x,b.y),d&&(d.compareEndPoints(\"StartToStart\",e)>0?d.setEndPoint(\"StartToStart\",e):d.setEndPoint(\"EndToEnd\",e),d.select())):c()}function c(){var a=g.selection.createRange();e&&!a.item&&0===a.compareEndPoints(\"StartToEnd\",a)&&e.select(),$.unbind(g,\"mouseup\",c),$.unbind(g,\"mousemove\",b),e=d=0}var d,e,f,g=$.doc,h=g.body;g.documentElement.unselectable=!0,$.bind(g,\"mousedown contextmenu\",function(h){if(\"HTML\"===h.target.nodeName){if(d&&c(),f=g.documentElement,f.scrollHeight>f.clientHeight)return;d=1,e=a(h.x,h.y),e&&($.bind(g,\"mouseup\",c),$.bind(g,\"mousemove\",b),$.getRoot().focus(),e.select())}})}function K(){c.on(\"keyup focusin mouseup\",function(b){65==b.keyCode&&a.metaKeyPressed(b)||_.normalize()},!0)}function L(){c.contentStyles.push(\"img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}\")}function M(){c.inline||c.on(\"keydown\",function(){document.activeElement==document.body&&c.getWin().focus()})}function N(){c.inline||(c.contentStyles.push(\"body {min-height: 150px}\"),c.on(\"click\",function(a){var b;if(\"HTML\"==a.target.nodeName){if(g.ie>11)return void c.getBody().focus();b=c.selection.getRng(),c.getBody().focus(),c.selection.setRng(b),c.selection.normalize(),c.nodeChanged()}}))}function O(){g.mac&&c.on(\"keydown\",function(b){!a.metaKeyPressed(b)||b.shiftKey||37!=b.keyCode&&39!=b.keyCode||(b.preventDefault(),c.selection.getSel().modify(\"move\",37==b.keyCode?\"backward\":\"forward\",\"lineboundary\"))})}function P(){d(\"AutoUrlDetect\",!1)}function Q(){c.on(\"click\",function(a){var b=a.target;do if(\"A\"===b.tagName)return void a.preventDefault();while(b=b.parentNode)}),c.contentStyles.push(\".mce-content-body {-webkit-touch-callout: none}\")}function R(){c.on(\"init\",function(){c.dom.bind(c.getBody(),\"submit\",function(a){a.preventDefault()})})}function S(){ba.addNodeFilter(\"br\",function(a){for(var b=a.length;b--;)\"Apple-interchange-newline\"==a[b].attr(\"class\")&&a[b].remove()})}function T(){c.on(\"dragstart\",function(a){o(a)}),c.on(\"drop\",function(a){if(!n(a)){var d=p(a);if(d&&d.id!=c.id){a.preventDefault();var e=b.getCaretRangeFromPoint(a.x,a.y,c.getDoc());_.setRng(e),q(d.html,!0)}}})}function U(){}function V(){var a;return!da||c.removed?0:(a=c.selection.getSel(),!a||!a.rangeCount||0===a.rangeCount)}function W(){function b(a){var b=new l(a.getBody()),c=a.selection.getRng(),d=k.fromRangeStart(c),e=k.fromRangeEnd(c),f=b.prev(d),g=b.next(e);return!a.selection.isCollapsed()&&(!f||f.isAtStart()&&d.isEqual(f))&&(!g||g.isAtEnd()&&d.isEqual(g))}c.on(\"keypress\",function(d){!n(d)&&!_.isCollapsed()&&d.charCode>31&&!a.metaKeyPressed(d)&&b(c)&&(d.preventDefault(),c.setContent(String.fromCharCode(d.charCode)),c.selection.select(c.getBody(),!0),c.selection.collapse(!1),c.nodeChanged())}),c.on(\"keydown\",function(a){var d=a.keyCode;n(a)||d!=Z&&d!=Y||b(c)&&(a.preventDefault(),c.setContent(\"\"),c.nodeChanged())})}var X=h.each,Y=a.BACKSPACE,Z=a.DELETE,$=c.dom,_=c.selection,aa=c.settings,ba=c.parser,ca=c.serializer,da=g.gecko,ea=g.ie,fa=g.webkit,ga=\"data:text/mce-internal,\",ha=ea?\"Text\":\"URL\";return C(),r(),g.windowsPhone||K(),fa&&(W(),t(),w(),F(),R(),z(),S(),g.iOS?(M(),N(),Q()):s()),ea&&g.ie<11&&(u(),y(),A(),B(),G(),H(),I(),J()),g.ie>=11&&(N(),z()),g.ie&&(s(),P(),T()),da&&(W(),u(),v(),x(),D(),E(),L(),O(),z()),{refreshContentEditable:U,isHidden:V}}}),g(\"5r\",[\"22\",\"4t\",\"6c\",\"e\",\"s\",\"o\",\"6d\",\"2b\",\"6e\",\"t\",\"l\",\"i\",\"j\",\"6f\",\"6g\",\"6h\",\"u\",\"5\",\"6i\",\"9\"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t){var u=d.DOM,v=function(a){var b=new k(a.settings,a.schema);return b.addAttributeFilter(\"src,href,style,tabindex\",function(b,c){for(var d,e,f,g=b.length,h=a.dom;g--;)if(d=b[g],e=d.attr(c),f=\"data-mce-\"+c,!d.attributes.map[f]){if(0===e.indexOf(\"data:\")||0===e.indexOf(\"blob:\"))continue;\"style\"===c?(e=h.serializeStyle(h.parseStyle(e),d.name),e.length||(e=null),d.attr(f,e),d.attr(c,e)):\"tabindex\"===c?(d.attr(f,e),d.attr(c,null)):d.attr(f,a.convertURL(e,c,d.name))}}),b.addNodeFilter(\"script\",function(a){for(var b,c,d=a.length;d--;)b=a[d],c=b.attr(\"type\")||\"no/type\",0!==c.indexOf(\"mce-\")&&b.attr(\"type\",\"mce-\"+c)}),b.addNodeFilter(\"#cdata\",function(a){for(var b,c=a.length;c--;)b=a[c],b.type=8,b.name=\"#comment\",b.value=\"[CDATA[\"+b.value+\"]]\"}),b.addNodeFilter(\"p,h1,h2,h3,h4,h5,h6,div\",function(b){for(var c,d=b.length,e=a.schema.getNonEmptyElements();d--;)c=b[d],c.isEmpty(e)&&0===c.getAll(\"br\").length&&(c.append(new l(\"br\",1)).shortEnded=!0)}),b},w=function(a){a.settings.auto_focus&&r.setEditorTimeout(a,function(){var b;b=a.settings.auto_focus===!0?a:a.editorManager.get(a.settings.auto_focus),b.destroyed||b.focus()},100)},x=function(a){a.bindPendingEventDelegates(),a.initialized=!0,a.fire(\"init\"),a.focus(!0),a.nodeChanged({initial:!0}),a.execCallback(\"init_instance_callback\",a),w(a)},y=function(a){return a.inline?u.styleSheetLoader:a.dom.styleSheetLoader},z=function(k,l){var r,w,z=k.settings,A=k.getElement(),B=k.getDoc();z.inline||(k.getElement().style.visibility=k.orgVisibility),l||z.content_editable||(B.open(),B.write(k.iframeHTML),B.close()),z.content_editable&&(k.on(\"remove\",function(){var a=this.getBody();u.removeClass(a,\"mce-content-body\"),u.removeClass(a,\"mce-edit-focus\"),u.setAttrib(a,\"contentEditable\",null)}),u.addClass(A,\"mce-content-body\"),k.contentDocument=B=z.content_document||a,k.contentWindow=z.content_window||b,k.bodyElement=A,z.content_document=z.content_window=null,z.root_name=A.nodeName.toLowerCase()),r=k.getBody(),r.disabled=!0,k.readonly=z.readonly,k.readonly||(k.inline&&\"static\"===u.getStyle(r,\"position\",!0)&&(r.style.position=\"relative\"),r.contentEditable=k.getParam(\"content_editable_state\",!0)),r.disabled=!1,k.editorUpload=new g(k),k.schema=new m(z),k.dom=new d(B,{keep_values:!0,url_converter:k.convertURL,url_converter_scope:k,hex_colors:z.force_hex_style_colors,class_filter:z.class_filter,update_styles:!0,root_element:k.inline?k.getBody():null,collect:z.content_editable,schema:k.schema,onSetAttrib:function(a){k.fire(\"SetAttrib\",a)}}),k.parser=v(k),k.serializer=new f(z,k),k.selection=new e(k.dom,k.getWin(),k.serializer,k),k.formatter=new j(k),k.undoManager=new q(k),k._nodeChangeDispatcher=new o(k),k._selectionOverrides=new p(k),c.setup(k),n.setup(k),i.setup(k),k.fire(\"PreInit\"),z.browser_spellcheck||z.gecko_spellcheck||(B.body.spellcheck=!1,u.setAttrib(r,\"spellcheck\",\"false\")),k.quirks=new s(k),k.fire(\"PostRender\"),z.directionality&&(r.dir=z.directionality),z.nowrap&&(r.style.whiteSpace=\"nowrap\"),z.protect&&k.on(\"BeforeSetContent\",function(a){t.each(z.protect,function(b){a.content=a.content.replace(b,function(a){return\"<!--mce:protected \"+escape(a)+\"-->\"})})}),k.on(\"SetContent\",function(){k.addVisual(k.getBody())}),z.padd_empty_editor&&k.on(\"PostProcess\",function(a){a.content=a.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\\s|\\u00a0|<br \\/>|)<\\/p>[\\r\\n]*|<br \\/>[\\r\\n]*)$/,\"\")}),k.load({initial:!0,format:\"html\"}),k.startContent=k.getContent({format:\"raw\"}),k.on(\"compositionstart compositionend\",function(a){k.composing=\"compositionstart\"===a.type}),k.contentStyles.length>0&&(w=\"\",t.each(k.contentStyles,function(a){w+=a+\"\\r\\n\"}),k.dom.addStyle(w)),y(k).loadAll(k.contentCSS,function(a){x(k)},function(a){x(k),h.contentCssError(k,a)})};return{initContentBody:z}}),g(\"4v\",[\"g\"],function(a){return a.PluginManager}),g(\"4w\",[\"g\"],function(a){return a.ThemeManager}),g(\"4u\",[\"22\",\"4t\",\"e\",\"6\",\"5r\",\"4v\",\"4w\",\"9\",\"2a\"],function(a,b,c,d,e,f,g,h,i){var j=c.DOM,k=function(a,b,c){var d,e,g=f.get(c);if(d=f.urls[c]||a.documentBaseUrl.replace(/\\/$/,\"\"),c=h.trim(c),g&&h.inArray(b,c)===-1){if(h.each(f.dependencies(c),function(c){k(a,b,c)}),a.plugins[c])return;e=new g(a,d,a.$),a.plugins[c]=e,e.init&&(e.init(a,d),b.push(c))}},l=function(a){var b=[];h.each(a.settings.plugins.replace(/\\-/g,\"\").split(/[ ,]/),function(c){k(a,b,c)})},m=function(a){var b,c=a.settings;c.theme&&(\"function\"!=typeof c.theme?(c.theme=c.theme.replace(/-/,\"\"),b=g.get(c.theme),a.theme=new b(a,g.urls[c.theme]),a.theme.init&&a.theme.init(a,g.urls[c.theme]||a.documentBaseUrl.replace(/\\/$/,\"\"),a.$)):a.theme=c.theme)},n=function(a){var b,c,d,e,f,g=a.settings,h=a.getElement();return g.render_ui&&a.theme&&(a.orgDisplay=h.style.display,\"function\"!=typeof g.theme?(b=g.width||j.getStyle(h,\"width\")||\"100%\",c=g.height||j.getStyle(h,\"height\")||h.offsetHeight,d=g.min_height||100,e=/^[0-9\\.]+(|px)$/i,e.test(\"\"+b)&&(b=Math.max(parseInt(b,10),100)),e.test(\"\"+c)&&(c=Math.max(parseInt(c,10),d)),f=a.theme.renderUI({targetNode:h,width:b,height:c,deltaWidth:g.delta_width,deltaHeight:g.delta_height}),g.content_editable||(c=(f.iframeHeight||c)+(\"number\"==typeof c?f.deltaHeight||0:\"\"),c<d&&(c=d))):(f=g.theme(a,h),f.editorContainer.nodeType&&(f.editorContainer.id=f.editorContainer.id||a.id+\"_parent\"),f.iframeContainer.nodeType&&(f.iframeContainer.id=f.iframeContainer.id||a.id+\"_iframecontainer\"),c=f.iframeHeight||h.offsetHeight),a.editorContainer=f.editorContainer,f.height=c),f},o=function(c,f){if(a.domain!==b.location.hostname&&d.ie&&d.ie<12){var g=i.uuid(\"mce\");c[g]=function(){e.initContentBody(c)};var h='javascript:(function(){document.open();document.domain=\"'+a.domain+'\";var ed = window.parent.tinymce.get(\"'+c.id+'\");document.write(ed.iframeHTML);document.close();ed.'+g+\"(true);})()\";return j.setAttrib(f,\"src\",h),!0}return!1},p=function(a,b){var c,e,f=a.settings;a.iframeHTML=f.doctype+\"<html><head>\",f.document_base_url!=a.documentBaseUrl&&(a.iframeHTML+='<base href=\"'+a.documentBaseURI.getURI()+'\" />'),!d.caretAfter&&f.ie7_compat&&(a.iframeHTML+='<meta http-equiv=\"X-UA-Compatible\" content=\"IE=7\" />'),a.iframeHTML+='<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />',c=f.body_id||\"tinymce\",c.indexOf(\"=\")!=-1&&(c=a.getParam(\"body_id\",\"\",\"hash\"),c=c[a.id]||c),e=f.body_class||\"\",e.indexOf(\"=\")!=-1&&(e=a.getParam(\"body_class\",\"\",\"hash\"),e=e[a.id]||\"\"),f.content_security_policy&&(a.iframeHTML+='<meta http-equiv=\"Content-Security-Policy\" content=\"'+f.content_security_policy+'\" />'),a.iframeHTML+='</head><body id=\"'+c+'\" class=\"mce-content-body '+e+'\" data-id=\"'+a.id+'\"><br></body></html>';var g=j.create(\"iframe\",{id:a.id+\"_ifr\",frameBorder:\"0\",allowTransparency:\"true\",title:a.editorManager.translate(\"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help\"),style:{width:\"100%\",height:b.height,display:\"block\"}});g.onload=function(){g.onload=null,a.fire(\"load\")};var h=o(a,g);return a.contentAreaContainer=b.iframeContainer,a.iframeElement=g,j.add(b.iframeContainer,g),h},q=function(a){var b,c=a.settings,d=a.getElement();if(a.rtl=c.rtl_ui||a.editorManager.i18n.rtl,a.editorManager.i18n.setCode(c.language),c.aria_label=c.aria_label||j.getAttrib(d,\"aria-label\",a.getLang(\"aria.rich_text_area\")),a.fire(\"ScriptsLoaded\"),m(a),l(a),b=n(a),c.content_css&&h.each(h.explode(c.content_css),function(b){a.contentCSS.push(a.documentBaseURI.toAbsolute(b))}),c.content_style&&a.contentStyles.push(c.content_style),c.content_editable)return e.initContentBody(a);var f=p(a,b);b.editorContainer&&(j.get(b.editorContainer).style.display=a.orgDisplay,a.hidden=j.isHidden(b.editorContainer)),a.getElement().style.display=\"none\",j.setAttrib(a.id,\"aria-hidden\",!0),f||e.initContentBody(a)};return{init:q}}),g(\"27\",[\"4t\",\"e\",\"7\",\"f\",\"6\",\"2b\",\"4u\",\"11\",\"4v\",\"4w\",\"9\",\"10\"],function(a,b,c,d,e,f,g,h,i,j,k,l){var m=b.DOM,n=function(a,b){var c=a.settings,e=d.ScriptLoader;if(c.language&&\"en\"!=c.language&&!c.language_url&&(c.language_url=a.editorManager.baseURL+\"/langs/\"+c.language+\".js\"),c.language_url&&e.add(c.language_url),c.theme&&\"function\"!=typeof c.theme&&\"-\"!=c.theme.charAt(0)&&!j.urls[c.theme]){var h=c.theme_url;h=h?a.documentBaseURI.toAbsolute(h):\"themes/\"+c.theme+\"/theme\"+b+\".js\",j.load(c.theme,h)}k.isArray(c.plugins)&&(c.plugins=c.plugins.join(\" \")),k.each(c.external_plugins,function(a,b){i.load(b,a),c.plugins+=\" \"+b}),k.each(c.plugins.split(/[ ,]/),function(a){if(a=k.trim(a),a&&!i.urls[a])if(\"-\"===a.charAt(0)){a=a.substr(1,a.length);var c=i.dependencies(a);k.each(c,function(a){var c={prefix:\"plugins/\",resource:a,suffix:\"/plugin\"+b+\".js\"};a=i.createUrl(c,a),i.load(a.resource,a)})}else i.load(a,{prefix:\"plugins/\",resource:a,suffix:\"/plugin\"+b+\".js\"})}),e.loadQueue(function(){a.removed||g.init(a)},a,function(b){f.pluginLoadError(a,b[0]),a.removed||g.init(a)})},o=function(b){function d(){m.unbind(a,\"ready\",d),b.render()}var f=b.settings,g=b.id;if(!c.Event.domLoaded)return void m.bind(a,\"ready\",d);if(b.getElement()&&e.contentEditable){f.inline?b.inline=!0:(b.orgVisibility=b.getElement().style.visibility,b.getElement().style.visibility=\"hidden\");var i=b.getElement().form||m.getParent(g,\"form\");i&&(b.formElement=i,f.hidden_input&&!/TEXTAREA|INPUT/i.test(b.getElement().nodeName)&&(m.insertAfter(m.create(\"input\",{type:\"hidden\",name:g}),g),b.hasHiddenInput=!0),b.formEventDelegate=function(a){b.fire(a.type,a)},m.bind(i,\"submit reset\",b.formEventDelegate),b.on(\"reset\",function(){b.setContent(b.startContent,{format:\"raw\"})}),!f.submit_patch||i.submit.nodeType||i.submit.length||i._mceOldSubmit||(i._mceOldSubmit=i.submit,i.submit=function(){return b.editorManager.triggerSave(),b.setDirty(!1),i._mceOldSubmit(i)})),b.windowManager=new l(b),b.notificationManager=new h(b),\"xml\"===f.encoding&&b.on(\"GetContent\",function(a){a.save&&(a.content=m.encode(a.content))}),f.add_form_submit_trigger&&b.on(\"submit\",function(){b.initialized&&b.save()}),f.add_unload_trigger&&(b._beforeUnload=function(){!b.initialized||b.destroyed||b.isHidden()||b.save({format:\"raw\",no_events:!0,set_dirty:!1})},b.editorManager.on(\"BeforeUnload\",b._beforeUnload)),b.editorManager.add(b),n(b,b.suffix)}};return{render:o}}),g(\"28\",[],function(){function a(a,b,c){try{a.getDoc().execCommand(b,!1,c)}catch(a){}}function b(a){var b,c;return b=a.getBody(),c=function(b){a.dom.getParents(b.target,\"a\").length>0&&b.preventDefault()},a.dom.bind(b,\"click\",c),{unbind:function(){a.dom.unbind(b,\"click\",c)}}}function c(c,d){c._clickBlocker&&(c._clickBlocker.unbind(),c._clickBlocker=null),d?(c._clickBlocker=b(c),c.selection.controlSelection.hideResizeRect(),c.readonly=!0,c.getBody().contentEditable=!1):(c.readonly=!1,c.getBody().contentEditable=!0,a(c,\"StyleWithCSS\",!1),a(c,\"enableInlineTableEditing\",!1),a(c,\"enableObjectResizing\",!1),c.focus(),c.nodeChanged())}function d(a,b){var d=a.readonly?\"readonly\":\"design\";b!=d&&(a.initialized?c(a,\"readonly\"==b):a.on(\"init\",function(){c(a,\"readonly\"==b)}),a.fire(\"SwitchMode\",{mode:b}))}return{setMode:d}}),g(\"29\",[],function(){var a=function(a,b,c){var d=a.sidebars?a.sidebars:[];d.push({name:b,settings:c}),a.sidebars=d};return{add:a}}),g(\"14\",[\"g\",\"a\",\"e\",\"v\",\"12\",\"26\",\"6\",\"n\",\"27\",\"28\",\"13\",\"29\",\"9\",\"w\",\"2a\"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){function p(c,e,h){var i,j,l=this;i=l.documentBaseUrl=h.documentBaseURL,j=h.baseURI,e=f.getEditorSettings(l,c,i,h.defaultSettings,e),l.settings=e,a.language=e.language||\"en\",a.languageLoad=e.language_load,a.baseURL=h.baseURL,l.id=c,l.setDirty(!1),l.plugins={},l.documentBaseURI=new n(e.document_base_url,{base_uri:j}),l.baseURI=j,l.contentCSS=[],l.contentStyles=[],l.shortcuts=new k(l),l.loadedCSS={},l.editorCommands=new d(l),l.suffix=h.suffix,l.editorManager=h,l.inline=e.inline,e.cache_suffix&&(g.cacheSuffix=e.cache_suffix.replace(/^[\\?\\&]+/,\"\")),e.override_viewport===!1&&(g.overrideViewPort=!1),h.fire(\"SetupEditor\",l),l.execCallback(\"setup\",l),l.$=b.overrideDefaults(function(){return{context:l.inline?l.getBody():l.getDoc(),element:l.getBody()}})}var q=c.DOM,r=m.extend,s=m.each,t=m.trim,u=m.resolve,v=g.gecko,w=g.ie;return p.prototype={render:function(){i.render(this)},focus:function(a){function b(a){return f.dom.getParent(a,function(a){return\"true\"===f.dom.getContentEditable(a)})}var c,d,e,f=this,h=f.selection,i=f.settings.content_editable,j=f.getDoc(),k=f.getBody();if(!f.removed){if(!a){if(c=h.getRng(),c.item&&(d=c.item(0)),f.quirks.refreshContentEditable(),e=b(h.getNode()),f.$.contains(k,e))return e.focus(),h.normalize(),void f.editorManager.setActive(f);if(i||(g.opera||f.getBody().focus(),f.getWin().focus()),v||i){if(k.setActive)try{k.setActive()}catch(a){k.focus()}else f.selection.setRng(f.lastRng),k.focus();i&&h.normalize()}d&&d.ownerDocument==j&&(c=j.body.createControlRange(),c.addElement(d),c.select())}f.editorManager.setActive(f)}},execCallback:function(a){var b,c=this,d=c.settings[a];if(d)return c.callbackLookup&&(b=c.callbackLookup[a])&&(d=b.func,b=b.scope),\"string\"==typeof d&&(b=d.replace(/\\.\\w+$/,\"\"),b=b?u(b):0,d=u(d),c.callbackLookup=c.callbackLookup||{},c.callbackLookup[a]={func:d,scope:b}),d.apply(b||c,Array.prototype.slice.call(arguments,1))},translate:function(a){if(a&&m.is(a,\"string\")){var b=this.settings.language||\"en\",c=this.editorManager.i18n;a=c.data[b+\".\"+a]||a.replace(/\\{\\#([^\\}]+)\\}/g,function(a,d){return c.data[b+\".\"+d]||\"{#\"+d+\"}\"})}return this.editorManager.translate(a)},getLang:function(a,b){return this.editorManager.i18n.data[(this.settings.language||\"en\")+\".\"+a]||(void 0!==b?b:\"{#\"+a+\"}\")},getParam:function(a,b,c){var d,e=a in this.settings?this.settings[a]:b;return\"hash\"===c?(d={},\"string\"==typeof e?s(e.indexOf(\"=\")>0?e.split(/[;,](?![^=;,]*(?:[;,]|$))/):e.split(\",\"),function(a){a=a.split(\"=\"),a.length>1?d[t(a[0])]=t(a[1]):d[t(a[0])]=t(a)}):d=e,d):e},nodeChanged:function(a){this._nodeChangeDispatcher.nodeChanged(a)},addButton:function(a,b){var c=this;b.cmd&&(b.onclick=function(){c.execCommand(b.cmd)}),b.text||b.icon||(b.icon=a),c.buttons=c.buttons||{},b.tooltip=b.tooltip||b.title,c.buttons[a]=b},addSidebar:function(a,b){return l.add(this,a,b)},addMenuItem:function(a,b){var c=this;b.cmd&&(b.onclick=function(){c.execCommand(b.cmd)}),c.menuItems=c.menuItems||{},c.menuItems[a]=b},addContextToolbar:function(a,b){var c,d=this;d.contextToolbars=d.contextToolbars||[],\"string\"==typeof a&&(c=a,a=function(a){return d.dom.is(a,c)}),d.contextToolbars.push({id:o.uuid(\"mcet\"),predicate:a,items:b})},addCommand:function(a,b,c){this.editorCommands.addCommand(a,b,c)},addQueryStateHandler:function(a,b,c){this.editorCommands.addQueryStateHandler(a,b,c)},addQueryValueHandler:function(a,b,c){this.editorCommands.addQueryValueHandler(a,b,c)},addShortcut:function(a,b,c,d){this.shortcuts.add(a,b,c,d)},execCommand:function(a,b,c,d){return this.editorCommands.execCommand(a,b,c,d)},queryCommandState:function(a){return this.editorCommands.queryCommandState(a)},queryCommandValue:function(a){return this.editorCommands.queryCommandValue(a)},queryCommandSupported:function(a){return this.editorCommands.queryCommandSupported(a)},show:function(){var a=this;a.hidden&&(a.hidden=!1,a.inline?a.getBody().contentEditable=!0:(q.show(a.getContainer()),q.hide(a.id)),a.load(),a.fire(\"show\"))},hide:function(){var a=this,b=a.getDoc();a.hidden||(w&&b&&!a.inline&&b.execCommand(\"SelectAll\"),a.save(),a.inline?(a.getBody().contentEditable=!1,a==a.editorManager.focusedEditor&&(a.editorManager.focusedEditor=null)):(q.hide(a.getContainer()),q.setStyle(a.id,\"display\",a.orgDisplay)),a.hidden=!0,a.fire(\"hide\"))},isHidden:function(){return!!this.hidden},setProgressState:function(a,b){this.fire(\"ProgressState\",{state:a,time:b})},load:function(a){var b,c=this,d=c.getElement();return c.removed?\"\":d?(a=a||{},a.load=!0,b=c.setContent(void 0!==d.value?d.value:d.innerHTML,a),a.element=d,a.no_events||c.fire(\"LoadContent\",a),a.element=d=null,b):void 0},save:function(a){var b,c,d=this,e=d.getElement();if(e&&d.initialized&&!d.removed)return a=a||{},a.save=!0,a.element=e,b=a.content=d.getContent(a),a.no_events||d.fire(\"SaveContent\",a),\"raw\"==a.format&&d.fire(\"RawSaveContent\",a),b=a.content,/TEXTAREA|INPUT/i.test(e.nodeName)?e.value=b:(d.inline||(e.innerHTML=b),(c=q.getParent(d.id,\"form\"))&&s(c.elements,function(a){if(a.name==d.id)return a.value=b,!1})),a.element=e=null,a.set_dirty!==!1&&d.setDirty(!1),b},setContent:function(a,b){var c,d,e=this,f=e.getBody();return b=b||{},b.format=b.format||\"html\",b.set=!0,b.content=a,b.no_events||e.fire(\"BeforeSetContent\",b),a=b.content,0===a.length||/^\\s+$/.test(a)?(d=w&&w<11?\"\":'<br data-mce-bogus=\"1\">',\"TABLE\"==f.nodeName?a=\"<tr><td>\"+d+\"</td></tr>\":/^(UL|OL)$/.test(f.nodeName)&&(a=\"<li>\"+d+\"</li>\"),c=e.settings.forced_root_block,c&&e.schema.isValidChild(f.nodeName.toLowerCase(),c.toLowerCase())?(a=d,a=e.dom.createHTML(c,e.settings.forced_root_block_attrs,a)):w||a||(a='<br data-mce-bogus=\"1\">'),e.dom.setHTML(f,a),e.fire(\"SetContent\",b)):(\"raw\"!==b.format&&(a=new h({validate:e.validate},e.schema).serialize(e.parser.parse(a,{isRootContent:!0}))),b.content=t(a),e.dom.setHTML(f,b.content),b.no_events||e.fire(\"SetContent\",b)),b.content},getContent:function(a){var b,c=this,d=c.getBody();return c.removed?\"\":(a=a||{},a.format=a.format||\"html\",a.get=!0,a.getInner=!0,a.no_events||c.fire(\"BeforeGetContent\",a),b=\"raw\"==a.format?m.trim(c.serializer.getTrimmedContent()):\"text\"==a.format?d.innerText||d.textContent:c.serializer.serialize(d,a),\"text\"!=a.format?a.content=t(b):a.content=b,a.no_events||c.fire(\"GetContent\",a),a.content)},insertContent:function(a,b){b&&(a=r({content:a},b)),this.execCommand(\"mceInsertContent\",!1,a)},isDirty:function(){return!this.isNotDirty},setDirty:function(a){var b=!this.isNotDirty;this.isNotDirty=!a,a&&a!=b&&this.fire(\"dirty\")},setMode:function(a){j.setMode(this,a)},getContainer:function(){var a=this;return a.container||(a.container=q.get(a.editorContainer||a.id+\"_parent\")),a.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return this.targetElm||(this.targetElm=q.get(this.id)),this.targetElm},getWin:function(){var a,b=this;return b.contentWindow||(a=b.iframeElement,a&&(b.contentWindow=a.contentWindow)),b.contentWindow},getDoc:function(){var a,b=this;return b.contentDocument||(a=b.getWin(),a&&(b.contentDocument=a.document)),b.contentDocument},getBody:function(){var a=this.getDoc();return this.bodyElement||(a?a.body:null)},convertURL:function(a,b,c){var d=this,e=d.settings;return e.urlconverter_callback?d.execCallback(\"urlconverter_callback\",a,c,!0,b):!e.convert_urls||c&&\"LINK\"==c.nodeName||0===a.indexOf(\"file:\")||0===a.length?a:e.relative_urls?d.documentBaseURI.toRelative(a):a=d.documentBaseURI.toAbsolute(a,e.remove_script_host)},addVisual:function(a){var b,c=this,d=c.settings,e=c.dom;a=a||c.getBody(),void 0===c.hasVisual&&(c.hasVisual=d.visual),s(e.select(\"table,a\",a),function(a){var f;switch(a.nodeName){case\"TABLE\":return b=d.visual_table_class||\"mce-item-table\",f=e.getAttrib(a,\"border\"),void(f&&\"0\"!=f||!c.hasVisual?e.removeClass(a,b):e.addClass(a,b));case\"A\":return void(e.getAttrib(a,\"href\",!1)||(f=e.getAttrib(a,\"name\")||a.id,b=d.visual_anchor_class||\"mce-item-anchor\",f&&c.hasVisual?e.addClass(a,b):e.removeClass(a,b)))}}),c.fire(\"VisualAid\",{element:a,hasVisual:c.hasVisual})},remove:function(){var a=this;a.removed||(a.save(),a.removed=1,a.unbindAllNativeEvents(),a.hasHiddenInput&&q.remove(a.getElement().nextSibling),a.inline||(w&&w<10&&a.getDoc().execCommand(\"SelectAll\",!1,null),q.setStyle(a.id,\"display\",a.orgDisplay),a.getBody().onload=null),a.fire(\"remove\"),a.editorManager.remove(a),q.remove(a.getContainer()),a._selectionOverrides.destroy(),a.editorUpload.destroy(),a.destroy())},destroy:function(a){var b,c=this;if(!c.destroyed){if(!a&&!c.removed)return void c.remove();a||(c.editorManager.off(\"beforeunload\",c._beforeUnload),c.theme&&c.theme.destroy&&c.theme.destroy(),c.selection.destroy(),c.dom.destroy()),b=c.formElement,b&&(b._mceOldSubmit&&(b.submit=b._mceOldSubmit,b._mceOldSubmit=null),q.unbind(b,\"submit reset\",c.formEventDelegate)),c.contentAreaContainer=c.formElement=c.container=c.editorContainer=null,c.bodyElement=c.contentDocument=c.contentWindow=null,c.iframeElement=c.targetElm=null,c.selection&&(c.selection=c.selection.win=c.selection.dom=c.selection.dom.doc=null),\nc.destroyed=1}},uploadImages:function(a){return this.editorUpload.uploadImages(a)},_scanForImages:function(){return this.editorUpload.scanForImages()}},r(p.prototype,e),p}),g(\"15\",[\"9\"],function(a){\"use strict\";var b={},c=\"en\";return{setCode:function(a){a&&(c=a,this.rtl=!!this.data[a]&&\"rtl\"===this.data[a]._dir)},getCode:function(){return c},rtl:!1,add:function(a,c){var d=b[a];d||(b[a]=d={});for(var e in c)d[e]=c[e];this.setCode(a)},translate:function(d){function e(b){return a.is(b,\"function\")?Object.prototype.toString.call(b):f(b)?\"\":\"\"+b}function f(b){return\"\"===b||null===b||a.is(b,\"undefined\")}function g(b){return b=e(b),a.hasOwn(h,b)?e(h[b]):b}var h=b[c]||{};if(f(d))return\"\";if(a.is(d,\"object\")&&a.hasOwn(d,\"raw\"))return e(d.raw);if(a.is(d,\"array\")){var i=d.slice(1);d=g(d[0]).replace(/\\{([0-9]+)\\}/g,function(b,c){return a.hasOwn(i,c)?e(i[c]):b})}return g(d).replace(/{context:\\w+}$/,\"\")},data:b}}),g(\"16\",[\"e\",\"5\",\"6\"],function(a,b,c){function d(a){function d(){try{return document.activeElement}catch(a){return document.body}}function j(a,b){if(b&&b.startContainer){if(!a.isChildOf(b.startContainer,a.getRoot())||!a.isChildOf(b.endContainer,a.getRoot()))return;return{startContainer:b.startContainer,startOffset:b.startOffset,endContainer:b.endContainer,endOffset:b.endOffset}}return b}function l(a,b){var c;return b.startContainer?(c=a.getDoc().createRange(),c.setStart(b.startContainer,b.startOffset),c.setEnd(b.endContainer,b.endOffset)):c=b,c}function m(m){var n=m.editor;n.on(\"init\",function(){(n.inline||c.ie)&&(\"onbeforedeactivate\"in document&&c.ie<9?n.dom.bind(n.getBody(),\"beforedeactivate\",function(a){if(a.target==n.getBody())try{n.lastRng=n.selection.getRng()}catch(a){}}):n.on(\"nodechange mouseup keyup\",function(a){var b=d();\"nodechange\"==a.type&&a.selectionChange||(b&&b.id==n.id+\"_ifr\"&&(b=n.getBody()),n.dom.isChildOf(b,n.getBody())&&(n.lastRng=n.selection.getRng()))}),c.webkit&&!e&&(e=function(){var b=a.activeEditor;if(b&&b.selection){var c=b.selection.getRng();c&&!c.collapsed&&(n.lastRng=c)}},h.bind(document,\"selectionchange\",e)))}),n.on(\"setcontent\",function(){n.lastRng=null}),n.on(\"mousedown\",function(){n.selection.lastFocusBookmark=null}),n.on(\"focusin\",function(){var b,c=a.focusedEditor;n.selection.lastFocusBookmark&&(b=l(n,n.selection.lastFocusBookmark),n.selection.lastFocusBookmark=null,n.selection.setRng(b)),c!=n&&(c&&c.fire(\"blur\",{focusedEditor:n}),a.setActive(n),a.focusedEditor=n,n.fire(\"focus\",{blurredEditor:c}),n.focus(!0)),n.lastRng=null}),n.on(\"focusout\",function(){b.setEditorTimeout(n,function(){var b=a.focusedEditor;i(n,d())||b!=n||(n.fire(\"blur\",{focusedEditor:null}),a.focusedEditor=null,n.selection&&(n.selection.lastFocusBookmark=null))})}),f||(f=function(b){var c,d=a.activeEditor;c=b.target,d&&c.ownerDocument===document&&(d.selection&&c!==d.getBody()&&k(n,c)&&(d.selection.lastFocusBookmark=j(d.dom,d.lastRng)),c===document.body||i(d,c)||a.focusedEditor!==d||(d.fire(\"blur\",{focusedEditor:null}),a.focusedEditor=null))},h.bind(document,\"focusin\",f)),n.inline&&!g&&(g=function(b){var c=a.activeEditor,d=c.dom;if(c.inline&&d&&!d.isChildOf(b.target,c.getBody())){var e=c.selection.getRng();e.collapsed||(c.lastRng=e)}},h.bind(document,\"mouseup\",g))}function n(b){a.focusedEditor==b.editor&&(a.focusedEditor=null),a.activeEditor||(h.unbind(document,\"selectionchange\",e),h.unbind(document,\"focusin\",f),h.unbind(document,\"mouseup\",g),e=f=g=null)}a.on(\"AddEditor\",m),a.on(\"RemoveEditor\",n)}var e,f,g,h=a.DOM,i=function(a,b){var c=a?a.settings.custom_ui_selector:\"\",e=h.getParent(b,function(b){return d.isEditorUIElement(b)||!!c&&a.dom.is(b,c)});return null!==e},j=function(a){return a.inline===!0},k=function(a,b){return j(a)===!1||a.dom.isChildOf(b,a.getBody())===!1};return d.isEditorUIElement=function(a){return a.className.toString().indexOf(\"mce-\")!==-1},d._isUIElement=i,d}),g(\"2c\",[\"9\"],function(a){var b=a.each,c=a.explode,d=function(a){a.on(\"AddEditor\",function(a){var d=a.editor;d.on(\"preInit\",function(){function a(a,c){b(c,function(b,c){b&&h.setStyle(a,c,b)}),h.rename(a,\"span\")}function e(a){h=d.dom,i.convert_fonts_to_spans&&b(h.select(\"font,u,strike\",a.node),function(a){f[a.nodeName.toLowerCase()](h,a)})}var f,g,h,i=d.settings;i.inline_styles&&(g=c(i.font_size_legacy_values),f={font:function(b,c){a(c,{backgroundColor:c.style.backgroundColor,color:c.color,fontFamily:c.face,fontSize:g[parseInt(c.size,10)-1]})},u:function(b,c){\"html4\"===d.settings.schema&&a(c,{textDecoration:\"underline\"})},strike:function(b,c){a(c,{textDecoration:\"line-through\"})}},d.on(\"PreProcess SetContent\",e))})})};return{register:d}}),g(\"17\",[\"g\",\"a\",\"e\",\"14\",\"6\",\"2b\",\"16\",\"2c\",\"15\",\"z\",\"4\",\"9\",\"w\"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){function n(a){v(s.editors,function(b){\"scroll\"===a.type?b.fire(\"ScrollWindow\",a):b.fire(\"ResizeWindow\",a)})}function o(a,c){c!==y&&(c?b(window).on(\"resize scroll\",n):b(window).off(\"resize scroll\",n),y=c)}function p(a){var b,c=s.editors;delete c[a.id];for(var d=0;d<c.length;d++)if(c[d]==a){c.splice(d,1),b=!0;break}return s.activeEditor==a&&(s.activeEditor=c[0]),s.focusedEditor==a&&(s.focusedEditor=null),b}function q(a){return a&&a.initialized&&!(a.getContainer()||a.getBody()).parentNode&&(p(a),a.unbindAllNativeEvents(),a.destroy(!0),a.removed=!0,a=null),a}var r,s,t=c.DOM,u=l.explode,v=l.each,w=l.extend,x=0,y=!1;return s={$:b,majorVersion:\"4\",minorVersion:\"6.4\",releaseDate:\"2017-06-13\",editors:[],i18n:i,activeEditor:null,setup:function(){var a,b,c,d,e=this,f=\"\";if(b=m.getDocumentBaseUrl(document.location),/^[^:]+:\\/\\/\\/?[^\\/]+\\//.test(b)&&(b=b.replace(/[\\?#].*$/,\"\").replace(/[\\/\\\\][^\\/]+$/,\"\"),/[\\/\\\\]$/.test(b)||(b+=\"/\")),c=window.tinymce||window.tinyMCEPreInit)a=c.base||c.baseURL,f=c.suffix;else{for(var h=document.getElementsByTagName(\"script\"),i=0;i<h.length;i++){d=h[i].src;var j=d.substring(d.lastIndexOf(\"/\"));if(/tinymce(\\.full|\\.jquery|)(\\.min|\\.dev|)\\.js/.test(d)){j.indexOf(\".min\")!=-1&&(f=\".min\"),a=d.substring(0,d.lastIndexOf(\"/\"));break}}!a&&document.currentScript&&(d=document.currentScript.src,d.indexOf(\".min\")!=-1&&(f=\".min\"),a=d.substring(0,d.lastIndexOf(\"/\")))}e.baseURL=new m(b).toAbsolute(a),e.documentBaseURL=b,e.baseURI=new m(e.baseURL),e.suffix=f,e.focusManager=new g(e)},overrideDefaults:function(b){var c,d;c=b.base_url,c&&(this.baseURL=new m(this.documentBaseURL).toAbsolute(c.replace(/\\/+$/,\"\")),this.baseURI=new m(this.baseURL)),d=b.suffix,b.suffix&&(this.suffix=d),this.defaultSettings=b;var e=b.plugin_base_urls;for(var f in e)a.PluginManager.urls[f]=e[f]},init:function(a){function c(a,b){return a.inline&&b.tagName.toLowerCase()in o}function g(a){var b=a.id;return b||(b=a.name,b=b&&!t.get(b)?a.name:t.uniqueId(),a.setAttribute(\"id\",b)),b}function h(b){var c=a[b];if(c)return c.apply(p,Array.prototype.slice.call(arguments,2))}function i(a,b){return b.constructor===RegExp?b.test(a.className):t.hasClass(a,b)}function j(a){var b,c=[];if(e.ie&&e.ie<11)return f.initError(\"TinyMCE does not support the browser you are using. For a list of supported browsers please see: https://www.tinymce.com/docs/get-started/system-requirements/\"),[];if(a.types)return v(a.types,function(a){c=c.concat(t.select(a.selector))}),c;if(a.selector)return t.select(a.selector);if(a.target)return[a.target];switch(a.mode){case\"exact\":b=a.elements||\"\",b.length>0&&v(u(b),function(a){var b;(b=t.get(a))?c.push(b):v(document.forms,function(b){v(b.elements,function(b){b.name===a&&(a=\"mce_editor_\"+x++,t.setAttrib(b,\"id\",a),c.push(b))})})});break;case\"textareas\":case\"specific_textareas\":v(t.select(\"textarea\"),function(b){a.editor_deselector&&i(b,a.editor_deselector)||a.editor_selector&&!i(b,a.editor_selector)||c.push(b)})}return c}function m(){function e(a,b,c){var e=new d(a,b,p);n.push(e),e.on(\"init\",function(){++k===i.length&&r(n)}),e.targetElm=e.targetElm||c,e.render()}var i,k=0,n=[];return t.unbind(window,\"ready\",m),h(\"onpageload\"),i=b.unique(j(a)),a.types?void v(a.types,function(b){l.each(i,function(c){return!t.is(c,b.selector)||(e(g(c),w({},a,b),c),!1)})}):(l.each(i,function(a){q(p.get(a.id))}),i=l.grep(i,function(a){return!p.get(a.id)}),void(0===i.length?r([]):v(i,function(b){c(a,b)?f.initError(\"Could not initialize inline editor on invalid inline target element\",b):e(g(b),a,b)})))}var n,o,p=this;o=l.makeMap(\"area base basefont br col frame hr img input isindex link meta param embed source wbr track colgroup option tbody tfoot thead tr script noscript style textarea video audio iframe object menu\",\" \");var r=function(a){n=a};return p.settings=a,t.bind(window,\"ready\",m),new k(function(a){n?a(n):r=function(b){a(b)}})},get:function(a){return arguments.length?a in this.editors?this.editors[a]:null:this.editors},add:function(a){var b=this,c=b.editors;return c[a.id]=a,c.push(a),o(c,!0),b.activeEditor=a,b.fire(\"AddEditor\",{editor:a}),r||(r=function(){b.fire(\"BeforeUnload\")},t.bind(window,\"beforeunload\",r)),a},createEditor:function(a,b){return this.add(new d(a,b,this))},remove:function(a){var b,c,d=this,e=d.editors;{if(a)return\"string\"==typeof a?(a=a.selector||a,void v(t.select(a),function(a){c=e[a.id],c&&d.remove(c)})):(c=a,e[c.id]?(p(c)&&d.fire(\"RemoveEditor\",{editor:c}),e.length||t.unbind(window,\"beforeunload\",r),c.remove(),o(e,e.length>0),c):null);for(b=e.length-1;b>=0;b--)d.remove(e[b])}},execCommand:function(a,b,c){var e=this,f=e.get(c);switch(a){case\"mceAddEditor\":return e.get(c)||new d(c,e.settings,e).render(),!0;case\"mceRemoveEditor\":return f&&f.remove(),!0;case\"mceToggleEditor\":return f?(f.isHidden()?f.show():f.hide(),!0):(e.execCommand(\"mceAddEditor\",0,c),!0)}return!!e.activeEditor&&e.activeEditor.execCommand(a,b,c)},triggerSave:function(){v(this.editors,function(a){a.save()})},addI18n:function(a,b){i.add(a,b)},translate:function(a){return i.translate(a)},setActive:function(a){var b=this.activeEditor;this.activeEditor!=a&&(b&&b.fire(\"deactivate\",{relatedTarget:a}),a.fire(\"activate\",{relatedTarget:b})),this.activeEditor=a}},w(s,j),s.setup(),h.register(s),s}),g(\"18\",[\"z\",\"9\"],function(a,b){var c={send:function(a){function d(){!a.async||4==e.readyState||f++>1e4?(a.success&&f<1e4&&200==e.status?a.success.call(a.success_scope,\"\"+e.responseText,e,a):a.error&&a.error.call(a.error_scope,f>1e4?\"TIMED_OUT\":\"GENERAL\",e,a),e=null):setTimeout(d,10)}var e,f=0;if(a.scope=a.scope||this,a.success_scope=a.success_scope||a.scope,a.error_scope=a.error_scope||a.scope,a.async=a.async!==!1,a.data=a.data||\"\",c.fire(\"beforeInitialize\",{settings:a}),e=new XMLHttpRequest){if(e.overrideMimeType&&e.overrideMimeType(a.content_type),e.open(a.type||(a.data?\"POST\":\"GET\"),a.url,a.async),a.crossDomain&&(e.withCredentials=!0),a.content_type&&e.setRequestHeader(\"Content-Type\",a.content_type),a.requestheaders&&b.each(a.requestheaders,function(a){e.setRequestHeader(a.key,a.value)}),e.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\"),e=c.fire(\"beforeSend\",{xhr:e,settings:a}).xhr,e.send(a.data),!a.async)return d();setTimeout(d,10)}}};return b.extend(c,a),c}),g(\"19\",[],function(){function a(b,c){var d,e,f,g;if(c=c||'\"',null===b)return\"null\";if(f=typeof b,\"string\"==f)return e=\"\\bb\\tt\\nn\\ff\\rr\\\"\\\"''\\\\\\\\\",c+b.replace(/([\\u0080-\\uFFFF\\x00-\\x1f\\\"\\'\\\\])/g,function(a,b){return'\"'===c&&\"'\"===a?a:(d=e.indexOf(b),d+1?\"\\\\\"+e.charAt(d+1):(a=b.charCodeAt().toString(16),\"\\\\u\"+\"0000\".substring(a.length)+a))})+c;if(\"object\"==f){if(b.hasOwnProperty&&\"[object Array]\"===Object.prototype.toString.call(b)){for(d=0,e=\"[\";d<b.length;d++)e+=(d>0?\",\":\"\")+a(b[d],c);return e+\"]\"}e=\"{\";for(g in b)b.hasOwnProperty(g)&&(e+=\"function\"!=typeof b[g]?(e.length>1?\",\"+c:c)+g+c+\":\"+a(b[g],c):\"\");return e+\"}\"}return\"\"+b}return{serialize:a,parse:function(a){try{return window[String.fromCharCode(101)+\"val\"](\"(\"+a+\")\")}catch(a){}}}}),g(\"1a\",[\"19\",\"18\",\"9\"],function(a,b,c){function d(a){this.settings=e({},a),this.count=0}var e=c.extend;return d.sendRPC=function(a){return(new d).send(a)},d.prototype={send:function(c){var d=c.error,f=c.success;c=e(this.settings,c),c.success=function(b,e){b=a.parse(b),\"undefined\"==typeof b&&(b={error:\"JSON Parse error.\"}),b.error?d.call(c.error_scope||c.scope,b.error,e):f.call(c.success_scope||c.scope,b.result)},c.error=function(a,b){d&&d.call(c.error_scope||c.scope,a,b)},c.data=a.serialize({id:c.id||\"c\"+this.count++,method:c.method,params:c.params}),c.content_type=\"application/json\",b.send(c)}},d}),g(\"1b\",[\"e\"],function(a){return{callbacks:{},count:0,send:function(b){var c=this,d=a.DOM,e=void 0!==b.count?b.count:c.count,f=\"tinymce_jsonp_\"+e;c.callbacks[e]=function(a){d.remove(f),delete c.callbacks[e],b.callback(a)},d.add(d.doc.body,\"script\",{id:f,src:b.url,type:\"text/javascript\"}),c.count++}}}),g(\"1c\",[],function(){function a(){g=[];for(var a in f)g.push(a);d.length=g.length}function b(){function b(a){var b,c;return c=void 0!==a?j+a:d.indexOf(\",\",j),c===-1||c>d.length?null:(b=d.substring(j,c),j=c+1,b)}var c,d,g,j=0;if(f={},i){e.load(h),d=e.getAttribute(h)||\"\";do{var k=b();if(null===k)break;if(c=b(parseInt(k,32)||0),null!==c){if(k=b(),null===k)break;g=b(parseInt(k,32)||0),c&&(f[c]=g)}}while(null!==c);a()}}function c(){var b,c=\"\";if(i){for(var d in f)b=f[d],c+=(c?\",\":\"\")+d.length.toString(32)+\",\"+d+\",\"+b.length.toString(32)+\",\"+b;e.setAttribute(h,c);try{e.save(h)}catch(a){}a()}}var d,e,f,g,h,i;try{if(window.localStorage)return localStorage}catch(a){}return h=\"tinymce\",e=document.documentElement,i=!!e.addBehavior,i&&e.addBehavior(\"#default#userData\"),d={key:function(a){return g[a]},getItem:function(a){return a in f?f[a]:null},setItem:function(a,b){f[a]=\"\"+b,c()},removeItem:function(a){delete f[a],c()},clear:function(){f={},c()}},b(),d}),g(\"1d\",[\"e\",\"7\",\"f\",\"g\",\"9\",\"6\"],function(a,b,c,d,e,f){var g=function(g){g.DOM=a.DOM,g.ScriptLoader=c.ScriptLoader,g.PluginManager=d.PluginManager,g.ThemeManager=d.ThemeManager,g.dom=g.dom||{},g.dom.Event=b.Event,e.each(\"trim isArray is toArray makeMap each map grep inArray extend create walk createNS resolve explode _addCacheSuffix\".split(\" \"),function(a){g[a]=e[a]}),e.each(\"isOpera isWebKit isIE isGecko isMac\".split(\" \"),function(a){g[a]=f[a.substr(2).toLowerCase()]})};return{register:g}}),g(\"1e\",[],function(){function a(a){function e(a,e,f){var g,h,i,j,k,l;return g=0,h=0,i=0,a/=255,e/=255,f/=255,k=b(a,b(e,f)),l=c(a,c(e,f)),k==l?(i=k,{h:0,s:0,v:100*i}):(j=a==k?e-f:f==k?a-e:f-a,g=a==k?3:f==k?1:5,g=60*(g-j/(l-k)),h=(l-k)/l,i=l,{h:d(g),s:d(100*h),v:d(100*i)})}function f(a,e,f){var g,h,i,j;if(a=(parseInt(a,10)||0)%360,e=parseInt(e,10)/100,f=parseInt(f,10)/100,e=c(0,b(e,1)),f=c(0,b(f,1)),0===e)return void(l=m=n=d(255*f));switch(g=a/60,h=f*e,i=h*(1-Math.abs(g%2-1)),j=f-h,Math.floor(g)){case 0:l=h,m=i,n=0;break;case 1:l=i,m=h,n=0;break;case 2:l=0,m=h,n=i;break;case 3:l=0,m=i,n=h;break;case 4:l=i,m=0,n=h;break;case 5:l=h,m=0,n=i;break;default:l=m=n=0}l=d(255*(l+j)),m=d(255*(m+j)),n=d(255*(n+j))}function g(){function a(a){return a=parseInt(a,10).toString(16),a.length>1?a:\"0\"+a}return\"#\"+a(l)+a(m)+a(n)}function h(){return{r:l,g:m,b:n}}function i(){return e(l,m,n)}function j(a){var b;return\"object\"==typeof a?\"r\"in a?(l=a.r,m=a.g,n=a.b):\"v\"in a&&f(a.h,a.s,a.v):(b=/rgb\\s*\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)[^\\)]*\\)/gi.exec(a))?(l=parseInt(b[1],10),m=parseInt(b[2],10),n=parseInt(b[3],10)):(b=/#([0-F]{2})([0-F]{2})([0-F]{2})/gi.exec(a))?(l=parseInt(b[1],16),m=parseInt(b[2],16),n=parseInt(b[3],16)):(b=/#([0-F])([0-F])([0-F])/gi.exec(a))&&(l=parseInt(b[1]+b[1],16),m=parseInt(b[2]+b[2],16),n=parseInt(b[3]+b[3],16)),l=l<0?0:l>255?255:l,m=m<0?0:m>255?255:m,n=n<0?0:n>255?255:n,k}var k=this,l=0,m=0,n=0;a&&j(a),k.toRgb=h,k.toHsv=i,k.toHex=g,k.parse=j}var b=Math.min,c=Math.max,d=Math.round;return a}),g(\"2t\",[\"x\",\"9\"],function(a,b){\"use strict\";return a.extend({Defaults:{firstControlClass:\"first\",lastControlClass:\"last\"},init:function(a){this.settings=b.extend({},this.Defaults,a)},preRender:function(a){a.bodyClasses.add(this.settings.containerClass)},applyClasses:function(a){var b,c,d,e,f=this,g=f.settings;b=g.firstControlClass,c=g.lastControlClass,a.each(function(a){a.classes.remove(b).remove(c).add(g.controlClass),a.visible()&&(d||(d=a),e=a)}),d&&d.classes.add(b),e&&e.classes.add(c)},renderHtml:function(a){var b=this,c=\"\";return b.applyClasses(a.items()),a.items().each(function(a){c+=a.renderHtml()}),c},recalc:function(){},postRender:function(){},isNative:function(){return!1}})}),g(\"2u\",[\"2t\"],function(a){\"use strict\";return a.extend({Defaults:{containerClass:\"abs-layout\",controlClass:\"abs-layout-item\"},recalc:function(a){a.items().filter(\":visible\").each(function(a){var b=a.settings;a.layoutRect({x:b.x,y:b.y,w:b.w,h:b.h}),a.recalc&&a.recalc()})},renderHtml:function(a){return'<div id=\"'+a._id+'-absend\" class=\"'+a.classPrefix+'abs-end\"></div>'+this._super(a)}})}),g(\"2v\",[\"2r\"],function(a){\"use strict\";return a.extend({Defaults:{classes:\"widget btn\",role:\"button\"},init:function(a){var b,c=this;c._super(a),a=c.settings,b=c.settings.size,c.on(\"click mousedown\",function(a){a.preventDefault()}),c.on(\"touchstart\",function(a){c.fire(\"click\",a),a.preventDefault()}),a.subtype&&c.classes.add(a.subtype),b&&c.classes.add(\"btn-\"+b),a.icon&&c.icon(a.icon)},icon:function(a){return arguments.length?(this.state.set(\"icon\",a),this):this.state.get(\"icon\")},repaint:function(){var a,b=this.getEl().firstChild;b&&(a=b.style,a.width=a.height=\"100%\"),this._super()},renderHtml:function(){var a,b=this,c=b._id,d=b.classPrefix,e=b.state.get(\"icon\"),f=b.state.get(\"text\"),g=\"\";return a=b.settings.image,a?(e=\"none\",\"string\"!=typeof a&&(a=window.getSelection?a[0]:a[1]),a=\" style=\\\"background-image: url('\"+a+\"')\\\"\"):a=\"\",f&&(b.classes.add(\"btn-has-text\"),g='<span class=\"'+d+'txt\">'+b.encode(f)+\"</span>\"),e=e?d+\"ico \"+d+\"i-\"+e:\"\",'<div id=\"'+c+'\" class=\"'+b.classes+'\" tabindex=\"-1\"><button role=\"presentation\" type=\"button\" tabindex=\"-1\">'+(e?'<i class=\"'+e+'\"'+a+\"></i>\":\"\")+g+\"</button></div>\"},bindStates:function(){function a(a){var e=c(\"span.\"+d,b.getEl());a?(e[0]||(c(\"button:first\",b.getEl()).append('<span class=\"'+d+'\"></span>'),e=c(\"span.\"+d,b.getEl())),e.html(b.encode(a))):e.remove(),b.classes.toggle(\"btn-has-text\",!!a)}var b=this,c=b.$,d=b.classPrefix+\"txt\";return b.state.on(\"change:text\",function(b){a(b.value)}),b.state.on(\"change:icon\",function(c){var d=c.value,e=b.classPrefix;b.settings.icon=d,d=d?e+\"ico \"+e+\"i-\"+b.settings.icon:\"\";var f=b.getEl().firstChild,g=f.getElementsByTagName(\"i\")[0];d?(g&&g==f.firstChild||(g=document.createElement(\"i\"),f.insertBefore(g,f.firstChild)),g.className=d):g&&f.removeChild(g),a(b.state.get(\"text\"))}),b._super()}})}),g(\"2w\",[\"2j\"],function(a){\"use strict\";return a.extend({Defaults:{defaultType:\"button\",role:\"group\"},renderHtml:function(){var a=this,b=a._layout;return a.classes.add(\"btn-group\"),a.preRender(),b.preRender(a),'<div id=\"'+a._id+'\" class=\"'+a.classes+'\"><div id=\"'+a._id+'-body\">'+(a.settings.html||\"\")+b.renderHtml(a)+\"</div></div>\"}})}),g(\"2x\",[\"2r\"],function(a){\"use strict\";return a.extend({Defaults:{classes:\"checkbox\",role:\"checkbox\",checked:!1},init:function(a){var b=this;b._super(a),b.on(\"click mousedown\",function(a){a.preventDefault()}),b.on(\"click\",function(a){a.preventDefault(),b.disabled()||b.checked(!b.checked())}),b.checked(b.settings.checked)},checked:function(a){return arguments.length?(this.state.set(\"checked\",a),this):this.state.get(\"checked\")},value:function(a){return arguments.length?this.checked(a):this.checked()},renderHtml:function(){var a=this,b=a._id,c=a.classPrefix;return'<div id=\"'+b+'\" class=\"'+a.classes+'\" unselectable=\"on\" aria-labelledby=\"'+b+'-al\" tabindex=\"-1\"><i class=\"'+c+\"ico \"+c+'i-checkbox\"></i><span id=\"'+b+'-al\" class=\"'+c+'label\">'+a.encode(a.state.get(\"text\"))+\"</span></div>\"},bindStates:function(){function a(a){b.classes.toggle(\"checked\",a),b.aria(\"checked\",a)}var b=this;return b.state.on(\"change:text\",function(a){b.getEl(\"al\").firstChild.data=b.translate(a.value)}),b.state.on(\"change:checked change:value\",function(c){b.fire(\"change\"),a(c.value)}),b.state.on(\"change:icon\",function(a){var c=a.value,d=b.classPrefix;if(\"undefined\"==typeof c)return b.settings.icon;b.settings.icon=c,c=c?d+\"ico \"+d+\"i-\"+b.settings.icon:\"\";var e=b.getEl().firstChild,f=e.getElementsByTagName(\"i\")[0];c?(f&&f==e.firstChild||(f=document.createElement(\"i\"),e.insertBefore(f,e.firstChild)),f.className=c):f&&e.removeChild(f)}),b.state.get(\"checked\")&&a(!0),b._super()}})}),g(\"2y\",[\"2r\",\"2h\",\"4q\",\"a\",\"p\",\"9\"],function(a,b,c,d,e,f){\"use strict\";return a.extend({init:function(a){var b=this;b._super(a),a=b.settings,b.classes.add(\"combobox\"),b.subinput=!0,b.ariaTarget=\"inp\",a.menu=a.menu||a.values,a.menu&&(a.icon=\"caret\"),b.on(\"click\",function(c){var e=c.target,f=b.getEl();if(d.contains(f,e)||e==f)for(;e&&e!=f;)e.id&&e.id.indexOf(\"-open\")!=-1&&(b.fire(\"action\"),a.menu&&(b.showMenu(),c.aria&&b.menu.items()[0].focus())),e=e.parentNode}),b.on(\"keydown\",function(a){var c;13==a.keyCode&&\"INPUT\"===a.target.nodeName&&(a.preventDefault(),b.parents().reverse().each(function(a){if(a.toJSON)return c=a,!1}),b.fire(\"submit\",{data:c.toJSON()}))}),b.on(\"keyup\",function(a){if(\"INPUT\"==a.target.nodeName){var c=b.state.get(\"value\"),d=a.target.value;d!==c&&(b.state.set(\"value\",d),b.fire(\"autocomplete\",a))}}),b.on(\"mouseover\",function(a){var c=b.tooltip().moveTo(-65535);if(b.statusLevel()&&a.target.className.indexOf(b.classPrefix+\"status\")!==-1){var d=b.statusMessage()||\"Ok\",e=c.text(d).show().testMoveRel(a.target,[\"bc-tc\",\"bc-tl\",\"bc-tr\"]);c.classes.toggle(\"tooltip-n\",\"bc-tc\"==e),c.classes.toggle(\"tooltip-nw\",\"bc-tl\"==e),c.classes.toggle(\"tooltip-ne\",\"bc-tr\"==e),c.moveRel(a.target,e)}})},statusLevel:function(a){return arguments.length>0&&this.state.set(\"statusLevel\",a),this.state.get(\"statusLevel\")},statusMessage:function(a){return arguments.length>0&&this.state.set(\"statusMessage\",a),this.state.get(\"statusMessage\")},showMenu:function(){var a,c=this,d=c.settings;c.menu||(a=d.menu||[],a.length?a={type:\"menu\",items:a}:a.type=a.type||\"menu\",c.menu=b.create(a).parent(c).renderTo(c.getContainerElm()),c.fire(\"createmenu\"),c.menu.reflow(),c.menu.on(\"cancel\",function(a){a.control===c.menu&&c.focus()}),c.menu.on(\"show hide\",function(a){a.control.items().each(function(a){a.active(a.value()==c.value())})}).fire(\"show\"),c.menu.on(\"select\",function(a){c.value(a.control.value())}),c.on(\"focusin\",function(a){\"INPUT\"==a.target.tagName.toUpperCase()&&c.menu.hide()}),c.aria(\"expanded\",!0)),c.menu.show(),c.menu.layoutRect({w:c.layoutRect().w}),c.menu.moveRel(c.getEl(),c.isRtl()?[\"br-tr\",\"tr-br\"]:[\"bl-tl\",\"tl-bl\"])},focus:function(){this.getEl(\"inp\").focus()},repaint:function(){var a,b,e=this,f=e.getEl(),g=e.getEl(\"open\"),h=e.layoutRect(),i=0,j=f.firstChild;e.statusLevel()&&\"none\"!==e.statusLevel()&&(i=parseInt(c.getRuntimeStyle(j,\"padding-right\"),10)-parseInt(c.getRuntimeStyle(j,\"padding-left\"),10)),a=g?h.w-c.getSize(g).width-10:h.w-10;var k=document;return k.all&&(!k.documentMode||k.documentMode<=8)&&(b=e.layoutRect().h-2+\"px\"),d(j).css({width:a-i,lineHeight:b}),e._super(),e},postRender:function(){var a=this;return d(this.getEl(\"inp\")).on(\"change\",function(b){a.state.set(\"value\",b.target.value),a.fire(\"change\",b)}),a._super()},renderHtml:function(){var a,b,c=this,d=c._id,e=c.settings,f=c.classPrefix,g=c.state.get(\"value\")||\"\",h=\"\",i=\"\",j=\"\";return\"spellcheck\"in e&&(i+=' spellcheck=\"'+e.spellcheck+'\"'),e.maxLength&&(i+=' maxlength=\"'+e.maxLength+'\"'),e.size&&(i+=' size=\"'+e.size+'\"'),e.subtype&&(i+=' type=\"'+e.subtype+'\"'),j='<i id=\"'+d+'-status\" class=\"mce-status mce-ico\" style=\"display: none\"></i>',c.disabled()&&(i+=' disabled=\"disabled\"'),a=e.icon,a&&\"caret\"!=a&&(a=f+\"ico \"+f+\"i-\"+e.icon),b=c.state.get(\"text\"),(a||b)&&(h='<div id=\"'+d+'-open\" class=\"'+f+\"btn \"+f+'open\" tabIndex=\"-1\" role=\"button\"><button id=\"'+d+'-action\" type=\"button\" hidefocus=\"1\" tabindex=\"-1\">'+(\"caret\"!=a?'<i class=\"'+a+'\"></i>':'<i class=\"'+f+'caret\"></i>')+(b?(a?\" \":\"\")+b:\"\")+\"</button></div>\",c.classes.add(\"has-open\")),'<div id=\"'+d+'\" class=\"'+c.classes+'\"><input id=\"'+d+'-inp\" class=\"'+f+'textbox\" value=\"'+c.encode(g,!1)+'\" hidefocus=\"1\"'+i+' placeholder=\"'+c.encode(e.placeholder)+'\" />'+j+h+\"</div>\"},value:function(a){return arguments.length?(this.state.set(\"value\",a),this):(this.state.get(\"rendered\")&&this.state.set(\"value\",this.getEl(\"inp\").value),this.state.get(\"value\"))},showAutoComplete:function(a,c){var d=this;if(0===a.length)return void d.hideMenu();var e=function(a,b){return function(){d.fire(\"selectitem\",{title:b,value:a})}};d.menu?d.menu.items().remove():d.menu=b.create({type:\"menu\",classes:\"combobox-menu\",layout:\"flow\"}).parent(d).renderTo(),f.each(a,function(a){d.menu.add({text:a.title,url:a.previewUrl,match:c,classes:\"menu-item-ellipsis\",onclick:e(a.value,a.title)})}),d.menu.renderNew(),d.hideMenu(),d.menu.on(\"cancel\",function(a){a.control.parent()===d.menu&&(a.stopPropagation(),d.focus(),d.hideMenu())}),d.menu.on(\"select\",function(){d.focus()});var g=d.layoutRect().w;d.menu.layoutRect({w:g,minW:0,maxW:g}),d.menu.reflow(),d.menu.show(),d.menu.moveRel(d.getEl(),d.isRtl()?[\"br-tr\",\"tr-br\"]:[\"bl-tl\",\"tl-bl\"])},hideMenu:function(){this.menu&&this.menu.hide()},bindStates:function(){var a=this;a.state.on(\"change:value\",function(b){a.getEl(\"inp\").value!=b.value&&(a.getEl(\"inp\").value=b.value)}),a.state.on(\"change:disabled\",function(b){a.getEl(\"inp\").disabled=b.value}),a.state.on(\"change:statusLevel\",function(b){var d=a.getEl(\"status\"),e=a.classPrefix,f=b.value;c.css(d,\"display\",\"none\"===f?\"none\":\"\"),c.toggleClass(d,e+\"i-checkmark\",\"ok\"===f),c.toggleClass(d,e+\"i-warning\",\"warn\"===f),c.toggleClass(d,e+\"i-error\",\"error\"===f),a.classes.toggle(\"has-status\",\"none\"!==f),a.repaint()}),c.on(a.getEl(\"status\"),\"mouseleave\",function(){a.tooltip().hide()}),a.on(\"cancel\",function(b){a.menu&&a.menu.visible()&&(b.stopPropagation(),a.hideMenu())});var b=function(a,b){b&&b.items().length>0&&b.items().eq(a)[0].focus()};return a.on(\"keydown\",function(c){var d=c.keyCode;\"INPUT\"===c.target.nodeName&&(d===e.DOWN?(c.preventDefault(),a.fire(\"autocomplete\"),b(0,a.menu)):d===e.UP&&(c.preventDefault(),b(-1,a.menu)))}),a._super()},remove:function(){d(this.getEl(\"inp\")).off(),this.menu&&this.menu.remove(),this._super()}})}),g(\"2z\",[\"2y\"],function(a){\"use strict\";return a.extend({init:function(a){var b=this;a.spellcheck=!1,a.onaction&&(a.icon=\"none\"),b._super(a),b.classes.add(\"colorbox\"),b.on(\"change keyup postrender\",function(){b.repaintColor(b.value())})},repaintColor:function(a){var b=this.getEl(\"open\"),c=b?b.getElementsByTagName(\"i\")[0]:null;if(c)try{c.style.background=a}catch(a){}},bindStates:function(){var a=this;return a.state.on(\"change:value\",function(b){a.state.get(\"rendered\")&&a.repaintColor(b.value)}),a._super()}})}),g(\"30\",[\"2v\",\"2p\"],function(a,b){\"use strict\";return a.extend({showPanel:function(){var a=this,c=a.settings;if(a.active(!0),a.panel)a.panel.show();else{var d=c.panel;d.type&&(d={layout:\"grid\",items:d}),d.role=d.role||\"dialog\",d.popover=!0,d.autohide=!0,d.ariaRoot=!0,a.panel=new b(d).on(\"hide\",function(){a.active(!1)}).on(\"cancel\",function(b){b.stopPropagation(),a.focus(),a.hidePanel()}).parent(a).renderTo(a.getContainerElm()),a.panel.fire(\"show\"),a.panel.reflow()}var e=a.panel.testMoveRel(a.getEl(),c.popoverAlign||(a.isRtl()?[\"bc-tc\",\"bc-tl\",\"bc-tr\"]:[\"bc-tc\",\"bc-tr\",\"bc-tl\"]));a.panel.classes.toggle(\"start\",\"bc-tl\"===e),a.panel.classes.toggle(\"end\",\"bc-tr\"===e),a.panel.moveRel(a.getEl(),e)},hidePanel:function(){var a=this;a.panel&&a.panel.hide()},postRender:function(){var a=this;return a.aria(\"haspopup\",!0),a.on(\"click\",function(b){b.control===a&&(a.panel&&a.panel.visible()?a.hidePanel():(a.showPanel(),a.panel.focus(!!b.aria)))}),a._super()},remove:function(){return this.panel&&(this.panel.remove(),this.panel=null),this._super()}})}),g(\"31\",[\"30\",\"e\"],function(a,b){\"use strict\";var c=b.DOM;return a.extend({init:function(a){this._super(a),this.classes.add(\"colorbutton\")},color:function(a){return a?(this._color=a,this.getEl(\"preview\").style.backgroundColor=a,this):this._color},resetColor:function(){return this._color=null,this.getEl(\"preview\").style.backgroundColor=null,this},renderHtml:function(){var a=this,b=a._id,c=a.classPrefix,d=a.state.get(\"text\"),e=a.settings.icon?c+\"ico \"+c+\"i-\"+a.settings.icon:\"\",f=a.settings.image?\" style=\\\"background-image: url('\"+a.settings.image+\"')\\\"\":\"\",g=\"\";return d&&(a.classes.add(\"btn-has-text\"),g='<span class=\"'+c+'txt\">'+a.encode(d)+\"</span>\"),'<div id=\"'+b+'\" class=\"'+a.classes+'\" role=\"button\" tabindex=\"-1\" aria-haspopup=\"true\"><button role=\"presentation\" hidefocus=\"1\" type=\"button\" tabindex=\"-1\">'+(e?'<i class=\"'+e+'\"'+f+\"></i>\":\"\")+'<span id=\"'+b+'-preview\" class=\"'+c+'preview\"></span>'+g+'</button><button type=\"button\" class=\"'+c+'open\" hidefocus=\"1\" tabindex=\"-1\"> <i class=\"'+c+'caret\"></i></button></div>'},postRender:function(){var a=this,b=a.settings.onclick;return a.on(\"click\",function(d){d.aria&&\"down\"==d.aria.key||d.control!=a||c.getParent(d.target,\".\"+a.classPrefix+\"open\")||(d.stopImmediatePropagation(),b.call(a,d))}),delete a.settings.onclick,a._super()}})}),g(\"32\",[\"2r\",\"2k\",\"4q\",\"1e\"],function(a,b,c,d){\"use strict\";return a.extend({Defaults:{classes:\"widget colorpicker\"},init:function(a){this._super(a)},postRender:function(){function a(a,b){var d,e,f=c.getPos(a);return d=b.pageX-f.x,e=b.pageY-f.y,d=Math.max(0,Math.min(d/a.clientWidth,1)),e=Math.max(0,Math.min(e/a.clientHeight,1)),{x:d,y:e}}function e(a,b){var e=(360-a.h)/360;c.css(j,{top:100*e+\"%\"}),b||c.css(l,{left:a.s+\"%\",top:100-a.v+\"%\"}),k.style.background=new d({s:100,v:100,h:a.h}).toHex(),m.color().parse({s:a.s,v:a.v,h:a.h})}function f(b){var c;c=a(k,b),h.s=100*c.x,h.v=100*(1-c.y),e(h),m.fire(\"change\")}function g(b){var c;c=a(i,b),h=n.toHsv(),h.h=360*(1-c.y),e(h,!0),m.fire(\"change\")}var h,i,j,k,l,m=this,n=m.color();i=m.getEl(\"h\"),j=m.getEl(\"hp\"),k=m.getEl(\"sv\"),l=m.getEl(\"svp\"),m._repaint=function(){h=n.toHsv(),e(h)},m._super(),m._svdraghelper=new b(m._id+\"-sv\",{start:f,drag:f}),m._hdraghelper=new b(m._id+\"-h\",{start:g,drag:g}),m._repaint()},rgb:function(){return this.color().toRgb()},value:function(a){var b=this;return arguments.length?(b.color().parse(a),void(b._rendered&&b._repaint())):b.color().toHex()},color:function(){return this._color||(this._color=new d),this._color},renderHtml:function(){function a(){var a,b,c,d,g=\"\";for(c=\"filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=\",d=f.split(\",\"),a=0,b=d.length-1;a<b;a++)g+='<div class=\"'+e+'colorpicker-h-chunk\" style=\"height:'+100/b+\"%;\"+c+d[a]+\",endColorstr=\"+d[a+1]+\");-ms-\"+c+d[a]+\",endColorstr=\"+d[a+1]+')\"></div>';return g}var b,c=this,d=c._id,e=c.classPrefix,f=\"#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000\",g=\"background: -ms-linear-gradient(top,\"+f+\");background: linear-gradient(to bottom,\"+f+\");\";return b='<div id=\"'+d+'-h\" class=\"'+e+'colorpicker-h\" style=\"'+g+'\">'+a()+'<div id=\"'+d+'-hp\" class=\"'+e+'colorpicker-h-marker\"></div></div>','<div id=\"'+d+'\" class=\"'+c.classes+'\"><div id=\"'+d+'-sv\" class=\"'+e+'colorpicker-sv\"><div class=\"'+e+'colorpicker-overlay1\"><div class=\"'+e+'colorpicker-overlay2\"><div id=\"'+d+'-svp\" class=\"'+e+'colorpicker-selector1\"><div class=\"'+e+'colorpicker-selector2\"></div></div></div></div></div>'+b+\"</div>\"}})}),g(\"33\",[\"2r\"],function(a){\"use strict\";return a.extend({init:function(a){var b=this;a.delimiter||(a.delimiter=\"\\xbb\"),b._super(a),b.classes.add(\"path\"),b.canFocus=!0,b.on(\"click\",function(a){var c,d=a.target;(c=d.getAttribute(\"data-index\"))&&b.fire(\"select\",{value:b.row()[c],index:c})}),b.row(b.settings.row)},focus:function(){var a=this;return a.getEl().firstChild.focus(),a},row:function(a){return arguments.length?(this.state.set(\"row\",a),this):this.state.get(\"row\")},renderHtml:function(){var a=this;return'<div id=\"'+a._id+'\" class=\"'+a.classes+'\">'+a._getDataPathHtml(a.state.get(\"row\"))+\"</div>\"},bindStates:function(){var a=this;return a.state.on(\"change:row\",function(b){a.innerHtml(a._getDataPathHtml(b.value))}),a._super()},_getDataPathHtml:function(a){var b,c,d=this,e=a||[],f=\"\",g=d.classPrefix;for(b=0,c=e.length;b<c;b++)f+=(b>0?'<div class=\"'+g+'divider\" aria-hidden=\"true\"> '+d.settings.delimiter+\" </div>\":\"\")+'<div role=\"button\" class=\"'+g+\"path-item\"+(b==c-1?\" \"+g+\"last\":\"\")+'\" data-index=\"'+b+'\" tabindex=\"-1\" id=\"'+d._id+\"-\"+b+'\" aria-level=\"'+(b+1)+'\">'+e[b].name+\"</div>\";\nreturn f||(f='<div class=\"'+g+'path-item\">\\xa0</div>'),f}})}),g(\"34\",[\"33\"],function(a){return a.extend({postRender:function(){function a(a){if(1===a.nodeType){if(\"BR\"==a.nodeName||a.getAttribute(\"data-mce-bogus\"))return!0;if(\"bookmark\"===a.getAttribute(\"data-mce-type\"))return!0}return!1}var b=this,c=b.settings.editor;return c.settings.elementpath!==!1&&(b.on(\"select\",function(a){c.focus(),c.selection.select(this.row()[a.index].element),c.nodeChanged()}),c.on(\"nodeChange\",function(d){for(var e=[],f=d.parents,g=f.length;g--;)if(1==f[g].nodeType&&!a(f[g])){var h=c.fire(\"ResolveName\",{name:f[g].nodeName.toLowerCase(),target:f[g]});if(h.isDefaultPrevented()||e.push({name:h.name,element:f[g]}),h.isPropagationStopped())break}b.row(e)})),b._super()}})}),g(\"35\",[\"2j\"],function(a){\"use strict\";return a.extend({Defaults:{layout:\"flex\",align:\"center\",defaults:{flex:1}},renderHtml:function(){var a=this,b=a._layout,c=a.classPrefix;return a.classes.add(\"formitem\"),b.preRender(a),'<div id=\"'+a._id+'\" class=\"'+a.classes+'\" hidefocus=\"1\" tabindex=\"-1\">'+(a.settings.title?'<div id=\"'+a._id+'-title\" class=\"'+c+'title\">'+a.settings.title+\"</div>\":\"\")+'<div id=\"'+a._id+'-body\" class=\"'+a.bodyClasses+'\">'+(a.settings.html||\"\")+b.renderHtml(a)+\"</div></div>\"}})}),g(\"36\",[\"2j\",\"35\",\"9\"],function(a,b,c){\"use strict\";return a.extend({Defaults:{containerCls:\"form\",layout:\"flex\",direction:\"column\",align:\"stretch\",flex:1,padding:20,labelGap:30,spacing:10,callbacks:{submit:function(){this.submit()}}},preRender:function(){var a=this,d=a.items();a.settings.formItemDefaults||(a.settings.formItemDefaults={layout:\"flex\",autoResize:\"overflow\",defaults:{flex:1}}),d.each(function(d){var e,f=d.settings.label;f&&(e=new b(c.extend({items:{type:\"label\",id:d._id+\"-l\",text:f,flex:0,forId:d._id,disabled:d.disabled()}},a.settings.formItemDefaults)),e.type=\"formitem\",d.aria(\"labelledby\",d._id+\"-l\"),\"undefined\"==typeof d.settings.flex&&(d.settings.flex=1),a.replace(d,e),e.add(d))})},submit:function(){return this.fire(\"submit\",{data:this.toJSON()})},postRender:function(){var a=this;a._super(),a.fromJSON(a.settings.data)},bindStates:function(){function a(){var a,c,d,e=0,f=[];if(b.settings.labelGapCalc!==!1)for(d=\"children\"==b.settings.labelGapCalc?b.find(\"formitem\"):b.items(),d.filter(\"formitem\").each(function(a){var b=a.items()[0],c=b.getEl().clientWidth;e=c>e?c:e,f.push(b)}),c=b.settings.labelGap||0,a=f.length;a--;)f[a].settings.minWidth=e+c}var b=this;b._super(),b.on(\"show\",a),a()}})}),g(\"37\",[\"36\"],function(a){\"use strict\";return a.extend({Defaults:{containerCls:\"fieldset\",layout:\"flex\",direction:\"column\",align:\"stretch\",flex:1,padding:\"25 15 5 15\",labelGap:30,spacing:10,border:1},renderHtml:function(){var a=this,b=a._layout,c=a.classPrefix;return a.preRender(),b.preRender(a),'<fieldset id=\"'+a._id+'\" class=\"'+a.classes+'\" hidefocus=\"1\" tabindex=\"-1\">'+(a.settings.title?'<legend id=\"'+a._id+'-title\" class=\"'+c+'fieldset-title\">'+a.settings.title+\"</legend>\":\"\")+'<div id=\"'+a._id+'-body\" class=\"'+a.bodyClasses+'\">'+(a.settings.html||\"\")+b.renderHtml(a)+\"</div></fieldset>\"}})}),g(\"4x\",[\"e\",\"1j\",\"1g\",\"1w\",\"9\",\"2a\"],function(a,b,c,d,e,f){var g=e.trim,h=function(a,b,c,d,e){return{type:a,title:b,url:c,level:d,attach:e}},i=function(a){for(;a=a.parentNode;){var c=a.contentEditable;if(c&&\"inherit\"!==c)return b.isContentEditableTrue(a)}return!1},j=function(b,c){return a.DOM.select(b,c)},k=function(a){return a.innerText||a.textContent},l=function(a){return a.id?a.id:f.uuid(\"h\")},m=function(a){return a&&\"A\"===a.nodeName&&(a.id||a.name)},n=function(a){return m(a)&&p(a)},o=function(a){return a&&/^(H[1-6])$/.test(a.nodeName)},p=function(a){return i(a)&&!b.isContentEditableFalse(a)},q=function(a){return o(a)&&p(a)},r=function(a){return o(a)?parseInt(a.nodeName.substr(1),10):0},s=function(a){var b=l(a),c=function(){a.id=b};return h(\"header\",k(a),\"#\"+b,r(a),c)},t=function(a){var b=a.id||a.name,c=k(a);return h(\"anchor\",c?c:\"#\"+b,\"#\"+b,0,d.noop)},u=function(a){return c.map(c.filter(a,q),s)},v=function(a){return c.map(c.filter(a,n),t)},w=function(a){var b=j(\"h1,h2,h3,h4,h5,h6,a:not([href])\",a);return b},x=function(a){return g(a.title).length>0},y=function(a){var b=w(a);return c.filter(u(b).concat(v(b)),x)};return{find:y}}),g(\"38\",[\"4t\",\"4x\",\"17\",\"2y\",\"1g\",\"1w\",\"9\"],function(a,b,c,d,e,f,g){\"use strict\";var h=function(){return a.tinymce?a.tinymce.activeEditor:c.activeEditor},i={},j=5,k=function(a){return{title:a.title,value:{title:{raw:a.title},url:a.url,attach:a.attach}}},l=function(a){return g.map(a,k)},m=function(a,b){return{title:a,value:{title:a,url:b,attach:f.noop}}},n=function(a,b){var c=e.find(b,function(b){return b.url===a});return!c},o=function(a,b,c){var d=b in a?a[b]:c;return d===!1?null:d},p=function(a,b,c,d){var h={title:\"-\"},j=function(a){var d=e.filter(a[c],function(a){return n(a,b)});return g.map(d,function(a){return{title:a,value:{title:a,url:a,attach:f.noop}}})},k=function(a){var c=e.filter(b,function(b){return b.type==a});return l(c)},p=function(){var a=k(\"anchor\"),b=o(d,\"anchor_top\",\"#top\"),c=o(d,\"anchor_bottom\",\"#bottom\");return null!==b&&a.unshift(m(\"<top>\",b)),null!==c&&a.push(m(\"<bottom>\",c)),a},q=function(a){return e.reduce(a,function(a,b){var c=0===a.length||0===b.length;return c?a.concat(b):a.concat(h,b)},[])};return d.typeahead_urls===!1?[]:\"file\"===c?q([r(a,j(i)),r(a,k(\"header\")),r(a,p())]):r(a,j(i))},q=function(a,b){var c=i[b];/^https?/.test(a)&&(c?e.indexOf(c,a)===-1&&(i[b]=c.slice(0,j).concat(a)):i[b]=[a])},r=function(a,b){var c=a.toLowerCase(),d=g.grep(b,function(a){return a.title.toLowerCase().indexOf(c)!==-1});return 1===d.length&&d[0].title===a?[]:d},s=function(a){var b=a.title;return b.raw?b.raw:b},t=function(a,c,d,e){var f=function(f){var g=b.find(d),h=p(f,g,e,c);a.showAutoComplete(h,f)};a.on(\"autocomplete\",function(){f(a.value())}),a.on(\"selectitem\",function(b){var c=b.value;a.value(c.url);var d=s(c);\"image\"===e?a.fire(\"change\",{meta:{alt:d,attach:c.attach}}):a.fire(\"change\",{meta:{text:d,attach:c.attach}}),a.focus()}),a.on(\"click\",function(b){0===a.value().length&&\"INPUT\"===b.target.nodeName&&f(\"\")}),a.on(\"PostRender\",function(){a.getRoot().on(\"submit\",function(b){b.isDefaultPrevented()||q(a.value(),e)})})},u=function(a){var b=a.status,c=a.message;return\"valid\"===b?{status:\"ok\",message:c}:\"unknown\"===b?{status:\"warn\",message:c}:\"invalid\"===b?{status:\"warn\",message:c}:{status:\"none\",message:\"\"}},v=function(a,b,c){var d=b.filepicker_validator_handler;if(d){var e=function(b){return 0===b.length?void a.statusLevel(\"none\"):void d({url:b,type:c},function(b){var c=u(b);a.statusMessage(c.message),a.statusLevel(c.status)})};a.state.on(\"change:value\",function(a){e(a.value)})}};return d.extend({init:function(b){var c,d,e,f=this,i=h(),j=i.settings,k=b.filetype;b.spellcheck=!1,e=j.file_picker_types||j.file_browser_callback_types,e&&(e=g.makeMap(e,/[, ]/)),e&&!e[k]||(d=j.file_picker_callback,!d||e&&!e[k]?(d=j.file_browser_callback,!d||e&&!e[k]||(c=function(){d(f.getEl(\"inp\").id,f.value(),k,a)})):c=function(){var a=f.fire(\"beforecall\").meta;a=g.extend({filetype:k},a),d.call(i,function(a,b){f.value(a).fire(\"change\",{meta:b})},f.value(),a)}),c&&(b.icon=\"browse\",b.onaction=c),f._super(b),t(f,j,i.getBody(),k),v(f,j,k)}})}),g(\"39\",[\"2u\"],function(a){\"use strict\";return a.extend({recalc:function(a){var b=a.layoutRect(),c=a.paddingBox;a.items().filter(\":visible\").each(function(a){a.layoutRect({x:c.left,y:c.top,w:b.innerW-c.right-c.left,h:b.innerH-c.top-c.bottom}),a.recalc&&a.recalc()})}})}),g(\"3a\",[\"2u\"],function(a){\"use strict\";return a.extend({recalc:function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N=[],O=Math.max,P=Math.min;for(d=a.items().filter(\":visible\"),e=a.layoutRect(),f=a.paddingBox,g=a.settings,m=a.isRtl()?g.direction||\"row-reversed\":g.direction,h=g.align,i=a.isRtl()?g.pack||\"end\":g.pack,j=g.spacing||0,\"row-reversed\"!=m&&\"column-reverse\"!=m||(d=d.set(d.toArray().reverse()),m=m.split(\"-\")[0]),\"column\"==m?(z=\"y\",x=\"h\",y=\"minH\",A=\"maxH\",C=\"innerH\",B=\"top\",D=\"deltaH\",E=\"contentH\",J=\"left\",H=\"w\",F=\"x\",G=\"innerW\",I=\"minW\",K=\"right\",L=\"deltaW\",M=\"contentW\"):(z=\"x\",x=\"w\",y=\"minW\",A=\"maxW\",C=\"innerW\",B=\"left\",D=\"deltaW\",E=\"contentW\",J=\"top\",H=\"h\",F=\"y\",G=\"innerH\",I=\"minH\",K=\"bottom\",L=\"deltaH\",M=\"contentH\"),l=e[C]-f[B]-f[B],w=k=0,b=0,c=d.length;b<c;b++)n=d[b],o=n.layoutRect(),p=n.settings,q=p.flex,l-=b<c-1?j:0,q>0&&(k+=q,o[A]&&N.push(n),o.flex=q),l-=o[y],r=f[J]+o[I]+f[K],r>w&&(w=r);if(u={},l<0?u[y]=e[y]-l+e[D]:u[y]=e[C]-l+e[D],u[I]=w+e[L],u[E]=e[C]-l,u[M]=w,u.minW=P(u.minW,e.maxW),u.minH=P(u.minH,e.maxH),u.minW=O(u.minW,e.startMinWidth),u.minH=O(u.minH,e.startMinHeight),!e.autoResize||u.minW==e.minW&&u.minH==e.minH){for(t=l/k,b=0,c=N.length;b<c;b++)n=N[b],o=n.layoutRect(),s=o[A],r=o[y]+o.flex*t,r>s?(l-=o[A]-o[y],k-=o.flex,o.flex=0,o.maxFlexSize=s):o.maxFlexSize=0;for(t=l/k,v=f[B],u={},0===k&&(\"end\"==i?v=l+f[B]:\"center\"==i?(v=Math.round(e[C]/2-(e[C]-l)/2)+f[B],v<0&&(v=f[B])):\"justify\"==i&&(v=f[B],j=Math.floor(l/(d.length-1)))),u[F]=f[J],b=0,c=d.length;b<c;b++)n=d[b],o=n.layoutRect(),r=o.maxFlexSize||o[y],\"center\"===h?u[F]=Math.round(e[G]/2-o[H]/2):\"stretch\"===h?(u[H]=O(o[I]||0,e[G]-f[J]-f[K]),u[F]=f[J]):\"end\"===h&&(u[F]=e[G]-o[H]-f.top),o.flex>0&&(r+=o.flex*t),u[x]=r,u[z]=v,n.layoutRect(u),n.recalc&&n.recalc(),v+=r+j}else if(u.w=u.minW,u.h=u.minH,a.layoutRect(u),this.recalc(a),null===a._lastRect){var Q=a.parent();Q&&(Q._lastRect=null,Q.recalc())}}})}),g(\"3b\",[\"2t\"],function(a){return a.extend({Defaults:{containerClass:\"flow-layout\",controlClass:\"flow-layout-item\",endClass:\"break\"},recalc:function(a){a.items().filter(\":visible\").each(function(a){a.recalc&&a.recalc()})},isNative:function(){return!0}})}),g(\"4y\",[\"1m\",\"4z\",\"1r\",\"4d\",\"e\"],function(a,b,c,d,e){var f=function(a,c,d){for(;d!==c;){if(d.style[a]){var e=d.style[a];return\"\"!==e?b.some(e):b.none()}d=d.parentNode}return b.none()},g=function(a){return/[0-9.]+px$/.test(a)?Math.round(72*parseInt(a,10)/96)+\"pt\":a},h=function(a){return a.replace(/[\\'\\\"]/g,\"\").replace(/,\\s+/g,\",\")},i=function(a,c){return b.from(e.DOM.getStyle(c,a,!0))},j=function(a){return function(e,g){return b.from(g).map(c.fromDom).filter(d.isElement).bind(function(b){return f(a,e,b.dom()).or(i(a,b.dom()))}).getOr(\"\")}};return{getFontSize:j(\"fontSize\"),getFontFamily:a.compose(h,j(\"fontFamily\")),toPt:g}}),g(\"3c\",[\"2g\",\"2r\",\"2p\",\"9\",\"1g\",\"e\",\"17\",\"6\",\"4y\"],function(a,b,c,d,e,f,g,h,i){function j(a){a.settings.ui_container&&(h.container=f.DOM.select(a.settings.ui_container)[0])}function k(b){b.on(\"ScriptsLoaded\",function(){b.rtl&&(a.rtl=!0)})}function l(a){function b(b,c){return function(){var d=this;a.on(\"nodeChange\",function(e){var f=a.formatter,g=null;m(e.parents,function(a){if(m(b,function(b){if(c?f.matchNode(a,c,{value:b.value})&&(g=b.value):f.matchNode(a,b.value)&&(g=b.value),g)return!1}),g)return!1}),d.value(g)})}}function e(b){return function(){var c=this,d=function(a){return a?a.split(\",\")[0]:\"\"};a.on(\"init nodeChange\",function(e){var f,g=null;f=i.getFontFamily(a.getBody(),e.element),m(b,function(a){a.value.toLowerCase()===f.toLowerCase()&&(g=a.value)}),m(b,function(a){g||d(a.value).toLowerCase()!==d(f).toLowerCase()||(g=a.value)}),c.value(g),!g&&f&&c.text(d(f))})}}function f(b){return function(){var c=this;a.on(\"init nodeChange\",function(d){var e,f,g=null;e=i.getFontSize(a.getBody(),d.element),f=i.toPt(e),m(b,function(a){a.value===e?g=e:a.value===f&&(g=f)}),c.value(g),g||c.text(f)})}}function g(a){a=a.replace(/;$/,\"\").split(\";\");for(var b=a.length;b--;)a[b]=a[b].split(\"=\");return a}function h(){function b(a){var c=[];if(a)return m(a,function(a){var f={text:a.title,icon:a.icon};if(a.items)f.menu=b(a.items);else{var g=a.format||\"custom\"+d++;a.format||(a.name=g,e.push(a)),f.format=g,f.cmd=a.cmd}c.push(f)}),c}function c(){var c;return c=b(a.settings.style_formats_merge?a.settings.style_formats?f.concat(a.settings.style_formats):f:a.settings.style_formats||f)}var d=0,e=[],f=[{title:\"Headings\",items:[{title:\"Heading 1\",format:\"h1\"},{title:\"Heading 2\",format:\"h2\"},{title:\"Heading 3\",format:\"h3\"},{title:\"Heading 4\",format:\"h4\"},{title:\"Heading 5\",format:\"h5\"},{title:\"Heading 6\",format:\"h6\"}]},{title:\"Inline\",items:[{title:\"Bold\",icon:\"bold\",format:\"bold\"},{title:\"Italic\",icon:\"italic\",format:\"italic\"},{title:\"Underline\",icon:\"underline\",format:\"underline\"},{title:\"Strikethrough\",icon:\"strikethrough\",format:\"strikethrough\"},{title:\"Superscript\",icon:\"superscript\",format:\"superscript\"},{title:\"Subscript\",icon:\"subscript\",format:\"subscript\"},{title:\"Code\",icon:\"code\",format:\"code\"}]},{title:\"Blocks\",items:[{title:\"Paragraph\",format:\"p\"},{title:\"Blockquote\",format:\"blockquote\"},{title:\"Div\",format:\"div\"},{title:\"Pre\",format:\"pre\"}]},{title:\"Alignment\",items:[{title:\"Left\",icon:\"alignleft\",format:\"alignleft\"},{title:\"Center\",icon:\"aligncenter\",format:\"aligncenter\"},{title:\"Right\",icon:\"alignright\",format:\"alignright\"},{title:\"Justify\",icon:\"alignjustify\",format:\"alignjustify\"}]}];return a.on(\"init\",function(){m(e,function(b){a.formatter.register(b.name,b)})}),{type:\"menu\",items:c(),onPostRender:function(b){a.fire(\"renderFormatsMenu\",{control:b.control})},itemDefaults:{preview:!0,textStyle:function(){if(this.settings.format)return a.formatter.getCssText(this.settings.format)},onPostRender:function(){var b=this;b.parent().on(\"show\",function(){var c,d;c=b.settings.format,c&&(b.disabled(!a.formatter.canApply(c)),b.active(a.formatter.match(c))),d=b.settings.cmd,d&&b.active(a.queryCommandState(d))})},onclick:function(){this.settings.format&&o(this.settings.format),this.settings.cmd&&a.execCommand(this.settings.cmd)}}}}function j(b){return function(){var c=this;a.formatter?a.formatter.formatChanged(b,function(a){c.active(a)}):a.on(\"init\",function(){a.formatter.formatChanged(b,function(a){c.active(a)})})}}function k(b){return function(){function c(){var c=\"redo\"==b?\"hasRedo\":\"hasUndo\";return!!a.undoManager&&a.undoManager[c]()}var d=this;d.disabled(!c()),a.on(\"Undo Redo AddUndo TypingUndo ClearUndos SwitchMode\",function(){d.disabled(a.readonly||!c())})}}function l(){var b=this;a.on(\"VisualAid\",function(a){b.active(a.hasVisual)}),b.active(a.hasVisual)}function o(b){b.control&&(b=b.control.value()),b&&a.execCommand(\"mceToggleFormat\",!1,b)}function p(b){var c=b.length;return d.each(b,function(b){b.menu&&(b.hidden=0===p(b.menu));var d=b.format;d&&(b.hidden=!a.formatter.canApply(d)),b.hidden&&c--}),c}function q(b){var c=b.items().length;return b.items().each(function(b){b.menu&&b.visible(q(b.menu)>0),!b.menu&&b.settings.menu&&b.visible(p(b.settings.menu)>0);var d=b.settings.format;d&&b.visible(a.formatter.canApply(d)),b.visible()||c--}),c}var r;r=h(),m({bold:\"Bold\",italic:\"Italic\",underline:\"Underline\",strikethrough:\"Strikethrough\",subscript:\"Subscript\",superscript:\"Superscript\"},function(b,c){a.addButton(c,{tooltip:b,onPostRender:j(c),onclick:function(){o(c)}})}),m({outdent:[\"Decrease indent\",\"Outdent\"],indent:[\"Increase indent\",\"Indent\"],cut:[\"Cut\",\"Cut\"],copy:[\"Copy\",\"Copy\"],paste:[\"Paste\",\"Paste\"],help:[\"Help\",\"mceHelp\"],selectall:[\"Select all\",\"SelectAll\"],removeformat:[\"Clear formatting\",\"RemoveFormat\"],visualaid:[\"Visual aids\",\"mceToggleVisualAid\"],newdocument:[\"New document\",\"mceNewDocument\"]},function(b,c){a.addButton(c,{tooltip:b[0],cmd:b[1]})}),m({blockquote:[\"Blockquote\",\"mceBlockQuote\"],subscript:[\"Subscript\",\"Subscript\"],superscript:[\"Superscript\",\"Superscript\"],alignleft:[\"Align left\",\"JustifyLeft\"],aligncenter:[\"Align center\",\"JustifyCenter\"],alignright:[\"Align right\",\"JustifyRight\"],alignjustify:[\"Justify\",\"JustifyFull\"],alignnone:[\"No alignment\",\"JustifyNone\"]},function(b,c){a.addButton(c,{tooltip:b[0],cmd:b[1],onPostRender:j(c)})});var s=function(a){var b=a;return b.length>0&&\"-\"===b[0].text&&(b=b.slice(1)),b.length>0&&\"-\"===b[b.length-1].text&&(b=b.slice(0,b.length-1)),b},t=function(b){var c,e;if(\"string\"==typeof b)e=b.split(\" \");else if(d.isArray(b))return n(d.map(b,t));return c=d.grep(e,function(b){return\"|\"===b||b in a.menuItems}),d.map(c,function(b){return\"|\"===b?{text:\"-\"}:a.menuItems[b]})},u=function(b){var c=[{text:\"-\"}],e=d.grep(a.menuItems,function(a){return a.context===b});return d.each(e,function(a){\"before\"==a.separator&&c.push({text:\"|\"}),a.prependToContext?c.unshift(a):c.push(a),\"after\"==a.separator&&c.push({text:\"|\"})}),c},v=function(a){return s(a.insert_button_items?t(a.insert_button_items):u(\"insert\"))};a.addButton(\"undo\",{tooltip:\"Undo\",onPostRender:k(\"undo\"),cmd:\"undo\"}),a.addButton(\"redo\",{tooltip:\"Redo\",onPostRender:k(\"redo\"),cmd:\"redo\"}),a.addMenuItem(\"newdocument\",{text:\"New document\",icon:\"newdocument\",cmd:\"mceNewDocument\"}),a.addMenuItem(\"undo\",{text:\"Undo\",icon:\"undo\",shortcut:\"Meta+Z\",onPostRender:k(\"undo\"),cmd:\"undo\"}),a.addMenuItem(\"redo\",{text:\"Redo\",icon:\"redo\",shortcut:\"Meta+Y\",onPostRender:k(\"redo\"),cmd:\"redo\"}),a.addMenuItem(\"visualaid\",{text:\"Visual aids\",selectable:!0,onPostRender:l,cmd:\"mceToggleVisualAid\"}),a.addButton(\"remove\",{tooltip:\"Remove\",icon:\"remove\",cmd:\"Delete\"}),a.addButton(\"insert\",{type:\"menubutton\",icon:\"insert\",menu:[],oncreatemenu:function(){this.menu.add(v(a.settings)),this.menu.renderNew()}}),m({cut:[\"Cut\",\"Cut\",\"Meta+X\"],copy:[\"Copy\",\"Copy\",\"Meta+C\"],paste:[\"Paste\",\"Paste\",\"Meta+V\"],selectall:[\"Select all\",\"SelectAll\",\"Meta+A\"],bold:[\"Bold\",\"Bold\",\"Meta+B\"],italic:[\"Italic\",\"Italic\",\"Meta+I\"],underline:[\"Underline\",\"Underline\",\"Meta+U\"],strikethrough:[\"Strikethrough\",\"Strikethrough\"],subscript:[\"Subscript\",\"Subscript\"],superscript:[\"Superscript\",\"Superscript\"],removeformat:[\"Clear formatting\",\"RemoveFormat\"]},function(b,c){a.addMenuItem(c,{text:b[0],icon:c,shortcut:b[2],cmd:b[1]})}),a.on(\"mousedown\",function(){c.hideAll()}),a.addButton(\"styleselect\",{type:\"menubutton\",text:\"Formats\",menu:r,onShowMenu:function(){a.settings.style_formats_autohide&&q(this.menu)}}),a.addButton(\"formatselect\",function(){var c=[],d=g(a.settings.block_formats||\"Paragraph=p;Heading 1=h1;Heading 2=h2;Heading 3=h3;Heading 4=h4;Heading 5=h5;Heading 6=h6;Preformatted=pre\");return m(d,function(b){c.push({text:b[0],value:b[1],textStyle:function(){return a.formatter.getCssText(b[1])}})}),{type:\"listbox\",text:d[0][0],values:c,fixedWidth:!0,onselect:o,onPostRender:b(c)}}),a.addButton(\"fontselect\",function(){var b=\"Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats\",c=[],d=g(a.settings.font_formats||b);return m(d,function(a){c.push({text:{raw:a[0]},value:a[1],textStyle:a[1].indexOf(\"dings\")==-1?\"font-family:\"+a[1]:\"\"})}),{type:\"listbox\",text:\"Font Family\",tooltip:\"Font Family\",values:c,fixedWidth:!0,onPostRender:e(c),onselect:function(b){b.control.settings.value&&a.execCommand(\"FontName\",!1,b.control.settings.value)}}}),a.addButton(\"fontsizeselect\",function(){var b=[],c=\"8pt 10pt 12pt 14pt 18pt 24pt 36pt\",d=a.settings.fontsize_formats||c;return m(d.split(\" \"),function(a){var c=a,d=a,e=a.split(\"=\");e.length>1&&(c=e[0],d=e[1]),b.push({text:c,value:d})}),{type:\"listbox\",text:\"Font Sizes\",tooltip:\"Font Sizes\",values:b,fixedWidth:!0,onPostRender:f(b),onclick:function(b){b.control.settings.value&&a.execCommand(\"FontSize\",!1,b.control.settings.value)}}}),a.addMenuItem(\"formats\",{text:\"Formats\",menu:r})}var m=d.each,n=function(a){return e.reduce(a,function(a,b){return a.concat(b)},[])};return g.on(\"AddEditor\",function(a){var b=a.editor;k(b),l(b),j(b)}),a.translate=function(a){return g.translate(a)},b.tooltips=!h.iOS,{}}),g(\"3d\",[\"2u\"],function(a){\"use strict\";return a.extend({recalc:function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E=[],F=[];b=a.settings,e=a.items().filter(\":visible\"),f=a.layoutRect(),d=b.columns||Math.ceil(Math.sqrt(e.length)),c=Math.ceil(e.length/d),s=b.spacingH||b.spacing||0,t=b.spacingV||b.spacing||0,u=b.alignH||b.align,v=b.alignV||b.align,q=a.paddingBox,C=\"reverseRows\"in b?b.reverseRows:a.isRtl(),u&&\"string\"==typeof u&&(u=[u]),v&&\"string\"==typeof v&&(v=[v]);for(l=0;l<d;l++)E.push(0);for(m=0;m<c;m++)F.push(0);for(m=0;m<c;m++)for(l=0;l<d&&(k=e[m*d+l],k);l++)j=k.layoutRect(),y=j.minW,z=j.minH,E[l]=y>E[l]?y:E[l],F[m]=z>F[m]?z:F[m];for(A=f.innerW-q.left-q.right,w=0,l=0;l<d;l++)w+=E[l]+(l>0?s:0),A-=(l>0?s:0)+E[l];for(B=f.innerH-q.top-q.bottom,x=0,m=0;m<c;m++)x+=F[m]+(m>0?t:0),B-=(m>0?t:0)+F[m];if(w+=q.left+q.right,x+=q.top+q.bottom,i={},i.minW=w+(f.w-f.innerW),i.minH=x+(f.h-f.innerH),i.contentW=i.minW-f.deltaW,i.contentH=i.minH-f.deltaH,i.minW=Math.min(i.minW,f.maxW),i.minH=Math.min(i.minH,f.maxH),i.minW=Math.max(i.minW,f.startMinWidth),i.minH=Math.max(i.minH,f.startMinHeight),!f.autoResize||i.minW==f.minW&&i.minH==f.minH){f.autoResize&&(i=a.layoutRect(i),i.contentW=i.minW-f.deltaW,i.contentH=i.minH-f.deltaH);var G;G=\"start\"==b.packV?0:B>0?Math.floor(B/c):0;var H=0,I=b.flexWidths;if(I)for(l=0;l<I.length;l++)H+=I[l];else H=d;var J=A/H;for(l=0;l<d;l++)E[l]+=I?I[l]*J:J;for(o=q.top,m=0;m<c;m++){for(n=q.left,h=F[m]+G,l=0;l<d&&(D=C?m*d+d-1-l:m*d+l,k=e[D],k);l++)p=k.settings,j=k.layoutRect(),g=Math.max(E[l],j.startMinWidth),j.x=n,j.y=o,r=p.alignH||(u?u[l]||u[0]:null),\"center\"==r?j.x=n+g/2-j.w/2:\"right\"==r?j.x=n+g-j.w:\"stretch\"==r&&(j.w=g),r=p.alignV||(v?v[l]||v[0]:null),\"center\"==r?j.y=o+h/2-j.h/2:\"bottom\"==r?j.y=o+h-j.h:\"stretch\"==r&&(j.h=h),k.layoutRect(j),n+=g+s,k.recalc&&k.recalc();o+=h+t}}else if(i.w=i.minW,i.h=i.minH,a.layoutRect(i),this.recalc(a),null===a._lastRect){var K=a.parent();K&&(K._lastRect=null,K.recalc())}}})}),g(\"3e\",[\"2r\",\"5\"],function(a,b){\"use strict\";return a.extend({renderHtml:function(){var a=this;return a.classes.add(\"iframe\"),a.canFocus=!1,'<iframe id=\"'+a._id+'\" class=\"'+a.classes+'\" tabindex=\"-1\" src=\"'+(a.settings.url||\"javascript:''\")+'\" frameborder=\"0\"></iframe>'},src:function(a){this.getEl().src=a},html:function(a,c){var d=this,e=this.getEl().contentWindow.document.body;return e?(e.innerHTML=a,c&&c()):b.setTimeout(function(){d.html(a)}),this}})}),g(\"3f\",[\"2r\"],function(a){\"use strict\";return a.extend({init:function(a){var b=this;b._super(a),b.classes.add(\"widget\").add(\"infobox\"),b.canFocus=!1},severity:function(a){this.classes.remove(\"error\"),this.classes.remove(\"warning\"),this.classes.remove(\"success\"),this.classes.add(a)},help:function(a){this.state.set(\"help\",a)},renderHtml:function(){var a=this,b=a.classPrefix;return'<div id=\"'+a._id+'\" class=\"'+a.classes+'\"><div id=\"'+a._id+'-body\">'+a.encode(a.state.get(\"text\"))+'<button role=\"button\" tabindex=\"-1\"><i class=\"'+b+\"ico \"+b+'i-help\"></i></button></div></div>'},bindStates:function(){var a=this;return a.state.on(\"change:text\",function(b){a.getEl(\"body\").firstChild.data=a.encode(b.value),a.state.get(\"rendered\")&&a.updateLayoutRect()}),a.state.on(\"change:help\",function(b){a.classes.toggle(\"has-help\",b.value),a.state.get(\"rendered\")&&a.updateLayoutRect()}),a._super()}})}),g(\"3g\",[\"2r\",\"4q\"],function(a,b){\"use strict\";return a.extend({init:function(a){var b=this;b._super(a),b.classes.add(\"widget\").add(\"label\"),b.canFocus=!1,a.multiline&&b.classes.add(\"autoscroll\"),a.strong&&b.classes.add(\"strong\")},initLayoutRect:function(){var a=this,c=a._super();if(a.settings.multiline){var d=b.getSize(a.getEl());d.width>c.maxW&&(c.minW=c.maxW,a.classes.add(\"multiline\")),a.getEl().style.width=c.minW+\"px\",c.startMinH=c.h=c.minH=Math.min(c.maxH,b.getSize(a.getEl()).height)}return c},repaint:function(){var a=this;return a.settings.multiline||(a.getEl().style.lineHeight=a.layoutRect().h+\"px\"),a._super()},severity:function(a){this.classes.remove(\"error\"),this.classes.remove(\"warning\"),this.classes.remove(\"success\"),this.classes.add(a)},renderHtml:function(){var a,b,c=this,d=c.settings.forId,e=c.settings.html?c.settings.html:c.encode(c.state.get(\"text\"));return!d&&(b=c.settings.forName)&&(a=c.getRoot().find(\"#\"+b)[0],a&&(d=a._id)),d?'<label id=\"'+c._id+'\" class=\"'+c.classes+'\"'+(d?' for=\"'+d+'\"':\"\")+\">\"+e+\"</label>\":'<span id=\"'+c._id+'\" class=\"'+c.classes+'\">'+e+\"</span>\"},bindStates:function(){var a=this;return a.state.on(\"change:text\",function(b){a.innerHtml(a.encode(b.value)),a.state.get(\"rendered\")&&a.updateLayoutRect()}),a._super()}})}),g(\"3h\",[\"2j\"],function(a){\"use strict\";return a.extend({Defaults:{role:\"toolbar\",layout:\"flow\"},init:function(a){var b=this;b._super(a),b.classes.add(\"toolbar\")},postRender:function(){var a=this;return a.items().each(function(a){a.classes.add(\"toolbar-item\")}),a._super()}})}),g(\"3i\",[\"3h\"],function(a){\"use strict\";return a.extend({Defaults:{role:\"menubar\",containerCls:\"menubar\",ariaRoot:!0,defaults:{type:\"menubutton\"}}})}),g(\"3j\",[\"2v\",\"2h\",\"3i\"],function(a,b,c){\"use strict\";function d(a,b){for(;a;){if(b===a)return!0;a=a.parentNode}return!1}var e=a.extend({init:function(a){var b=this;b._renderOpen=!0,b._super(a),a=b.settings,b.classes.add(\"menubtn\"),a.fixedWidth&&b.classes.add(\"fixed-width\"),b.aria(\"haspopup\",!0),b.state.set(\"menu\",a.menu||b.render())},showMenu:function(a){var c,d=this;return d.menu&&d.menu.visible()&&a!==!1?d.hideMenu():(d.menu||(c=d.state.get(\"menu\")||[],c.length?c={type:\"menu\",items:c}:c.type=c.type||\"menu\",c.renderTo?d.menu=c.parent(d).show().renderTo():d.menu=b.create(c).parent(d).renderTo(),d.fire(\"createmenu\"),d.menu.reflow(),d.menu.on(\"cancel\",function(a){a.control.parent()===d.menu&&(a.stopPropagation(),d.focus(),d.hideMenu())}),d.menu.on(\"select\",function(){d.focus()}),d.menu.on(\"show hide\",function(a){a.control==d.menu&&d.activeMenu(\"show\"==a.type),d.aria(\"expanded\",\"show\"==a.type)}).fire(\"show\")),d.menu.show(),d.menu.layoutRect({w:d.layoutRect().w}),d.menu.moveRel(d.getEl(),d.isRtl()?[\"br-tr\",\"tr-br\"]:[\"bl-tl\",\"tl-bl\"]),void d.fire(\"showmenu\"))},hideMenu:function(){var a=this;a.menu&&(a.menu.items().each(function(a){a.hideMenu&&a.hideMenu()}),a.menu.hide())},activeMenu:function(a){this.classes.toggle(\"active\",a)},renderHtml:function(){var a,b=this,d=b._id,e=b.classPrefix,f=b.settings.icon,g=b.state.get(\"text\"),h=\"\";return a=b.settings.image,a?(f=\"none\",\"string\"!=typeof a&&(a=window.getSelection?a[0]:a[1]),a=\" style=\\\"background-image: url('\"+a+\"')\\\"\"):a=\"\",g&&(b.classes.add(\"btn-has-text\"),h='<span class=\"'+e+'txt\">'+b.encode(g)+\"</span>\"),f=b.settings.icon?e+\"ico \"+e+\"i-\"+f:\"\",b.aria(\"role\",b.parent()instanceof c?\"menuitem\":\"button\"),'<div id=\"'+d+'\" class=\"'+b.classes+'\" tabindex=\"-1\" aria-labelledby=\"'+d+'\"><button id=\"'+d+'-open\" role=\"presentation\" type=\"button\" tabindex=\"-1\">'+(f?'<i class=\"'+f+'\"'+a+\"></i>\":\"\")+h+' <i class=\"'+e+'caret\"></i></button></div>'},postRender:function(){var a=this;return a.on(\"click\",function(b){b.control===a&&d(b.target,a.getEl())&&(a.focus(),a.showMenu(!b.aria),b.aria&&a.menu.items().filter(\":visible\")[0].focus())}),a.on(\"mouseenter\",function(b){var c,d=b.control,f=a.parent();d&&f&&d instanceof e&&d.parent()==f&&(f.items().filter(\"MenuButton\").each(function(a){a.hideMenu&&a!=d&&(a.menu&&a.menu.visible()&&(c=!0),a.hideMenu())}),c&&(d.focus(),d.showMenu()))}),a._super()},bindStates:function(){var a=this;return a.state.on(\"change:menu\",function(){a.menu&&a.menu.remove(),a.menu=null}),a._super()},remove:function(){this._super(),this.menu&&this.menu.remove()}});return e}),g(\"3k\",[\"2r\",\"2h\",\"6\",\"5\"],function(a,b,c,d){\"use strict\";return a.extend({Defaults:{border:0,role:\"menuitem\"},init:function(a){var b,c=this;c._super(a),a=c.settings,c.classes.add(\"menu-item\"),a.menu&&c.classes.add(\"menu-item-expand\"),a.preview&&c.classes.add(\"menu-item-preview\"),b=c.state.get(\"text\"),\"-\"!==b&&\"|\"!==b||(c.classes.add(\"menu-item-sep\"),c.aria(\"role\",\"separator\"),c.state.set(\"text\",\"-\")),a.selectable&&(c.aria(\"role\",\"menuitemcheckbox\"),c.classes.add(\"menu-item-checkbox\"),a.icon=\"selected\"),a.preview||a.selectable||c.classes.add(\"menu-item-normal\"),c.on(\"mousedown\",function(a){a.preventDefault()}),a.menu&&!a.ariaHideMenu&&c.aria(\"haspopup\",!0)},hasMenus:function(){return!!this.settings.menu},showMenu:function(){var a,c=this,d=c.settings,e=c.parent();if(e.items().each(function(a){a!==c&&a.hideMenu()}),d.menu){a=c.menu,a?a.show():(a=d.menu,a.length?a={type:\"menu\",items:a}:a.type=a.type||\"menu\",e.settings.itemDefaults&&(a.itemDefaults=e.settings.itemDefaults),a=c.menu=b.create(a).parent(c).renderTo(),a.reflow(),a.on(\"cancel\",function(b){b.stopPropagation(),c.focus(),a.hide()}),a.on(\"show hide\",function(a){a.control.items&&a.control.items().each(function(a){a.active(a.settings.selected)})}).fire(\"show\"),a.on(\"hide\",function(b){b.control===a&&c.classes.remove(\"selected\")}),a.submenu=!0),a._parentMenu=e,a.classes.add(\"menu-sub\");var f=a.testMoveRel(c.getEl(),c.isRtl()?[\"tl-tr\",\"bl-br\",\"tr-tl\",\"br-bl\"]:[\"tr-tl\",\"br-bl\",\"tl-tr\",\"bl-br\"]);a.moveRel(c.getEl(),f),a.rel=f,f=\"menu-sub-\"+f,a.classes.remove(a._lastRel).add(f),a._lastRel=f,c.classes.add(\"selected\"),c.aria(\"expanded\",!0)}},hideMenu:function(){var a=this;return a.menu&&(a.menu.items().each(function(a){a.hideMenu&&a.hideMenu()}),a.menu.hide(),a.aria(\"expanded\",!1)),a},renderHtml:function(){function a(a){var b,d,e={};for(e=c.mac?{alt:\"&#x2325;\",ctrl:\"&#x2318;\",shift:\"&#x21E7;\",meta:\"&#x2318;\"}:{meta:\"Ctrl\"},a=a.split(\"+\"),b=0;b<a.length;b++)d=e[a[b].toLowerCase()],d&&(a[b]=d);return a.join(\"+\")}function b(a){return a.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function d(a){var c=h.match||\"\";return c?a.replace(new RegExp(b(c),\"gi\"),function(a){return\"!mce~match[\"+a+\"]mce~match!\"}):a}function e(a){return a.replace(new RegExp(b(\"!mce~match[\"),\"g\"),\"<b>\").replace(new RegExp(b(\"]mce~match!\"),\"g\"),\"</b>\")}var f=this,g=f._id,h=f.settings,i=f.classPrefix,j=f.state.get(\"text\"),k=f.settings.icon,l=\"\",m=h.shortcut,n=f.encode(h.url),o=\"\";return k&&f.parent().classes.add(\"menu-has-icons\"),h.image&&(l=\" style=\\\"background-image: url('\"+h.image+\"')\\\"\"),m&&(m=a(m)),k=i+\"ico \"+i+\"i-\"+(f.settings.icon||\"none\"),o=\"-\"!==j?'<i class=\"'+k+'\"'+l+\"></i>\\xa0\":\"\",j=e(f.encode(d(j))),n=e(f.encode(d(n))),'<div id=\"'+g+'\" class=\"'+f.classes+'\" tabindex=\"-1\">'+o+(\"-\"!==j?'<span id=\"'+g+'-text\" class=\"'+i+'text\">'+j+\"</span>\":\"\")+(m?'<div id=\"'+g+'-shortcut\" class=\"'+i+'menu-shortcut\">'+m+\"</div>\":\"\")+(h.menu?'<div class=\"'+i+'caret\"></div>':\"\")+(n?'<div class=\"'+i+'menu-item-link\">'+n+\"</div>\":\"\")+\"</div>\"},postRender:function(){var a=this,b=a.settings,c=b.textStyle;if(\"function\"==typeof c&&(c=c.call(this)),c){var e=a.getEl(\"text\");e&&e.setAttribute(\"style\",c)}return a.on(\"mouseenter click\",function(c){c.control===a&&(b.menu||\"click\"!==c.type?(a.showMenu(),c.aria&&a.menu.focus(!0)):(a.fire(\"select\"),d.requestAnimationFrame(function(){a.parent().hideAll()})))}),a._super(),a},hover:function(){var a=this;return a.parent().items().each(function(a){a.classes.remove(\"selected\")}),a.classes.toggle(\"selected\",!0),a},active:function(a){return\"undefined\"!=typeof a&&this.aria(\"checked\",a),this._super(a)},remove:function(){this._super(),this.menu&&this.menu.remove()}})}),g(\"3l\",[\"a\",\"2g\",\"5\"],function(a,b,c){\"use strict\";return function(d,e){var f,g,h=this,i=b.classPrefix;h.show=function(b,j){function k(){f&&(a(d).append('<div class=\"'+i+\"throbber\"+(e?\" \"+i+\"throbber-inline\":\"\")+'\"></div>'),j&&j())}return h.hide(),f=!0,b?g=c.setTimeout(k,b):k(),h},h.hide=function(){var a=d.lastChild;return c.clearTimeout(g),a&&a.className.indexOf(\"throbber\")!=-1&&a.parentNode.removeChild(a),f=!1,h}}}),g(\"3m\",[\"2p\",\"3k\",\"3l\",\"9\"],function(a,b,c,d){\"use strict\";return a.extend({Defaults:{defaultType:\"menuitem\",border:1,layout:\"stack\",role:\"application\",bodyRole:\"menu\",ariaRoot:!0},init:function(a){var b=this;if(a.autohide=!0,a.constrainToViewport=!0,\"function\"==typeof a.items&&(a.itemsFactory=a.items,a.items=[]),a.itemDefaults)for(var c=a.items,e=c.length;e--;)c[e]=d.extend({},a.itemDefaults,c[e]);b._super(a),b.classes.add(\"menu\")},repaint:function(){return this.classes.toggle(\"menu-align\",!0),\nthis._super(),this.getEl().style.height=\"\",this.getEl(\"body\").style.height=\"\",this},cancel:function(){var a=this;a.hideAll(),a.fire(\"select\")},load:function(){function a(){e.throbber&&(e.throbber.hide(),e.throbber=null)}var b,d,e=this;d=e.settings.itemsFactory,d&&(e.throbber||(e.throbber=new c(e.getEl(\"body\"),!0),0===e.items().length?(e.throbber.show(),e.fire(\"loading\")):e.throbber.show(100,function(){e.items().remove(),e.fire(\"loading\")}),e.on(\"hide close\",a)),e.requestTime=b=(new Date).getTime(),e.settings.itemsFactory(function(c){return 0===c.length?void e.hide():void(e.requestTime===b&&(e.getEl().style.width=\"\",e.getEl(\"body\").style.width=\"\",a(),e.items().remove(),e.getEl(\"body\").innerHTML=\"\",e.add(c),e.renderNew(),e.fire(\"loaded\")))}))},hideAll:function(){var a=this;return this.find(\"menuitem\").exec(\"hideMenu\"),a._super()},preRender:function(){var a=this;return a.items().each(function(b){var c=b.settings;if(c.icon||c.image||c.selectable)return a._hasIcons=!0,!1}),a.settings.itemsFactory&&a.on(\"postrender\",function(){a.settings.itemsFactory&&a.load()}),a._super()}})}),g(\"3n\",[\"3j\",\"3m\"],function(a,b){\"use strict\";return a.extend({init:function(a){function b(c){for(var f=0;f<c.length;f++){if(d=c[f].selected||a.value===c[f].value)return e=e||c[f].text,g.state.set(\"value\",c[f].value),!0;if(c[f].menu&&b(c[f].menu))return!0}}var c,d,e,f,g=this;g._super(a),a=g.settings,g._values=c=a.values,c&&(\"undefined\"!=typeof a.value&&b(c),!d&&c.length>0&&(e=c[0].text,g.state.set(\"value\",c[0].value)),g.state.set(\"menu\",c)),g.state.set(\"text\",a.text||e),g.classes.add(\"listbox\"),g.on(\"select\",function(b){var c=b.control;f&&(b.lastControl=f),a.multiple?c.active(!c.active()):g.value(b.control.value()),f=c})},bindStates:function(){function a(a,c){a instanceof b&&a.items().each(function(a){a.hasMenus()||a.active(a.value()===c)})}function c(a,b){var d;if(a)for(var e=0;e<a.length;e++){if(a[e].value===b)return a[e];if(a[e].menu&&(d=c(a[e].menu,b)))return d}}var d=this;return d.on(\"show\",function(b){a(b.control,d.value())}),d.state.on(\"change:value\",function(a){var b=c(d.state.get(\"menu\"),a.value);b?d.text(b.text):d.text(d.settings.text)}),d._super()}})}),g(\"3o\",[\"2x\"],function(a){\"use strict\";return a.extend({Defaults:{classes:\"radio\",role:\"radio\"}})}),g(\"3p\",[\"2r\",\"2k\"],function(a,b){\"use strict\";return a.extend({renderHtml:function(){var a=this,b=a.classPrefix;return a.classes.add(\"resizehandle\"),\"both\"==a.settings.direction&&a.classes.add(\"resizehandle-both\"),a.canFocus=!1,'<div id=\"'+a._id+'\" class=\"'+a.classes+'\"><i class=\"'+b+\"ico \"+b+'i-resize\"></i></div>'},postRender:function(){var a=this;a._super(),a.resizeDragHelper=new b(this._id,{start:function(){a.fire(\"ResizeStart\")},drag:function(b){\"both\"!=a.settings.direction&&(b.deltaX=0),a.fire(\"Resize\",b)},stop:function(){a.fire(\"ResizeEnd\")}})},remove:function(){return this.resizeDragHelper&&this.resizeDragHelper.destroy(),this._super()}})}),g(\"3q\",[\"2r\"],function(a){\"use strict\";function b(a){var b=\"\";if(a)for(var c=0;c<a.length;c++)b+='<option value=\"'+a[c]+'\">'+a[c]+\"</option>\";return b}return a.extend({Defaults:{classes:\"selectbox\",role:\"selectbox\",options:[]},init:function(a){var b=this;b._super(a),b.settings.size&&(b.size=b.settings.size),b.settings.options&&(b._options=b.settings.options),b.on(\"keydown\",function(a){var c;13==a.keyCode&&(a.preventDefault(),b.parents().reverse().each(function(a){if(a.toJSON)return c=a,!1}),b.fire(\"submit\",{data:c.toJSON()}))})},options:function(a){return arguments.length?(this.state.set(\"options\",a),this):this.state.get(\"options\")},renderHtml:function(){var a,c=this,d=\"\";return a=b(c._options),c.size&&(d=' size = \"'+c.size+'\"'),'<select id=\"'+c._id+'\" class=\"'+c.classes+'\"'+d+\">\"+a+\"</select>\"},bindStates:function(){var a=this;return a.state.on(\"change:options\",function(c){a.getEl().innerHTML=b(c.value)}),a._super()}})}),g(\"3r\",[\"2r\",\"2k\",\"4q\"],function(a,b,c){\"use strict\";function d(a,b,c){return a<b&&(a=b),a>c&&(a=c),a}function e(a,b,c){a.setAttribute(\"aria-\"+b,c)}function f(a,b){var d,f,g,h,i,j;\"v\"==a.settings.orientation?(h=\"top\",g=\"height\",f=\"h\"):(h=\"left\",g=\"width\",f=\"w\"),j=a.getEl(\"handle\"),d=(a.layoutRect()[f]||100)-c.getSize(j)[g],i=d*((b-a._minValue)/(a._maxValue-a._minValue))+\"px\",j.style[h]=i,j.style.height=a.layoutRect().h+\"px\",e(j,\"valuenow\",b),e(j,\"valuetext\",\"\"+a.settings.previewFilter(b)),e(j,\"valuemin\",a._minValue),e(j,\"valuemax\",a._maxValue)}return a.extend({init:function(a){var b=this;a.previewFilter||(a.previewFilter=function(a){return Math.round(100*a)/100}),b._super(a),b.classes.add(\"slider\"),\"v\"==a.orientation&&b.classes.add(\"vertical\"),b._minValue=a.minValue||0,b._maxValue=a.maxValue||100,b._initValue=b.state.get(\"value\")},renderHtml:function(){var a=this,b=a._id,c=a.classPrefix;return'<div id=\"'+b+'\" class=\"'+a.classes+'\"><div id=\"'+b+'-handle\" class=\"'+c+'slider-handle\" role=\"slider\" tabindex=\"-1\"></div></div>'},reset:function(){this.value(this._initValue).repaint()},postRender:function(){function a(a,b,c){return(c+a)/(b-a)}function e(a,b,c){return c*(b-a)-a}function f(b,c){function f(f){var g;g=n.value(),g=e(b,c,a(b,c,g)+.05*f),g=d(g,b,c),n.value(g),n.fire(\"dragstart\",{value:g}),n.fire(\"drag\",{value:g}),n.fire(\"dragend\",{value:g})}n.on(\"keydown\",function(a){switch(a.keyCode){case 37:case 38:f(-1);break;case 39:case 40:f(1)}})}function g(a,e,f){var g,h,i,o,p;n._dragHelper=new b(n._id,{handle:n._id+\"-handle\",start:function(a){g=a[j],h=parseInt(n.getEl(\"handle\").style[k],10),i=(n.layoutRect()[m]||100)-c.getSize(f)[l],n.fire(\"dragstart\",{value:p})},drag:function(b){var c=b[j]-g;o=d(h+c,0,i),f.style[k]=o+\"px\",p=a+o/i*(e-a),n.value(p),n.tooltip().text(\"\"+n.settings.previewFilter(p)).show().moveRel(f,\"bc tc\"),n.fire(\"drag\",{value:p})},stop:function(){n.tooltip().hide(),n.fire(\"dragend\",{value:p})}})}var h,i,j,k,l,m,n=this;h=n._minValue,i=n._maxValue,\"v\"==n.settings.orientation?(j=\"screenY\",k=\"top\",l=\"height\",m=\"h\"):(j=\"screenX\",k=\"left\",l=\"width\",m=\"w\"),n._super(),f(h,i,n.getEl(\"handle\")),g(h,i,n.getEl(\"handle\"))},repaint:function(){this._super(),f(this,this.value())},bindStates:function(){var a=this;return a.state.on(\"change:value\",function(b){f(a,b.value)}),a._super()}})}),g(\"3s\",[\"2r\"],function(a){\"use strict\";return a.extend({renderHtml:function(){var a=this;return a.classes.add(\"spacer\"),a.canFocus=!1,'<div id=\"'+a._id+'\" class=\"'+a.classes+'\"></div>'}})}),g(\"3t\",[\"3j\",\"4q\",\"a\"],function(a,b,c){return a.extend({Defaults:{classes:\"widget btn splitbtn\",role:\"button\"},repaint:function(){var a,d,e=this,f=e.getEl(),g=e.layoutRect();return e._super(),a=f.firstChild,d=f.lastChild,c(a).css({width:g.w-b.getSize(d).width,height:g.h-2}),c(d).css({height:g.h-2}),e},activeMenu:function(a){var b=this;c(b.getEl().lastChild).toggleClass(b.classPrefix+\"active\",a)},renderHtml:function(){var a,b=this,c=b._id,d=b.classPrefix,e=b.state.get(\"icon\"),f=b.state.get(\"text\"),g=\"\";return a=b.settings.image,a?(e=\"none\",\"string\"!=typeof a&&(a=window.getSelection?a[0]:a[1]),a=\" style=\\\"background-image: url('\"+a+\"')\\\"\"):a=\"\",e=b.settings.icon?d+\"ico \"+d+\"i-\"+e:\"\",f&&(b.classes.add(\"btn-has-text\"),g='<span class=\"'+d+'txt\">'+b.encode(f)+\"</span>\"),'<div id=\"'+c+'\" class=\"'+b.classes+'\" role=\"button\" tabindex=\"-1\"><button type=\"button\" hidefocus=\"1\" tabindex=\"-1\">'+(e?'<i class=\"'+e+'\"'+a+\"></i>\":\"\")+g+'</button><button type=\"button\" class=\"'+d+'open\" hidefocus=\"1\" tabindex=\"-1\">'+(b._menuBtnText?(e?\"\\xa0\":\"\")+b._menuBtnText:\"\")+' <i class=\"'+d+'caret\"></i></button></div>'},postRender:function(){var a=this,b=a.settings.onclick;return a.on(\"click\",function(a){var c=a.target;if(a.control==this)for(;c;){if(a.aria&&\"down\"!=a.aria.key||\"BUTTON\"==c.nodeName&&c.className.indexOf(\"open\")==-1)return a.stopImmediatePropagation(),void(b&&b.call(this,a));c=c.parentNode}}),delete a.settings.onclick,a._super()}})}),g(\"3u\",[\"3b\"],function(a){\"use strict\";return a.extend({Defaults:{containerClass:\"stack-layout\",controlClass:\"stack-layout-item\",endClass:\"break\"},isNative:function(){return!0}})}),g(\"3v\",[\"2m\",\"a\",\"4q\"],function(a,b,c){\"use strict\";return a.extend({Defaults:{layout:\"absolute\",defaults:{type:\"panel\"}},activateTab:function(a){var c;this.activeTabId&&(c=this.getEl(this.activeTabId),b(c).removeClass(this.classPrefix+\"active\"),c.setAttribute(\"aria-selected\",\"false\")),this.activeTabId=\"t\"+a,c=this.getEl(\"t\"+a),c.setAttribute(\"aria-selected\",\"true\"),b(c).addClass(this.classPrefix+\"active\"),this.items()[a].show().fire(\"showtab\"),this.reflow(),this.items().each(function(b,c){a!=c&&b.hide()})},renderHtml:function(){var a=this,b=a._layout,c=\"\",d=a.classPrefix;return a.preRender(),b.preRender(a),a.items().each(function(b,e){var f=a._id+\"-t\"+e;b.aria(\"role\",\"tabpanel\"),b.aria(\"labelledby\",f),c+='<div id=\"'+f+'\" class=\"'+d+'tab\" unselectable=\"on\" role=\"tab\" aria-controls=\"'+b._id+'\" aria-selected=\"false\" tabIndex=\"-1\">'+a.encode(b.settings.title)+\"</div>\"}),'<div id=\"'+a._id+'\" class=\"'+a.classes+'\" hidefocus=\"1\" tabindex=\"-1\"><div id=\"'+a._id+'-head\" class=\"'+d+'tabs\" role=\"tablist\">'+c+'</div><div id=\"'+a._id+'-body\" class=\"'+a.bodyClasses+'\">'+b.renderHtml(a)+\"</div></div>\"},postRender:function(){var a=this;a._super(),a.settings.activeTab=a.settings.activeTab||0,a.activateTab(a.settings.activeTab),this.on(\"click\",function(b){var c=b.target.parentNode;if(c&&c.id==a._id+\"-head\")for(var d=c.childNodes.length;d--;)c.childNodes[d]==b.target&&a.activateTab(d)})},initLayoutRect:function(){var a,b,d,e=this;b=c.getSize(e.getEl(\"head\")).width,b=b<0?0:b,d=0,e.items().each(function(a){b=Math.max(b,a.layoutRect().minW),d=Math.max(d,a.layoutRect().minH)}),e.items().each(function(a){a.settings.x=0,a.settings.y=0,a.settings.w=b,a.settings.h=d,a.layoutRect({x:0,y:0,w:b,h:d})});var f=c.getSize(e.getEl(\"head\")).height;return e.settings.minWidth=b,e.settings.minHeight=d+f,a=e._super(),a.deltaH+=f,a.innerH=a.h-a.deltaH,a}})}),g(\"3w\",[\"2r\",\"9\",\"4q\"],function(a,b,c){return a.extend({init:function(a){var b=this;b._super(a),b.classes.add(\"textbox\"),a.multiline?b.classes.add(\"multiline\"):(b.on(\"keydown\",function(a){var c;13==a.keyCode&&(a.preventDefault(),b.parents().reverse().each(function(a){if(a.toJSON)return c=a,!1}),b.fire(\"submit\",{data:c.toJSON()}))}),b.on(\"keyup\",function(a){b.state.set(\"value\",a.target.value)}))},repaint:function(){var a,b,c,d,e,f=this,g=0;a=f.getEl().style,b=f._layoutRect,e=f._lastRepaintRect||{};var h=document;return!f.settings.multiline&&h.all&&(!h.documentMode||h.documentMode<=8)&&(a.lineHeight=b.h-g+\"px\"),c=f.borderBox,d=c.left+c.right+8,g=c.top+c.bottom+(f.settings.multiline?8:0),b.x!==e.x&&(a.left=b.x+\"px\",e.x=b.x),b.y!==e.y&&(a.top=b.y+\"px\",e.y=b.y),b.w!==e.w&&(a.width=b.w-d+\"px\",e.w=b.w),b.h!==e.h&&(a.height=b.h-g+\"px\",e.h=b.h),f._lastRepaintRect=e,f.fire(\"repaint\",{},!1),f},renderHtml:function(){var a,d,e=this,f=e.settings;return a={id:e._id,hidefocus:\"1\"},b.each([\"rows\",\"spellcheck\",\"maxLength\",\"size\",\"readonly\",\"min\",\"max\",\"step\",\"list\",\"pattern\",\"placeholder\",\"required\",\"multiple\"],function(b){a[b]=f[b]}),e.disabled()&&(a.disabled=\"disabled\"),f.subtype&&(a.type=f.subtype),d=c.create(f.multiline?\"textarea\":\"input\",a),d.value=e.state.get(\"value\"),d.className=e.classes,d.outerHTML},value:function(a){return arguments.length?(this.state.set(\"value\",a),this):(this.state.get(\"rendered\")&&this.state.set(\"value\",this.getEl().value),this.state.get(\"value\"))},postRender:function(){var a=this;a.getEl().value=a.state.get(\"value\"),a._super(),a.$el.on(\"change\",function(b){a.state.set(\"value\",b.target.value),a.fire(\"change\",b)})},bindStates:function(){var a=this;return a.state.on(\"change:value\",function(b){a.getEl().value!=b.value&&(a.getEl().value=b.value)}),a.state.on(\"change:disabled\",function(b){a.getEl().disabled=b.value}),a._super()},remove:function(){this.$el.off(),this._super()}})}),g(\"1f\",[\"2d\",\"2e\",\"2f\",\"2g\",\"2h\",\"2i\",\"2j\",\"2k\",\"2l\",\"2m\",\"2n\",\"2o\",\"2p\",\"23\",\"24\",\"2q\",\"2r\",\"2s\",\"25\",\"2t\",\"2u\",\"2v\",\"2w\",\"2x\",\"2y\",\"2z\",\"30\",\"31\",\"32\",\"33\",\"34\",\"35\",\"36\",\"37\",\"38\",\"39\",\"3a\",\"3b\",\"3c\",\"3d\",\"3e\",\"3f\",\"3g\",\"3h\",\"3i\",\"3j\",\"3k\",\"3l\",\"3m\",\"3n\",\"3o\",\"3p\",\"3q\",\"3r\",\"3s\",\"3t\",\"3u\",\"3v\",\"3w\"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,_,aa,ba,ca,da,ea){\"use strict\";var fa=function(a,b){e.add(a.split(\".\").pop(),b)},ga=function(a,b,c){var d,e;for(e=b.split(/[.\\/]/),d=0;d<e.length-1;++d)void 0===a[e[d]]&&(a[e[d]]={}),a=a[e[d]];a[e[e.length-1]]=c,fa(b,c)},ha=function(fa){ga(fa,\"ui.Selector\",a),ga(fa,\"ui.Collection\",b),ga(fa,\"ui.ReflowQueue\",c),ga(fa,\"ui.Control\",d),ga(fa,\"ui.Factory\",e),ga(fa,\"ui.KeyboardNavigation\",f),ga(fa,\"ui.Container\",g),ga(fa,\"ui.DragHelper\",h),ga(fa,\"ui.Scrollable\",i),ga(fa,\"ui.Panel\",j),ga(fa,\"ui.Movable\",k),ga(fa,\"ui.Resizable\",l),ga(fa,\"ui.FloatPanel\",m),ga(fa,\"ui.Window\",n),ga(fa,\"ui.MessageBox\",o),ga(fa,\"ui.Tooltip\",p),ga(fa,\"ui.Widget\",q),ga(fa,\"ui.Progress\",r),ga(fa,\"ui.Notification\",s),ga(fa,\"ui.Layout\",t),ga(fa,\"ui.AbsoluteLayout\",u),ga(fa,\"ui.Button\",v),ga(fa,\"ui.ButtonGroup\",w),ga(fa,\"ui.Checkbox\",x),ga(fa,\"ui.ComboBox\",y),ga(fa,\"ui.ColorBox\",z),ga(fa,\"ui.PanelButton\",A),ga(fa,\"ui.ColorButton\",B),ga(fa,\"ui.ColorPicker\",C),ga(fa,\"ui.Path\",D),ga(fa,\"ui.ElementPath\",E),ga(fa,\"ui.FormItem\",F),ga(fa,\"ui.Form\",G),ga(fa,\"ui.FieldSet\",H),ga(fa,\"ui.FilePicker\",I),ga(fa,\"ui.FitLayout\",J),ga(fa,\"ui.FlexLayout\",K),ga(fa,\"ui.FlowLayout\",L),ga(fa,\"ui.FormatControls\",M),ga(fa,\"ui.GridLayout\",N),ga(fa,\"ui.Iframe\",O),ga(fa,\"ui.InfoBox\",P),ga(fa,\"ui.Label\",Q),ga(fa,\"ui.Toolbar\",R),ga(fa,\"ui.MenuBar\",S),ga(fa,\"ui.MenuButton\",T),ga(fa,\"ui.MenuItem\",U),ga(fa,\"ui.Throbber\",V),ga(fa,\"ui.Menu\",W),ga(fa,\"ui.ListBox\",X),ga(fa,\"ui.Radio\",Y),ga(fa,\"ui.ResizeHandle\",Z),ga(fa,\"ui.SelectBox\",$),ga(fa,\"ui.Slider\",_),ga(fa,\"ui.Spacer\",aa),ga(fa,\"ui.SplitButton\",ba),ga(fa,\"ui.StackLayout\",ca),ga(fa,\"ui.TabPanel\",da),ga(fa,\"ui.TextBox\",ea),ga(fa,\"ui.Api\",ia)},ia={appendTo:ha};return ia}),g(\"1\",[\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\",\"18\",\"19\",\"1a\",\"1b\",\"1c\",\"1d\",\"1e\",\"1f\"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W){var X=O,Y=function(a,b,c){var d,e;for(e=b.split(/[.\\/]/),d=0;d<e.length-1;++d)void 0===a[e[d]]&&(a[e[d]]={}),a=a[e[d]];a[e[e.length-1]]=c};return Y(X,\"geom.Rect\",a),Y(X,\"util.Promise\",b),Y(X,\"util.Delay\",c),Y(X,\"Env\",d),Y(X,\"dom.EventUtils\",e),Y(X,\"dom.Sizzle\",f),Y(X,\"util.Tools\",g),Y(X,\"dom.DomQuery\",h),Y(X,\"html.Styles\",i),Y(X,\"dom.TreeWalker\",j),Y(X,\"html.Entities\",k),Y(X,\"dom.DOMUtils\",l),Y(X,\"dom.ScriptLoader\",m),Y(X,\"AddOnManager\",n),Y(X,\"dom.RangeUtils\",o),Y(X,\"html.Node\",p),Y(X,\"html.Schema\",q),Y(X,\"html.SaxParser\",r),Y(X,\"html.DomParser\",s),Y(X,\"html.Writer\",t),Y(X,\"html.Serializer\",u),Y(X,\"dom.Serializer\",v),Y(X,\"util.VK\",w),Y(X,\"dom.ControlSelection\",x),Y(X,\"dom.BookmarkManager\",y),Y(X,\"dom.Selection\",z),Y(X,\"Formatter\",A),Y(X,\"UndoManager\",B),Y(X,\"EditorCommands\",C),Y(X,\"util.URI\",D),Y(X,\"util.Class\",E),Y(X,\"util.EventDispatcher\",F),Y(X,\"util.Observable\",G),Y(X,\"WindowManager\",H),Y(X,\"NotificationManager\",I),Y(X,\"EditorObservable\",J),Y(X,\"Shortcuts\",K),Y(X,\"Editor\",L),Y(X,\"util.I18n\",M),Y(X,\"FocusManager\",N),Y(X,\"EditorManager\",O),Y(X,\"util.XHR\",P),Y(X,\"util.JSON\",Q),Y(X,\"util.JSONRequest\",R),Y(X,\"util.JSONP\",S),Y(X,\"util.LocalStorage\",T),Y(X,\"Compat\",U),Y(X,\"util.Color\",V),W.appendTo(X),U.register(X),X}),g(\"2\",[],function(){var a=this||window,b=function(b){\"function\"==typeof a.define&&(a.define.amd||(a.define(\"ephox/tinymce\",[],function(){return b}),a.define(\"17\",[],function(){return b}))),\"object\"==typeof module&&(module.exports=b)};return{exposeToModuleLoaders:b}}),g(\"0\",[\"1\",\"2\"],function(a,b){return function(){return window.tinymce=a,window.tinyMCE=a,b.exposeToModuleLoaders(a),a}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"d\",tinymce.util.Tools.resolve),g(\"1\",[\"d\"],function(a){return a(\"tinymce.ThemeManager\")}),g(\"2\",[\"d\"],function(a){return a(\"tinymce.ui.Api\")}),g(\"3\",[\"d\"],function(a){return a(\"tinymce.util.Delay\")}),g(\"4\",[],function(){var a=function(b){return b.reduce(function(b,c){return Array.isArray(c)?b.concat(a(c)):b.concat(c)},[])};return{flatten:a}}),g(\"e\",[],function(){var a=function(a){return function(b){return typeof b===a}},b=function(a){return Array.isArray(a)},c=function(a){return null===a},d=function(a){return function(d){return!c(d)&&!b(d)&&a(d)}};return{isString:a(\"string\"),isNumber:a(\"number\"),isBoolean:a(\"boolean\"),isFunction:a(\"function\"),isObject:d(a(\"object\")),isNull:c,isArray:b}}),g(\"5\",[\"e\"],function(a){var b=function(a,b){if(b(a))return!0;throw new Error(\"Default value doesn't match requested type.\")},c=function(a){return function(c,d,e){var f=c.settings;return b(e,a),d in f&&a(f[d])?f[d]:e}},d=function(a,b){return a.split(b).filter(function(a){return a.length>0})},e=function(b,c){var e=function(a){return\"string\"==typeof a?d(a,/[ ,]/):a},f=function(a,b){return a===!1?[]:b};return a.isArray(b)?b:a.isString(b)?e(b):a.isBoolean(b)?f(b,c):c},f=function(a){return function(c,d,f){var g=d in c.settings?c.settings[d]:f;return b(f,a),e(g,f)}};return{getStringOr:c(a.isString),getBoolOr:c(a.isBoolean),getNumberOr:c(a.isNumber),getHandlerOr:c(a.isFunction),getToolbarItemsOr:f(a.isArray)}}),g(\"7\",[],function(){var a=function(a,b){return{id:a,rect:b}},b=function(a,b){for(var c=0;c<b.length;c++){var d=b[c],e=d(a);if(e)return e}return null};return{match:b,result:a}}),g(\"i\",[\"d\"],function(a){return a(\"tinymce.dom.DOMUtils\")}),g(\"q\",[\"d\"],function(a){return a(\"tinymce.geom.Rect\")}),g(\"r\",[],function(){var a=function(a){return{x:a.left,y:a.top,w:a.width,h:a.height}},b=function(a){return{left:a.x,top:a.y,width:a.w,height:a.h,right:a.x+a.w,bottom:a.y+a.h}};return{fromClientRect:a,toClientRect:b}}),g(\"f\",[\"i\",\"q\",\"r\"],function(a,b,c){var d=function(b){var c=a.DOM.getViewPort();return{x:b.x+c.x,y:b.y+c.y,w:b.w,h:b.h}},e=function(a){var b=a.getBoundingClientRect();return d({x:b.left,y:b.top,w:Math.max(a.clientWidth,a.offsetWidth),h:Math.max(a.clientHeight,a.offsetHeight)})},f=function(a,b){return e(b)},g=function(a){return e(a.getElement().ownerDocument.body)},h=function(a){return e(a.getContentAreaContainer()||a.getBody())},i=function(a){var b=a.selection.getBoundingClientRect();return b?d(c.fromClientRect(b)):null};return{getElementRect:f,getPageAreaRect:g,getContentAreaRect:h,getSelectionRect:i}}),g(\"6\",[\"7\",\"f\"],function(a,b){var c=function(c,d){return function(e){for(var f=0;f<d.length;f++)if(d[f].predicate(c))return a.result(d[f].id,b.getElementRect(e,c));return null}},d=function(c,d){return function(e){for(var f=0;f<c.length;f++)for(var g=0;g<d.length;g++)if(d[g].predicate(c[f]))return a.result(d[g].id,b.getElementRect(e,c[f]));return null}};return{element:c,parent:d}}),g(\"g\",[\"d\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"8\",[\"g\"],function(a){var b=function(a,b){return{id:a,predicate:b}},c=function(c){return a.map(c,function(a){return b(a.id,a.predicate)})};return{create:b,fromContextToolbars:c}}),g(\"9\",[\"7\",\"f\"],function(a,b){var c=function(c){return function(d){return d.selection.isCollapsed()?null:a.result(c,b.getSelectionRect(d))}},d=function(c,d){return function(e){var f,g=e.schema.getTextBlockElements();for(f=0;f<c.length;f++)if(\"TABLE\"===c[f].nodeName)return null;for(f=0;f<c.length;f++)if(c[f].nodeName in g)return e.dom.isEmpty(c[f])?a.result(d,b.getSelectionRect(e)):null;return null}};return{textSelection:c,emptyTextBlock:d}}),g(\"h\",[\"d\"],function(a){return a(\"tinymce.EditorManager\")}),g(\"a\",[\"h\",\"i\"],function(a,b){var c=function(a,b){var c=function(){a._skinLoaded=!0,a.fire(\"SkinLoaded\"),b()};a.initialized?c():a.on(\"init\",c)},d=function(b){var c=a.baseURL+\"/skins/\";return b?c+b:c+\"lightgray\"},e=function(a,b){return a.documentBaseURI.toAbsolute(b)},f=function(a,f){var g=a.settings,h=g.skin_url?e(a,g.skin_url):d(g.skin),i=function(){c(a,f)};b.DOM.styleSheetLoader.load(h+\"/skin.min.css\",i),a.contentCSS.push(h+\"/content.inline.min.css\")};return{load:f}}),g(\"j\",[\"d\"],function(a){return a(\"tinymce.ui.Factory\")}),g(\"k\",[\"g\",\"j\",\"e\"],function(a,b,c){var d=function(a,b){var c=function(a,b){return{selector:a,handler:b}},d=function(a){b.active(a)},e=function(a){b.disabled(a)};return b.settings.stateSelector?c(b.settings.stateSelector,d):b.settings.disabledStateSelector?c(b.settings.disabledStateSelector,e):null},e=function(a,b,c){return function(){var e=d(b,c);null!==e&&a.selection.selectorChanged(e.selector,e.handler)}},f=function(a){return c.isArray(a)?a:c.isString(a)?a.split(/[ ,]/):[]},g=function(c,d,g){var h,i=[];if(g)return a.each(f(g),function(a){var d;\"|\"==a?h=null:c.buttons[a]&&(h||(h={type:\"buttongroup\",items:[]},i.push(h)),d=a,a=c.buttons[d],\"function\"==typeof a&&(a=a()),a.type=a.type||\"button\",a=b.create(a),a.on(\"postRender\",e(c,d,a)),h.items.push(a))}),b.create({type:\"toolbar\",layout:\"flow\",name:d,items:i})};return{create:g}}),g(\"s\",[\"d\"],function(a){return a(\"tinymce.util.Promise\")}),g(\"t\",[],function(){var a=0,b=function(){var a=function(){return Math.round(4294967295*Math.random()).toString(36)};return\"s\"+Date.now().toString(36)+a()+a()+a()},c=function(c){return c+a++ +b()};return{uuid:c}}),g(\"w\",[],function(){var a=function(a,b){function c(c){var e,f,g;f=b[c?\"startContainer\":\"endContainer\"],g=b[c?\"startOffset\":\"endOffset\"],1==f.nodeType&&(e=a.create(\"span\",{\"data-mce-type\":\"bookmark\"}),f.hasChildNodes()?(g=Math.min(g,f.childNodes.length-1),c?f.insertBefore(e,f.childNodes[g]):a.insertAfter(e,f.childNodes[g])):f.appendChild(e),f=e,g=0),d[c?\"startContainer\":\"endContainer\"]=f,d[c?\"startOffset\":\"endOffset\"]=g}var d={};return c(!0),b.collapsed||c(),d},b=function(a,b){function c(c){function d(a){for(var b=a.parentNode.firstChild,c=0;b;){if(b==a)return c;1==b.nodeType&&\"bookmark\"==b.getAttribute(\"data-mce-type\")||c++,b=b.nextSibling}return-1}var e,f,g;e=g=b[c?\"startContainer\":\"endContainer\"],f=b[c?\"startOffset\":\"endOffset\"],e&&(1==e.nodeType&&(f=d(e),e=e.parentNode,a.remove(g)),b[c?\"startContainer\":\"endContainer\"]=e,b[c?\"startOffset\":\"endOffset\"]=f)}c(!0),c();var d=a.createRng();return d.setStart(b.startContainer,b.startOffset),b.endContainer&&d.setEnd(b.endContainer,b.endOffset),d};return{create:a,resolve:b}}),g(\"x\",[\"d\"],function(a){return a(\"tinymce.dom.TreeWalker\")}),g(\"y\",[\"d\"],function(a){return a(\"tinymce.dom.RangeUtils\")}),g(\"u\",[\"w\",\"g\",\"x\",\"y\"],function(a,b,c,d){var e=function(a,b,d){var e,f,g=[];for(e=new c(b,a),f=b;f&&(1===f.nodeType&&g.push(f),f!==d);f=e.next());return g},f=function(c,d){var e,f,g;f=c.dom,g=c.selection,e=a.create(f,g.getRng()),b.each(d,function(a){c.dom.remove(a,!0)}),g.setRng(a.resolve(f,e))},g=function(a){return\"A\"===a.nodeName&&a.hasAttribute(\"href\")},h=function(a,b){var c=a.getParent(b,g);return c?c:b},i=function(a){var c,f,i,j,k,l,m;return k=a.selection,l=a.dom,m=k.getRng(),c=h(l,d.getNode(m.startContainer,m.startOffset)),f=d.getNode(m.endContainer,m.endOffset),i=a.getBody(),j=b.grep(e(i,c,f),g)},j=function(a){f(a,i(a))};return{unlinkSelection:j}}),g(\"p\",[\"t\",\"u\"],function(a,b){var c=function(a,b){var c,d,e;for(e='<table data-mce-id=\"mce\" style=\"width: 100%\">',e+=\"<tbody>\",d=0;d<b;d++){for(e+=\"<tr>\",c=0;c<a;c++)e+=\"<td><br></td>\";e+=\"</tr>\"}return e+=\"</tbody>\",e+=\"</table>\"},d=function(a){var b=a.dom.select(\"*[data-mce-id]\");return b[0]},e=function(a,b,e){a.undoManager.transact(function(){var f,g;a.insertContent(c(b,e)),f=d(a),f.removeAttribute(\"data-mce-id\"),g=a.dom.select(\"td,th\",f),a.selection.setCursorLocation(g[0],0)})},f=function(a,b){a.execCommand(\"FormatBlock\",!1,b)},g=function(b,c,d){var e,f;e=b.editorUpload.blobCache,f=e.create(a.uuid(\"mceu\"),d,c),e.add(f),b.insertContent(b.dom.createHTML(\"img\",{src:f.blobUri()}))},h=function(a){a.selection.collapse(!1)},i=function(a){a.focus(),b.unlinkSelection(a),h(a)},j=function(a,b,c){a.focus(),a.dom.setAttrib(b,\"href\",c),h(a)},k=function(a,b){a.execCommand(\"mceInsertLink\",!1,{href:b}),h(a)},l=function(a,b){var c=a.dom.getParent(a.selection.getStart(),\"a[href]\");c?j(a,c,b):k(a,b)},m=function(a,b){0===b.trim().length?i(a):l(a,b)};return{insertTable:e,formatBlock:f,insertBlob:g,createLink:m,unlink:i}}),g(\"v\",[],function(){var a=function(a){return/^www\\.|\\.(com|org|edu|gov|uk|net|ca|de|jp|fr|au|us|ru|ch|it|nl|se|no|es|mil)$/i.test(a.trim())},b=function(a){return/^https?:\\/\\//.test(a.trim())};return{isDomainLike:a,isAbsolute:b}}),g(\"l\",[\"g\",\"j\",\"s\",\"p\",\"v\"],function(a,b,c,d,e){var f=function(a){a.find(\"textbox\").eq(0).each(function(a){a.focus()})},g=function(c,d){var e=b.create(a.extend({type:\"form\",layout:\"flex\",direction:\"row\",padding:5,name:c,spacing:3},d));return e.on(\"show\",function(){f(e)}),e},h=function(a,b){return b?a.show():a.hide()},i=function(a,b){return new c(function(c){a.windowManager.confirm(\"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?\",function(a){var d=a===!0?\"http://\"+b:b;c(d)})})},j=function(a,b){return!e.isAbsolute(b)&&e.isDomainLike(b)?i(a,b):c.resolve(b)},k=function(a,b){var c={},e=function(){a.focus(),d.unlink(a),b()},f=function(a){var b=a.meta;b&&b.attach&&(c={href:this.value(),attach:b.attach})},i=function(b){if(b.control===this){var c,d=\"\";c=a.dom.getParent(a.selection.getStart(),\"a[href]\"),c&&(d=a.dom.getAttrib(c,\"href\")),this.fromJSON({linkurl:d}),h(this.find(\"#unlink\"),c),this.find(\"#linkurl\")[0].focus()}};return g(\"quicklink\",{items:[{type:\"button\",name:\"unlink\",icon:\"unlink\",onclick:e,tooltip:\"Remove link\"},{type:\"filepicker\",name:\"linkurl\",placeholder:\"Paste or type a link\",filetype:\"file\",onchange:f},{type:\"button\",icon:\"checkmark\",subtype:\"primary\",tooltip:\"Ok\",onclick:\"submit\"}],onshow:i,onsubmit:function(e){j(a,e.data.linkurl).then(function(e){a.undoManager.transact(function(){e===c.href&&(c.attach(),c={}),d.createLink(a,e)}),b()})}})};return{createQuickLinkForm:k}}),g(\"m\",[\"q\",\"r\"],function(a,b){var c=function(a,b){return{rect:a,position:b}},d=function(a,b){return{x:b.x,y:b.y,w:a.w,h:a.h}},e=function(b,e,f,g,h){var i,j,k;return i=a.findBestRelativePosition(h,f,g,b),f=a.clamp(f,g),i?(j=a.relativePosition(h,f,i),k=d(h,j),c(k,i)):(f=a.intersect(g,f),f?(i=a.findBestRelativePosition(h,f,g,e))?(j=a.relativePosition(h,f,i),k=d(h,j),c(k,i)):(k=d(h,f),c(k,i)):null)},f=function(a,b,c){return e([\"cr-cl\",\"cl-cr\"],[\"bc-tc\",\"bl-tl\",\"br-tr\"],a,b,c)},g=function(a,b,c){return e([\"tc-bc\",\"bc-tc\",\"tl-bl\",\"bl-tl\",\"tr-br\",\"br-tr\"],[\"bc-tc\",\"bl-tl\",\"br-tr\"],a,b,c)},h=function(a,c,d,e){var f;return\"function\"==typeof a?(f=a({elementRect:b.toClientRect(c),contentAreaRect:b.toClientRect(d),panelRect:b.toClientRect(e)}),b.fromClientRect(f)):e},i=function(a){return a.panelRect};return{calcInsert:f,calc:g,userConstrain:h,defaultHandler:i}}),g(\"c\",[\"g\",\"j\",\"i\",\"k\",\"l\",\"f\",\"m\",\"5\"],function(a,b,c,d,e,f,g,h){return function(){var i,j,k=[\"bold\",\"italic\",\"|\",\"quicklink\",\"h2\",\"h3\",\"blockquote\"],l=[\"quickimage\",\"quicktable\"],m=function(b,c){return a.map(c,function(a){return d.create(b,a.id,a.items)})},n=function(a){return h.getToolbarItemsOr(a,\"selection_toolbar\",k)},o=function(a){return h.getToolbarItemsOr(a,\"insert_toolbar\",l)},p=function(a){return a.items().length>0},q=function(c,f){var g=m(c,f).concat([d.create(c,\"text\",n(c)),d.create(c,\"insert\",o(c)),e.createQuickLinkForm(c,B)]);return b.create({type:\"floatpanel\",role:\"dialog\",classes:\"tinymce tinymce-inline arrow\",ariaLabel:\"Inline toolbar\",layout:\"flex\",direction:\"column\",align:\"stretch\",autohide:!1,autofix:!0,fixed:!0,border:1,items:a.grep(g,p),oncancel:function(){c.focus()}})},r=function(a){a&&a.show()},s=function(a,b){a.moveTo(b.x,b.y)},t=function(b,c){c=c?c.substr(0,2):\"\",a.each({t:\"down\",b:\"up\",c:\"center\"},function(a,d){b.classes.toggle(\"arrow-\"+a,d===c.substr(0,1))}),\"cr\"===c?(b.classes.toggle(\"arrow-left\",!0),b.classes.toggle(\"arrow-right\",!1)):\"cl\"===c?(b.classes.toggle(\"arrow-left\",!0),b.classes.toggle(\"arrow-right\",!0)):a.each({l:\"left\",r:\"right\"},function(a,d){b.classes.toggle(\"arrow-\"+a,d===c.substr(1,1))})},u=function(a,b){var c=a.items().filter(\"#\"+b);return c.length>0&&(c[0].show(),a.reflow(),!0)},v=function(a,b,d,e){var i,k,l,m;return m=h.getHandlerOr(d,\"inline_toolbar_position_handler\",g.defaultHandler),i=f.getContentAreaRect(d),k=c.DOM.getRect(a.getEl()),l=\"insert\"===b?g.calcInsert(e,i,k):g.calc(e,i,k),!!l&&(k=l.rect,j=e,s(a,g.userConstrain(m,e,i,k)),t(a,l.position),!0)},w=function(a,b,c,d){return r(a),a.items().hide(),u(a,b)?void(v(a,b,c,d)===!1&&B(a)):void B(a)},x=function(){return i.items().filter(\"form:visible\").length>0},y=function(a,b){if(i){if(i.items().hide(),!u(i,b))return void B(i);var d,e,k,l;r(i),i.items().hide(),u(i,b),l=h.getHandlerOr(a,\"inline_toolbar_position_handler\",g.defaultHandler),d=f.getContentAreaRect(a),e=c.DOM.getRect(i.getEl()),k=g.calc(j,d,e),k&&(e=k.rect,s(i,g.userConstrain(l,j,d,e)),t(i,k.position))}},z=function(a,b,c,d){i||(i=q(a,d),i.renderTo(document.body).reflow().moveTo(c.x,c.y),a.nodeChanged()),w(i,b,a,c)},A=function(a,b,c){i&&v(i,b,a,c)},B=function(){i&&i.hide()},C=function(){i&&i.find(\"toolbar:visible\").eq(0).each(function(a){a.focus(!0)})},D=function(){i&&(i.remove(),i=null)},E=function(){return i&&i.visible()&&x()};return{show:z,showForm:y,reposition:A,inForm:E,hide:B,focus:C,remove:D}}}),g(\"n\",[\"s\"],function(a){var b=function(b){return new a(function(a){var c=new FileReader;c.onloadend=function(){a(c.result.split(\",\")[1])},c.readAsDataURL(b)})};return{blobToBase64:b}}),g(\"o\",[\"s\"],function(a){var b=function(){return new a(function(a){var b;b=document.createElement(\"input\"),b.type=\"file\",b.style.position=\"fixed\",b.style.left=0,b.style.top=0,b.style.opacity=.001,document.body.appendChild(b),b.onchange=function(b){a(Array.prototype.slice.call(b.target.files))},b.click(),b.parentNode.removeChild(b)})};return{pickFile:b}}),g(\"b\",[\"c\",\"n\",\"o\",\"p\"],function(a,b,c,d){var e=function(a){for(var b=function(b){return function(){d.formatBlock(a,b)}},c=1;c<6;c++){var e=\"h\"+c;a.addButton(e,{text:e.toUpperCase(),tooltip:\"Heading \"+c,stateSelector:e,onclick:b(e),onPostRender:function(){var a=this.getEl().firstChild.firstChild;a.style.fontWeight=\"bold\"}})}},f=function(a,f){a.addButton(\"quicklink\",{icon:\"link\",tooltip:\"Insert/Edit link\",stateSelector:\"a[href]\",onclick:function(){f.showForm(a,\"quicklink\")}}),a.addButton(\"quickimage\",{icon:\"image\",tooltip:\"Insert image\",onclick:function(){c.pickFile().then(function(c){var e=c[0];b.blobToBase64(e).then(function(b){d.insertBlob(a,b,e)})})}}),a.addButton(\"quicktable\",{icon:\"table\",tooltip:\"Insert table\",onclick:function(){f.hide(),d.insertTable(a,2,2)}}),e(a)};return{addToEditor:f}}),g(\"0\",[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\",\"b\",\"c\"],function(a,b,c,d,e,f,g,h,i,j,k,l){var m=function(a){var b=a.selection.getNode(),c=a.dom.getParents(b);return c},n=function(a,b,c,d){var e=function(c){return a.dom.is(c,b)};return{predicate:e,id:c,items:d}},o=function(a){var b=a.contextToolbars;return d.flatten([b?b:[],n(a,\"img\",\"image\",\"alignleft aligncenter alignright\")])},p=function(a,b){var c,d,e;return d=m(a),e=h.fromContextToolbars(b),c=g.match(a,[f.element(d[0],e),i.textSelection(\"text\"),i.emptyTextBlock(d,\"insert\"),f.parent(d,e)]),c&&c.rect?c:null},q=function(a,b){var c=function(){var c=o(a),d=p(a,c);d?b.show(a,d.id,d.rect,c):b.hide()};return function(){a.removed||c()}},r=function(a,b){return function(){var c=o(a),d=p(a,c);d&&b.reposition(a,d.id,d.rect)}},s=function(a,b,c){return function(){a.removed||b.inForm()||c()}},t=function(a,b){var d=c.throttle(q(a,b),0),e=c.throttle(s(a,b,q(a,b)),0);a.on(\"blur hide ObjectResizeStart\",b.hide),a.on(\"click\",d),a.on(\"nodeChange mouseup\",e),a.on(\"ResizeEditor keyup\",d),a.on(\"ResizeWindow\",r(a,b)),a.on(\"remove\",b.remove),a.shortcuts.add(\"Alt+F10\",\"\",b.focus)},u=function(a,b){a.shortcuts.remove(\"meta+k\"),a.shortcuts.add(\"meta+k\",\"\",function(){var c=o(a),d=d=g.match(a,[i.textSelection(\"quicklink\")]);d&&b.show(a,d.id,d.rect,c)})},v=function(a,b){return j.load(a,function(){t(a,b),u(a,b)}),{}},w=function(a){throw new Error(a)};return a.add(\"inlite\",function(a){var b=new l;k.addToEditor(a,b);var c=function(){return a.inline?v(a,b):w(\"inlite theme only supports inline mode.\")};return{renderUI:c}}),b.appendTo(window.tinymce?window.tinymce:{}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"1\",window),h(\"a\",tinymce.util.Tools.resolve),g(\"2\",[\"a\"],function(a){return a(\"tinymce.AddOnManager\")}),g(\"3\",[\"a\"],function(a){return a(\"tinymce.EditorManager\")}),g(\"4\",[\"a\"],function(a){return a(\"tinymce.Env\")}),g(\"5\",[\"a\"],function(a){return a(\"tinymce.ui.Api\")}),g(\"b\",[\"a\"],function(a){return a(\"tinymce.dom.DOMUtils\")}),g(\"c\",[\"a\"],function(a){return a(\"tinymce.ui.Factory\")}),g(\"d\",[\"a\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"e\",[],function(){var a=function(a,b){return function(){var c=a.find(b)[0];c&&c.focus(!0)}},b=function(b,c){b.shortcuts.add(\"Alt+F9\",\"\",a(c,\"menubar\")),b.shortcuts.add(\"Alt+F10,F10\",\"\",a(c,\"toolbar\")),b.shortcuts.add(\"Alt+F11\",\"\",a(c,\"elementpath\")),c.on(\"cancel\",function(){b.focus()})};return{addKeys:b}}),g(\"f\",[\"b\"],function(a){var b=a.DOM,c=function(a,c,d){return function(){var e=a.getContentAreaContainer().querySelector(\"iframe\").offsetWidth,f=Math.max(e-a.getDoc().documentElement.offsetWidth,0);b.setStyle(c,\"right\",f+\"px\"),d?b.setStyle(c,\"top\",\"-16px\"):b.setStyle(c,\"bottom\",\"1px\")}},d=function(a){return function(){b.hide(a)}},e=function(a,b,d){c(a,b,d)(),a.on(\"NodeChange ResizeEditor\",c(a,b,d))},f=function(a,b,c){c.appendChild(b),e(a,b,!0)},g=function(a,b){a.getContainer().appendChild(b),e(a,b,!1)},h=function(a){a.on(\"SkinLoaded\",function(){var c=b.create(\"div\",{\"class\":\"mce-branding-powered-by\"}),e=a.getContainer().querySelector(\".mce-statusbar\");e?f(a,c,e):g(a,c),b.bind(c,\"click\",d(c))})},i=function(a){a.settings.branding!==!1&&h(a)};return{setup:i}}),g(\"n\",[\"a\"],function(a){return a(\"tinymce.util.Delay\")}),g(\"o\",[\"a\"],function(a){return a(\"tinymce.geom.Rect\")}),g(\"k\",[\"d\",\"c\"],function(a,b){var c=\"undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image\",d=function(c,d,e){var f,g=[];if(d)return a.each(d.split(/[ ,]/),function(a){var d,h=function(){var b=c.selection;a.settings.stateSelector&&b.selectorChanged(a.settings.stateSelector,function(b){a.active(b)},!0),a.settings.disabledStateSelector&&b.selectorChanged(a.settings.disabledStateSelector,function(b){a.disabled(b)})};\"|\"==a?f=null:(f||(f={type:\"buttongroup\",items:[]},g.push(f)),c.buttons[a]&&(d=a,a=c.buttons[d],\"function\"==typeof a&&(a=a()),a.type=a.type||\"button\",a.size=e,a=b.create(a),f.items.push(a),c.initialized?h():c.on(\"init\",h)))}),{type:\"toolbar\",layout:\"flow\",items:g}},e=function(b,e){var f=[],g=b.settings,h=function(a){if(a)return f.push(d(b,a,e)),!0};if(a.isArray(g.toolbar)){if(0===g.toolbar.length)return;a.each(g.toolbar,function(a,b){g[\"toolbar\"+(b+1)]=a}),delete g.toolbar}for(var i=1;i<10&&h(g[\"toolbar\"+i]);i++);if(f.length||g.toolbar===!1||h(g.toolbar||c),f.length)return{type:\"panel\",layout:\"stack\",classes:\"toolbar-grp\",ariaRoot:!0,ariaRemember:!0,items:f}};return{createToolbar:d,createToolbars:e}}),g(\"g\",[\"b\",\"d\",\"n\",\"c\",\"o\",\"k\"],function(a,b,c,d,e,f){var g=a.DOM,h=function(a){return{left:a.x,top:a.y,width:a.w,height:a.h,right:a.x+a.w,bottom:a.y+a.h}},i=function(a){b.each(a.contextToolbars,function(a){a.panel&&a.panel.hide()})},j=function(a,b){a.moveTo(b.left,b.top)},k=function(a,c,d){c=c?c.substr(0,2):\"\",b.each({t:\"down\",b:\"up\"},function(b,e){a.classes.toggle(\"arrow-\"+b,d(e,c.substr(0,1)))}),b.each({l:\"left\",r:\"right\"},function(b,e){a.classes.toggle(\"arrow-\"+b,d(e,c.substr(1,1)))})},l=function(a,b,c,d,e,f){return f=h({x:b,y:c,w:f.w,h:f.h}),a&&(f=a({elementRect:h(d),contentAreaRect:h(e),panelRect:f})),f},m=function(a){var h,m=a.settings,n=function(){return a.contextToolbars||[]},o=function(b){var c,d,e;return c=g.getPos(a.getContentAreaContainer()),d=a.dom.getRect(b),e=a.dom.getRoot(),\"BODY\"===e.nodeName&&(d.x-=e.ownerDocument.documentElement.scrollLeft||e.scrollLeft,d.y-=e.ownerDocument.documentElement.scrollTop||e.scrollTop),d.x+=c.x,d.y+=c.y,d},p=function(b,c){var d,f,h,n,p,q,r,s,t=m.inline_toolbar_position_handler;if(!a.removed){if(!b||!b.toolbar.panel)return void i(a);r=[\"bc-tc\",\"tc-bc\",\"tl-bl\",\"bl-tl\",\"tr-br\",\"br-tr\"],p=b.toolbar.panel,c&&p.show(),h=o(b.element),f=g.getRect(p.getEl()),n=g.getRect(a.getContentAreaContainer()||a.getBody()),s=25,\"inline\"!==g.getStyle(b.element,\"display\",!0)&&(h.w=b.element.clientWidth,h.h=b.element.clientHeight),a.inline||(n.w=a.getDoc().documentElement.offsetWidth),a.selection.controlSelection.isResizable(b.element)&&h.w<s&&(h=e.inflate(h,0,8)),d=e.findBestRelativePosition(f,h,n,r),h=e.clamp(h,n),d?(q=e.relativePosition(f,h,d),j(p,l(t,q.x,q.y,h,n,f))):(n.h+=f.h,h=e.intersect(n,h),h?(d=e.findBestRelativePosition(f,h,n,[\"bc-tc\",\"bl-tl\",\"br-tr\"]),d?(q=e.relativePosition(f,h,d),j(p,l(t,q.x,q.y,h,n,f))):j(p,l(t,h.x,h.y,h,n,f))):p.hide()),k(p,d,function(a,b){return a===b})}},q=function(b){return function(){var d=function(){a.selection&&p(u(a.selection.getNode()),b)};c.requestAnimationFrame(d)}},r=function(){h||(h=a.selection.getScrollContainer()||a.getWin(),g.bind(h,\"scroll\",q(!0)),a.on(\"remove\",function(){g.unbind(h,\"scroll\")}))},s=function(b){var c;return b.toolbar.panel?(b.toolbar.panel.show(),void p(b)):(r(),c=d.create({type:\"floatpanel\",role:\"dialog\",classes:\"tinymce tinymce-inline arrow\",ariaLabel:\"Inline toolbar\",layout:\"flex\",direction:\"column\",align:\"stretch\",autohide:!1,autofix:!0,fixed:!0,border:1,items:f.createToolbar(a,b.toolbar.items),oncancel:function(){a.focus()}}),b.toolbar.panel=c,c.renderTo(document.body).reflow(),void p(b))},t=function(){b.each(n(),function(a){a.panel&&a.panel.hide()})},u=function(b){var c,d,e,f=n();for(e=a.$(b).parents().add(b),c=e.length-1;c>=0;c--)for(d=f.length-1;d>=0;d--)if(f[d].predicate(e[c]))return{toolbar:f[d],element:e[c]};return null};a.on(\"click keyup setContent ObjectResized\",function(b){(\"setcontent\"!==b.type||b.selection)&&c.setEditorTimeout(a,function(){var b;b=u(a.selection.getNode()),b?(t(),s(b)):t()})}),a.on(\"blur hide contextmenu\",t),a.on(\"ObjectResizeStart\",function(){var b=u(a.selection.getNode());b&&b.toolbar.panel&&b.toolbar.panel.hide()}),a.on(\"ResizeEditor ResizeWindow\",q(!0)),a.on(\"nodeChange\",q(!1)),a.on(\"remove\",function(){b.each(n(),function(a){a.panel&&a.panel.remove()}),a.contextToolbars={}}),a.shortcuts.add(\"ctrl+shift+e > ctrl+shift+p\",\"\",function(){var b=u(a.selection.getNode());b&&b.toolbar.panel&&b.toolbar.panel.items()[0].focus()})};return{addContextualToolbars:m}}),g(\"h\",[\"d\"],function(a){var b={file:{title:\"File\",items:\"newdocument\"},edit:{title:\"Edit\",items:\"undo redo | cut copy paste pastetext | selectall\"},insert:{title:\"Insert\",items:\"|\"},view:{title:\"View\",items:\"visualaid |\"},format:{title:\"Format\",items:\"bold italic underline strikethrough superscript subscript | formats | removeformat\"},table:{title:\"Table\"},tools:{title:\"Tools\"}},c=function(a,b){var c;return\"|\"==b?{text:\"|\"}:c=a[b]},d=function(d,e,f){var g,h,i,j,k;if(k=a.makeMap((e.removed_menuitems||\"\").split(/[ ,]/)),e.menu?(h=e.menu[f],j=!0):h=b[f],h){g={text:h.title},i=[],a.each((h.items||\"\").split(/[ ,]/),function(a){var b=c(d,a);b&&!k[a]&&i.push(c(d,a))}),j||a.each(d,function(a){a.context==f&&(\"before\"==a.separator&&i.push({text:\"|\"}),a.prependToContext?i.unshift(a):i.push(a),\"after\"==a.separator&&i.push({text:\"|\"}))});for(var l=0;l<i.length;l++)\"|\"==i[l].text&&(0!==l&&l!=i.length-1||i.splice(l,1));if(g.menu=i,!g.menu.length)return null}return g},e=function(a){var c,e=[],f=a.settings,g=[];if(f.menu)for(c in f.menu)g.push(c);else for(c in b)g.push(c);for(var h=\"string\"==typeof f.menubar?f.menubar.split(/[ ,]/):g,i=0;i<h.length;i++){var j=h[i];j=d(a.menuItems,a.settings,j),j&&e.push(j)}return e};return{createMenuButtons:e}}),g(\"9\",[\"b\"],function(a){var b=a.DOM,c=function(a){return{width:a.clientWidth,height:a.clientHeight}},d=function(a,d,e){var f,g,h,i,j=a.settings;f=a.getContainer(),g=a.getContentAreaContainer().firstChild,h=c(f),i=c(g),null!==d&&(d=Math.max(j.min_width||100,d),d=Math.min(j.max_width||65535,d),b.setStyle(f,\"width\",d+(h.width-i.width)),b.setStyle(g,\"width\",d)),e=Math.max(j.min_height||100,e),e=Math.min(j.max_height||65535,e),b.setStyle(g,\"height\",e),a.fire(\"ResizeEditor\")},e=function(a,b,c){var e=a.getContentAreaContainer();d(a,e.clientWidth+b,e.clientHeight+c)};return{resizeTo:d,resizeBy:e}}),g(\"i\",[\"d\",\"c\",\"4\"],function(a,b,c){var d=function(a){return{element:function(){return a}}},e=function(a,b,c){var e=a.settings[c];e&&e(d(b.getEl(\"body\")))},f=function(b,c,d){a.each(d,function(a){var d=c.items().filter(\"#\"+a.name)[0];d&&d.visible()&&a.name!==b&&(e(a,d,\"onhide\"),d.visible(!1))})},g=function(a){a.items().each(function(a){a.active(!1)})},h=function(b,c){return a.grep(b,function(a){return a.name===c})[0]},i=function(a,c,d){return function(i){var j=i.control,k=j.parents().filter(\"panel\")[0],l=k.find(\"#\"+c)[0],m=h(d,c);f(c,k,d),g(j.parent()),l&&l.visible()?(e(m,l,\"onhide\"),l.hide(),j.active(!1)):(l?(l.show(),e(m,l,\"onshow\")):(l=b.create({type:\"container\",name:c,layout:\"stack\",classes:\"sidebar-panel\",html:\"\"}),k.prepend(l),e(m,l,\"onrender\"),e(m,l,\"onshow\")),j.active(!0)),a.fire(\"ResizeEditor\")}},j=function(){return!c.ie||c.ie>=11},k=function(a){return!(!j()||!a.sidebars)&&a.sidebars.length>0},l=function(b){var c=a.map(b.sidebars,function(a){var c=a.settings;return{type:\"button\",icon:c.icon,image:c.image,tooltip:c.tooltip,onclick:i(b,a.name,b.sidebars)}});return{type:\"panel\",name:\"sidebar\",layout:\"stack\",classes:\"sidebar\",items:[{type:\"toolbar\",layout:\"stack\",classes:\"sidebar-toolbar\",items:c}]}};return{hasSidebar:k,createSidebar:l}}),g(\"j\",[],function(){var a=function(a){var b=function(){a._skinLoaded=!0,a.fire(\"SkinLoaded\")};return function(){a.initialized?b():a.on(\"init\",b)}};return{fireSkinLoaded:a}}),g(\"6\",[\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"9\",\"i\",\"j\",\"k\"],function(a,b,c,d,e,f,g,h,i,j,k){var l=a.DOM,m=function(a){return function(b){a.find(\"*\").disabled(\"readonly\"===b.mode)}},n=function(a){return{type:\"panel\",name:\"iframe\",layout:\"stack\",classes:\"edit-area\",border:a,html:\"\"}},o=function(a){return{type:\"panel\",layout:\"stack\",classes:\"edit-aria-container\",border:\"1 0 0 0\",items:[n(\"0\"),i.createSidebar(a)]}},p=function(a,c,p){var q,r,s,t=a.settings;return p.skinUiCss&&l.styleSheetLoader.load(p.skinUiCss,j.fireSkinLoaded(a)),q=c.panel=b.create({type:\"panel\",role:\"application\",classes:\"tinymce\",style:\"visibility: hidden\",layout:\"stack\",border:1,items:[t.menubar===!1?null:{type:\"menubar\",border:\"0 0 1 0\",items:g.createMenuButtons(a)},k.createToolbars(a,t.toolbar_items_size),i.hasSidebar(a)?o(a):n(\"1 0 0 0\")]}),t.resize!==!1&&(r={type:\"resizehandle\",direction:t.resize,onResizeStart:function(){var b=a.getContentAreaContainer().firstChild;s={width:b.clientWidth,height:b.clientHeight}},onResize:function(b){\"both\"===t.resize?h.resizeTo(a,s.width+b.deltaX,s.height+b.deltaY):h.resizeTo(a,null,s.height+b.deltaY)}}),t.statusbar!==!1&&q.add({type:\"panel\",name:\"statusbar\",classes:\"statusbar\",layout:\"flow\",border:\"1 0 0 0\",ariaRoot:!0,items:[{type:\"elementpath\",editor:a},r]}),a.fire(\"BeforeRenderUI\"),a.on(\"SwitchMode\",m(q)),q.renderBefore(p.targetNode).reflow(),t.readonly&&a.setMode(\"readonly\"),p.width&&l.setStyle(q.getEl(),\"width\",p.width),a.on(\"remove\",function(){q.remove(),q=null}),d.addKeys(a,q),f.addContextualToolbars(a),e.setup(a),{iframeContainer:q.find(\"#iframe\")[0].getEl(),editorContainer:q.getEl()}};return{render:p}}),g(\"l\",[\"a\"],function(a){return a(\"tinymce.ui.FloatPanel\")}),g(\"7\",[\"d\",\"c\",\"b\",\"l\",\"k\",\"h\",\"g\",\"e\",\"j\"],function(a,b,c,d,e,f,g,h,i){var j=function(a,j,k){var l,m,n=a.settings,o=c.DOM;n.fixed_toolbar_container&&(m=o.select(n.fixed_toolbar_container)[0]);var p=function(){if(l&&l.moveRel&&l.visible()&&!l._fixed){var b=a.selection.getScrollContainer(),c=a.getBody(),d=0,e=0;if(b){var f=o.getPos(c),g=o.getPos(b);d=Math.max(0,g.x-f.x),e=Math.max(0,g.y-f.y)}l.fixed(!1).moveRel(c,a.rtl?[\"tr-br\",\"br-tr\"]:[\"tl-bl\",\"bl-tl\",\"tr-br\"]).moveBy(d,e)}},q=function(){l&&(l.show(),p(),o.addClass(a.getBody(),\"mce-edit-focus\"))},r=function(){l&&(l.hide(),d.hideAll(),o.removeClass(a.getBody(),\"mce-edit-focus\"))},s=function(){return l?void(l.visible()||q()):(l=j.panel=b.create({type:m?\"panel\":\"floatpanel\",role:\"application\",classes:\"tinymce tinymce-inline\",layout:\"flex\",direction:\"column\",align:\"stretch\",autohide:!1,autofix:!0,fixed:!!m,border:1,items:[n.menubar===!1?null:{type:\"menubar\",border:\"0 0 1 0\",items:f.createMenuButtons(a)},e.createToolbars(a,n.toolbar_items_size)]}),a.fire(\"BeforeRenderUI\"),l.renderTo(m||document.body).reflow(),h.addKeys(a,l),q(),g.addContextualToolbars(a),a.on(\"nodeChange\",p),a.on(\"activate\",q),a.on(\"deactivate\",r),void a.nodeChanged())};return n.content_editable=!0,a.on(\"focus\",function(){k.skinUiCss?o.styleSheetLoader.load(k.skinUiCss,s,s):s()}),a.on(\"blur hide\",r),a.on(\"remove\",function(){l&&(l.remove(),l=null)}),k.skinUiCss&&o.styleSheetLoader.load(k.skinUiCss,i.fireSkinLoaded(a)),{}};return{render:j}}),g(\"m\",[\"a\"],function(a){return a(\"tinymce.ui.Throbber\")}),g(\"8\",[\"m\"],function(a){var b=function(b,c){var d;b.on(\"ProgressState\",function(b){d=d||new a(c.panel.getEl(\"body\")),b.state?d.show(b.time):d.hide()})};return{setup:b}}),g(\"0\",[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\"],function(a,b,c,d,e,f,g,h,i){var j=b.ThemeManager;e.appendTo(a.tinymce?a.tinymce:{});var k=function(a,b,d){var e=a.settings,i=e.skin!==!1&&(e.skin||\"lightgray\");if(i){var j=e.skin_url;j=j?a.documentBaseURI.toAbsolute(j):c.baseURL+\"/skins/\"+i,d.skinUiCss=j+\"/skin.min.css\",a.contentCSS.push(j+\"/content\"+(a.inline?\".inline\":\"\")+\".min.css\")}return h.setup(a,b),e.inline?g.render(a,b,d):f.render(a,b,d)};return j.add(\"modern\",function(a){return{renderUI:function(b){return k(a,this,b)},resizeTo:function(b,c){return i.resizeTo(a,b,c)},resizeBy:function(b,c){return i.resizeBy(a,b,c)}}}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"3\",tinymce.util.Tools.resolve),g(\"1\",[\"3\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"2\",[\"3\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"0\",[\"1\",\"2\"],function(a,b){return a.add(\"advlist\",function(a){function c(b){return a.$.contains(a.getBody(),b)}function d(a){return a&&/^(OL|UL|DL)$/.test(a.nodeName)&&c(a)}function e(a,c){var d=[];return c&&b.each(c.split(/[ ,]/),function(a){d.push({text:a.replace(/\\-/g,\" \").replace(/\\b\\w/g,function(a){return a.toUpperCase()}),data:\"default\"==a?\"\":a})}),d}function f(c,d){a.undoManager.transact(function(){var e,f=a.dom,g=a.selection;if(e=f.getParent(g.getNode(),\"ol,ul\"),!e||e.nodeName!=c||d===!1){var h={\"list-style-type\":d?d:\"\"};a.execCommand(\"UL\"==c?\"InsertUnorderedList\":\"InsertOrderedList\",!1,h)}e=f.getParent(g.getNode(),\"ol,ul\"),e&&b.each(f.select(\"ol,ul\",e).concat([e]),function(a){a.nodeName!==c&&d!==!1&&(a=f.rename(a,c)),f.setStyle(a,\"listStyleType\",d?d:null),a.removeAttribute(\"data-mce-style\")}),a.focus()})}function g(b){var c=a.dom.getStyle(a.dom.getParent(a.selection.getNode(),\"ol,ul\"),\"listStyleType\")||\"\";b.control.items().each(function(a){a.active(a.settings.data===c)})}var h,i,j=function(a,c){var d=a.settings.plugins?a.settings.plugins:\"\";return b.inArray(d.split(/[ ,]/),c)!==-1};h=e(\"OL\",a.getParam(\"advlist_number_styles\",\"default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman\")),i=e(\"UL\",a.getParam(\"advlist_bullet_styles\",\"default,circle,disc,square\"));var k=function(c){return function(){var e=this;a.on(\"NodeChange\",function(a){var f=b.grep(a.parents,d);e.active(f.length>0&&f[0].nodeName===c)})}};j(a,\"lists\")&&(a.addCommand(\"ApplyUnorderedListStyle\",function(a,b){f(\"UL\",b[\"list-style-type\"])}),a.addCommand(\"ApplyOrderedListStyle\",function(a,b){f(\"OL\",b[\"list-style-type\"])}),a.addButton(\"numlist\",{type:h.length>0?\"splitbutton\":\"button\",tooltip:\"Numbered list\",menu:h,onPostRender:k(\"OL\"),onshow:g,onselect:function(a){f(\"OL\",a.control.settings.data)},onclick:function(){f(\"OL\",!1)}}),a.addButton(\"bullist\",{type:i.length>0?\"splitbutton\":\"button\",tooltip:\"Bullet list\",onPostRender:k(\"UL\"),menu:i,onshow:g,onselect:function(a){f(\"UL\",a.control.settings.data)},onclick:function(){f(\"UL\",!1)}}))}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"3\",tinymce.util.Tools.resolve),g(\"1\",[\"3\"],function(a){return a(\"tinymce.Env\")}),g(\"2\",[\"3\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"0\",[\"1\",\"2\"],function(a,b){return b.add(\"anchor\",function(b){var c=function(a){return!a.attr(\"href\")&&(a.attr(\"id\")||a.attr(\"name\"))&&!a.firstChild},d=function(a){return function(b){for(var d=0;d<b.length;d++)c(b[d])&&b[d].attr(\"contenteditable\",a)}},e=function(a){return/^[A-Za-z][A-Za-z0-9\\-:._]*$/.test(a)},f=function(){var a=b.selection.getNode(),c=\"A\"==a.tagName&&\"\"===b.dom.getAttrib(a,\"href\"),d=\"\";c&&(d=a.id||a.name||\"\"),b.windowManager.open({title:\"Anchor\",body:{type:\"textbox\",name:\"id\",size:40,label:\"Id\",value:d},onsubmit:function(d){var f=d.data.id;return e(f)?void(c?(a.removeAttribute(\"name\"),a.id=f):(b.selection.collapse(!0),b.execCommand(\"mceInsertContent\",!1,b.dom.createHTML(\"a\",{id:f})))):(d.preventDefault(),void b.windowManager.alert(\"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.\"))}})};a.ceFalse&&b.on(\"PreInit\",function(){b.parser.addNodeFilter(\"a\",d(\"false\")),b.serializer.addNodeFilter(\"a\",d(null))}),b.addCommand(\"mceAnchor\",f),b.addButton(\"anchor\",{icon:\"anchor\",tooltip:\"Anchor\",onclick:f,stateSelector:\"a:not([href])\"}),b.addMenuItem(\"anchor\",{icon:\"anchor\",text:\"Anchor\",context:\"insert\",onclick:f})}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"3\",tinymce.util.Tools.resolve),g(\"1\",[\"3\"],function(a){return a(\"tinymce.Env\")}),g(\"2\",[\"3\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"0\",[\"1\",\"2\"],function(a,b){return b.add(\"autolink\",function(b){function c(a){f(a,-1,\"(\",!0)}function d(a){f(a,0,\"\",!0)}function e(a){f(a,-1,\"\",!1)}function f(a,b,c){function d(a,b){if(b<0&&(b=0),3==a.nodeType){var c=a.data.length;b>c&&(b=c)}return b}function e(a,b){1!=a.nodeType||a.hasChildNodes()?g.setStart(a,d(a,b)):g.setStartBefore(a)}function f(a,b){1!=a.nodeType||a.hasChildNodes()?g.setEnd(a,d(a,b)):g.setEndAfter(a)}var g,i,j,k,l,m,n,o,p,q;if(\"A\"!=a.selection.getNode().tagName){if(g=a.selection.getRng(!0).cloneRange(),g.startOffset<5){if(o=g.endContainer.previousSibling,!o){if(!g.endContainer.firstChild||!g.endContainer.firstChild.nextSibling)return;o=g.endContainer.firstChild.nextSibling}if(p=o.length,e(o,p),f(o,p),g.endOffset<5)return;i=g.endOffset,k=o}else{if(k=g.endContainer,3!=k.nodeType&&k.firstChild){for(;3!=k.nodeType&&k.firstChild;)k=k.firstChild;3==k.nodeType&&(e(k,0),f(k,k.nodeValue.length))}i=1==g.endOffset?2:g.endOffset-1-b}j=i;do e(k,i>=2?i-2:0),f(k,i>=1?i-1:0),i-=1,q=g.toString();while(\" \"!=q&&\"\"!==q&&160!=q.charCodeAt(0)&&i-2>=0&&q!=c);g.toString()==c||160==g.toString().charCodeAt(0)?(e(k,i),f(k,j),i+=1):0===g.startOffset?(e(k,0),f(k,j)):(e(k,i),f(k,j)),m=g.toString(),\".\"==m.charAt(m.length-1)&&f(k,j-1),m=g.toString(),n=m.match(h),n&&(\"www.\"==n[1]?n[1]=\"http://www.\":/@$/.test(n[1])&&!/^mailto:/.test(n[1])&&(n[1]=\"mailto:\"+n[1]),l=a.selection.getBookmark(),a.selection.setRng(g),a.execCommand(\"createlink\",!1,n[1]+n[2]),a.settings.default_link_target&&a.dom.setAttrib(a.selection.getNode(),\"target\",a.settings.default_link_target),a.selection.moveToBookmark(l),a.nodeChanged())}}var g,h=/^(https?:\\/\\/|ssh:\\/\\/|ftp:\\/\\/|file:\\/|www\\.|(?:mailto:)?[A-Z0-9._%+\\-]+@)(.+)$/i;return b.settings.autolink_pattern&&(h=b.settings.autolink_pattern),b.on(\"keydown\",function(a){if(13==a.keyCode)return e(b)}),a.ie?void b.on(\"focus\",function(){if(!g){g=!0;try{b.execCommand(\"AutoUrlDetect\",!1,!0)}catch(a){}}}):(b.on(\"keypress\",function(a){if(41==a.keyCode)return c(b)}),void b.on(\"keyup\",function(a){if(32==a.keyCode)return d(b)}))}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"5\",tinymce.util.Tools.resolve),g(\"1\",[\"5\"],function(a){return a(\"tinymce.dom.DOMUtils\")}),g(\"2\",[\"5\"],function(a){return a(\"tinymce.Env\")}),g(\"3\",[\"5\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"4\",[\"5\"],function(a){return a(\"tinymce.util.Delay\")}),g(\"0\",[\"1\",\"2\",\"3\",\"4\"],function(a,b,c,d){var e=a.DOM;return c.add(\"autoresize\",function(a){function c(){return a.plugins.fullscreen&&a.plugins.fullscreen.isFullscreen()}function f(d){var g,j,k,l,m,n,o,p,q,r,s,t;if(j=a.getDoc()){if(k=j.body,l=j.documentElement,m=h.autoresize_min_height,!k||d&&\"setcontent\"===d.type&&d.initial||c())return void(k&&l&&(k.style.overflowY=\"auto\",l.style.overflowY=\"auto\"));o=a.dom.getStyle(k,\"margin-top\",!0),p=a.dom.getStyle(k,\"margin-bottom\",!0),q=a.dom.getStyle(k,\"padding-top\",!0),r=a.dom.getStyle(k,\"padding-bottom\",!0),s=a.dom.getStyle(k,\"border-top-width\",!0),t=a.dom.getStyle(k,\"border-bottom-width\",!0),n=k.offsetHeight+parseInt(o,10)+parseInt(p,10)+parseInt(q,10)+parseInt(r,10)+parseInt(s,10)+parseInt(t,10),(isNaN(n)||n<=0)&&(n=b.ie?k.scrollHeight:b.webkit&&0===k.clientHeight?0:k.offsetHeight),n>h.autoresize_min_height&&(m=n),h.autoresize_max_height&&n>h.autoresize_max_height?(m=h.autoresize_max_height,k.style.overflowY=\"auto\",l.style.overflowY=\"auto\"):(k.style.overflowY=\"hidden\",l.style.overflowY=\"hidden\",k.scrollTop=0),m!==i&&(g=m-i,e.setStyle(a.iframeElement,\"height\",m+\"px\"),i=m,b.webKit&&g<0&&f(d))}}function g(b,c,e){d.setEditorTimeout(a,function(){f({}),b--?g(b,c,e):e&&e()},c)}var h=a.settings,i=0;a.settings.inline||(h.autoresize_min_height=parseInt(a.getParam(\"autoresize_min_height\",a.getElement().offsetHeight),10),h.autoresize_max_height=parseInt(a.getParam(\"autoresize_max_height\",0),10),a.on(\"init\",function(){var b,c;b=a.getParam(\"autoresize_overflow_padding\",1),c=a.getParam(\"autoresize_bottom_margin\",50),b!==!1&&a.dom.setStyles(a.getBody(),{paddingLeft:b,paddingRight:b}),c!==!1&&a.dom.setStyles(a.getBody(),{paddingBottom:c})}),a.on(\"nodechange setcontent keyup FullscreenStateChanged\",f),a.getParam(\"autoresize_on_init\",!0)&&a.on(\"init\",function(){g(20,100,function(){g(5,1e3)})}),a.addCommand(\"mceAutoResize\",f))}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"6\",tinymce.util.Tools.resolve),g(\"1\",[\"6\"],function(a){return a(\"tinymce.EditorManager\")}),g(\"2\",[\"6\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"3\",[\"6\"],function(a){return a(\"tinymce.util.LocalStorage\")}),g(\"4\",[\"6\"],function(a){return a(\"tinymce.util.Tools\")}),h(\"5\",window),g(\"0\",[\"1\",\"2\",\"3\",\"4\",\"5\"],function(a,b,c,d,e){return a._beforeUnloadHandler=function(){var b;return d.each(a.editors,function(a){a.plugins.autosave&&a.plugins.autosave.storeDraft(),!b&&a.isDirty()&&a.getParam(\"autosave_ask_before_unload\",!0)&&(b=a.translate(\"You have unsaved changes are you sure you want to navigate away?\"))}),b},b.add(\"autosave\",function(b){function f(a,b){var c={s:1e3,m:6e4};return a=/^(\\d+)([ms]?)$/.exec(\"\"+(a||b)),(a[2]?c[a[2]]:1)*parseInt(a,10)}function g(){var a=parseInt(c.getItem(o+\"time\"),10)||0;return!((new Date).getTime()-a>q.autosave_retention)||(h(!1),!1)}function h(a){c.removeItem(o+\"draft\"),c.removeItem(o+\"time\"),a!==!1&&b.fire(\"RemoveDraft\")}function i(){!n()&&b.isDirty()&&(c.setItem(o+\"draft\",b.getContent({format:\"raw\",no_events:!0})),c.setItem(o+\"time\",(new Date).getTime()),b.fire(\"StoreDraft\"))}function j(){g()&&(b.setContent(c.getItem(o+\"draft\"),{format:\"raw\"}),b.fire(\"RestoreDraft\"))}function k(){p||(setInterval(function(){b.removed||i()},q.autosave_interval),p=!0)}function l(){var a=this;a.disabled(!g()),b.on(\"StoreDraft RestoreDraft RemoveDraft\",function(){a.disabled(!g())}),k()}function m(){b.undoManager.beforeChange(),j(),h(),b.undoManager.add()}function n(a){var c=b.settings.forced_root_block;return a=d.trim(\"undefined\"==typeof a?b.getBody().innerHTML:a),\"\"===a||new RegExp(\"^<\"+c+\"[^>]*>((\\xa0|&nbsp;|[ \\t]|<br[^>]*>)+?|)</\"+c+\">|<br>$\",\"i\").test(a)}var o,p,q=b.settings;o=q.autosave_prefix||\"tinymce-autosave-{path}{query}-{id}-\",o=o.replace(/\\{path\\}/g,document.location.pathname),o=o.replace(/\\{query\\}/g,document.location.search),o=o.replace(/\\{id\\}/g,b.id),q.autosave_interval=f(q.autosave_interval,\"30s\"),q.autosave_retention=f(q.autosave_retention,\"20m\"),b.addButton(\"restoredraft\",{title:\"Restore last draft\",onclick:m,onPostRender:l}),b.addMenuItem(\"restoredraft\",{text:\"Restore last draft\",onclick:m,onPostRender:l,context:\"file\"}),b.settings.autosave_restore_when_empty!==!1&&(b.on(\"init\",function(){g()&&n()&&j()}),b.on(\"saveContent\",function(){h()})),e.onbeforeunload=a._beforeUnloadHandler,this.hasDraft=g,this.storeDraft=i,this.restoreDraft=j,this.removeDraft=h,this.isEmpty=n}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"3\",tinymce.util.Tools.resolve),g(\"1\",[\"3\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"2\",[\"3\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"0\",[\"1\",\"2\"],function(a,b){return a.add(\"bbcode\",function(){return{init:function(a){var b=this,c=a.getParam(\"bbcode_dialect\",\"punbb\").toLowerCase();a.on(\"beforeSetContent\",function(a){a.content=b[\"_\"+c+\"_bbcode2html\"](a.content)}),a.on(\"postProcess\",function(a){a.set&&(a.content=b[\"_\"+c+\"_bbcode2html\"](a.content)),a.get&&(a.content=b[\"_\"+c+\"_html2bbcode\"](a.content))})},getInfo:function(){return{longname:\"BBCode Plugin\",author:\"Ephox Corp\",authorurl:\"http://www.tinymce.com\",infourl:\"http://www.tinymce.com/wiki.php/Plugin:bbcode\"}},_punbb_html2bbcode:function(a){function c(b,c){a=a.replace(b,c)}return a=b.trim(a),c(/<a.*?href=\\\"(.*?)\\\".*?>(.*?)<\\/a>/gi,\"[url=$1]$2[/url]\"),c(/<font.*?color=\\\"(.*?)\\\".*?class=\\\"codeStyle\\\".*?>(.*?)<\\/font>/gi,\"[code][color=$1]$2[/color][/code]\"),c(/<font.*?color=\\\"(.*?)\\\".*?class=\\\"quoteStyle\\\".*?>(.*?)<\\/font>/gi,\"[quote][color=$1]$2[/color][/quote]\"),c(/<font.*?class=\\\"codeStyle\\\".*?color=\\\"(.*?)\\\".*?>(.*?)<\\/font>/gi,\"[code][color=$1]$2[/color][/code]\"),c(/<font.*?class=\\\"quoteStyle\\\".*?color=\\\"(.*?)\\\".*?>(.*?)<\\/font>/gi,\"[quote][color=$1]$2[/color][/quote]\"),c(/<span style=\\\"color: ?(.*?);\\\">(.*?)<\\/span>/gi,\"[color=$1]$2[/color]\"),c(/<font.*?color=\\\"(.*?)\\\".*?>(.*?)<\\/font>/gi,\"[color=$1]$2[/color]\"),c(/<span style=\\\"font-size:(.*?);\\\">(.*?)<\\/span>/gi,\"[size=$1]$2[/size]\"),c(/<font>(.*?)<\\/font>/gi,\"$1\"),c(/<img.*?src=\\\"(.*?)\\\".*?\\/>/gi,\"[img]$1[/img]\"),c(/<span class=\\\"codeStyle\\\">(.*?)<\\/span>/gi,\"[code]$1[/code]\"),c(/<span class=\\\"quoteStyle\\\">(.*?)<\\/span>/gi,\"[quote]$1[/quote]\"),c(/<strong class=\\\"codeStyle\\\">(.*?)<\\/strong>/gi,\"[code][b]$1[/b][/code]\"),c(/<strong class=\\\"quoteStyle\\\">(.*?)<\\/strong>/gi,\"[quote][b]$1[/b][/quote]\"),c(/<em class=\\\"codeStyle\\\">(.*?)<\\/em>/gi,\"[code][i]$1[/i][/code]\"),c(/<em class=\\\"quoteStyle\\\">(.*?)<\\/em>/gi,\"[quote][i]$1[/i][/quote]\"),c(/<u class=\\\"codeStyle\\\">(.*?)<\\/u>/gi,\"[code][u]$1[/u][/code]\"),c(/<u class=\\\"quoteStyle\\\">(.*?)<\\/u>/gi,\"[quote][u]$1[/u][/quote]\"),c(/<\\/(strong|b)>/gi,\"[/b]\"),c(/<(strong|b)>/gi,\"[b]\"),c(/<\\/(em|i)>/gi,\"[/i]\"),c(/<(em|i)>/gi,\"[i]\"),c(/<\\/u>/gi,\"[/u]\"),c(/<span style=\\\"text-decoration: ?underline;\\\">(.*?)<\\/span>/gi,\"[u]$1[/u]\"),c(/<u>/gi,\"[u]\"),c(/<blockquote[^>]*>/gi,\"[quote]\"),c(/<\\/blockquote>/gi,\"[/quote]\"),c(/<br \\/>/gi,\"\\n\"),c(/<br\\/>/gi,\"\\n\"),c(/<br>/gi,\"\\n\"),c(/<p>/gi,\"\"),c(/<\\/p>/gi,\"\\n\"),c(/&nbsp;|\\u00a0/gi,\" \"),c(/&quot;/gi,'\"'),c(/&lt;/gi,\"<\"),c(/&gt;/gi,\">\"),c(/&amp;/gi,\"&\"),a},_punbb_bbcode2html:function(a){function c(b,c){a=a.replace(b,c)}return a=b.trim(a),c(/\\n/gi,\"<br />\"),c(/\\[b\\]/gi,\"<strong>\"),c(/\\[\\/b\\]/gi,\"</strong>\"),c(/\\[i\\]/gi,\"<em>\"),c(/\\[\\/i\\]/gi,\"</em>\"),c(/\\[u\\]/gi,\"<u>\"),c(/\\[\\/u\\]/gi,\"</u>\"),c(/\\[url=([^\\]]+)\\](.*?)\\[\\/url\\]/gi,'<a href=\"$1\">$2</a>'),c(/\\[url\\](.*?)\\[\\/url\\]/gi,'<a href=\"$1\">$1</a>'),c(/\\[img\\](.*?)\\[\\/img\\]/gi,'<img src=\"$1\" />'),c(/\\[color=(.*?)\\](.*?)\\[\\/color\\]/gi,'<font color=\"$1\">$2</font>'),c(/\\[code\\](.*?)\\[\\/code\\]/gi,'<span class=\"codeStyle\">$1</span>&nbsp;'),c(/\\[quote.*?\\](.*?)\\[\\/quote\\]/gi,'<span class=\"quoteStyle\">$1</span>&nbsp;'),a}}}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"3\",tinymce.util.Tools.resolve),g(\"1\",[\"3\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"2\",[\"3\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"0\",[\"1\",\"2\"],function(a,b){return a.add(\"charmap\",function(a){function c(){return[[\"160\",\"no-break space\"],[\"173\",\"soft hyphen\"],[\"34\",\"quotation mark\"],[\"162\",\"cent sign\"],[\"8364\",\"euro sign\"],[\"163\",\"pound sign\"],[\"165\",\"yen sign\"],[\"169\",\"copyright sign\"],[\"174\",\"registered sign\"],[\"8482\",\"trade mark sign\"],[\"8240\",\"per mille sign\"],[\"181\",\"micro sign\"],[\"183\",\"middle dot\"],[\"8226\",\"bullet\"],[\"8230\",\"three dot leader\"],[\"8242\",\"minutes / feet\"],[\"8243\",\"seconds / inches\"],[\"167\",\"section sign\"],[\"182\",\"paragraph sign\"],[\"223\",\"sharp s / ess-zed\"],[\"8249\",\"single left-pointing angle quotation mark\"],[\"8250\",\"single right-pointing angle quotation mark\"],[\"171\",\"left pointing guillemet\"],[\"187\",\"right pointing guillemet\"],[\"8216\",\"left single quotation mark\"],[\"8217\",\"right single quotation mark\"],[\"8220\",\"left double quotation mark\"],[\"8221\",\"right double quotation mark\"],[\"8218\",\"single low-9 quotation mark\"],[\"8222\",\"double low-9 quotation mark\"],[\"60\",\"less-than sign\"],[\"62\",\"greater-than sign\"],[\"8804\",\"less-than or equal to\"],[\"8805\",\"greater-than or equal to\"],[\"8211\",\"en dash\"],[\"8212\",\"em dash\"],[\"175\",\"macron\"],[\"8254\",\"overline\"],[\"164\",\"currency sign\"],[\"166\",\"broken bar\"],[\"168\",\"diaeresis\"],[\"161\",\"inverted exclamation mark\"],[\"191\",\"turned question mark\"],[\"710\",\"circumflex accent\"],[\"732\",\"small tilde\"],[\"176\",\"degree sign\"],[\"8722\",\"minus sign\"],[\"177\",\"plus-minus sign\"],[\"247\",\"division sign\"],[\"8260\",\"fraction slash\"],[\"215\",\"multiplication sign\"],[\"185\",\"superscript one\"],[\"178\",\"superscript two\"],[\"179\",\"superscript three\"],[\"188\",\"fraction one quarter\"],[\"189\",\"fraction one half\"],[\"190\",\"fraction three quarters\"],[\"402\",\"function / florin\"],[\"8747\",\"integral\"],[\"8721\",\"n-ary sumation\"],[\"8734\",\"infinity\"],[\"8730\",\"square root\"],[\"8764\",\"similar to\"],[\"8773\",\"approximately equal to\"],[\"8776\",\"almost equal to\"],[\"8800\",\"not equal to\"],[\"8801\",\"identical to\"],[\"8712\",\"element of\"],[\"8713\",\"not an element of\"],[\"8715\",\"contains as member\"],[\"8719\",\"n-ary product\"],[\"8743\",\"logical and\"],[\"8744\",\"logical or\"],[\"172\",\"not sign\"],[\"8745\",\"intersection\"],[\"8746\",\"union\"],[\"8706\",\"partial differential\"],[\"8704\",\"for all\"],[\"8707\",\"there exists\"],[\"8709\",\"diameter\"],[\"8711\",\"backward difference\"],[\"8727\",\"asterisk operator\"],[\"8733\",\"proportional to\"],[\"8736\",\"angle\"],[\"180\",\"acute accent\"],[\"184\",\"cedilla\"],[\"170\",\"feminine ordinal indicator\"],[\"186\",\"masculine ordinal indicator\"],[\"8224\",\"dagger\"],[\"8225\",\"double dagger\"],[\"192\",\"A - grave\"],[\"193\",\"A - acute\"],[\"194\",\"A - circumflex\"],[\"195\",\"A - tilde\"],[\"196\",\"A - diaeresis\"],[\"197\",\"A - ring above\"],[\"256\",\"A - macron\"],[\"198\",\"ligature AE\"],[\"199\",\"C - cedilla\"],[\"200\",\"E - grave\"],[\"201\",\"E - acute\"],[\"202\",\"E - circumflex\"],[\"203\",\"E - diaeresis\"],[\"274\",\"E - macron\"],[\"204\",\"I - grave\"],[\"205\",\"I - acute\"],[\"206\",\"I - circumflex\"],[\"207\",\"I - diaeresis\"],[\"298\",\"I - macron\"],[\"208\",\"ETH\"],[\"209\",\"N - tilde\"],[\"210\",\"O - grave\"],[\"211\",\"O - acute\"],[\"212\",\"O - circumflex\"],[\"213\",\"O - tilde\"],[\"214\",\"O - diaeresis\"],[\"216\",\"O - slash\"],[\"332\",\"O - macron\"],[\"338\",\"ligature OE\"],[\"352\",\"S - caron\"],[\"217\",\"U - grave\"],[\"218\",\"U - acute\"],[\"219\",\"U - circumflex\"],[\"220\",\"U - diaeresis\"],[\"362\",\"U - macron\"],[\"221\",\"Y - acute\"],[\"376\",\"Y - diaeresis\"],[\"562\",\"Y - macron\"],[\"222\",\"THORN\"],[\"224\",\"a - grave\"],[\"225\",\"a - acute\"],[\"226\",\"a - circumflex\"],[\"227\",\"a - tilde\"],[\"228\",\"a - diaeresis\"],[\"229\",\"a - ring above\"],[\"257\",\"a - macron\"],[\"230\",\"ligature ae\"],[\"231\",\"c - cedilla\"],[\"232\",\"e - grave\"],[\"233\",\"e - acute\"],[\"234\",\"e - circumflex\"],[\"235\",\"e - diaeresis\"],[\"275\",\"e - macron\"],[\"236\",\"i - grave\"],[\"237\",\"i - acute\"],[\"238\",\"i - circumflex\"],[\"239\",\"i - diaeresis\"],[\"299\",\"i - macron\"],[\"240\",\"eth\"],[\"241\",\"n - tilde\"],[\"242\",\"o - grave\"],[\"243\",\"o - acute\"],[\"244\",\"o - circumflex\"],[\"245\",\"o - tilde\"],[\"246\",\"o - diaeresis\"],[\"248\",\"o slash\"],[\"333\",\"o macron\"],[\"339\",\"ligature oe\"],[\"353\",\"s - caron\"],[\"249\",\"u - grave\"],[\"250\",\"u - acute\"],[\"251\",\"u - circumflex\"],[\"252\",\"u - diaeresis\"],[\"363\",\"u - macron\"],[\"253\",\"y - acute\"],[\"254\",\"thorn\"],[\"255\",\"y - diaeresis\"],[\"563\",\"y - macron\"],[\"913\",\"Alpha\"],[\"914\",\"Beta\"],[\"915\",\"Gamma\"],[\"916\",\"Delta\"],[\"917\",\"Epsilon\"],[\"918\",\"Zeta\"],[\"919\",\"Eta\"],[\"920\",\"Theta\"],[\"921\",\"Iota\"],[\"922\",\"Kappa\"],[\"923\",\"Lambda\"],[\"924\",\"Mu\"],[\"925\",\"Nu\"],[\"926\",\"Xi\"],[\"927\",\"Omicron\"],[\"928\",\"Pi\"],[\"929\",\"Rho\"],[\"931\",\"Sigma\"],[\"932\",\"Tau\"],[\"933\",\"Upsilon\"],[\"934\",\"Phi\"],[\"935\",\"Chi\"],[\"936\",\"Psi\"],[\"937\",\"Omega\"],[\"945\",\"alpha\"],[\"946\",\"beta\"],[\"947\",\"gamma\"],[\"948\",\"delta\"],[\"949\",\"epsilon\"],[\"950\",\"zeta\"],[\"951\",\"eta\"],[\"952\",\"theta\"],[\"953\",\"iota\"],[\"954\",\"kappa\"],[\"955\",\"lambda\"],[\"956\",\"mu\"],[\"957\",\"nu\"],[\"958\",\"xi\"],[\"959\",\"omicron\"],[\"960\",\"pi\"],[\"961\",\"rho\"],[\"962\",\"final sigma\"],[\"963\",\"sigma\"],[\"964\",\"tau\"],[\"965\",\"upsilon\"],[\"966\",\"phi\"],[\"967\",\"chi\"],[\"968\",\"psi\"],[\"969\",\"omega\"],[\"8501\",\"alef symbol\"],[\"982\",\"pi symbol\"],[\"8476\",\"real part symbol\"],[\"978\",\"upsilon - hook symbol\"],[\"8472\",\"Weierstrass p\"],[\"8465\",\"imaginary part\"],[\"8592\",\"leftwards arrow\"],[\"8593\",\"upwards arrow\"],[\"8594\",\"rightwards arrow\"],[\"8595\",\"downwards arrow\"],[\"8596\",\"left right arrow\"],[\"8629\",\"carriage return\"],[\"8656\",\"leftwards double arrow\"],[\"8657\",\"upwards double arrow\"],[\"8658\",\"rightwards double arrow\"],[\"8659\",\"downwards double arrow\"],[\"8660\",\"left right double arrow\"],[\"8756\",\"therefore\"],[\"8834\",\"subset of\"],[\"8835\",\"superset of\"],[\"8836\",\"not a subset of\"],[\"8838\",\"subset of or equal to\"],[\"8839\",\"superset of or equal to\"],[\"8853\",\"circled plus\"],[\"8855\",\"circled times\"],[\"8869\",\"perpendicular\"],[\"8901\",\"dot operator\"],[\"8968\",\"left ceiling\"],[\"8969\",\"right ceiling\"],[\"8970\",\"left floor\"],[\"8971\",\"right floor\"],[\"9001\",\"left-pointing angle bracket\"],[\"9002\",\"right-pointing angle bracket\"],[\"9674\",\"lozenge\"],[\"9824\",\"black spade suit\"],[\"9827\",\"black club suit\"],[\"9829\",\"black heart suit\"],[\"9830\",\"black diamond suit\"],[\"8194\",\"en space\"],[\"8195\",\"em space\"],[\"8201\",\"thin space\"],[\"8204\",\"zero width non-joiner\"],[\"8205\",\"zero width joiner\"],[\"8206\",\"left-to-right mark\"],[\"8207\",\"right-to-left mark\"]]}function d(a){return b.grep(a,function(a){return j(a)&&2==a.length})}function e(a){return j(a)?[].concat(d(a)):\"function\"==typeof a?a():[]}function f(b){var c=a.settings;return c.charmap&&(b=e(c.charmap)),c.charmap_append?[].concat(b).concat(e(c.charmap_append)):b}function g(){return f(c())}function h(b){a.fire(\"insertCustomChar\",{chr:b}).chr,a.execCommand(\"mceInsertContent\",!1,b)}function i(){function b(a){for(;a;){if(\"TD\"==a.nodeName)return a;a=a.parentNode}}var c,d,e,f;c='<table role=\"presentation\" cellspacing=\"0\" class=\"mce-charmap\"><tbody>';var i=g(),j=Math.min(i.length,25),k=Math.ceil(i.length/j);for(e=0;e<k;e++){for(c+=\"<tr>\",d=0;d<j;d++){var l=e*j+d;if(l<i.length){var m=i[l],n=m?String.fromCharCode(parseInt(m[0],10)):\"&nbsp;\";c+='<td title=\"'+m[1]+'\"><div tabindex=\"-1\" title=\"'+m[1]+'\" role=\"button\" data-chr=\"'+n+'\">'+n+\"</div></td>\"}else c+=\"<td />\"}c+=\"</tr>\"}c+=\"</tbody></table>\";var o={type:\"container\",html:c,onclick:function(a){var c=a.target;if(/^(TD|DIV)$/.test(c.nodeName)){var d=b(c).firstChild;d&&d.hasAttribute(\"data-chr\")&&(h(d.getAttribute(\"data-chr\")),a.ctrlKey||f.close())}},onmouseover:function(a){var c=b(a.target);c&&c.firstChild?(f.find(\"#preview\").text(c.firstChild.firstChild.data),f.find(\"#previewTitle\").text(c.title)):(f.find(\"#preview\").text(\" \"),f.find(\"#previewTitle\").text(\" \"))}};f=a.windowManager.open({title:\"Special character\",spacing:10,padding:10,items:[o,{type:\"container\",layout:\"flex\",direction:\"column\",align:\"center\",spacing:5,minWidth:160,minHeight:160,items:[{type:\"label\",name:\"preview\",text:\" \",style:\"font-size: 40px; text-align: center\",border:1,minWidth:140,minHeight:80},{type:\"spacer\",minHeight:20},{type:\"label\",name:\"previewTitle\",text:\" \",style:\"white-space: pre-wrap;\",border:1,minWidth:140}]}],buttons:[{text:\"Close\",onclick:function(){f.close()}}]})}var j=b.isArray;return a.addCommand(\"mceShowCharmap\",i),a.addButton(\"charmap\",{icon:\"charmap\",tooltip:\"Special character\",cmd:\"mceShowCharmap\"}),a.addMenuItem(\"charmap\",{icon:\"charmap\",text:\"Special character\",cmd:\"mceShowCharmap\",context:\"insert\"}),{getCharMap:g,insertChar:h}}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"3\",tinymce.util.Tools.resolve),g(\"1\",[\"3\"],function(a){return a(\"tinymce.dom.DOMUtils\")}),g(\"2\",[\"3\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"0\",[\"1\",\"2\"],function(a,b){return b.add(\"code\",function(b){function c(){var c=b.windowManager.open({title:\"Source code\",body:{type:\"textbox\",name:\"code\",multiline:!0,minWidth:b.getParam(\"code_dialog_width\",600),minHeight:b.getParam(\"code_dialog_height\",Math.min(a.DOM.getViewPort().h-200,500)),spellcheck:!1,style:\"direction: ltr; text-align: left\"},onSubmit:function(a){b.focus(),b.undoManager.transact(function(){b.setContent(a.data.code)}),b.selection.setCursorLocation(),b.nodeChanged()}});c.find(\"#code\").value(b.getContent({source_view:!0}))}b.addCommand(\"mceCodeEditor\",c),b.addButton(\"code\",{icon:\"code\",tooltip:\"Source code\",onclick:c}),b.addMenuItem(\"code\",{icon:\"code\",text:\"Source code\",context:\"tools\",onclick:c})}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"6\",tinymce.util.Tools.resolve),g(\"1\",[\"6\"],function(a){return a(\"tinymce.Env\")}),g(\"2\",[\"6\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"3\",[],function(){var a={},b=\"undefined\"!=typeof a?a:\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},c=function(){var a=/\\blang(?:uage)?-(?!\\*)(\\w+)\\b/i,c=b.Prism={util:{encode:function(a){return a instanceof d?new d(a.type,c.util.encode(a.content),a.alias):\"Array\"===c.util.type(a)?a.map(c.util.encode):a.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/\\u00a0/g,\" \")},type:function(a){return Object.prototype.toString.call(a).match(/\\[object (\\w+)\\]/)[1]},clone:function(a){var b=c.util.type(a);switch(b){case\"Object\":var d={};for(var e in a)a.hasOwnProperty(e)&&(d[e]=c.util.clone(a[e]));return d;case\"Array\":return a.map&&a.map(function(a){return c.util.clone(a)})}return a}},languages:{extend:function(a,b){var d=c.util.clone(c.languages[a]);for(var e in b)d[e]=b[e];return d},insertBefore:function(a,b,d,e){e=e||c.languages;var f=e[a];if(2==arguments.length){d=arguments[1];for(var g in d)d.hasOwnProperty(g)&&(f[g]=d[g]);return f}var h={};for(var i in f)if(f.hasOwnProperty(i)){if(i==b)for(var g in d)d.hasOwnProperty(g)&&(h[g]=d[g]);h[i]=f[i]}return c.languages.DFS(c.languages,function(b,c){c===e[a]&&b!=a&&(this[b]=h)}),e[a]=h},DFS:function(a,b,d){for(var e in a)a.hasOwnProperty(e)&&(b.call(a,e,a[e],d||e),\"Object\"===c.util.type(a[e])?c.languages.DFS(a[e],b):\"Array\"===c.util.type(a[e])&&c.languages.DFS(a[e],b,e))}},plugins:{},highlightAll:function(a,b){for(var d,e=document.querySelectorAll('code[class*=\"language-\"], [class*=\"language-\"] code, code[class*=\"lang-\"], [class*=\"lang-\"] code'),f=0;d=e[f++];)c.highlightElement(d,a===!0,b)},highlightElement:function(d,e,f){for(var g,h,i=d;i&&!a.test(i.className);)i=i.parentNode;i&&(g=(i.className.match(a)||[,\"\"])[1],h=c.languages[g]),d.className=d.className.replace(a,\"\").replace(/\\s+/g,\" \")+\" language-\"+g,i=d.parentNode,/pre/i.test(i.nodeName)&&(i.className=i.className.replace(a,\"\").replace(/\\s+/g,\" \")+\" language-\"+g);var j=d.textContent,k={element:d,language:g,grammar:h,code:j};if(!j||!h)return void c.hooks.run(\"complete\",k);if(c.hooks.run(\"before-highlight\",k),e&&b.Worker){var l=new Worker(c.filename);l.onmessage=function(a){k.highlightedCode=a.data,c.hooks.run(\"before-insert\",k),k.element.innerHTML=k.highlightedCode,f&&f.call(k.element),c.hooks.run(\"after-highlight\",k),c.hooks.run(\"complete\",k)},l.postMessage(JSON.stringify({language:k.language,code:k.code,immediateClose:!0}))}else k.highlightedCode=c.highlight(k.code,k.grammar,k.language),c.hooks.run(\"before-insert\",k),k.element.innerHTML=k.highlightedCode,f&&f.call(d),c.hooks.run(\"after-highlight\",k),c.hooks.run(\"complete\",k)},highlight:function(a,b,e){var f=c.tokenize(a,b);return d.stringify(c.util.encode(f),e)},tokenize:function(a,b,d){var e=c.Token,f=[a],g=b.rest;if(g){for(var h in g)b[h]=g[h];delete b.rest}a:for(var h in b)if(b.hasOwnProperty(h)&&b[h]){var i=b[h];i=\"Array\"===c.util.type(i)?i:[i];for(var j=0;j<i.length;++j){var k=i[j],l=k.inside,m=!!k.lookbehind,n=0,o=k.alias;k=k.pattern||k;for(var p=0;p<f.length;p++){var q=f[p];if(f.length>a.length)break a;if(!(q instanceof e)){k.lastIndex=0;var r=k.exec(q);if(r){m&&(n=r[1].length);var s=r.index-1+n,r=r[0].slice(n),t=r.length,u=s+t,v=q.slice(0,s+1),w=q.slice(u+1),x=[p,1];v&&x.push(v);var y=new e(h,l?c.tokenize(r,l):r,o);x.push(y),w&&x.push(w),Array.prototype.splice.apply(f,x)}}}}}return f},hooks:{all:{},add:function(a,b){var d=c.hooks.all;d[a]=d[a]||[],d[a].push(b)},run:function(a,b){var d=c.hooks.all[a];if(d&&d.length)for(var e,f=0;e=d[f++];)e(b)}}},d=c.Token=function(a,b,c){this.type=a,this.content=b,this.alias=c};if(d.stringify=function(a,b,e){if(\"string\"==typeof a)return a;if(\"Array\"===c.util.type(a))return a.map(function(c){return d.stringify(c,b,a)}).join(\"\");var f={type:a.type,content:d.stringify(a.content,b,e),tag:\"span\",classes:[\"token\",a.type],attributes:{},language:b,parent:e};if(\"comment\"==f.type&&(f.attributes.spellcheck=\"true\"),a.alias){var g=\"Array\"===c.util.type(a.alias)?a.alias:[a.alias];Array.prototype.push.apply(f.classes,g)}c.hooks.run(\"wrap\",f);var h=\"\";for(var i in f.attributes)h+=(h?\" \":\"\")+i+'=\"'+(f.attributes[i]||\"\")+'\"';return\"<\"+f.tag+' class=\"'+f.classes.join(\" \")+'\" '+h+\">\"+f.content+\"</\"+f.tag+\">\"},!b.document)return b.addEventListener?(b.addEventListener(\"message\",function(a){var d=JSON.parse(a.data),e=d.language,f=d.code,g=d.immediateClose;b.postMessage(c.highlight(f,c.languages[e],e)),g&&b.close()},!1),b.Prism):b.Prism}();return\"undefined\"!=typeof module&&module.exports&&(module.exports=c),\"undefined\"!=typeof global&&(global.Prism=c),c.languages.markup={comment:/<!--[\\w\\W]*?-->/,prolog:/<\\?[\\w\\W]+?\\?>/,doctype:/<!DOCTYPE[\\w\\W]+?>/,cdata:/<!\\[CDATA\\[[\\w\\W]*?]]>/i,tag:{pattern:/<\\/?[^\\s>\\/=.]+(?:\\s+[^\\s>\\/=]+(?:=(?:(\"|')(?:\\\\\\1|\\\\?(?!\\1)[\\w\\W])*\\1|[^\\s'\">=]+))?)*\\s*\\/?>/i,inside:{tag:{pattern:/^<\\/?[^\\s>\\/]+/i,inside:{punctuation:/^<\\/?/,namespace:/^[^\\s>\\/:]+:/}},\"attr-value\":{pattern:/=(?:('|\")[\\w\\W]*?(\\1)|[^\\s>]+)/i,inside:{punctuation:/[=>\"']/}},punctuation:/\\/?>/,\"attr-name\":{pattern:/[^\\s>\\/]+/,inside:{namespace:/^[^\\s>\\/:]+:/}}}},entity:/&#?[\\da-z]{1,8};/i},c.hooks.add(\"wrap\",function(a){\"entity\"===a.type&&(a.attributes.title=a.content.replace(/&amp;/,\"&\"))}),c.languages.xml=c.languages.markup,c.languages.html=c.languages.markup,c.languages.mathml=c.languages.markup,c.languages.svg=c.languages.markup,c.languages.css={comment:/\\/\\*[\\w\\W]*?\\*\\//,atrule:{pattern:/@[\\w-]+?.*?(;|(?=\\s*\\{))/i,inside:{rule:/@[\\w-]+/}},url:/url\\((?:([\"'])(\\\\(?:\\r\\n|[\\w\\W])|(?!\\1)[^\\\\\\r\\n])*\\1|.*?)\\)/i,selector:/[^\\{\\}\\s][^\\{\\};]*?(?=\\s*\\{)/,string:/(\"|')(\\\\(?:\\r\\n|[\\w\\W])|(?!\\1)[^\\\\\\r\\n])*\\1/,property:/(\\b|\\B)[\\w-]+(?=\\s*:)/i,important:/\\B!important\\b/i,\"function\":/[-a-z0-9]+(?=\\()/i,punctuation:/[(){};:]/},c.languages.css.atrule.inside.rest=c.util.clone(c.languages.css),c.languages.markup&&(c.languages.insertBefore(\"markup\",\"tag\",{style:{pattern:/<style[\\w\\W]*?>[\\w\\W]*?<\\/style>/i,inside:{tag:{pattern:/<style[\\w\\W]*?>|<\\/style>/i,inside:c.languages.markup.tag.inside},rest:c.languages.css},alias:\"language-css\"}}),c.languages.insertBefore(\"inside\",\"attr-value\",{\"style-attr\":{pattern:/\\s*style=(\"|').*?\\1/i,inside:{\"attr-name\":{pattern:/^\\s*style/i,inside:c.languages.markup.tag.inside},punctuation:/^\\s*=\\s*['\"]|['\"]\\s*$/,\"attr-value\":{pattern:/.+/i,inside:c.languages.css}},alias:\"language-css\"}},c.languages.markup.tag)),c.languages.clike={comment:[{pattern:/(^|[^\\\\])\\/\\*[\\w\\W]*?\\*\\//,lookbehind:!0},{pattern:/(^|[^\\\\:])\\/\\/.*/,lookbehind:!0}],string:/([\"'])(\\\\(?:\\r\\n|[\\s\\S])|(?!\\1)[^\\\\\\r\\n])*\\1/,\"class-name\":{pattern:/((?:\\b(?:class|interface|extends|implements|trait|instanceof|new)\\s+)|(?:catch\\s+\\())[a-z0-9_\\.\\\\]+/i,lookbehind:!0,inside:{punctuation:/(\\.|\\\\)/}},keyword:/\\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\\b/,\"boolean\":/\\b(true|false)\\b/,\"function\":/[a-z0-9_]+(?=\\()/i,number:/\\b-?(?:0x[\\da-f]+|\\d*\\.?\\d+(?:e[+-]?\\d+)?)\\b/i,operator:/--?|\\+\\+?|!=?=?|<=?|>=?|==?=?|&&?|\\|\\|?|\\?|\\*|\\/|~|\\^|%/,punctuation:/[{}[\\];(),.:]/},c.languages.javascript=c.languages.extend(\"clike\",{keyword:/\\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\\b/,number:/\\b-?(0x[\\dA-Fa-f]+|0b[01]+|0o[0-7]+|\\d*\\.?\\d+([Ee][+-]?\\d+)?|NaN|Infinity)\\b/,\"function\":/[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*(?=\\()/i}),c.languages.insertBefore(\"javascript\",\"keyword\",{regex:{pattern:/(^|[^\\/])\\/(?!\\/)(\\[.+?]|\\\\.|[^\\/\\\\\\r\\n])+\\/[gimyu]{0,5}(?=\\s*($|[\\r\\n,.;})]))/,lookbehind:!0}}),c.languages.insertBefore(\"javascript\",\"class-name\",{\"template-string\":{pattern:/`(?:\\\\`|\\\\?[^`])*`/,inside:{interpolation:{pattern:/\\$\\{[^}]+\\}/,inside:{\"interpolation-punctuation\":{pattern:/^\\$\\{|\\}$/,alias:\"punctuation\"},rest:c.languages.javascript}},string:/[\\s\\S]+/}}}),c.languages.markup&&c.languages.insertBefore(\"markup\",\"tag\",{script:{pattern:/<script[\\w\\W]*?>[\\w\\W]*?<\\/script>/i,inside:{tag:{pattern:/<script[\\w\\W]*?>|<\\/script>/i,inside:c.languages.markup.tag.inside},rest:c.languages.javascript},alias:\"language-javascript\"}}),c.languages.js=c.languages.javascript,c.languages.c=c.languages.extend(\"clike\",{keyword:/\\b(asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\\b/,operator:/\\-[>-]?|\\+\\+?|!=?|<<?=?|>>?=?|==?|&&?|\\|?\\||[~^%?*\\/]/,number:/\\b-?(?:0x[\\da-f]+|\\d*\\.?\\d+(?:e[+-]?\\d+)?)[ful]*\\b/i}),c.languages.insertBefore(\"c\",\"string\",{macro:{pattern:/(^\\s*)#\\s*[a-z]+([^\\r\\n\\\\]|\\\\.|\\\\(?:\\r\\n?|\\n))*/im,lookbehind:!0,alias:\"property\",inside:{string:{pattern:/(#\\s*include\\s*)(<.+?>|(\"|')(\\\\?.)+?\\3)/,lookbehind:!0}}}}),delete c.languages.c[\"class-name\"],delete c.languages.c[\"boolean\"],c.languages.csharp=c.languages.extend(\"clike\",{keyword:/\\b(abstract|as|async|await|base|bool|break|byte|case|catch|char|checked|class|const|continue|decimal|default|delegate|do|double|else|enum|event|explicit|extern|false|finally|fixed|float|for|foreach|goto|if|implicit|in|int|interface|internal|is|lock|long|namespace|new|null|object|operator|out|override|params|private|protected|public|readonly|ref|return|sbyte|sealed|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|virtual|void|volatile|while|add|alias|ascending|async|await|descending|dynamic|from|get|global|group|into|join|let|orderby|partial|remove|select|set|value|var|where|yield)\\b/,string:[/@(\"|')(\\1\\1|\\\\\\1|\\\\?(?!\\1)[\\s\\S])*\\1/,/(\"|')(\\\\?.)*?\\1/],number:/\\b-?(0x[\\da-f]+|\\d*\\.?\\d+)\\b/i}),c.languages.insertBefore(\"csharp\",\"keyword\",{preprocessor:{pattern:/(^\\s*)#.*/m,lookbehind:!0}}),c.languages.cpp=c.languages.extend(\"c\",{keyword:/\\b(alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\\b/,\"boolean\":/\\b(true|false)\\b/,operator:/[-+]{1,2}|!=?|<{1,2}=?|>{1,2}=?|\\->|:{1,2}|={1,2}|\\^|~|%|&{1,2}|\\|?\\||\\?|\\*|\\/|\\b(and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\\b/}),c.languages.insertBefore(\"cpp\",\"keyword\",{\"class-name\":{pattern:/(class\\s+)[a-z0-9_]+/i,lookbehind:!0}}),c.languages.java=c.languages.extend(\"clike\",{keyword:/\\b(abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while)\\b/,number:/\\b0b[01]+\\b|\\b0x[\\da-f]*\\.?[\\da-fp\\-]+\\b|\\b\\d*\\.?\\d+(?:e[+-]?\\d+)?[df]?\\b/i,operator:{pattern:/(^|[^.])(?:\\+[+=]?|-[-=]?|!=?|<<?=?|>>?>?=?|==?|&[&=]?|\\|[|=]?|\\*=?|\\/=?|%=?|\\^=?|[?:~])/m,lookbehind:!0}}),c.languages.php=c.languages.extend(\"clike\",{keyword:/\\b(and|or|xor|array|as|break|case|cfunction|class|const|continue|declare|default|die|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|for|foreach|function|include|include_once|global|if|new|return|static|switch|use|require|require_once|var|while|abstract|interface|public|implements|private|protected|parent|throw|null|echo|print|trait|namespace|final|yield|goto|instanceof|finally|try|catch)\\b/i,constant:/\\b[A-Z0-9_]{2,}\\b/,comment:{pattern:/(^|[^\\\\])(?:\\/\\*[\\w\\W]*?\\*\\/|\\/\\/.*)/,lookbehind:!0}}),c.languages.insertBefore(\"php\",\"class-name\",{\"shell-comment\":{pattern:/(^|[^\\\\])#.*/,lookbehind:!0,alias:\"comment\"}}),c.languages.insertBefore(\"php\",\"keyword\",{delimiter:/\\?>|<\\?(?:php)?/i,variable:/\\$\\w+\\b/i,\"package\":{pattern:/(\\\\|namespace\\s+|use\\s+)[\\w\\\\]+/,lookbehind:!0,inside:{punctuation:/\\\\/}}}),c.languages.insertBefore(\"php\",\"operator\",{property:{pattern:/(->)[\\w]+/,lookbehind:!0}}),c.languages.markup&&(c.hooks.add(\"before-highlight\",function(a){\"php\"===a.language&&(a.tokenStack=[],a.backupCode=a.code,a.code=a.code.replace(/(?:<\\?php|<\\?)[\\w\\W]*?(?:\\?>)/gi,function(b){return a.tokenStack.push(b),\"{{{PHP\"+a.tokenStack.length+\"}}}\"}))}),c.hooks.add(\"before-insert\",function(a){\"php\"===a.language&&(a.code=a.backupCode,delete a.backupCode)}),c.hooks.add(\"after-highlight\",function(a){if(\"php\"===a.language){for(var b,d=0;b=a.tokenStack[d];d++)a.highlightedCode=a.highlightedCode.replace(\"{{{PHP\"+(d+1)+\"}}}\",c.highlight(b,a.grammar,\"php\").replace(/\\$/g,\"$$$$\"));a.element.innerHTML=a.highlightedCode}}),c.hooks.add(\"wrap\",function(a){\"php\"===a.language&&\"markup\"===a.type&&(a.content=a.content.replace(/(\\{\\{\\{PHP[0-9]+\\}\\}\\})/g,'<span class=\"token php\">$1</span>'))}),c.languages.insertBefore(\"php\",\"comment\",{markup:{pattern:/<[^?]\\/?(.*?)>/,inside:c.languages.markup},php:/\\{\\{\\{PHP[0-9]+\\}\\}\\}/})),c.languages.python={comment:{pattern:/(^|[^\\\\])#.*/,lookbehind:!0},string:/\"\"\"[\\s\\S]+?\"\"\"|'''[\\s\\S]+?'''|(\"|')(?:\\\\?.)*?\\1/,\"function\":{pattern:/((?:^|\\s)def[ \\t]+)[a-zA-Z_][a-zA-Z0-9_]*(?=\\()/g,lookbehind:!0},\"class-name\":{pattern:/(\\bclass\\s+)[a-z0-9_]+/i,lookbehind:!0},keyword:/\\b(?:as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|pass|print|raise|return|try|while|with|yield)\\b/,\"boolean\":/\\b(?:True|False)\\b/,number:/\\b-?(?:0[bo])?(?:(?:\\d|0x[\\da-f])[\\da-f]*\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?j?\\b/i,operator:/[-+%=]=?|!=|\\*\\*?=?|\\/\\/?=?|<[<=>]?|>[=>]?|[&|^~]|\\b(?:or|and|not)\\b/,punctuation:/[{}[\\];(),.:]/},function(a){a.languages.ruby=a.languages.extend(\"clike\",{comment:/#(?!\\{[^\\r\\n]*?\\}).*/,keyword:/\\b(alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|false|for|if|in|module|new|next|nil|not|or|raise|redo|require|rescue|retry|return|self|super|then|throw|true|undef|unless|until|when|while|yield)\\b/});var b={pattern:/#\\{[^}]+\\}/,inside:{delimiter:{pattern:/^#\\{|\\}$/,alias:\"tag\"},rest:a.util.clone(a.languages.ruby)}};a.languages.insertBefore(\"ruby\",\"keyword\",{regex:[{pattern:/%r([^a-zA-Z0-9\\s\\{\\(\\[<])(?:[^\\\\]|\\\\[\\s\\S])*?\\1[gim]{0,3}/,inside:{interpolation:b}},{pattern:/%r\\((?:[^()\\\\]|\\\\[\\s\\S])*\\)[gim]{0,3}/,inside:{interpolation:b}},{pattern:/%r\\{(?:[^#{}\\\\]|#(?:\\{[^}]+\\})?|\\\\[\\s\\S])*\\}[gim]{0,3}/,inside:{interpolation:b}},{pattern:/%r\\[(?:[^\\[\\]\\\\]|\\\\[\\s\\S])*\\][gim]{0,3}/,inside:{interpolation:b}},{pattern:/%r<(?:[^<>\\\\]|\\\\[\\s\\S])*>[gim]{0,3}/,inside:{interpolation:b}},{pattern:/(^|[^\\/])\\/(?!\\/)(\\[.+?]|\\\\.|[^\\/\\r\\n])+\\/[gim]{0,3}(?=\\s*($|[\\r\\n,.;})]))/,lookbehind:!0}],variable:/[@$]+[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\\b)/,symbol:/:[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\\b)/}),a.languages.insertBefore(\"ruby\",\"number\",{builtin:/\\b(Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|File|Fixnum|Fload|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\\b/,constant:/\\b[A-Z][a-zA-Z_0-9]*(?:[?!]|\\b)/}),a.languages.ruby.string=[{pattern:/%[qQiIwWxs]?([^a-zA-Z0-9\\s\\{\\(\\[<])(?:[^\\\\]|\\\\[\\s\\S])*?\\1/,inside:{interpolation:b}},{pattern:/%[qQiIwWxs]?\\((?:[^()\\\\]|\\\\[\\s\\S])*\\)/,inside:{interpolation:b}},{pattern:/%[qQiIwWxs]?\\{(?:[^#{}\\\\]|#(?:\\{[^}]+\\})?|\\\\[\\s\\S])*\\}/,inside:{interpolation:b}},{pattern:/%[qQiIwWxs]?\\[(?:[^\\[\\]\\\\]|\\\\[\\s\\S])*\\]/,inside:{interpolation:b}},{pattern:/%[qQiIwWxs]?<(?:[^<>\\\\]|\\\\[\\s\\S])*>/,inside:{interpolation:b}},{pattern:/(\"|')(#\\{[^}]+\\}|\\\\(?:\\r?\\n|\\r)|\\\\?.)*?\\1/,inside:{interpolation:b}}]}(c),c}),g(\"7\",[\"6\"],function(a){return a(\"tinymce.dom.DOMUtils\")}),g(\"5\",[],function(){function a(a){return a&&\"PRE\"==a.nodeName&&a.className.indexOf(\"language-\")!==-1}function b(a){return function(b,c){return a(c)}}return{isCodeSample:a,trimArg:b}}),g(\"4\",[\"7\",\"3\",\"5\"],function(a,b,c){function d(a){var b=[{text:\"HTML/XML\",value:\"markup\"},{text:\"JavaScript\",value:\"javascript\"},{text:\"CSS\",value:\"css\"},{text:\"PHP\",value:\"php\"},{text:\"Ruby\",value:\"ruby\"},{text:\"Python\",value:\"python\"},{text:\"Java\",value:\"java\"},{text:\"C\",value:\"c\"},{text:\"C#\",value:\"csharp\"},{text:\"C++\",value:\"cpp\"}],c=a.settings.codesample_languages;return c?c:b}function e(a,c,d){a.undoManager.transact(function(){var e=f(a);d=i.encode(d),e?(a.dom.setAttrib(e,\"class\",\"language-\"+c),e.innerHTML=d,b.highlightElement(e),a.selection.select(e)):(a.insertContent('<pre id=\"__new\" class=\"language-'+c+'\">'+d+\"</pre>\"),a.selection.select(a.$(\"#__new\").removeAttr(\"id\")[0]))})}function f(a){var b=a.selection.getNode();return c.isCodeSample(b)?b:null}function g(a){var b=f(a);return b?b.textContent:\"\"}function h(a){var b,c=f(a);return c?(b=c.className.match(/language-(\\w+)/),b?b[1]:\"\"):\"\"}var i=a.DOM;return{open:function(a){a.windowManager.open({title:\"Insert/Edit code sample\",minWidth:Math.min(i.getViewPort().w,a.getParam(\"codesample_dialog_width\",800)),minHeight:Math.min(i.getViewPort().h,a.getParam(\"codesample_dialog_height\",650)),layout:\"flex\",direction:\"column\",align:\"stretch\",body:[{type:\"listbox\",name:\"language\",label:\"Language\",maxWidth:200,value:h(a),values:d(a)},{type:\"textbox\",name:\"code\",multiline:!0,spellcheck:!1,ariaLabel:\"Code view\",flex:1,style:\"direction: ltr; text-align: left\",classes:\"monospace\",value:g(a),autofocus:!0}],onSubmit:function(b){e(a,b.data.language,b.data.code)}})}}}),g(\"0\",[\"1\",\"2\",\"3\",\"4\",\"5\"],function(a,b,c,d,e){var f,g=e.trimArg;return b.add(\"codesample\",function(b,h){function i(){var a,c=b.settings.codesample_content_css;b.inline&&f||!b.inline&&j||(b.inline?f=!0:j=!0,c!==!1&&(a=b.dom.create(\"link\",{rel:\"stylesheet\",href:c?c:h+\"/css/prism.css\"}),b.getDoc().getElementsByTagName(\"head\")[0].appendChild(a)))}var j,k=b.$;a.ceFalse&&(b.on(\"PreProcess\",function(a){k(\"pre[contenteditable=false]\",a.node).filter(g(e.isCodeSample)).each(function(a,b){var c=k(b),d=b.textContent;c.attr(\"class\",k.trim(c.attr(\"class\"))),c.removeAttr(\"contentEditable\"),c.empty().append(k(\"<code></code>\").each(function(){this.textContent=d}))})}),b.on(\"SetContent\",function(){var a=k(\"pre\").filter(g(e.isCodeSample)).filter(function(a,b){return\"false\"!==b.contentEditable});a.length&&b.undoManager.transact(function(){a.each(function(a,d){k(d).find(\"br\").each(function(a,c){c.parentNode.replaceChild(b.getDoc().createTextNode(\"\\n\"),c)}),d.contentEditable=!1,d.innerHTML=b.dom.encode(d.textContent),c.highlightElement(d),d.className=k.trim(d.className)})})}),b.addCommand(\"codesample\",function(){var a=b.selection.getNode();b.selection.isCollapsed()||e.isCodeSample(a)?d.open(b):b.formatter.toggle(\"code\")}),b.addButton(\"codesample\",{cmd:\"codesample\",title:\"Insert/Edit code sample\"}),b.on(\"init\",i))}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"3\",tinymce.util.Tools.resolve),g(\"1\",[\"3\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"2\",[\"3\"],function(a){return a(\"tinymce.util.Color\")}),g(\"0\",[\"1\",\"2\"],function(a,b){return a.add(\"colorpicker\",function(a){function c(c,d){function e(a){var c=new b(a),d=c.toRgb();g.fromJSON({r:d.r,g:d.g,b:d.b,hex:c.toHex().substr(1)}),f(c.toHex())}function f(a){g.find(\"#preview\")[0].getEl().style.background=a}var g=a.windowManager.open({title:\"Color\",items:{type:\"container\",layout:\"flex\",direction:\"row\",align:\"stretch\",padding:5,spacing:10,items:[{type:\"colorpicker\",value:d,onchange:function(){var a=this.rgb();g&&(g.find(\"#r\").value(a.r),g.find(\"#g\").value(a.g),g.find(\"#b\").value(a.b),g.find(\"#hex\").value(this.value().substr(1)),f(this.value()))}},{type:\"form\",padding:0,labelGap:5,defaults:{type:\"textbox\",size:7,value:\"0\",flex:1,spellcheck:!1,onchange:function(){var a,b,c=g.find(\"colorpicker\")[0];return a=this.name(),b=this.value(),\"hex\"==a?(b=\"#\"+b,e(b),void c.value(b)):(b={r:g.find(\"#r\").value(),g:g.find(\"#g\").value(),b:g.find(\"#b\").value()},c.value(b),void e(b))}},items:[{name:\"r\",label:\"R\",autofocus:1},{name:\"g\",label:\"G\"},{name:\"b\",label:\"B\"},{name:\"hex\",label:\"#\",value:\"000000\"},{name:\"preview\",type:\"container\",border:1}]}]},onSubmit:function(){c(\"#\"+this.toJSON().hex)}});e(d)}a.settings.color_picker_callback||(a.settings.color_picker_callback=c)}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"7\",tinymce.util.Tools.resolve),g(\"1\",[\"7\"],function(a){return a(\"tinymce.dom.DOMUtils\")}),g(\"2\",[\"7\"],function(a){return a(\"tinymce.Env\")}),g(\"3\",[\"7\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"4\",[\"7\"],function(a){return a(\"tinymce.ui.Menu\")}),g(\"5\",[\"7\"],function(a){return a(\"tinymce.util.Tools\")}),h(\"a\",Array),h(\"b\",Error),g(\"d\",[\"a\",\"b\"],function(a,b){var c=function(){},d=function(a,b){return function(){return a(b.apply(null,arguments))}},e=function(a){return function(){return a}},f=function(a){return a},g=function(a,b){return a===b},h=function(b){for(var c=new a(arguments.length-1),d=1;d<arguments.length;d++)c[d-1]=arguments[d];return function(){for(var d=new a(arguments.length),e=0;e<d.length;e++)d[e]=arguments[e];var f=c.concat(d);return b.apply(null,f)}},i=function(a){return function(){return!a.apply(null,arguments)}},j=function(a){return function(){throw new b(a)}},k=function(a){return a()},l=function(a){a()},m=e(!1),n=e(!0);return{noop:c,compose:d,constant:e,identity:f,tripleEquals:g,curry:h,not:i,die:j,apply:k,call:l,never:m,always:n}}),h(\"e\",Object),g(\"9\",[\"d\",\"e\"],function(a,b){var c=a.never,d=a.always,e=function(){return f},f=function(){var f=function(a){return a.isNone()},g=function(a){return a()},h=function(a){return a},i=function(){},j={fold:function(a,b){return a()},is:c,isSome:c,isNone:d,getOr:h,getOrThunk:g,getOrDie:function(a){throw new Error(a||\"error: getOrDie called on none.\")},or:h,orThunk:g,map:e,ap:e,each:i,bind:e,flatten:e,exists:c,forall:d,filter:e,equals:f,equals_:f,toArray:function(){return[]},toString:a.constant(\"none()\")};return b.freeze&&b.freeze(j),j}(),g=function(a){var b=function(){return a},h=function(){return k},i=function(b){return g(b(a))},j=function(b){return b(a)},k={fold:function(b,c){return c(a)},is:function(b){return a===b},isSome:d,isNone:c,getOr:b,getOrThunk:b,getOrDie:b,or:h,orThunk:h,map:i,ap:function(b){return b.fold(e,function(b){return g(b(a))})},each:function(b){b(a)},bind:j,flatten:b,exists:j,forall:j,filter:function(b){return b(a)?k:f},equals:function(b){return b.is(a)},equals_:function(b,d){return b.fold(c,function(b){return d(a,b)})},toArray:function(){return[a]},toString:function(){return\"some(\"+a+\")\"}};return k},h=function(a){return null===a||void 0===a?f:g(a)};return{some:g,none:e,from:h}}),h(\"c\",String),g(\"8\",[\"9\",\"a\",\"b\",\"c\"],function(a,b,c,d){var e=function(){var a=b.prototype.indexOf,c=function(b,c){return a.call(b,c)},d=function(a,b){return u(a,b)};return void 0===a?d:c}(),f=function(b,c){var d=e(b,c);return d===-1?a.none():a.some(d)},g=function(a,b){return e(a,b)>-1},h=function(a,b){return t(a,b).isSome()},i=function(a,b){for(var c=[],d=0;d<a;d++)c.push(b(d));return c},j=function(a,b){for(var c=[],d=0;d<a.length;d+=b){var e=a.slice(d,d+b);c.push(e)}return c},k=function(a,c){for(var d=a.length,e=new b(d),f=0;f<d;f++){var g=a[f];e[f]=c(g,f,a)}return e},l=function(a,b){for(var c=0,d=a.length;c<d;c++){var e=a[c];b(e,c,a)}},m=function(a,b){for(var c=a.length-1;c>=0;c--){var d=a[c];b(d,c,a)}},n=function(a,b){for(var c=[],d=[],e=0,f=a.length;e<f;e++){var g=a[e],h=b(g,e,a)?c:d;h.push(g)}return{pass:c,fail:d}},o=function(a,b){for(var c=[],d=0,e=a.length;d<e;d++){var f=a[d];b(f,d,a)&&c.push(f)}return c},p=function(a,b){if(0===a.length)return[];for(var c=b(a[0]),d=[],e=[],f=0,g=a.length;f<g;f++){var h=a[f],i=b(h);i!==c&&(d.push(e),e=[]),c=i,e.push(h)}return 0!==e.length&&d.push(e),d},q=function(a,b,c){return m(a,function(a){c=b(c,a)}),c},r=function(a,b,c){return l(a,function(a){c=b(c,a)}),c},s=function(b,c){for(var d=0,e=b.length;d<e;d++){var f=b[d];if(c(f,d,b))return a.some(f)}return a.none()},t=function(b,c){for(var d=0,e=b.length;d<e;d++){var f=b[d];if(c(f,d,b))return a.some(d)}return a.none()},u=function(a,b){for(var c=0,d=a.length;c<d;++c)if(a[c]===b)return c;return-1},v=b.prototype.push,w=function(a){for(var d=[],e=0,f=a.length;e<f;++e){if(!b.prototype.isPrototypeOf(a[e]))throw new c(\"Arr.flatten item \"+e+\" was not an array, input: \"+a);v.apply(d,a[e])}return d},x=function(a,b){var c=k(a,b);return w(c)},y=function(a,b){for(var c=0,d=a.length;c<d;++c){var e=a[c];if(b(e,c,a)!==!0)return!1}return!0},z=function(a,b){return a.length===b.length&&y(a,function(a,c){return a===b[c]})},A=b.prototype.slice,B=function(a){var b=A.call(a,0);return b.reverse(),b},C=function(a,b){return o(a,function(a){return!g(b,a)})},D=function(a,b){for(var c={},e=0,f=a.length;e<f;e++){var g=a[e];c[d(g)]=b(g,e)}return c},E=function(a){return[a]},F=function(a,b){var c=A.call(a,0);return c.sort(b),c};return{map:k,each:l,eachr:m,partition:n,filter:o,groupBy:p,indexOf:f,foldr:q,foldl:r,find:s,findIndex:t,flatten:w,bind:x,forall:y,exists:h,contains:g,equal:z,reverse:B,chunk:j,difference:C,mapToObject:D,pure:E,sort:F,range:i}}),g(\"6\",[\"8\"],function(a){var b=function(a,b,c){return b>=a.left&&b<=a.right&&c>=a.top&&c<=a.bottom},c=function(c,d,e){return!e.collapsed&&a.foldl(e.getClientRects(),function(a,e){return a||b(e,c,d)},!1)};return{isXYWithinRange:c}}),g(\"0\",[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\"],function(a,b,c,d,e,f){var g=a.DOM;return c.add(\"contextmenu\",function(a){var c,h,i=a.settings.contextmenu_never_use_native,j=function(a){return a.ctrlKey&&!i},k=function(){return b.mac&&b.webkit},l=function(){return h===!0},m=function(a){return a&&\"IMG\"===a.nodeName},n=function(a,b){return m(a.target)&&f.isXYWithinRange(a.clientX,a.clientY,b)===!1};return a.on(\"mousedown\",function(b){k()&&2===b.button&&!j(b)&&a.selection.isCollapsed()&&a.once(\"contextmenu\",function(b){m(b.target)||a.selection.placeCaretAt(b.clientX,b.clientY)})}),a.on(\"contextmenu\",function(b){var f;if(!j(b)){if(n(b,a.selection.getRng())&&a.selection.select(b.target),b.preventDefault(),f=a.settings.contextmenu||\"link openlink image inserttable | cell row column deletetable\",c)c.show();else{var i=[];e.each(f.split(/[ ,]/),function(b){var c=a.menuItems[b];\"|\"==b&&(c={text:b}),c&&(c.shortcut=\"\",i.push(c))});for(var k=0;k<i.length;k++)\"|\"==i[k].text&&(0!==k&&k!=i.length-1||i.splice(k,1));c=new d({items:i,context:\"contextmenu\",classes:\"contextmenu\"}).renderTo(),c.on(\"hide\",function(a){a.control===this&&(h=!1)}),a.on(\"remove\",function(){c.remove(),c=null})}var l={x:b.pageX,y:b.pageY};a.inline||(l=g.getPos(a.getContentAreaContainer()),l.x+=b.clientX,l.y+=b.clientY),c.moveTo(l.x,l.y),h=!0}}),{isContextMenuVisible:l}}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"3\",tinymce.util.Tools.resolve),g(\"1\",[\"3\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"2\",[\"3\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"0\",[\"1\",\"2\"],function(a,b){return a.add(\"directionality\",function(a){function c(c){var d,e=a.dom,f=a.selection.getSelectedBlocks();f.length&&(d=e.getAttrib(f[0],\"dir\"),b.each(f,function(a){e.getParent(a.parentNode,\"*[dir='\"+c+\"']\",e.getRoot())||(d!=c?e.setAttrib(a,\"dir\",c):e.setAttrib(a,\"dir\",null))}),a.nodeChanged())}function d(a){var c=[];return b.each(\"h1 h2 h3 h4 h5 h6 div p\".split(\" \"),function(b){c.push(b+\"[dir=\"+a+\"]\")}),c.join(\",\")}a.addCommand(\"mceDirectionLTR\",function(){c(\"ltr\")}),a.addCommand(\"mceDirectionRTL\",function(){c(\"rtl\")}),a.addButton(\"ltr\",{title:\"Left to right\",cmd:\"mceDirectionLTR\",stateSelector:d(\"ltr\")}),a.addButton(\"rtl\",{title:\"Right to left\",cmd:\"mceDirectionRTL\",stateSelector:d(\"rtl\")})}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"3\",tinymce.util.Tools.resolve),g(\"1\",[\"3\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"2\",[\"3\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"0\",[\"1\",\"2\"],function(a,b){return a.add(\"emoticons\",function(a,c){function d(){var a;return a='<table role=\"list\" class=\"mce-grid\">',b.each(e,function(d){a+=\"<tr>\",b.each(d,function(b){var d=c+\"/img/smiley-\"+b+\".gif\";a+='<td><a href=\"#\" data-mce-url=\"'+d+'\" data-mce-alt=\"'+b+'\" tabindex=\"-1\" role=\"option\" aria-label=\"'+b+'\"><img src=\"'+d+'\" style=\"width: 18px; height: 18px\" role=\"presentation\" /></a></td>'}),a+=\"</tr>\"}),a+=\"</table>\"}var e=[[\"cool\",\"cry\",\"embarassed\",\"foot-in-mouth\"],[\"frown\",\"innocent\",\"kiss\",\"laughing\"],[\"money-mouth\",\"sealed\",\"smile\",\"surprised\"],[\"tongue-out\",\"undecided\",\"wink\",\"yell\"]];a.addButton(\"emoticons\",{type:\"panelbutton\",panel:{role:\"application\",autohide:!0,html:d,onclick:function(b){var c=a.dom.getParent(b.target,\"a\");c&&(a.insertContent('<img src=\"'+c.getAttribute(\"data-mce-url\")+'\" alt=\"'+c.getAttribute(\"data-mce-alt\")+'\" />'),this.hide())}},tooltip:\"Emoticons\"})}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"7\",tinymce.util.Tools.resolve),g(\"1\",[\"7\"],function(a){return a(\"tinymce.html.DomParser\")}),g(\"2\",[\"7\"],function(a){return a(\"tinymce.html.Node\")}),g(\"3\",[\"7\"],function(a){return a(\"tinymce.html.Serializer\")}),g(\"4\",[\"7\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"5\",[\"7\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"6\",[\"5\"],function(a){var b=function(b,c){return a.each(b,function(a){c=c.replace(a,function(a){return\"<!--mce:protected \"+escape(a)+\"-->\"})}),c},c=function(a){return a.replace(/<!--mce:protected ([\\s\\S]*?)-->/g,function(a,b){return unescape(b)})};return{protectHtml:b,unprotectHtml:c}}),g(\"0\",[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\"],function(a,b,c,d,e,f){return d.add(\"fullpage\",function(d){function g(){var a=h();d.windowManager.open({title:\"Document properties\",data:a,defaults:{type:\"textbox\",size:40},body:[{name:\"title\",label:\"Title\"},{name:\"keywords\",label:\"Keywords\"},{name:\"description\",label:\"Description\"},{name:\"robots\",label:\"Robots\"},{name:\"author\",label:\"Author\"},{name:\"docencoding\",label:\"Encoding\"}],onSubmit:function(b){i(e.extend(a,b.data))}})}function h(){function a(a,b){var c=a.attr(b);return c||\"\"}var b,c,f=j(),g={};return g.fontface=d.getParam(\"fullpage_default_fontface\",\"\"),g.fontsize=d.getParam(\"fullpage_default_fontsize\",\"\"),b=f.firstChild,7==b.type&&(g.xml_pi=!0,c=/encoding=\"([^\"]+)\"/.exec(b.value),c&&(g.docencoding=c[1])),b=f.getAll(\"#doctype\")[0],b&&(g.doctype=\"<!DOCTYPE\"+b.value+\">\"),b=f.getAll(\"title\")[0],b&&b.firstChild&&(g.title=b.firstChild.value),p(f.getAll(\"meta\"),function(a){var b,c=a.attr(\"name\"),d=a.attr(\"http-equiv\");c?g[c.toLowerCase()]=a.attr(\"content\"):\"Content-Type\"==d&&(b=/charset\\s*=\\s*(.*)\\s*/gi.exec(a.attr(\"content\")),b&&(g.docencoding=b[1]))}),b=f.getAll(\"html\")[0],b&&(g.langcode=a(b,\"lang\")||a(b,\"xml:lang\")),g.stylesheets=[],e.each(f.getAll(\"link\"),function(a){\"stylesheet\"==a.attr(\"rel\")&&g.stylesheets.push(a.attr(\"href\"))}),b=f.getAll(\"body\")[0],b&&(g.langdir=a(b,\"dir\"),g.style=a(b,\"style\"),g.visited_color=a(b,\"vlink\"),g.link_color=a(b,\"link\"),g.active_color=a(b,\"alink\")),g}function i(a){function f(a,b,c){a.attr(b,c?c:void 0)}function g(a){i.firstChild?i.insert(a,i.firstChild):i.append(a)}var h,i,k,l,m,o=d.dom;h=j(),i=h.getAll(\"head\")[0],i||(l=h.getAll(\"html\")[0],i=new b(\"head\",1),l.firstChild?l.insert(i,l.firstChild,!0):l.append(i)),l=h.firstChild,a.xml_pi?(m='version=\"1.0\"',a.docencoding&&(m+=' encoding=\"'+a.docencoding+'\"'),7!=l.type&&(l=new b(\"xml\",7),h.insert(l,h.firstChild,!0)),l.value=m):l&&7==l.type&&l.remove(),l=h.getAll(\"#doctype\")[0],a.doctype?(l||(l=new b(\"#doctype\",10),a.xml_pi?h.insert(l,h.firstChild):g(l)),l.value=a.doctype.substring(9,a.doctype.length-1)):l&&l.remove(),l=null,p(h.getAll(\"meta\"),function(a){\"Content-Type\"==a.attr(\"http-equiv\")&&(l=a)}),a.docencoding?(l||(l=new b(\"meta\",1),l.attr(\"http-equiv\",\"Content-Type\"),l.shortEnded=!0,g(l)),l.attr(\"content\",\"text/html; charset=\"+a.docencoding)):l&&l.remove(),l=h.getAll(\"title\")[0],a.title?(l?l.empty():(l=new b(\"title\",1),g(l)),l.append(new b(\"#text\",3)).value=a.title):l&&l.remove(),p(\"keywords,description,author,copyright,robots\".split(\",\"),function(c){var d,e,f=h.getAll(\"meta\"),i=a[c];for(d=0;d<f.length;d++)if(e=f[d],e.attr(\"name\")==c)return void(i?e.attr(\"content\",i):e.remove());i&&(l=new b(\"meta\",1),l.attr(\"name\",c),l.attr(\"content\",i),l.shortEnded=!0,g(l))});var q={};e.each(h.getAll(\"link\"),function(a){\"stylesheet\"==a.attr(\"rel\")&&(q[a.attr(\"href\")]=a)}),e.each(a.stylesheets,function(a){q[a]||(l=new b(\"link\",1),l.attr({rel:\"stylesheet\",text:\"text/css\",href:a}),l.shortEnded=!0,g(l)),delete q[a]}),e.each(q,function(a){a.remove()}),l=h.getAll(\"body\")[0],l&&(f(l,\"dir\",a.langdir),f(l,\"style\",a.style),f(l,\"vlink\",a.visited_color),f(l,\"link\",a.link_color),f(l,\"alink\",a.active_color),o.setAttribs(d.getBody(),{style:a.style,dir:a.dir,vLink:a.visited_color,link:a.link_color,aLink:a.active_color})),l=h.getAll(\"html\")[0],l&&(f(l,\"lang\",a.langcode),f(l,\"xml:lang\",a.langcode)),i.firstChild||i.remove(),k=new c({validate:!1,indent:!0,apply_source_formatting:!0,indent_before:\"head,html,body,meta,title,script,link,style\",indent_after:\"head,html,body,meta,title,script,link,style\"}).serialize(h),n=k.substring(0,k.indexOf(\"</body>\"))}function j(){return new a({validate:!1,root_name:\"#document\"}).parse(n)}function k(a){function b(a){return a.replace(/<\\/?[A-Z]+/g,function(a){return a.toLowerCase()})}var c,g,h,i,k,m=\"\",q=d.dom;if(!(a.selection||(h=f.protectHtml(d.settings.protect,a.content),\"raw\"==a.format&&n||a.source_view&&d.getParam(\"fullpage_hide_in_source_view\")))){0!==h.length||a.source_view||(h=e.trim(n)+\"\\n\"+e.trim(h)+\"\\n\"+e.trim(o)),h=h.replace(/<(\\/?)BODY/gi,\"<$1body\"),c=h.indexOf(\"<body\"),c!=-1?(c=h.indexOf(\">\",c),n=b(h.substring(0,c+1)),g=h.indexOf(\"</body\",c),g==-1&&(g=h.length),a.content=e.trim(h.substring(c+1,g)),o=b(h.substring(g))):(n=l(),o=\"\\n</body>\\n</html>\"),i=j(),p(i.getAll(\"style\"),function(a){a.firstChild&&(m+=a.firstChild.value)}),k=i.getAll(\"body\")[0],k&&q.setAttribs(d.getBody(),{style:k.attr(\"style\")||\"\",dir:k.attr(\"dir\")||\"\",vLink:k.attr(\"vlink\")||\"\",link:k.attr(\"link\")||\"\",aLink:k.attr(\"alink\")||\"\"}),q.remove(\"fullpage_styles\");var r=d.getDoc().getElementsByTagName(\"head\")[0];m&&(q.add(r,\"style\",{id:\"fullpage_styles\"},m),k=q.get(\"fullpage_styles\"),k.styleSheet&&(k.styleSheet.cssText=m));var s={};e.each(r.getElementsByTagName(\"link\"),function(a){\"stylesheet\"==a.rel&&a.getAttribute(\"data-mce-fullpage\")&&(s[a.href]=a)}),e.each(i.getAll(\"link\"),function(a){var b=a.attr(\"href\");return!b||(s[b]||\"stylesheet\"!=a.attr(\"rel\")||q.add(r,\"link\",{rel:\"stylesheet\",text:\"text/css\",href:b,\"data-mce-fullpage\":\"1\"}),void delete s[b])}),e.each(s,function(a){a.parentNode.removeChild(a)})}}function l(){var a,b=\"\",c=\"\";return d.getParam(\"fullpage_default_xml_pi\")&&(b+='<?xml version=\"1.0\" encoding=\"'+d.getParam(\"fullpage_default_encoding\",\"ISO-8859-1\")+'\" ?>\\n'),b+=d.getParam(\"fullpage_default_doctype\",\"<!DOCTYPE html>\"),b+=\"\\n<html>\\n<head>\\n\",(a=d.getParam(\"fullpage_default_title\"))&&(b+=\"<title>\"+a+\"</title>\\n\"),(a=d.getParam(\"fullpage_default_encoding\"))&&(b+='<meta http-equiv=\"Content-Type\" content=\"text/html; charset='+a+'\" />\\n'),(a=d.getParam(\"fullpage_default_font_family\"))&&(c+=\"font-family: \"+a+\";\"),(a=d.getParam(\"fullpage_default_font_size\"))&&(c+=\"font-size: \"+a+\";\"),(a=d.getParam(\"fullpage_default_text_color\"))&&(c+=\"color: \"+a+\";\"),b+=\"</head>\\n<body\"+(c?' style=\"'+c+'\"':\"\")+\">\\n\"}function m(a){a.selection||a.source_view&&d.getParam(\"fullpage_hide_in_source_view\")||(a.content=f.unprotectHtml(e.trim(n)+\"\\n\"+e.trim(a.content)+\"\\n\"+e.trim(o)))}var n,o,p=e.each;d.addCommand(\"mceFullPageProperties\",g),d.addButton(\"fullpage\",{title:\"Document properties\",cmd:\"mceFullPageProperties\"}),d.addMenuItem(\"fullpage\",{text:\"Document properties\",cmd:\"mceFullPageProperties\",context:\"file\"}),d.on(\"BeforeSetContent\",k),d.on(\"GetContent\",m)}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"3\",tinymce.util.Tools.resolve),g(\"1\",[\"3\"],function(a){return a(\"tinymce.dom.DOMUtils\")}),g(\"2\",[\"3\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"0\",[\"1\",\"2\"],function(a,b){var c=a.DOM;return b.add(\"fullscreen\",function(a){function b(){var a,b,c=window,d=document,e=d.body;return e.offsetWidth&&(a=e.offsetWidth,b=e.offsetHeight),c.innerWidth&&c.innerHeight&&(a=c.innerWidth,b=c.innerHeight),{w:a,h:b}}function d(){var a=c.getViewPort();return{x:a.x,y:a.y}}function e(a){window.scrollTo(a.x,a.y)}function f(){function f(){c.setStyle(p,\"height\",b().h-(o.clientHeight-p.clientHeight))}var n,o,p,q,r=document.body,s=document.documentElement;m=!m,o=a.getContainer(),n=o.style,p=a.getContentAreaContainer().firstChild,q=p.style,m?(l=d(),g=q.width,h=q.height,q.width=q.height=\"100%\",j=n.width,k=n.height,n.width=n.height=\"\",c.addClass(r,\"mce-fullscreen\"),c.addClass(s,\"mce-fullscreen\"),c.addClass(o,\"mce-fullscreen\"),c.bind(window,\"resize\",f),f(),i=f):(q.width=g,q.height=h,j&&(n.width=j),k&&(n.height=k),c.removeClass(r,\"mce-fullscreen\"),c.removeClass(s,\"mce-fullscreen\"),c.removeClass(o,\"mce-fullscreen\"),c.unbind(window,\"resize\",i),e(l)),a.fire(\"FullscreenStateChanged\",{state:m})}var g,h,i,j,k,l,m=!1;if(!a.settings.inline)return a.on(\"init\",function(){a.addShortcut(\"Ctrl+Shift+F\",\"\",f)}),a.on(\"remove\",function(){i&&c.unbind(window,\"resize\",i)}),a.addCommand(\"mceFullScreen\",f),a.addMenuItem(\"fullscreen\",{text:\"Fullscreen\",shortcut:\"Ctrl+Shift+F\",selectable:!0,onClick:function(){f(),a.focus()},onPostRender:function(){var b=this;a.on(\"FullscreenStateChanged\",function(a){b.active(a.state)})},context:\"view\"}),a.addButton(\"fullscreen\",{tooltip:\"Fullscreen\",shortcut:\"Ctrl+Shift+F\",onClick:f,onPostRender:function(){var b=this;a.on(\"FullscreenStateChanged\",function(a){b.active(a.state)})}}),{isFullscreen:function(){return m}}}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"3\",tinymce.util.Tools.resolve),g(\"1\",[\"3\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"4\",[\"3\"],function(a){return a(\"tinymce.EditorManager\")}),h(\"f\",Array),h(\"g\",Error),g(\"b\",[\"f\",\"g\"],function(a,b){var c=function(){},d=function(a,b){return function(){return a(b.apply(null,arguments))}},e=function(a){return function(){return a}},f=function(a){return a},g=function(a,b){return a===b},h=function(b){for(var c=new a(arguments.length-1),d=1;d<arguments.length;d++)c[d-1]=arguments[d];return function(){for(var d=new a(arguments.length),e=0;e<d.length;e++)d[e]=arguments[e];var f=c.concat(d);return b.apply(null,f)}},i=function(a){return function(){return!a.apply(null,arguments)}},j=function(a){return function(){throw new b(a)}},k=function(a){return a()},l=function(a){a()},m=e(!1),n=e(!0);return{noop:c,compose:d,constant:e,identity:f,tripleEquals:g,curry:h,not:i,die:j,apply:k,call:l,never:m,always:n}}),h(\"j\",Object),g(\"e\",[\"b\",\"j\"],function(a,b){var c=a.never,d=a.always,e=function(){return f},f=function(){var f=function(a){return a.isNone()},g=function(a){return a()},h=function(a){return a},i=function(){},j={fold:function(a,b){return a()},is:c,isSome:c,isNone:d,getOr:h,getOrThunk:g,getOrDie:function(a){throw new Error(a||\"error: getOrDie called on none.\")},or:h,orThunk:g,map:e,ap:e,each:i,bind:e,flatten:e,exists:c,forall:d,filter:e,equals:f,equals_:f,toArray:function(){return[]},toString:a.constant(\"none()\")};return b.freeze&&b.freeze(j),j}(),g=function(a){var b=function(){return a},h=function(){return k},i=function(b){return g(b(a))},j=function(b){return b(a)},k={fold:function(b,c){return c(a)},is:function(b){return a===b},isSome:d,isNone:c,getOr:b,getOrThunk:b,getOrDie:b,or:h,orThunk:h,map:i,ap:function(b){return b.fold(e,function(b){return g(b(a))})},each:function(b){b(a)},bind:j,flatten:b,exists:j,forall:j,filter:function(b){return b(a)?k:f},equals:function(b){return b.is(a)},equals_:function(b,d){return b.fold(c,function(b){return d(a,b)})},toArray:function(){return[a]},toString:function(){return\"some(\"+a+\")\"}};return k},h=function(a){return null===a||void 0===a?f:g(a)};return{some:g,none:e,from:h}}),h(\"h\",String),g(\"8\",[\"e\",\"f\",\"g\",\"h\"],function(a,b,c,d){var e=function(){var a=b.prototype.indexOf,c=function(b,c){return a.call(b,c)},d=function(a,b){return u(a,b)};return void 0===a?d:c}(),f=function(b,c){var d=e(b,c);return d===-1?a.none():a.some(d)},g=function(a,b){return e(a,b)>-1},h=function(a,b){return t(a,b).isSome()},i=function(a,b){for(var c=[],d=0;d<a;d++)c.push(b(d));return c},j=function(a,b){for(var c=[],d=0;d<a.length;d+=b){var e=a.slice(d,d+b);c.push(e)}return c},k=function(a,c){for(var d=a.length,e=new b(d),f=0;f<d;f++){var g=a[f];e[f]=c(g,f,a)}return e},l=function(a,b){for(var c=0,d=a.length;c<d;c++){var e=a[c];b(e,c,a)}},m=function(a,b){for(var c=a.length-1;c>=0;c--){var d=a[c];b(d,c,a)}},n=function(a,b){for(var c=[],d=[],e=0,f=a.length;e<f;e++){var g=a[e],h=b(g,e,a)?c:d;h.push(g)}return{pass:c,fail:d}},o=function(a,b){for(var c=[],d=0,e=a.length;d<e;d++){var f=a[d];b(f,d,a)&&c.push(f)}return c},p=function(a,b){if(0===a.length)return[];for(var c=b(a[0]),d=[],e=[],f=0,g=a.length;f<g;f++){var h=a[f],i=b(h);i!==c&&(d.push(e),e=[]),c=i,e.push(h)}return 0!==e.length&&d.push(e),d},q=function(a,b,c){return m(a,function(a){c=b(c,a)}),c},r=function(a,b,c){return l(a,function(a){c=b(c,a)}),c},s=function(b,c){for(var d=0,e=b.length;d<e;d++){var f=b[d];if(c(f,d,b))return a.some(f)}return a.none()},t=function(b,c){for(var d=0,e=b.length;d<e;d++){var f=b[d];if(c(f,d,b))return a.some(d)}return a.none()},u=function(a,b){for(var c=0,d=a.length;c<d;++c)if(a[c]===b)return c;return-1},v=b.prototype.push,w=function(a){for(var d=[],e=0,f=a.length;e<f;++e){if(!b.prototype.isPrototypeOf(a[e]))throw new c(\"Arr.flatten item \"+e+\" was not an array, input: \"+a);v.apply(d,a[e])}return d},x=function(a,b){var c=k(a,b);return w(c)},y=function(a,b){for(var c=0,d=a.length;c<d;++c){var e=a[c];if(b(e,c,a)!==!0)return!1}return!0},z=function(a,b){return a.length===b.length&&y(a,function(a,c){return a===b[c]})},A=b.prototype.slice,B=function(a){var b=A.call(a,0);return b.reverse(),b},C=function(a,b){return o(a,function(a){return!g(b,a)})},D=function(a,b){for(var c={},e=0,f=a.length;e<f;e++){var g=a[e];c[d(g)]=b(g,e)}return c},E=function(a){return[a]},F=function(a,b){var c=A.call(a,0);return c.sort(b),c};return{map:k,each:l,eachr:m,partition:n,filter:o,groupBy:p,indexOf:f,foldr:q,foldl:r,find:s,findIndex:t,flatten:w,bind:x,forall:y,exists:h,contains:g,equal:z,reverse:B,chunk:j,difference:C,mapToObject:D,pure:E,sort:F,range:i}}),g(\"i\",[\"3\"],function(a){return a(\"tinymce.Env\")}),g(\"9\",[\"i\"],function(a){var b=a.mac?\"\\u2318\":\"Ctrl\",c=a.mac?\"Ctrl + Alt\":\"Shift + Alt\",d=[{shortcut:b+\" + B\",action:\"Bold\"},{shortcut:b+\" + I\",action:\"Italic\"},{shortcut:b+\" + U\",action:\"Underline\"},{shortcut:b+\" + A\",action:\"Select All\"},{shortcut:b+\" + Y or \"+b+\" + Shift + Z\",action:\"Redo\"},{shortcut:b+\" + Z\",action:\"Undo\"},{shortcut:c+\" + 1\",action:\"Header 1\"},{shortcut:c+\" + 2\",action:\"Header 2\"},{shortcut:c+\" + 3\",action:\"Header 3\"},{shortcut:c+\" + 4\",action:\"Header 4\"},{shortcut:c+\" + 5\",action:\"Header 5\"},{shortcut:c+\" + 6\",action:\"Header 6\"},{shortcut:c+\" + 7\",action:\"Paragraph\"},{shortcut:c+\" + 8\",action:\"Div\"},{shortcut:c+\" + 9\",action:\"Address\"},{shortcut:\"Alt + F9\",action:\"Focus to menubar\"},{shortcut:\"Alt + F10\",action:\"Focus to toolbar\"},{shortcut:\"Alt + F11\",action:\"Focus to element path\"},{shortcut:\"Ctrl + Shift + P > Ctrl + Shift + P\",action:\"Focus to contextual toolbar\"},{shortcut:b+\" + K\",action:\"Insert link (if link plugin activated)\"},{shortcut:b+\" + S\",action:\"Save (if save plugin activated)\"},{shortcut:b+\" + F\",action:\"Find (if searchreplace plugin activated)\"}];return{shortcuts:d}}),g(\"5\",[\"8\",\"9\"],function(a,b){var c=function(){var c=function(a){return'aria-label=\"Action: '+a.action+\", Shortcut: \"+a.shortcut.replace(/Ctrl/g,\"Control\")+'\"'},d=a.map(b.shortcuts,function(a){return'<tr data-mce-tabstop=\"1\" tabindex=\"-1\" '+c(a)+\"><td>\"+a.action+\"</td><td>\"+a.shortcut+\"</td></tr>\"}).join(\"\");return{title:\"Handy Shortcuts\",type:\"container\",style:\"overflow-y: auto; overflow-x: hidden; max-height: 250px\",items:[{type:\"container\",html:'<div><table class=\"mce-table-striped\"><thead><th>Action</th><th>Shortcut</th></thead>'+d+\"</table></div>\"}]}};return{makeTab:c}}),g(\"a\",[\"e\",\"j\"],function(a,b){var c=function(){var a=b.keys,c=function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(c);return b};return void 0===a?c:a}(),d=function(a,b){for(var d=c(a),e=0,f=d.length;e<f;e++){var g=d[e],h=a[g];b(h,g,a)}},e=function(a,b){return f(a,function(a,c,d){return{k:c,v:b(a,c,d)}})},f=function(a,b){var c={};return d(a,function(d,e){var f=b(d,e,a);c[f.k]=f.v}),c},g=function(a,b){var c={},e={};return d(a,function(a,d){var f=b(a,d)?c:e;f[d]=a}),{t:c,f:e}},h=function(a,b){var c=[];return d(a,function(a,d){c.push(b(a,d))}),c},i=function(b,d){for(var e=c(b),f=0,g=e.length;f<g;f++){var h=e[f],i=b[h];if(d(i,h,b))return a.some(i)}return a.none()},j=function(a){return h(a,function(a){return a})},k=function(a){return j(a).length};return{bifilter:g,each:d,map:e,mapToArray:h,tupleMap:f,find:i,keys:c,values:j,size:k}}),g(\"k\",[],function(){var a=function(a,b){return b+a},b=function(a,b){return a+b},c=function(a,b){return a.substring(b)},d=function(a,b){return a.substring(0,a.length-b)};return{addToStart:a,addToEnd:b,removeFromStart:c,removeFromEnd:d}}),g(\"l\",[\"e\",\"g\"],function(a,b){var c=function(a,b){return a.substr(0,b)},d=function(a,b){return a.substr(a.length-b,a.length)},e=function(b){return\"\"===b?a.none():a.some(b.substr(0,1))},f=function(b){return\"\"===b?a.none():a.some(b.substring(1))};return{first:c,last:d,head:e,tail:f}}),g(\"c\",[\"k\",\"l\",\"g\"],function(a,b,c){var d=function(a,b,c){if(\"\"===b)return!0;if(a.length<b.length)return!1;var d=a.substr(c,c+b.length);return d===b},e=function(a,b){var c=function(a){var b=typeof a;return\"string\"===b||\"number\"===b};return a.replace(/\\${([^{}]*)}/g,function(a,d){var e=b[d];return c(e)?e:a})},f=function(b,c){return l(b,c)?a.removeFromStart(b,c.length):b},g=function(b,c){return m(b,c)?a.removeFromEnd(b,c.length):b},h=function(b,c){return l(b,c)?b:a.addToStart(b,c)},i=function(b,c){return m(b,c)?b:a.addToEnd(b,c)},j=function(a,b){return a.indexOf(b)!==-1},k=function(a){return b.head(a).bind(function(c){return b.tail(a).map(function(a){return c.toUpperCase()+a})}).getOr(a)},l=function(a,b){return d(a,b,0)},m=function(a,b){return d(a,b,a.length-b.length)},n=function(a){return a.replace(/^\\s+|\\s+$/g,\"\")},o=function(a){return a.replace(/^\\s+/g,\"\")},p=function(a){return a.replace(/\\s+$/g,\"\")};return{supplant:e,startsWith:l,removeLeading:f,removeTrailing:g,ensureLeading:h,ensureTrailing:i,endsWith:m,contains:j,trim:n,lTrim:o,rTrim:p,capitalize:k}}),g(\"d\",[],function(){var a=[\"advlist\",\"anchor\",\"autolink\",\"autoresize\",\"autosave\",\"bbcode\",\"charmap\",\"code\",\"codesample\",\"colorpicker\",\"compat3x\",\"contextmenu\",\"directionality\",\"emoticons\",\"fullpage\",\"fullscreen\",\"hr\",\"image\",\"imagetools\",\"importcss\",\"insertdatetime\",\"legacyoutput\",\"link\",\"lists\",\"media\",\"nonbreaking\",\"noneditable\",\"pagebreak\",\"paste\",\"preview\",\"print\",\"save\",\"searchreplace\",\"spellchecker\",\"tabfocus\",\"table\",\"template\",\"textcolor\",\"textpattern\",\"toc\",\"visualblocks\",\"visualchars\",\"wordcount\"];return{urls:a}}),g(\"6\",[\"4\",\"a\",\"8\",\"b\",\"c\",\"d\"],function(a,b,c,d,e,f){var g=function(a){return c.find(f.urls,function(b){return b===a}).fold(d.constant(a),function(a){return e.supplant('<a href=\"${url}\" target=\"_blank\">${name}</a>',{name:a,url:\"https://www.tinymce.com/docs/plugins/\"+a})})},h=function(a){var c=b.mapToArray(a.plugins,function(a,b){return\"<li>\"+g(b)+\"</li>\"}),d=c.length,e=c.join(\"\");return\"<p><b>Plugins installed (\"+d+\"):</b></p><ul>\"+e+\"</ul>\"},i=function(a){return{type:\"container\",html:'<div style=\"overflow-y: auto; overflow-x: hidden; max-height: 230px; height: 230px;\" data-mce-tabstop=\"1\" tabindex=\"-1\">'+h(a)+\"</div>\",flex:1}},j=function(){return{type:\"container\",html:'<div style=\"padding: 10px; background: #e3e7f4; height: 100%;\" data-mce-tabstop=\"1\" tabindex=\"-1\"><p><b>Premium plugins:</b></p><ul><li>PowerPaste</li><li>Spell Checker Pro</li><li>Accessibility Checker</li><li>Advanced Code Editor</li><li>Enhanced Media Embed</li><li>Link Checker</li></ul><br /><p style=\"float: right;\"><a href=\"https://www.tinymce.com/pricing/\" target=\"_blank\">Learn more...</a></p></div>',flex:1}},k=function(a){return{title:\"Plugins\",type:\"container\",style:\"overflow-y: auto; overflow-x: hidden;\",layout:\"flex\",padding:10,spacing:10,items:[i(a),j()]}};return{makeTab:k}}),g(\"7\",[\"4\"],function(a){var b=function(a,b){return 0===a.indexOf(\"@\")?\"X.X.X\":a+\".\"+b},c=function(){var c=b(a.majorVersion,a.minorVersion),d='<a href=\"https://www.tinymce.com/docs/changelog/\" target=\"_blank\">TinyMCE '+c+\"</a>\";return[{type:\"label\",html:\"You are using \"+d},{type:\"spacer\",flex:1},{text:\"Close\",onclick:function(){this.parent().parent().close()}}]};return{makeRow:c}}),g(\"2\",[\"4\",\"5\",\"6\",\"7\"],function(a,b,c,d){var e=function(a,e){return function(){a.windowManager.open({title:\"Help\",bodyType:\"tabpanel\",layout:\"flex\",body:[b.makeTab(),c.makeTab(a,e)],buttons:d.makeRow(),onPostRender:function(){var a=this.getEl(\"title\");a.innerHTML='<img src=\"'+e+'/img/logo.png\" alt=\"TinyMCE Logo\" style=\"width: 200px\">'}})}};return{openDialog:e}}),g(\"0\",[\"1\",\"2\"],function(a,b){var c=function(a,c){a.addButton(\"help\",{icon:\"help\",onclick:b.openDialog(a,c)}),a.addMenuItem(\"Help\",{text:\"Help\",icon:\"help\",context:\"view\",onclick:b.openDialog(a,c)}),a.addCommand(\"mceHelp\",b.openDialog(a,c)),a.shortcuts.add(\"Alt+0\",\"Open help dialog\",b.openDialog(a,c))};return a.add(\"help\",c),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"2\",tinymce.util.Tools.resolve),g(\"1\",[\"2\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"0\",[\"1\"],function(a){return a.add(\"hr\",function(a){a.addCommand(\"InsertHorizontalRule\",function(){a.execCommand(\"mceInsertContent\",!1,\"<hr />\")}),a.addButton(\"hr\",{icon:\"hr\",tooltip:\"Horizontal line\",cmd:\"InsertHorizontalRule\"}),a.addMenuItem(\"hr\",{icon:\"hr\",text:\"Horizontal line\",cmd:\"InsertHorizontalRule\",context:\"insert\"})}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"6\",tinymce.util.Tools.resolve),g(\"1\",[\"6\"],function(a){return a(\"tinymce.Env\")}),g(\"2\",[\"6\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"3\",[\"6\"],function(a){return a(\"tinymce.util.JSON\")}),g(\"4\",[\"6\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"5\",[\"6\"],function(a){return a(\"tinymce.util.XHR\")}),g(\"0\",[\"1\",\"2\",\"3\",\"4\",\"5\"],function(a,b,c,d,e){return b.add(\"image\",function(b){function f(a,b){function c(a,c){d.parentNode&&d.parentNode.removeChild(d),b({width:a,height:c})}var d=document.createElement(\"img\");d.onload=function(){c(Math.max(d.width,d.clientWidth),Math.max(d.height,d.clientHeight))},d.onerror=function(){c()};var e=d.style;e.visibility=\"hidden\",e.position=\"fixed\",e.bottom=e.left=0,e.width=e.height=\"auto\",document.body.appendChild(d),d.src=a}function g(a,b,c){function e(a,c){return c=c||[],d.each(a,function(a){var d={text:a.text||a.title};a.menu?d.menu=e(a.menu):(d.value=a.value,b(d)),c.push(d)}),c}return e(a,c||[])}function h(a){return function(){var d=b.settings.image_list;\"string\"==typeof d?e.send({url:d,success:function(b){a(c.parse(b))}}):\"function\"==typeof d?d(a):a(d)}}function i(c){function e(){var a,b,c,d;a=o.find(\"#width\")[0],b=o.find(\"#height\")[0],a&&b&&(c=a.value(),d=b.value(),o.find(\"#constrain\")[0].checked()&&r&&s&&c&&d&&(r!=c?(d=Math.round(c/r*d),isNaN(d)||b.value(d)):(c=Math.round(d/s*c),isNaN(c)||a.value(c))),r=c,s=d)}function h(){function a(a){function c(){a.onload=a.onerror=null,b.selection&&(b.selection.select(a),b.nodeChanged())}a.onload=function(){v.width||v.height||!x||w.setAttribs(a,{width:a.clientWidth,height:a.clientHeight}),c()},a.onerror=c}var c,f;m(),e(),v=d.extend(v,o.toJSON()),v.alt||(v.alt=\"\"),v.title||(v.title=\"\"),\"\"===v.width&&(v.width=null),\"\"===v.height&&(v.height=null),v.style||(v.style=null),v={src:v.src,alt:v.alt,title:v.title,width:v.width,height:v.height,style:v.style,caption:v.caption,\"class\":v[\"class\"]},b.undoManager.transact(function(){function d(a){return b.schema.getTextBlockElements()[a.nodeName]}if(!v.src)return void(p&&(w.remove(p),b.focus(),b.nodeChanged()));if(\"\"===v.title&&(v.title=null),p?w.setAttribs(p,v):(v.id=\"__mcenew\",b.focus(),b.selection.setContent(w.createHTML(\"img\",v)),p=w.get(\"__mcenew\"),w.setAttrib(p,\"id\",null)),b.editorUpload.uploadImagesAuto(),v.caption===!1&&w.is(p.parentNode,\"figure.image\")&&(c=p.parentNode,w.insertAfter(p,c),w.remove(c)),v.caption!==!0)a(p);else if(!w.is(p.parentNode,\"figure.image\")){f=p,p=p.cloneNode(!0),c=w.create(\"figure\",{\"class\":\"image\"}),c.appendChild(p),c.appendChild(w.create(\"figcaption\",{contentEditable:!0},\"Caption\")),c.contentEditable=!1;var e=w.getParent(f,d);e?w.split(e,f,c):w.replace(c,f),b.selection.select(c)}})}function i(a){return a&&(a=a.replace(/px$/,\"\")),a}function j(a){var c,e,g,h=a.meta||{};t&&t.value(b.convertURL(this.value(),\"src\")),d.each(h,function(a,b){o.find(\"#\"+b).value(a)}),h.width||h.height||(c=b.convertURL(this.value(),\"src\"),e=b.settings.image_prepend_url,g=new RegExp(\"^(?:[a-z]+:)?//\",\"i\"),e&&!g.test(c)&&c.substring(0,e.length)!==e&&(c=e+c),this.value(c),f(b.documentBaseURI.toAbsolute(this.value()),function(a){a.width&&a.height&&x&&(r=a.width,s=a.height,o.find(\"#width\").value(r),o.find(\"#height\").value(s))}))}function k(a){a.meta=o.toJSON()}function l(a){if(a.margin){var b=a.margin.split(\" \");switch(b.length){case 1:a[\"margin-top\"]=a[\"margin-top\"]||b[0],a[\"margin-right\"]=a[\"margin-right\"]||b[0],a[\"margin-bottom\"]=a[\"margin-bottom\"]||b[0],a[\"margin-left\"]=a[\"margin-left\"]||b[0];break;case 2:a[\"margin-top\"]=a[\"margin-top\"]||b[0],a[\"margin-right\"]=a[\"margin-right\"]||b[1],a[\"margin-bottom\"]=a[\"margin-bottom\"]||b[0],a[\"margin-left\"]=a[\"margin-left\"]||b[1];break;case 3:a[\"margin-top\"]=a[\"margin-top\"]||b[0],a[\"margin-right\"]=a[\"margin-right\"]||b[1],a[\"margin-bottom\"]=a[\"margin-bottom\"]||b[2],a[\"margin-left\"]=a[\"margin-left\"]||b[1];break;case 4:a[\"margin-top\"]=a[\"margin-top\"]||b[0],a[\"margin-right\"]=a[\"margin-right\"]||b[1],a[\"margin-bottom\"]=a[\"margin-bottom\"]||b[2],a[\"margin-left\"]=a[\"margin-left\"]||b[3]}delete a.margin}return a}function m(){function a(a){return a.length>0&&/^[0-9]+$/.test(a)&&(a+=\"px\"),a}if(b.settings.image_advtab){var c=o.toJSON(),d=w.parseStyle(c.style);d=l(d),c.vspace&&(d[\"margin-top\"]=d[\"margin-bottom\"]=a(c.vspace)),c.hspace&&(d[\"margin-left\"]=d[\"margin-right\"]=a(c.hspace)),c.border&&(d[\"border-width\"]=a(c.border)),o.find(\"#style\").value(w.serializeStyle(w.parseStyle(w.serializeStyle(d))))}}function n(){if(b.settings.image_advtab){var a=o.toJSON(),c=w.parseStyle(a.style);o.find(\"#vspace\").value(\"\"),o.find(\"#hspace\").value(\"\"),c=l(c),(c[\"margin-top\"]&&c[\"margin-bottom\"]||c[\"margin-right\"]&&c[\"margin-left\"])&&(c[\"margin-top\"]===c[\"margin-bottom\"]?o.find(\"#vspace\").value(i(c[\"margin-top\"])):o.find(\"#vspace\").value(\"\"),c[\"margin-right\"]===c[\"margin-left\"]?o.find(\"#hspace\").value(i(c[\"margin-right\"])):o.find(\"#hspace\").value(\"\")),c[\"border-width\"]&&o.find(\"#border\").value(i(c[\"border-width\"])),o.find(\"#style\").value(w.serializeStyle(w.parseStyle(w.serializeStyle(c))))}}var o,p,q,r,s,t,u,v={},w=b.dom,x=b.settings.image_dimensions!==!1;p=b.selection.getNode(),q=w.getParent(p,\"figure.image\"),q&&(p=w.select(\"img\",q)[0]),p&&(\"IMG\"!=p.nodeName||p.getAttribute(\"data-mce-object\")||p.getAttribute(\"data-mce-placeholder\"))&&(p=null),p&&(r=w.getAttrib(p,\"width\"),s=w.getAttrib(p,\"height\"),v={src:w.getAttrib(p,\"src\"),alt:w.getAttrib(p,\"alt\"),title:w.getAttrib(p,\"title\"),\"class\":w.getAttrib(p,\"class\"),width:r,height:s,caption:!!q}),c&&(t={type:\"listbox\",label:\"Image list\",values:g(c,function(a){a.value=b.convertURL(a.value||a.url,\"src\")},[{text:\"None\",value:\"\"}]),value:v.src&&b.convertURL(v.src,\"src\"),onselect:function(a){var b=o.find(\"#alt\");(!b.value()||a.lastControl&&b.value()==a.lastControl.text())&&b.value(a.control.text()),o.find(\"#src\").value(a.control.value()).fire(\"change\")},onPostRender:function(){t=this}}),b.settings.image_class_list&&(u={name:\"class\",type:\"listbox\",label:\"Class\",values:g(b.settings.image_class_list,function(a){a.value&&(a.textStyle=function(){return b.formatter.getCssText({inline:\"img\",classes:[a.value]})})})});var y=[{name:\"src\",type:\"filepicker\",filetype:\"image\",label:\"Source\",autofocus:!0,onchange:j,onbeforecall:k},t];b.settings.image_description!==!1&&y.push({name:\"alt\",type:\"textbox\",label:\"Image description\"}),b.settings.image_title&&y.push({name:\"title\",type:\"textbox\",label:\"Image Title\"}),x&&y.push({type:\"container\",label:\"Dimensions\",layout:\"flex\",direction:\"row\",align:\"center\",spacing:5,items:[{name:\"width\",type:\"textbox\",maxLength:5,size:3,onchange:e,ariaLabel:\"Width\"},{type:\"label\",text:\"x\"},{name:\"height\",type:\"textbox\",maxLength:5,size:3,onchange:e,ariaLabel:\"Height\"},{name:\"constrain\",type:\"checkbox\",checked:!0,text:\"Constrain proportions\"}]}),y.push(u),b.settings.image_caption&&a.ceFalse&&y.push({name:\"caption\",type:\"checkbox\",label:\"Caption\"}),b.settings.image_advtab?(p&&(p.style.marginLeft&&p.style.marginRight&&p.style.marginLeft===p.style.marginRight&&(v.hspace=i(p.style.marginLeft)),p.style.marginTop&&p.style.marginBottom&&p.style.marginTop===p.style.marginBottom&&(v.vspace=i(p.style.marginTop)),p.style.borderWidth&&(v.border=i(p.style.borderWidth)),v.style=b.dom.serializeStyle(b.dom.parseStyle(b.dom.getAttrib(p,\"style\")))),o=b.windowManager.open({title:\"Insert/edit image\",data:v,bodyType:\"tabpanel\",body:[{title:\"General\",type:\"form\",items:y},{title:\"Advanced\",type:\"form\",pack:\"start\",items:[{label:\"Style\",name:\"style\",type:\"textbox\",onchange:n},{type:\"form\",layout:\"grid\",packV:\"start\",columns:2,padding:0,alignH:[\"left\",\"right\"],defaults:{type:\"textbox\",maxWidth:50,onchange:m},items:[{label:\"Vertical space\",name:\"vspace\"},{label:\"Horizontal space\",name:\"hspace\"},{label:\"Border\",name:\"border\"}]}]}],onSubmit:h})):o=b.windowManager.open({title:\"Insert/edit image\",data:v,body:y,onSubmit:h})}b.on(\"preInit\",function(){function a(a){var b=a.attr(\"class\");return b&&/\\bimage\\b/.test(b)}function c(b){return function(c){function e(a){a.attr(\"contenteditable\",b?\"true\":null)}for(var f,g=c.length;g--;)f=c[g],a(f)&&(f.attr(\"contenteditable\",b?\"false\":null),d.each(f.getAll(\"figcaption\"),e))}}b.parser.addNodeFilter(\"figure\",c(!0)),b.serializer.addNodeFilter(\"figure\",c(!1))}),b.addButton(\"image\",{icon:\"image\",tooltip:\"Insert/edit image\",onclick:h(i),stateSelector:\"img:not([data-mce-object],[data-mce-placeholder]),figure.image\"}),b.addMenuItem(\"image\",{icon:\"image\",text:\"Image\",onclick:h(i),context:\"insert\",prependToContext:!0}),b.addCommand(\"mceImage\",h(i))}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};g(\"p\",[],function(){function a(a,b){return function(){a.apply(b,arguments)}}function b(b){if(\"object\"!=typeof this)throw new TypeError(\"Promises must be constructed via new\");if(\"function\"!=typeof b)throw new TypeError(\"not a function\");this._state=null,this._value=null,this._deferreds=[],h(b,a(d,this),a(e,this))}function c(a){var b=this;return null===this._state?void this._deferreds.push(a):void i(function(){var c=b._state?a.onFulfilled:a.onRejected;if(null===c)return void(b._state?a.resolve:a.reject)(b._value);var d;try{d=c(b._value)}catch(b){return void a.reject(b)}a.resolve(d)})}function d(b){try{if(b===this)throw new TypeError(\"A promise cannot be resolved with itself.\");if(b&&(\"object\"==typeof b||\"function\"==typeof b)){var c=b.then;if(\"function\"==typeof c)return void h(a(c,b),a(d,this),a(e,this))}this._state=!0,this._value=b,f.call(this)}catch(a){e.call(this,a)}}function e(a){this._state=!1,this._value=a,f.call(this)}function f(){for(var a=0,b=this._deferreds.length;a<b;a++)c.call(this,this._deferreds[a]);this._deferreds=null}function g(a,b,c,d){this.onFulfilled=\"function\"==typeof a?a:null,this.onRejected=\"function\"==typeof b?b:null,this.resolve=c,this.reject=d}function h(a,b,c){var d=!1;try{a(function(a){d||(d=!0,b(a))},function(a){d||(d=!0,c(a))})}catch(a){if(d)return;d=!0,c(a)}}if(window.Promise)return window.Promise;var i=b.immediateFn||\"function\"==typeof setImmediate&&setImmediate||function(a){setTimeout(a,1)},j=Array.isArray||function(a){return\"[object Array]\"===Object.prototype.toString.call(a)};return b.prototype[\"catch\"]=function(a){return this.then(null,a)},b.prototype.then=function(a,d){var e=this;return new b(function(b,f){c.call(e,new g(a,d,b,f))})},b.all=function(){var a=Array.prototype.slice.call(1===arguments.length&&j(arguments[0])?arguments[0]:arguments);return new b(function(b,c){function d(f,g){try{if(g&&(\"object\"==typeof g||\"function\"==typeof g)){var h=g.then;if(\"function\"==typeof h)return void h.call(g,function(a){d(f,a)},c)}a[f]=g,0===--e&&b(a)}catch(a){c(a)}}if(0===a.length)return b([]);for(var e=a.length,f=0;f<a.length;f++)d(f,a[f])})},b.resolve=function(a){return a&&\"object\"==typeof a&&a.constructor===b?a:new b(function(b){b(a)})},b.reject=function(a){return new b(function(b,c){c(a)})},b.race=function(a){return new b(function(b,c){for(var d=0,e=a.length;d<e;d++)a[d].then(b,c)})},b}),g(\"q\",[],function(){function a(a,b){return e(document.createElement(\"canvas\"),a,b)}function b(b){var d,e;return d=a(b.width,b.height),e=c(d),e.drawImage(b,0,0),d}function c(a){return a.getContext(\"2d\")}function d(a){var b=null;try{b=a.getContext(\"webgl\")||a.getContext(\"experimental-webgl\")}catch(a){}return b||(b=null),b}function e(a,b,c){return a.width=b,a.height=c,a}return{create:a,clone:b,resize:e,get2dContext:c,get3dContext:d}}),g(\"r\",[],function(){function a(a){var b=document.createElement(\"a\");return b.href=a,b.pathname}function b(b){var c,d,e,f;return 0===b.indexOf(\"data:\")?(b=b.split(\",\"),f=/data:([^;]+)/.exec(b[0]),f?f[1]:\"\"):(e={jpg:\"image/jpeg\",jpeg:\"image/jpeg\",png:\"image/png\"},c=a(b).split(\".\"),d=c[c.length-1],d&&(d=d.toLowerCase()),e[d])}return{guessMimeType:b}}),g(\"s\",[],function(){function a(a){return a.naturalWidth||a.width}function b(a){return a.naturalHeight||a.height}return{getWidth:a,getHeight:b}}),g(\"c\",[\"p\",\"q\",\"r\",\"s\"],function(a,b,c,d){function e(b){return new a(function(a){function c(){b.removeEventListener(\"load\",c),a(b)}b.complete?a(b):b.addEventListener(\"load\",c)})}function f(a){return e(a).then(function(a){var c,e;return e=b.create(d.getWidth(a),d.getHeight(a)),c=b.get2dContext(e),c.drawImage(a,0,0),e})}function g(a){return e(a).then(function(a){var b=a.src;return 0===b.indexOf(\"blob:\")?i(b):0===b.indexOf(\"data:\")?k(b):f(a).then(function(a){return k(a.toDataURL(c.guessMimeType(b)))})})}function h(b){return new a(function(a){function c(){d.removeEventListener(\"load\",c),a(d)}var d=new Image;d.addEventListener(\"load\",c),d.src=URL.createObjectURL(b),d.complete&&c()})}function i(b){return new a(function(a){var c=new XMLHttpRequest;c.open(\"GET\",b,!0),c.responseType=\"blob\",c.onload=function(){200==this.status&&a(this.response)},c.send()})}function j(a){var b,c,d,e,f,g;if(a=a.split(\",\"),e=/data:([^;]+)/.exec(a[0]),e&&(f=e[1]),b=atob(a[1]),window.WebKitBlobBuilder){for(g=new WebKitBlobBuilder,c=new ArrayBuffer(b.length),d=0;d<c.length;d++)c[d]=b.charCodeAt(d);return g.append(c),g.getBlob(f)}for(c=new Uint8Array(b.length),d=0;d<c.length;d++)c[d]=b.charCodeAt(d);return new Blob([c],{type:f})}function k(b){return new a(function(a){a(j(b))})}function l(a){return 0===a.indexOf(\"blob:\")?i(a):0===a.indexOf(\"data:\")?k(a):null}function m(b,c,d){return c=c||\"image/png\",HTMLCanvasElement.prototype.toBlob?new a(function(a){b.toBlob(function(b){a(b)},c,d)}):k(b.toDataURL(c,d))}function n(b){return new a(function(a){var c=new FileReader;c.onloadend=function(){a(c.result)},c.readAsDataURL(b)})}function o(a){return n(a).then(function(a){return a.split(\",\")[1]})}function p(a){URL.revokeObjectURL(a.src)}return{blobToImage:h,imageToBlob:g,blobToDataUri:n,blobToBase64:o,imageToCanvas:f,canvasToBlob:m,revokeImageUrl:p,uriToBlob:l,dataUriToBlobSync:j}}),g(\"d\",[\"p\",\"c\",\"r\",\"q\"],function(a,b,c,d){function e(a,c){function e(){return c}function f(d,e){return b.canvasToBlob(a,d||c,e)}function g(b,d){return a.toDataURL(b||c,d)}function h(a,b){return g(a,b).split(\",\")[1]}function i(){return d.clone(a)}return{getType:e,toBlob:f,toDataURL:g,toBase64:h,toCanvas:i}}function f(a){return b.blobToImage(a).then(function(a){var c=b.imageToCanvas(a);return b.revokeImageUrl(a),c}).then(function(b){return e(b,a.type)})}function g(b,c){return new a(function(a){a(e(b,c))})}function h(a){var d=c.guessMimeType(a.src);return b.imageToCanvas(a).then(function(a){return e(a,d)})}return{fromBlob:f,fromCanvas:g,fromImage:h}}),g(\"1\",[\"c\",\"d\"],function(a,b){var c=function(b){return a.blobToImage(b)},d=function(b){return a.imageToBlob(b)},e=function(b){return a.blobToDataUri(b)},f=function(b){return a.blobToBase64(b)},g=function(a){return b.fromBlob(a)},h=function(c){return a.uriToBlob(c).then(b.fromBlob)},i=function(a){return b.fromImage(a)},j=function(a,b,c){return a.toBlob(b,c)},k=function(b,c,d){return a.dataUriToBlobSync(b.toDataURL(c,d))};return{blobToImage:c,imageToBlob:d,blobToDataUri:e,blobToBase64:f,blobToImageResult:g,dataUriToImageResult:h,imageToImageResult:i,imageResultToBlob:j,imageResultToBlobSync:k}}),g(\"t\",[],function(){function a(a,b,c){return a=parseFloat(a),a>c?a=c:a<b&&(a=b),a}function b(){return[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1]}function c(a,b){var c,d,e,f,g=[],h=new Array(10);for(c=0;c<5;c++){for(d=0;d<5;d++)g[d]=b[d+5*c];for(d=0;d<5;d++){for(f=0,e=0;e<5;e++)f+=a[d+5*e]*g[e];h[d+5*c]=f}}return h}function d(b,c){return c=a(c,0,1),b.map(function(b,d){return d%6===0?b=1-(1-b)*c:b*=c,a(b,0,1)})}function e(b,d){var e;return d=a(d,-1,1),d*=100,d<0?e=127+d/100*127:(e=d%1,e=0===e?l[d]:l[Math.floor(d)]*(1-e)+l[Math.floor(d)+1]*e,e=127*e+127),c(b,[e/127,0,0,0,.5*(127-e),0,e/127,0,0,.5*(127-e),0,0,e/127,0,.5*(127-e),0,0,0,1,0,0,0,0,0,1])}function f(b,d){var e,f,g,h;return d=a(d,-1,1),e=1+(d>0?3*d:d),f=.3086,g=.6094,h=.082,c(b,[f*(1-e)+e,g*(1-e),h*(1-e),0,0,f*(1-e),g*(1-e)+e,h*(1-e),0,0,f*(1-e),g*(1-e),h*(1-e)+e,0,0,0,0,0,1,0,0,0,0,0,1])}function g(b,d){var e,f,g,h,i;return d=a(d,-180,180)/180*Math.PI,e=Math.cos(d),f=Math.sin(d),g=.213,h=.715,i=.072,c(b,[g+e*(1-g)+f*-g,h+e*-h+f*-h,i+e*-i+f*(1-i),0,0,g+e*-g+.143*f,h+e*(1-h)+.14*f,i+e*-i+f*-.283,0,0,g+e*-g+f*-(1-g),h+e*-h+f*h,i+e*(1-i)+f*i,0,0,0,0,0,1,0,0,0,0,0,1])}function h(b,d){return d=a(255*d,-255,255),c(b,[1,0,0,0,d,0,1,0,0,d,0,0,1,0,d,0,0,0,1,0,0,0,0,0,1])}function i(b,d,e,f){return d=a(d,0,2),e=a(e,0,2),f=a(f,0,2),c(b,[d,0,0,0,0,0,e,0,0,0,0,0,f,0,0,0,0,0,1,0,0,0,0,0,1])}function j(b,e){return e=a(e,0,1),c(b,d([.393,.769,.189,0,0,.349,.686,.168,0,0,.272,.534,.131,0,0,0,0,0,1,0,0,0,0,0,1],e))}function k(b,e){return e=a(e,0,1),c(b,d([.33,.34,.33,0,0,.33,.34,.33,0,0,.33,.34,.33,0,0,0,0,0,1,0,0,0,0,0,1],e))}var l=[0,.01,.02,.04,.05,.06,.07,.08,.1,.11,.12,.14,.15,.16,.17,.18,.2,.21,.22,.24,.25,.27,.28,.3,.32,.34,.36,.38,.4,.42,.44,.46,.48,.5,.53,.56,.59,.62,.65,.68,.71,.74,.77,.8,.83,.86,.89,.92,.95,.98,1,1.06,1.12,1.18,1.24,1.3,1.36,1.42,1.48,1.54,1.6,1.66,1.72,1.78,1.84,1.9,1.96,2,2.12,2.25,2.37,2.5,2.62,2.75,2.87,3,3.2,3.4,3.6,3.8,4,4.3,4.7,4.9,5,5.5,6,6.5,6.8,7,7.3,7.5,7.8,8,8.4,8.7,9,9.4,9.6,9.8,10];return{identity:b,adjust:d,multiply:c,adjustContrast:e,adjustBrightness:h,adjustSaturation:f,adjustHue:g,adjustColors:i,adjustSepia:j,adjustGrayscale:k}}),g(\"e\",[\"q\",\"d\",\"t\"],function(a,b,c){function d(c,d){function e(a,b){var c,d,e,f,g,h=a.data,i=b[0],j=b[1],k=b[2],l=b[3],m=b[4],n=b[5],o=b[6],p=b[7],q=b[8],r=b[9],s=b[10],t=b[11],u=b[12],v=b[13],w=b[14],x=b[15],y=b[16],z=b[17],A=b[18],B=b[19];for(g=0;g<h.length;g+=4)c=h[g],d=h[g+1],e=h[g+2],f=h[g+3],h[g]=c*i+d*j+e*k+f*l+m,h[g+1]=c*n+d*o+e*p+f*q+r,h[g+2]=c*s+d*t+e*u+f*v+w,h[g+3]=c*x+d*y+e*z+f*A+B;return a}var f,g=c.toCanvas(),h=a.get2dContext(g);return f=e(h.getImageData(0,0,g.width,g.height),d),h.putImageData(f,0,0),b.fromCanvas(g,c.getType())}function e(c,d){function e(a,b,c){function d(a,b,c){return a>c?a=c:a<b&&(a=b),a}var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;for(g=Math.round(Math.sqrt(c.length)),h=Math.floor(g/2),e=a.data,f=b.data,t=a.width,u=a.height,j=0;j<u;j++)for(i=0;i<t;i++){for(k=l=m=0,o=0;o<g;o++)for(n=0;n<g;n++)p=d(i+n-h,0,t-1),q=d(j+o-h,0,u-1),r=4*(q*t+p),s=c[o*g+n],k+=e[r]*s,l+=e[r+1]*s,m+=e[r+2]*s;r=4*(j*t+i),f[r]=d(k,0,255),f[r+1]=d(l,0,255),f[r+2]=d(m,0,255)}return b}var f,g,h=c.toCanvas(),i=a.get2dContext(h);return f=i.getImageData(0,0,h.width,h.height),g=i.getImageData(0,0,h.width,h.height),g=e(f,g,d),i.putImageData(g,0,0),b.fromCanvas(h,c.getType())}function f(c){return function(d,e){function f(a,b){var c,d=a.data;for(c=0;c<d.length;c+=4)d[c]=b[d[c]],d[c+1]=b[d[c+1]],d[c+2]=b[d[c+2]];return a}var g,h,i=d.toCanvas(),j=a.get2dContext(i),k=new Array(256);for(h=0;h<k.length;h++)k[h]=c(h,e);return g=f(j.getImageData(0,0,i.width,i.height),k),j.putImageData(g,0,0),b.fromCanvas(i,d.getType())}}function g(a){return function(b,e){return d(b,a(c.identity(),e))}}function h(a){return function(b){return d(b,a)}}function i(a){return function(b){return e(b,a)}}return{invert:h([-1,0,0,0,255,0,-1,0,0,255,0,0,-1,0,255,0,0,0,1,0]),brightness:g(c.adjustBrightness),hue:g(c.adjustHue),saturate:g(c.adjustSaturation),contrast:g(c.adjustContrast),grayscale:g(c.adjustGrayscale),sepia:g(c.adjustSepia),colorize:function(a,b,e,f){return d(a,c.adjustColors(c.identity(),b,e,f))},sharpen:i([0,-1,0,-1,5,-1,0,-1,0]),emboss:i([-2,-1,0,-1,1,1,0,1,2]),gamma:f(function(a,b){return 255*Math.pow(a/255,1-b)}),exposure:f(function(a,b){return 255*(1-Math.exp(-(a/255)*b))}),colorFilter:d,convoluteFilter:e}}),g(\"u\",[\"p\",\"c\",\"q\",\"s\"],function(a,b,c,d){function e(a,b,c){var g=d.getWidth(a),h=d.getHeight(a),i=b/g,j=c/h,k=!1;(i<.5||i>2)&&(i=i<.5?.5:2,k=!0),(j<.5||j>2)&&(j=j<.5?.5:2,k=!0);var l=f(a,i,j);return k?l.then(function(a){return e(a,b,c)}):l}function f(b,e,f){return new a(function(a){var g=d.getWidth(b),h=d.getHeight(b),i=Math.floor(g*e),j=Math.floor(h*f),k=c.create(i,j),l=c.get2dContext(k);l.drawImage(b,0,0,g,h,0,0,i,j),a(k)})}return{scale:e}}),g(\"f\",[\"q\",\"d\",\"u\"],function(a,b,c){function d(c,d){var e=c.toCanvas(),f=a.create(e.width,e.height),g=a.get2dContext(f),h=0,i=0;return d=d<0?360+d:d,90!=d&&270!=d||a.resize(f,f.height,f.width),90!=d&&180!=d||(h=f.width),270!=d&&180!=d||(i=f.height),g.translate(h,i),g.rotate(d*Math.PI/180),g.drawImage(e,0,0),b.fromCanvas(f,c.getType())}function e(c,d){var e=c.toCanvas(),f=a.create(e.width,e.height),g=a.get2dContext(f);return\"v\"==d?(g.scale(1,-1),g.drawImage(e,0,-f.height)):(g.scale(-1,1),g.drawImage(e,-f.width,0)),b.fromCanvas(f,c.getType())}function f(c,d,e,f,g){var h=c.toCanvas(),i=a.create(f,g),j=a.get2dContext(i);return j.drawImage(h,-d,-e),b.fromCanvas(i,c.getType())}function g(a,d,e){return c.scale(a.toCanvas(),d,e).then(function(c){return b.fromCanvas(c,a.getType())})}return{rotate:d,flip:e,crop:f,resize:g}}),g(\"2\",[\"e\",\"f\"],function(a,b){var c=function(b){return a.invert(b)},d=function(b){return a.sharpen(b)},e=function(b){return a.emboss(b)},f=function(b,c){return a.gamma(b,c)},g=function(b,c){return a.exposure(b,c)},h=function(b,c,d,e){return a.colorize(b,c,d,e)},i=function(b,c){return a.brightness(b,c)},j=function(b,c){return a.hue(b,c)},k=function(b,c){return a.saturate(b,c)},l=function(b,c){return a.contrast(b,c)},m=function(b,c){return a.grayscale(b,c)},n=function(b,c){return a.sepia(b,c)},o=function(a,c){return b.flip(a,c)},p=function(a,c,d,e,f){return b.crop(a,c,d,e,f)},q=function(a,c,d){return b.resize(a,c,d)},r=function(a,c){return b.rotate(a,c)};return{invert:c,sharpen:d,emboss:e,brightness:i,hue:j,saturate:k,contrast:l,grayscale:m,sepia:n,colorize:h,gamma:f,exposure:g,flip:o,crop:p,resize:q,rotate:r}}),h(\"g\",tinymce.util.Tools.resolve),g(\"3\",[\"g\"],function(a){return a(\"tinymce.Env\")}),g(\"4\",[\"g\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"5\",[\"g\"],function(a){return a(\"tinymce.util.Delay\")}),g(\"6\",[\"g\"],function(a){return a(\"tinymce.util.Promise\")}),g(\"7\",[\"g\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"8\",[\"g\"],function(a){return a(\"tinymce.util.URI\")}),g(\"9\",[],function(){function a(a){function b(a){return/^[0-9\\.]+px$/.test(a)}var c,d;return c=a.style.width,d=a.style.height,c||d?b(c)&&b(d)?{w:parseInt(c,10),h:parseInt(d,10)}:null:(c=a.width,d=a.height,c&&d?{w:parseInt(c,10),h:parseInt(d,10)}:null)}function b(a,b){var c,d;b&&(c=a.style.width,d=a.style.height,(c||d)&&(a.style.width=b.w+\"px\",a.style.height=b.h+\"px\",a.removeAttribute(\"data-mce-style\")),c=a.width,d=a.height,(c||d)&&(a.setAttribute(\"width\",b.w),a.setAttribute(\"height\",b.h)))}function c(a){return{w:a.naturalWidth,h:a.naturalHeight}}return{getImageSize:a,setImageSize:b,getNaturalImageSize:c}}),h(\"12\",Array),h(\"13\",Error),g(\"w\",[\"12\",\"13\"],function(a,b){var c=function(){},d=function(a,b){return function(){return a(b.apply(null,arguments))}},e=function(a){return function(){return a}},f=function(a){return a},g=function(a,b){return a===b},h=function(b){for(var c=new a(arguments.length-1),d=1;d<arguments.length;d++)c[d-1]=arguments[d];return function(){for(var d=new a(arguments.length),e=0;e<d.length;e++)d[e]=arguments[e];var f=c.concat(d);return b.apply(null,f)}},i=function(a){return function(){return!a.apply(null,arguments)}},j=function(a){return function(){throw new b(a)}},k=function(a){return a()},l=function(a){a()},m=e(!1),n=e(!0);return{noop:c,compose:d,constant:e,identity:f,tripleEquals:g,curry:h,not:i,die:j,apply:k,call:l,never:m,always:n}}),h(\"18\",Object),g(\"11\",[\"w\",\"18\"],function(a,b){var c=a.never,d=a.always,e=function(){return f},f=function(){var f=function(a){return a.isNone()},g=function(a){return a()},h=function(a){return a},i=function(){},j={fold:function(a,b){return a()},is:c,isSome:c,isNone:d,getOr:h,getOrThunk:g,getOrDie:function(a){throw new Error(a||\"error: getOrDie called on none.\")},or:h,orThunk:g,map:e,ap:e,each:i,bind:e,flatten:e,exists:c,forall:d,filter:e,equals:f,equals_:f,toArray:function(){return[]},toString:a.constant(\"none()\")};return b.freeze&&b.freeze(j),j}(),g=function(a){var b=function(){return a},h=function(){return k},i=function(b){return g(b(a))},j=function(b){return b(a)},k={fold:function(b,c){return c(a)},is:function(b){return a===b},isSome:d,isNone:c,getOr:b,getOrThunk:b,getOrDie:b,or:h,orThunk:h,map:i,ap:function(b){return b.fold(e,function(b){return g(b(a))})},each:function(b){b(a)},bind:j,flatten:b,exists:j,forall:j,filter:function(b){return b(a)?k:f},equals:function(b){return b.is(a)},equals_:function(b,d){return b.fold(c,function(b){return d(a,b)})},toArray:function(){return[a]},toString:function(){return\"some(\"+a+\")\"}};return k},h=function(a){return null===a||void 0===a?f:g(a)};return{some:g,none:e,from:h}}),h(\"14\",String),g(\"v\",[\"11\",\"12\",\"13\",\"14\"],function(a,b,c,d){var e=function(){var a=b.prototype.indexOf,c=function(b,c){return a.call(b,c)},d=function(a,b){return u(a,b)};return void 0===a?d:c}(),f=function(b,c){var d=e(b,c);return d===-1?a.none():a.some(d)},g=function(a,b){return e(a,b)>-1},h=function(a,b){return t(a,b).isSome()},i=function(a,b){for(var c=[],d=0;d<a;d++)c.push(b(d));return c},j=function(a,b){for(var c=[],d=0;d<a.length;d+=b){var e=a.slice(d,d+b);c.push(e)}return c},k=function(a,c){for(var d=a.length,e=new b(d),f=0;f<d;f++){var g=a[f];e[f]=c(g,f,a)}return e},l=function(a,b){for(var c=0,d=a.length;c<d;c++){var e=a[c];b(e,c,a)}},m=function(a,b){for(var c=a.length-1;c>=0;c--){var d=a[c];b(d,c,a)}},n=function(a,b){for(var c=[],d=[],e=0,f=a.length;e<f;e++){var g=a[e],h=b(g,e,a)?c:d;h.push(g)}return{pass:c,fail:d}},o=function(a,b){for(var c=[],d=0,e=a.length;d<e;d++){var f=a[d];b(f,d,a)&&c.push(f)}return c},p=function(a,b){if(0===a.length)return[];for(var c=b(a[0]),d=[],e=[],f=0,g=a.length;f<g;f++){var h=a[f],i=b(h);i!==c&&(d.push(e),e=[]),c=i,e.push(h)}return 0!==e.length&&d.push(e),d},q=function(a,b,c){return m(a,function(a){c=b(c,a)}),c},r=function(a,b,c){return l(a,function(a){c=b(c,a)}),c},s=function(b,c){for(var d=0,e=b.length;d<e;d++){var f=b[d];if(c(f,d,b))return a.some(f)}return a.none()},t=function(b,c){for(var d=0,e=b.length;d<e;d++){var f=b[d];if(c(f,d,b))return a.some(d)}return a.none()},u=function(a,b){for(var c=0,d=a.length;c<d;++c)if(a[c]===b)return c;return-1},v=b.prototype.push,w=function(a){for(var d=[],e=0,f=a.length;e<f;++e){if(!b.prototype.isPrototypeOf(a[e]))throw new c(\"Arr.flatten item \"+e+\" was not an array, input: \"+a);v.apply(d,a[e])}return d},x=function(a,b){var c=k(a,b);return w(c)},y=function(a,b){for(var c=0,d=a.length;c<d;++c){var e=a[c];if(b(e,c,a)!==!0)return!1}return!0},z=function(a,b){return a.length===b.length&&y(a,function(a,c){return a===b[c]})},A=b.prototype.slice,B=function(a){var b=A.call(a,0);return b.reverse(),b},C=function(a,b){return o(a,function(a){return!g(b,a)})},D=function(a,b){for(var c={},e=0,f=a.length;e<f;e++){var g=a[e];c[d(g)]=b(g,e)}return c},E=function(a){return[a]},F=function(a,b){var c=A.call(a,0);return c.sort(b),c};return{map:k,each:l,eachr:m,partition:n,filter:o,groupBy:p,indexOf:f,foldr:q,foldl:r,find:s,findIndex:t,flatten:w,bind:x,forall:y,exists:h,contains:g,equal:z,reverse:B,chunk:j,difference:C,mapToObject:D,pure:E,sort:F,range:i}}),g(\"i\",[\"6\",\"7\"],function(a,b){var c=function(a){return null!==a&&void 0!==a},d=function(a,b){var d;return d=b.reduce(function(a,b){return c(a)?a[b]:void 0},a),c(d)?d:null},e=function(c,d){return new a(function(a){var e;e=new XMLHttpRequest,e.onreadystatechange=function(){4===e.readyState&&a({status:e.status,blob:this.response})},e.open(\"GET\",c,!0),b.each(d,function(a,b){e.setRequestHeader(b,a)}),e.responseType=\"blob\",e.send()})},f=function(b){return new a(function(a){var c=new FileReader;c.onload=function(b){var c=b.target;a(c.result)},c.readAsText(b)})},g=function(a){var b;try{b=JSON.parse(a)}catch(a){}return b};return{traverse:d,readBlob:f,requestUrlAsBlob:e,parseJson:g}}),g(\"h\",[\"v\",\"w\",\"6\",\"i\"],function(a,b,c,d){var e=[{code:404,message:\"Could not find Image Proxy\"},{code:403,message:\"Rejected request\"},{code:0,message:\"Incorrect Image Proxy URL\"}],f=[{type:\"key_missing\",message:\"The request did not include an api key.\"},{type:\"key_not_found\",message:\"The provided api key could not be found.\"},{type:\"domain_not_trusted\",message:\"The api key is not valid for the request origins.\"}],g=function(a){return 400===a||403===a||500===a},h=function(c){var d=a.find(e,function(a){return c===a.code}).fold(b.constant(\"Unknown ImageProxy error\"),function(a){return a.message});return\"ImageProxy HTTP error: \"+d},i=function(a){var b=h(a);return c.reject(b)},j=function(c){return a.find(f,function(a){return a.type===c}).fold(b.constant(\"Unknown service error\"),function(a){return a.message})},k=function(a){var b=d.parseJson(a),c=d.traverse(b,[\"error\",\"type\"]),e=c?j(c):\"Invalid JSON in service error message\";return\"ImageProxy Service error: \"+e},l=function(a,b){return d.readBlob(b).then(function(a){var b=k(a);return c.reject(b)})},m=function(a,b){return g(a)?l(a,b):i(a)};return{handleServiceErrorResponse:m,handleHttpError:i,getHttpErrorMsg:h,getServiceErrorMsg:j}}),g(\"a\",[\"6\",\"7\",\"h\",\"i\"],function(a,b,c,d){function e(b){return d.requestUrlAsBlob(b,{}).then(function(b){return b.status<200||b.status>=300?c.handleHttpError(b.status):a.resolve(b.blob)})}var f=function(a,b){var c=a.indexOf(\"?\")===-1?\"?\":\"&\";return/[?&]apiKey=/.test(a)||!b?a:a+c+\"apiKey=\"+encodeURIComponent(b)},g=function(b,e){return d.requestUrlAsBlob(f(b,e),{\"Content-Type\":\"application/json;charset=UTF-8\",\"tiny-api-key\":e}).then(function(b){return b.status<200||b.status>=300?c.handleServiceErrorResponse(b.status,b.blob):a.resolve(b.blob)})},h=function(a,b){return b?g(a,b):e(a)};return{getUrl:h}}),g(\"j\",[\"g\"],function(a){return a(\"tinymce.dom.DOMUtils\")}),g(\"k\",[\"g\"],function(a){return a(\"tinymce.ui.Container\")}),g(\"l\",[\"g\"],function(a){return a(\"tinymce.ui.Factory\")}),g(\"m\",[\"g\"],function(a){return a(\"tinymce.ui.Form\")}),g(\"x\",[\"g\"],function(a){return a(\"tinymce.geom.Rect\")}),g(\"y\",[\"g\"],function(a){return a(\"tinymce.ui.Control\")}),g(\"z\",[\"g\"],function(a){return a(\"tinymce.ui.DragHelper\")}),g(\"15\",[\"g\"],function(a){return a(\"tinymce.dom.DomQuery\")}),g(\"16\",[\"g\"],function(a){return a(\"tinymce.util.Observable\")}),g(\"17\",[\"g\"],function(a){return a(\"tinymce.util.VK\")}),g(\"10\",[\"15\",\"z\",\"x\",\"7\",\"16\",\"17\"],function(a,b,c,d,e,f){var g=0;return function(h,i,j,k,l){function m(a,b){return{x:b.x+a.x,y:b.y+a.y,w:b.w,h:b.h}}function n(a,b){return{x:b.x-a.x,y:b.y-a.y,w:b.w,h:b.h}}function o(){return n(j,h)}function p(a,b,d,e){var f,g,i,k,l;f=b.x,g=b.y,i=b.w,k=b.h,f+=d*a.deltaX,g+=e*a.deltaY,i+=d*a.deltaW,k+=e*a.deltaH,i<20&&(i=20),k<20&&(k=20),l=h=c.clamp({x:f,y:g,w:i,h:k},j,\"move\"==a.name),l=n(j,l),y.fire(\"updateRect\",{rect:l}),v(l)}function q(){function c(a){var c;return new b(D,{document:k.ownerDocument,handle:D+\"-\"+a.name,start:function(){c=h},drag:function(b){p(a,c,b.deltaX,b.deltaY)}})}a('<div id=\"'+D+'\" class=\"'+C+'croprect-container\" role=\"grid\" aria-dropeffect=\"execute\">').appendTo(k),d.each(B,function(b){a(\"#\"+D,k).append('<div id=\"'+D+\"-\"+b+'\"class=\"'+C+'croprect-block\" style=\"display: none\" data-mce-bogus=\"all\">')}),d.each(z,function(b){a(\"#\"+D,k).append('<div id=\"'+D+\"-\"+b.name+'\" class=\"'+C+\"croprect-handle \"+C+\"croprect-handle-\"+b.name+'\"style=\"display: none\" data-mce-bogus=\"all\" role=\"gridcell\" tabindex=\"-1\" aria-label=\"'+b.label+'\" aria-grabbed=\"false\">')}),A=d.map(z,c),s(h),a(k).on(\"focusin focusout\",function(b){a(b.target).attr(\"aria-grabbed\",\"focus\"===b.type)}),a(k).on(\"keydown\",function(a){function b(a,b,d,e,f){a.stopPropagation(),a.preventDefault(),p(c,d,e,f)}var c;switch(d.each(z,function(b){if(a.target.id==D+\"-\"+b.name)return c=b,!1}),a.keyCode){case f.LEFT:b(a,c,h,-10,0);break;case f.RIGHT:b(a,c,h,10,0);break;case f.UP:b(a,c,h,0,-10);break;case f.DOWN:b(a,c,h,0,10);break;case f.ENTER:case f.SPACEBAR:a.preventDefault(),l()}})}function r(b){var c;c=d.map(z,function(a){return\"#\"+D+\"-\"+a.name}).concat(d.map(B,function(a){return\"#\"+D+\"-\"+a})).join(\",\"),b?a(c,k).show():a(c,k).hide()}function s(b){function c(b,c){c.h<0&&(c.h=0),c.w<0&&(c.w=0),a(\"#\"+D+\"-\"+b,k).css({left:c.x,top:c.y,width:c.w,height:c.h})}d.each(z,function(c){a(\"#\"+D+\"-\"+c.name,k).css({left:b.w*c.xMul+b.x,top:b.h*c.yMul+b.y})}),c(\"top\",{x:i.x,y:i.y,w:i.w,h:b.y-i.y}),c(\"right\",{x:b.x+b.w,y:b.y,w:i.w-b.x-b.w+i.x,h:b.h}),c(\"bottom\",{x:i.x,y:b.y+b.h,w:i.w,h:i.h-b.y-b.h+i.y}),c(\"left\",{x:i.x,y:b.y,w:b.x-i.x,h:b.h}),c(\"move\",b)}function t(a){h=a,s(h)}function u(a){i=a,s(h)}function v(a){t(m(j,a))}function w(a){j=a,s(h)}function x(){d.each(A,function(a){a.destroy()}),A=[]}var y,z,A,B,C=\"mce-\",D=C+\"crid-\"+g++;return z=[{name:\"move\",xMul:0,yMul:0,deltaX:1,deltaY:1,deltaW:0,deltaH:0,label:\"Crop Mask\"},{name:\"nw\",xMul:0,yMul:0,deltaX:1,deltaY:1,deltaW:-1,deltaH:-1,label:\"Top Left Crop Handle\"},{name:\"ne\",xMul:1,yMul:0,deltaX:0,deltaY:1,deltaW:1,deltaH:-1,label:\"Top Right Crop Handle\"},{name:\"sw\",xMul:0,yMul:1,deltaX:1,deltaY:0,deltaW:-1,deltaH:1,label:\"Bottom Left Crop Handle\"},{name:\"se\",xMul:1,yMul:1,deltaX:0,deltaY:0,deltaW:1,deltaH:1,label:\"Bottom Right Crop Handle\"}],B=[\"top\",\"right\",\"bottom\",\"left\"],q(k),y=d.extend({toggleVisibility:r,setClampRect:w,setRect:t,getInnerRect:o,setInnerRect:v,setViewPortRect:u,destroy:x},e)}}),g(\"n\",[\"x\",\"y\",\"z\",\"6\",\"7\",\"10\"],function(a,b,c,d,e,f){function g(a){return new d(function(b){function c(){a.removeEventListener(\"load\",c),b(a)}a.complete?b(a):a.addEventListener(\"load\",c)})}return b.extend({Defaults:{classes:\"imagepanel\"},selection:function(a){return arguments.length?(this.state.set(\"rect\",a),this):this.state.get(\"rect\")},imageSize:function(){var a=this.state.get(\"viewRect\");return{w:a.w,h:a.h}},toggleCropRect:function(a){this.state.set(\"cropEnabled\",a)},imageSrc:function(b){var c=this,d=new Image;d.src=b,g(d).then(function(){var b,e,f=c.state.get(\"viewRect\");if(e=c.$el.find(\"img\"),e[0])e.replaceWith(d);else{var g=document.createElement(\"div\");g.className=\"mce-imagepanel-bg\",c.getEl().appendChild(g),c.getEl().appendChild(d)}b={x:0,y:0,w:d.naturalWidth,h:d.naturalHeight},c.state.set(\"viewRect\",b),c.state.set(\"rect\",a.inflate(b,-20,-20)),f&&f.w==b.w&&f.h==b.h||c.zoomFit(),c.repaintImage(),c.fire(\"load\")})},zoom:function(a){return arguments.length?(this.state.set(\"zoom\",a),this):this.state.get(\"zoom\")},postRender:function(){return this.imageSrc(this.settings.imageSrc),this._super()},zoomFit:function(){var a,b,c,d,e,f,g,h=this;g=10,a=h.$el.find(\"img\"),b=h.getEl().clientWidth,c=h.getEl().clientHeight,d=a[0].naturalWidth,e=a[0].naturalHeight,f=Math.min((b-g)/d,(c-g)/e),f>=1&&(f=1),h.zoom(f)},repaintImage:function(){var a,b,c,d,e,f,g,h,i,j,k;k=this.getEl(),i=this.zoom(),j=this.state.get(\"rect\"),g=this.$el.find(\"img\"),h=this.$el.find(\".mce-imagepanel-bg\"),e=k.offsetWidth,f=k.offsetHeight,c=g[0].naturalWidth*i,d=g[0].naturalHeight*i,a=Math.max(0,e/2-c/2),b=Math.max(0,f/2-d/2),g.css({left:a,top:b,width:c,height:d}),h.css({left:a,top:b,width:c,height:d}),this.cropRect&&(this.cropRect.setRect({x:j.x*i+a,y:j.y*i+b,w:j.w*i,h:j.h*i}),this.cropRect.setClampRect({x:a,y:b,w:c,h:d}),this.cropRect.setViewPortRect({x:0,y:0,w:e,h:f}))},bindStates:function(){function a(a){b.cropRect=new f(a,b.state.get(\"viewRect\"),b.state.get(\"viewRect\"),b.getEl(),function(){b.fire(\"crop\")}),b.cropRect.on(\"updateRect\",function(a){var c=a.rect,d=b.zoom();c={x:Math.round(c.x/d),y:Math.round(c.y/d),w:Math.round(c.w/d),h:Math.round(c.h/d)},b.state.set(\"rect\",c)}),b.on(\"remove\",b.cropRect.destroy)}var b=this;b.state.on(\"change:cropEnabled\",function(a){b.cropRect.toggleVisibility(a.value),b.repaintImage()}),b.state.on(\"change:zoom\",function(){b.repaintImage()}),b.state.on(\"change:rect\",function(c){var d=c.value;b.cropRect||a(d),b.cropRect.setRect(d)})}})}),g(\"o\",[],function(){return function(){function a(a){var b;return b=f.splice(++g),f.push(a),{state:a,removed:b}}function b(){if(d())return f[--g]}function c(){if(e())return f[++g]}function d(){return g>0}function e(){return g!=-1&&g<f.length-1}var f=[],g=-1;return{data:f,add:a,undo:b,redo:c,canUndo:d,canRedo:e}}}),g(\"b\",[\"1\",\"2\",\"j\",\"k\",\"l\",\"m\",\"6\",\"7\",\"n\",\"o\"],function(a,b,c,d,e,f,g,h,i,j){function k(a){return{blob:a,url:URL.createObjectURL(a)}}function l(a){a&&URL.revokeObjectURL(a.url)}function m(a){h.each(a,l)}function n(g,n,o){function p(a){var b,c,d,e;b=M.find(\"#w\")[0],c=M.find(\"#h\")[0],d=parseInt(b.value(),10),e=parseInt(c.value(),10),M.find(\"#constrain\")[0].checked()&&ha&&ia&&d&&e&&(\"w\"==a.control.settings.name?(e=Math.round(d*ja),c.value(e)):(d=Math.round(e*ka),b.value(d))),ha=d,ia=e}function q(a){return Math.round(100*a)+\"%\"}function r(){M.find(\"#undo\").disabled(!la.canUndo()),M.find(\"#redo\").disabled(!la.canRedo()),M.statusbar.find(\"#save\").disabled(!la.canUndo())}function s(){M.find(\"#undo\").disabled(!0),M.find(\"#redo\").disabled(!0)}function t(a){a&&T.imageSrc(a.url)}function u(a){return function(){var b=h.grep(ga,function(b){return b.settings.name!=a});h.each(b,function(a){a.hide()}),a.show(),a.focus()}}function v(a){P=k(a),t(P)}function w(a){g=k(a),t(g),m(la.add(g).removed),r()}function x(){var c=T.selection();a.blobToImageResult(g.blob).then(function(a){b.crop(a,c.x,c.y,c.w,c.h).then(ma).then(function(a){w(a),A()})})}function y(b){var c=[].slice.call(arguments,1);return function(){var d=P||g;a.blobToImageResult(d.blob).then(function(a){b.apply(this,[a].concat(c)).then(ma).then(v)})}}function z(b){var c=[].slice.call(arguments,1);return function(){a.blobToImageResult(g.blob).then(function(a){b.apply(this,[a].concat(c)).then(ma).then(w)})}}function A(){t(g),l(P),u(N)(),r()}function B(){P&&(w(P.blob),A())}function C(){var a=T.zoom();a<2&&(a+=.1),T.zoom(a)}function D(){var a=T.zoom();a>.1&&(a-=.1),T.zoom(a)}function E(){g=la.undo(),t(g),r()}function F(){g=la.redo(),t(g),r()}function G(){n(g.blob),M.close()}function H(a){return new f({layout:\"flex\",direction:\"row\",labelGap:5,border:\"0 0 1 0\",align:\"center\",pack:\"center\",padding:\"0 10 0 10\",spacing:5,flex:0,minHeight:60,defaults:{classes:\"imagetool\",type:\"button\"},items:a})}function I(b,c){return H([{text:\"Back\",onclick:A},{type:\"spacer\",flex:1},{text:\"Apply\",subtype:\"primary\",onclick:B}]).hide().on(\"show\",function(){s(),a.blobToImageResult(g.blob).then(function(a){return c(a)}).then(ma).then(function(a){var b=k(a);t(b),l(P),P=b})})}function J(b,c,d,e,f){function h(b){a.blobToImageResult(g.blob).then(function(a){return c(a,b)}).then(ma).then(function(a){var b=k(a);t(b),l(P),P=b})}return H([{text:\"Back\",onclick:A},{type:\"spacer\",flex:1},{type:\"slider\",flex:1,ondragend:function(a){h(a.value)},minValue:e,maxValue:f,value:d,previewFilter:q},{type:\"spacer\",flex:1},{text:\"Apply\",subtype:\"primary\",onclick:B}]).hide().on(\"show\",function(){this.find(\"slider\").value(d),s()})}function K(b,c){function d(){var b,d,e;b=M.find(\"#r\")[0].value(),d=M.find(\"#g\")[0].value(),e=M.find(\"#b\")[0].value(),a.blobToImageResult(g.blob).then(function(a){return c(a,b,d,e)}).then(ma).then(function(a){var b=k(a);t(b),l(P),P=b})}return H([{text:\"Back\",onclick:A},{type:\"spacer\",flex:1},{type:\"slider\",label:\"R\",name:\"r\",minValue:0,value:1,maxValue:2,ondragend:d,previewFilter:q},{type:\"slider\",label:\"G\",name:\"g\",minValue:0,value:1,maxValue:2,ondragend:d,previewFilter:q},{type:\"slider\",label:\"B\",name:\"b\",minValue:0,value:1,maxValue:2,ondragend:d,previewFilter:q},{type:\"spacer\",flex:1},{text:\"Apply\",subtype:\"primary\",onclick:B}]).hide().on(\"show\",function(){M.find(\"#r,#g,#b\").value(1),s()})}function L(a){a.control.value()===!0&&(ja=ia/ha,ka=ha/ia)}var M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,_,aa,ba,ca,da,ea,fa,ga,ha,ia,ja,ka,la=new j,ma=function(a){return a.toBlob()};Q=H([{text:\"Back\",onclick:A},{type:\"spacer\",flex:1},{text:\"Apply\",subtype:\"primary\",onclick:x}]).hide().on(\"show hide\",function(a){T.toggleCropRect(\"show\"==a.type)}).on(\"show\",s),R=H([{text:\"Back\",onclick:A},{type:\"spacer\",flex:1},{type:\"textbox\",name:\"w\",label:\"Width\",size:4,onkeyup:p},{type:\"textbox\",name:\"h\",label:\"Height\",size:4,onkeyup:p},{type:\"checkbox\",name:\"constrain\",text:\"Constrain proportions\",checked:!0,onchange:L},{type:\"spacer\",flex:1},{text:\"Apply\",subtype:\"primary\",onclick:\"submit\"}]).hide().on(\"submit\",function(a){var c=parseInt(M.find(\"#w\").value(),10),d=parseInt(M.find(\"#h\").value(),10);\na.preventDefault(),z(b.resize,c,d)(),A()}).on(\"show\",s),S=H([{text:\"Back\",onclick:A},{type:\"spacer\",flex:1},{icon:\"fliph\",tooltip:\"Flip horizontally\",onclick:y(b.flip,\"h\")},{icon:\"flipv\",tooltip:\"Flip vertically\",onclick:y(b.flip,\"v\")},{icon:\"rotateleft\",tooltip:\"Rotate counterclockwise\",onclick:y(b.rotate,-90)},{icon:\"rotateright\",tooltip:\"Rotate clockwise\",onclick:y(b.rotate,90)},{type:\"spacer\",flex:1},{text:\"Apply\",subtype:\"primary\",onclick:B}]).hide().on(\"show\",s),W=I(\"Invert\",b.invert),ca=I(\"Sharpen\",b.sharpen),da=I(\"Emboss\",b.emboss),X=J(\"Brightness\",b.brightness,0,-1,1),Y=J(\"Hue\",b.hue,180,0,360),Z=J(\"Saturate\",b.saturate,0,-1,1),$=J(\"Contrast\",b.contrast,0,-1,1),_=J(\"Grayscale\",b.grayscale,0,0,1),aa=J(\"Sepia\",b.sepia,0,0,1),ba=K(\"Colorize\",b.colorize),ea=J(\"Gamma\",b.gamma,0,-1,1),fa=J(\"Exposure\",b.exposure,1,0,2),O=H([{text:\"Back\",onclick:A},{type:\"spacer\",flex:1},{text:\"hue\",icon:\"hue\",onclick:u(Y)},{text:\"saturate\",icon:\"saturate\",onclick:u(Z)},{text:\"sepia\",icon:\"sepia\",onclick:u(aa)},{text:\"emboss\",icon:\"emboss\",onclick:u(da)},{text:\"exposure\",icon:\"exposure\",onclick:u(fa)},{type:\"spacer\",flex:1}]).hide(),N=H([{tooltip:\"Crop\",icon:\"crop\",onclick:u(Q)},{tooltip:\"Resize\",icon:\"resize2\",onclick:u(R)},{tooltip:\"Orientation\",icon:\"orientation\",onclick:u(S)},{tooltip:\"Brightness\",icon:\"sun\",onclick:u(X)},{tooltip:\"Sharpen\",icon:\"sharpen\",onclick:u(ca)},{tooltip:\"Contrast\",icon:\"contrast\",onclick:u($)},{tooltip:\"Color levels\",icon:\"drop\",onclick:u(ba)},{tooltip:\"Gamma\",icon:\"gamma\",onclick:u(ea)},{tooltip:\"Invert\",icon:\"invert\",onclick:u(W)}]),T=new i({flex:1,imageSrc:g.url}),U=new d({layout:\"flex\",direction:\"column\",border:\"0 1 0 0\",padding:5,spacing:5,items:[{type:\"button\",icon:\"undo\",tooltip:\"Undo\",name:\"undo\",onclick:E},{type:\"button\",icon:\"redo\",tooltip:\"Redo\",name:\"redo\",onclick:F},{type:\"button\",icon:\"zoomin\",tooltip:\"Zoom in\",onclick:C},{type:\"button\",icon:\"zoomout\",tooltip:\"Zoom out\",onclick:D}]}),V=new d({type:\"container\",layout:\"flex\",direction:\"row\",align:\"stretch\",flex:1,items:[U,T]}),ga=[N,Q,R,S,O,W,X,Y,Z,$,_,aa,ba,ca,da,ea,fa],M=e.create(\"window\",{layout:\"flex\",direction:\"column\",align:\"stretch\",minWidth:Math.min(c.DOM.getViewPort().w,800),minHeight:Math.min(c.DOM.getViewPort().h,650),title:\"Edit image\",items:ga.concat([V]),buttons:[{text:\"Save\",name:\"save\",subtype:\"primary\",onclick:G},{text:\"Cancel\",onclick:\"close\"}]}),M.renderTo(document.body).reflow(),M.on(\"close\",function(){o(),m(la.data),la=null,P=null}),la.add(g),r(),T.on(\"load\",function(){ha=T.imageSize().w,ia=T.imageSize().h,ja=ia/ha,ka=ha/ia,M.find(\"#w\").value(ha),M.find(\"#h\").value(ia)}),T.on(\"crop\",x)}function o(a){return new g(function(b,c){return a.toBlob().then(function(a){n(k(a),b,c)})})}return{edit:o}}),g(\"0\",[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\",\"b\"],function(a,b,c,d,e,f,g,h,i,j,k){var l=function(d){function l(a){d.notificationManager.open({text:a,type:\"error\"})}function m(){return d.selection.getNode()}function n(a){var b=a.match(/\\/([^\\/\\?]+)?\\.(?:jpeg|jpg|png|gif)(?:\\?|$)/i);return b?d.dom.encode(b[1]):null}function o(){return\"imagetools\"+H++}function p(a){var b=a.src;return 0===b.indexOf(\"data:\")||0===b.indexOf(\"blob:\")||new h(b).host===d.documentBaseURI.host}function q(a){return g.inArray(d.settings.imagetools_cors_hosts,new h(a.src).host)!==-1}function r(){return d.settings.api_key||d.settings.imagetools_api_key}function s(b){var c,e=b.src;return q(b)?j.getUrl(b.src,null):p(b)?a.imageToBlob(b):(e=d.settings.imagetools_proxy,e+=(e.indexOf(\"?\")===-1?\"?\":\"&\")+\"url=\"+encodeURIComponent(b.src),c=r(),j.getUrl(e,c))}function t(){var a;return a=d.editorUpload.blobCache.getByUri(m().src),a?f.resolve(a.blob()):s(m())}function u(){F=e.setEditorTimeout(d,function(){d.editorUpload.uploadImagesAuto()},d.settings.images_upload_timeout||3e4)}function v(){clearTimeout(F)}function w(a,b){return a.toBlob().then(function(c){var e,f,g,h,i;return g=d.editorUpload.blobCache,i=m(),e=i.src,d.settings.images_reuse_filename&&(h=g.getByUri(e),h?(e=h.uri(),f=h.name()):f=n(e)),h=g.create({id:o(),blob:c,base64:a.toBase64(),uri:e,name:f}),g.add(h),d.undoManager.transact(function(){function a(){d.$(i).off(\"load\",a),d.nodeChanged(),b?d.editorUpload.uploadImagesAuto():(v(),u())}d.$(i).on(\"load\",a),d.$(i).attr({src:h.blobUri()}).removeAttr(\"data-mce-src\")}),h})}function x(b){return function(){return d._scanForImages().then(t).then(a.blobToImageResult).then(b).then(w,l)}}function y(a){return function(){return x(function(c){var d=i.getImageSize(m());return d&&i.setImageSize(m(),{w:d.h,h:d.w}),b.rotate(c,a)})()}}function z(a){return function(){return x(function(c){return b.flip(c,a)})()}}function A(){var b=m(),c=i.getNaturalImageSize(b),d=function(d){return new f(function(e){a.blobToImage(d).then(function(a){var f=i.getNaturalImageSize(a);c.w==f.w&&c.h==f.h||i.getImageSize(b)&&i.setImageSize(b,f),URL.revokeObjectURL(a.src),e(d)})})},e=function(b){return k.edit(b).then(d).then(a.blobToImageResult).then(function(a){return w(a,!0)},function(){})};t().then(a.blobToImageResult).then(e,l)}function B(){d.addButton(\"rotateleft\",{title:\"Rotate counterclockwise\",cmd:\"mceImageRotateLeft\"}),d.addButton(\"rotateright\",{title:\"Rotate clockwise\",cmd:\"mceImageRotateRight\"}),d.addButton(\"flipv\",{title:\"Flip vertically\",cmd:\"mceImageFlipVertical\"}),d.addButton(\"fliph\",{title:\"Flip horizontally\",cmd:\"mceImageFlipHorizontal\"}),d.addButton(\"editimage\",{title:\"Edit image\",cmd:\"mceEditImage\"}),d.addButton(\"imageoptions\",{title:\"Image options\",icon:\"options\",cmd:\"mceImage\"})}function C(){d.on(\"NodeChange\",function(a){G&&G.src!=a.element.src&&(v(),d.editorUpload.uploadImagesAuto(),G=void 0),D(a.element)&&(G=a.element)})}function D(a){var b=d.dom.is(a,\"img:not([data-mce-object],[data-mce-placeholder])\");return b&&(p(a)||q(a)||d.settings.imagetools_proxy)}function E(){var a=d.settings.imagetools_toolbar;a||(a=\"rotateleft rotateright | flipv fliph | crop editimage imageoptions\"),d.addContextToolbar(D,a)}var F,G,H=0;c.fileApi&&(g.each({mceImageRotateLeft:y(-90),mceImageRotateRight:y(90),mceImageFlipVertical:z(\"v\"),mceImageFlipHorizontal:z(\"h\"),mceEditImage:A},function(a,b){d.addCommand(b,a)}),B(),E(),C())};return d.add(\"imagetools\",l),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"6\",tinymce.util.Tools.resolve),g(\"1\",[\"6\"],function(a){return a(\"tinymce.EditorManager\")}),g(\"2\",[\"6\"],function(a){return a(\"tinymce.dom.DOMUtils\")}),g(\"3\",[\"6\"],function(a){return a(\"tinymce.Env\")}),g(\"4\",[\"6\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"5\",[\"6\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"0\",[\"1\",\"2\",\"3\",\"4\",\"5\"],function(a,b,c,d,e){return d.add(\"importcss\",function(d){function f(a){var b=c.cacheSuffix;return\"string\"==typeof a&&(a=a.replace(\"?\"+b,\"\").replace(\"&\"+b,\"\")),a}function g(b){var c=d.settings,e=c.skin!==!1&&(c.skin||\"lightgray\");if(e){var f=c.skin_url;return f=f?d.documentBaseURI.toAbsolute(f):a.baseURL+\"/skins/\"+e,b===f+\"/content\"+(d.inline?\".inline\":\"\")+\".min.css\"}return!1}function h(a){return\"string\"==typeof a?function(b){return b.indexOf(a)!==-1}:a instanceof RegExp?function(b){return a.test(b)}:a}function i(a,b){function c(a,d){var i,j=a.href;if(j=f(j),j&&b(j,d)&&!g(j)){r(a.imports,function(a){c(a,!0)});try{i=a.cssRules||a.rules}catch(a){}r(i,function(a){a.styleSheet?c(a.styleSheet,!0):a.selectorText&&r(a.selectorText.split(\",\"),function(a){h.push(e.trim(a))})})}}var h=[],i={};r(d.contentCSS,function(a){i[a]=!0}),b||(b=function(a,b){return b||i[a]});try{r(a.styleSheets,function(a){c(a)})}catch(a){}return h}function j(a){var b,c=/^(?:([a-z0-9\\-_]+))?(\\.[a-z0-9_\\-\\.]+)$/i.exec(a);if(c){var f=c[1],g=c[2].substr(1).split(\".\").join(\" \"),h=e.makeMap(\"a,img\");return c[1]?(b={title:a},d.schema.getTextBlockElements()[f]?b.block=f:d.schema.getBlockElements()[f]||h[f.toLowerCase()]?b.selector=f:b.inline=f):c[2]&&(b={inline:\"span\",title:a.substr(1),classes:g}),d.settings.importcss_merge_classes!==!1?b.classes=g:b.attributes={\"class\":g},b}}function k(a,b){return e.grep(a,function(a){return!a.filter||a.filter(b)})}function l(a){return e.map(a,function(a){return e.extend({},a,{original:a,selectors:{},filter:h(a.filter),item:{text:a.title,menu:[]}})})}function m(a,b){return null===b||a.settings.importcss_exclusive!==!1}function n(a,b,c){return!(m(d,b)?a in c:a in b.selectors)}function o(a,b,c){m(d,b)?c[a]=!0:b.selectors[a]=!0}function p(a,b,c){var e,f=d.settings;return e=c&&c.selector_converter?c.selector_converter:f.importcss_selector_converter?f.importcss_selector_converter:j,e.call(a,b,c)}var q=this,r=e.each;d.on(\"renderFormatsMenu\",function(a){var c=d.settings,f={},g=h(c.importcss_selector_filter),j=a.control,m=l(c.importcss_groups),s=function(a,c){if(n(a,c,f)){o(a,c,f);var g=p(q,a,c);if(g){var h=g.name||b.DOM.uniqueId();return d.formatter.register(h,g),e.extend({},j.settings.itemDefaults,{text:g.title,format:h})}}return null};d.settings.importcss_append||j.items().remove(),r(i(a.doc||d.getDoc(),h(c.importcss_file_filter)),function(a){if(a.indexOf(\".mce-\")===-1&&(!g||g(a))){var b=k(m,a);if(b.length>0)e.each(b,function(b){var c=s(a,b);c&&b.item.menu.push(c)});else{var c=s(a,null);c&&j.add(c)}}}),r(m,function(a){a.item.menu.length>0&&j.add(a.item)}),a.control.renderNew()}),q.convertSelectorToFormat=j}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"3\",tinymce.util.Tools.resolve),g(\"1\",[\"3\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"2\",[\"3\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"0\",[\"1\",\"2\"],function(a,b){return a.add(\"insertdatetime\",function(a){function c(b,c){function d(a,b){if(a=\"\"+a,a.length<b)for(var c=0;c<b-a.length;c++)a=\"0\"+a;return a}return c=c||new Date,b=b.replace(\"%D\",\"%m/%d/%Y\"),b=b.replace(\"%r\",\"%I:%M:%S %p\"),b=b.replace(\"%Y\",\"\"+c.getFullYear()),b=b.replace(\"%y\",\"\"+c.getYear()),b=b.replace(\"%m\",d(c.getMonth()+1,2)),b=b.replace(\"%d\",d(c.getDate(),2)),b=b.replace(\"%H\",\"\"+d(c.getHours(),2)),b=b.replace(\"%M\",\"\"+d(c.getMinutes(),2)),b=b.replace(\"%S\",\"\"+d(c.getSeconds(),2)),b=b.replace(\"%I\",\"\"+((c.getHours()+11)%12+1)),b=b.replace(\"%p\",\"\"+(c.getHours()<12?\"AM\":\"PM\")),b=b.replace(\"%B\",\"\"+a.translate(j[c.getMonth()])),b=b.replace(\"%b\",\"\"+a.translate(i[c.getMonth()])),b=b.replace(\"%A\",\"\"+a.translate(h[c.getDay()])),b=b.replace(\"%a\",\"\"+a.translate(g[c.getDay()])),b=b.replace(\"%%\",\"%\")}function d(b){var d=c(b);if(a.settings.insertdatetime_element){var e;e=c(/%[HMSIp]/.test(b)?\"%Y-%m-%dT%H:%M\":\"%Y-%m-%d\"),d='<time datetime=\"'+e+'\">'+d+\"</time>\";var f=a.dom.getParent(a.selection.getStart(),\"time\");if(f)return void a.dom.setOuterHTML(f,d)}a.insertContent(d)}var e,f,g=\"Sun Mon Tue Wed Thu Fri Sat Sun\".split(\" \"),h=\"Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday\".split(\" \"),i=\"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec\".split(\" \"),j=\"January February March April May June July August September October November December\".split(\" \"),k=[];a.addCommand(\"mceInsertDate\",function(){d(a.getParam(\"insertdatetime_dateformat\",a.translate(\"%Y-%m-%d\")))}),a.addCommand(\"mceInsertTime\",function(){d(a.getParam(\"insertdatetime_timeformat\",a.translate(\"%H:%M:%S\")))}),a.addButton(\"insertdatetime\",{type:\"splitbutton\",title:\"Insert date/time\",onclick:function(){d(e||f)},menu:k}),b.each(a.settings.insertdatetime_formats||[\"%H:%M:%S\",\"%Y-%m-%d\",\"%I:%M:%S %p\",\"%D\"],function(a){f||(f=a),k.push({text:c(a),onclick:function(){e=a,d(a)}})}),a.addMenuItem(\"insertdatetime\",{icon:\"date\",text:\"Date/time\",menu:k,context:\"insert\"})}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"3\",tinymce.util.Tools.resolve),g(\"1\",[\"3\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"2\",[\"3\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"0\",[\"1\",\"2\"],function(a,b){return a.add(\"legacyoutput\",function(a,c,d){a.settings.inline_styles=!1,a.on(\"init\",function(){var c=\"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img\",d=b.explode(a.settings.font_size_style_values),e=a.schema;a.formatter.register({alignleft:{selector:c,attributes:{align:\"left\"}},aligncenter:{selector:c,attributes:{align:\"center\"}},alignright:{selector:c,attributes:{align:\"right\"}},alignjustify:{selector:c,attributes:{align:\"justify\"}},bold:[{inline:\"b\",remove:\"all\"},{inline:\"strong\",remove:\"all\"},{inline:\"span\",styles:{fontWeight:\"bold\"}}],italic:[{inline:\"i\",remove:\"all\"},{inline:\"em\",remove:\"all\"},{inline:\"span\",styles:{fontStyle:\"italic\"}}],underline:[{inline:\"u\",remove:\"all\"},{inline:\"span\",styles:{textDecoration:\"underline\"},exact:!0}],strikethrough:[{inline:\"strike\",remove:\"all\"},{inline:\"span\",styles:{textDecoration:\"line-through\"},exact:!0}],fontname:{inline:\"font\",attributes:{face:\"%value\"}},fontsize:{inline:\"font\",attributes:{size:function(a){return b.inArray(d,a.value)+1}}},forecolor:{inline:\"font\",attributes:{color:\"%value\"}},hilitecolor:{inline:\"font\",styles:{backgroundColor:\"%value\"}}}),b.each(\"b,i,u,strike\".split(\",\"),function(a){e.addValidElements(a+\"[*]\")}),e.getElementRule(\"font\")||e.addValidElements(\"font[face|size|color|style]\"),b.each(c.split(\",\"),function(a){var b=e.getElementRule(a);b&&(b.attributes.align||(b.attributes.align={},b.attributesOrder.push(\"align\")))})}),a.addButton(\"fontsizeselect\",function(){var b=[],c=\"8pt=1 10pt=2 12pt=3 14pt=4 18pt=5 24pt=6 36pt=7\",d=a.settings.fontsizeFormats||c;return a.$.each(d.split(\" \"),function(a,c){var d=c,e=c,f=c.split(\"=\");f.length>1&&(d=f[0],e=f[1]),b.push({text:d,value:e})}),{type:\"listbox\",text:\"Font Sizes\",tooltip:\"Font Sizes\",values:b,fixedWidth:!0,onPostRender:function(){var b=this;a.on(\"NodeChange\",function(){var c;c=a.dom.getParent(a.selection.getNode(),\"font\"),c?b.value(c.size):b.value(\"\")})},onclick:function(b){b.control.settings.value&&a.execCommand(\"FontSize\",!1,b.control.settings.value)}}}),a.addButton(\"fontselect\",function(){function b(a){a=a.replace(/;$/,\"\").split(\";\");for(var b=a.length;b--;)a[b]=a[b].split(\"=\");return a}var c=\"Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats\",e=[],f=b(a.settings.font_formats||c);return d.each(f,function(a,b){e.push({text:{raw:b[0]},value:b[1],textStyle:b[1].indexOf(\"dings\")==-1?\"font-family:\"+b[1]:\"\"})}),{type:\"listbox\",text:\"Font Family\",tooltip:\"Font Family\",values:e,fixedWidth:!0,onPostRender:function(){var b=this;a.on(\"NodeChange\",function(){var c;c=a.dom.getParent(a.selection.getNode(),\"font\"),c?b.value(c.face):b.value(\"\")})},onselect:function(b){b.control.settings.value&&a.execCommand(\"FontName\",!1,b.control.settings.value)}}})}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"4\",tinymce.util.Tools.resolve),g(\"1\",[\"4\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"5\",[\"4\"],function(a){return a(\"tinymce.util.VK\")}),g(\"a\",[\"4\"],function(a){return a(\"tinymce.util.Delay\")}),g(\"b\",[\"4\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"c\",[\"4\"],function(a){return a(\"tinymce.util.XHR\")}),g(\"9\",[],function(){var a=function(a){return\"boolean\"==typeof a.link_assume_external_targets&&a.link_assume_external_targets},b=function(a){return\"boolean\"==typeof a.link_context_toolbar&&a.link_context_toolbar},c=function(a){return a.link_list},d=function(a){return\"string\"==typeof a.default_link_target},e=function(a){return a.default_link_target},f=function(a){return a.target_list},g=function(a,b){a.settings.target_list=b},h=function(a){return f(a)!==!1},i=function(a){return a.rel_list},j=function(a){return void 0!==i(a)},k=function(a){return a.link_class_list},l=function(a){return void 0!==k(a)},m=function(a){return a.link_title!==!1},n=function(a){return\"boolean\"==typeof a.allow_unsafe_link_target&&a.allow_unsafe_link_target};return{assumeExternalTargets:a,hasContextToolbar:b,getLinkList:c,hasDefaultLinkTarget:d,getDefaultLinkTarget:e,getTargetList:f,setTargetList:g,shouldShowTargetList:h,getRelList:i,hasRelList:j,getLinkClassList:k,hasLinkClassList:l,shouldShowLinkTitle:m,allowUnsafeLinkTarget:n}}),h(\"d\",RegExp),g(\"8\",[\"b\",\"9\",\"d\"],function(a,b,c){var d=function(b,c){var d=[\"noopener\"],e=b?b.split(/\\s+/):[],f=function(b){return a.trim(b.sort().join(\" \"))},g=function(a){return a=h(a),a.length?a.concat(d):d},h=function(b){return b.filter(function(b){return a.inArray(d,b)===-1})};return e=c?g(e):h(e),e.length?f(e):null},e=function(a){return a.replace(/\\uFEFF/g,\"\")},f=function(a,b){return b=b||a.selection.getStart(),k(b)?a.dom.select(\"a[href]\",b)[0]:a.dom.getParent(b,\"a[href]\")},g=function(a,b){var c=b?b.innerText||b.textContent:a.getContent({format:\"text\"});return e(c)},h=function(a){return a&&\"A\"===a.nodeName&&a.href},i=function(b){return a.grep(b,h).length>0},j=function(a){return!(/</.test(a)&&(!/^<a [^>]+>[^<]+<\\/a>$/.test(a)||a.indexOf(\"href=\")==-1))},k=function(a){return a&&\"FIGURE\"===a.nodeName&&/\\bimage\\b/i.test(a.className)},l=function(a,c){return function(e){a.undoManager.transact(function(){var g=a.selection.getNode(),h=f(a,g),i={href:e.href,target:e.target?e.target:null,rel:e.rel?e.rel:null,\"class\":e[\"class\"]?e[\"class\"]:null,title:e.title?e.title:null};b.hasRelList(a.settings)||b.allowUnsafeLinkTarget(a.settings)!==!1||(i.rel=d(i.rel,\"_blank\"==i.target)),e.href===c.href&&(c.attach(),c={}),h?(a.focus(),e.hasOwnProperty(\"text\")&&(\"innerText\"in h?h.innerText=e.text:h.textContent=e.text),a.dom.setAttribs(h,i),a.selection.select(h),a.undoManager.add()):k(g)?o(a,g,i):e.hasOwnProperty(\"text\")?a.insertContent(a.dom.createHTML(\"a\",i,a.dom.encode(e.text))):a.execCommand(\"mceInsertLink\",!1,i)})}},m=function(a){return function(){a.undoManager.transact(function(){var b=a.selection.getNode();k(b)?n(a,b):a.execCommand(\"unlink\")})}},n=function(a,b){var c,d;d=a.dom.select(\"img\",b)[0],d&&(c=a.dom.getParents(d,\"a[href]\",b)[0],c&&(c.parentNode.insertBefore(d,c),a.dom.remove(c)))},o=function(a,b,c){var d,e;e=a.dom.select(\"img\",b)[0],e&&(d=a.dom.create(\"a\",c),e.parentNode.insertBefore(d,e),d.appendChild(e))};return{link:l,unlink:m,isLink:h,hasLinks:i,isOnlyTextSelected:j,getAnchorElement:f,getAnchorText:g,toggleTargetRules:d}}),g(\"6\",[\"a\",\"b\",\"c\",\"8\",\"9\"],function(a,b,c,d,e){var f={},g=function(a,b){var d=e.getLinkList(a.settings);\"string\"==typeof d?c.send({url:d,success:function(c){b(a,JSON.parse(c))}}):\"function\"==typeof d?d(function(c){b(a,c)}):b(a,d)},h=function(a,c,d){var e=function(a,d){return d=d||[],b.each(a,function(a){var b={text:a.text||a.title};a.menu?b.menu=e(a.menu):(b.value=a.value,c&&c(b)),d.push(b)}),d};return e(a,d||[])},i=function(b,c,d){var e=b.selection.getRng();a.setEditorTimeout(b,function(){b.windowManager.confirm(c,function(a){b.selection.setRng(e),d(a)})})},j=function(a,c){var g,j,k,l,m,n,o,p,q,r,s,t={},u=a.selection,v=a.dom,w=function(a){var b=k.find(\"#text\");(!b.value()||a.lastControl&&b.value()==a.lastControl.text())&&b.value(a.control.text()),k.find(\"#href\").value(a.control.value())},x=function(c){var d=[];if(b.each(a.dom.select(\"a:not([href])\"),function(a){var b=a.name||a.id;b&&d.push({text:b,value:\"#\"+b,selected:c.indexOf(\"#\"+b)!=-1})}),d.length)return d.unshift({text:\"None\",value:\"\"}),{name:\"anchor\",type:\"listbox\",label:\"Anchors\",values:d,onselect:w}},y=function(){j||!l||t.text||this.parent().parent().find(\"#text\")[0].value(this.value())},z=function(c){var d=c.meta||{};n&&n.value(a.convertURL(this.value(),\"href\")),b.each(c.meta,function(a,b){var c=k.find(\"#\"+b);\"text\"===b?0===j.length&&(c.value(a),t.text=a):c.value(a)}),d.attach&&(f={href:this.value(),attach:d.attach}),d.text||y.call(this)},A=function(a){a.meta=k.toJSON()};l=d.isOnlyTextSelected(u.getContent()),g=d.getAnchorElement(a),t.text=j=d.getAnchorText(a.selection,g),t.href=g?v.getAttrib(g,\"href\"):\"\",g?t.target=v.getAttrib(g,\"target\"):e.hasDefaultLinkTarget(a.settings)&&(t.target=e.getDefaultLinkTarget(a.settings)),(s=v.getAttrib(g,\"rel\"))&&(t.rel=s),(s=v.getAttrib(g,\"class\"))&&(t[\"class\"]=s),(s=v.getAttrib(g,\"title\"))&&(t.title=s),l&&(m={name:\"text\",type:\"textbox\",size:40,label:\"Text to display\",onchange:function(){t.text=this.value()}}),c&&(n={type:\"listbox\",label:\"Link list\",values:h(c,function(b){b.value=a.convertURL(b.value||b.url,\"href\")},[{text:\"None\",value:\"\"}]),onselect:w,value:a.convertURL(t.href,\"href\"),onPostRender:function(){n=this}}),e.shouldShowTargetList(a.settings)&&(void 0===e.getTargetList(a.settings)&&e.setTargetList(a,[{text:\"None\",value:\"\"},{text:\"New window\",value:\"_blank\"}]),p={name:\"target\",type:\"listbox\",label:\"Target\",values:h(e.getTargetList(a.settings))}),e.hasRelList(a.settings)&&(o={name:\"rel\",type:\"listbox\",label:\"Rel\",values:h(e.getRelList(a.settings),function(b){e.allowUnsafeLinkTarget(a.settings)===!1&&(b.value=d.toggleTargetRules(b.value,\"_blank\"===t.target))})}),e.hasLinkClassList(a.settings)&&(q={name:\"class\",type:\"listbox\",label:\"Class\",values:h(e.getLinkClassList(a.settings),function(b){b.value&&(b.textStyle=function(){return a.formatter.getCssText({inline:\"a\",classes:[b.value]})})})}),e.shouldShowLinkTitle(a.settings)&&(r={name:\"title\",type:\"textbox\",label:\"Title\",value:t.title}),k=a.windowManager.open({title:\"Insert link\",data:t,body:[{name:\"href\",type:\"filepicker\",filetype:\"file\",size:40,autofocus:!0,label:\"Url\",onchange:z,onkeyup:y,onbeforecall:A},m,r,x(t.href),n,o,p,q],onSubmit:function(c){var g=e.assumeExternalTargets(a.settings),h=d.link(a,f),k=d.unlink(a),m=b.extend({},t,c.data),n=m.href;return n?(l&&m.text!==j||delete m.text,n.indexOf(\"@\")>0&&n.indexOf(\"//\")==-1&&n.indexOf(\"mailto:\")==-1?void i(a,\"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?\",function(a){a&&(m.href=\"mailto:\"+n),h(m)}):g===!0&&!/^\\w+:/i.test(n)||g===!1&&/^\\s*www[\\.|\\d\\.]/i.test(n)?void i(a,\"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?\",function(a){a&&(m.href=\"http://\"+n),h(m)}):void h(m)):void k()}})},k=function(a){g(a,j)};return{open:k}}),g(\"e\",[\"4\"],function(a){return a(\"tinymce.dom.DOMUtils\")}),g(\"f\",[\"4\"],function(a){return a(\"tinymce.Env\")}),g(\"7\",[\"e\",\"f\"],function(a,b){var c=function(a,b){document.body.appendChild(a),a.dispatchEvent(b),document.body.removeChild(a)},d=function(d){if(!b.ie||b.ie>10){var e=document.createElement(\"a\");e.target=\"_blank\",e.href=d,e.rel=\"noreferrer noopener\";var f=document.createEvent(\"MouseEvents\");f.initMouseEvent(\"click\",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),c(e,f)}else{var g=window.open(\"\",\"_blank\");if(g){g.opener=null;var h=g.document;h.open(),h.write('<meta http-equiv=\"refresh\" content=\"0; url='+a.DOM.encode(d)+'\">'),h.close()}}};return{open:d}}),g(\"2\",[\"5\",\"6\",\"7\",\"8\",\"9\"],function(a,b,c,d,e){var f=function(a,b){return a.dom.getParent(b,\"a[href]\")},g=function(a){return f(a,a.selection.getStart())},h=function(a){var b=a.getAttribute(\"data-mce-href\");return b?b:a.getAttribute(\"href\")},i=function(a){var b=a.plugins.contextmenu;return!!b&&b.isContextMenuVisible()},j=function(a){return a.altKey===!0&&a.shiftKey===!1&&a.ctrlKey===!1&&a.metaKey===!1},k=function(a,b){if(b){var d=h(b);if(/^#/.test(d)){var e=a.$(d);e.length&&a.selection.scrollIntoView(e[0],!0)}else c.open(b.href)}},l=function(a){return function(){b.open(a)}},m=function(a){return function(){k(a,g(a))}},n=function(a){return function(b){var c,f,g;return!!(e.hasContextToolbar(a.settings)&&!i(a)&&d.isLink(b)&&(c=a.selection,f=c.getRng(),g=f.startContainer,3==g.nodeType&&c.isCollapsed()&&f.startOffset>0&&f.startOffset<g.data.length))}},o=function(b){b.on(\"click\",function(c){var d=f(b,c.target);d&&a.metaKeyPressed(c)&&(c.preventDefault(),k(b,d))}),b.on(\"keydown\",function(a){var c=g(b);c&&13===a.keyCode&&j(a)&&(a.preventDefault(),k(b,c))})},p=function(a){return function(){var b=this;a.on(\"nodechange\",function(c){b.active(!a.readonly&&!!d.getAnchorElement(a,c.element))})}},q=function(a){return function(){var b=this,c=function(a){d.hasLinks(a.parents)?b.show():b.hide()};d.hasLinks(a.dom.getParents(a.selection.getStart()))||b.hide(),a.on(\"nodechange\",c),b.on(\"remove\",function(){a.off(\"nodechange\",c)})}};return{openDialog:l,gotoSelectedLink:m,leftClickedOnAHref:n,setupGotoLinks:o,toggleActiveState:p,toggleViewLinkState:q}}),g(\"3\",[\"2\",\"8\"],function(a,b){var c=function(c){c.addButton(\"link\",{icon:\"link\",tooltip:\"Insert/edit link\",shortcut:\"Meta+K\",onclick:a.openDialog(c),onpostrender:a.toggleActiveState(c)}),c.addButton(\"unlink\",{icon:\"unlink\",tooltip:\"Remove link\",onclick:b.unlink(c),onpostrender:a.toggleActiveState(c)}),c.addContextToolbar&&c.addButton(\"openlink\",{icon:\"newtab\",tooltip:\"Open link\",onclick:a.gotoSelectedLink(c)})},d=function(b){b.addMenuItem(\"openlink\",{text:\"Open link\",icon:\"newtab\",onclick:a.gotoSelectedLink(b),onPostRender:a.toggleViewLinkState(b),prependToContext:!0}),b.addMenuItem(\"link\",{icon:\"link\",text:\"Link\",shortcut:\"Meta+K\",onclick:a.openDialog(b),stateSelector:\"a[href]\",context:\"insert\",prependToContext:!0})},e=function(b){b.addContextToolbar&&b.addContextToolbar(a.leftClickedOnAHref(b),\"openlink | link unlink\")};return{setupButtons:c,setupMenuItems:d,setupContextToolbars:e}}),g(\"0\",[\"1\",\"2\",\"3\"],function(a,b,c){return a.add(\"link\",function(a){c.setupButtons(a),c.setupMenuItems(a),c.setupContextToolbars(a),b.setupGotoLinks(a),a.addShortcut(\"Meta+K\",\"\",b.openDialog(a)),a.addCommand(\"mceLink\",b.openDialog(a))}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"9\",tinymce.util.Tools.resolve),g(\"1\",[\"9\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"2\",[\"9\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"3\",[\"9\"],function(a){return a(\"tinymce.util.VK\")}),g(\"a\",[\"9\"],function(a){return a(\"tinymce.dom.DOMUtils\")}),g(\"8\",[],function(){var a=function(a){return a&&3===a.nodeType},b=function(a){return a&&/^(OL|UL|DL)$/.test(a.nodeName)},c=function(a){return a&&/^(LI|DT|DD)$/.test(a.nodeName)},d=function(a){return a&&\"BR\"===a.nodeName},e=function(a){return a.parentNode.firstChild===a},f=function(a){return a.parentNode.lastChild===a},g=function(a,b){return b&&!!a.schema.getTextBlockElements()[b.nodeName]},h=function(a,b){return!!d(b)&&!(!a.isBlock(b.nextSibling)||d(b.previousSibling))},i=function(a,b,c){var d=a.isEmpty(b);return!(c&&a.select(\"span[data-mce-type=bookmark]\",b).length>0)&&d},j=function(a,b){return a.isChildOf(b,a.getRoot())};return{isTextNode:a,isListNode:b,isListItemNode:c,isBr:d,isFirstChild:e,isLastChild:f,isTextBlock:g,isBogusBr:h,isEmpty:i,isChildOfBody:j}}),g(\"h\",[\"9\"],function(a){return a(\"tinymce.dom.RangeUtils\")}),g(\"j\",[\"h\",\"8\"],function(a,b){var c=function(c,d){var e=a.getNode(c,d);if(b.isListItemNode(c)&&b.isTextNode(e)){var f=d>=c.childNodes.length?e.data.length:0;return{container:e,offset:f}}return{container:c,offset:d}},d=function(a){var b=a.cloneRange(),d=c(a.startContainer,a.startOffset);b.setStart(d.container,d.offset);var e=c(a.endContainer,a.endOffset);return b.setEnd(e.container,e.offset),b};return{getNormalizedEndPoint:c,normalizeRange:d}}),g(\"b\",[\"a\",\"8\",\"j\"],function(a,b,c){var d=a.DOM,e=function(a){var b={},c=function(c){var e,f,g;f=a[c?\"startContainer\":\"endContainer\"],g=a[c?\"startOffset\":\"endOffset\"],1===f.nodeType&&(e=d.create(\"span\",{\"data-mce-type\":\"bookmark\"}),f.hasChildNodes()?(g=Math.min(g,f.childNodes.length-1),c?f.insertBefore(e,f.childNodes[g]):d.insertAfter(e,f.childNodes[g])):f.appendChild(e),f=e,g=0),b[c?\"startContainer\":\"endContainer\"]=f,b[c?\"startOffset\":\"endOffset\"]=g};return c(!0),a.collapsed||c(),b},f=function(a){function b(b){var c,e,f,g=function(a){for(var b=a.parentNode.firstChild,c=0;b;){if(b===a)return c;1===b.nodeType&&\"bookmark\"===b.getAttribute(\"data-mce-type\")||c++,b=b.nextSibling}return-1};c=f=a[b?\"startContainer\":\"endContainer\"],e=a[b?\"startOffset\":\"endOffset\"],c&&(1===c.nodeType&&(e=g(c),c=c.parentNode,d.remove(f)),a[b?\"startContainer\":\"endContainer\"]=c,a[b?\"startOffset\":\"endOffset\"]=e)}b(!0),b();var e=d.createRng();return e.setStart(a.startContainer,a.startOffset),a.endContainer&&e.setEnd(a.endContainer,a.endOffset),c.normalizeRange(e)};return{createBookmark:e,resolveBookmark:f}}),g(\"c\",[\"2\",\"8\"],function(a,b){var c=function(c){return a.grep(c.selection.getSelectedBlocks(),function(a){return b.isListItemNode(a)})};return{getSelectedListItems:c}}),g(\"4\",[\"a\",\"b\",\"8\",\"c\"],function(a,b,c,d){var e=a.DOM,f=function(a,b){var d;if(c.isListNode(a)){for(;d=a.firstChild;)b.appendChild(d);e.remove(a)}},g=function(a){var b,d,g;return\"DT\"===a.nodeName?(e.rename(a,\"DD\"),!0):(b=a.previousSibling,b&&c.isListNode(b)?(b.appendChild(a),!0):b&&\"LI\"===b.nodeName&&c.isListNode(b.lastChild)?(b.lastChild.appendChild(a),f(a.lastChild,b.lastChild),!0):(b=a.nextSibling,b&&c.isListNode(b)?(b.insertBefore(a,b.firstChild),!0):(b=a.previousSibling,!(!b||\"LI\"!==b.nodeName)&&(d=e.create(a.parentNode.nodeName),g=e.getStyle(a.parentNode,\"listStyleType\"),g&&e.setStyle(d,\"listStyleType\",g),b.appendChild(d),d.appendChild(a),f(a.lastChild,d),!0))))},h=function(a){var c=d.getSelectedListItems(a);if(c.length){for(var e=b.createBookmark(a.selection.getRng(!0)),f=0;f<c.length&&(g(c[f])||0!==f);f++);return a.selection.setRng(b.resolveBookmark(e)),a.nodeChanged(),!0}};return{indentSelection:h}}),g(\"d\",[\"a\",\"2\",\"8\"],function(a,b,c){var d=a.DOM,e=function(a,b){var e,f=b.parentNode;\"LI\"===f.nodeName&&f.firstChild===b&&(e=f.previousSibling,e&&\"LI\"===e.nodeName?(e.appendChild(b),c.isEmpty(a,f)&&d.remove(f)):d.setStyle(f,\"listStyleType\",\"none\")),c.isListNode(f)&&(e=f.previousSibling,e&&\"LI\"===e.nodeName&&e.appendChild(b))},f=function(a,c){b.each(b.grep(a.select(\"ol,ul\",c)),function(b){e(a,b)})};return{normalizeList:e,normalizeLists:f}}),g(\"k\",[\"9\"],function(a){return a(\"tinymce.Env\")}),g(\"f\",[\"a\",\"k\"],function(a,b){var c=a.DOM,d=function(a,d,e){var f,g,h,i=c.createFragment(),j=a.schema.getBlockElements();if(a.settings.forced_root_block&&(e=e||a.settings.forced_root_block),e&&(g=c.create(e),g.tagName===a.settings.forced_root_block&&c.setAttribs(g,a.settings.forced_root_block_attrs),i.appendChild(g)),d)for(;f=d.firstChild;){var k=f.nodeName;h||\"SPAN\"===k&&\"bookmark\"===f.getAttribute(\"data-mce-type\")||(h=!0),j[k]?(i.appendChild(f),g=null):e?(g||(g=c.create(e),i.appendChild(g)),g.appendChild(f)):i.appendChild(f)}return a.settings.forced_root_block?h||b.ie&&!(b.ie>10)||g.appendChild(c.create(\"br\",{\"data-mce-bogus\":\"1\"})):i.appendChild(c.create(\"br\")),i};return{createNewTextBlock:d}}),g(\"e\",[\"a\",\"8\",\"f\",\"2\"],function(a,b,c,d){var e=a.DOM,f=function(a,f,g,h){var i,j,k,l,m=function(a){d.each(k,function(b){a.parentNode.insertBefore(b,g.parentNode)}),e.remove(a)};for(k=e.select('span[data-mce-type=\"bookmark\"]',f),h=h||c.createNewTextBlock(a,g),i=e.createRng(),i.setStartAfter(g),i.setEndAfter(f),j=i.extractContents(),l=j.firstChild;l;l=l.firstChild)if(\"LI\"===l.nodeName&&a.dom.isEmpty(l)){e.remove(l);break}a.dom.isEmpty(j)||e.insertAfter(j,f),e.insertAfter(h,f),b.isEmpty(a.dom,g.parentNode)&&m(g.parentNode),e.remove(g),b.isEmpty(a.dom,f)&&e.remove(f)};return{splitList:f}}),g(\"5\",[\"a\",\"b\",\"8\",\"d\",\"c\",\"e\",\"f\"],function(a,b,c,d,e,f,g){var h=a.DOM,i=function(a,b){c.isEmpty(a,b)&&h.remove(b)},j=function(a,b){var e,j=b.parentNode,k=j.parentNode;return j===a.getBody()||(\"DD\"===b.nodeName?(h.rename(b,\"DT\"),!0):c.isFirstChild(b)&&c.isLastChild(b)?(\"LI\"===k.nodeName?(h.insertAfter(b,k),i(a.dom,k),h.remove(j)):c.isListNode(k)?h.remove(j,!0):(k.insertBefore(g.createNewTextBlock(a,b),j),h.remove(j)),!0):c.isFirstChild(b)?(\"LI\"===k.nodeName?(h.insertAfter(b,k),b.appendChild(j),i(a.dom,k)):c.isListNode(k)?k.insertBefore(b,j):(k.insertBefore(g.createNewTextBlock(a,b),j),h.remove(b)),!0):c.isLastChild(b)?(\"LI\"===k.nodeName?h.insertAfter(b,k):c.isListNode(k)?h.insertAfter(b,j):(h.insertAfter(g.createNewTextBlock(a,b),j),h.remove(b)),!0):(\"LI\"===k.nodeName?(j=k,e=g.createNewTextBlock(a,b,\"LI\")):e=c.isListNode(k)?g.createNewTextBlock(a,b,\"LI\"):g.createNewTextBlock(a,b),f.splitList(a,j,b,e),d.normalizeLists(a.dom,j.parentNode),!0))},k=function(a){var c=e.getSelectedListItems(a);if(c.length){var d,f,g=b.createBookmark(a.selection.getRng(!0)),h=a.getBody();for(d=c.length;d--;)for(var i=c[d].parentNode;i&&i!==h;){for(f=c.length;f--;)if(c[f]===i){c.splice(d,1);break}i=i.parentNode}for(d=0;d<c.length&&(j(a,c[d])||0!==d);d++);return a.selection.setRng(b.resolveBookmark(g)),a.nodeChanged(),!0}};return{outdent:j,outdentSelection:k}}),g(\"g\",[\"9\"],function(a){return a(\"tinymce.dom.BookmarkManager\")}),g(\"6\",[\"g\",\"2\",\"5\",\"b\",\"8\",\"d\",\"c\",\"e\"],function(a,b,c,d,e,f,g,h){var i=function(a,b,c){var d=c[\"list-style-type\"]?c[\"list-style-type\"]:null;a.setStyle(b,\"list-style-type\",d)},j=function(a,c){b.each(c,function(b,c){a.setAttribute(c,b)})},k=function(a,c,d){j(c,d[\"list-attributes\"]),b.each(a.select(\"li\",c),function(a){j(a,d[\"list-item-attributes\"])})},l=function(a,b,c){i(a,b,c),k(a,b,c)},m=function(a,b,c){var d,f,g=a.getBody();for(d=b[c?\"startContainer\":\"endContainer\"],f=b[c?\"startOffset\":\"endOffset\"],1===d.nodeType&&(d=d.childNodes[Math.min(f,d.childNodes.length-1)]||d);d.parentNode!==g;){if(e.isTextBlock(a,d))return d;if(/^(TD|TH)$/.test(d.parentNode.nodeName))return d;d=d.parentNode}return d},n=function(c,d){for(var f,g=[],h=c.getBody(),i=c.dom,j=m(c,d,!0),k=m(c,d,!1),l=[],n=j;n&&(l.push(n),n!==k);n=n.nextSibling);return b.each(l,function(b){if(e.isTextBlock(c,b))return g.push(b),void(f=null);if(i.isBlock(b)||e.isBr(b))return e.isBr(b)&&i.remove(b),void(f=null);var d=b.nextSibling;return a.isBookmarkNode(b)&&(e.isTextBlock(c,d)||!d&&b.parentNode===h)?void(f=null):(f||(f=i.create(\"p\"),b.parentNode.insertBefore(f,b),g.push(f)),void f.appendChild(b))}),g},o=function(a,c,f){var g,h=a.selection.getRng(!0),i=\"LI\",j=a.dom;f=f?f:{},\"false\"!==j.getContentEditable(a.selection.getNode())&&(c=c.toUpperCase(),\"DL\"===c&&(i=\"DT\"),g=d.createBookmark(h),b.each(n(a,h),function(b){var d,g,h=function(a){var b=j.getStyle(a,\"list-style-type\"),c=f?f[\"list-style-type\"]:\"\";return c=null===c?\"\":c,b===c};g=b.previousSibling,g&&e.isListNode(g)&&g.nodeName===c&&h(g)?(d=g,b=j.rename(b,i),g.appendChild(b)):(d=j.create(c),b.parentNode.insertBefore(d,b),d.appendChild(b),b=j.rename(b,i)),l(j,d,f),u(a.dom,d)}),a.selection.setRng(d.resolveBookmark(g)))},p=function(a){var i=d.createBookmark(a.selection.getRng(!0)),j=a.getBody(),k=g.getSelectedListItems(a),l=b.grep(k,function(b){return a.dom.isEmpty(b)});k=b.grep(k,function(b){return!a.dom.isEmpty(b)}),b.each(l,function(b){if(e.isEmpty(a.dom,b))return void c.outdent(a,b)}),b.each(k,function(b){var c,d;if(b.parentNode!==a.getBody()){for(c=b;c&&c!==j;c=c.parentNode)e.isListNode(c)&&(d=c);h.splitList(a,d,b),f.normalizeLists(a.dom,d.parentNode)}}),a.selection.setRng(d.resolveBookmark(i))},q=function(a,b){return a&&b&&e.isListNode(a)&&a.nodeName===b.nodeName},r=function(a,b,c){var d=a.getStyle(b,\"list-style-type\",!0),e=a.getStyle(c,\"list-style-type\",!0);return d===e},s=function(a,b){return a.className===b.className},t=function(a,b,c){return q(b,c)&&r(a,b,c)&&s(b,c)},u=function(a,b){var c,d;if(c=b.nextSibling,t(a,b,c)){for(;d=c.firstChild;)b.appendChild(d);a.remove(c)}if(c=b.previousSibling,t(a,b,c)){for(;d=c.lastChild;)b.insertBefore(d,b.firstChild);a.remove(c)}},v=function(a,b,c){var e=a.dom.getParent(a.selection.getStart(),\"OL,UL,DL\");if(c=c?c:{},e!==a.getBody())if(e)if(e.nodeName===b)p(a,b);else{var f=d.createBookmark(a.selection.getRng(!0));l(a.dom,e,c),u(a.dom,a.dom.rename(e,b)),a.selection.setRng(d.resolveBookmark(f))}else o(a,b,c)};return{toggleList:v,removeList:p,mergeWithAdjacentLists:u}}),g(\"i\",[\"9\"],function(a){return a(\"tinymce.dom.TreeWalker\")}),g(\"7\",[\"h\",\"i\",\"3\",\"6\",\"b\",\"8\",\"d\",\"j\",\"c\"],function(a,b,c,d,e,f,g,h,i){var j=function(c,d,e){var g,h,i=d.startContainer,j=d.startOffset;if(3===i.nodeType&&(e?j<i.data.length:j>0))return i;for(g=c.schema.getNonEmptyElements(),1===i.nodeType&&(i=a.getNode(i,j)),h=new b(i,c.getBody()),e&&f.isBogusBr(c.dom,i)&&h.next();i=h[e?\"next\":\"prev2\"]();){if(\"LI\"===i.nodeName&&!i.hasChildNodes())return i;if(g[i.nodeName])return i;if(3===i.nodeType&&i.data.length>0)return i}},k=function(a,b,c){var d,e,g=b.parentNode;if(f.isChildOfBody(a,b)&&f.isChildOfBody(a,c)){if(f.isListNode(c.lastChild)&&(e=c.lastChild),g===c.lastChild&&f.isBr(g.previousSibling)&&a.remove(g.previousSibling),d=c.lastChild,d&&f.isBr(d)&&b.hasChildNodes()&&a.remove(d),f.isEmpty(a,c,!0)&&a.$(c).empty(),!f.isEmpty(a,b,!0))for(;d=b.firstChild;)c.appendChild(d);e&&c.appendChild(e),a.remove(b),f.isEmpty(a,g)&&g!==a.getRoot()&&a.remove(g)}},l=function(a,b){var c,g,i,l=a.dom,m=a.selection,n=l.getParent(m.getStart(),\"LI\");if(n){if(c=n.parentNode,c===a.getBody()&&f.isEmpty(l,c))return!0;if(g=h.normalizeRange(m.getRng(!0)),i=l.getParent(j(a,g,b),\"LI\"),i&&i!==n){var o=e.createBookmark(g);return b?k(l,i,n):k(l,n,i),a.selection.setRng(e.resolveBookmark(o)),!0}if(!i&&!b&&d.removeList(a,c.nodeName))return!0}return!1},m=function(a,b){var c=a.dom,e=c.getParent(a.selection.getStart(),c.isBlock);if(e&&c.isEmpty(e)){var f=h.normalizeRange(a.selection.getRng(!0)),g=c.getParent(j(a,f,b),\"LI\");if(g)return a.undoManager.transact(function(){c.remove(e),d.mergeWithAdjacentLists(c,g.parentNode),a.selection.select(g,!0),a.selection.collapse(b)}),!0}return!1},n=function(a,b){return l(a,b)||m(a,b)},o=function(a){var b=a.dom.getParent(a.selection.getStart(),\"LI,DT,DD\");return!!(b||i.getSelectedListItems(a).length>0)&&(a.undoManager.transact(function(){a.execCommand(\"Delete\"),g.normalizeLists(a.dom,a.getBody())}),!0)},p=function(a,b){return a.selection.isCollapsed()?n(a,b):o(a)},q=function(a){a.on(\"keydown\",function(b){b.keyCode===c.BACKSPACE?p(a,!1)&&b.preventDefault():b.keyCode===c.DELETE&&p(a,!0)&&b.preventDefault()})};return{setup:q,backspaceDelete:p}}),g(\"0\",[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\"],function(a,b,c,d,e,f,g,h){var i=function(a,b){return function(){var c=a.dom.getParent(a.selection.getStart(),\"UL,OL,DL\");return c&&c.nodeName===b}},j=function(a){a.on(\"BeforeExecCommand\",function(b){var c,f=b.command.toLowerCase();if(\"indent\"===f?d.indentSelection(a)&&(c=!0):\"outdent\"===f&&e.outdentSelection(a)&&(c=!0),c)return a.fire(\"ExecCommand\",{command:b.command}),b.preventDefault(),!0}),a.addCommand(\"InsertUnorderedList\",function(b,c){f.toggleList(a,\"UL\",c)}),a.addCommand(\"InsertOrderedList\",function(b,c){f.toggleList(a,\"OL\",c)}),a.addCommand(\"InsertDefinitionList\",function(b,c){f.toggleList(a,\"DL\",c)})},k=function(a){a.addQueryStateHandler(\"InsertUnorderedList\",i(a,\"UL\")),a.addQueryStateHandler(\"InsertOrderedList\",i(a,\"OL\")),a.addQueryStateHandler(\"InsertDefinitionList\",i(a,\"DL\"))},l=function(a){a.on(\"keydown\",function(b){9!==b.keyCode||c.metaKeyPressed(b)||a.dom.getParent(a.selection.getStart(),\"LI,DT,DD\")&&(b.preventDefault(),b.shiftKey?e.outdentSelection(a):d.indentSelection(a))})},m=function(a){var c=function(c){return function(){var d=this;a.on(\"NodeChange\",function(a){var e=b.grep(a.parents,h.isListNode);d.active(e.length>0&&e[0].nodeName===c)})}},d=function(a,c){var d=a.settings.plugins?a.settings.plugins:\"\";return b.inArray(d.split(/[ ,]/),c)!==-1};d(a,\"advlist\")||(a.addButton(\"numlist\",{title:\"Numbered list\",cmd:\"InsertOrderedList\",onPostRender:c(\"OL\")}),a.addButton(\"bullist\",{title:\"Bullet list\",cmd:\"InsertUnorderedList\",onPostRender:c(\"UL\")})),a.addButton(\"indent\",{icon:\"indent\",title:\"Increase indent\",cmd:\"Indent\",onPostRender:function(b){var c=b.control;a.on(\"nodechange\",function(){for(var b=a.selection.getSelectedBlocks(),d=!1,e=0,f=b.length;!d&&e<f;e++){var g=b[e].nodeName;d=\"LI\"===g&&h.isFirstChild(b[e])||\"UL\"===g||\"OL\"===g||\"DD\"===g}c.disabled(d)})}})};return a.add(\"lists\",function(a){return m(a),g.setup(a),a.on(\"init\",function(){j(a),k(a),a.getParam(\"lists_indent_on_tab\",!0)&&l(a)}),{backspaceDelete:function(b){g.backspaceDelete(a,b)}}}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"8\",tinymce.util.Tools.resolve),g(\"1\",[\"8\"],function(a){return a(\"tinymce.html.Node\")}),g(\"2\",[\"8\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"3\",[\"8\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"9\",[\"8\"],function(a){return a(\"tinymce.html.Writer\")}),g(\"a\",[\"8\"],function(a){return a(\"tinymce.html.SaxParser\")}),g(\"b\",[\"8\"],function(a){return a(\"tinymce.html.Schema\")}),g(\"5\",[\"3\",\"9\",\"a\",\"b\"],function(a,b,c,d){var e=function(a,e){if(a.settings.media_filter_html===!1)return e;var f,g=new b;return new c({validate:!1,allow_conditional_comments:!1,special:\"script,noscript\",comment:function(a){g.comment(a)},cdata:function(a){g.cdata(a)},text:function(a,b){g.text(a,b)},start:function(b,c,d){if(f=!0,\"script\"!==b&&\"noscript\"!==b){for(var e=0;e<c.length;e++){if(0===c[e].name.indexOf(\"on\"))return;\"style\"===c[e].name&&(c[e].value=a.dom.serializeStyle(a.dom.parseStyle(c[e].value),b))}g.start(b,c,d),f=!1}},end:function(a){f||g.end(a)}},new d({})).parse(e),g.getContent()};return{sanitize:e}}),g(\"c\",[],function(){var a=function(a,b){if(a)for(var c=0;c<a.length;c++)if(b.indexOf(a[c].filter)!==-1)return a[c]};return{getVideoScriptMatch:a}}),g(\"d\",[\"8\"],function(a){return a(\"tinymce.Env\")}),g(\"4\",[\"5\",\"c\",\"1\",\"d\"],function(a,b,c,d){var e=function(a,b){var e,f=b.name;return e=new c(\"img\",1),e.shortEnded=!0,g(a,b,e),e.attr({width:b.attr(\"width\")||\"300\",height:b.attr(\"height\")||(\"audio\"===f?\"30\":\"150\"),style:b.attr(\"style\"),src:d.transparentSrc,\"data-mce-object\":f,\"class\":\"mce-object mce-object-\"+f}),e},f=function(a,b){var d,e,f,h=b.name;return d=new c(\"span\",1),d.attr({contentEditable:\"false\",style:b.attr(\"style\"),\"data-mce-object\":h,\"class\":\"mce-preview-object mce-object-\"+h}),g(a,b,d),e=new c(h,1),e.attr({src:b.attr(\"src\"),allowfullscreen:b.attr(\"allowfullscreen\"),width:b.attr(\"width\")||\"300\",height:b.attr(\"height\")||(\"audio\"===h?\"30\":\"150\"),frameborder:\"0\"}),f=new c(\"span\",1),f.attr(\"class\",\"mce-shim\"),d.append(e),d.append(f),d},g=function(b,c,d){var e,f,g,h,i;for(g=c.attributes,h=g.length;h--;)e=g[h].name,f=g[h].value,\"width\"!==e&&\"height\"!==e&&\"style\"!==e&&(\"data\"!==e&&\"src\"!==e||(f=b.convertURL(f,e)),d.attr(\"data-mce-p-\"+e,f));i=c.firstChild&&c.firstChild.value,i&&(d.attr(\"data-mce-html\",escape(a.sanitize(b,i))),d.firstChild=null)},h=function(a){for(;a=a.parent;)if(a.attr(\"data-ephox-embed-iri\"))return!0;return!1},i=function(a){return function(c){for(var g,i,j=c.length;j--;)g=c[j],g.parent&&(g.parent.attr(\"data-mce-object\")||(\"script\"!==g.name||(i=b.getVideoScriptMatch(a.settings.media_scripts,g.attr(\"src\"))))&&(i&&(i.width&&g.attr(\"width\",i.width.toString()),i.height&&g.attr(\"height\",i.height.toString())),\"iframe\"===g.name&&a.settings.media_live_embeds!==!1&&d.ceFalse?h(g)||g.replace(f(a,g)):h(g)||g.replace(e(a,g))))}};return{createPreviewIframeNode:f,createPlaceholderNode:e,placeHolderConverter:i}}),g(\"e\",[\"8\"],function(a){return a(\"tinymce.dom.DOMUtils\")}),g(\"f\",[],function(){var a=function(a){return a.replace(/px$/,\"\")},b=function(a){return/^[0-9.]+$/.test(a)?a+\"px\":a},c=function(b){return function(c){return c?a(c.style[b]):\"\"}},d=function(a){return function(c,d){c&&(c.style[a]=b(d))}};return{getMaxWidth:c(\"maxWidth\"),getMaxHeight:c(\"maxHeight\"),setMaxWidth:d(\"maxWidth\"),setMaxHeight:d(\"maxHeight\")}}),g(\"6\",[\"9\",\"a\",\"b\",\"e\",\"f\"],function(a,b,c,d,e){var f=d.DOM,g=function(a,b){var c,d,e,f;for(c in b)if(e=\"\"+b[c],a.map[c])for(d=a.length;d--;)f=a[d],f.name===c&&(e?(a.map[c]=e,f.value=e):(delete a.map[c],a.splice(d,1)));else e&&(a.push({name:c,value:e}),a.map[c]=e)},h=function(c){var d=new a,e=new b(d);return e.parse(c),d.getContent()},i=function(d,e,f){var h,i=new a,j=0;return new b({validate:!1,allow_conditional_comments:!0,special:\"script,noscript\",comment:function(a){i.comment(a)},cdata:function(a){i.cdata(a)},text:function(a,b){i.text(a,b)},start:function(a,b,c){switch(a){case\"video\":case\"object\":case\"embed\":case\"img\":case\"iframe\":void 0!==e.height&&void 0!==e.width&&g(b,{width:e.width,height:e.height})}if(f)switch(a){case\"video\":g(b,{poster:e.poster,src:\"\"}),e.source2&&g(b,{src:\"\"});break;case\"iframe\":g(b,{src:e.source1});break;case\"source\":if(j++,j<=2&&(g(b,{src:e[\"source\"+j],type:e[\"source\"+j+\"mime\"]}),!e[\"source\"+j]))return;break;case\"img\":if(!e.poster)return;h=!0}i.start(a,b,c)},end:function(a){if(\"video\"===a&&f)for(var b=1;b<=2;b++)if(e[\"source\"+b]){var c=[];c.map={},j<b&&(g(c,{src:e[\"source\"+b],type:e[\"source\"+b+\"mime\"]}),i.start(\"source\",c,!0))}if(e.poster&&\"object\"===a&&f&&!h){var d=[];d.map={},g(d,{src:e.poster,width:e.width,height:e.height}),i.start(\"img\",d,!0)}i.end(a)}},new c({})).parse(d),i.getContent()},j=function(a){var b=f.createFragment(a);return\"\"!==f.getAttrib(b.firstChild,\"data-ephox-embed-iri\")},k=function(a,b){var c=f.createFragment(a),d=c.firstChild;return e.setMaxWidth(d,b.width),e.setMaxHeight(d,b.height),h(d.outerHTML)},l=function(a,b,c){return j(a)?k(a,b):i(a,b,c)};return{updateHtml:l}}),g(\"g\",[\"8\"],function(a){return a(\"tinymce.util.Delay\")}),g(\"h\",[\"3\",\"a\",\"b\",\"e\",\"c\",\"f\"],function(a,b,c,d,e,f){var g=d.DOM,h=function(a){return g.getAttrib(a,\"data-ephox-embed-iri\")},i=function(a){var b=g.createFragment(a);return\"\"!==h(b.firstChild)},j=function(c,d){var f={};return new b({validate:!1,allow_conditional_comments:!0,special:\"script,noscript\",start:function(b,d){if(f.source1||\"param\"!==b||(f.source1=d.map.movie),\"iframe\"!==b&&\"object\"!==b&&\"embed\"!==b&&\"video\"!==b&&\"audio\"!==b||(f.type||(f.type=b),f=a.extend(d.map,f)),\"script\"===b){var g=e.getVideoScriptMatch(c,d.map.src);if(!g)return;f={type:\"script\",source1:d.map.src,width:g.width,height:g.height}}\"source\"===b&&(f.source1?f.source2||(f.source2=d.map.src):f.source1=d.map.src),\"img\"!==b||f.poster||(f.poster=d.map.src)}}).parse(d),f.source1=f.source1||f.src||f.data,f.source2=f.source2||\"\",f.poster=f.poster||\"\",f},k=function(a){var b=g.createFragment(a),c=b.firstChild;return{type:\"ephox-embed-iri\",source1:h(c),source2:\"\",poster:\"\",width:f.getMaxWidth(c),height:f.getMaxHeight(c)}},l=function(a,b){return i(b)?k(b):j(a,b)};return{htmlToData:l}}),g(\"m\",[],function(){var a=function(a){var b={mp3:\"audio/mpeg\",wav:\"audio/wav\",mp4:\"video/mp4\",webm:\"video/webm\",ogg:\"video/ogg\",swf:\"application/x-shockwave-flash\"},c=a.toLowerCase().split(\".\").pop(),d=b[c];return d?d:\"\"};return{guess:a}}),g(\"n\",[],function(){var a=[{regex:/youtu\\.be\\/([\\w\\-.]+)/,type:\"iframe\",w:560,h:314,url:\"//www.youtube.com/embed/$1\",allowFullscreen:!0},{regex:/youtube\\.com(.+)v=([^&]+)/,type:\"iframe\",w:560,h:314,url:\"//www.youtube.com/embed/$2\",allowFullscreen:!0},{regex:/youtube.com\\/embed\\/([a-z0-9\\-_]+(?:\\?.+)?)/i,type:\"iframe\",w:560,h:314,url:\"//www.youtube.com/embed/$1\",allowFullscreen:!0},{regex:/vimeo\\.com\\/([0-9]+)/,type:\"iframe\",w:425,h:350,url:\"//player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc\",allowfullscreen:!0},{regex:/vimeo\\.com\\/(.*)\\/([0-9]+)/,type:\"iframe\",w:425,h:350,url:\"//player.vimeo.com/video/$2?title=0&amp;byline=0\",allowfullscreen:!0},{regex:/maps\\.google\\.([a-z]{2,3})\\/maps\\/(.+)msid=(.+)/,type:\"iframe\",w:425,h:350,url:'//maps.google.com/maps/ms?msid=$2&output=embed\"',allowFullscreen:!1},{regex:/dailymotion\\.com\\/video\\/([^_]+)/,type:\"iframe\",w:480,h:270,url:\"//www.dailymotion.com/embed/video/$1\",allowFullscreen:!0}];return{urlPatterns:a}}),g(\"k\",[\"m\",\"h\",\"n\",\"c\",\"6\",\"3\"],function(a,b,c,d,e,f){var g=function(g,h){var i=\"\",j=f.extend({},h);if(!j.source1&&(f.extend(j,b.htmlToData(g.settings.media_scripts,j.embed)),!j.source1))return\"\";if(j.source2||(j.source2=\"\"),j.poster||(j.poster=\"\"),j.source1=g.convertURL(j.source1,\"source\"),j.source2=g.convertURL(j.source2,\"source\"),j.source1mime=a.guess(j.source1),j.source2mime=a.guess(j.source2),j.poster=g.convertURL(j.poster,\"poster\"),f.each(c.urlPatterns,function(a){var b,c,d=a.regex.exec(j.source1);if(d){for(c=a.url,b=0;d[b];b++)c=c.replace(\"$\"+b,function(){return d[b]});j.source1=c,j.type=a.type,j.allowFullscreen=a.allowFullscreen,j.width=j.width||a.w,j.height=j.height||a.h}}),j.embed)i=e.updateHtml(j.embed,j,!0);else{var k=d.getVideoScriptMatch(g.settings.media_scripts,j.source1);if(k&&(j.type=\"script\",j.width=k.width,j.height=k.height),j.width=j.width||300,j.height=j.height||150,f.each(j,function(a,b){j[b]=g.dom.encode(a)}),\"iframe\"===j.type){var l=j.allowFullscreen?' allowFullscreen=\"1\"':\"\";i+='<iframe src=\"'+j.source1+'\" width=\"'+j.width+'\" height=\"'+j.height+'\"'+l+\"></iframe>\"}else\"application/x-shockwave-flash\"===j.source1mime?(i+='<object data=\"'+j.source1+'\" width=\"'+j.width+'\" height=\"'+j.height+'\" type=\"application/x-shockwave-flash\">',j.poster&&(i+='<img src=\"'+j.poster+'\" width=\"'+j.width+'\" height=\"'+j.height+'\" />'),i+=\"</object>\"):j.source1mime.indexOf(\"audio\")!==-1?g.settings.audio_template_callback?i=g.settings.audio_template_callback(j):i+='<audio controls=\"controls\" src=\"'+j.source1+'\">'+(j.source2?'\\n<source src=\"'+j.source2+'\"'+(j.source2mime?' type=\"'+j.source2mime+'\"':\"\")+\" />\\n\":\"\")+\"</audio>\":\"script\"===j.type?i+='<script src=\"'+j.source1+'\"></script>':i=g.settings.video_template_callback?g.settings.video_template_callback(j):'<video width=\"'+j.width+'\" height=\"'+j.height+'\"'+(j.poster?' poster=\"'+j.poster+'\"':\"\")+' controls=\"controls\">\\n<source src=\"'+j.source1+'\"'+(j.source1mime?' type=\"'+j.source1mime+'\"':\"\")+\" />\\n\"+(j.source2?'<source src=\"'+j.source2+'\"'+(j.source2mime?' type=\"'+j.source2mime+'\"':\"\")+\" />\\n\":\"\")+\"</video>\"}return i};return{dataToHtml:g}}),g(\"l\",[\"8\"],function(a){return a(\"tinymce.util.Promise\")}),g(\"i\",[\"k\",\"l\"],function(a,b){var c=function(a,c,d){var e={};return new b(function(b,f){var g=function(d){return d.html&&(e[a.source1]=d),b({url:a.source1,html:d.html?d.html:c(a)})};e[a.source1]?g(e[a.source1]):d({url:a.source1},g,f)})},d=function(a,c){return new b(function(b){b({html:c(a),url:a.source1})})},e=function(b){return function(c){return a.dataToHtml(b,c)}},f=function(a,b){var f=a.settings.media_url_resolver;return f?c(b,e(a),f):d(b,e(a))};return{getEmbedHtml:f}}),g(\"j\",[],function(){var a=function(a,b){a.state.set(\"oldVal\",a.value()),b.state.set(\"oldVal\",b.value())},b=function(a,b){var c=a.find(\"#width\")[0],d=a.find(\"#height\")[0],e=a.find(\"#constrain\")[0];c&&d&&e&&b(c,d,e.checked())},c=function(b,c,d){var e=b.state.get(\"oldVal\"),f=c.state.get(\"oldVal\"),g=b.value(),h=c.value();d&&e&&f&&g&&h&&(g!==e?(h=Math.round(g/e*h),isNaN(h)||c.value(h)):(g=Math.round(h/f*g),isNaN(g)||b.value(g))),a(b,c)},d=function(c){b(c,a)},e=function(a){b(a,c)},f=function(a){var b=function(){a(function(a){e(a)})};return{type:\"container\",label:\"Dimensions\",layout:\"flex\",align:\"center\",spacing:5,items:[{name:\"width\",type:\"textbox\",maxLength:5,size:5,onchange:b,ariaLabel:\"Width\"},{type:\"label\",text:\"x\"},{name:\"height\",type:\"textbox\",maxLength:5,size:5,onchange:b,ariaLabel:\"Height\"},{name:\"constrain\",type:\"checkbox\",checked:!0,text:\"Constrain proportions\"}]}};return{createUi:f,syncSize:d,updateSize:e}}),g(\"7\",[\"g\",\"h\",\"6\",\"i\",\"f\",\"3\",\"d\",\"j\"],function(a,b,c,d,e,f,g,h){var i=g.ie&&g.ie<=8?\"onChange\":\"onInput\",j=function(a){return function(b){var c=b&&b.msg?\"Media embed handler error: \"+b.msg:\"Media embed handler threw unknown error.\";a.notificationManager.open({type:\"error\",text:c})}},k=function(a){var c=a.selection.getNode(),d=c.getAttribute(\"data-ephox-embed-iri\");return d?{source1:d,\"data-ephox-embed-iri\":d,width:e.getMaxWidth(c),height:e.getMaxHeight(c)}:c.getAttribute(\"data-mce-object\")?b.htmlToData(a.settings.media_scripts,a.serializer.serialize(c,{selection:!0})):{}},l=function(a){var b=a.selection.getNode();if(b.getAttribute(\"data-mce-object\")||b.getAttribute(\"data-ephox-embed-iri\"))return a.selection.getContent()},m=function(a,c){return function(d){var e=d.html,g=a.find(\"#embed\")[0],i=f.extend(b.htmlToData(c.settings.media_scripts,e),{source1:d.url});a.fromJSON(i),g&&(g.value(e),h.updateSize(a))}},n=function(a,b){var c,d,e=a.dom.select(\"img[data-mce-object]\");for(c=0;c<b.length;c++)for(d=e.length-1;d>=0;d--)b[c]===e[d]&&e.splice(d,1);a.selection.select(e[0])},o=function(a,b){var c=a.dom.select(\"img[data-mce-object]\");a.insertContent(b),n(a,c),a.nodeChanged()},p=function(a,b){var e=a.toJSON();e.embed=c.updateHtml(e.embed,e),e.embed?o(b,e.embed):d.getEmbedHtml(b,e).then(function(a){o(b,a.html)})[\"catch\"](j(b))},q=function(a,b){f.each(b,function(b,c){a.find(\"#\"+c).value(b)})},r=function(a){var e,g,n=[{name:\"source1\",type:\"filepicker\",filetype:\"media\",size:40,autofocus:!0,label:\"Source\",onpaste:function(){setTimeout(function(){d.getEmbedHtml(a,e.toJSON()).then(m(e,a))[\"catch\"](j(a))},1)},onchange:function(b){d.getEmbedHtml(a,e.toJSON()).then(m(e,a))[\"catch\"](j(a)),q(e,b.meta)},onbeforecall:function(a){a.meta=e.toJSON()}}],o=[],r=function(a){a(e),g=e.toJSON(),e.find(\"#embed\").value(c.updateHtml(g.embed,g))};if(a.settings.media_alt_source!==!1&&o.push({name:\"source2\",type:\"filepicker\",filetype:\"media\",size:40,label:\"Alternative source\"}),a.settings.media_poster!==!1&&o.push({name:\"poster\",type:\"filepicker\",filetype:\"image\",size:40,label:\"Poster\"}),a.settings.media_dimensions!==!1){var s=h.createUi(r);n.push(s)}g=k(a);var t={id:\"mcemediasource\",type:\"textbox\",flex:1,name:\"embed\",value:l(a),multiline:!0,rows:5,label:\"Source\"},u=function(){g=f.extend({},b.htmlToData(a.settings.media_scripts,this.value())),this.parent().parent().fromJSON(g)};t[i]=u,e=a.windowManager.open({title:\"Insert/edit media\",data:g,bodyType:\"tabpanel\",body:[{title:\"General\",type:\"form\",items:n},{title:\"Embed\",type:\"container\",layout:\"flex\",direction:\"column\",align:\"stretch\",padding:10,spacing:10,items:[{type:\"label\",text:\"Paste your embed code below:\",forId:\"mcemediasource\"},t]},{title:\"Advanced\",type:\"form\",items:o}],onSubmit:function(){h.updateSize(e),p(e,a)}}),h.syncSize(e)};return{showDialog:r}}),g(\"0\",[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\"],function(a,b,c,d,e,f,g){var h=function(b){b.on(\"ResolveName\",function(a){var b;1===a.target.nodeType&&(b=a.target.getAttribute(\"data-mce-object\"))&&(a.name=b)}),b.on(\"preInit\",function(){var f=b.schema.getSpecialElements();c.each(\"video audio iframe object\".split(\" \"),function(a){f[a]=new RegExp(\"</\"+a+\"[^>]*>\",\"gi\")});var g=b.schema.getBoolAttrs();c.each(\"webkitallowfullscreen mozallowfullscreen allowfullscreen\".split(\" \"),function(a){g[a]={}}),b.parser.addNodeFilter(\"iframe,video,audio,object,embed,script\",d.placeHolderConverter(b)),b.serializer.addAttributeFilter(\"data-mce-object\",function(c,d){for(var f,g,h,i,j,k,l,m,n=c.length;n--;)if(f=c[n],f.parent){for(l=f.attr(d),g=new a(l,1),\"audio\"!==l&&\"script\"!==l&&(m=f.attr(\"class\"),m&&m.indexOf(\"mce-preview-object\")!==-1?g.attr({width:f.firstChild.attr(\"width\"),height:f.firstChild.attr(\"height\")}):g.attr({width:f.attr(\"width\"),height:f.attr(\"height\")})),g.attr({style:f.attr(\"style\")}),i=f.attributes,h=i.length;h--;){var o=i[h].name;0===o.indexOf(\"data-mce-p-\")&&g.attr(o.substr(11),i[h].value)}\"script\"===l&&g.attr(\"type\",\"text/javascript\"),j=f.attr(\"data-mce-html\"),j&&(k=new a(\"#text\",3),k.raw=!0,k.value=e.sanitize(b,unescape(j)),g.append(k)),f.replace(g)}})}),b.on(\"click keyup\",function(){var a=b.selection.getNode();a&&b.dom.hasClass(a,\"mce-preview-object\")&&b.dom.getAttrib(a,\"data-mce-selected\")&&a.setAttribute(\"data-mce-selected\",\"2\")}),b.on(\"ObjectSelected\",function(a){var b=a.target.getAttribute(\"data-mce-object\");\"audio\"!==b&&\"script\"!==b||a.preventDefault()}),b.on(\"objectResized\",function(a){var b,c=a.target;c.getAttribute(\"data-mce-object\")&&(b=c.getAttribute(\"data-mce-html\"),b&&(b=unescape(b),c.setAttribute(\"data-mce-html\",escape(f.updateHtml(b,{width:a.width,height:a.height})))))}),this.showDialog=function(){g.showDialog(b)},b.addButton(\"media\",{tooltip:\"Insert/edit media\",onclick:this.showDialog,stateSelector:[\"img[data-mce-object]\",\"span[data-mce-object]\",\"div[data-ephox-embed-iri]\"]}),b.addMenuItem(\"media\",{icon:\"media\",text:\"Media\",onclick:this.showDialog,context:\"insert\",prependToContext:!0}),b.on(\"setContent\",function(){b.$(\"span.mce-preview-object\").each(function(a,c){var d=b.$(c);0===d.find(\"span.mce-shim\",c).length&&d.append('<span class=\"mce-shim\"></span>')})}),b.addCommand(\"mceMedia\",this.showDialog)};return b.add(\"media\",h),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"2\",tinymce.util.Tools.resolve),g(\"1\",[\"2\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"0\",[\"1\"],function(a){return a.add(\"nonbreaking\",function(a){var b=a.getParam(\"nonbreaking_force_tab\");if(a.addCommand(\"mceNonBreaking\",function(){a.insertContent(a.plugins.visualchars&&a.plugins.visualchars.state?'<span class=\"mce-nbsp\">&nbsp;</span>':\"&nbsp;\"),a.dom.setAttrib(a.dom.select(\"span.mce-nbsp\"),\"data-mce-bogus\",\"1\")}),a.addButton(\"nonbreaking\",{title:\"Nonbreaking space\",cmd:\"mceNonBreaking\"}),a.addMenuItem(\"nonbreaking\",{text:\"Nonbreaking space\",cmd:\"mceNonBreaking\",context:\"insert\"}),b){var c=+b>1?+b:3;a.on(\"keydown\",function(b){if(9==b.keyCode){if(b.shiftKey)return;b.preventDefault();for(var d=0;d<c;d++)a.execCommand(\"mceNonBreaking\")}})}}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"3\",tinymce.util.Tools.resolve),g(\"1\",[\"3\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"2\",[\"3\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"0\",[\"1\",\"2\"],function(a,b){return a.add(\"noneditable\",function(a){function c(a){return function(b){return(\" \"+b.attr(\"class\")+\" \").indexOf(a)!==-1}}function d(c){function d(b){var c=arguments,d=c[c.length-2],e=d>0?h.charAt(d-1):\"\";if('\"'===e)return b;if(\">\"===e){var f=h.lastIndexOf(\"<\",d);if(f!==-1){var g=h.substring(f,d);if(g.indexOf('contenteditable=\"false\"')!==-1)return b}}return'<span class=\"'+i+'\" data-mce-content=\"'+a.dom.encode(c[0])+'\">'+a.dom.encode(\"string\"==typeof c[1]?c[1]:c[0])+\"</span>\"}var e=g.length,h=c.content,i=b.trim(f);if(\"raw\"!=c.format){for(;e--;)h=h.replace(g[e],d);c.content=h}}var e,f,g,h=\"contenteditable\";e=\" \"+b.trim(a.getParam(\"noneditable_editable_class\",\"mceEditable\"))+\" \",f=\" \"+b.trim(a.getParam(\"noneditable_noneditable_class\",\"mceNonEditable\"))+\" \";var i=c(e),j=c(f);g=a.getParam(\"noneditable_regexp\"),g&&!g.length&&(g=[g]),a.on(\"PreInit\",function(){g&&a.on(\"BeforeSetContent\",d),a.parser.addAttributeFilter(\"class\",function(a){for(var b,c=a.length;c--;)b=a[c],i(b)?b.attr(h,\"true\"):j(b)&&b.attr(h,\"false\")}),a.serializer.addAttributeFilter(h,function(a){for(var b,c=a.length;c--;)b=a[c],(i(b)||j(b))&&(g&&b.attr(\"data-mce-content\")?(b.name=\"#text\",b.type=3,b.raw=!0,b.value=b.attr(\"data-mce-content\")):b.attr(h,null))})})}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"3\",tinymce.util.Tools.resolve),g(\"1\",[\"3\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"2\",[\"3\"],function(a){return a(\"tinymce.Env\")}),g(\"0\",[\"1\",\"2\"],function(a,b){return a.add(\"pagebreak\",function(a){var c=\"mce-pagebreak\",d=a.getParam(\"pagebreak_separator\",\"<!-- pagebreak -->\"),e=new RegExp(d.replace(/[\\?\\.\\*\\[\\]\\(\\)\\{\\}\\+\\^\\$\\:]/g,function(a){return\"\\\\\"+a}),\"gi\"),f='<img src=\"'+b.transparentSrc+'\" class=\"'+c+'\" data-mce-resize=\"false\" data-mce-placeholder />';a.addCommand(\"mcePageBreak\",function(){a.settings.pagebreak_split_block?a.insertContent(\"<p>\"+f+\"</p>\"):a.insertContent(f)}),a.addButton(\"pagebreak\",{title:\"Page break\",cmd:\"mcePageBreak\"}),a.addMenuItem(\"pagebreak\",{text:\"Page break\",icon:\"pagebreak\",cmd:\"mcePageBreak\",context:\"insert\"}),a.on(\"ResolveName\",function(b){\"IMG\"==b.target.nodeName&&a.dom.hasClass(b.target,c)&&(b.name=\"pagebreak\")}),a.on(\"click\",function(b){b=b.target,\"IMG\"===b.nodeName&&a.dom.hasClass(b,c)&&a.selection.select(b)}),a.on(\"BeforeSetContent\",function(a){a.content=a.content.replace(e,f)}),a.on(\"PreInit\",function(){a.serializer.addNodeFilter(\"img\",function(b){for(var c,e,f=b.length;f--;)if(c=b[f],e=c.attr(\"class\"),e&&e.indexOf(\"mce-pagebreak\")!==-1){var g=c.parent;if(a.schema.getBlockElements()[g.name]&&a.settings.pagebreak_split_block){g.type=3,g.value=d,g.raw=!0,c.remove();continue}c.type=3,c.value=d,c.raw=!0}})})}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"6\",tinymce.util.Tools.resolve),g(\"1\",[\"6\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"7\",[\"6\"],function(a){return a(\"tinymce.dom.RangeUtils\")}),g(\"8\",[\"6\"],function(a){return a(\"tinymce.Env\")}),g(\"9\",[\"6\"],function(a){return a(\"tinymce.util.Delay\")}),g(\"a\",[\"6\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"b\",[\"6\"],function(a){return a(\"tinymce.util.VK\")}),g(\"c\",[],function(){var a=\"x-tinymce/html\",b=\"<!-- \"+a+\" -->\",c=function(a){return b+a},d=function(a){return a.replace(b,\"\")},e=function(a){return a.indexOf(b)!==-1};return{mark:c,unmark:d,isMarked:e,internalHtmlMime:function(){return a}}}),g(\"g\",[\"6\"],function(a){return a(\"tinymce.html.DomParser\")}),g(\"h\",[\"6\"],function(a){return a(\"tinymce.html.Schema\")}),g(\"d\",[\"a\",\"g\",\"h\"],function(a,b,c){function d(b,c){return a.each(c,function(a){b=a.constructor==RegExp?b.replace(a,\"\"):b.replace(a[0],a[1])}),b}function e(e){function f(a){var b=a.name,c=a;if(\"br\"===b)return void(i+=\"\\n\");if(j[b]&&(i+=\" \"),k[b])return void(i+=\" \");if(3==a.type&&(i+=a.value),!a.shortEnded&&(a=a.firstChild))do f(a);while(a=a.next);l[b]&&c.next&&(i+=\"\\n\",\"p\"==b&&(i+=\"\\n\"))}var g=new c,h=new b({},g),i=\"\",j=g.getShortEndedElements(),k=a.makeMap(\"script noscript style textarea video audio iframe object\",\" \"),l=g.getBlockElements();return e=d(e,[/<!\\[[^\\]]+\\]>/g]),f(h.parse(e)),i}function f(a){function b(a,b,c){return b||c?\"\\xa0\":\" \"}return a=d(a,[/^[\\s\\S]*<body[^>]*>\\s*|\\s*<\\/body[^>]*>[\\s\\S]*$/gi,/<!--StartFragment-->|<!--EndFragment-->/g,[/( ?)<span class=\"Apple-converted-space\">\\u00a0<\\/span>( ?)/g,b],/<br class=\"Apple-interchange-newline\">/g,/<br>$/i])}function g(a){var b=0;return function(){return a+b++}}var h=function(){return navigator.userAgent.indexOf(\" Edge/\")!==-1};return{filter:d,innerText:e,trimHtml:f,createIdGenerator:g,isMsEdge:h}}),g(\"3\",[\"8\",\"c\",\"d\"],function(a,b,c){var d=function(){},e=function(b){return a.iOS===!1&&void 0!==b&&\"function\"==typeof b.setData&&c.isMsEdge()!==!0},f=function(a,c,d){if(!e(a))return!1;try{return a.clearData(),a.setData(\"text/html\",c),a.setData(\"text/plain\",d),a.setData(b.internalHtmlMime(),c),!0}catch(a){return!1}},g=function(a,b,c,d){f(a.clipboardData,b.html,b.text)?(a.preventDefault(),d()):c(b.html,d)},h=function(a){return function(c,d){var e=b.mark(c),f=a.dom.create(\"div\",{contenteditable:\"false\"}),g=a.dom.create(\"div\",{contenteditable:\"true\"},e);a.dom.setStyles(f,{position:\"fixed\",left:\"-3000px\",width:\"1000px\",overflow:\"hidden\"}),f.appendChild(g),a.dom.add(a.getBody(),f);var h=a.selection.getRng();g.focus();var i=a.dom.createRng();i.selectNodeContents(g),a.selection.setRng(i),setTimeout(function(){f.parentNode.removeChild(f),a.selection.setRng(h),d()},0)}},i=function(a){return{html:a.selection.getContent({contextual:!0}),text:a.selection.getContent({format:\"text\"})}},j=function(a){return function(b){a.selection.isCollapsed()===!1&&g(b,i(a),h(a),function(){a.execCommand(\"Delete\")})}},k=function(a){return function(b){a.selection.isCollapsed()===!1&&g(b,i(a),h(a),d)}},l=function(a){a.on(\"cut\",j(a)),a.on(\"copy\",k(a))};return{register:l}}),g(\"k\",[\"6\"],function(a){return a(\"tinymce.html.Entities\")}),g(\"e\",[\"a\",\"k\"],function(a,b){var c=function(a){return!/<(?:(?!\\/?(?:div|p|br))[^>]*|(?:div|p|br)\\s+\\w[^>]+)>/.test(a)},d=function(a){return a.replace(/\\r?\\n/g,\"<br>\")},e=function(a,c){var d,e=[],f=\"<\"+a;if(\"object\"==typeof c){for(d in c)c.hasOwnProperty(d)&&e.push(d+'=\"'+b.encodeAllRaw(c[d])+'\"');e.length&&(f+=\" \"+e.join(\" \"))}return f+\">\"},f=function(b,c,d){var f=b.split(/\\n\\n/),g=e(c,d),h=\"</\"+c+\">\",i=a.map(f,function(a){return a.split(/\\n/).join(\"<br />\")}),j=function(a){return g+a+h};return 1===i.length?i[0]:a.map(i,j).join(\"\")},g=function(a,b,c){return b?f(a,b,c):d(a)};return{isPlainText:c,convert:g,toBRs:d,toBlockElements:f}}),g(\"f\",[\"a\"],function(a){var b=function(a){return/^https?:\\/\\/[\\w\\?\\-\\/+=.&%@~#]+$/i.test(a)},c=function(a){return b(a)&&/.(gif|jpe?g|png)$/.test(a)},d=function(a,b,c){return a.undoManager.extra(function(){c(a,b)},function(){a.insertContent('<img src=\"'+b+'\">')}),!0},e=function(a,b,c){return a.undoManager.extra(function(){c(a,b)},function(){a.execCommand(\"mceInsertLink\",!1,b)}),!0},f=function(a,c,d){return!(a.selection.isCollapsed()!==!1||!b(c))&&e(a,c,d)},g=function(a,b,e){return!!c(b)&&d(a,b,e)},h=function(a,b){return a.insertContent(b,{merge:a.settings.paste_merge_formats!==!1,paste:!0}),!0},i=function(b,c){a.each([f,g,h],function(a){return a(b,c,h)!==!0})},j=function(a,b){a.settings.smart_paste===!1?h(a,b):i(a,b)};return{isImageUrl:c,isAbsoluteUrl:b,insertContent:j}}),g(\"2\",[\"7\",\"8\",\"9\",\"a\",\"b\",\"3\",\"c\",\"e\",\"f\",\"d\"],function(a,b,c,d,e,f,g,h,i,j){return function(f){function k(a,b){var c,d,e=f.dom;if(d=b||g.isMarked(a),a=g.unmark(a),c=f.fire(\"BeforePastePreProcess\",{content:a,internal:d}),c=f.fire(\"PastePreProcess\",c),a=c.content,!c.isDefaultPrevented()){if(f.hasEventListeners(\"PastePostProcess\")&&!c.isDefaultPrevented()){var h=e.add(f.getBody(),\"div\",{style:\"display:none\"},a);c=f.fire(\"PastePostProcess\",{node:h,internal:d}),e.remove(h),a=c.node.innerHTML}c.isDefaultPrevented()||i.insertContent(f,a)}}function l(a){a=f.dom.encode(a).replace(/\\r\\n/g,\"\\n\"),a=h.convert(a,f.settings.forced_root_block,f.settings.forced_root_block_attrs),k(a,!1)}function m(){function a(a){var b,c,e,f=a.startContainer;if(b=a.getClientRects(),b.length)return b[0];if(a.collapsed&&1==f.nodeType){for(e=f.childNodes[D.startOffset];e&&3==e.nodeType&&!e.data.length;)e=e.nextSibling;if(e)return\"BR\"==e.tagName&&(c=d.doc.createTextNode(\"\\ufeff\"),e.parentNode.insertBefore(c,e),a=d.createRng(),a.setStartBefore(c),a.setEndAfter(c),b=a.getClientRects(),d.remove(c)),b.length?b[0]:void 0}}var c,d=f.dom,e=f.getBody(),g=f.dom.getViewPort(f.getWin()),h=g.y,i=20;if(D=f.selection.getRng(),f.inline&&(c=f.selection.getScrollContainer(),c&&c.scrollTop>0&&(h=c.scrollTop)),D.getClientRects){var j=a(D);if(j)i=h+(j.top-d.getPos(e).y);else{i=h;var k=D.startContainer;k&&(3==k.nodeType&&k.parentNode!=e&&(k=k.parentNode),1==k.nodeType&&(i=d.getPos(k,c||e).y))}}C=d.add(f.getBody(),\"div\",{id:\"mcepastebin\",contentEditable:!0,\"data-mce-bogus\":\"all\",style:\"position: absolute; top: \"+i+\"px;width: 10px; height: 10px; overflow: hidden; opacity: 0\"},I),(b.ie||b.gecko)&&d.setStyle(C,\"left\",\"rtl\"==d.getStyle(e,\"direction\",!0)?65535:-65535),d.bind(C,\"beforedeactivate focusin focusout\",function(a){a.stopPropagation()}),C.focus(),f.selection.select(C,!0)}function n(){if(C){for(var a;a=f.dom.get(\"mcepastebin\");)f.dom.remove(a),f.dom.unbind(a);D&&f.selection.setRng(D)}C=D=null}function o(){var a,b,c,d,e=\"\";for(a=f.dom.select(\"div[id=mcepastebin]\"),b=0;b<a.length;b++)c=a[b],c.firstChild&&\"mcepastebin\"==c.firstChild.id&&(c=c.firstChild),d=c.innerHTML,e!=I&&(e+=d);return e}function p(a){var b={};if(a){if(a.getData){var c=a.getData(\"Text\");c&&c.length>0&&c.indexOf(J)==-1&&(b[\"text/plain\"]=c)}if(a.types)for(var d=0;d<a.types.length;d++){var e=a.types[d];try{b[e]=a.getData(e)}catch(a){b[e]=\"\"}}}return b}function q(a){var b=p(a.clipboardData||f.getDoc().dataTransfer);return j.isMsEdge()?d.extend(b,{\"text/html\":\"\"}):b}function r(a){return z(a,\"text/html\")||z(a,\"text/plain\")}function s(a){var b;return b=a.indexOf(\",\"),b!==-1?a.substr(b+1):null}function t(a,b){return!a.images_dataimg_filter||a.images_dataimg_filter(b)}function u(a){var b=a.match(/([\\s\\S]+?)\\.(?:jpeg|jpg|png|gif)$/i);return b?f.dom.encode(b[1]):null}function v(a,b,c){a&&(f.selection.setRng(a),a=null);var d=b.result,e=s(d),g=K(),h=f.settings.images_reuse_filename&&c.name?u(c.name):g,i=new Image;if(i.src=d,t(f.settings,i)){var j,l,m=f.editorUpload.blobCache;l=m.findFirst(function(a){return a.base64()===e}),l?j=l:(j=m.create(g,c,e,h),m.add(j)),k('<img src=\"'+j.blobUri()+'\">',!1)}else k('<img src=\"'+d+'\">',!1)}function w(a,b){function c(c){var d,e,f,g=!1;if(c)for(d=0;d<c.length;d++)if(e=c[d],/^image\\/(jpeg|png|gif|bmp)$/.test(e.type)){var h=e.getAsFile?e.getAsFile():e;f=new FileReader,f.onload=v.bind(null,b,f,h),f.readAsDataURL(h),a.preventDefault(),g=!0}return g}var d=a.clipboardData||a.dataTransfer;if(f.settings.paste_data_images&&d)return c(d.items)||c(d.files)}function x(a){var b=a.clipboardData;return navigator.userAgent.indexOf(\"Android\")!=-1&&b&&b.items&&0===b.items.length}function y(b){return a.getCaretRangeFromPoint(b.clientX,b.clientY,f.getDoc())}function z(a,b){return b in a&&a[b].length>0}function A(a){return e.metaKeyPressed(a)&&86==a.keyCode||a.shiftKey&&45==a.keyCode}function B(){function a(a,b,c,d){var e,g;return z(a,\"text/html\")?e=a[\"text/html\"]:(e=o(),e==I&&(c=!0)),e=j.trimHtml(e),C&&C.firstChild&&\"mcepastebin\"===C.firstChild.id&&(c=!0),n(),g=d===!1&&h.isPlainText(e),e.length&&!g||(c=!0),c&&(e=z(a,\"text/plain\")&&g?a[\"text/plain\"]:j.innerText(e)),e==I?void(b||f.windowManager.alert(\"Please use Ctrl+V/Cmd+V keyboard shortcuts to paste contents.\")):void(c?l(e):k(e,d))}function d(a){var b=a[\"text/plain\"];return!!b&&0===b.indexOf(\"file://\")}f.on(\"keydown\",function(a){function c(a){A(a)&&!a.isDefaultPrevented()&&n()}if(A(a)&&!a.isDefaultPrevented()){if(E=a.shiftKey&&86==a.keyCode,E&&b.webkit&&navigator.userAgent.indexOf(\"Version/\")!=-1)return;if(a.stopImmediatePropagation(),G=(new Date).getTime(),b.ie&&E)return a.preventDefault(),void f.fire(\"paste\",{ieFake:!0});n(),m(),f.once(\"keyup\",c),f.once(\"paste\",function(){f.off(\"keyup\",c)})}});var e=function(){return D||f.selection.getRng()};f.on(\"paste\",function(d){var h=(new Date).getTime(),i=q(d),j=(new Date).getTime()-h,k=(new Date).getTime()-G-j<1e3,l=\"text\"==F.pasteFormat||E,p=z(i,g.internalHtmlMime());return E=!1,d.isDefaultPrevented()||x(d)?void n():!r(i)&&w(d,e())?void n():(k||d.preventDefault(),!b.ie||k&&!d.ieFake||z(i,\"text/html\")||(m(),f.dom.bind(C,\"paste\",function(a){a.stopPropagation()}),f.getDoc().execCommand(\"Paste\",!1,null),i[\"text/html\"]=o()),void(z(i,\"text/html\")?(d.preventDefault(),a(i,k,l,p)):c.setEditorTimeout(f,function(){a(i,k,l,p)},0)))}),f.on(\"dragstart dragend\",function(a){H=\"dragstart\"==a.type}),f.on(\"drop\",function(a){var b,e;if(e=y(a),!a.isDefaultPrevented()&&!H){b=p(a.dataTransfer);var h=z(b,g.internalHtmlMime());if((r(b)&&!d(b)||!w(a,e))&&e&&f.settings.paste_filter_drop!==!1){var i=b[\"mce-internal\"]||b[\"text/html\"]||b[\"text/plain\"];i&&(a.preventDefault(),c.setEditorTimeout(f,function(){f.undoManager.transact(function(){b[\"mce-internal\"]&&f.execCommand(\"Delete\"),f.selection.setRng(e),i=j.trimHtml(i),b[\"text/html\"]?k(i,h):l(i)})}))}}}),f.on(\"dragover dragend\",function(a){f.settings.paste_data_images&&a.preventDefault()})}var C,D,E,F=this,G=0,H=!1,I=\"%MCEPASTEBIN%\",J=\"data:text/mce-internal,\",K=j.createIdGenerator(\"mceclip\");F.pasteHtml=k,F.pasteText=l,F.pasteImageData=w,f.on(\"preInit\",function(){B(),f.parser.addNodeFilter(\"img\",function(a,c,d){function e(a){return a.data&&a.data.paste===!0}function g(a){a.attr(\"data-mce-object\")||k===b.transparentSrc||a.remove()}function h(a){return 0===a.indexOf(\"webkit-fake-url\")}function i(a){return 0===a.indexOf(\"data:\")}if(!f.settings.paste_data_images&&e(d))for(var j=a.length;j--;){var k=a[j].attributes.map.src;k&&(h(k)?g(a[j]):!f.settings.allow_html_data_urls&&i(k)&&g(a[j]))}})})}}),g(\"i\",[\"6\"],function(a){return a(\"tinymce.html.Serializer\")}),g(\"j\",[\"6\"],function(a){return a(\"tinymce.html.Node\")}),g(\"5\",[\"a\",\"g\",\"h\",\"i\",\"j\",\"d\"],function(a,b,c,d,e,f){function g(a){return/<font face=\"Times New Roman\"|class=\"?Mso|style=\"[^\"]*\\bmso-|style='[^'']*\\bmso-|w:WordDocument/i.test(a)||/class=\"OutlineElement/.test(a)||/id=\"?docs\\-internal\\-guid\\-/.test(a)}function h(b){var c,d;return d=[/^[IVXLMCD]{1,2}\\.[ \\u00a0]/,/^[ivxlmcd]{1,2}\\.[ \\u00a0]/,/^[a-z]{1,2}[\\.\\)][ \\u00a0]/,/^[A-Z]{1,2}[\\.\\)][ \\u00a0]/,/^[0-9]+\\.[ \\u00a0]/,/^[\\u3007\\u4e00\\u4e8c\\u4e09\\u56db\\u4e94\\u516d\\u4e03\\u516b\\u4e5d]+\\.[ \\u00a0]/,/^[\\u58f1\\u5f10\\u53c2\\u56db\\u4f0d\\u516d\\u4e03\\u516b\\u4e5d\\u62fe]+\\.[ \\u00a0]/],b=b.replace(/^[\\u00a0 ]+/,\"\"),a.each(d,function(a){if(a.test(b))return c=!0,!1}),c}function i(a){return/^[\\s\\u00a0]*[\\u2022\\u00b7\\u00a7\\u25CF]\\s*/.test(a)}function j(j){var k=j.settings;j.on(\"BeforePastePreProcess\",function(l){function m(a){function b(a){var c=\"\";if(3===a.type)return a.value;if(a=a.firstChild)do c+=b(a);while(a=a.next);return c}function c(a,b){if(3===a.type&&b.test(a.value))return a.value=a.value.replace(b,\"\"),!1;if(a=a.firstChild)do if(!c(a,b))return!1;while(a=a.next);return!0}function d(a){if(a._listIgnore)return void a.remove();if(a=a.firstChild)do d(a);while(a=a.next)}function f(a,b,f){var h=a._listLevel||k;h!=k&&(h<k?g&&(g=g.parent.parent):(j=g,g=null)),g&&g.name==b?g.append(a):(j=j||g,g=new e(b,1),f>1&&g.attr(\"start\",\"\"+f),a.wrap(g)),a.name=\"li\",h>k&&j&&j.lastChild.append(g),k=h,d(a),c(a,/^\\u00a0+/),c(a,/^\\s*([\\u2022\\u00b7\\u00a7\\u25CF]|\\w+\\.)/),c(a,/^\\u00a0+/)}for(var g,j,k=1,l=[],m=a.firstChild;\"undefined\"!=typeof m&&null!==m;)if(l.push(m),m=m.walk(),null!==m)for(;\"undefined\"!=typeof m&&m.parent!==a;)m=m.walk();for(var n=0;n<l.length;n++)if(a=l[n],\"p\"==a.name&&a.firstChild){var o=b(a);if(i(o)){f(a,\"ul\");continue}if(h(o)){var p=/([0-9]+)\\./.exec(o),q=1;p&&(q=parseInt(p[1],10)),f(a,\"ol\",q);continue}if(a._listLevel){f(a,\"ul\",1);continue}g=null}else j=g,g=null}function n(b,c){var d,f={},g=j.dom.parseStyle(c);return a.each(g,function(a,e){switch(e){case\"mso-list\":d=/\\w+ \\w+([0-9]+)/i.exec(c),d&&(b._listLevel=parseInt(d[1],10)),/Ignore/i.test(a)&&b.firstChild&&(b._listIgnore=!0,b.firstChild._listIgnore=!0);break;case\"horiz-align\":e=\"text-align\";break;case\"vert-align\":e=\"vertical-align\";break;case\"font-color\":case\"mso-foreground\":e=\"color\";break;case\"mso-background\":case\"mso-highlight\":e=\"background\";break;case\"font-weight\":case\"font-style\":return void(\"normal\"!=a&&(f[e]=a));case\"mso-element\":if(/^(comment|comment-list)$/i.test(a))return void b.remove()}return 0===e.indexOf(\"mso-comment\")?void b.remove():void(0!==e.indexOf(\"mso-\")&&(\"all\"==o||p&&p[e])&&(f[e]=a))}),/(bold)/i.test(f[\"font-weight\"])&&(delete f[\"font-weight\"],b.wrap(new e(\"b\",1))),/(italic)/i.test(f[\"font-style\"])&&(delete f[\"font-style\"],b.wrap(new e(\"i\",1))),f=j.dom.serializeStyle(f,b.name),f?f:null}var o,p,q=l.content;if(q=q.replace(/<b[^>]+id=\"?docs-internal-[^>]*>/gi,\"\"),q=q.replace(/<br class=\"?Apple-interchange-newline\"?>/gi,\"\"),o=k.paste_retain_style_properties,o&&(p=a.makeMap(o.split(/[, ]/))),k.paste_enable_default_filters!==!1&&g(l.content)){l.wordContent=!0,q=f.filter(q,[/<!--[\\s\\S]+?-->/gi,/<(!|script[^>]*>.*?<\\/script(?=[>\\s])|\\/?(\\?xml(:\\w+)?|img|meta|link|style|\\w:\\w+)(?=[\\s\\/>]))[^>]*>/gi,[/<(\\/?)s>/gi,\"<$1strike>\"],[/&nbsp;/gi,\"\\xa0\"],[/<span\\s+style\\s*=\\s*\"\\s*mso-spacerun\\s*:\\s*yes\\s*;?\\s*\"\\s*>([\\s\\u00a0]*)<\\/span>/gi,function(a,b){return b.length>0?b.replace(/./,\" \").slice(Math.floor(b.length/2)).split(\"\").join(\"\\xa0\"):\"\"}]]);var r=k.paste_word_valid_elements;r||(r=\"-strong/b,-em/i,-u,-span,-p,-ol,-ul,-li,-h1,-h2,-h3,-h4,-h5,-h6,-p/div,-a[href|name],sub,sup,strike,br,del,table[width],tr,td[colspan|rowspan|width],th[colspan|rowspan|width],thead,tfoot,tbody\");var s=new c({valid_elements:r,valid_children:\"-li[p]\"});a.each(s.elements,function(a){a.attributes[\"class\"]||(a.attributes[\"class\"]={},a.attributesOrder.push(\"class\")),a.attributes.style||(a.attributes.style={},a.attributesOrder.push(\"style\"))});var t=new b({},s);t.addAttributeFilter(\"style\",function(a){for(var b,c=a.length;c--;)b=a[c],b.attr(\"style\",n(b,b.attr(\"style\"))),\"span\"==b.name&&b.parent&&!b.attributes.length&&b.unwrap()}),t.addAttributeFilter(\"class\",function(a){for(var b,c,d=a.length;d--;)b=a[d],c=b.attr(\"class\"),/^(MsoCommentReference|MsoCommentText|msoDel)$/i.test(c)&&b.remove(),b.attr(\"class\",null)}),t.addNodeFilter(\"del\",function(a){for(var b=a.length;b--;)a[b].remove()}),t.addNodeFilter(\"a\",function(a){for(var b,c,d,e=a.length;e--;)if(b=a[e],c=b.attr(\"href\"),d=b.attr(\"name\"),c&&c.indexOf(\"#_msocom_\")!=-1)b.remove();else if(c&&0===c.indexOf(\"file://\")&&(c=c.split(\"#\")[1],c&&(c=\"#\"+c)),c||d){if(d&&!/^_?(?:toc|edn|ftn)/i.test(d)){b.unwrap();continue}b.attr({href:c,name:d})}else b.unwrap()});var u=t.parse(q);k.paste_convert_word_fake_lists!==!1&&m(u),l.content=new d({validate:k.validate},s).serialize(u)}})}return j.isWordContent=g,j}),g(\"4\",[\"8\",\"a\",\"5\",\"d\"],function(a,b,c,d){\"use strict\";return function(e){function f(a){e.on(\"BeforePastePreProcess\",function(b){b.content=a(b.content)})}function g(a){e.on(\"PastePostProcess\",function(b){a(b.node)})}function h(a){if(!c.isWordContent(a))return a;var f=[];b.each(e.schema.getBlockElements(),function(a,b){f.push(b)});var g=new RegExp(\"(?:<br>&nbsp;[\\\\s\\\\r\\\\n]+|<br>)*(<\\\\/?(\"+f.join(\"|\")+\")[^>]*>)(?:<br>&nbsp;[\\\\s\\\\r\\\\n]+|<br>)*\",\"g\");return a=d.filter(a,[[g,\"$1\"]]),a=d.filter(a,[[/<br><br>/g,\"<BR><BR>\"],[/<br>/g,\" \"],[/<BR><BR>/g,\"<br>\"]])}function i(a){if(c.isWordContent(a))return a;var b=e.settings.paste_webkit_styles;if(e.settings.paste_remove_styles_if_webkit===!1||\"all\"==b)return a;if(b&&(b=b.split(/[, ]/)),b){var d=e.dom,f=e.selection.getNode();a=a.replace(/(<[^>]+) style=\"([^\"]*)\"([^>]*>)/gi,function(a,c,e,g){var h=d.parseStyle(d.decode(e),\"span\"),i={};if(\"none\"===b)return c+g;for(var j=0;j<b.length;j++){var k=h[b[j]],l=d.getStyle(f,b[j],!0);/color/.test(b[j])&&(k=d.toHex(k),l=d.toHex(l)),l!=k&&(i[b[j]]=k)}return i=d.serializeStyle(i,\"span\"),i?c+' style=\"'+i+'\"'+g:c+g})}else a=a.replace(/(<[^>]+) style=\"([^\"]*)\"([^>]*>)/gi,\"$1$3\");return a=a.replace(/(<[^>]+) data-mce-style=\"([^\"]+)\"([^>]*>)/gi,function(a,b,c,d){return b+' style=\"'+c+'\"'+d})}function j(a){e.$(\"a\",a).find(\"font,u\").each(function(a,b){e.dom.remove(b,!0)})}a.webkit&&f(i),a.ie&&(f(h),g(j))}}),g(\"0\",[\"1\",\"2\",\"3\",\"4\",\"5\"],function(a,b,c,d,e){var f;return a.add(\"paste\",function(g){function h(){return f||g.settings.paste_plaintext_inform===!1}function i(){if(\"text\"==k.pasteFormat)k.pasteFormat=\"html\",g.fire(\"PastePlainTextToggle\",{state:!1});else if(k.pasteFormat=\"text\",g.fire(\"PastePlainTextToggle\",{state:!0}),!h()){var a=g.translate(\"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.\");g.notificationManager.open({text:a,type:\"info\"}),f=!0}g.focus()}function j(){var a=this;a.active(\"text\"===k.pasteFormat),g.on(\"PastePlainTextToggle\",function(b){a.active(b.state)})}var k,l=this,m=g.settings;return/(^|[ ,])powerpaste([, ]|$)/.test(m.plugins)&&a.get(\"powerpaste\")?void(\"undefined\"!=typeof console&&console.log&&console.log(\"PowerPaste is incompatible with Paste plugin! Remove 'paste' from the 'plugins' option.\")):(l.clipboard=k=new b(g),l.quirks=new d(g),l.wordFilter=new e(g),g.settings.paste_as_text&&(l.clipboard.pasteFormat=\"text\"),m.paste_preprocess&&g.on(\"PastePreProcess\",function(a){m.paste_preprocess.call(l,l,a)}),m.paste_postprocess&&g.on(\"PastePostProcess\",function(a){m.paste_postprocess.call(l,l,a)}),g.addCommand(\"mceInsertClipboardContent\",function(a,b){b.content&&l.clipboard.pasteHtml(b.content,b.internal),b.text&&l.clipboard.pasteText(b.text)}),g.settings.paste_block_drop&&g.on(\"dragend dragover draggesture dragdrop drop drag\",function(a){a.preventDefault(),a.stopPropagation()}),g.settings.paste_data_images||g.on(\"drop\",function(a){var b=a.dataTransfer;b&&b.files&&b.files.length>0&&a.preventDefault()}),g.addCommand(\"mceTogglePlainTextPaste\",i),g.addButton(\"pastetext\",{icon:\"pastetext\",tooltip:\"Paste as text\",onclick:i,onPostRender:j}),g.addMenuItem(\"pastetext\",{text:\"Paste as text\",selectable:!0,active:k.pasteFormat,onclick:i,onPostRender:j}),void c.register(g))}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"4\",tinymce.util.Tools.resolve),g(\"1\",[\"4\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"2\",[\"4\"],function(a){return a(\"tinymce.Env\")}),g(\"3\",[\"4\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"0\",[\"1\",\"2\",\"3\"],function(a,b,c){return a.add(\"preview\",function(a){var d=a.settings,e=!b.ie;a.addCommand(\"mcePreview\",function(){a.windowManager.open({title:\"Preview\",width:parseInt(a.getParam(\"plugin_preview_width\",\"650\"),10),height:parseInt(a.getParam(\"plugin_preview_height\",\"500\"),10),html:'<iframe src=\"javascript:\\'\\'\" frameborder=\"0\"'+(e?' sandbox=\"allow-scripts\"':\"\")+\"></iframe>\",buttons:{text:\"Close\",onclick:function(){this.parent().parent().close()}},onPostRender:function(){var b,f=\"\",g=a.dom.encode;f+='<base href=\"'+g(a.documentBaseURI.getURI())+'\">',c.each(a.contentCSS,function(b){f+='<link type=\"text/css\" rel=\"stylesheet\" href=\"'+g(a.documentBaseURI.toAbsolute(b))+'\">'});var h=d.body_id||\"tinymce\";h.indexOf(\"=\")!=-1&&(h=a.getParam(\"body_id\",\"\",\"hash\"),h=h[a.id]||h);var i=d.body_class||\"\";i.indexOf(\"=\")!=-1&&(i=a.getParam(\"body_class\",\"\",\"hash\"),i=i[a.id]||\"\");var j='<script>document.addEventListener && document.addEventListener(\"click\", function(e) {for (var elm = e.target; elm; elm = elm.parentNode) {if (elm.nodeName === \"A\") {e.preventDefault();}}}, false);</script> ',k=a.settings.directionality?' dir=\"'+a.settings.directionality+'\"':\"\";if(b=\"<!DOCTYPE html><html><head>\"+f+'</head><body id=\"'+g(h)+'\" class=\"mce-content-body '+g(i)+'\"'+g(k)+\">\"+a.getContent()+j+\"</body></html>\",e)this.getEl(\"body\").firstChild.src=\"data:text/html;charset=utf-8,\"+encodeURIComponent(b);else{var l=this.getEl(\"body\").firstChild.contentWindow.document;l.open(),l.write(b),l.close()}}})}),a.addButton(\"preview\",{title:\"Preview\",cmd:\"mcePreview\"}),a.addMenuItem(\"preview\",{text:\"Preview\",cmd:\"mcePreview\",context:\"view\"})}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"2\",tinymce.util.Tools.resolve),g(\"1\",[\"2\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"0\",[\"1\"],function(a){return a.add(\"print\",function(a){a.addCommand(\"mcePrint\",function(){a.getWin().print()}),a.addButton(\"print\",{title:\"Print\",cmd:\"mcePrint\"}),a.addShortcut(\"Meta+P\",\"\",\"mcePrint\"),a.addMenuItem(\"print\",{text:\"Print\",cmd:\"mcePrint\",icon:\"print\",shortcut:\"Meta+P\",context:\"file\"})}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"5\",tinymce.util.Tools.resolve),g(\"1\",[\"5\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"2\",[\"5\"],function(a){return a(\"tinymce.dom.DOMUtils\")}),g(\"3\",[\"5\"],function(a){return a(\"tinymce.EditorManager\")}),g(\"4\",[\"5\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"0\",[\"1\",\"2\",\"3\",\"4\"],function(a,b,c,d){return a.add(\"save\",function(a){function e(){var d;if(d=b.DOM.getParent(a.id,\"form\"),!a.getParam(\"save_enablewhendirty\",!0)||a.isDirty())return c.triggerSave(),a.getParam(\"save_onsavecallback\")?(a.execCallback(\"save_onsavecallback\",a),void a.nodeChanged()):void(d?(a.setDirty(!1),d.onsubmit&&!d.onsubmit()||(\"function\"==typeof d.submit?d.submit():f(a.translate(\"Error: Form submit field collision.\"))),a.nodeChanged()):f(a.translate(\"Error: No form element found.\")))}function f(b){a.notificationManager.open({text:b,type:\"error\"})}function g(){var b=d.trim(a.startContent);return a.getParam(\"save_oncancelcallback\")?void a.execCallback(\"save_oncancelcallback\",a):(a.setContent(b),a.undoManager.clear(),void a.nodeChanged())}function h(){var b=this;a.on(\"nodeChange dirty\",function(){b.disabled(a.getParam(\"save_enablewhendirty\",!0)&&!a.isDirty())})}a.addCommand(\"mceSave\",e),a.addCommand(\"mceCancel\",g),a.addButton(\"save\",{icon:\"save\",text:\"Save\",cmd:\"mceSave\",disabled:!0,onPostRender:h}),a.addButton(\"cancel\",{text:\"Cancel\",icon:!1,cmd:\"mceCancel\",disabled:!0,onPostRender:h}),a.addShortcut(\"Meta+S\",\"\",\"mceSave\")}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"4\",tinymce.util.Tools.resolve),g(\"1\",[\"4\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"2\",[\"4\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"3\",[],function(){function a(a){return a&&1==a.nodeType&&\"false\"===a.contentEditable}function b(b,c,d,e,f){function g(a,b){if(b=b||0,!a[0])throw\"findAndReplaceDOMText cannot handle zero-length matches\";var c=a.index;if(b>0){var d=a[b];if(!d)throw\"Invalid capture group\";c+=a[0].indexOf(d),a[0]=d}return[c,c+a[0].length,[a[0]]]}function h(b){var c;if(3===b.nodeType)return b.data;if(o[b.nodeName]&&!n[b.nodeName])return\"\";if(c=\"\",a(b))return\"\\n\";if((n[b.nodeName]||p[b.nodeName])&&(c+=\"\\n\"),b=b.firstChild)do c+=h(b);while(b=b.nextSibling);return c}function i(b,c,d){var e,f,g,h,i=[],j=0,k=b,l=c.shift(),m=0;a:for(;;){if((n[k.nodeName]||p[k.nodeName]||a(k))&&j++,3===k.nodeType&&(!f&&k.length+j>=l[1]?(f=k,h=l[1]-j):e&&i.push(k),!e&&k.length+j>l[0]&&(e=k,g=l[0]-j),j+=k.length),e&&f){if(k=d({startNode:e,startNodeIndex:g,endNode:f,endNodeIndex:h,innerNodes:i,match:l[2],matchIndex:m}),j-=f.length-h,e=null,f=null,i=[],l=c.shift(),m++,!l)break}else if(o[k.nodeName]&&!n[k.nodeName]||!k.firstChild){if(k.nextSibling){k=k.nextSibling;continue}}else if(!a(k)){k=k.firstChild;continue}for(;;){if(k.nextSibling){k=k.nextSibling;break}if(k.parentNode===b)break a;k=k.parentNode}}}function j(a){var b;if(\"function\"!=typeof a){var c=a.nodeType?a:m.createElement(a);b=function(a,b){var d=c.cloneNode(!1);return d.setAttribute(\"data-mce-index\",b),a&&d.appendChild(m.createTextNode(a)),d}}else b=a;return function(a){var c,d,e,f=a.startNode,g=a.endNode,h=a.matchIndex;if(f===g){var i=f;e=i.parentNode,a.startNodeIndex>0&&(c=m.createTextNode(i.data.substring(0,a.startNodeIndex)),e.insertBefore(c,i));var j=b(a.match[0],h);return e.insertBefore(j,i),a.endNodeIndex<i.length&&(d=m.createTextNode(i.data.substring(a.endNodeIndex)),e.insertBefore(d,i)),i.parentNode.removeChild(i),j}c=m.createTextNode(f.data.substring(0,a.startNodeIndex)),d=m.createTextNode(g.data.substring(a.endNodeIndex));for(var k=b(f.data.substring(a.startNodeIndex),h),l=[],n=0,o=a.innerNodes.length;n<o;++n){var p=a.innerNodes[n],q=b(p.data,h);p.parentNode.replaceChild(q,p),l.push(q)}var r=b(g.data.substring(0,a.endNodeIndex),h);return e=f.parentNode,e.insertBefore(c,f),e.insertBefore(k,f),e.removeChild(f),e=g.parentNode,e.insertBefore(r,g),e.insertBefore(d,g),e.removeChild(g),r}}var k,l,m,n,o,p,q=[],r=0;if(m=c.ownerDocument,n=f.getBlockElements(),o=f.getWhiteSpaceElements(),p=f.getShortEndedElements(),l=h(c)){if(b.global)for(;k=b.exec(l);)q.push(g(k,e));else k=l.match(b),q.push(g(k,e));return q.length&&(r=q.length,i(c,q,j(d))),r}}return{findAndReplaceDOMText:b}}),g(\"0\",[\"1\",\"2\",\"3\"],function(a,b,c){function d(a){function d(){function c(){g.statusbar.find(\"#next\").disabled(!h(m+1).length),g.statusbar.find(\"#prev\").disabled(!h(m-1).length)}function d(){a.windowManager.alert(\"Could not find the specified string.\",function(){g.find(\"#find\")[0].focus()})}var e,f={};e=b.trim(a.selection.getContent({format:\"text\"}));var g=a.windowManager.open({layout:\"flex\",pack:\"center\",align:\"center\",onClose:function(){a.focus(),l.done()},onSubmit:function(a){var b,e,i,j;return a.preventDefault(),e=g.find(\"#case\").checked(),j=g.find(\"#words\").checked(),i=g.find(\"#find\").value(),i.length?f.text==i&&f.caseState==e&&f.wholeWord==j?0===h(m+1).length?void d():(l.next(),void c()):(b=l.find(i,e,j),b||d(),g.statusbar.items().slice(1).disabled(0===b),c(),void(f={text:i,caseState:e,wholeWord:j})):(l.done(!1),void g.statusbar.items().slice(1).disabled(!0))},buttons:[{text:\"Find\",subtype:\"primary\",onclick:function(){g.submit()}},{text:\"Replace\",disabled:!0,onclick:function(){l.replace(g.find(\"#replace\").value())||(g.statusbar.items().slice(1).disabled(!0),m=-1,f={})}},{text:\"Replace all\",disabled:!0,onclick:function(){l.replace(g.find(\"#replace\").value(),!0,!0),g.statusbar.items().slice(1).disabled(!0),f={}}},{type:\"spacer\",flex:1},{text:\"Prev\",name:\"prev\",disabled:!0,onclick:function(){l.prev(),c()}},{text:\"Next\",name:\"next\",disabled:!0,onclick:function(){l.next(),c()}}],title:\"Find and replace\",items:{type:\"form\",padding:20,labelGap:30,spacing:10,items:[{type:\"textbox\",name:\"find\",size:40,label:\"Find\",value:e},{type:\"textbox\",name:\"replace\",size:40,label:\"Replace with\"},{type:\"checkbox\",name:\"case\",text:\"Match case\",label:\" \"},{type:\"checkbox\",name:\"words\",text:\"Whole words\",label:\" \"}]}})}function e(a){var b=a.getAttribute(\"data-mce-index\");return\"number\"==typeof b?\"\"+b:b}function f(b){var d,e;return e=a.dom.create(\"span\",{\"data-mce-bogus\":1}),e.className=\"mce-match-marker\",d=a.getBody(),l.done(!1),c.findAndReplaceDOMText(b,d,e,!1,a.schema)}function g(a){var b=a.parentNode;a.firstChild&&b.insertBefore(a.firstChild,a),a.parentNode.removeChild(a)}function h(c){var d,f=[];if(d=b.toArray(a.getBody().getElementsByTagName(\"span\")),d.length)for(var g=0;g<d.length;g++){var h=e(d[g]);null!==h&&h.length&&h===c.toString()&&f.push(d[g])}return f}function i(b){var c=m,d=a.dom;b=b!==!1,b?c++:c--,d.removeClass(h(m),\"mce-match-marker-selected\");var e=h(c);return e.length?(d.addClass(h(c),\"mce-match-marker-selected\"),a.selection.scrollIntoView(e[0]),c):-1}function j(b){var c=a.dom,d=b.parentNode;c.remove(b),c.isEmpty(d)&&c.remove(d)}function k(a){var b=e(a);return null!==b&&b.length>0}var l=this,m=-1;l.init=function(a){a.addMenuItem(\"searchreplace\",{text:\"Find and replace\",shortcut:\"Meta+F\",onclick:d,separator:\"before\",context:\"edit\"}),a.addButton(\"searchreplace\",{tooltip:\"Find and replace\",shortcut:\"Meta+F\",onclick:d}),a.addCommand(\"SearchReplace\",d),a.shortcuts.add(\"Meta+F\",\"\",d)},l.find=function(a,b,c){a=a.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\"\\\\$&\"),a=c?\"\\\\b\"+a+\"\\\\b\":a;var d=f(new RegExp(a,b?\"g\":\"gi\"));return d&&(m=-1,m=i(!0)),d},l.next=function(){var a=i(!0);a!==-1&&(m=a)},l.prev=function(){var a=i(!1);a!==-1&&(m=a)},l.replace=function(c,d,f){var i,n,o,p,q,r,s=m;for(d=d!==!1,o=a.getBody(),n=b.grep(b.toArray(o.getElementsByTagName(\"span\")),k),i=0;i<n.length;i++){var t=e(n[i]);if(p=q=parseInt(t,10),f||p===m){for(c.length?(n[i].firstChild.nodeValue=c,g(n[i])):j(n[i]);n[++i];){if(p=parseInt(e(n[i]),10),p!==q){i--;break}j(n[i])}d&&s--}else q>m&&n[i].setAttribute(\"data-mce-index\",q-1)}return a.undoManager.add(),m=s,d?(r=h(s+1).length>0,l.next()):(r=h(s-1).length>0,l.prev()),!f&&r},l.done=function(c){var d,f,h,i;for(f=b.toArray(a.getBody().getElementsByTagName(\"span\")),d=0;d<f.length;d++){var j=e(f[d]);null!==j&&j.length&&(j===m.toString()&&(h||(h=f[d].firstChild),i=f[d].firstChild),g(f[d]))}if(h&&i){var k=a.dom.createRng();return k.setStart(h,0),k.setEnd(i,i.data.length),c!==!1&&a.selection.setRng(k),k}}}return a.add(\"searchreplace\",d),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};g(\"1\",[],function(){function a(a){return a&&1==a.nodeType&&\"false\"===a.contentEditable}return function(b,c){function d(a,b){if(!a[0])throw\"findAndReplaceDOMText cannot handle zero-length matches\";return{start:a.index,end:a.index+a[0].length,text:a[0],data:b}}function e(b){var c;if(3===b.nodeType)return b.data;if(y[b.nodeName]&&!x[b.nodeName])return\"\";if(a(b))return\"\\n\";if(c=\"\",(x[b.nodeName]||z[b.nodeName])&&(c+=\"\\n\"),b=b.firstChild)do c+=e(b);while(b=b.nextSibling);return c}function f(b,c,d){var e,f,g,h,i,j=[],k=0,l=b,m=0;c=c.slice(0),c.sort(function(a,b){return a.start-b.start}),i=c.shift();a:for(;;){if((x[l.nodeName]||z[l.nodeName]||a(l))&&k++,3===l.nodeType&&(!f&&l.length+k>=i.end?(f=l,h=i.end-k):e&&j.push(l),!e&&l.length+k>i.start&&(e=l,g=i.start-k),k+=l.length),e&&f){if(l=d({startNode:e,startNodeIndex:g,endNode:f,endNodeIndex:h,innerNodes:j,match:i.text,matchIndex:m}),k-=f.length-h,e=null,f=null,j=[],i=c.shift(),m++,!i)break}else if(y[l.nodeName]&&!x[l.nodeName]||!l.firstChild){if(l.nextSibling){l=l.nextSibling;continue}}else if(!a(l)){l=l.firstChild;continue}for(;;){if(l.nextSibling){l=l.nextSibling;break}if(l.parentNode===b)break a;l=l.parentNode}}}function g(a){function b(b,c){var d=A[c];d.stencil||(d.stencil=a(d));var e=d.stencil.cloneNode(!1);return e.setAttribute(\"data-mce-index\",c),b&&e.appendChild(B.doc.createTextNode(b)),e}return function(a){var c,d,e,f=a.startNode,g=a.endNode,h=a.matchIndex,i=B.doc;if(f===g){var j=f;e=j.parentNode,a.startNodeIndex>0&&(c=i.createTextNode(j.data.substring(0,a.startNodeIndex)),e.insertBefore(c,j));var k=b(a.match,h);return e.insertBefore(k,j),a.endNodeIndex<j.length&&(d=i.createTextNode(j.data.substring(a.endNodeIndex)),e.insertBefore(d,j)),j.parentNode.removeChild(j),k}c=i.createTextNode(f.data.substring(0,a.startNodeIndex)),d=i.createTextNode(g.data.substring(a.endNodeIndex));for(var l=b(f.data.substring(a.startNodeIndex),h),m=[],n=0,o=a.innerNodes.length;n<o;++n){var p=a.innerNodes[n],q=b(p.data,h);p.parentNode.replaceChild(q,p),m.push(q)}var r=b(g.data.substring(0,a.endNodeIndex),h);return e=f.parentNode,e.insertBefore(c,f),e.insertBefore(l,f),e.removeChild(f),e=g.parentNode,e.insertBefore(r,g),e.insertBefore(d,g),e.removeChild(g),r}}function h(a){var b=a.parentNode;b.insertBefore(a.firstChild,a),a.parentNode.removeChild(a)}function i(a){var c=b.getElementsByTagName(\"*\"),d=[];a=\"number\"==typeof a?\"\"+a:null;for(var e=0;e<c.length;e++){var f=c[e],g=f.getAttribute(\"data-mce-index\");null!==g&&g.length&&(g!==a&&null!==a||d.push(f))}return d}function j(a){for(var b=A.length;b--;)if(A[b]===a)return b;return-1}function k(a){var b=[];return l(function(c,d){a(c,d)&&b.push(c)}),A=b,this}function l(a){for(var b=0,c=A.length;b<c&&a(A[b],b)!==!1;b++);return this}function m(a){return A.length&&f(b,A,g(a)),this}function n(a,b){if(w&&a.global)for(;v=a.exec(w);)A.push(d(v,b));return this}function o(a){var b,c=i(a?j(a):null);for(b=c.length;b--;)h(c[b]);return this}function p(a){return A[a.getAttribute(\"data-mce-index\")]}function q(a){return i(j(a))[0]}function r(a,b,c){return A.push({start:a,end:a+b,text:w.substr(a,b),data:c}),this}function s(a){var b=i(j(a)),d=c.dom.createRng();return d.setStartBefore(b[0]),d.setEndAfter(b[b.length-1]),d}function t(a,b){var d=s(a);return d.deleteContents(),b.length>0&&d.insertNode(c.dom.doc.createTextNode(b)),d}function u(){return A.splice(0,A.length),o(),this}var v,w,x,y,z,A=[],B=c.dom;return x=c.schema.getBlockElements(),y=c.schema.getWhiteSpaceElements(),z=c.schema.getShortEndedElements(),w=e(b),{text:w,matches:A,each:l,filter:k,reset:u,matchFromElement:p,elementFromMatch:q,find:n,add:r,wrap:m,unwrap:o,replace:t,rangeFromMatch:s,indexOf:j}}}),h(\"9\",tinymce.util.Tools.resolve),g(\"2\",[\"9\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"3\",[\"9\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"4\",[\"9\"],function(a){return a(\"tinymce.ui.Menu\")}),g(\"5\",[\"9\"],function(a){return a(\"tinymce.dom.DOMUtils\")}),g(\"6\",[\"9\"],function(a){return a(\"tinymce.util.XHR\")}),g(\"7\",[\"9\"],function(a){return a(\"tinymce.util.URI\")}),g(\"8\",[\"9\"],function(a){return a(\"tinymce.util.JSON\")}),g(\"0\",[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\"],function(a,b,c,d,e,f,g,h){return b.add(\"spellchecker\",function(i,j){function k(){return F.textMatcher||(F.textMatcher=new a(i.getBody(),i)),F.textMatcher}function l(a,b){var d=[];return c.each(b,function(a){d.push({selectable:!0,text:a.name,data:a.value})}),d}function m(a){for(var b in a)return!1;return!0}function n(a,b){var f=[],g=B[a];c.each(g,function(a){f.push({text:a,onclick:function(){i.insertContent(i.dom.encode(a)),i.dom.remove(b),s()}})}),f.push({text:\"-\"}),E&&f.push({text:\"Add to Dictionary\",onclick:function(){t(a,b)}}),f.push.apply(f,[{text:\"Ignore\",onclick:function(){u(a,b)}},{text:\"Ignore all\",onclick:function(){u(a,b,!0)}}]),D=new d({items:f,context:\"contextmenu\",onautohide:function(a){a.target.className.indexOf(\"spellchecker\")!=-1&&a.preventDefault()},onhide:function(){D.remove(),D=null}}),D.renderTo(document.body);var h=e.DOM.getPos(i.getContentAreaContainer()),j=i.dom.getPos(b[0]),k=i.dom.getRoot();\"BODY\"==k.nodeName?(j.x-=k.ownerDocument.documentElement.scrollLeft||k.scrollLeft,j.y-=k.ownerDocument.documentElement.scrollTop||k.scrollTop):(j.x-=k.scrollLeft,j.y-=k.scrollTop),h.x+=j.x,h.y+=j.y,D.moveTo(h.x,h.y+b[0].offsetHeight)}function o(){return i.getParam(\"spellchecker_wordchar_pattern\")||new RegExp('[^\\\\s!\"#$%&()*+,-./:;<=>?@[\\\\]^_{|}`\\xa7\\xa9\\xab\\xae\\xb1\\xb6\\xb7\\xb8\\xbb\\xbc\\xbd\\xbe\\xbf\\xd7\\xf7\\xa4\\u201d\\u201c\\u201e\\xa0\\u2002\\u2003\\u2009]+',\"g\")}function p(a,b,d,e){var k={method:a,lang:G.spellchecker_language},l=\"\";k[\"addToDictionary\"==a?\"word\":\"text\"]=b,c.each(k,function(a,b){l&&(l+=\"&\"),l+=b+\"=\"+encodeURIComponent(a)}),f.send({url:new g(j).toAbsolute(G.spellchecker_rpc_url),type:\"post\",content_type:\"application/x-www-form-urlencoded\",data:l,success:function(a){if(a=h.parse(a))a.error?e(a.error):d(a);else{var b=i.translate(\"Server response wasn't proper JSON.\");e(b)}},error:function(){var a=i.translate(\"The spelling service was not found: (\")+G.spellchecker_rpc_url+i.translate(\")\");e(a)}})}function q(a,b,c,d){var e=G.spellchecker_callback||p;e.call(F,a,b,c,d)}function r(){function a(a){i.notificationManager.open({text:a,type:\"error\"}),i.setProgressState(!1),v()}v()||(i.setProgressState(!0),q(\"spellcheck\",k().text,z,a),i.focus())}function s(){i.dom.select(\"span.mce-spellchecker-word\").length||v()}function t(a,b){i.setProgressState(!0),q(\"addToDictionary\",a,function(){i.setProgressState(!1),i.dom.remove(b,!0),s()},function(a){i.notificationManager.open({text:a,type:\"error\"}),i.setProgressState(!1)})}function u(a,b,d){i.selection.collapse(),d?c.each(i.dom.select(\"span.mce-spellchecker-word\"),function(b){b.getAttribute(\"data-mce-word\")==a&&i.dom.remove(b,!0)}):i.dom.remove(b,!0),s()}function v(){if(k().reset(),F.textMatcher=null,C)return C=!1,i.fire(\"SpellcheckEnd\"),!0}function w(a){var b=a.getAttribute(\"data-mce-index\");return\"number\"==typeof b?\"\"+b:b}function x(a){var b,d=[];if(b=c.toArray(i.getBody().getElementsByTagName(\"span\")),b.length)for(var e=0;e<b.length;e++){var f=w(b[e]);null!==f&&f.length&&f===a.toString()&&d.push(b[e])}return d}function y(a){var b=G.spellchecker_language;a.control.items().each(function(a){a.active(a.settings.data===b)})}function z(a){var b;if(a.words?(E=!!a.dictionary,b=a.words):b=a,i.setProgressState(!1),m(b)){var c=i.translate(\"No misspellings found.\");return i.notificationManager.open({text:c,type:\"info\"}),void(C=!1)}B=b,k().find(o()).filter(function(a){return!!b[a.text]}).wrap(function(a){return i.dom.create(\"span\",{\"class\":\"mce-spellchecker-word\",\"data-mce-bogus\":1,\"data-mce-word\":a.text})}),C=!0,i.fire(\"SpellcheckStart\")}var A,B,C,D,E,F=this,G=i.settings;if(/(^|[ ,])tinymcespellchecker([, ]|$)/.test(G.plugins)&&b.get(\"tinymcespellchecker\"))return void(\"undefined\"!=typeof console&&console.log&&console.log(\"Spell Checker Pro is incompatible with Spell Checker plugin! Remove 'spellchecker' from the 'plugins' option.\"));var H=G.spellchecker_languages||\"English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr_FR,German=de,Italian=it,Polish=pl,Portuguese=pt_BR,Spanish=es,Swedish=sv\";A=l(\"Language\",c.map(H.split(\",\"),function(a){return a=a.split(\"=\"),{name:a[0],value:a[1]}})),i.on(\"click\",function(a){var b=a.target;if(\"mce-spellchecker-word\"==b.className){a.preventDefault();var c=x(w(b));if(c.length>0){var d=i.dom.createRng();d.setStartBefore(c[0]),d.setEndAfter(c[c.length-1]),i.selection.setRng(d),n(b.getAttribute(\"data-mce-word\"),c)}}}),i.addMenuItem(\"spellchecker\",{text:\"Spellcheck\",context:\"tools\",onclick:r,selectable:!0,onPostRender:function(){var a=this;a.active(C),i.on(\"SpellcheckStart SpellcheckEnd\",function(){a.active(C)})}});var I={tooltip:\"Spellcheck\",onclick:r,onPostRender:function(){var a=this;i.on(\"SpellcheckStart SpellcheckEnd\",function(){a.active(C)})}};A.length>1&&(I.type=\"splitbutton\",I.menu=A,I.onshow=y,I.onselect=function(a){G.spellchecker_language=a.control.settings.data}),i.addButton(\"spellchecker\",I),i.addCommand(\"mceSpellCheck\",r),i.on(\"remove\",function(){D&&(D.remove(),D=null)}),i.on(\"change\",s),this.getTextMatcher=k,this.getWordCharPattern=o,this.markErrors=z,this.getLanguage=function(){return G.spellchecker_language},G.spellchecker_language=G.spellchecker_language||G.language||\"en\"}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"7\",tinymce.util.Tools.resolve),g(\"1\",[\"7\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"2\",[\"7\"],function(a){return a(\"tinymce.dom.DOMUtils\")}),g(\"3\",[\"7\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"4\",[\"7\"],function(a){return a(\"tinymce.EditorManager\")}),g(\"5\",[\"7\"],function(a){return a(\"tinymce.util.Delay\")}),g(\"6\",[\"7\"],function(a){return a(\"tinymce.Env\")}),g(\"0\",[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\"],function(a,b,c,d,e,f){return a.add(\"tabfocus\",function(a){function g(a){9!==a.keyCode||a.ctrlKey||a.altKey||a.metaKey||a.preventDefault()}function h(b){function g(e){function f(a){return\"BODY\"===a.nodeName||\"hidden\"!=a.type&&\"none\"!=a.style.display&&\"hidden\"!=a.style.visibility&&f(a.parentNode)}function g(a){return/INPUT|TEXTAREA|BUTTON/.test(a.tagName)&&d.get(b.id)&&a.tabIndex!=-1&&f(a)}if(j=i.select(\":input:enabled,*[tabindex]:not(iframe)\"),c.each(j,function(b,c){if(b.id==a.id)return h=c,!1}),e>0){for(l=h+1;l<j.length;l++)if(g(j[l]))return j[l]}else for(l=h-1;l>=0;l--)if(g(j[l]))return j[l];return null}var h,j,k,l;if(!(9!==b.keyCode||b.ctrlKey||b.altKey||b.metaKey||b.isDefaultPrevented())&&(k=c.explode(a.getParam(\"tab_focus\",a.getParam(\"tabfocus_elements\",\":prev,:next\"))),1==k.length&&(k[1]=k[0],k[0]=\":prev\"),j=b.shiftKey?\":prev\"==k[0]?g(-1):i.get(k[0]):\":next\"==k[1]?g(1):i.get(k[1]))){var m=d.get(j.id||j.name);j.id&&m?m.focus():e.setTimeout(function(){f.webkit||window.focus(),j.focus()},10),b.preventDefault()}}var i=b.DOM;a.on(\"init\",function(){a.inline&&i.setAttrib(a.getBody(),\"tabIndex\",null),a.on(\"keyup\",g),f.gecko?a.on(\"keypress keydown\",h):a.on(\"keydown\",h)})}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"b\",tinymce.util.Tools.resolve),g(\"1\",[\"b\"],function(a){return a(\"tinymce.dom.TreeWalker\")}),g(\"2\",[\"b\"],function(a){return a(\"tinymce.Env\")}),g(\"3\",[\"b\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"4\",[\"b\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"5\",[\"b\"],function(a){return a(\"tinymce.util.VK\")}),g(\"c\",[\"2\"],function(a){function b(b){(!a.ie||a.ie>9)&&(b.hasChildNodes()||(b.innerHTML='<br data-mce-bogus=\"1\" />'))}var c=function(a){return function(b,c){b&&(c=parseInt(c,10),1===c||0===c?b.removeAttribute(a,1):b.setAttribute(a,c,1))}},d=function(a){return function(b){return parseInt(b.getAttribute(a)||1,10)}};return{setColSpan:c(\"colSpan\"),setRowSpan:c(\"rowspan\"),getColSpan:d(\"colSpan\"),getRowSpan:d(\"rowSpan\"),setSpanVal:function(a,b,d){c(b)(a,d)},getSpanVal:function(a,b){return d(b)(a)},paddCell:b}}),g(\"d\",[\"4\",\"c\"],function(a,b){var c=function(a,b,c){return a[c]?a[c][b]:null},d=function(a,b,d){var e=c(a,b,d);return e?e.elm:null},e=function(a,b,e,f){var g,h,i=0,j=d(a,b,e);for(g=e;(f>0?g<a.length:g>=0)&&(h=c(a,b,g),j===h.elm);g+=f)i++;return i},f=function(a,b,c){for(var d,e=a[c],f=b;f<e.length;f++)if(d=e[f],d.real)return d.elm;return null},g=function(a,c){for(var d,f=[],g=a[c],h=0;h<g.length;h++)d=g[h],f.push({elm:d.elm,above:e(a,h,c,-1)-1,below:e(a,h,c,1)-1}),h+=b.getColSpan(d.elm)-1;return f},h=function(a,c){var d=a.elm.ownerDocument,e=d.createElement(\"td\");return b.setColSpan(e,b.getColSpan(a.elm)),b.setRowSpan(e,c),b.paddCell(e),e},i=function(a,b,c,d){var e=f(a,c+1,d);e?e.parentNode.insertBefore(b,e):(e=f(a,0,d),e.parentNode.appendChild(b))},j=function(a,c,d,e){if(0!==c.above){b.setRowSpan(c.elm,c.above);var f=h(c,c.below+1);return i(a,f,d,e),f}return null},k=function(a,c,d,e){if(0!==c.below){b.setRowSpan(c.elm,c.above+1);var f=h(c,c.below);return i(a,f,d,e+1),f}return null},l=function(b,c,e,f){var h=g(b,e),i=d(b,c,e).parentNode,l=[];return a.each(h,function(a,c){var d=f?j(b,a,c,e):k(b,a,c,e);null!==d&&l.push(l)}),{cells:l,row:i}};return{splitAt:l}}),g(\"6\",[\"4\",\"2\",\"c\",\"d\"],function(a,b,c,d){var e=a.each,f=c.getSpanVal,g=c.setSpanVal;return function(h,i,j){function k(){h.$(\"td[data-mce-selected],th[data-mce-selected]\").removeAttr(\"data-mce-selected\")}function l(a){return a===h.getBody()}function m(b,c){return b?(c=a.map(c.split(\",\"),function(a){return a.toLowerCase()}),a.grep(b.childNodes,function(b){return a.inArray(c,b.nodeName.toLowerCase())!==-1})):[]}function n(){var a=0;Z=[],$=0,e([\"thead\",\"tbody\",\"tfoot\"],function(b){var c=m(i,b)[0],d=m(c,\"tr\");e(d,function(c,d){d+=a,e(m(c,\"td,th\"),function(a,c){var e,g,h,i;if(Z[d])for(;Z[d][c];)c++;for(h=f(a,\"rowspan\"),i=f(a,\"colspan\"),g=d;g<d+h;g++)for(Z[g]||(Z[g]=[]),e=c;e<c+i;e++)Z[g][e]={part:b,real:g==d&&e==c,elm:a,rowspan:h,colspan:i};$=Math.max($,c+1)})}),a+=d.length})}function o(a){return h.fire(\"newrow\",{node:a}),a}function p(a){return h.fire(\"newcell\",{node:a}),a}function q(a,b){return a=a.cloneNode(b),a.removeAttribute(\"id\"),a}function r(a,b){var c;if(c=Z[b])return c[a]}function s(a,b){return a[b]?a[b]:null}function t(a,b){for(var c=[],d=0;d<a.length;d++)c.push(r(b,d));return c}function u(a){return a&&(!!ca.getAttrib(a.elm,\"data-mce-selected\")||a==j)}function v(){var a=[];return e(i.rows,function(b){e(b.cells,function(c){if(ca.getAttrib(c,\"data-mce-selected\")||j&&c==j.elm)return a.push(b),!1})}),a}function w(){var a=0;return e(Z,function(b){if(e(b,function(b){u(b)&&a++}),a)return!1}),a}function x(){var a=ca.createRng();l(i)||(a.setStartAfter(i),a.setEndAfter(i),ba.setRng(a),ca.remove(i))}function y(d){var f,i={};return h.settings.table_clone_elements!==!1&&(i=a.makeMap((h.settings.table_clone_elements||\"strong em b i span font h1 h2 h3 h4 h5 h6 p div\").toUpperCase(),/[ ,]/)),a.walk(d,function(a){var c;if(3==a.nodeType)return e(ca.getParents(a.parentNode,null,d).reverse(),function(a){i[a.nodeName]&&(a=q(a,!1),f?c&&c.appendChild(a):f=c=a,c=a)}),c&&(c.innerHTML=b.ie&&b.ie<10?\"&nbsp;\":'<br data-mce-bogus=\"1\" />'),!1},\"childNodes\"),d=q(d,!1),p(d),g(d,\"rowSpan\",1),g(d,\"colSpan\",1),f?d.appendChild(f):c.paddCell(d),d}function z(){var a,b=ca.createRng();return e(ca.select(\"tr\",i),function(a){0===a.cells.length&&ca.remove(a)}),0===ca.select(\"tr\",i).length?(b.setStartBefore(i),b.setEndBefore(i),ba.setRng(b),void ca.remove(i)):(e(ca.select(\"thead,tbody,tfoot\",i),function(a){0===a.rows.length&&ca.remove(a)}),n(),void(_&&(a=Z[Math.min(Z.length-1,_.y)],a&&(ba.select(a[Math.min(a.length-1,_.x)].elm,!0),ba.collapse(!0)))))}function A(a,b,c,d){var e,f,g,h,i;for(e=Z[b][a].elm.parentNode,g=1;g<=c;g++)if(e=ca.getNext(e,\"tr\")){for(f=a;f>=0;f--)if(i=Z[b+g][f].elm,i.parentNode==e){for(h=1;h<=d;h++)ca.insertAfter(y(i),i);break}if(f==-1)for(h=1;h<=d;h++)e.insertBefore(y(e.cells[0]),e.cells[0])}}function B(){e(Z,function(a,b){e(a,function(a,c){var d,e,h;if(u(a)&&(a=a.elm,d=f(a,\"colspan\"),e=f(a,\"rowspan\"),d>1||e>1)){for(g(a,\"rowSpan\",1),g(a,\"colSpan\",1),h=0;h<d-1;h++)ca.insertAfter(y(a),a);A(c,b,e-1,d)}})})}function C(a,b,c){for(var d=[],e=0;e<a.length;e++)(e<b||e>c)&&d.push(a[e]);return d}function D(b){return a.grep(b,function(a){return a.real===!1})}function E(a){for(var b=[],c=0;c<a.length;c++){var d=a[c].elm;b[b.length-1]!==d&&b.push(d)}return b}function F(b,d,e,f,g){var h=0;if(g-e<1)return 0;for(var i=e+1;i<=g;i++){var j=C(s(b,i),d,f),k=D(j);j.length===k.length&&(a.each(E(k),function(a){c.setRowSpan(a,c.getRowSpan(a)-1)}),h++)}return h}function G(b,d,e,f,g){var h=0;if(f-d<1)return 0;for(var i=d+1;i<=f;i++){var j=C(t(b,i),e,g),k=D(j);j.length===k.length&&(a.each(E(k),function(a){c.setColSpan(a,c.getColSpan(a)-1)}),h++)}return h}function H(b,c,d){var f,h,i,j,k,l,m,o,p,q,s,t,v;if(b?(f=T(b),h=f.x,i=f.y,j=h+(c-1),k=i+(d-1)):(_=aa=null,e(Z,function(a,b){e(a,function(a,c){u(a)&&(_||(_={x:c,y:b}),aa={x:c,y:b})})}),_&&(h=_.x,i=_.y,j=aa.x,k=aa.y)),o=r(h,i),p=r(j,k),o&&p&&o.part==p.part){B(),n(),t=F(Z,h,i,j,k),v=G(Z,h,i,j,k),o=r(h,i).elm;var w=j-h-v+1,x=k-i-t+1;for(w===$&&x===Z.length&&(w=1,x=1),w===$&&x>1&&(x=1),g(o,\"colSpan\",w),g(o,\"rowSpan\",x),m=i;m<=k;m++)for(l=h;l<=j;l++)Z[m]&&Z[m][l]&&(b=Z[m][l].elm,b!=o&&(q=a.grep(b.childNodes),e(q,function(a){o.appendChild(a)}),q.length&&(q=a.grep(o.childNodes),s=0,e(q,function(a){\"BR\"==a.nodeName&&s++<q.length-1&&o.removeChild(a)})),ca.remove(b)));z()}}function I(a){var b,c,d,h,i,j,k,l,m,n;if(e(Z,function(c,d){if(e(c,function(c){if(u(c)&&(c=c.elm,i=c.parentNode,j=o(q(i,!1)),b=d,a))return!1}),a)return void 0===b}),void 0!==b){for(h=0,n=0;h<Z[0].length;h+=n)if(Z[b][h]&&(c=Z[b][h].elm,n=f(c,\"colspan\"),c!=d)){if(a){if(b>0&&Z[b-1][h]&&(l=Z[b-1][h].elm,m=f(l,\"rowSpan\"),m>1)){g(l,\"rowSpan\",m+1);continue}}else if(m=f(c,\"rowspan\"),m>1){g(c,\"rowSpan\",m+1);continue}k=y(c),g(k,\"colSpan\",c.colSpan),j.appendChild(k),d=c}j.hasChildNodes()&&(a?i.parentNode.insertBefore(j,i):ca.insertAfter(j,i))}}function J(a,b){b=b||v().length||1;for(var c=0;c<b;c++)I(a)}function K(a){var b,c;e(Z,function(c){if(e(c,function(c,d){if(u(c)&&(b=d,a))return!1}),a)return void 0===b}),e(Z,function(d,e){var h,i,j;d[b]&&(h=d[b].elm,h!=c&&(j=f(h,\"colspan\"),i=f(h,\"rowspan\"),1==j?a?(h.parentNode.insertBefore(y(h),h),A(b,e,i-1,j)):(ca.insertAfter(y(h),h),A(b,e,i-1,j)):g(h,\"colSpan\",h.colSpan+1),c=h))})}function L(a,b){b=b||w()||1;for(var c=0;c<b;c++)K(a)}function M(b){return a.grep(N(b),u)}function N(a){var b=[];return e(a,function(a){e(a,function(a){b.push(a)})}),b}function O(){var b=[];if(l(i)){if(1==Z[0].length)return;if(M(Z).length==N(Z).length)return}e(Z,function(c){e(c,function(c,d){u(c)&&a.inArray(b,d)===-1&&(e(Z,function(a){var b,c=a[d].elm;b=f(c,\"colSpan\"),b>1?g(c,\"colSpan\",b-1):ca.remove(c)}),b.push(d))})}),z()}function P(){function a(a){var b,c;e(a.cells,function(a){var c=f(a,\"rowSpan\");c>1&&(g(a,\"rowSpan\",c-1),b=T(a),A(b.x,b.y,1,1))}),b=T(a.cells[0]),e(Z[b.y],function(a){var b;a=a.elm,a!=c&&(b=f(a,\"rowSpan\"),b<=1?ca.remove(a):g(a,\"rowSpan\",b-1),c=a)})}var b;b=v(),l(i)&&b.length==i.rows.length||(e(b.reverse(),function(b){a(b)}),z())}function Q(){var a=v();if(!l(i)||a.length!=i.rows.length)return ca.remove(a),z(),a}function R(){var a=v();return e(a,function(b,c){a[c]=q(b,!0)}),a}function S(b,c){var h,i,j,l=[];b&&(h=d.splitAt(Z,_.x,_.y,c),i=h.row,a.each(h.cells,p),j=a.map(b,function(a){return a.cloneNode(!0)}),e(j,function(a,b,d){var h,j,k,m,n=a.cells.length,q=0;for(o(a),h=0;h<n;h++)j=a.cells[h],m=f(j,\"colspan\"),k=f(j,\"rowspan\"),q+=m,k>1&&(q--,b+k>d.length?(k=d.length-b,g(j,\"rowSpan\",k),l.push(d.length-1)):l.push(b+k-1)),p(j);for(e(l,function(a){b<=a&&q++}),h=q;h<$;h++)a.appendChild(y(a.cells[n-1]));for(h=$;h<q;h++)j=a.cells[a.cells.length-1],m=f(j,\"colspan\"),m>1?g(j,\"colSpan\",m-1):ca.remove(j);c?i.parentNode.insertBefore(a,i):i=ca.insertAfter(a,i)}),k())}function T(a){var b;return e(Z,function(c,d){return e(c,function(c,e){if(c.elm==a)return b={x:e,y:d},!1}),!b}),b}function U(a){_=T(a)}function V(){var a,b;return a=b=0,e(Z,function(c,d){e(c,function(c,e){var f,g;u(c)&&(c=Z[d][e],e>a&&(a=e),d>b&&(b=d),c.real&&(f=c.colspan-1,g=c.rowspan-1,f&&e+f>a&&(a=e+f),g&&d+g>b&&(b=d+g)))})}),{x:a,y:b}}function W(a){var b,c,d,e,f,g,h,i,j,l;if(aa=T(a),_&&aa){for(b=Math.min(_.x,aa.x),c=Math.min(_.y,aa.y),d=Math.max(_.x,aa.x),e=Math.max(_.y,aa.y),f=d,g=e,l=c;l<=e;l++)for(j=b;j<=d;j++)a=Z[l][j],a.real&&(h=a.colspan-1,i=a.rowspan-1,h&&j+h>f&&(f=j+h),i&&l+i>g&&(g=l+i));for(k(),l=c;l<=g;l++)for(j=b;j<=f;j++)Z[l][j]&&ca.setAttrib(Z[l][j].elm,\"data-mce-selected\",\"1\")}}function X(a,b){var c,d,e;c=T(a),d=c.y*$+c.x;do{if(d+=b,e=r(d%$,Math.floor(d/$)),!e)break;if(e.elm!=a)return ba.select(e.elm,!0),ca.isEmpty(e.elm)&&ba.collapse(!0),!0}while(e.elm==a);return!1}function Y(b){if(_){var c=d.splitAt(Z,_.x,_.y,b);a.each(c.cells,p)}}var Z,$,_,aa,ba=h.selection,ca=ba.dom;i=i||ca.getParent(ba.getStart(!0),\"table\"),n(),j=j||ca.getParent(ba.getStart(!0),\"th,td\"),j&&(_=T(j),aa=V(),j=r(_.x,_.y)),a.extend(this,{deleteTable:x,split:B,merge:H,insertRow:I,insertRows:J,insertCol:K,insertCols:L,splitCols:Y,deleteCols:O,deleteRows:P,cutRows:Q,copyRows:R,pasteRows:S,getPos:T,setStartCell:U,setEndCell:W,moveRelIdx:X,refresh:n})}}),g(\"7\",[\"6\",\"1\",\"4\"],function(a,b,c){return function(d,e){function f(a){d.getBody().style.webkitUserSelect=\"\",(a||p)&&(d.$(\"td[data-mce-selected],th[data-mce-selected]\").removeAttr(\"data-mce-selected\"),p=!1)}function g(a,b){return!(!a||!b)&&a===o.getParent(b,\"table\")}function h(b){var c,f,h=b.target;if(!m&&!n&&h!==l&&(l=h,k&&j)){if(f=o.getParent(h,\"td,th\"),g(k,f)||(f=o.getParent(k,\"td,th\")),j===f&&!p)return;if(e(!0),g(k,f)){b.preventDefault(),i||(i=new a(d,k,j),d.getBody().style.webkitUserSelect=\"none\"),i.setEndCell(f),p=!0,c=d.selection.getSel();try{c.removeAllRanges?c.removeAllRanges():c.empty()}catch(a){}}}}var i,j,k,l,m,n,o=d.dom,p=!0,q=function(){j=i=k=l=null,e(!1)};return d.on(\"SelectionChange\",function(a){p&&a.stopImmediatePropagation()},!0),d.on(\"MouseDown\",function(a){2==a.button||m||n||(f(),j=o.getParent(a.target,\"td,th\"),k=o.getParent(j,\"table\"))}),d.on(\"mouseover\",h),d.on(\"remove\",function(){o.unbind(d.getDoc(),\"mouseover\",h),f()}),d.on(\"MouseUp\",function(){function a(a,d){var f=new b(a,a);do{if(3==a.nodeType&&0!==c.trim(a.nodeValue).length)return void(d?e.setStart(a,0):e.setEnd(a,a.nodeValue.length));if(\"BR\"==a.nodeName)return void(d?e.setStartBefore(a):e.setEndBefore(a))}while(a=d?f.next():f.prev())}var e,f,g,h,k,l=d.selection;if(j){if(i&&(d.getBody().style.webkitUserSelect=\"\"),f=o.select(\"td[data-mce-selected],th[data-mce-selected]\"),f.length>0){e=o.createRng(),h=f[0],e.setStartBefore(h),e.setEndAfter(h),a(h,1),g=new b(h,o.getParent(f[0],\"table\"));do if(\"TD\"==h.nodeName||\"TH\"==h.nodeName){if(!o.getAttrib(h,\"data-mce-selected\"))break;k=h}while(h=g.next());a(k),l.setRng(e)}d.nodeChanged(),q()}}),d.on(\"KeyUp Drop SetContent\",function(a){f(\"setcontent\"==a.type),q(),m=!1}),d.on(\"ObjectResizeStart ObjectResized\",function(a){m=\"objectresized\"!=a.type}),d.on(\"dragstart\",function(){n=!0}),d.on(\"drop dragend\",function(){n=!1}),{clear:f}}}),g(\"8\",[\"4\",\"2\"],function(a,b){var c=a.each;return function(d){function e(){var a=d.settings.color_picker_callback;if(a)return function(){var b=this;a.call(d,function(a){b.value(a).fire(\"change\")},b.value())}}function f(a){return{title:\"Advanced\",type:\"form\",defaults:{onchange:function(){l(a,this.parents().reverse()[0],\"style\"==this.name())}},items:[{label:\"Style\",name:\"style\",type:\"textbox\"},{type:\"form\",padding:0,formItemDefaults:{layout:\"grid\",alignH:[\"start\",\"right\"]},defaults:{size:7},items:[{label:\"Border color\",type:\"colorbox\",name:\"borderColor\",onaction:e()},{label:\"Background color\",type:\"colorbox\",name:\"backgroundColor\",onaction:e()}]}]}}function g(a){return a?a.replace(/px$/,\"\"):\"\"}function h(a){return/^[0-9]+$/.test(a)&&(a+=\"px\"),a}function i(a){c(\"left center right\".split(\" \"),function(b){d.formatter.remove(\"align\"+b,{},a)})}function j(a){c(\"top middle bottom\".split(\" \"),function(b){d.formatter.remove(\"valign\"+b,{},a)})}function k(b,c,d){function e(b,d){return d=d||[],a.each(b,function(a){var b={text:a.text||a.title};a.menu?b.menu=e(a.menu):(b.value=a.value,c&&c(b)),d.push(b)}),d}return e(b,d||[])}function l(a,b,c){var d=b.toJSON(),e=a.parseStyle(d.style);c?(b.find(\"#borderColor\").value(e[\"border-color\"]||\"\")[0].fire(\"change\"),b.find(\"#backgroundColor\").value(e[\"background-color\"]||\"\")[0].fire(\"change\")):(e[\"border-color\"]=d.borderColor,e[\"background-color\"]=d.backgroundColor),b.find(\"#style\").value(a.serializeStyle(a.parseStyle(a.serializeStyle(e))))}function m(a,b,c){var d=a.parseStyle(a.getAttrib(c,\"style\"));d[\"border-color\"]&&(b.borderColor=d[\"border-color\"]),d[\"background-color\"]&&(b.backgroundColor=d[\"background-color\"]),b.style=a.serializeStyle(d)}function n(a,b,d){var e=a.parseStyle(a.getAttrib(b,\"style\"));c(d,function(a){e[a.name]=a.value}),a.setAttrib(b,\"style\",a.serializeStyle(a.parseStyle(a.serializeStyle(e))))}var o=this;o.tableProps=function(){o.table(!0)},o.table=function(e){function j(){function c(a,b,d){if(\"TD\"===a.tagName||\"TH\"===a.tagName)v.setStyle(a,b,d);else if(a.children)for(var e=0;e<a.children.length;e++)c(a.children[e],b,d)}var e;l(v,this),w=a.extend(w,this.toJSON()),w[\"class\"]===!1&&delete w[\"class\"],d.undoManager.transact(function(){if(p||(p=d.plugins.table.insertTable(w.cols||1,w.rows||1)),d.dom.setAttribs(p,{style:w.style,\"class\":w[\"class\"]}),d.settings.table_style_by_css){if(u=[],u.push({name:\"border\",value:w.border}),u.push({name:\"border-spacing\",value:h(w.cellspacing)}),n(v,p,u),v.setAttribs(p,{\"data-mce-border-color\":w.borderColor,\"data-mce-cell-padding\":w.cellpadding,\"data-mce-border\":w.border}),p.children)for(var a=0;a<p.children.length;a++)c(p.children[a],\"border\",w.border),c(p.children[a],\"padding\",h(w.cellpadding))}else d.dom.setAttribs(p,{border:w.border,cellpadding:w.cellpadding,cellspacing:w.cellspacing});v.getAttrib(p,\"width\")&&!d.settings.table_style_by_css?v.setAttrib(p,\"width\",g(w.width)):v.setStyle(p,\"width\",h(w.width)),v.setStyle(p,\"height\",h(w.height)),e=v.select(\"caption\",p)[0],e&&!w.caption&&v.remove(e),!e&&w.caption&&(e=v.create(\"caption\"),e.innerHTML=b.ie?\"\\xa0\":'<br data-mce-bogus=\"1\"/>',p.insertBefore(e,p.firstChild)),i(p),w.align&&d.formatter.apply(\"align\"+w.align,{},p),d.focus(),d.addVisual()})}function o(a,b){function c(a,c){for(var d=0;d<c.length;d++){var e=v.getStyle(c[d],b);if(\"undefined\"==typeof a&&(a=e),a!=e)return\"\"}return a}var e,f=d.dom.select(\"td,th\",a);return e=c(e,f)}var p,q,r,s,t,u,v=d.dom,w={};e===!0?(p=v.getParent(d.selection.getStart(),\"table\"),p&&(w={width:g(v.getStyle(p,\"width\")||v.getAttrib(p,\"width\")),height:g(v.getStyle(p,\"height\")||v.getAttrib(p,\"height\")),cellspacing:g(v.getStyle(p,\"border-spacing\")||v.getAttrib(p,\"cellspacing\")),cellpadding:v.getAttrib(p,\"data-mce-cell-padding\")||v.getAttrib(p,\"cellpadding\")||o(p,\"padding\"),border:v.getAttrib(p,\"data-mce-border\")||v.getAttrib(p,\"border\")||o(p,\"border\"),borderColor:v.getAttrib(p,\"data-mce-border-color\"),caption:!!v.select(\"caption\",p)[0],\"class\":v.getAttrib(p,\"class\")},c(\"left center right\".split(\" \"),function(a){d.formatter.matchNode(p,\"align\"+a)&&(w.align=a)}))):(q={label:\"Cols\",name:\"cols\"},r={label:\"Rows\",name:\"rows\"}),d.settings.table_class_list&&(w[\"class\"]&&(w[\"class\"]=w[\"class\"].replace(/\\s*mce\\-item\\-table\\s*/g,\"\")),s={name:\"class\",type:\"listbox\",label:\"Class\",values:k(d.settings.table_class_list,function(a){a.value&&(a.textStyle=function(){return d.formatter.getCssText({block:\"table\",classes:[a.value]})})})}),t={type:\"form\",layout:\"flex\",direction:\"column\",labelGapCalc:\"children\",padding:0,items:[{type:\"form\",labelGapCalc:!1,padding:0,layout:\"grid\",columns:2,defaults:{type:\"textbox\",maxWidth:50},items:d.settings.table_appearance_options!==!1?[q,r,{label:\"Width\",name:\"width\"},{label:\"Height\",name:\"height\"},{label:\"Cell spacing\",name:\"cellspacing\"},{label:\"Cell padding\",name:\"cellpadding\"},{label:\"Border\",name:\"border\"},{label:\"Caption\",name:\"caption\",type:\"checkbox\"}]:[q,r,{label:\"Width\",name:\"width\"},{label:\"Height\",name:\"height\"}]},{label:\"Alignment\",name:\"align\",type:\"listbox\",text:\"None\",values:[{text:\"None\",value:\"\"},{text:\"Left\",value:\"left\"},{text:\"Center\",value:\"center\"},{text:\"Right\",value:\"right\"}]},s]},d.settings.table_advtab!==!1?(m(v,w,p),d.windowManager.open({title:\"Table properties\",data:w,bodyType:\"tabpanel\",body:[{title:\"General\",type:\"form\",items:t},f(v)],onsubmit:j})):d.windowManager.open({title:\"Table properties\",data:w,body:t,onsubmit:j})},o.merge=function(a,b){d.windowManager.open({title:\"Merge cells\",body:[{label:\"Cols\",name:\"cols\",type:\"textbox\",value:\"1\",size:10},{label:\"Rows\",name:\"rows\",type:\"textbox\",value:\"1\",size:10}],onsubmit:function(){var c=this.toJSON();d.undoManager.transact(function(){a.merge(b,c.cols,c.rows)})}})},o.cell=function(){function b(a,b,c){(1===s.length||c)&&r.setAttrib(a,b,c)}function e(a,b,c){(1===s.length||c)&&r.setStyle(a,b,c)}function n(){l(r,this),p=a.extend(p,this.toJSON()),d.undoManager.transact(function(){c(s,function(a){b(a,\"scope\",p.scope),b(a,\"style\",p.style),b(a,\"class\",p[\"class\"]),e(a,\"width\",h(p.width)),e(a,\"height\",h(p.height)),p.type&&a.nodeName.toLowerCase()!==p.type&&(a=r.rename(a,p.type)),1===s.length&&(i(a),j(a)),p.align&&d.formatter.apply(\"align\"+p.align,{},a),p.valign&&d.formatter.apply(\"valign\"+p.valign,{},a)}),d.focus()})}var o,p,q,r=d.dom,s=[];if(s=d.dom.select(\"td[data-mce-selected],th[data-mce-selected]\"),o=d.dom.getParent(d.selection.getStart(),\"td,th\"),!s.length&&o&&s.push(o),o=o||s[0]){s.length>1?p={width:\"\",height:\"\",scope:\"\",\"class\":\"\",align:\"\",style:\"\",type:o.nodeName.toLowerCase()}:(p={width:g(r.getStyle(o,\"width\")||r.getAttrib(o,\"width\")),height:g(r.getStyle(o,\"height\")||r.getAttrib(o,\"height\")),scope:r.getAttrib(o,\"scope\"),\"class\":r.getAttrib(o,\"class\")},p.type=o.nodeName.toLowerCase(),c(\"left center right\".split(\" \"),function(a){d.formatter.matchNode(o,\"align\"+a)&&(p.align=a)}),c(\"top middle bottom\".split(\" \"),function(a){d.formatter.matchNode(o,\"valign\"+a)&&(p.valign=a)}),m(r,p,o)),d.settings.table_cell_class_list&&(q={name:\"class\",type:\"listbox\",label:\"Class\",values:k(d.settings.table_cell_class_list,function(a){a.value&&(a.textStyle=function(){return d.formatter.getCssText({block:\"td\",classes:[a.value]})})})});var t={type:\"form\",layout:\"flex\",direction:\"column\",labelGapCalc:\"children\",padding:0,items:[{type:\"form\",layout:\"grid\",columns:2,labelGapCalc:!1,padding:0,defaults:{type:\"textbox\",maxWidth:50},items:[{label:\"Width\",name:\"width\"},{label:\"Height\",name:\"height\"},{label:\"Cell type\",name:\"type\",type:\"listbox\",text:\"None\",minWidth:90,maxWidth:null,values:[{text:\"Cell\",value:\"td\"},{text:\"Header cell\",value:\"th\"}]},{label:\"Scope\",name:\"scope\",type:\"listbox\",text:\"None\",minWidth:90,maxWidth:null,values:[{text:\"None\",value:\"\"},{text:\"Row\",value:\"row\"},{text:\"Column\",value:\"col\"},{text:\"Row group\",value:\"rowgroup\"},{text:\"Column group\",value:\"colgroup\"}]},{label:\"H Align\",name:\"align\",type:\"listbox\",text:\"None\",minWidth:90,maxWidth:null,values:[{text:\"None\",value:\"\"},{text:\"Left\",value:\"left\"},{text:\"Center\",value:\"center\"},{text:\"Right\",value:\"right\"}]},{label:\"V Align\",name:\"valign\",type:\"listbox\",text:\"None\",minWidth:90,maxWidth:null,values:[{text:\"None\",value:\"\"},{text:\"Top\",value:\"top\"},{text:\"Middle\",value:\"middle\"},{text:\"Bottom\",value:\"bottom\"}]}]},q]};d.settings.table_cell_advtab!==!1?d.windowManager.open({title:\"Cell properties\",bodyType:\"tabpanel\",data:p,body:[{title:\"General\",type:\"form\",items:t},f(r)],onsubmit:n}):d.windowManager.open({title:\"Cell properties\",data:p,body:t,onsubmit:n})}},o.row=function(){function b(a,b,c){(1===u.length||c)&&t.setAttrib(a,b,c)}function e(a,b,c){(1===u.length||c)&&t.setStyle(a,b,c)}function j(){var f,g,j;l(t,this),r=a.extend(r,this.toJSON()),d.undoManager.transact(function(){var a=r.type;c(u,function(c){b(c,\"scope\",r.scope),b(c,\"style\",r.style),b(c,\"class\",r[\"class\"]),e(c,\"height\",h(r.height)),a!==c.parentNode.nodeName.toLowerCase()&&(f=t.getParent(c,\"table\"),g=c.parentNode,j=t.select(a,f)[0],j||(j=t.create(a),f.firstChild?f.insertBefore(j,f.firstChild):f.appendChild(j)),j.appendChild(c),g.hasChildNodes()||t.remove(g)),1===u.length&&i(c),r.align&&d.formatter.apply(\"align\"+r.align,{},c)}),d.focus()})}var n,o,p,q,r,s,t=d.dom,u=[];n=d.dom.getParent(d.selection.getStart(),\"table\"),o=d.dom.getParent(d.selection.getStart(),\"td,th\"),c(n.rows,function(a){c(a.cells,function(b){if(t.getAttrib(b,\"data-mce-selected\")||b==o)return u.push(a),!1})}),p=u[0],p&&(u.length>1?r={height:\"\",scope:\"\",\"class\":\"\",align:\"\",type:p.parentNode.nodeName.toLowerCase()}:(r={height:g(t.getStyle(p,\"height\")||t.getAttrib(p,\"height\")),scope:t.getAttrib(p,\"scope\"),\"class\":t.getAttrib(p,\"class\")},r.type=p.parentNode.nodeName.toLowerCase(),c(\"left center right\".split(\" \"),function(a){d.formatter.matchNode(p,\"align\"+a)&&(r.align=a)}),m(t,r,p)),d.settings.table_row_class_list&&(q={name:\"class\",type:\"listbox\",label:\"Class\",values:k(d.settings.table_row_class_list,function(a){a.value&&(a.textStyle=function(){return d.formatter.getCssText({block:\"tr\",classes:[a.value]})})})}),s={type:\"form\",columns:2,padding:0,defaults:{type:\"textbox\"},items:[{type:\"listbox\",name:\"type\",label:\"Row type\",text:\"Header\",maxWidth:null,values:[{text:\"Header\",value:\"thead\"},{text:\"Body\",value:\"tbody\"},{text:\"Footer\",value:\"tfoot\"}]},{type:\"listbox\",name:\"align\",label:\"Alignment\",text:\"None\",maxWidth:null,values:[{text:\"None\",value:\"\"},{text:\"Left\",value:\"left\"},{text:\"Center\",value:\"center\"},{text:\"Right\",value:\"right\"}]},{label:\"Height\",name:\"height\"},q]},d.settings.table_row_advtab!==!1?d.windowManager.open({title:\"Row properties\",data:r,bodyType:\"tabpanel\",body:[{title:\"General\",type:\"form\",items:s},f(t)],onsubmit:j}):d.windowManager.open({title:\"Row properties\",data:r,body:s,onsubmit:j}))}}}),g(\"9\",[\"4\",\"5\"],function(a,b){var c;return function(d){function e(a,b){return{index:a,y:d.dom.getPos(b).y}}function f(a,b){return{index:a,y:d.dom.getPos(b).y+b.offsetHeight}}function g(a,b){return{index:a,x:d.dom.getPos(b).x}}function h(a,b){return{index:a,x:d.dom.getPos(b).x+b.offsetWidth}}function i(){var a=d.getBody().dir;return\"rtl\"===a}function j(){return d.inline}function k(){return j?d.getBody().ownerDocument.body:d.getBody()}function l(a,b){return i()?h(a,b):g(a,b)}function m(a,b){return i()?g(a,b):h(a,b)}function n(a,b){return o(a,\"width\")/o(b,\"width\")*100}function o(a,b){var c=d.dom.getStyle(a,b,!0),e=parseInt(c,10);return e}function p(a){var b=o(a,\"width\"),c=o(a.parentElement,\"width\");return b/c*100}function q(a,b){var c=o(a,\"width\");return b/c*100}function r(a,b){var c=o(a.parentElement,\"width\");return b/c*100}function s(a,b,c){for(var d=[],e=1;e<c.length;e++){var f=c[e].element;d.push(a(e-1,f))}var g=c[c.length-1];return d.push(b(c.length-1,g.element)),d}function t(){var b=d.dom.select(\".\"+la,k());a.each(b,function(a){d.dom.remove(a)})}function u(a){t(),E(a)}function v(a,b,c,d,e,f,g,h){var i={\"data-mce-bogus\":\"all\",\"class\":la+\" \"+a,unselectable:\"on\",\"data-mce-resize\":!1,style:\"cursor: \"+b+\"; margin: 0; padding: 0; position: absolute; left: \"+c+\"px; top: \"+d+\"px; height: \"+e+\"px; width: \"+f+\"px; \"};return i[g]=h,i}function w(b,c,e){a.each(b,function(a){var b=e.x,f=a.y-ua/2,g=ua,h=c;d.dom.add(k(),\"div\",v(ma,na,b,f,g,h,oa,a.index))})}function x(b,c,e){a.each(b,function(a){var b=a.x-ua/2,f=e.y,g=c,h=ua;d.dom.add(k(),\"div\",v(qa,ra,b,f,g,h,sa,a.index))})}function y(b){return a.map(b.rows,function(b){var c=a.map(b.cells,function(a){var b=a.hasAttribute(\"rowspan\")?parseInt(a.getAttribute(\"rowspan\"),10):1,c=a.hasAttribute(\"colspan\")?parseInt(a.getAttribute(\"colspan\"),10):1;return{element:a,rowspan:b,colspan:c}});return{element:b,cells:c}})}function z(b){function c(a,b){return a+\",\"+b}function d(a,b){return g[c(a,b)]}function e(){var b=[];return a.each(h,function(a){b=b.concat(a.cells)}),b}function f(){return h}var g={},h=[],i=0,j=0;return a.each(b,function(b,d){var e=[];a.each(b.cells,function(a){for(var b=0;void 0!==g[c(d,b)];)b++;for(var f={element:a.element,colspan:a.colspan,rowspan:a.rowspan,rowIndex:d,colIndex:b},h=0;h<a.colspan;h++)for(var k=0;k<a.rowspan;k++){var l=d+k,m=b+h;g[c(l,m)]=f,i=Math.max(i,l+1),j=Math.max(j,m+1)}e.push(f)}),h.push({element:b.element,cells:e})}),{grid:{maxRows:i,maxCols:j},getAt:d,getAllCells:e,getAllRows:f}}function A(a,b){for(var c=[],d=a;d<b;d++)c.push(d);return c}function B(a,b,c){for(var d,e=a(),f=0;f<e.length;f++)b(e[f])&&(d=e[f]);return d?d:c()}function C(b){var c=A(0,b.grid.maxCols),d=A(0,b.grid.maxRows);return a.map(c,function(a){function c(){for(var c=[],e=0;e<d.length;e++){var f=b.getAt(e,a);f&&f.colIndex===a&&c.push(f)}return c}function e(a){return 1===a.colspan}function f(){for(var c,e=0;e<d.length;e++)if(c=b.getAt(e,a))return c;return null}return B(c,e,f)})}function D(b){var c=A(0,b.grid.maxCols),d=A(0,b.grid.maxRows);return a.map(d,function(a){function d(){for(var d=[],e=0;e<c.length;e++){var f=b.getAt(a,e);f&&f.rowIndex===a&&d.push(f)}return d}function e(a){return 1===a.rowspan}function f(){return b.getAt(a,0)}return B(d,e,f)})}function E(a){var b=y(a),c=z(b),g=D(c),h=C(c),i=d.dom.getPos(a),j=g.length>0?s(e,f,g):[],k=h.length>0?s(l,m,h):[];w(j,a.offsetWidth,i),x(k,a.offsetHeight,i)}function F(a,b,c,d){if(b<0||b>=a.length-1)return\"\";var e=a[b];if(e)e={value:e,delta:0};else for(var f=a.slice(0,b).reverse(),g=0;g<f.length;g++)f[g]&&(e={value:f[g],delta:g+1});var h=a[b+1];if(h)h={value:h,delta:1};else for(var i=a.slice(b+1),j=0;j<i.length;j++)i[j]&&(h={value:i[j],delta:j+1});var k=h.delta-e.delta,l=Math.abs(h.value-e.value)/k;return c?l/o(d,\"width\")*100:l}function G(a,b){var c=d.dom.getStyle(a,b);return c||(c=d.dom.getAttrib(a,b)),c||(c=d.dom.getStyle(a,b,!0)),c}function H(a,b,c){var d=G(a,\"width\"),e=parseInt(d,10),f=b?n(a,c):o(a,\"width\");return(b&&!Q(d)||!b&&!R(d))&&(e=0),!isNaN(e)&&e>0?e:f}function I(b,c,d){for(var e=C(b),f=a.map(e,function(a){return l(a.colIndex,a.element).x}),g=[],h=0;h<e.length;h++){var i=e[h].element.hasAttribute(\"colspan\")?parseInt(e[h].element.getAttribute(\"colspan\"),10):1,j=i>1?F(f,h):H(e[h].element,c,d);j=j?j:va,g.push(j)}return g}function J(a){var b=G(a,\"height\"),c=parseInt(b,10);return Q(b)&&(c=0),!isNaN(c)&&c>0?c:o(a,\"height\")}function K(b){for(var c=D(b),d=a.map(c,function(a){return e(a.rowIndex,a.element).y}),f=[],g=0;g<c.length;g++){var h=c[g].element.hasAttribute(\"rowspan\")?parseInt(c[g].element.getAttribute(\"rowspan\"),10):1,i=h>1?F(d,g):J(c[g].element);i=i?i:wa,f.push(i)}return f}function L(b,c,d,e,f){function g(b){return a.map(b,function(){return 0})}function h(){var a;if(f)a=[100-l[0]];else{var b=Math.max(e,l[0]+d);a=[b-l[0]]}return a}function i(a,b){var c,f=g(l.slice(0,a)),h=g(l.slice(b+1));if(d>=0){var i=Math.max(e,l[b]-d);c=f.concat([d,i-l[b]]).concat(h)}else{var j=Math.max(e,l[a]+d),k=l[a]-j;c=f.concat([j-l[a],k]).concat(h)}return c}function j(a,b){var c,f=g(l.slice(0,b));if(d>=0)c=f.concat([d]);else{var h=Math.max(e,l[b]+d);c=f.concat([h-l[b]])}return c}var k,l=b.slice(0);return k=0===b.length?[]:1===b.length?h():0===c?i(0,1):c>0&&c<b.length-1?i(c,c+1):c===b.length-1?j(c-1,c):[]}function M(a,b,c){for(var d=0,e=a;e<b;e++)d+=c[e];return d}function N(b,c){var d=b.getAllCells();return a.map(d,function(a){var b=M(a.colIndex,a.colIndex+a.colspan,c);return{element:a.element,width:b,colspan:a.colspan}})}function O(b,c){var d=b.getAllCells();return a.map(d,function(a){var b=M(a.rowIndex,a.rowIndex+a.rowspan,c);return{element:a.element,height:b,rowspan:a.rowspan}})}function P(b,c){var d=b.getAllRows();return a.map(d,function(a,b){return{element:a.element,height:c[b]}})}function Q(a){return ya.test(a)}function R(a){return za.test(a)}function S(b,c,e){function f(b,c){a.each(b,function(a){d.dom.setStyle(a.element,\"width\",a.width+c),d.dom.setAttrib(a.element,\"width\",null)})}function g(){return e<k.grid.maxCols-1?p(b):p(b)+r(b,c)}function h(){return e<k.grid.maxCols-1?o(b,\"width\"):o(b,\"width\")+c}function i(a,c,f){e!=k.grid.maxCols-1&&f||(d.dom.setStyle(b,\"width\",a+c),d.dom.setAttrib(b,\"width\",null))}for(var j=y(b),k=z(j),l=Q(b.width)||Q(b.style.width),m=I(k,l,b),n=l?q(b,c):c,s=L(m,e,n,va,l,b),t=[],u=0;u<s.length;u++)t.push(s[u]+m[u]);var v=N(k,t),w=l?\"%\":\"px\",x=l?g():h();d.undoManager.transact(function(){f(v,w),i(x,w,l)})}function T(b,c,e){for(var f=y(b),g=z(f),h=K(g),i=[],j=0,k=0;k<h.length;k++)i.push(k===e?c+h[k]:h[k]),j+=j[k];var l=O(g,i),m=P(g,i);d.undoManager.transact(function(){a.each(m,function(a){d.dom.setStyle(a.element,\"height\",a.height+\"px\"),d.dom.setAttrib(a.element,\"height\",null)}),a.each(l,function(a){d.dom.setStyle(a.element,\"height\",a.height+\"px\"),d.dom.setAttrib(a.element,\"height\",null)}),d.dom.setStyle(b,\"height\",j+\"px\"),d.dom.setAttrib(b,\"height\",null)})}function U(){fa=setTimeout(function(){Y()},200)}function V(){clearTimeout(fa)}function W(){var a=document.createElement(\"div\");return a.setAttribute(\"style\",\"margin: 0; padding: 0; position: fixed; left: 0px; top: 0px; height: 100%; width: 100%;\"),a.setAttribute(\"data-mce-bogus\",\"all\"),a}function X(a,b){d.dom.bind(a,\"mouseup\",function(){Y()}),d.dom.bind(a,\"mousemove\",function(a){V(),ga&&b(a)}),d.dom.bind(a,\"mouseout\",function(){U()})}function Y(){if(d.dom.remove(ha),ga){d.dom.removeClass(ia,xa),ga=!1;var a,b;if($(ia)){var e=parseInt(d.dom.getAttrib(ia,ta),10),f=d.dom.getPos(ia).x;a=parseInt(d.dom.getAttrib(ia,sa),10),b=i()?e-f:f-e,Math.abs(b)>=1&&S(c,b,a)}else if(_(ia)){var g=parseInt(d.dom.getAttrib(ia,pa),10),h=d.dom.getPos(ia).y;a=parseInt(d.dom.getAttrib(ia,oa),10),b=h-g,Math.abs(b)>=1&&T(c,b,a)}u(c),d.nodeChanged()}}function Z(a,b){ha=ha?ha:W(),ga=!0,d.dom.addClass(a,xa),ia=a,X(ha,b),d.dom.add(k(),ha)}function $(a){return d.dom.hasClass(a,qa)}function _(a){return d.dom.hasClass(a,ma)}function aa(a){ja=void 0!==ja?ja:a.clientX;var b=a.clientX-ja;ja=a.clientX;var c=d.dom.getPos(ia).x;d.dom.setStyle(ia,\"left\",c+b+\"px\")}function ba(a){ka=void 0!==ka?ka:a.clientY;var b=a.clientY-ka;ka=a.clientY;var c=d.dom.getPos(ia).y;d.dom.setStyle(ia,\"top\",c+b+\"px\")}function ca(a){ja=void 0,Z(a,aa)}function da(a){ka=void 0,Z(a,ba)}function ea(a){var b=a.target,e=d.getBody();if(d.$.contains(e,c)||c===e)if($(b)){a.preventDefault();var f=d.dom.getPos(b).x;d.dom.setAttrib(b,ta,f),ca(b)}else if(_(b)){a.preventDefault();var g=d.dom.getPos(b).y;d.dom.setAttrib(b,pa,g),da(b)}else t()}var fa,ga,ha,ia,ja,ka,la=\"mce-resize-bar\",ma=\"mce-resize-bar-row\",na=\"row-resize\",oa=\"data-row\",pa=\"data-initial-top\",qa=\"mce-resize-bar-col\",ra=\"col-resize\",sa=\"data-col\",ta=\"data-initial-left\",ua=4,va=10,wa=10,xa=\"mce-resize-bar-dragging\",ya=new RegExp(/(\\d+(\\.\\d+)?%)/),za=new RegExp(/px|em/);\nreturn d.on(\"init\",function(){d.dom.bind(k(),\"mousedown\",ea)}),d.on(\"ObjectResized\",function(b){var c=b.target;if(\"TABLE\"===c.nodeName){var e=[];a.each(c.rows,function(b){a.each(b.cells,function(a){var b=d.dom.getStyle(a,\"width\",!0);e.push({cell:a,width:b})})}),a.each(e,function(a){d.dom.setStyle(a.cell,\"width\",a.width),d.dom.setAttrib(a.cell,\"width\",null)})}}),d.on(\"mouseover\",function(a){if(!ga){var b=d.dom.getParent(a.target,\"table\");(\"TABLE\"===a.target.nodeName||b)&&(c=b,u(b))}}),d.on(\"keydown\",function(a){switch(a.keyCode){case b.LEFT:case b.RIGHT:case b.UP:case b.DOWN:t()}}),d.on(\"remove\",function(){t(),d.dom.unbind(k(),\"mousedown\",ea)}),{adjustWidth:S,adjustHeight:T,clearBars:t,drawBars:E,determineDeltas:L,getTableGrid:z,getTableDetails:y,getWidths:I,getPixelHeights:K,isPercentageBasedSize:Q,isPixelBasedSize:R,recalculateWidths:N,recalculateCellHeights:O,recalculateRowHeights:P}}}),g(\"e\",[\"b\"],function(a){return a(\"tinymce.util.Delay\")}),g(\"a\",[\"5\",\"e\",\"2\",\"4\",\"c\"],function(a,b,c,d,e){var f=d.each,g=e.getSpanVal;return function(h){function i(){function c(c){function d(a,b){var d=a?\"previousSibling\":\"nextSibling\",f=h.dom.getParent(b,\"tr\"),g=f[d];if(g)return r(h,b,g,a),c.preventDefault(),!0;var i=h.dom.getParent(f,\"table\"),l=f.parentNode,m=l.nodeName.toLowerCase();if(\"tbody\"===m||m===(a?\"tfoot\":\"thead\")){var n=e(a,i,l,\"tbody\");if(null!==n)return j(a,n,b)}return k(a,f,d,i)}function e(a,b,c,d){var e=h.dom.select(\">\"+d,b),f=e.indexOf(c);if(a&&0===f||!a&&f===e.length-1)return i(a,b);if(f===-1){var g=\"thead\"===c.tagName.toLowerCase()?0:e.length-1;return e[g]}return e[f+(a?-1:1)]}function i(a,b){var c=a?\"thead\":\"tfoot\",d=h.dom.select(\">\"+c,b);return 0!==d.length?d[0]:null}function j(a,b,d){var e=l(b,a);return e&&r(h,d,e,a),c.preventDefault(),!0}function k(a,b,e,f){var g=f[e];if(g)return m(g),!0;var i=h.dom.getParent(f,\"td,th\");if(i)return d(a,i,c);var j=l(b,!a);return m(j),c.preventDefault(),!1}function l(a,b){var c=a&&a[b?\"lastChild\":\"firstChild\"];return c&&\"BR\"===c.nodeName?h.dom.getParent(c,\"td,th\"):c}function m(a){h.selection.setCursorLocation(a,0)}function n(){return u==a.UP||u==a.DOWN}function o(a){var b=a.selection.getNode(),c=a.dom.getParent(b,\"tr\");return null!==c}function p(a){for(var b=0,c=a;c.previousSibling;)c=c.previousSibling,b+=g(c,\"colspan\");return b}function q(a,b){var c=0,d=0;return f(a.children,function(a,e){if(c+=g(a,\"colspan\"),d=e,c>b)return!1}),d}function r(a,b,c,d){var e=p(h.dom.getParent(b,\"td,th\")),f=q(c,e),g=c.childNodes[f],i=l(g,d);m(i||g)}function s(a){var b=h.selection.getNode(),c=h.dom.getParent(b,\"td,th\"),d=h.dom.getParent(a,\"td,th\");return c&&c!==d&&t(c,d)}function t(a,b){return h.dom.getParent(a,\"TABLE\")===h.dom.getParent(b,\"TABLE\")}var u=c.keyCode;if(n()&&o(h)){var v=h.selection.getNode();b.setEditorTimeout(h,function(){s(v)&&d(!c.shiftKey&&u===a.UP,v,c)},0)}}h.on(\"KeyDown\",function(a){c(a)})}function j(){function a(a,b){var c,d=b.ownerDocument,e=d.createRange();return e.setStartBefore(b),e.setEnd(a.endContainer,a.endOffset),c=d.createElement(\"body\"),c.appendChild(e.cloneContents()),0===c.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,\"-\").replace(/<[^>]+>/g,\"\").length}h.on(\"KeyDown\",function(b){var c,d,e=h.dom;37!=b.keyCode&&38!=b.keyCode||(c=h.selection.getRng(),d=e.getParent(c.startContainer,\"table\"),d&&h.getBody().firstChild==d&&a(c,d)&&(c=e.createRng(),c.setStartBefore(d),c.setEndBefore(d),h.selection.setRng(c),b.preventDefault()))})}function k(){h.on(\"KeyDown SetContent VisualAid\",function(){var a;for(a=h.getBody().lastChild;a;a=a.previousSibling)if(3==a.nodeType){if(a.nodeValue.length>0)break}else if(1==a.nodeType&&(\"BR\"==a.tagName||!a.getAttribute(\"data-mce-bogus\")))break;a&&\"TABLE\"==a.nodeName&&(h.settings.forced_root_block?h.dom.add(h.getBody(),h.settings.forced_root_block,h.settings.forced_root_block_attrs,c.ie&&c.ie<10?\"&nbsp;\":'<br data-mce-bogus=\"1\" />'):h.dom.add(h.getBody(),\"br\",{\"data-mce-bogus\":\"1\"}))}),h.on(\"PreProcess\",function(a){var b=a.node.lastChild;b&&(\"BR\"==b.nodeName||1==b.childNodes.length&&(\"BR\"==b.firstChild.nodeName||\"\\xa0\"==b.firstChild.nodeValue))&&b.previousSibling&&\"TABLE\"==b.previousSibling.nodeName&&h.dom.remove(b)})}function l(){function a(a,b,c,d){var e,f,g,h=3,i=a.dom.getParent(b.startContainer,\"TABLE\");return i&&(e=i.parentNode),f=b.startContainer.nodeType==h&&0===b.startOffset&&0===b.endOffset&&d&&(\"TR\"==c.nodeName||c==e),g=(\"TD\"==c.nodeName||\"TH\"==c.nodeName)&&!d,f||g}function b(){var b=h.selection.getRng(),c=h.selection.getNode(),d=h.dom.getParent(b.startContainer,\"TD,TH\");if(a(h,b,c,d)){d||(d=c);for(var e=d.lastChild;e.lastChild;)e=e.lastChild;3==e.nodeType&&(b.setEnd(e,e.data.length),h.selection.setRng(b))}}h.on(\"KeyDown\",function(){b()}),h.on(\"MouseDown\",function(a){2!=a.button&&b()})}function m(){function b(a){h.selection.select(a,!0),h.selection.collapse(!0)}function c(a){h.$(a).empty(),e.paddCell(a)}h.on(\"keydown\",function(e){if((e.keyCode==a.DELETE||e.keyCode==a.BACKSPACE)&&!e.isDefaultPrevented()){var f,g,i,j;if(f=h.dom.getParent(h.selection.getStart(),\"table\")){if(g=h.dom.select(\"td,th\",f),i=d.grep(g,function(a){return!!h.dom.getAttrib(a,\"data-mce-selected\")}),0===i.length)return j=h.dom.getParent(h.selection.getStart(),\"td,th\"),void(h.selection.isCollapsed()&&j&&h.dom.isEmpty(j)&&(e.preventDefault(),c(j),b(j)));e.preventDefault(),h.undoManager.transact(function(){g.length==i.length?h.execCommand(\"mceTableDelete\"):(d.each(i,c),b(i[0]))})}}})}function n(){var b=\"\\ufeff\",c=function(a){return h.dom.isEmpty(a)||a.firstChild===a.lastChild&&f(a.firstChild)},d=function(a){return a&&\"CAPTION\"==a.nodeName&&\"TABLE\"==a.parentNode.nodeName},e=function(a,b){var c=b.firstChild;do if(c===a)return!0;while(c=c.firstChild);return!1},f=function(a){if(3===a.nodeType){if(a.data===b)return!0;a=a.parentNode}return 1===a.nodeType&&a.hasAttribute(\"data-mce-caret\")},g=function(a){var b=h.selection.getRng();return!b.startOffset&&!b.startContainer.previousSibling&&e(b.startContainer,a)},i=function(a,c){var d;d=c?h.dom.create(\"p\",{\"data-mce-caret\":\"after\",\"data-mce-bogus\":\"all\"},'<br data-mce-bogus=\"1\">'):a.ownerDocument.createTextNode(b),a.appendChild(d)},j=function(a,d){var e=a.lastChild,g=h.selection.getRng(),j=g.startContainer,k=g.startOffset;c(a)?(a.innerHTML=b,j=a.lastChild,k=0):f(e)||i(a,h.dom.isBlock(e)),h.selection.setCursorLocation(j,k)},k=function(a){var b=h.selection.getRng(),c=h.dom.createRng(),d=a.firstChild;b.commonAncestorContainer===a.parentNode&&e(b.startContainer,a)&&(c.setStart(a,0),1===d.nodeType?c.setEnd(a,a.childNodes.length):c.setEnd(d,d.nodeValue.length),h.selection.setRng(c))};h.on(\"keydown\",function(b){if(!(b.keyCode!==a.DELETE&&b.keyCode!==a.BACKSPACE||b.isDefaultPrevented())){var e=h.dom.getParent(h.selection.getStart(),\"caption\");d(e)&&(h.selection.isCollapsed()?(j(e),(c(e)||b.keyCode===a.BACKSPACE&&g(e))&&b.preventDefault()):(k(e),h.undoManager.transact(function(){h.execCommand(\"Delete\"),j(e)}),b.preventDefault()))}})}n(),m(),c.webkit&&(i(),l()),c.gecko&&(j(),k()),c.ie>9&&(j(),k())}}),g(\"0\",[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\"],function(a,b,c,d,e,f,g,h,i,j){function k(a){function c(b){return function(){a.execCommand(b)}}function d(c,d){var e,f,g,h;for(g='<table id=\"__mce\"><tbody>',e=0;e<d;e++){for(g+=\"<tr>\",f=0;f<c;f++)g+=\"<td>\"+(b.ie&&b.ie<10?\"&nbsp;\":\"<br>\")+\"</td>\";g+=\"</tr>\"}return g+=\"</tbody></table>\",a.undoManager.transact(function(){a.insertContent(g),h=a.dom.get(\"__mce\"),a.dom.setAttrib(h,\"id\",null),a.$(\"tr\",h).each(function(b,c){a.fire(\"newrow\",{node:c}),a.$(\"th,td\",c).each(function(b,c){a.fire(\"newcell\",{node:c})})}),a.dom.setAttribs(h,a.settings.table_default_attributes||{}),a.dom.setStyles(h,a.settings.table_default_styles||{})}),h}function k(b,c,d){function e(){var e,f,g,h={},i=0;f=a.dom.select(\"td[data-mce-selected],th[data-mce-selected]\"),e=f[0],e||(e=a.selection.getStart()),d&&f.length>0?(l(f,function(a){return h[a.parentNode.parentNode.nodeName]=1}),l(h,function(a){i+=a}),g=1!==i):g=!a.dom.getParent(e,c),b.disabled(g),a.selection.selectorChanged(c,function(a){b.disabled(!a)})}a.initialized?e():a.on(\"init\",e)}function m(){k(this,\"table\")}function n(){k(this,\"td,th\")}function o(){k(this,\"td,th\",!0)}function p(){var a=\"\";a='<table role=\"grid\" class=\"mce-grid mce-grid-border\" aria-readonly=\"true\">';for(var b=0;b<10;b++){a+=\"<tr>\";for(var c=0;c<10;c++)a+='<td role=\"gridcell\" tabindex=\"-1\"><a id=\"mcegrid'+(10*b+c)+'\" href=\"#\" data-mce-x=\"'+c+'\" data-mce-y=\"'+b+'\"></a></td>';a+=\"</tr>\"}return a+=\"</table>\",a+='<div class=\"mce-text-center\" role=\"presentation\">1 x 1</div>'}function q(b,c,d){var e,f,g,h,i,j=d.getEl().getElementsByTagName(\"table\")[0],k=d.isRtl()||\"tl-tr\"==d.parent().rel;for(j.nextSibling.innerHTML=b+1+\" x \"+(c+1),k&&(b=9-b),f=0;f<10;f++)for(e=0;e<10;e++)h=j.rows[f].childNodes[e].firstChild,i=(k?e>=b:e<=b)&&f<=c,a.dom.toggleClass(h,\"mce-active\",i),i&&(g=h);return g.parentNode}function r(){a.addButton(\"tableprops\",{title:\"Table properties\",onclick:z.tableProps,icon:\"table\"}),a.addButton(\"tabledelete\",{title:\"Delete table\",onclick:c(\"mceTableDelete\")}),a.addButton(\"tablecellprops\",{title:\"Cell properties\",onclick:c(\"mceTableCellProps\")}),a.addButton(\"tablemergecells\",{title:\"Merge cells\",onclick:c(\"mceTableMergeCells\")}),a.addButton(\"tablesplitcells\",{title:\"Split cell\",onclick:c(\"mceTableSplitCells\")}),a.addButton(\"tableinsertrowbefore\",{title:\"Insert row before\",onclick:c(\"mceTableInsertRowBefore\")}),a.addButton(\"tableinsertrowafter\",{title:\"Insert row after\",onclick:c(\"mceTableInsertRowAfter\")}),a.addButton(\"tabledeleterow\",{title:\"Delete row\",onclick:c(\"mceTableDeleteRow\")}),a.addButton(\"tablerowprops\",{title:\"Row properties\",onclick:c(\"mceTableRowProps\")}),a.addButton(\"tablecutrow\",{title:\"Cut row\",onclick:c(\"mceTableCutRow\")}),a.addButton(\"tablecopyrow\",{title:\"Copy row\",onclick:c(\"mceTableCopyRow\")}),a.addButton(\"tablepasterowbefore\",{title:\"Paste row before\",onclick:c(\"mceTablePasteRowBefore\")}),a.addButton(\"tablepasterowafter\",{title:\"Paste row after\",onclick:c(\"mceTablePasteRowAfter\")}),a.addButton(\"tableinsertcolbefore\",{title:\"Insert column before\",onclick:c(\"mceTableInsertColBefore\")}),a.addButton(\"tableinsertcolafter\",{title:\"Insert column after\",onclick:c(\"mceTableInsertColAfter\")}),a.addButton(\"tabledeletecol\",{title:\"Delete column\",onclick:c(\"mceTableDeleteCol\")})}function s(b){var c=a.dom.is(b,\"table\")&&a.getBody().contains(b);return c}function t(){var b=a.settings.table_toolbar;\"\"!==b&&b!==!1&&(b||(b=\"tableprops tabledelete | tableinsertrowbefore tableinsertrowafter tabledeleterow | tableinsertcolbefore tableinsertcolafter tabledeletecol\"),a.addContextToolbar(s,b))}function u(){return w}function v(a){w=a}var w,x,y=this,z=new h(a);!a.settings.object_resizing||a.settings.table_resize_bars===!1||a.settings.object_resizing!==!0&&\"table\"!==a.settings.object_resizing||(x=i(a)),a.settings.table_grid===!1?a.addMenuItem(\"inserttable\",{text:\"Table\",icon:\"table\",context:\"table\",onclick:z.table}):a.addMenuItem(\"inserttable\",{text:\"Table\",icon:\"table\",context:\"table\",ariaHideMenu:!0,onclick:function(a){a.aria&&(this.parent().hideAll(),a.stopImmediatePropagation(),z.table())},onshow:function(){q(0,0,this.menu.items()[0])},onhide:function(){var b=this.menu.items()[0].getEl().getElementsByTagName(\"a\");a.dom.removeClass(b,\"mce-active\"),a.dom.addClass(b[0],\"mce-active\")},menu:[{type:\"container\",html:p(),onPostRender:function(){this.lastX=this.lastY=0},onmousemove:function(a){var b,c,d=a.target;\"A\"==d.tagName.toUpperCase()&&(b=parseInt(d.getAttribute(\"data-mce-x\"),10),c=parseInt(d.getAttribute(\"data-mce-y\"),10),(this.isRtl()||\"tl-tr\"==this.parent().rel)&&(b=9-b),b===this.lastX&&c===this.lastY||(q(b,c,a.control),this.lastX=b,this.lastY=c))},onclick:function(b){var c=this;\"A\"==b.target.tagName.toUpperCase()&&(b.preventDefault(),b.stopPropagation(),c.parent().cancel(),a.undoManager.transact(function(){d(c.lastX+1,c.lastY+1)}),a.addVisual())}}]}),a.addMenuItem(\"tableprops\",{text:\"Table properties\",context:\"table\",onPostRender:m,onclick:z.tableProps}),a.addMenuItem(\"deletetable\",{text:\"Delete table\",context:\"table\",onPostRender:m,cmd:\"mceTableDelete\"}),a.addMenuItem(\"cell\",{separator:\"before\",text:\"Cell\",context:\"table\",menu:[{text:\"Cell properties\",onclick:c(\"mceTableCellProps\"),onPostRender:n},{text:\"Merge cells\",onclick:c(\"mceTableMergeCells\"),onPostRender:o},{text:\"Split cell\",onclick:c(\"mceTableSplitCells\"),onPostRender:n}]}),a.addMenuItem(\"row\",{text:\"Row\",context:\"table\",menu:[{text:\"Insert row before\",onclick:c(\"mceTableInsertRowBefore\"),onPostRender:n},{text:\"Insert row after\",onclick:c(\"mceTableInsertRowAfter\"),onPostRender:n},{text:\"Delete row\",onclick:c(\"mceTableDeleteRow\"),onPostRender:n},{text:\"Row properties\",onclick:c(\"mceTableRowProps\"),onPostRender:n},{text:\"-\"},{text:\"Cut row\",onclick:c(\"mceTableCutRow\"),onPostRender:n},{text:\"Copy row\",onclick:c(\"mceTableCopyRow\"),onPostRender:n},{text:\"Paste row before\",onclick:c(\"mceTablePasteRowBefore\"),onPostRender:n},{text:\"Paste row after\",onclick:c(\"mceTablePasteRowAfter\"),onPostRender:n}]}),a.addMenuItem(\"column\",{text:\"Column\",context:\"table\",menu:[{text:\"Insert column before\",onclick:c(\"mceTableInsertColBefore\"),onPostRender:n},{text:\"Insert column after\",onclick:c(\"mceTableInsertColAfter\"),onPostRender:n},{text:\"Delete column\",onclick:c(\"mceTableDeleteCol\"),onPostRender:n}]});var A=[];l(\"inserttable tableprops deletetable | cell row column\".split(\" \"),function(b){\"|\"==b?A.push({text:\"-\"}):A.push(a.menuItems[b])}),a.addButton(\"table\",{type:\"menubutton\",title:\"Table\",menu:A}),b.isIE||a.on(\"click\",function(b){b=b.target,\"TABLE\"===b.nodeName&&(a.selection.select(b),a.nodeChanged())}),y.quirks=new j(a),a.on(\"Init\",function(){y.cellSelection=new g(a,function(a){a&&x&&x.clearBars()}),y.resizeBars=x}),a.on(\"PreInit\",function(){a.serializer.addAttributeFilter(\"data-mce-cell-padding,data-mce-border,data-mce-border-color\",function(a,b){for(var c=a.length;c--;)a[c].attr(b,null)})}),l({mceTableSplitCells:function(a){a.split()},mceTableMergeCells:function(b){var c;c=a.dom.getParent(a.selection.getStart(),\"th,td\"),a.dom.select(\"td[data-mce-selected],th[data-mce-selected]\").length?b.merge():z.merge(b,c)},mceTableInsertRowBefore:function(a){a.insertRows(!0)},mceTableInsertRowAfter:function(a){a.insertRows()},mceTableInsertColBefore:function(a){a.insertCols(!0)},mceTableInsertColAfter:function(a){a.insertCols()},mceTableDeleteCol:function(a){a.deleteCols()},mceTableDeleteRow:function(a){a.deleteRows()},mceTableCutRow:function(a){w=a.cutRows()},mceTableCopyRow:function(a){w=a.copyRows()},mceTablePasteRowBefore:function(a){a.pasteRows(w,!0)},mceTablePasteRowAfter:function(a){a.pasteRows(w)},mceSplitColsBefore:function(a){a.splitCols(!0)},mceSplitColsAfter:function(a){a.splitCols(!1)},mceTableDelete:function(a){x&&x.clearBars(),a.deleteTable()}},function(b,c){a.addCommand(c,function(){var c=new f(a);c&&(b(c),a.execCommand(\"mceRepaint\"),y.cellSelection.clear())})}),l({mceInsertTable:z.table,mceTableProps:function(){z.table(!0)},mceTableRowProps:z.row,mceTableCellProps:z.cell},function(b,c){a.addCommand(c,function(a,c){b(c)})}),r(),t(),a.settings.table_tab_navigation!==!1&&a.on(\"keydown\",function(b){var c,d,g,h=a.selection.getStart();if(b.keyCode===e.TAB){if(a.dom.getParent(h,\"LI,DT,DD\"))return;c=a.dom.getParent(h,\"th,td\"),c&&(b.preventDefault(),d=new f(a),g=b.shiftKey?-1:1,a.undoManager.transact(function(){!d.moveRelIdx(c,g)&&g>0&&(d.insertRow(),d.refresh(),d.moveRelIdx(c,g))}))}}),y.insertTable=d,y.setClipboardRows=v,y.getClipboardRows=u}var l=d.each;return c.add(\"table\",k),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"6\",tinymce.util.Tools.resolve),g(\"1\",[\"6\"],function(a){return a(\"tinymce.dom.DOMUtils\")}),g(\"2\",[\"6\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"3\",[\"6\"],function(a){return a(\"tinymce.util.JSON\")}),g(\"4\",[\"6\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"5\",[\"6\"],function(a){return a(\"tinymce.util.XHR\")}),g(\"0\",[\"1\",\"2\",\"3\",\"4\",\"5\"],function(a,b,c,d,e){return b.add(\"template\",function(b){function f(a){return function(){var d=b.settings.templates;return\"function\"==typeof d?void d(a):void(\"string\"==typeof d?e.send({url:d,success:function(b){a(c.parse(b))}}):a(d))}}function g(c){function f(a){function c(a){if(a.indexOf(\"<html>\")==-1){var c=\"\";d.each(b.contentCSS,function(a){c+='<link type=\"text/css\" rel=\"stylesheet\" href=\"'+b.documentBaseURI.toAbsolute(a)+'\">'});var e=b.settings.body_class||\"\";e.indexOf(\"=\")!=-1&&(e=b.getParam(\"body_class\",\"\",\"hash\"),e=e[b.id]||\"\"),a=\"<!DOCTYPE html><html><head>\"+c+'</head><body class=\"'+e+'\">'+a+\"</body></html>\"}a=j(a,\"template_preview_replace_values\");var f=g.find(\"iframe\")[0].getEl().contentWindow.document;f.open(),f.write(a),f.close()}var f=a.control.value();f.url?e.send({url:f.url,success:function(a){h=a,c(h)}}):(h=f.content,c(h)),g.find(\"#description\")[0].text(a.control.value().description)}var g,h,i=[];if(!c||0===c.length){var l=b.translate(\"No templates defined.\");return void b.notificationManager.open({text:l,type:\"info\"})}d.each(c,function(a){i.push({selected:!i.length,text:a.title,value:{url:a.url,content:a.content,description:a.description}})}),g=b.windowManager.open({title:\"Insert template\",layout:\"flex\",direction:\"column\",align:\"stretch\",padding:15,spacing:10,items:[{type:\"form\",flex:0,padding:0,items:[{type:\"container\",label:\"Templates\",items:{type:\"listbox\",label:\"Templates\",name:\"template\",values:i,onselect:f}}]},{type:\"label\",name:\"description\",label:\"Description\",text:\"\\xa0\"},{type:\"iframe\",flex:1,border:1}],onsubmit:function(){k(!1,h)},minWidth:Math.min(a.DOM.getViewPort().w,b.getParam(\"template_popup_width\",600)),minHeight:Math.min(a.DOM.getViewPort().h,b.getParam(\"template_popup_height\",500))}),g.find(\"listbox\")[0].fire(\"select\")}function h(a,c){function d(a,b){if(a=\"\"+a,a.length<b)for(var c=0;c<b-a.length;c++)a=\"0\"+a;return a}var e=\"Sun Mon Tue Wed Thu Fri Sat Sun\".split(\" \"),f=\"Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday\".split(\" \"),g=\"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec\".split(\" \"),h=\"January February March April May June July August September October November December\".split(\" \");return c=c||new Date,a=a.replace(\"%D\",\"%m/%d/%Y\"),a=a.replace(\"%r\",\"%I:%M:%S %p\"),a=a.replace(\"%Y\",\"\"+c.getFullYear()),a=a.replace(\"%y\",\"\"+c.getYear()),a=a.replace(\"%m\",d(c.getMonth()+1,2)),a=a.replace(\"%d\",d(c.getDate(),2)),a=a.replace(\"%H\",\"\"+d(c.getHours(),2)),a=a.replace(\"%M\",\"\"+d(c.getMinutes(),2)),a=a.replace(\"%S\",\"\"+d(c.getSeconds(),2)),a=a.replace(\"%I\",\"\"+((c.getHours()+11)%12+1)),a=a.replace(\"%p\",\"\"+(c.getHours()<12?\"AM\":\"PM\")),a=a.replace(\"%B\",\"\"+b.translate(h[c.getMonth()])),a=a.replace(\"%b\",\"\"+b.translate(g[c.getMonth()])),a=a.replace(\"%A\",\"\"+b.translate(f[c.getDay()])),a=a.replace(\"%a\",\"\"+b.translate(e[c.getDay()])),a=a.replace(\"%%\",\"%\")}function i(a){var c=b.dom,e=b.getParam(\"template_replace_values\");d.each(c.select(\"*\",a),function(a){d.each(e,function(b,d){c.hasClass(a,d)&&\"function\"==typeof e[d]&&e[d](a)})})}function j(a,c){return d.each(b.getParam(c),function(b,c){\"function\"==typeof b&&(b=b(c)),a=a.replace(new RegExp(\"\\\\{\\\\$\"+c+\"\\\\}\",\"g\"),b)}),a}function k(a,c){function e(a,b){return new RegExp(\"\\\\b\"+b+\"\\\\b\",\"g\").test(a.className)}var f,g,k=b.dom,l=b.selection.getContent();c=j(c,\"template_replace_values\"),f=k.create(\"div\",null,c),g=k.select(\".mceTmpl\",f),g&&g.length>0&&(f=k.create(\"div\",null),f.appendChild(g[0].cloneNode(!0))),d.each(k.select(\"*\",f),function(a){e(a,b.getParam(\"template_cdate_classes\",\"cdate\").replace(/\\s+/g,\"|\"))&&(a.innerHTML=h(b.getParam(\"template_cdate_format\",b.getLang(\"template.cdate_format\")))),e(a,b.getParam(\"template_mdate_classes\",\"mdate\").replace(/\\s+/g,\"|\"))&&(a.innerHTML=h(b.getParam(\"template_mdate_format\",b.getLang(\"template.mdate_format\")))),e(a,b.getParam(\"template_selected_content_classes\",\"selcontent\").replace(/\\s+/g,\"|\"))&&(a.innerHTML=l)}),i(f),b.execCommand(\"mceInsertContent\",!1,f.innerHTML),b.addVisual()}b.addCommand(\"mceInsertTemplate\",k),b.addButton(\"template\",{title:\"Insert template\",onclick:f(g)}),b.addMenuItem(\"template\",{text:\"Template\",onclick:f(g),context:\"insert\"}),b.on(\"PreProcess\",function(a){var c=b.dom;d.each(c.select(\"div\",a.node),function(a){c.hasClass(a,\"mceTmpl\")&&(d.each(c.select(\"*\",a),function(a){c.hasClass(a,b.getParam(\"template_mdate_classes\",\"mdate\").replace(/\\s+/g,\"|\"))&&(a.innerHTML=h(b.getParam(\"template_mdate_format\",b.getLang(\"template.mdate_format\"))))}),i(a))})})}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"5\",tinymce.util.Tools.resolve),g(\"1\",[\"5\"],function(a){return a(\"tinymce.dom.DOMUtils\")}),g(\"2\",[\"5\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"3\",[\"5\"],function(a){return a(\"tinymce.util.I18n\")}),g(\"4\",[\"5\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"0\",[\"1\",\"2\",\"3\",\"4\"],function(a,b,c,d){var e=c.translate;return b.add(\"textcolor\",function(b){function c(a){var c;return b.dom.getParents(b.selection.getStart(),function(b){var d;(d=b.style[\"forecolor\"==a?\"color\":\"background-color\"])&&(c=d)}),c}function f(a){var c,d,e=[];for(d=[\"000000\",\"Black\",\"993300\",\"Burnt orange\",\"333300\",\"Dark olive\",\"003300\",\"Dark green\",\"003366\",\"Dark azure\",\"000080\",\"Navy Blue\",\"333399\",\"Indigo\",\"333333\",\"Very dark gray\",\"800000\",\"Maroon\",\"FF6600\",\"Orange\",\"808000\",\"Olive\",\"008000\",\"Green\",\"008080\",\"Teal\",\"0000FF\",\"Blue\",\"666699\",\"Grayish blue\",\"808080\",\"Gray\",\"FF0000\",\"Red\",\"FF9900\",\"Amber\",\"99CC00\",\"Yellow green\",\"339966\",\"Sea green\",\"33CCCC\",\"Turquoise\",\"3366FF\",\"Royal blue\",\"800080\",\"Purple\",\"999999\",\"Medium gray\",\"FF00FF\",\"Magenta\",\"FFCC00\",\"Gold\",\"FFFF00\",\"Yellow\",\"00FF00\",\"Lime\",\"00FFFF\",\"Aqua\",\"00CCFF\",\"Sky blue\",\"993366\",\"Red violet\",\"FFFFFF\",\"White\",\"FF99CC\",\"Pink\",\"FFCC99\",\"Peach\",\"FFFF99\",\"Light yellow\",\"CCFFCC\",\"Pale green\",\"CCFFFF\",\"Pale cyan\",\"99CCFF\",\"Light sky blue\",\"CC99FF\",\"Plum\"],d=b.settings.textcolor_map||d,d=b.settings[a+\"_map\"]||d,c=0;c<d.length;c+=2)e.push({text:d[c+1],color:\"#\"+d[c]});return e}function g(){function a(a,b){var c=\"transparent\"==a;return'<td class=\"mce-grid-cell'+(c?\" mce-colorbtn-trans\":\"\")+'\"><div id=\"'+p+\"-\"+q++ +'\" data-mce-color=\"'+(a?a:\"\")+'\" role=\"option\" tabIndex=\"-1\" style=\"'+(a?\"background-color: \"+a:\"\")+'\" title=\"'+e(b)+'\">'+(c?\"&#215;\":\"\")+\"</div></td>\"}var c,d,g,h,i,j,k,n,o=this,p=o._id,q=0;for(n=o.settings.origin,c=f(n),c.push({text:e(\"No color\"),color:\"transparent\"}),g='<table class=\"mce-grid mce-grid-border mce-colorbutton-grid\" role=\"list\" cellspacing=\"0\"><tbody>',h=c.length-1,j=0;j<m[n];j++){for(g+=\"<tr>\",i=0;i<l[n];i++)k=j*l[n]+i,k>h?g+=\"<td></td>\":(d=c[k],g+=a(d.color,d.text));g+=\"</tr>\"}if(b.settings.color_picker_callback){for(g+='<tr><td colspan=\"'+l[n]+'\" class=\"mce-custom-color-btn\"><div id=\"'+p+'-c\" class=\"mce-widget mce-btn mce-btn-small mce-btn-flat\" role=\"button\" tabindex=\"-1\" aria-labelledby=\"'+p+'-c\" style=\"width: 100%\"><button type=\"button\" role=\"presentation\" tabindex=\"-1\">'+e(\"Custom...\")+\"</button></div></td></tr>\",g+=\"<tr>\",i=0;i<l[n];i++)g+=a(\"\",\"Custom color\");g+=\"</tr>\"}return g+=\"</tbody></table>\"}function h(a,c){b.undoManager.transact(function(){b.focus(),b.formatter.apply(a,{value:c}),b.nodeChanged()})}function i(a){b.undoManager.transact(function(){b.focus(),b.formatter.remove(a,{value:null},null,!0),b.nodeChanged()})}function j(e){function f(a){n.hidePanel(),n.color(a),h(n.settings.format,a)}function g(){n.hidePanel(),n.resetColor(),i(n.settings.format)}function j(a,b){a.style.background=b,a.setAttribute(\"data-mce-color\",b)}var k,m,n=this.parent();m=n.settings.origin,a.DOM.getParent(e.target,\".mce-custom-color-btn\")&&(n.hidePanel(),b.settings.color_picker_callback.call(b,function(a){var b,c,e,g=n.panel.getEl().getElementsByTagName(\"table\")[0];for(b=d.map(g.rows[g.rows.length-1].childNodes,function(a){return a.firstChild}),e=0;e<b.length&&(c=b[e],c.getAttribute(\"data-mce-color\"));e++);if(e==l[m])for(e=0;e<l[m]-1;e++)j(b[e],b[e+1].getAttribute(\"data-mce-color\"));j(c,a),f(a)},c(n.settings.format))),k=e.target.getAttribute(\"data-mce-color\"),k?(this.lastId&&document.getElementById(this.lastId).setAttribute(\"aria-selected\",!1),e.target.setAttribute(\"aria-selected\",!0),this.lastId=e.target.id,\"transparent\"==k?g():f(k)):null!==k&&n.hidePanel()}function k(){var a=this;a._color?h(a.settings.format,a._color):i(a.settings.format)}var l,m;m={forecolor:b.settings.forecolor_rows||b.settings.textcolor_rows||5,backcolor:b.settings.backcolor_rows||b.settings.textcolor_rows||5},l={forecolor:b.settings.forecolor_cols||b.settings.textcolor_cols||8,backcolor:b.settings.backcolor_cols||b.settings.textcolor_cols||8},b.addButton(\"forecolor\",{type:\"colorbutton\",tooltip:\"Text color\",format:\"forecolor\",panel:{origin:\"forecolor\",role:\"application\",ariaRemember:!0,html:g,onclick:j},onclick:k}),b.addButton(\"backcolor\",{type:\"colorbutton\",tooltip:\"Background color\",format:\"hilitecolor\",panel:{origin:\"backcolor\",role:\"application\",ariaRemember:!0,html:g,onclick:j},onclick:k})}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"7\",tinymce.util.Tools.resolve),g(\"1\",[\"7\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"2\",[\"7\"],function(a){return a(\"tinymce.util.Delay\")}),g(\"3\",[\"7\"],function(a){return a(\"tinymce.util.VK\")}),g(\"8\",[\"7\"],function(a){return a(\"tinymce.dom.TreeWalker\")}),g(\"9\",[\"7\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"a\",[],function(){var a=function(a){return a.sort(function(a,b){return a.start.length>b.start.length?-1:a.start.length<b.start.length?1:0})},b=function(a,b){for(var c=0;c<a.length;c++)if(0===b.indexOf(a[c].start)&&(!a[c].end||b.lastIndexOf(a[c].end)===b.length-a[c].end.length))return a[c]},c=function(a,b,c,d){var e=b.substr(c-a.end.length-d,a.end.length);return e===a.end},d=function(a,b,c){return a-b-c.end.length-c.start.length>0},e=function(b,e,f,g){var h,i,j=a(b);for(i=0;i<j.length;i++)if(h=j[i],void 0!==h.end&&c(h,e,f,g)&&d(f,g,h))return h};return{findPattern:b,findEndPattern:e}}),g(\"4\",[\"8\",\"9\",\"a\"],function(a,b,c){var d=function(a,b,c,d,e){return a=d>0?a.splitText(d):a,a.splitText(c-d-e),a.deleteData(0,b.start.length),a.deleteData(a.data.length-b.end.length,b.end.length),a},e=function(a,b,e){var f,g,h,i,j,k,l,m,n,o,p;if(f=a.selection,g=a.dom,f.isCollapsed()&&(h=f.getRng(!0),i=h.startContainer,j=h.startOffset,l=i.data,o=e===!0?1:0,3==i.nodeType&&(n=c.findEndPattern(b,l,j,o),void 0!==n&&(k=Math.max(0,j-o),k=l.lastIndexOf(n.start,k-n.end.length-1),k!==-1&&(m=g.createRng(),m.setStart(i,k),m.setEnd(i,j-o),n=c.findPattern(b,m.toString()),n&&n.end&&!(i.data.length<=n.start.length+n.end.length))))))return p=a.formatter.get(n.format),p&&p[0].inline?(a.undoManager.transact(function(){i=d(i,n,j,k,o),a.formatter.apply(n.format,{},i)}),i):void 0},f=function(d,e){var f,g,h,i,j,k,l,m,n,o,p;if(f=d.selection,g=d.dom,f.isCollapsed()&&(l=g.getParent(f.getStart(),\"p\"))){for(n=new a(l,l);j=n.next();)if(3==j.nodeType){i=j;break}if(i){if(m=c.findPattern(e,i.data),!m)return;if(o=f.getRng(!0),h=o.startContainer,p=o.startOffset,i==h&&(p=Math.max(0,p-m.start.length)),b.trim(i.data).length==m.start.length)return;m.format&&(k=d.formatter.get(m.format),k&&k[0].block&&(i.deleteData(0,m.start.length),d.formatter.apply(m.format,{},i),o.setStart(h,p),o.collapse(!0),f.setRng(o))),m.cmd&&d.undoManager.transact(function(){i.deleteData(0,m.start.length),d.execCommand(m.cmd)})}}};return{applyInlineFormat:e,applyBlockFormat:f}}),g(\"5\",[\"3\",\"4\"],function(a,b){function c(a,c){var d,e;e=b.applyInlineFormat(a,c,!1),e&&(d=a.dom.createRng(),d.setStart(e,e.data.length),d.setEnd(e,e.data.length),a.selection.setRng(d)),b.applyBlockFormat(a,c)}function d(a,c){var d,e,f,g,h;d=b.applyInlineFormat(a,c,!0),d&&(h=a.dom,e=d.data.slice(-1),/[\\u00a0 ]/.test(e)&&(d.deleteData(d.data.length-1,1),f=h.doc.createTextNode(e),d.nextSibling?h.insertAfter(f,d.nextSibling):d.parentNode.appendChild(f),g=h.createRng(),g.setStart(f,1),g.setEnd(f,1),a.selection.setRng(g)))}var e=function(a,b,c){for(var d=0;d<a.length;d++)if(c(a[d],b))return!0},f=function(b,c){return e(b,c,function(b,c){return b===c.keyCode&&a.modifierPressed(c)===!1})},g=function(a,b){return e(a,b,function(a,b){return a.charCodeAt(0)===b.charCode})};return{handleEnter:c,handleInlineKey:d,checkCharCode:g,checkKeyCode:f}}),g(\"6\",[],function(){var a=[{start:\"*\",end:\"*\",format:\"italic\"},{start:\"**\",end:\"**\",format:\"bold\"},{start:\"#\",format:\"h1\"},{start:\"##\",format:\"h2\"},{start:\"###\",format:\"h3\"},{start:\"####\",format:\"h4\"},{start:\"#####\",format:\"h5\"},{start:\"######\",format:\"h6\"},{start:\"1. \",cmd:\"InsertOrderedList\"},{start:\"* \",cmd:\"InsertUnorderedList\"},{start:\"- \",cmd:\"InsertUnorderedList\"}],b=function(b){return void 0!==b.textpattern_patterns?b.textpattern_patterns:a};return{getPatterns:b}}),g(\"0\",[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\"],function(a,b,c,d,e,f){return a.add(\"textpattern\",function(a){var d=f.getPatterns(a.settings),g=[\",\",\".\",\";\",\":\",\"!\",\"?\"],h=[32];a.on(\"keydown\",function(b){13!==b.keyCode||c.modifierPressed(b)||e.handleEnter(a,d)},!0),a.on(\"keyup\",function(b){e.checkKeyCode(h,b)&&e.handleInlineKey(a,d)}),a.on(\"keypress\",function(c){e.checkCharCode(g,c)&&b.setEditorTimeout(a,function(){e.handleInlineKey(a,d)})}),this.setPatterns=function(a){d=a},this.getPatterns=function(){return d}}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"4\",tinymce.util.Tools.resolve),g(\"1\",[\"4\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"2\",[\"4\"],function(a){return a(\"tinymce.util.I18n\")}),g(\"3\",[\"4\"],function(a){return a(\"tinymce.util.Tools\")}),g(\"0\",[\"1\",\"2\",\"3\"],function(a,b,c){return a.add(\"toc\",function(a){function d(b){return!!b&&a.schema.isValidChild(\"div\",b)}function e(b){return b&&a.dom.is(b,\".\"+n.className)&&a.getBody().contains(b)}function f(){var b=this;b.disabled(a.readonly||!h()),a.on(\"LoadContent SetContent change\",function(){b.disabled(a.readonly||!h())})}function g(a){var b,c=[];for(b=1;b<=a;b++)c.push(\"h\"+b);return c.join(\",\")}function h(){return!(!n||!i(n).length)}function i(b){var d=g(b.depth),e=o(d);return e.length&&/^h[1-9]$/i.test(b.headerTag)&&(e=e.filter(function(c,d){return!a.dom.hasClass(d.parentNode,b.className)})),c.map(e,function(a){return a.id||(a.id=r()),{id:a.id,level:parseInt(a.nodeName.replace(/^H/i,\"\"),10),title:o.text(a)}})}function j(a){var b,c=9;for(b=0;b<a.length;b++)if(a[b].level<c&&(c=a[b].level),1==c)return c;return c}function k(b,c){var d=\"<\"+b+' contenteditable=\"true\">',e=\"</\"+b+\">\";return d+a.dom.encode(c)+e}function l(a){var b=m(a);return'<div class=\"'+a.className+'\" contenteditable=\"false\">'+b+\"</div>\"}function m(a){var c,d,e,f,g=\"\",h=i(a),l=j(h)-1;if(!h.length)return\"\";for(g+=k(a.headerTag,b.translate(\"Table of Contents\")),c=0;c<h.length;c++){if(e=h[c],f=h[c+1]&&h[c+1].level,l===e.level)g+=\"<li>\";else for(d=l;d<e.level;d++)g+=\"<ul><li>\";if(g+='<a href=\"#'+e.id+'\">'+e.title+\"</a>\",f!==e.level&&f)for(d=e.level;d>f;d--)g+=\"</li></ul><li>\";else g+=\"</li>\",f||(g+=\"</ul>\");l=e.level}return g}var n,o=a.$,p={depth:3,headerTag:\"h2\",className:\"mce-toc\"},q=function(a){var b=0;return function(){var c=(new Date).getTime().toString(32);return a+c+(b++).toString(32)}},r=q(\"mcetoc_\");a.on(\"PreInit\",function(){var b=a.settings,c=parseInt(b.toc_depth,10)||0;n={depth:c>=1&&c<=9?c:p.depth,headerTag:d(b.toc_header)?b.toc_header:p.headerTag,className:b.toc_class?a.dom.encode(b.toc_class):p.className}}),a.on(\"PreProcess\",function(a){var b=o(\".\"+n.className,a.node);b.length&&(b.removeAttr(\"contentEditable\"),b.find(\"[contenteditable]\").removeAttr(\"contentEditable\"))}),a.on(\"SetContent\",function(){var a=o(\".\"+n.className);a.length&&(a.attr(\"contentEditable\",!1),a.children(\":first-child\").attr(\"contentEditable\",!0))});var s=function(b){return!b.length||a.dom.getParents(b[0],\".mce-offscreen-selection\").length>0};a.addCommand(\"mceInsertToc\",function(){var b=o(\".\"+n.className);s(b)?a.insertContent(l(n)):a.execCommand(\"mceUpdateToc\")}),a.addCommand(\"mceUpdateToc\",function(){var b=o(\".\"+n.className);b.length&&a.undoManager.transact(function(){b.html(m(n))})}),a.addButton(\"toc\",{tooltip:\"Table of Contents\",cmd:\"mceInsertToc\",icon:\"toc\",onPostRender:f}),a.addButton(\"tocupdate\",{tooltip:\"Update\",cmd:\"mceUpdateToc\",icon:\"reload\"}),a.addContextToolbar(e,\"tocupdate\"),a.addMenuItem(\"toc\",{text:\"Table of Contents\",context:\"insert\",cmd:\"mceInsertToc\",onPostRender:f})}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"2\",tinymce.util.Tools.resolve),g(\"1\",[\"2\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"0\",[\"1\"],function(a){return a.add(\"visualblocks\",function(a,b){function c(){var b=this;b.active(f),a.on(\"VisualBlocks\",function(){b.active(a.dom.hasClass(a.getBody(),\"mce-visualblocks\"))})}var d,e,f;window.NodeList&&(a.addCommand(\"mceVisualBlocks\",function(){var c,g=a.dom;d||(d=g.uniqueId(),c=g.create(\"link\",{id:d,rel:\"stylesheet\",href:b+\"/css/visualblocks.css\"}),a.getDoc().getElementsByTagName(\"head\")[0].appendChild(c)),a.on(\"PreviewFormats AfterPreviewFormats\",function(b){f&&g.toggleClass(a.getBody(),\"mce-visualblocks\",\"afterpreviewformats\"==b.type)}),g.toggleClass(a.getBody(),\"mce-visualblocks\"),f=a.dom.hasClass(a.getBody(),\"mce-visualblocks\"),e&&e.active(g.hasClass(a.getBody(),\"mce-visualblocks\")),a.fire(\"VisualBlocks\")}),a.addButton(\"visualblocks\",{title:\"Show blocks\",cmd:\"mceVisualBlocks\",onPostRender:c}),a.addMenuItem(\"visualblocks\",{text:\"Show blocks\",cmd:\"mceVisualBlocks\",onPostRender:c,selectable:!0,context:\"view\",prependToContext:!0}),a.on(\"init\",function(){a.settings.visualblocks_default_state&&a.execCommand(\"mceVisualBlocks\",!1,null,{skip_focus:!0})}),a.on(\"remove\",function(){a.dom.removeClass(a.getBody(),\"mce-visualblocks\")}))}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"6\",tinymce.util.Tools.resolve),g(\"1\",[\"6\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"2\",[\"6\"],function(a){return a(\"tinymce.util.Delay\")}),h(\"8\",Array),h(\"9\",Error),g(\"b\",[\"8\",\"9\"],function(a,b){var c=function(){},d=function(a,b){return function(){return a(b.apply(null,arguments))}},e=function(a){return function(){return a}},f=function(a){return a},g=function(a,b){return a===b},h=function(b){for(var c=new a(arguments.length-1),d=1;d<arguments.length;d++)c[d-1]=arguments[d];return function(){for(var d=new a(arguments.length),e=0;e<d.length;e++)d[e]=arguments[e];var f=c.concat(d);return b.apply(null,f)}},i=function(a){return function(){return!a.apply(null,arguments)}},j=function(a){return function(){throw new b(a)}},k=function(a){return a()},l=function(a){a()},m=e(!1),n=e(!0);return{noop:c,compose:d,constant:e,identity:f,tripleEquals:g,curry:h,not:i,die:j,apply:k,call:l,never:m,always:n}}),h(\"h\",Object),g(\"7\",[\"b\",\"h\"],function(a,b){var c=a.never,d=a.always,e=function(){return f},f=function(){var f=function(a){return a.isNone()},g=function(a){return a()},h=function(a){return a},i=function(){},j={fold:function(a,b){return a()},is:c,isSome:c,isNone:d,getOr:h,getOrThunk:g,getOrDie:function(a){throw new Error(a||\"error: getOrDie called on none.\")},or:h,orThunk:g,map:e,ap:e,each:i,bind:e,flatten:e,exists:c,forall:d,filter:e,equals:f,equals_:f,toArray:function(){return[]},toString:a.constant(\"none()\")};return b.freeze&&b.freeze(j),j}(),g=function(a){var b=function(){return a},h=function(){return k},i=function(b){return g(b(a))},j=function(b){return b(a)},k={fold:function(b,c){return c(a)},is:function(b){return a===b},isSome:d,isNone:c,getOr:b,getOrThunk:b,getOrDie:b,or:h,orThunk:h,map:i,ap:function(b){return b.fold(e,function(b){return g(b(a))})},each:function(b){b(a)},bind:j,flatten:b,exists:j,forall:j,filter:function(b){return b(a)?k:f},equals:function(b){return b.is(a)},equals_:function(b,d){return b.fold(c,function(b){return d(a,b)})},toArray:function(){return[a]},toString:function(){return\"some(\"+a+\")\"}};return k},h=function(a){return null===a||void 0===a?f:g(a)};return{some:g,none:e,from:h}}),h(\"a\",String),g(\"3\",[\"7\",\"8\",\"9\",\"a\"],function(a,b,c,d){var e=function(){var a=b.prototype.indexOf,c=function(b,c){return a.call(b,c)},d=function(a,b){return u(a,b)};return void 0===a?d:c}(),f=function(b,c){var d=e(b,c);return d===-1?a.none():a.some(d)},g=function(a,b){return e(a,b)>-1},h=function(a,b){return t(a,b).isSome()},i=function(a,b){for(var c=[],d=0;d<a;d++)c.push(b(d));return c},j=function(a,b){for(var c=[],d=0;d<a.length;d+=b){var e=a.slice(d,d+b);c.push(e)}return c},k=function(a,c){for(var d=a.length,e=new b(d),f=0;f<d;f++){var g=a[f];e[f]=c(g,f,a)}return e},l=function(a,b){for(var c=0,d=a.length;c<d;c++){var e=a[c];b(e,c,a)}},m=function(a,b){for(var c=a.length-1;c>=0;c--){var d=a[c];b(d,c,a)}},n=function(a,b){for(var c=[],d=[],e=0,f=a.length;e<f;e++){var g=a[e],h=b(g,e,a)?c:d;h.push(g)}return{pass:c,fail:d}},o=function(a,b){for(var c=[],d=0,e=a.length;d<e;d++){var f=a[d];b(f,d,a)&&c.push(f)}return c},p=function(a,b){if(0===a.length)return[];for(var c=b(a[0]),d=[],e=[],f=0,g=a.length;f<g;f++){var h=a[f],i=b(h);i!==c&&(d.push(e),e=[]),c=i,e.push(h)}return 0!==e.length&&d.push(e),d},q=function(a,b,c){return m(a,function(a){c=b(c,a)}),c},r=function(a,b,c){return l(a,function(a){c=b(c,a)}),c},s=function(b,c){for(var d=0,e=b.length;d<e;d++){var f=b[d];if(c(f,d,b))return a.some(f)}return a.none()},t=function(b,c){for(var d=0,e=b.length;d<e;d++){var f=b[d];if(c(f,d,b))return a.some(d)}return a.none()},u=function(a,b){for(var c=0,d=a.length;c<d;++c)if(a[c]===b)return c;return-1},v=b.prototype.push,w=function(a){for(var d=[],e=0,f=a.length;e<f;++e){if(!b.prototype.isPrototypeOf(a[e]))throw new c(\"Arr.flatten item \"+e+\" was not an array, input: \"+a);v.apply(d,a[e])}return d},x=function(a,b){var c=k(a,b);return w(c)},y=function(a,b){for(var c=0,d=a.length;c<d;++c){var e=a[c];if(b(e,c,a)!==!0)return!1}return!0},z=function(a,b){return a.length===b.length&&y(a,function(a,c){return a===b[c]})},A=b.prototype.slice,B=function(a){var b=A.call(a,0);return b.reverse(),b},C=function(a,b){return o(a,function(a){return!g(b,a)})},D=function(a,b){for(var c={},e=0,f=a.length;e<f;e++){var g=a[e];c[d(g)]=b(g,e)}return c},E=function(a){return[a]},F=function(a,b){var c=A.call(a,0);return c.sort(b),c};return{map:k,each:l,eachr:m,partition:n,filter:o,groupBy:p,indexOf:f,foldr:q,foldl:r,find:s,findIndex:t,flatten:w,bind:x,forall:y,exists:h,contains:g,equal:z,reverse:B,chunk:j,difference:C,mapToObject:D,pure:E,sort:F,range:i}}),g(\"c\",[],function(){return\"undefined\"==typeof console&&(console={log:function(){}}),console}),h(\"d\",document),g(\"4\",[\"b\",\"9\",\"c\",\"d\"],function(a,b,c,d){var e=function(a,b){var e=b||d,f=e.createElement(\"div\");if(f.innerHTML=a,!f.hasChildNodes()||f.childNodes.length>1)throw c.error(\"HTML does not have a single root node\",a),\"HTML must have a single root node\";return h(f.childNodes[0])},f=function(a,b){var c=b||d,e=c.createElement(a);return h(e)},g=function(a,b){var c=b||d,e=c.createTextNode(a);return h(e)},h=function(c){if(null===c||void 0===c)throw new b(\"Node cannot be null or undefined\");return{dom:a.constant(c)}};return{fromHtml:e,fromTag:f,fromText:g,fromDom:h}}),g(\"e\",[],function(){var a={\"\\xa0\":\"nbsp\",\"\\xad\":\"shy\"},b=function(a,b){var c,d=\"\";for(c in a)d+=c;return new RegExp(\"[\"+d+\"]\",b?\"g\":\"\")},c=function(a){var b,c=\"\";for(b in a)c&&(c+=\",\"),c+=\"span.mce-\"+a[b];return c};return{charMap:a,regExp:b(a),regExpGlobal:b(a,!0),selector:c(a),charMapToRegExp:b,charMapToSelector:c}}),g(\"i\",[],function(){return{ATTRIBUTE:2,CDATA_SECTION:4,COMMENT:8,DOCUMENT:9,DOCUMENT_TYPE:10,DOCUMENT_FRAGMENT:11,ELEMENT:1,TEXT:3,PROCESSING_INSTRUCTION:7,ENTITY_REFERENCE:5,ENTITY:6,NOTATION:12}}),g(\"g\",[\"i\"],function(a){var b=function(a){var b=a.dom().nodeName;return b.toLowerCase()},c=function(a){return a.dom().nodeType},d=function(a){return a.dom().nodeValue},e=function(a){return function(b){return c(b)===a}},f=function(d){return c(d)===a.COMMENT||\"#comment\"===b(d)},g=e(a.ELEMENT),h=e(a.TEXT),i=e(a.DOCUMENT);return{name:b,type:c,value:d,isElement:g,isText:h,isDocument:i,isComment:f}}),g(\"j\",[\"e\"],function(a){var b=function(b){return'<span data-mce-bogus=\"1\" class=\"mce-'+a.charMap[b]+'\">'+b+\"</span>\"};return{wrapCharWithSpan:b}}),g(\"f\",[\"3\",\"4\",\"g\",\"e\",\"j\"],function(a,b,c,d,e){var f=function(a){return c.isText(a)&&void 0!==c.value(a)&&d.regExp.test(c.value(a))},g=function(c,d){var e=[],f=c.dom(),h=a.map(f.childNodes,b.fromDom);return a.each(h,function(a){d(a)&&(e=e.concat([a])),e=e.concat(g(a,d))}),e},h=function(a,b){for(;a.parentNode;){if(a.parentNode===b)return a;a=a.parentNode}},i=function(a){return a.replace(d.regExpGlobal,e.wrapCharWithSpan)};return{isMatch:f,filterDescendants:g,findParentElm:h,replaceWithSpans:i}}),g(\"5\",[\"e\",\"f\",\"3\",\"4\",\"g\"],function(a,b,c,d,e){var f=function(a,f){var g,h,i=b.filterDescendants(d.fromDom(f),b.isMatch);c.each(i,function(c){var d=b.replaceWithSpans(e.value(c));for(h=a.dom.create(\"div\",null,d);g=h.lastChild;)a.dom.insertAfter(g,c.dom());a.dom.remove(c.dom())})},g=function(b,d){var e=b.dom.select(a.selector,d);c.each(e,function(a){b.dom.remove(a,1)})},h=function(a){var c=a.getBody(),d=a.selection.getBookmark(),e=b.findParentElm(a.selection.getNode(),c);e=void 0!==e?e:c,g(a,e),f(a,e),a.selection.moveToBookmark(d)};return{show:f,hide:g,toggle:h}}),g(\"0\",[\"1\",\"2\",\"3\",\"4\",\"5\"],function(a,b,c,d,e){return a.add(\"visualchars\",function(a){var c,d=this,f=function(){var b=this;a.on(\"VisualChars\",function(a){b.active(a.state)})},g=b.debounce(function(){e.toggle(a)},300);a.settings.forced_root_block!==!1&&a.on(\"keydown\",function(b){d.state===!0&&(13===b.keyCode?e.toggle(a):g())}),a.addCommand(\"mceVisualChars\",function(){var b,f=a.getBody(),g=a.selection;c=!c,d.state=c,a.fire(\"VisualChars\",{state:c}),b=g.getBookmark(),c===!0?e.show(a,f):e.hide(a,f),g.moveToBookmark(b)}),a.addButton(\"visualchars\",{title:\"Show invisible characters\",cmd:\"mceVisualChars\",onPostRender:f}),a.addMenuItem(\"visualchars\",{text:\"Show invisible characters\",cmd:\"mceVisualChars\",onPostRender:f,selectable:!0,context:\"view\",prependToContext:!0})}),function(){}}),d(\"0\")()}();\r\n!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i<g;++i)h[i]=d(e[i]);var j=f.apply(null,h);if(void 0===j)throw\"module [\"+b+\"] returned undefined\";c.instance=j},c=function(b,c,d){if(\"string\"!=typeof b)throw\"module id must be a string\";if(void 0===c)throw\"no dependencies for \"+b;if(void 0===d)throw\"no definition function for \"+b;a[b]={deps:c,defn:d,instance:void 0}},d=function(c){var d=a[c];if(void 0===d)throw\"module [\"+c+\"] was undefined\";return void 0===d.instance&&b(c),d.instance},e=function(a,b){for(var c=a.length,e=new Array(c),f=0;f<c;++f)e.push(d(a[f]));b.apply(null,b)},f={};f.bolt={module:{api:{define:c,require:e,demand:d}}};var g=c,h=function(a,b){g(a,[],function(){return b})};h(\"4\",tinymce.util.Tools.resolve),g(\"1\",[\"4\"],function(a){return a(\"tinymce.PluginManager\")}),g(\"2\",[\"4\"],function(a){return a(\"tinymce.util.Delay\")}),g(\"5\",[],function(){var a={aletter:\"[A-Za-z\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05f3\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u10a0-\\u10c5\\u10d0-\\u10fa\\u10fc\\u1100-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1a00-\\u1a16\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bc0-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u24b6-\\u24e9\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2d00-\\u2d25\\u2d30-\\u2d65\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005\\u303b\\u303c\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790\\ua791\\ua7a0-\\ua7a9\\ua7fa-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uffa0-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc]\",midnumlet:\"['\\\\.\\u2018\\u2019\\u2024\\ufe52\\uff07\\uff0e]\",midletter:\"[:\\xb7\\xb7\\u05f4\\u2027\\ufe13\\ufe55\\uff1a]\",midnum:\"[,;;\\u0589\\u060c\\u060d\\u066c\\u07f8\\u2044\\ufe10\\ufe14\\ufe50\\ufe54\\uff0c\\uff1b]\",numeric:\"[0-9\\u0660-\\u0669\\u066b\\u06f0-\\u06f9\\u07c0-\\u07c9\\u0966-\\u096f\\u09e6-\\u09ef\\u0a66-\\u0a6f\\u0ae6-\\u0aef\\u0b66-\\u0b6f\\u0be6-\\u0bef\\u0c66-\\u0c6f\\u0ce6-\\u0cef\\u0d66-\\u0d6f\\u0e50-\\u0e59\\u0ed0-\\u0ed9\\u0f20-\\u0f29\\u1040-\\u1049\\u1090-\\u1099\\u17e0-\\u17e9\\u1810-\\u1819\\u1946-\\u194f\\u19d0-\\u19d9\\u1a80-\\u1a89\\u1a90-\\u1a99\\u1b50-\\u1b59\\u1bb0-\\u1bb9\\u1c40-\\u1c49\\u1c50-\\u1c59\\ua620-\\ua629\\ua8d0-\\ua8d9\\ua900-\\ua909\\ua9d0-\\ua9d9\\uaa50-\\uaa59\\uabf0-\\uabf9]\",cr:\"\\\\r\",lf:\"\\\\n\",newline:\"[\\x0B\\f\\x85\\u2028\\u2029]\",extend:\"[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065f\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0900-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0c01-\\u0c03\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c82\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d02\\u0d03\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f\\u109a-\\u109d\\u135d-\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b6-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u19b0-\\u19c0\\u19c8\\u19c9\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1baa\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf2\\u1dc0-\\u1de6\\u1dfc-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua880\\ua881\\ua8b4-\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa7b\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe3-\\uabea\\uabec\\uabed\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]\",format:\"[\\xad\\u0600-\\u0603\\u06dd\\u070f\\u17b4\\u17b5\\u200e\\u200f\\u202a-\\u202e\\u2060-\\u2064\\u206a-\\u206f\\ufeff\\ufff9-\\ufffb]\",katakana:\"[\\u3031-\\u3035\\u309b\\u309c\\u30a0-\\u30fa\\u30fc-\\u30ff\\u31f0-\\u31ff\\u32d0-\\u32fe\\u3300-\\u3357\\uff66-\\uff9d]\",extendnumlet:\"[_\\u203f\\u2040\\u2054\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff3f]\",punctuation:\"[!-#%-*,-\\\\/:;?@\\\\[-\\\\]_{}\\xa1\\xab\\xb7\\xbb\\xbf;\\xb7\\u055a-\\u055f\\u0589\\u058a\\u05be\\u05c0\\u05c3\\u05c6\\u05f3\\u05f4\\u0609\\u060a\\u060c\\u060d\\u061b\\u061e\\u061f\\u066a-\\u066d\\u06d4\\u0700-\\u070d\\u07f7-\\u07f9\\u0830-\\u083e\\u085e\\u0964\\u0965\\u0970\\u0df4\\u0e4f\\u0e5a\\u0e5b\\u0f04-\\u0f12\\u0f3a-\\u0f3d\\u0f85\\u0fd0-\\u0fd4\\u0fd9\\u0fda\\u104a-\\u104f\\u10fb\\u1361-\\u1368\\u1400\\u166d\\u166e\\u169b\\u169c\\u16eb-\\u16ed\\u1735\\u1736\\u17d4-\\u17d6\\u17d8-\\u17da\\u1800-\\u180a\\u1944\\u1945\\u1a1e\\u1a1f\\u1aa0-\\u1aa6\\u1aa8-\\u1aad\\u1b5a-\\u1b60\\u1bfc-\\u1bff\\u1c3b-\\u1c3f\\u1c7e\\u1c7f\\u1cd3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205e\\u207d\\u207e\\u208d\\u208e\\u3008\\u3009\\u2768-\\u2775\\u27c5\\u27c6\\u27e6-\\u27ef\\u2983-\\u2998\\u29d8-\\u29db\\u29fc\\u29fd\\u2cf9-\\u2cfc\\u2cfe\\u2cff\\u2d70\\u2e00-\\u2e2e\\u2e30\\u2e31\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301f\\u3030\\u303d\\u30a0\\u30fb\\ua4fe\\ua4ff\\ua60d-\\ua60f\\ua673\\ua67e\\ua6f2-\\ua6f7\\ua874-\\ua877\\ua8ce\\ua8cf\\ua8f8-\\ua8fa\\ua92e\\ua92f\\ua95f\\ua9c1-\\ua9cd\\ua9de\\ua9df\\uaa5c-\\uaa5f\\uaade\\uaadf\\uabeb\\ufd3e\\ufd3f\\ufe10-\\ufe19\\ufe30-\\ufe52\\ufe54-\\ufe61\\ufe63\\ufe68\\ufe6a\\ufe6b\\uff01-\\uff03\\uff05-\\uff0a\\uff0c-\\uff0f\\uff1a\\uff1b\\uff1f\\uff20\\uff3b-\\uff3d\\uff3f\\uff5b\\uff5d\\uff5f-\\uff65]\"},b={ALETTER:0,MIDNUMLET:1,MIDLETTER:2,MIDNUM:3,NUMERIC:4,CR:5,LF:6,NEWLINE:7,EXTEND:8,FORMAT:9,KATAKANA:10,EXTENDNUMLET:11,AT:12,OTHER:13},c=[new RegExp(a.aletter),new RegExp(a.midnumlet),new RegExp(a.midletter),new RegExp(a.midnum),new RegExp(a.numeric),new RegExp(a.cr),new RegExp(a.lf),new RegExp(a.newline),new RegExp(a.extend),new RegExp(a.format),new RegExp(a.katakana),new RegExp(a.extendnumlet),new RegExp(\"@\")],d=\"\",e=new RegExp(\"^\"+a.punctuation+\"$\"),f=/\\s/;return{characterIndices:b,SETS:c,EMPTY_STRING:d,PUNCTUATION:e,WHITESPACE:f}}),g(\"8\",[],function(){var a=function(a,b,c){var d,e;if(!a)return 0;if(c=c||a,void 0!==a.length){for(d=0,e=a.length;d<e;d++)if(b.call(c,a[d],d,a)===!1)return 0}else for(d in a)if(a.hasOwnProperty(d)&&b.call(c,a[d],d,a)===!1)return 0;return 1},b=function(b,c){var d=[];return a(b,function(a,e){d.push(c(a,e,b))}),d};return{each:a,map:b}}),g(\"6\",[\"5\",\"8\"],function(a,b){var c=a.SETS,d=a.characterIndices.OTHER,e=function(a){var b,e,f=d,g=c.length;for(b=0;b<g;++b)if(e=c[b],e&&e.test(a)){f=b;break}return f},f=function(a){var b={};return function(c){if(b[c])return b[c];var d=a(c);return b[c]=d,d}},g=function(a){var c=f(e);return b.map(a.split(\"\"),c)};return{classify:g}}),g(\"7\",[\"5\"],function(a){var b=a.characterIndices,c=function(a,c){var d,e,f=a[c],g=a[c+1];return!(c<0||c>a.length-1&&0!==c)&&((f!==b.ALETTER||g!==b.ALETTER)&&(e=a[c+2],(f!==b.ALETTER||g!==b.MIDLETTER&&g!==b.MIDNUMLET&&g!==b.AT||e!==b.ALETTER)&&(d=a[c-1],(f!==b.MIDLETTER&&f!==b.MIDNUMLET&&g!==b.AT||g!==b.ALETTER||d!==b.ALETTER)&&((f!==b.NUMERIC&&f!==b.ALETTER||g!==b.NUMERIC&&g!==b.ALETTER)&&((f!==b.MIDNUM&&f!==b.MIDNUMLET||g!==b.NUMERIC||d!==b.NUMERIC)&&((f!==b.NUMERIC||g!==b.MIDNUM&&g!==b.MIDNUMLET||e!==b.NUMERIC)&&(f!==b.EXTEND&&f!==b.FORMAT&&d!==b.EXTEND&&d!==b.FORMAT&&g!==b.EXTEND&&g!==b.FORMAT&&((f!==b.CR||g!==b.LF)&&(f===b.NEWLINE||f===b.CR||f===b.LF||(g===b.NEWLINE||g===b.CR||g===b.LF||(f!==b.KATAKANA||g!==b.KATAKANA)&&((g!==b.EXTENDNUMLET||f!==b.ALETTER&&f!==b.NUMERIC&&f!==b.KATAKANA&&f!==b.EXTENDNUMLET)&&((f!==b.EXTENDNUMLET||g!==b.ALETTER&&g!==b.NUMERIC&&g!==b.KATAKANA)&&f!==b.AT))))))))))))};return{isWordBoundary:c}}),g(\"3\",[\"5\",\"6\",\"7\"],function(a,b,c){var d=a.EMPTY_STRING,e=a.WHITESPACE,f=a.PUNCTUATION,g=function(a){return\"http\"===a||\"https\"===a},h=function(a,b){var c;for(c=b;c<a.length;++c){var d=a.charAt(c);if(e.test(d))break}return c},i=function(a,b,c){var d=h(b,c+1),e=b.substring(c+1,d);return\"://\"===e.substr(0,3)?{word:a+e,index:d}:{word:a,index:c}},j=function(a,h){var j,k,l,m=0,n=b.classify(a),o=n.length,p=[],q=[];for(h||(h={}),h.ignoreCase&&(a=a.toLowerCase()),k=h.includePunctuation,l=h.includeWhitespace;m<o;++m)if(j=a.charAt(m),p.push(j),c.isWordBoundary(n,m)){if(p=p.join(d),p&&(l||!e.test(p))&&(k||!f.test(p)))if(g(p)){var r=i(p,a,m);q.push(r.word),m=r.index}else q.push(p);p=[]}return q};return{getWords:j}}),g(\"0\",[\"1\",\"2\",\"3\"],function(a,b,c){return a.add(\"wordcount\",function(a){var d=function(a){return a.removed?\"\":a.getBody().innerText},e=function(){return c.getWords(d(a)).length},f=function(){a.theme.panel.find(\"#wordcount\").text([\"Words: {0}\",e()])};return a.on(\"init\",function(){var c=a.theme.panel&&a.theme.panel.find(\"#statusbar\")[0],d=b.debounce(f,300);c&&b.setEditorTimeout(a,function(){c.insert({type:\"label\",name:\"wordcount\",text:[\"Words: {0}\",e()],classes:\"wordcount\",disabled:a.settings.readonly},0),a.on(\"setcontent beforeaddundo undo redo keyup\",d)},0)}),{getCount:e}}),function(){}}),d(\"0\")()}();","/* FileSaver.js\n * A saveAs() FileSaver implementation.\n * 1.3.2\n * 2016-06-16 18:25:19\n *\n * By Eli Grey, http://eligrey.com\n * License: MIT\n *   See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md\n */\n\n/*global self */\n/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */\n\n/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */\n\nvar saveAs = saveAs || (function(view) {\n\t//\"use strict\";\n\t// IE <10 is explicitly unsupported\n\tif (typeof view === \"undefined\" || typeof navigator !== \"undefined\" && /MSIE [1-9]\\./.test(navigator.userAgent)) {\n\t\treturn;\n\t}\n\tvar\n\t\t  doc = view.document\n\t\t  // only get URL when necessary in case Blob.js hasn't overridden it yet\n\t\t, get_URL = function() {\n\t\t\treturn view.URL || view.webkitURL || view;\n\t\t}\n\t\t, save_link = doc.createElementNS(\"http://www.w3.org/1999/xhtml\", \"a\")\n\t\t, can_use_save_link = \"download\" in save_link\n\t\t, click = function(node) {\n\t\t\tvar event = new MouseEvent(\"click\");\n\t\t\tnode.dispatchEvent(event);\n\t\t}\n\t\t, is_safari = /constructor/i.test(view.HTMLElement) || view.safari\n\t\t, is_chrome_ios =/CriOS\\/[\\d]+/.test(navigator.userAgent)\n\t\t, throw_outside = function(ex) {\n\t\t\t(view.setImmediate || view.setTimeout)(function() {\n\t\t\t\tthrow ex;\n\t\t\t}, 0);\n\t\t}\n\t\t, force_saveable_type = \"application/octet-stream\"\n\t\t// the Blob API is fundamentally broken as there is no \"downloadfinished\" event to subscribe to\n\t\t, arbitrary_revoke_timeout = 1000 * 40 // in ms\n\t\t, revoke = function(file) {\n\t\t\tvar revoker = function() {\n\t\t\t\tif (typeof file === \"string\") { // file is an object URL\n\t\t\t\t\tget_URL().revokeObjectURL(file);\n\t\t\t\t} else { // file is a File\n\t\t\t\t\tfile.remove();\n\t\t\t\t}\n\t\t\t};\n\t\t\tsetTimeout(revoker, arbitrary_revoke_timeout);\n\t\t}\n\t\t, dispatch = function(filesaver, event_types, event) {\n\t\t\tevent_types = [].concat(event_types);\n\t\t\tvar i = event_types.length;\n\t\t\twhile (i--) {\n\t\t\t\tvar listener = filesaver[\"on\" + event_types[i]];\n\t\t\t\tif (typeof listener === \"function\") {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tlistener.call(filesaver, event || filesaver);\n\t\t\t\t\t} catch (ex) {\n\t\t\t\t\t\tthrow_outside(ex);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t, auto_bom = function(blob) {\n\t\t\t// prepend BOM for UTF-8 XML and text/* types (including HTML)\n\t\t\t// note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n\t\t\tif (/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n\t\t\t\treturn new Blob([String.fromCharCode(0xFEFF), blob], {type: blob.type});\n\t\t\t}\n\t\t\treturn blob;\n\t\t}\n\t\t, FileSaver = function(blob, name, no_auto_bom) {\n\t\t\tif (!no_auto_bom) {\n\t\t\t\tblob = auto_bom(blob);\n\t\t\t}\n\t\t\t// First try a.download, then web filesystem, then object URLs\n\t\t\tvar\n\t\t\t\t  filesaver = this\n\t\t\t\t, type = blob.type\n\t\t\t\t, force = type === force_saveable_type\n\t\t\t\t, object_url\n\t\t\t\t, dispatch_all = function() {\n\t\t\t\t\tdispatch(filesaver, \"writestart progress write writeend\".split(\" \"));\n\t\t\t\t}\n\t\t\t\t// on any filesys errors revert to saving with object URLs\n\t\t\t\t, fs_error = function() {\n\t\t\t\t\tif ((is_chrome_ios || (force && is_safari)) && view.FileReader) {\n\t\t\t\t\t\t// Safari doesn't allow downloading of blob urls\n\t\t\t\t\t\tvar reader = new FileReader();\n\t\t\t\t\t\treader.onloadend = function() {\n\t\t\t\t\t\t\tvar url = is_chrome_ios ? reader.result : reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;');\n\t\t\t\t\t\t\tvar popup = view.open(url, '_blank');\n\t\t\t\t\t\t\tif(!popup) view.location.href = url;\n\t\t\t\t\t\t\turl=undefined; // release reference before dispatching\n\t\t\t\t\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\t\t\t\t\tdispatch_all();\n\t\t\t\t\t\t};\n\t\t\t\t\t\treader.readAsDataURL(blob);\n\t\t\t\t\t\tfilesaver.readyState = filesaver.INIT;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// don't create more object URLs than needed\n\t\t\t\t\tif (!object_url) {\n\t\t\t\t\t\tobject_url = get_URL().createObjectURL(blob);\n\t\t\t\t\t}\n\t\t\t\t\tif (force) {\n\t\t\t\t\t\tview.location.href = object_url;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar opened = view.open(object_url, \"_blank\");\n\t\t\t\t\t\tif (!opened) {\n\t\t\t\t\t\t\t// Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html\n\t\t\t\t\t\t\tview.location.href = object_url;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\t\t\tdispatch_all();\n\t\t\t\t\trevoke(object_url);\n\t\t\t\t}\n\t\t\t;\n\t\t\tfilesaver.readyState = filesaver.INIT;\n\n\t\t\tif (can_use_save_link) {\n\t\t\t\tobject_url = get_URL().createObjectURL(blob);\n\t\t\t\tsetTimeout(function() {\n\t\t\t\t\tsave_link.href = object_url;\n\t\t\t\t\tsave_link.download = name;\n\t\t\t\t\tclick(save_link);\n\t\t\t\t\tdispatch_all();\n\t\t\t\t\trevoke(object_url);\n\t\t\t\t\tfilesaver.readyState = filesaver.DONE;\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfs_error();\n\t\t}\n\t\t, FS_proto = FileSaver.prototype\n\t\t, saveAs = function(blob, name, no_auto_bom) {\n\t\t\treturn new FileSaver(blob, name || blob.name || \"download\", no_auto_bom);\n\t\t}\n\t;\n\t// IE 10+ (native saveAs)\n\tif (typeof navigator !== \"undefined\" && navigator.msSaveOrOpenBlob) {\n\t\treturn function(blob, name, no_auto_bom) {\n\t\t\tname = name || blob.name || \"download\";\n\n\t\t\tif (!no_auto_bom) {\n\t\t\t\tblob = auto_bom(blob);\n\t\t\t}\n\t\t\treturn navigator.msSaveOrOpenBlob(blob, name);\n\t\t};\n\t}\n\n\tFS_proto.abort = function(){};\n\tFS_proto.readyState = FS_proto.INIT = 0;\n\tFS_proto.WRITING = 1;\n\tFS_proto.DONE = 2;\n\n\tFS_proto.error =\n\tFS_proto.onwritestart =\n\tFS_proto.onprogress =\n\tFS_proto.onwrite =\n\tFS_proto.onabort =\n\tFS_proto.onerror =\n\tFS_proto.onwriteend =\n\t\tnull;\n\n\treturn saveAs;\n}(\n\t   typeof self !== \"undefined\" && self\n\t|| typeof window !== \"undefined\" && window\n\t|| this.content\n));\n// `self` is undefined in Firefox for Android content script context\n// while `this` is nsIContentFrameMessageManager\n// with an attribute `content` that corresponds to the window\n\nif (typeof module !== \"undefined\" && module.exports) {\n  module.exports.saveAs = saveAs;\n} else if ((typeof define !== \"undefined\" && define !== null) && (define.amd !== null)) {\n  define(\"FileSaver.js\", function() {\n    return saveAs;\n  });\n}","var a24Constants = {\n    //Don't add anything in here, this is purely to create the object if the project using\n    //this addon does not create and import one.\n    //In ember the parent vendor file with the same name and location will take preference over a file with the same\n    //name and directory in addons(one in addon will not be imported, only the parent one),\n    //If the parent does not have that file but 2 addons have that file then the last addon to be added in the\n    //package.json in the parent, will take preference.\n};\n","var a24ConstantsExtend = {\n\n    DATE_FORMAT_REST_FORMAT_MONTH_YEAR_ONLY: \"MMMM YYYY\",\n    DATE_FORMAT_REST_FORMAT_DATE_ONLY: \"DD MMMM YYYY\",\n    DATE_FORMAT_REST_FORMAT_WITHOUT_TZ: \"DD MMMM YYYY HH:mm:ss\",\n    DATE_FORMAT_REST_FORMAT: \"DD MMMM YYYY HH:mm:ss ZZ\", // We expect this format to contain time and timezone for the datehelper to work correctly\n\n    SIZE_LIMIT_COMPONENT_MAX_WIDTH: 752,\n    SNACKBAR_SLIDE_TIME: 500,\n\n    // #### This is only here because of the date helper using the constants\n    DATE_FORMAT: \"DD MMM YYYY\",\n    DATE_FORMAT_ISO_FORMAT: \"YYYY-MM-DDTHH:mm:ssZ\",\n    DATE_TIME_FORMAT: \"DD MMM YYYY HH:mm\",\n    DATE_TIME_DASH_FORMAT: \"DD MMM YYYY - HH:mm\",\n    TIME_FORMAT: \"HH:mm\",\n    YEAR_FORMAT: \"YYYY\",\n    MONTH_FORMAT: \"MMM\",\n    MONTH_YEAR_FORMAT: \"MMM YYYY\",\n    DAY_FORMAT: \"DD\",\n\n    MILLISECONDS_1_SECOND: 1000,\n    MILLISECONDS_1_MINUTE: 60000,\n    MILLISECONDS_1_DAY: 86400000,\n\n    MOMENT_TIME_YEARS: \"years\",\n    MOMENT_TIME_MONTHS: \"months\",\n    MOMENT_TIME_WEEKS: \"weeks\",\n    MOMENT_TIME_DATE: \"date\",\n    MOMENT_TIME_DAYS: \"days\",\n    MOMENT_TIME_HOURS: \"hours\",\n    MOMENT_TIME_MINUTES: \"minutes\",\n    MOMENT_TIME_SECONDS: \"seconds\",\n\n    MOMENT_UNIT_ISO_WEEK: \"isoWeek\",\n    MOMENT_UNIT_YEAR: \"year\",\n    MOMENT_UNIT_MONTH: \"month\",\n    MOMENT_TIMEZONE_UTC: \"UTC\",\n\n    MAX_END_HOUR: 23,\n    MAX_END_MIN: 59,\n    MAX_END_SEC: 59,\n    // ####\n\n};\n\n//Only add the extended values to the a24Constants if they do not exist on it already\nObject.keys(a24ConstantsExtend).forEach(function(sKey) {\n    if (!a24Constants.hasOwnProperty(sKey)) {\n        a24Constants[sKey] = a24ConstantsExtend[sKey];\n    }\n});\n","var a24 = {\n    //Don't add anything in here, this is purely to create the object if the project using\n    //this addon does not create and import one.\n    //In ember the parent vendor file with the same name and location will take preference over a file with the same\n    //name and directory in addons(one in addon will not be imported, only the parent one),\n    //If the parent does not have that file but 2 addons have that file then the last addon to be added in the\n    //package.json in the parent, will take preference.\n};\n","var a24Extend = {\n    // TODO Might need to move to the component\n    getCardActionsMarginStyle: function(arrActions, objSpecialAction, iVisibleItems) {\n        var iActionCount = 0;\n        if (!a24Core.isEmpty(arrActions)) {\n            iActionCount = arrActions.length;\n        }\n\n        //If the special item is there we need to decrease the visible items by one\n        if (!a24Core.isEmpty(objSpecialAction)) {\n            iVisibleItems = iVisibleItems - 1;\n        }\n\n        //When there are more items that allowed to be visible another item will show up for the overflow\n        //So the amount of visible items will then be the allowed visible count plus one for overflow\n        if (iActionCount > iVisibleItems) {\n            iActionCount = iVisibleItems + 1;\n        }\n\n        //We need to recheck the special item since we now need to increase the action count since the special item\n        //also takes space\n        if (!a24Core.isEmpty(objSpecialAction)) {\n            iActionCount = iActionCount + 1;\n        }\n\n        //Return the correct style for the needed margin\n        if (iActionCount == 0) {\n            return \"\";\n        } else {\n            return \"action-margin-\" + iActionCount;\n        }\n    },\n    /**\n     * This function will return a formatted array of timezones, which can be\n     * used in a drop down component\n     *\n     * @author Deon De Wet <deon.dewet@a24group.com>\n     * @since  18 Dec 2017\n     */\n    // TODO will have to move to the date helper\n    getTimezones: function () {\n        var arrTimezoneFormated = [];\n        var arrTimezones = momentHelper.getTimezones();\n        $.each(arrTimezones, function(iKey, sTimezone) {\n            arrTimezoneFormated.push(\n                {\n                    sLabel: sTimezone,\n                    sValue: sTimezone\n                }\n            );\n\n        });\n\n        return arrTimezoneFormated;\n    }\n};\n\n//Only add the extended values to the a24 if they do not exist on it already\nObject.keys(a24Extend).forEach(function(sKey) {\n    if (!a24.hasOwnProperty(sKey)) {\n        a24[sKey] = a24Extend[sKey];\n    }\n});\n","var a24DateManager = {\n    //Don't add anything in here, this is purely to create the object if the project using\n    //this addon does not create and import one.\n    //In ember the parent vendor file with the same name and location will take preference over a file with the same\n    //name and directory in addons(one in addon will not be imported, only the parent one),\n    //If the parent does not have that file but 2 addons have that file then the last addon to be added in the\n    //package.json in the parent, will take preference.\n};\n\nvar momentHelper = {\n    //Don't add anything in here, this is purely to create the object if the project using\n    //this addon does not create and import one.\n    //In ember the parent vendor file with the same name and location will take preference over a file with the same\n    //name and directory in addons(one in addon will not be imported, only the parent one),\n    //If the parent does not have that file but 2 addons have that file then the last addon to be added in the\n    //package.json in the parent, will take preference.\n};\n\nvar _objTimeZoneDate = {\n    //Don't add anything in here, this is purely to create the object if the project using\n    //this addon does not create and import one.\n    //In ember the parent vendor file with the same name and location will take preference over a file with the same\n    //name and directory in addons(one in addon will not be imported, only the parent one),\n    //If the parent does not have that file but 2 addons have that file then the last addon to be added in the\n    //package.json in the parent, will take preference.\n};\n","var a24DateManagerExtend = {\n    /**\n     * This is a wrapper function for creating TimeZoneDate date objects.\n     *\n     * @param sTimeZone - The timezone the date should be created in.\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     *\n     * @returns TimeZoneDate\n     */\n    createDate: function(sTimeZone, sDisplayTimezone) {\n        return TimeZoneDate.create({\n            _sTimeZone: sTimeZone, \n            _sDisplayTimezone: !a24Core.isEmpty(sDisplayTimezone) ? sDisplayTimezone : sTimeZone\n        });\n    },\n    /**\n     * This function will trim the timezone from a rest date formatted string\n     * Date string will always use constant DATE_FORMAT_REST_FORMAT which will always return the timezone.\n     * Because of above statement we can just trim off the last 5-6 chars with the special case of UTC timezone that\n     * has a Z at the end.\n     * Only meant to be used inside the a24DateHelper.js\n     *\n     * @param sRestDateString - The rest date string to trim, formatted with the constant DATE_FORMAT_REST_FORMAT\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     *\n     * @returns The time zone stripped date string or null if sent in value is null\n     */\n    _stripTimeZone: function(sRestDateString) {\n        // This is so we can trim off the timezone with the following formats for timezones\n        /*\n            2013-02-08 09+07:00            # +-HH:mm\n            2013-02-08 09-0100             # +-HHmm\n            2013-02-08 09Z                 # Z\n            2013-02-08 09:30:26.123+07:00  # +-HH:mm\n            2013-02-08 09:30:26.123+07     # +-HH\n        */\n        if (a24Core.isEmpty(sRestDateString)) {\n            return null;\n        } else if (sRestDateString.charAt(sRestDateString.length - 1) === \"Z\") {\n            return sRestDateString.substr(0, sRestDateString.length - 1);\n        } else {\n            var iTimezonePosition = sRestDateString.lastIndexOf(\"+\");\n            // Check if its one of the last 6 characters\n            if (iTimezonePosition >= (sRestDateString.length - 6)) {\n                return sRestDateString.substr(0, iTimezonePosition);\n            } else {\n                iTimezonePosition = sRestDateString.lastIndexOf(\"-\");\n                if (iTimezonePosition >= (sRestDateString.length - 6)) {\n                    return sRestDateString.substr(0, iTimezonePosition);\n                }\n            }\n\n            return sRestDateString;\n        }\n\n    }\n};\n\n/**\n * This is the moment helper object, that wraps all\n * moment.js functions, so that we can have them in\n * a central place.\n */\nvar momentHelperExtend = {\n    /**\n     * This function will return all the timezone offset change details for the passed in timezone.\n     *\n     * @param sTimeZone - The timezone to retrieve offset change details\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     *\n     * @returns Object - All the timezone offset change details for the passed in timezone.\n     */\n    getTimeZoneChangesDetails: function(sTimeZone) {\n        return moment.tz.zone(sTimeZone);\n    },\n    /**\n     * This function will filter the timezone offset details to only return the details of the range specified.\n     * If the end year is null then the end year will be set the same as the start year.\n     *\n     * @param objTimeZoneChanges - The timezone offset change details\n     * @param iStartYear - The year to start filtering from\n     * @param iEndYear - The year to end filtering on\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     *\n     * @returns Object - The filtered timezone offset change details.\n     */\n    getTimeZoneChangesFiltered: function(objTimeZoneChanges, iStartYear, iEndYear) {\n        return moment.tz.filterYears(objTimeZoneChanges, iStartYear, iEndYear);\n    },\n    /**\n     * This function will take a date string and convert it to date string with the correct offset for the passed in\n     * timezone and make sure that the date and time is NOT affected by the change.\n     *\n     * E.g of Europe/London timezone:\n     *    IN: 12 June 2014 05:00:00 +0200\n     *   out: 12 June 2014 05:00:00 +0100\n     *\n     * @param sDate - The date to convert (Must be in \"DD MMMM YYYY HH:mm:ss ZZ\" format)\n     * @param sTimeZone - The timezone to convert the date to.\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     *\n     * @returns The date string with the correct date, time and now also offset.\n     */\n    duplicateDateAndTimeToTimeZone: function(sDate, sTimeZone) {\n        var sDateWithoutTZ = a24DateManager._stripTimeZone(sDate);\n        return moment.tz(\n            sDateWithoutTZ,\n            a24Constants.DATE_FORMAT_REST_FORMAT_WITHOUT_TZ,\n            sTimeZone\n        ).format(a24Constants.DATE_FORMAT_REST_FORMAT);\n    },\n    /**\n     * This function will get the full year from the passed in date string\n     *\n     * @param sDate - The string date\n     * @param sParseFormat - The format to use to parse the string date\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     *\n     * @returns The full year from the passed in date string\n     */\n    getFullYear: function(sDate, sParseFormat) {\n        return this._stringToMoment(sDate, sParseFormat).get(a24Constants.MOMENT_TIME_YEARS);\n    },\n    /**\n     * This function will get the time stamp of the passed in date string\n     *\n     * @param sDate - The string date\n     * @param sParseFormat - The format to use to parse the string date\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     *\n     * @returns This function will get the time stamp of the passed in date string\n     */\n    getTime: function(sDate, sParseFormat) {\n        return this._stringToMoment(sDate, sParseFormat).unix();\n    },\n    /**\n     * This function will get a date string for the current date\n     *\n     * @param sDisplayFormat - The format to display the date in\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     *\n     * @returns A date string for the current date\n     */\n    getCurrentDateString: function(sDisplayFormat) {\n        return this._currentDateToMoment().format(sDisplayFormat);\n    },\n    /**\n     * This method will parse a string, and format it\n     *\n     * @param sDate - The string date\n     * @param sParseFormat - The format to use to parse the string date\n     * @param sDisplayFormat - The format to display the date in\n     *\n     * @return The formatted string\n     */\n    stringFormat: function(sDate, sParseFormat, sDisplayFormat) {\n        return this._stringToMoment(sDate, sParseFormat).format(sDisplayFormat);\n    },\n    /**\n     * This method will return a moment object with the current date\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 11 July 2016\n     *\n     * @return The moment object\n     */\n    _currentDateToMoment: function() {\n        return moment();\n    },\n    /**\n     * This function simply returns the current timestamp in milliseconds\n     *\n     * This function is allowed to be used outside of the Date Helper since the date helper was not written to be\n     * more specific than seconds. Thus if you try and get the time stamp from the date helper is will always round\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 03 May 2017\n     *\n     * @return The timestamp in milliseconds\n     */\n    getTimezoneInMilli: function() {\n        return moment.tz(a24Constants.MOMENT_TIMEZONE_UTC).valueOf();\n    },\n    /**\n     * This function simply returns the timezone offset in minutes\n     *\n     * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n     * @since  02 December 2019\n     *\n     * @return The timezone offset in minutes\n     */\n    getDateTimezoneOffset: function(sDate, sParseFormat) {\n        return moment.parseZone(sDate, sParseFormat).zone();\n    },\n    /**\n     * This method will parse a string, and return the moment object\n     *\n     * @param sDate - The string date\n     * @param sParseFormat - The format to use to parse the string date\n     *\n     * @return The moment object\n     */\n    _stringToMoment: function(sDate, sParseFormat) {\n        return moment(sDate, sParseFormat);\n    },\n    /**\n     * This method will parse a time stamp, and return the moment object\n     *\n     * @param iTime - The time stamp\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     *\n     * @return The moment object\n     */\n    _timeToMoment: function(iTime) {\n        return moment(iTime);\n    },\n    /**\n     * This method will calculate the difference of two dates, and\n     * return it in the given time unit.\n     *\n     * @param sDate1 - The first string date\n     * @param sParseFormat1 - The format to use to parse the first string date\n     * @param sDate2 - The second string date\n     * @param sParseFormat2 - The format to use to parse the second string date\n     * @param sTimeUnit - The time unit, e.g. month, second, year, etc\n     * @param bFloatPoint - Whether to return a float value that is NOT rounded down.(moment will round DOWN by default)\n     *\n     * @return The time difference in the given time unit\n     */\n    stringDiffInUnits: function(sDate1, sParseFormat1, sDate2, sParseFormat2, sTimeUnit, bFloatPoint) {\n        var objDate1 = this._stringToMoment(\n            sDate1,\n            sParseFormat1\n        );\n        var objDate2 = this._stringToMoment(\n            sDate2,\n            sParseFormat2\n        );\n        if (a24Core.isEmpty(bFloatPoint)) {\n            bFloatPoint = false;\n        }\n        return objDate1.diff(objDate2, sTimeUnit, bFloatPoint);\n    },\n    /**\n     * This method will format a date object\n     *\n     * @param objDate - The object date we want to format\n     * @param sDisplayFormat - The format to display the date in\n     *\n     * @return The formatted string\n     */\n    dateFormat: function(objDate, sDisplayFormat) {\n        var sDate = objDate.toISOString();\n        return this.stringFormat(sDate, a24Constants.DATE_FORMAT_ISO_FORMAT, sDisplayFormat);\n    },\n    /**\n     * This method will parse a time stamp, and format it to the given timezone\n     *\n     * @param iTimeStamp - The time stamp in milliseconds.\n     * @param sTimezone - The timezone to convert date to\n     * @param sDisplayFormat - The format to display the date in\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     *\n     * @return The formatted string\n     */\n    timeStampTimezoneFormat: function(iTimeStamp, sTimezone, sDisplayFormat) {\n        return this._timeToMoment(iTimeStamp).tz(sTimezone).format(sDisplayFormat);\n    },\n    /**\n     * This method will parse a string, and format it to the given timezone\n     *\n     * @param sDate - The string date\n     * @param sParseFormat - The format to use to parse the string date\n     * @param sTimezone - The timezone to convert date to\n     * @param sDisplayFormat - The format to display the date in\n     *\n     * @return The formatted string\n     */\n    stringTimezoneFormat: function(sDate, sParseFormat, sTimezone, sDisplayFormat) {\n        return this._stringToMoment(sDate, sParseFormat).tz(sTimezone).format(sDisplayFormat);\n    },\n    /**\n     * This method will parse a string to a date object\n     *\n     * @param sDate - The string date\n     * @param sParseFormat - The format to use to parse the string date\n     *\n     * @return The date object\n     */\n    stringToDate: function(sDate, sParseFormat) {\n        return this._stringToMoment(sDate, sParseFormat).toDate();\n    },\n    /**\n     * This method will parse a string and add time to the given date and return a date object.\n     *\n     * @param sDate - The string date\n     * @param sParseFormat - The format to use to parse the string date\n     * @param sTimeUnit - The time unit, e.g. month, second, year, etc\n     * @param iDuration - The duration to add time\n     *\n     * @return The date object\n     */\n    stringAddTimeToDate: function(sDate, sParseFormat, sTimeUnit, iDuration) {\n        return this._stringToMoment(sDate, sParseFormat).add(iDuration, sTimeUnit).toDate();\n    },\n    /**\n     * This method will parse a string and add time to the given date and return the formatted date string\n     *\n     * @param sDate - The string date\n     * @param sParseFormat - The format to use to parse the string date\n     * @param sTimeUnit - The time unit, e.g. month, second, year, etc\n     * @param iDuration - The duration to add time\n     * @param sDisplayFormat - The format to display the date in\n     *\n     * @return The formatted date string\n     */\n    stringAddTimeToString: function(sDate, sParseFormat, sTimeUnit, iDuration, sDisplayFormat) {\n        return this._stringToMoment(sDate, sParseFormat).add(iDuration, sTimeUnit).format(sDisplayFormat);\n    },\n    /**\n     * This method will parse a string and subtract time from the given date and return the formatted date string\n     *\n     * @param sDate - The string date\n     * @param sParseFormat - The format to use to parse the string date\n     * @param sTimeUnit - The time unit, e.g. month, second, year, etc\n     * @param iDuration - The duration to subtract from time\n     * @param sDisplayFormat - The format to display the date in\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 13 Movember 2015\n     *\n     * @return The formatted date string\n     */\n    stringSubtractTimeFromString: function(sDate, sParseFormat, sTimeUnit, iDuration, sDisplayFormat) {\n        return this._stringToMoment(sDate, sParseFormat).subtract(iDuration, sTimeUnit).format(sDisplayFormat);\n    },\n    /**\n     * This method will change the date to the start of the specified time unit and return the formatted date string\n     *\n     * @param sDate - The string date\n     * @param sParseFormat - The format to use to parse the string date\n     * @param sTimeUnit - The time unit, e.g. week, month, second, year, etc\n     * @param sDisplayFormat - The format to display the date in\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 13 Movember 2015\n     *\n     * @return The formatted date string\n     */\n    stringStartOfString: function(sDate, sParseFormat, sTimeUnit, sDisplayFormat) {\n        return this._stringToMoment(sDate, sParseFormat).startOf(sTimeUnit).format(sDisplayFormat);\n    },\n    /**\n     * This method will change the date to the end of the specified time unit and return the formatted date string\n     *\n     * @param sDate - The string date\n     * @param sParseFormat - The format to use to parse the string date\n     * @param sTimeUnit - The time unit, e.g. week, month, second, year, etc\n     * @param sDisplayFormat - The format to display the date in\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 13 Movember 2015\n     *\n     * @return The formatted date string\n     */\n    stringEndOfString: function(sDate, sParseFormat, sTimeUnit, sDisplayFormat) {\n        return this._stringToMoment(sDate, sParseFormat).endOf(sTimeUnit).format(sDisplayFormat);\n    },\n    /**\n     * This method will parse a string and get the time unit specified.\n     *\n     * @param sDate - The string date\n     * @param sParseFormat - The format to use to parse the string date\n     * @param sTimeUnit - The time unit, e.g. month, second, year, etc\n     *\n     * @return The time unit\n     */\n    stringGetTimeToInt: function(sDate, sParseFormat, sTimeUnit) {\n        return this._stringToMoment(sDate, sParseFormat).get(sTimeUnit);\n    },\n    /**\n     * This method will parse a string and set time to the given time unit and return the formatted date string\n     *\n     * @param sDate - The string date\n     * @param sParseFormat - The format to use to parse the string date\n     * @param sTimeUnit - The time unit, e.g. month, second, year, etc\n     * @param iDuration - The duration to add time\n     * @param sDisplayFormat - The format to display the date in\n     *\n     * @return The formatted date string\n     */\n    stringSetTimeToString: function(sDate, sParseFormat, sTimeUnit, iDuration, sDisplayFormat) {\n        return this._stringToMoment(sDate, sParseFormat).set(sTimeUnit, iDuration).format(sDisplayFormat);\n    },\n    /**\n     * DONT USE this one, seems that currently this is not used anywhere but leaving it here just incase.\n     * To get and set day of week you should use the date helper and not this moment helper\n     *\n     * This method will parse a string and get the iso weekday.\n     *\n     * @param sDate - The string date\n     * @param sParseFormat - The format to use to parse the string date\n     *\n     * @returns The weekday as an int value\n     */\n    stringGetWeekday: function(sDate, sParseFormat) {\n        return this._stringToMoment(sDate, sParseFormat).isoWeekday();\n    },\n    /**\n     * This method will parse a string and get the day of the week\n     *\n     * @param sDate - The string date\n     * @param sParseFormat - The format to use to parse the string date\n     *\n     * @returns The week day as an int value 0-6\n     */\n    stringGetDay: function(sDate, sParseFormat) {\n        return this._stringToMoment(sDate, sParseFormat).day();\n    },\n    /**\n     * This method will parse a string and set the day of the week\n     *\n     * @param sDate - The string date\n     * @param sParseFormat - The format to use to parse the string date\n     * @param iDayOfWeek - It takes input from 0-6, where 0 is for Sunday and 6 as Saturday. If the value is greater\n     *     than the range, it will fall in the next week(or previous week if minus value)\n     * @param sDisplayFormat - The format to display the date in\n     *\n     * @returns The formatted date string\n     */\n    stringSetDay: function(sDate, sParseFormat, iDayOfWeek, sDisplayFormat) {\n        return this._stringToMoment(sDate, sParseFormat).day(iDayOfWeek).format(sDisplayFormat);\n    },\n    /**\n     * This method will add time to the given date and return a date object.\n     *\n     * @param objDate - The object date\n     * @param sTimeUnit - The time unit, e.g. month, second, year, etc\n     * @param iDuration - The duration to add time\n     *\n     * @return The date object\n     */\n    dateAddTimeToDate: function(objDate, sTimeUnit, iDuration) {\n        var sDate = objDate.toISOString();\n        return this.stringAddTimeToDate(sDate, a24Constants.DATE_FORMAT_ISO_FORMAT, sTimeUnit, iDuration);\n    },\n    /**\n     * This function will check whether the first date is after the second date\n     *\n     * @param sDateOne - The first string date\n     * @param sParseFormatOne - The first date format to use to parse the string date\n     * @param sDateTwo - The second string date\n     * @param sParseFormatTwo - The second format to use to parse the string date\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     *\n     * @return Whether the first date is after the second date\n     */\n    isAfter: function(sDateOne, sParseFormatOne, sDateTwo, sParseFormatTwo) {\n        var objMomentDateOne = this._stringToMoment(sDateOne, sParseFormatOne);\n        var objMomentDateTwo = this._stringToMoment(sDateTwo, sParseFormatTwo);\n        return objMomentDateOne.isAfter(objMomentDateTwo);\n    },\n    /**\n     * This function will check whether the first date is before the second date\n     *\n     * @param sDateOne - The first string date\n     * @param sParseFormatOne - The first date format to use to parse the string date\n     * @param sDateTwo - The second string date\n     * @param sParseFormatTwo - The second format to use to parse the string date\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     *\n     * @return Whether the first date is before the second date\n     */\n    isBefore: function(sDateOne, sParseFormatOne, sDateTwo, sParseFormatTwo) {\n        var objMomentDateOne = this._stringToMoment(sDateOne, sParseFormatOne);\n        var objMomentDateTwo = this._stringToMoment(sDateTwo, sParseFormatTwo);\n        return objMomentDateOne.isBefore(objMomentDateTwo);\n    },\n    /**\n     * This method will get the moment of the duration passed in.\n     *\n     * @param iDuration - The duration\n     * @param sTimeUnit - The time unit the duration is in\n     *\n     * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n     * @since  16 June 2016\n     *\n     * @returns The moment of the duration\n     */\n    duration: function(iDuration, sTimeUnit) {\n        return moment.duration(iDuration, sTimeUnit);\n    },\n    /**\n     * This function will try and guess the users timezone as best it can\n     * See https://momentjs.com/timezone/docs/#/using-timezones/guessing-user-timezone/\n     *\n     * NOTE: This is one of a few moment function allowed to be used outside of the _objTimeZoneDate object, since it is a\n     *       stand alone moment funtion\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 08 Mar 2017\n     *\n     * @returns The users timezone based on browser, e.g \"Europe/London\"\n     */\n    timezoneGuess: function() {\n        return moment.tz.guess();\n    },\n    /**\n     * This method will parse a string, and return a from now string format\n     *\n     * NOTE: This is one of a few moment function allowed to be used outside of the _objTimeZoneDate object, since it is a\n     *       stand alone moment funtion\n     *\n     * @param sDate - The string date\n     * @param sParseFormat - The format to use to parse the string date\n     * @param bExcludeSuffix - Whether to include suffix on return e.g `4 years ago` would become `4 years`\n     *\n     * @author Michael Barnard <michael.barnard@a24group.com>\n     * @since  19 May 2017\n     *\n     * @return A from now date string\n     */\n    getTimeFromNow: function(sDate, sParseFormat, bExcludeSuffix) {\n        return this._stringToMoment(sDate, sParseFormat).fromNow(bExcludeSuffix);\n    },\n\n    /**\n     * This method will return an array of all possible timezones\n     *\n     * @author Deon De Wet <deon.dewet@a24group.com>\n     * @since  14 Dec 2017\n     *\n     * @return array of timezones\n     */\n    getTimezones: function() {\n        return moment.tz.names();\n    },\n\n    /**\n     * This function will format the minutes passed in into the format 00h 00m\n     *\n     * @param iMinutes - The number of minutes\n     *\n     * @author Deon De Wet <deon.dewet@a24group.com>\n     * @since  14 October 2014\n     *\n     * @returns The formatted duration string\n     */\n    formatTimeDuration: function(iMinutes) {\n        if (!a24Core.isEmpty(iMinutes)) {\n            var iHours = parseInt(iMinutes / 60);\n            var iMin = iMinutes % 60;\n            var sHours = \"\";\n            var sMin = \"\";\n            if (iHours >= 0) {\n                sHours = iHours + \"H\";\n                if (iMin >= 0) {\n                    sHours += \" \";\n                }\n            }\n            if (iMin > 0) {\n                if (iMin < 10) {\n                    sMin = \"0\";\n                }\n                sMin += iMin + \"Min\";\n            } else if (iMin === 0) {\n                sMin = \"00Min\";\n            }\n            var sTime = sHours + sMin;\n            return sTime;\n        }\n        return \"\";\n    },\n    /**\n     * This function will return the timezone abbreviation for the date passed in.\n     *\n     * @param sDate - The string date\n     *\n     * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n     * @since  24 July 2025\n     *\n     * @returns The timezone abbreviation for the date passed in\n     */\n    getTimezoneAbbreviation: function(sDate, sTimezone) {\n        return this._stringToMoment(sDate, a24Constants.DATE_FORMAT_REST_FORMAT).tz(sTimezone).zoneAbbr()\n    },\n};\n\n/**\n * This is the time zone date object that will take into account the timezone set on it at creation of this object.\n *\n * Please see the readme for more details and exactly how to use this object.\n *\n * @author Ruan Naude <ruan.naude@a24group.com>\n * @since 01 October 2014\n */\nvar _objTimeZoneDateExtend = {\n    //This is the date string value of the date object. Always in DD MMMM YYYY HH:mm:ss ZZ format\n    _sDate: \"\",\n    //This is the timezone set on creation.\n    _sTimeZone: \"\",\n    //This flag will tell us if moment shifted the date to a new offset because of the time and offset not\n    //existing in the current locale\n    _bMomentShift: false,\n    //This object holds the time offset changes details for the set timezone\n    _objTimeZoneChanges: null,\n    // This is the display timezone that will be used to display the date in the correct format\n    _sDisplayTimezone: \"\",\n    init: function() {\n        this._super();\n\n        //Set the date to the current date by default.\n        this.set(\"_sDate\", momentHelper.getCurrentDateString(a24Constants.DATE_FORMAT_REST_FORMAT));\n        this._formatDate();\n    },\n    /**\n     * This function will determine if the date set on this date object is on the daylight saving/offset switch time and\n     * return details about the shift.\n     *\n     * For instance Europe/London has a time switch from 1am to 2am on 30 March 2014.\n     * So if i select 30 March 2014 01:30am this function will return the following object:\n     *\n     * {\n     *      isOnDSSwitch: true,\n     *      isForwardJump: true,\n     *      sBeforeDate: \"30 March 2014 00:30:00 +0000\",\n     *      sAfterDate: \"30 March 2014 02:30:00 +0100\"\n     *  };\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     *\n     * @returns Object with the daylight savings details OR null if the date is not on daylight saving shift.\n     */\n    getDayLightSavingsDetails: function() {\n        //Get the offset changes for the timezone\n        if (a24Core.isEmpty(this.get(\"_objTimeZoneChanges\"))) {\n            this.set(\"_objTimeZoneChanges\", momentHelper.getTimeZoneChangesDetails(this.get(\"_sTimeZone\")));\n        }\n        var objDaylightDetails = {\n            isOnDSSwitch: false,\n            isForwardJump: false,\n            sBeforeDate: \"\",\n            sAfterDate: \"\"\n        };\n        var sSetDate = this.get(\"_sDate\");\n\n        //Get the timestamp of the date object\n        //Multiply by 1000 to get it to milliseconds\n        var objDateTimeStamp = momentHelper.getTime(sSetDate, a24Constants.DATE_FORMAT_REST_FORMAT) *\n            a24Constants.MILLISECONDS_1_SECOND;\n\n        //Get only the offset changes for the current year.\n        var objYearChanges = momentHelper.getTimeZoneChangesFiltered(\n            this.get(\"_objTimeZoneChanges\"),\n            momentHelper.getFullYear(sSetDate, a24Constants.DATE_FORMAT_REST_FORMAT)\n        );\n        var iUntilsLength = objYearChanges.untils.length;\n\n        //If there is only one offset for current year then there was no daylight changes for the year the date is in\n        if (iUntilsLength > 1) {\n\n            //Loop over the offset changes and check if the timestamp of this date object is within\n            //24 hours range of any of the offset changes.\n            for (var i = 0; i < iUntilsLength; i++) {\n                //For Europe/London (Crib notes to better understand some of calculations below)\n                //1am to 2am shift = +0000 to +0100 ------> Daylight saving START\n                //2am to 1am shift = +0100 to +0000 ------> Daylight saving END\n                //60000 milliseconds = 1min\n                //86400000 milliseconds = 24hours\n\n                //Each until is the timestamp on which the offset change happens.\n                var iUntil = objYearChanges.untils[i];\n                if (!a24Core.isEmpty(iUntil)) { //If the time iUntil is null it means its the last item for the year.\n\n                    //Check if the timestamp of this date object is at least within 24 hours range of the offset change.\n                    //This is to avoid unnecessary further calculations.\n                    if (\n                        objDateTimeStamp > iUntil - a24Constants.MILLISECONDS_1_DAY &&\n                        objDateTimeStamp < iUntil + a24Constants.MILLISECONDS_1_DAY\n                    ) {\n                        //Now we need to check if the timestamp of the date object falls within the offset switch period\n                        //To do that we need to know the time duration effect the offset switch will have, e.g\n                        //When Europe/London does 1am to 2am shift(+0000 to +0100(DS Start)), that has 1 hour effect.\n                        //In the case of a forward jump like above the switch period is: from until to (until + effect)\n                        //In the case of a backward jump it would be: from (until - effect) to (until + effect)\n                        var sTimeZone = this.get(\"_sTimeZone\");\n                        var iOffsetOne = objYearChanges.offsets[i];\n                        var iOffsetTwo = objYearChanges.offsets[i + 1];\n\n                        var iOffsetDif = iOffsetOne - iOffsetTwo;\n                        var iDayLightSpan = Math.abs(iOffsetDif) * a24Constants.MILLISECONDS_1_MINUTE;\n\n                        var iDSSwitchStart = iUntil - iDayLightSpan;\n                        var iDSSwitchEnd = iUntil + iDayLightSpan;\n\n                        //Check if the timestamp of the date object falls within daylight savings switch period.\n                        if (objDateTimeStamp >= iDSSwitchStart && objDateTimeStamp <= iDSSwitchEnd) {\n                            //positive offset dif means jump forward\n                            // e.g 1am to 2am shift = +0000 to +0100 ------> Daylight saving START\n                            //and negative is back jump\n                            // e.g 2am to 1am shift = +0100 to +0000 ------> Daylight saving END\n                            if (iOffsetDif > 0) {\n                                //Jump forward\n                                //In this case we only care about if the timestamp of the date object falls within\n                                //until -> (until + effect)\n                                if (objDateTimeStamp >= iUntil && objDateTimeStamp <= iDSSwitchEnd) {\n                                    //In the london forward jump example 1:30 +0000 and 2:30 +0100 would have the exact\n                                    //same timestamp and both fall within the offset switch range. However 2:30 is a\n                                    //valid time that falls outside the DS switch from the USER prospective. Thus we\n                                    //use moment to determine the difference between the two. Moment will shift a time\n                                    //if the time does not exist for a timezone.\n                                    //Thus 1:30 will change to 2:30 through moment and 2:30 will stay 2:30\n                                    if (this.get(\"_bMomentShift\") == true) {\n                                        objDaylightDetails.isOnDSSwitch = true;\n                                        objDaylightDetails.isForwardJump = true;\n                                        objDaylightDetails.sBeforeDate = momentHelper.timeStampTimezoneFormat(\n                                            objDateTimeStamp - iDayLightSpan,\n                                            sTimeZone,\n                                            a24Constants.DATE_FORMAT_REST_FORMAT\n                                        );\n                                        objDaylightDetails.sAfterDate = momentHelper.timeStampTimezoneFormat(\n                                            objDateTimeStamp,\n                                            sTimeZone,\n                                            a24Constants.DATE_FORMAT_REST_FORMAT\n                                        );\n                                    }\n                                }\n                            } else {\n                                //Jump Back\n                                //In this case we only care about if the timestamp of the date object falls within\n                                //(until - effect) to (until + effect)\n                                //Check if the timestamp falls before or after the change to work out the correct\n                                //before and after dates.\n                                if (objDateTimeStamp >= iDSSwitchStart && objDateTimeStamp <= iUntil) {\n                                    objDaylightDetails.isOnDSSwitch = true;\n                                    objDaylightDetails.sBeforeDate = momentHelper.timeStampTimezoneFormat(\n                                        objDateTimeStamp,\n                                        sTimeZone,\n                                        a24Constants.DATE_FORMAT_REST_FORMAT\n                                    );\n                                    objDaylightDetails.sAfterDate = momentHelper.timeStampTimezoneFormat(\n                                        objDateTimeStamp + iDayLightSpan,\n                                        sTimeZone,\n                                        a24Constants.DATE_FORMAT_REST_FORMAT\n                                    );\n                                } else if (objDateTimeStamp >= iUntil && objDateTimeStamp < iDSSwitchEnd) {\n                                    objDaylightDetails.isOnDSSwitch = true;\n                                    objDaylightDetails.sBeforeDate = momentHelper.timeStampTimezoneFormat(\n                                        objDateTimeStamp - iDayLightSpan,\n                                        sTimeZone,\n                                        a24Constants.DATE_FORMAT_REST_FORMAT\n                                    );\n                                    objDaylightDetails.sAfterDate = momentHelper.timeStampTimezoneFormat(\n                                        objDateTimeStamp,\n                                        sTimeZone,\n                                        a24Constants.DATE_FORMAT_REST_FORMAT\n                                    );\n                                }\n                            }\n                        }\n                        break;\n                    }\n                }\n            }\n        }\n\n        if (objDaylightDetails.isOnDSSwitch) {\n            return objDaylightDetails;\n        } else {\n            return null;\n        }\n    },\n    /**\n     * This function will be used to set the date from the rest side.\n     * In this case we will assume that the rest gave us the correct offset\n     * and thus NOT change it, unless no date is given and we set it to the current date.\n     *\n     * @param sDate - The date string from rest (MUST always be in a24Constants.DATE_FORMAT_REST_FORMAT)\n     * @param bDateOnly - Whether the date from the backend is a date only date, thus has no time on it, if true\n     *     then the sDate is allowed to be DATE_FORMAT_REST_FORMAT_DATE_ONLY format\n     * @param bMonthYearOnly - Whether the date from the backend is a month year only date, thus has no time or day on\n     *     it, if true then the sDate is allowed to be DATE_FORMAT_REST_FORMAT_MONTH_YEAR_ONLY format\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     */\n    setDateFromRest: function(sDate, bDateOnly, bMonthYearOnly) {\n        //no _formatDate required since we assume the rest will give us a correct and valid date with time offset.\n        //unless no date is given we set to the current date and format to the correct offset(timezone)\n        this.set(\"_bMomentShift\", false);\n        if (a24Core.isEmpty(sDate)) {\n            this.set(\"_sDate\", momentHelper.getCurrentDateString(a24Constants.DATE_FORMAT_REST_FORMAT));\n            this._formatDate();\n        } else {\n            if (bDateOnly) {\n                this.set(\n                    \"_sDate\",\n                    momentHelper.stringFormat(\n                        sDate,\n                        a24Constants.DATE_FORMAT_REST_FORMAT_DATE_ONLY,\n                        a24Constants.DATE_FORMAT_REST_FORMAT\n                    )\n                );\n            } else if (bMonthYearOnly) {\n                this.set(\n                    \"_sDate\",\n                    momentHelper.stringFormat(\n                        sDate,\n                        a24Constants.DATE_FORMAT_REST_FORMAT_MONTH_YEAR_ONLY,\n                        a24Constants.DATE_FORMAT_REST_FORMAT\n                    )\n                );\n            } else {\n                this.set(\"_sDate\", sDate);\n            }\n            this._formatDate(false);\n        }\n    },\n    /**\n     * This function will be used to set the date from the rest side.\n     * In this case we will NOT assume that the rest gave us the correct offset and CHANGE to the\n     * correct offset based on the timezone set on this object.\n     * This means that time will be altered IF the offset was changed.\n     *\n     * @param sDate - The date string from rest (MUST always be in a24Constants.DATE_FORMAT_REST_FORMAT)\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 20 October 2014\n     */\n    setDateFromRestAllowTimeAlter: function(sDate) {\n        this.set(\"_bMomentShift\", false);\n        if (a24Core.isEmpty(sDate)) {\n            this.set(\"_sDate\", momentHelper.getCurrentDateString(a24Constants.DATE_FORMAT_REST_FORMAT));\n        } else {\n            this.set(\n                \"_sDate\",\n                momentHelper.stringTimezoneFormat(\n                    sDate,\n                    a24Constants.DATE_FORMAT_REST_FORMAT,\n                    this.get(\"_sTimeZone\"),\n                    a24Constants.DATE_FORMAT_REST_FORMAT\n                )\n            );\n        }\n        this._formatDate();\n    },\n    /**\n     * This function will be used to set the date from the browser side.\n     * In this case we always ignore the offset and covert it to the correct time offset base on the timezone WITHOUT\n     * changing the time.\n     *\n     * NOTE: Can not set date with date string format containing a timezone other than DATE_FORMAT_REST_FORMAT\n     *       So all date formats can be used to set the date except for ones with a timezone in.\n     *       Only DATE_FORMAT_REST_FORMAT is allowed, timezone will still be ignored tho, this is just to make things\n     *       easier when working from and to rest and browser.\n     *\n     * @param mDate - The js date object or date string to set the date to.\n     * @param sParseFormat - The date format the date string is in or null if js date was used.\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     */\n    setDateFromBrowser: function(mDate, sParseFormat) {\n        if (a24Core.isEmpty(mDate)) {\n            this.set(\"_sDate\", momentHelper.getCurrentDateString(a24Constants.DATE_FORMAT_REST_FORMAT));\n        } else {\n            if (typeof mDate === \"string\" || mDate instanceof String) {\n                if (a24Constants.DATE_FORMAT_REST_FORMAT === sParseFormat) {\n                    this.set(\"_sDate\", mDate);\n                } else if (sParseFormat.toLowerCase().indexOf(\"z\") !== -1) {\n                    console.warn(\"Can not set a date with a timezone from the browser using a format other than DATE_FORMAT_REST_FORMAT\");\n                } else {\n                    this.set(\n                        \"_sDate\",\n                        momentHelper.stringFormat(\n                            mDate,\n                            sParseFormat,\n                            a24Constants.DATE_FORMAT_REST_FORMAT\n                        )\n                    );\n                }\n            } else {\n                //Format date using moment without a timezone, thus moment wont change times or time zone.\n                this.set(\n                    \"_sDate\",\n                    momentHelper.dateFormat(\n                        mDate,\n                        a24Constants.DATE_FORMAT_REST_FORMAT\n                    )\n                );\n            }\n        }\n        this.set(\"_bMomentShift\", false);\n        this._formatDate();\n    },\n    /**\n     * This function will return the date as a date string that can be posted to the back end.\n     * This date string will have the correct timezone offset.\n     *\n     * NOT safe for browser use\n     *\n     * @param bDateOnly - Whether the date from the backend is a date only date, thus has no time on it, if true\n     *     then the sDate is allowed to be DATE_FORMAT_REST_FORMAT_DATE_ONLY format\n     * @param bMonthYearOnly - Whether the date from the backend is a month year only date, thus has no time or day on\n     *     it, if true then the sDate is allowed to be DATE_FORMAT_REST_FORMAT_MONTH_YEAR_ONLY format\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     *\n     * @returns Date string that can be posted to the back end. (DD MMMM YYYY HH:mm:ss ZZ format)\n     */\n    getDateStringForRest: function(bDateOnly, bMonthYearOnly) {\n        if (bDateOnly) {\n            return this._getFormattedDate(a24Constants.DATE_FORMAT_REST_FORMAT_DATE_ONLY);\n        } else if (bMonthYearOnly) {\n            return this._getFormattedDate(a24Constants.DATE_FORMAT_REST_FORMAT_MONTH_YEAR_ONLY);\n        } else {\n            return this.get(\"_sDate\");\n        }\n    },\n    /**\n     * This function will return the date as a date string that can be used in the browser.\n     * This date string will not have the timezone offset on it thus when using this string it will not alter the time.\n     *\n     * SAFE for browser use\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     *\n     * @returns Date string that can be used in the browser (DD MMMM YYYY HH:mm:ss format)\n     */\n    getDateStringForBrowserUse: function() {\n        var sDate = this.get(\"_sDate\");\n        return a24DateManager._stripTimeZone(sDate);\n    },\n    /**\n     * This function will return the date formatted as DD MMM YYYY\n     *\n     * SAFE for browser use\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     *\n     * @returns The date formatted as DD MMM YYYY\n     */\n    getDateFormat: function() {\n        return this._getFormattedDate(a24Constants.DATE_FORMAT);\n    },\n    /**\n     * This function will return the date formatted as DD MMMM YYYY HH:mm:ss\n     *\n     * SAFE for browser use\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     *\n     * @returns The date formatted as DD MMM YYYY HH:mm\n     */\n    getDateTimeFormat: function() {\n        return this._getFormattedDate(a24Constants.DATE_TIME_FORMAT);\n    },\n    /**\n     * This function will return the date formatted as DD MMMM YYYY - HH:mm\n     *\n     * SAFE for browser use\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     *\n     * @returns The date formatted as DD MMMM YYYY - HH:mm\n     */\n    getDateTimeDashFormat: function() {\n        return this._getFormattedDate(a24Constants.DATE_TIME_DASH_FORMAT);\n    },\n    /**\n     * This function will return the date formatted as HH:mm\n     *\n     * SAFE for browser use\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     *\n     * @returns The date formatted as HH:mm\n     */\n    getTimeFormat: function() {\n        return this._getFormattedDate(a24Constants.TIME_FORMAT);\n    },\n    /**\n     * This function will return the date formatted as YYYY\n     *\n     * SAFE for browser use\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 23 March 2015\n     *\n     * @returns The date formatted as YYYY\n     */\n    getYearFormat: function() {\n        return this._getFormattedDate(a24Constants.YEAR_FORMAT);\n    },\n    /**\n     * This function will return the date formatted as MMM\n     *\n     * SAFE for browser use\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 23 March 2015\n     *\n     * @returns The date formatted as MMM\n     */\n    getMonthFormat: function() {\n        return this._getFormattedDate(a24Constants.MONTH_FORMAT);\n    },\n    /**\n     * This function will return the date formatted as DD\n     *\n     * SAFE for browser use\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 23 March 2015\n     *\n     * @returns The date formatted as DD\n     */\n    getDayFormat: function() {\n        return this._getFormattedDate(a24Constants.DAY_FORMAT);\n    },\n\n    /**\n     * This function will return the date formatted as MMM YYYY\n     *\n     * SAFE for browser use\n     *\n     * @author Jacques Slabber <jacques.slabber@a24group.com>\n     * @since 21 February 2017\n     *\n     * @returns The date formatted as MMM YYYY\n     */\n    getMonthYearFormat: function() {\n        return this._getFormattedDate(a24Constants.MONTH_YEAR_FORMAT);\n    },\n\n    /**\n     * This function will return the day of the week(0-6 where 0 is Sunday)\n     *\n     * SAFE for browser use\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 30 June 2020\n     *\n     * @returns The day of the week as int (0-6 where 0 is Sunday)\n     */\n    getDayOfWeek: function() {\n        return momentHelper.stringGetDay(\n            this.getDateStringForBrowserUse(),\n            a24Constants.DATE_FORMAT_REST_FORMAT_WITHOUT_TZ\n        );\n    },\n\n    /**\n     * This function will set the day of the week(0-6 where 0 is Sunday)\n     *\n     * SAFE for browser use\n     *\n     * @param iDay - It takes input from 0-6, where 0 is for Sunday and 6 as Saturday. If the value is greater\n     *     than the range, it will fall in the next week(or previous week if minus value)\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 30 June 2020\n     */\n    setDayOfWeek: function(iDay) {\n        this.setDateFromBrowser(\n            momentHelper.stringSetDay(\n                this.getDateStringForBrowserUse(),\n                a24Constants.DATE_FORMAT_REST_FORMAT_WITHOUT_TZ,\n                iDay,\n                a24Constants.DATE_FORMAT_REST_FORMAT\n            ),\n            a24Constants.DATE_FORMAT_REST_FORMAT\n        );\n    },\n\n    /**\n     * This function will return the date formatted to passed in format\n     * NOTE! Only pass in date formats WITHOUT timezone on it.\n     * SAFE for browser use\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 20 May 2020\n     *\n     * @returns The date formatted as sFormat\n     */\n    getCustomFormat: function(sFormat) {\n        if (sFormat.toLowerCase().indexOf(\"z\") !== -1) {\n            console.warn(\"getCustomFormat is not meant to be used to format a date to a format containing a timezone!\");\n            return \"\";\n        } else {\n            return this._getFormattedDate(sFormat);\n        }\n    },\n\n    /**\n     * This function will add time to the date set on this date object.\n     *\n     * @param sTimeUnit - The time unit, e.g. month, second, year, etc\n     * @param iDuration - The duration to add time\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     */\n    addTimeToDate: function(sTimeUnit, iDuration) {\n        this.setDateFromBrowser(\n            momentHelper.stringAddTimeToString(\n                this.getDateStringForBrowserUse(),\n                a24Constants.DATE_FORMAT_REST_FORMAT_WITHOUT_TZ,\n                sTimeUnit,\n                iDuration,\n                a24Constants.DATE_FORMAT_REST_FORMAT\n            ),\n            a24Constants.DATE_FORMAT_REST_FORMAT\n        );\n    },\n    /**\n     * This function will subtract time from the date set on this date object.\n     *\n     * @param sTimeUnit - The time unit, e.g. month, second, year, etc\n     * @param iDuration - The duration to subtract from time\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 13 November 2015\n     */\n    subtractTimeFromDate: function(sTimeUnit, iDuration) {\n        this.setDateFromBrowser(\n            momentHelper.stringSubtractTimeFromString(\n                this.getDateStringForBrowserUse(),\n                a24Constants.DATE_FORMAT_REST_FORMAT_WITHOUT_TZ,\n                sTimeUnit,\n                iDuration,\n                a24Constants.DATE_FORMAT_REST_FORMAT\n            ),\n            a24Constants.DATE_FORMAT_REST_FORMAT\n        );\n    },\n    /**\n     * This method will change the date to the start of the specified time unit\n     *\n     * @param sTimeUnit - The time unit, e.g. month, second, year, etc\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 13 November 2015\n     */\n    startOf: function(sTimeUnit) {\n        this.setDateFromBrowser(\n            momentHelper.stringStartOfString(\n                this.getDateStringForBrowserUse(),\n                a24Constants.DATE_FORMAT_REST_FORMAT_WITHOUT_TZ,\n                sTimeUnit,\n                a24Constants.DATE_FORMAT_REST_FORMAT\n            ),\n            a24Constants.DATE_FORMAT_REST_FORMAT\n        );\n    },\n    /**\n     * This method will change the date to the end of the specified time unit\n     *\n     * @param sTimeUnit - The time unit, e.g. month, second, year, etc\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 13 November 2015\n     */\n    endOf: function(sTimeUnit) {\n        this.setDateFromBrowser(\n            momentHelper.stringEndOfString(\n                this.getDateStringForBrowserUse(),\n                a24Constants.DATE_FORMAT_REST_FORMAT_WITHOUT_TZ,\n                sTimeUnit,\n                a24Constants.DATE_FORMAT_REST_FORMAT\n            ),\n            a24Constants.DATE_FORMAT_REST_FORMAT\n        );\n    },\n    /**\n     * Method will get a new TimeZoneDate object by means of adding the passed in duration and time unit\n     *\n     * The date will be based on the current date object you are calling the function on, and not your current date\n     *\n     * @param sTimeUnit - The time unit, e.g. month, second, year, etc\n     * @param iDuration - The duration to add time\n     *\n     * @author Neil Nienaber <neil.nienaber@a24group.com>\n     * @since  05 November 2015\n     *\n     * @returns TimeZoneDate The new TimeZoneDate object\n     */\n    getDateFromCurrentDate: function(sTimeUnit, iDuration) {\n        var objNewDate = a24DateManager.createCurrentDate();\n        var sDate = momentHelper.stringAddTimeToString(\n            this._sDate,\n            a24Constants.DATE_FORMAT_REST_FORMAT,\n            sTimeUnit,\n            iDuration,\n            a24Constants.DATE_FORMAT_REST_FORMAT\n        );\n        objNewDate.setDateFromRest(sDate);\n        return objNewDate;\n    },\n    /**\n     * This function will set time on the date set on this date object.\n     *\n     * @param sTimeUnit - The time unit, e.g. month, second, year, etc\n     * @param iDuration - The duration to add time\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     */\n    setTimeOnDate: function(sTimeUnit, iDuration) {\n        this.setDateFromBrowser(\n            momentHelper.stringSetTimeToString(\n                this.getDateStringForBrowserUse(),\n                a24Constants.DATE_FORMAT_REST_FORMAT_WITHOUT_TZ,\n                sTimeUnit,\n                iDuration,\n                a24Constants.DATE_FORMAT_REST_FORMAT\n            ),\n            a24Constants.DATE_FORMAT_REST_FORMAT\n        );\n    },\n    /**\n     * This function will set time on the date to the start of the day 00:00:00\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 13 November 2015\n     */\n    setTimeToStartOfDay: function() {\n        this.setDateFromBrowser(\n            momentHelper.stringSetTimeToString(\n                this.getDateStringForBrowserUse(),\n                a24Constants.DATE_FORMAT_REST_FORMAT_WITHOUT_TZ,\n                a24Constants.MOMENT_TIME_HOURS,\n                0,\n                a24Constants.DATE_FORMAT_REST_FORMAT\n            ),\n            a24Constants.DATE_FORMAT_REST_FORMAT\n        );\n        this.setDateFromBrowser(\n            momentHelper.stringSetTimeToString(\n                this.getDateStringForBrowserUse(),\n                a24Constants.DATE_FORMAT_REST_FORMAT_WITHOUT_TZ,\n                a24Constants.MOMENT_TIME_MINUTES,\n                0,\n                a24Constants.DATE_FORMAT_REST_FORMAT\n            ),\n            a24Constants.DATE_FORMAT_REST_FORMAT\n        );\n        this.setDateFromBrowser(\n            momentHelper.stringSetTimeToString(\n                this.getDateStringForBrowserUse(),\n                a24Constants.DATE_FORMAT_REST_FORMAT_WITHOUT_TZ,\n                a24Constants.MOMENT_TIME_SECONDS,\n                0,\n                a24Constants.DATE_FORMAT_REST_FORMAT\n            ),\n            a24Constants.DATE_FORMAT_REST_FORMAT\n        );\n    },\n    /**\n     * This function will set time on the date to the start of the day 23:59:59\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 13 November 2015\n     */\n    setTimeToEndOfDay: function() {\n        this.setDateFromBrowser(\n            momentHelper.stringSetTimeToString(\n                this.getDateStringForBrowserUse(),\n                a24Constants.DATE_FORMAT_REST_FORMAT_WITHOUT_TZ,\n                a24Constants.MOMENT_TIME_HOURS,\n                a24Constants.MAX_END_HOUR,\n                a24Constants.DATE_FORMAT_REST_FORMAT\n            ),\n            a24Constants.DATE_FORMAT_REST_FORMAT\n        );\n        this.setDateFromBrowser(\n            momentHelper.stringSetTimeToString(\n                this.getDateStringForBrowserUse(),\n                a24Constants.DATE_FORMAT_REST_FORMAT_WITHOUT_TZ,\n                a24Constants.MOMENT_TIME_MINUTES,\n                a24Constants.MAX_END_MIN,\n                a24Constants.DATE_FORMAT_REST_FORMAT\n            ),\n            a24Constants.DATE_FORMAT_REST_FORMAT\n        );\n        this.setDateFromBrowser(\n            momentHelper.stringSetTimeToString(\n                this.getDateStringForBrowserUse(),\n                a24Constants.DATE_FORMAT_REST_FORMAT_WITHOUT_TZ,\n                a24Constants.MOMENT_TIME_SECONDS,\n                a24Constants.MAX_END_SEC,\n                a24Constants.DATE_FORMAT_REST_FORMAT\n            ),\n            a24Constants.DATE_FORMAT_REST_FORMAT\n        );\n    },\n    /**\n     * This function will get the time on the date object.\n     *\n     * SAFE for browser use.\n     *\n     * @param sTimeUnit - The time unit to retrieve e.g. month, second, year, etc\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     *\n     * @returns The time unit (It is expected that these would be int)\n     */\n    getTimeOnDate: function(sTimeUnit) {\n        return momentHelper.stringGetTimeToInt(\n            this.getDateStringForBrowserUse(),\n            a24Constants.DATE_FORMAT_REST_FORMAT_WITHOUT_TZ,\n            sTimeUnit\n        );\n    },\n    /**\n     * This function will check if the date object is after the passed in date object\n     *\n     * @param objTimeZoneDate - TimeZoneDate The time zone date object to perform check against\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     *\n     * @returns Whether the date object is after the passed in date object.\n     */\n    isAfter: function(objTimeZoneDate) {\n        return momentHelper.isAfter(\n            this.get(\"_sDate\"),\n            a24Constants.DATE_FORMAT_REST_FORMAT,\n            objTimeZoneDate.get(\"_sDate\"),\n            a24Constants.DATE_FORMAT_REST_FORMAT\n        );\n    },\n    /**\n     * This function will check if the date object is after the passed in date object\n     *\n     * @param objTimeZoneDate - TimeZoneDate The time zone date object to perform check against\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     *\n     * @returns Whether the date object is after the passed in date object.\n     */\n    isBefore: function(objTimeZoneDate) {\n        return momentHelper.isBefore(\n            this.get(\"_sDate\"),\n            a24Constants.DATE_FORMAT_REST_FORMAT,\n            objTimeZoneDate.get(\"_sDate\"),\n            a24Constants.DATE_FORMAT_REST_FORMAT\n        );\n    },\n    /**\n     * This function simply returns the timezone offset in minutes\n     *\n     * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n     * @since  02 December 2019\n     *\n     * @return The timezone offset in minutes\n     */\n    getDateTimezoneOffset: function(sParseFormat) {\n        return momentHelper.getDateTimezoneOffset(this.get(\"_sDate\"), sParseFormat);\n    },\n    /**\n     * This function will check what the difference is between the date object and the passed in date object and return\n     * the difference in the specified units, the calculation will be:\n     *     this - objTimeZoneDate\n     *\n     * @param objTimeZoneDate - TimeZoneDate The time zone date object to perform difference on\n     * @param sTimeUnit - The unit in which to return the difference.\n     * @param bFloatPoint - Whether to return a float point value. If false it will round DOWN.\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     *\n     * @returns The difference in the specified unit.\n     */\n    difference: function(objTimeZoneDate, sTimeUnit, bFloatPoint) {\n        return momentHelper.stringDiffInUnits(\n            this.get(\"_sDate\"),\n            a24Constants.DATE_FORMAT_REST_FORMAT,\n            objTimeZoneDate.get(\"_sDate\"),\n            a24Constants.DATE_FORMAT_REST_FORMAT,\n            sTimeUnit,\n            bFloatPoint\n        );\n    },\n    /**\n     * This function converts the duration to the time unit being specified\n     * Example:\n     *  - iDuration = 12\n     *  - sTimeUnitInput = 'months'\n     *  - sTimeUnitOutput = 'years'\n     *  - return 1\n     *\n     * @param iDuration - The Duration of time\n     * @param sTimeUnitInput - The time unit the duration is in\n     * @param sTimeUnitOutput - The time unit you want it to be returned in\n     *\n     * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n     * @since  16 June 2016\n     *\n     * @returns The difference in the specified unit.\n     */\n    duration: function(iDuration, sTimeUnitInput, sTimeUnitOutput) {\n        var momentDuration = momentHelper.duration(\n            iDuration,\n            sTimeUnitInput\n        );\n\n        switch (sTimeUnitOutput) {\n            case a24Constants.MOMENT_TIME_SECONDS:\n                iDuration = momentDuration.asSeconds();\n                break;\n            case a24Constants.MOMENT_TIME_MINUTES:\n                iDuration = momentDuration.asMinutes();\n                break;\n            case a24Constants.MOMENT_TIME_HOURS:\n                iDuration = momentDuration.asHours();\n                break;\n            case a24Constants.MOMENT_TIME_DAYS:\n                iDuration = momentDuration.asDays();\n                break;\n            case a24Constants.MOMENT_TIME_WEEKS:\n                iDuration = momentDuration.asWeeks();\n                break;\n            case a24Constants.MOMENT_TIME_MONTHS:\n                iDuration = momentDuration.asMonths();\n                break;\n            case a24Constants.MOMENT_TIME_YEARS:\n                iDuration = momentDuration.asYears();\n                break;\n        }\n        return iDuration;\n    },\n    /**\n     * This function will format the date set on the date object to be in the correct timezone offset WITHOUT changing\n     * the time, UNLESS the time is not valid in the offset for the timezone in which case moment will shift it to a\n     * valid offset and change the time (timestamp will still be the same).\n     *\n     * If moment changed the time we set a flag to indicate this.\n     *\n     * @param bSetDate - Whether to set the formatted date as the new date. True by default.\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     *\n     * @returns The formatted date with the correct offset.\n     */\n    _formatDate: function(bSetDate) {\n        var sDate = this.get(\"_sDate\");\n        var sFormattedDate = momentHelper.duplicateDateAndTimeToTimeZone(sDate, this.get(\"_sTimeZone\"));\n        if (a24DateManager._stripTimeZone(sDate) !== a24DateManager._stripTimeZone(sFormattedDate)) {\n            this.set(\"_bMomentShift\", true);\n        }\n        if (a24Core.isEmpty(bSetDate)) {\n            this.set(\"_sDate\", sFormattedDate);\n        }\n        return sFormattedDate;\n    },\n    /**\n     * This function will return a formatted date string, not to be used to get a\n     * date format with a timezone, that is what the getDateStringForRest is for\n     *\n     * @param sFormat - The format to format the date string to\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 01 October 2014\n     *\n     * @returns The formatted date string\n     */\n    _getFormattedDate: function(sFormat) {\n        return momentHelper.stringFormat(\n            this.getDateStringForBrowserUse(),\n            a24Constants.DATE_FORMAT_REST_FORMAT_WITHOUT_TZ,\n            sFormat\n        );\n    },\n    /**\n     * This function will return a formatted date string in the display timezone.\n     *\n     * @param sFormat - The format to format the date string to\n     *\n     * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n     * @since  24 July 2025\n     *\n     * @returns The formatted date string\n     */\n     _getFormattedDateInDisplayTimezone: function(sFormat) {\n        return momentHelper.stringTimezoneFormat(\n            this.getDateStringForBrowserUse(),\n            a24Constants.DATE_FORMAT_REST_FORMAT,\n            this.get(\"_sDisplayTimezone\"),\n            sFormat\n        );\n    },\n    /**\n     * This function will return the timezone abbreviation for the date set on this date object.\n     *\n     * @param bConvertToDisplayTimezone - Whether to convert the date to the display timezone\n     *\n     * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n     * @since  24 July 2025\n     *\n     * @returns The timezone abbreviation for the date passed in\n     */\n    getTimezoneAbbreviation: function(bConvertToDisplayTimezone) {\n        let sDate = this.get(\"_sDate\");\n        if (bConvertToDisplayTimezone) {\n            sDate = momentHelper.duplicateDateAndTimeToTimeZone(sDate, this.get(\"_sDisplayTimezone\"));\n        }\n        let sTimeZone = bConvertToDisplayTimezone ? this.get(\"_sDisplayTimezone\") : this.get(\"_sTimeZone\");\n        return momentHelper.getTimezoneAbbreviation(sDate, sTimeZone);\n    },\n};\n\nif (typeof a24DateManager === \"undefined\") {\n    var a24DateManager = {};\n}\nif (typeof momentHelper === \"undefined\") {\n    var momentHelper = {};\n}\nif (typeof _objTimeZoneDate === \"undefined\") {\n    var _objTimeZoneDate = {};\n}\n\n//Only add the extended values to the global if they do not exist on it already\nObject.keys(a24DateManagerExtend).forEach(function(sKey) {\n    if (!a24DateManager.hasOwnProperty(sKey)) {\n        a24DateManager[sKey] = a24DateManagerExtend[sKey];\n    }\n});\nObject.keys(momentHelperExtend).forEach(function(sKey) {\n    if (!momentHelper.hasOwnProperty(sKey)) {\n        momentHelper[sKey] = momentHelperExtend[sKey];\n    }\n});\nObject.keys(_objTimeZoneDateExtend).forEach(function(sKey) {\n    if (!_objTimeZoneDate.hasOwnProperty(sKey)) {\n        _objTimeZoneDate[sKey] = _objTimeZoneDateExtend[sKey];\n    }\n});\n\n//This is in here so that the parent does not override this when trying to extend on the functionality above\nTimeZoneDate = Ember.Object.extend(_objTimeZoneDate);\n","var a24RestUrlConstruct = {\n    //Don't add anything in here, this is purely to create the object if the project using\n    //this addon does not create and import one.\n    //In ember the parent vendor file with the same name and location will take preference over a file with the same\n    //name and directory in addons(one in addon will not be imported, only the parent one),\n    //If the parent does not have that file but 2 addons have that file then the last addon to be added in the\n    //package.json in the parent, will take preference.\n};\n\nvar a24RestCallHelper = {\n    //Don't add anything in here, this is purely to create the object if the project using\n    //this addon does not create and import one.\n    //In ember the parent vendor file with the same name and location will take preference over a file with the same\n    //name and directory in addons(one in addon will not be imported, only the parent one),\n    //If the parent does not have that file but 2 addons have that file then the last addon to be added in the\n    //package.json in the parent, will take preference.\n};\n\nvar a24RestResponseHandler = {\n    //Don't add anything in here, this is purely to create the object if the project using\n    //this addon does not create and import one.\n    //In ember the parent vendor file with the same name and location will take preference over a file with the same\n    //name and directory in addons(one in addon will not be imported, only the parent one),\n    //If the parent does not have that file but 2 addons have that file then the last addon to be added in the\n    //package.json in the parent, will take preference.\n};\n","var a24RestUrlConstructExtend = {\n    sUrl: \"\",\n    arrParameterList: null,\n    arrSortByList: null,\n    bIsSwagger: false,\n    /**\n     * Set the swagger base url for the construction helper\n     *\n     * Note: This will reset all other fields\n     *\n     * @param sBaseUrl - The base url that has no params added to it.\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since  24 May 2017\n     *\n     * @return void\n     */\n    setBaseUrlSwagger: function(sBaseUrl) {\n        a24RestUrlConstruct.setBaseUrl(sBaseUrl);\n        a24RestUrlConstruct.bIsSwagger = true;\n    },\n    /**\n     * Set the base url for the construction helper.\n     *\n     * Note: This will reset all other fields\n     *\n     * @param sBaseUrl - The base url that has no params added to it.\n     *\n     * @author Michael Barnard <michael.barnard@a24group.com>\n     * @since  13 August 2014\n     *\n     * @return void\n     */\n    setBaseUrl: function(sBaseUrl) {\n        a24RestUrlConstruct.bIsSwagger = false;\n        a24RestUrlConstruct.arrParameterList = [];\n        a24RestUrlConstruct.arrSortByList = [];\n        a24RestUrlConstruct.sUrl = sBaseUrl;\n    },\n    /**\n     * Add a query field to the url\n     *\n     * Note: If mFieldValue is empty, then the mDefault will be applied.\n     * Note: If mFieldValue and mDefault is empty, the param will be omitted from the url.\n     *\n     * @param sFieldName - The name of the field used in the url\n     * @param mFieldValue - The value of this field\n     * @param mDefault (Optional) - If no value is set, the value that will be given\n     *\n     * @author Michael Barnard <michael.barnard@a24group.com>\n     * @since  13 August 2014\n     *\n     * @return void\n     */\n    addQueryParam: function(sFieldName, mFieldValue, mDefault) {\n        mFieldValue = (a24Core.isEmpty(mFieldValue)) ? mDefault : mFieldValue;\n\n        if (!a24Core.isEmpty(mFieldValue)) {\n            a24RestUrlConstruct.arrParameterList.push(sFieldName + \"=\" + mFieldValue);\n        }\n    },\n    /**\n     * This function will add Query Params from a prebuilt object list\n     *\n     * @param objQueryParams - The object containing the optional query params\n     * @param objDefault - The default object containing optional query params\n     *\n     *     {\n     *         sFieldName: {\n     *             mValue: \"value\",\n     *             mDefault: \"value\",\n     *             bDelimited: false\n     *         }\n     *     }\n     *\n     * @author Michael Barnard <michael.barnard@a24group.com>\n     * @since  13 August 2014\n     *\n     * @return void\n     */\n    addQueryParamObject: function(objQueryParams, objDefault) {\n        objQueryParams = (a24Core.isEmpty(objQueryParams)) ? objDefault : objQueryParams;\n\n        if (!a24Core.isEmpty(objQueryParams)) {\n            // Loop over all the query params\n            $.each(objQueryParams, function(sFieldName, objField) {\n                var mValue = objField.mValue;\n                //The encoding for the bFromAndTo will be done in the addFromAndToParam function since encoding need\n                //to happen after the query param has been build up\n                if (!objField.bFromAndTo && !objField.bNotWithinLast && !objField.bNotWithinNext) {\n                    if (!a24Core.isEmpty(objField.bEncode) && objField.bEncode) {\n                        mValue = encodeURIComponent(mValue);\n                    }\n                    if (!a24Core.isEmpty(objField.bLike) && objField.bLike) {\n                        mValue = \"*\" + mValue + \"*\";\n                    }\n                }\n                if (objField.bDelimited) {\n                    // Add delimited field\n                    a24RestUrlConstruct.addDelimitedParam(\n                        sFieldName,\n                        mValue,\n                        objField.mDefault\n                    );\n                } else if (objField.bFrom) {\n                    a24RestUrlConstruct.addFromParam(sFieldName, mValue, objField.mDefault);\n                } else if (objField.bTo) {\n                    a24RestUrlConstruct.addToParam(sFieldName, mValue, objField.mDefault);\n                } else if (objField.bSortBy) {\n                    a24RestUrlConstruct.addSortBy(sFieldName, mValue);\n                } else if (objField.bFromAndTo || objField.bNotWithinLast || objField.bNotWithinNext) {\n                    var bEncode = !a24Core.isEmpty(objField.bEncode) && objField.bEncode;\n                    if (objField.bFromAndTo) {\n                        a24RestUrlConstruct.addFromAndToParam(\n                            sFieldName, mValue, bEncode, objField.mDefault\n                        );\n                    } else if (objField.bNotWithinLast) {\n                        a24RestUrlConstruct.addToParam(sFieldName, mValue.sFrom, objField.mDefault);\n                    } else if (objField.bNotWithinNext) {\n                        a24RestUrlConstruct.addFromParam(sFieldName, mValue.sTo, objField.mDefault);\n                    }\n                } else if (objField.bSubProperty) {\n                    //This is when we need to query on sub properties eg. someproperty.subproperty\n                    a24RestUrlConstruct.addQueryParam(\n                        objField.sName,\n                        mValue,\n                        objField.mDefault\n                    );\n                } else {\n                    // Add standard field\n                    a24RestUrlConstruct.addQueryParam(\n                        sFieldName,\n                        mValue,\n                        objField.mDefault\n                    );\n                }\n            });\n        }\n    },\n    /**\n     * Add a query field with the \"from::???|to::???\" for date queries.\n     *\n     * Note: If mFieldValue is empty, then the mDefault will be applied.\n     * Note: If mFieldValue and mDefault is empty, the param will be omitted from the url.\n     *\n     * @param sFieldName - The name of the field used in the url\n     * @param mFieldValue - The value of this field\n     * @param bEncode - Whether to encode the param\n     * @param mDefault (Optional) - If no value is set, the value that will be given\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since  13 Nov 2014\n     *\n     * @return void\n     */\n    addFromAndToParam: function(sFieldName, mFieldValue, bEncode, mDefault) {\n        mFieldValue = (a24Core.isEmpty(mFieldValue)) ? mDefault : mFieldValue;\n\n        if (!a24Core.isEmpty(mFieldValue)) {\n            if (a24RestUrlConstruct.bIsSwagger) {\n                var sFromFieldName = \"from-\" + sFieldName;\n                var sQueryStringFrom = mFieldValue.sFrom;\n                if (bEncode) {\n                    sQueryStringFrom = encodeURIComponent(sQueryStringFrom);\n                }\n                a24RestUrlConstruct.addQueryParam(sFromFieldName, sQueryStringFrom);\n                var sToFieldName = \"to-\" + sFieldName;\n                var sQueryStringTo = mFieldValue.sTo;\n                if (bEncode) {\n                    sQueryStringTo = encodeURIComponent(sQueryStringTo);\n                }\n                a24RestUrlConstruct.addQueryParam(sToFieldName, sQueryStringTo);\n            } else {\n                var sQueryString = \"from::\" + mFieldValue.sFrom + \"|to::\" + mFieldValue.sTo;\n                if (bEncode) {\n                    sQueryString = encodeURIComponent(sQueryString);\n                }\n                a24RestUrlConstruct.addQueryParam(sFieldName, sQueryString);\n            }\n        }\n    },\n    /**\n     * Add a query field with the \"in::\" prefixed to the value, to the url.\n     *\n     * Note: If mFieldValue is empty, then the mDefault will be applied.\n     * Note: If mFieldValue and mDefault is empty, the param will be omitted from the url.\n     *\n     * @param sFieldName - The name of the field used in the url\n     * @param mFieldValue - The value of this field\n     * @param mDefault (Optional) - If no value is set, the value that will be given\n     *\n     * @author Michael Barnard <michael.barnard@a24group.com>\n     * @since  13 August 2014\n     *\n     * @return void\n     */\n    addDelimitedParam: function(sFieldName, mFieldValue, mDefault) {\n        mFieldValue = (a24Core.isEmpty(mFieldValue)) ? mDefault : mFieldValue;\n        if (!a24Core.isEmpty(mFieldValue)) {\n            if (a24RestUrlConstruct.bIsSwagger) {\n                var mValue = mFieldValue.replace(/%7C/g, \"%2C\");\n                // the /g modifier replaces all occurances of the string\n                // using the encoded \"|\" and \",\" since mFieldValue is already encoded at this stage\n                a24RestUrlConstruct.addQueryParam(sFieldName, mValue);\n            } else {\n                a24RestUrlConstruct.addQueryParam(sFieldName, \"in::\" + mFieldValue);\n            }\n        }\n    },\n    /**\n     * Add a query field with the \"to::\" prefixed to the value, to the url.\n     *\n     * Note: If mFieldValue is empty, then the mDefault will be applied.\n     * Note: If mFieldValue and mDefault is empty, the param will be omitted from the url.\n     *\n     * @param sFieldName - The name of the field used in the url\n     * @param mFieldValue - The value of this field\n     * @param mDefault (Optional) - If no value is set, the value that will be given\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since  01 Dec 2014\n     *\n     * @return void\n     */\n    addToParam: function(sFieldName, mFieldValue, mDefault) {\n        mFieldValue = (a24Core.isEmpty(mFieldValue)) ? mDefault : mFieldValue;\n\n        if (!a24Core.isEmpty(mFieldValue)) {\n            if (a24RestUrlConstruct.bIsSwagger) {\n                a24RestUrlConstruct.addQueryParam(\"to-\" + sFieldName, mFieldValue);\n            } else {\n                a24RestUrlConstruct.addQueryParam(sFieldName, \"to::\" + mFieldValue);\n            }\n        }\n    },\n    /**\n     * Add a query field with the \"from::\" prefixed to the value, to the url.\n     *\n     * Note: If mFieldValue is empty, then the mDefault will be applied.\n     * Note: If mFieldValue and mDefault is empty, the param will be omitted from the url.\n     *\n     * @param sFieldName - The name of the field used in the url\n     * @param mFieldValue - The value of this field\n     * @param mDefault (Optional) - If no value is set, the value that will be given\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since  01 Dec 2014\n     *\n     * @return void\n     */\n    addFromParam: function(sFieldName, mFieldValue, mDefault) {\n        mFieldValue = (a24Core.isEmpty(mFieldValue)) ? mDefault : mFieldValue;\n\n        if (!a24Core.isEmpty(mFieldValue)) {\n            if (a24RestUrlConstruct.bIsSwagger) {\n                a24RestUrlConstruct.addQueryParam(\"from-\" + sFieldName, mFieldValue);\n            } else {\n                a24RestUrlConstruct.addQueryParam(sFieldName, \"from::\" + mFieldValue);\n            }\n        }\n    },\n    /**\n     * Add a sort by criteria for the url\n     *\n     * Note: If sOrder is empty, \"desc\" will be applied by default\n     *\n     * @param sFieldName - The name of the field used in the url\n     * @param sOrder (Optional) - Whether to sort the field asc or desc\n     *\n     * @author Michael Barnard <michael.barnard@a24group.com>\n     * @since  13 August 2014\n     *\n     * @return void\n     */\n    addSortBy: function(sFieldName, sOrder) {\n        // If order is not asc, any other case becomes desc\n        if (a24RestUrlConstruct.bIsSwagger) {\n            sOrder = (sOrder === \"asc\") ? \"\" : \"-\";\n            a24RestUrlConstruct.arrSortByList.push(sOrder + sFieldName);\n        } else {\n            sOrder = (sOrder === \"asc\") ? \"asc\" : \"desc\";\n            a24RestUrlConstruct.arrSortByList.push(sFieldName + \"::\" + sOrder);\n        }\n    },\n    /**\n     * Adds a list of sort by fields\n     *\n     * @param arrSortObject - The sortBy object array build up as [{sFieldName: sOrder}, {sFieldName2: sOrder}]\n     * @param arrDefaultSortObject - The default value for the sort object array\n     *\n     * @author Michael Barnard <michael.barnard@a24group.com>\n     * @since  13 August 2014\n     *\n     * @return void\n     */\n    addMultiSortObject: function(arrSortObject, arrDefaultSortObject) {\n        arrSortObject =  (a24Core.isEmpty(arrSortObject)) ? arrDefaultSortObject : arrSortObject;\n        // Loop over indexed list (for order integrity)\n        $.each(arrSortObject, function(sKey, objValue) {\n            // Pull key value from object to assign new field\n            $.each(objValue, function(sFieldName, sFieldValue) {\n                a24RestUrlConstruct.addSortBy(sFieldName, sFieldValue);\n            });\n        });\n    },\n    /**\n     * This function will build up the final url with parameters and sorting applied\n     *\n     * @author Michael Barnard <michael.barnard@a24group.com>\n     * @since  13 August 2014\n     *\n     * @returns String The completed url.\n     */\n    getConstructedUrl: function() {\n        var sFinalUrl = a24RestUrlConstruct.sUrl;\n        if (a24RestUrlConstruct.arrSortByList.length !== 0) {\n            var sSortString = \"sortBy=\";\n            if (a24RestUrlConstruct.bIsSwagger) {\n                sSortString += a24RestUrlConstruct.arrSortByList.join(\"%2C\");\n            } else {\n                sSortString += a24RestUrlConstruct.arrSortByList.join(\"%7C\");\n            }\n\n            a24RestUrlConstruct.arrParameterList.push(sSortString);\n        }\n        if (a24RestUrlConstruct.arrParameterList.length !== 0) {\n            sFinalUrl += \"?\" + a24RestUrlConstruct.arrParameterList.join(\"&\");\n        }\n        return sFinalUrl;\n    }\n};\n\n/**\n * This is the a24RSVP that will be used to make a series of service calls and\n * have callbacks only execute once all the services they require are complete.\n *\n * This acts similar to the Ember.RSVP but this RSVP adds the ability to do multiple\n * callbacks rather than a single success, and secondly allows failures to happen so that\n * a 404 does not make the entire RSVP object cancel and fail.\n *\n * @author Michael Barnard <michael.barnard@a24group.com>\n * @since  12 November 2015\n */\nvar a24RSVPExtend = {\n    objPromiseConfig: {},\n    arrCallback: [],\n    objControllerInstance: null,\n    /**\n     * This function is the main entry point for the a24RSVP\n     *\n     * This function will prep the configurations sent in to\n     *\n     * @author Michael Barnard <michael.barnard@a24group.com>\n     * @since  12 November 2015\n     *\n     * @param objController - The controller that will have the data set to it on local properties\n     * @param objPromiseConfig - The object containing all the promise objects\n     * @param arrCallbackConfigurations - The configurations used to set up all the callback functions that need\n     *     to be called when the various service calls complete\n     */\n    configure: function(objController, objPromiseConfig, arrCallbackConfigurations) {\n        var objRSVP = this; // Create a this reference\n        $.each(objPromiseConfig, function(sKey, objPromise) {\n            // Create a new structure from the promise\n            objPromiseConfig[sKey] = {\n                bDone: false, // State indicator\n                objPromise: objPromise //promise object\n            };\n            // Add a \"listener\" to the promise\n            $.when(objPromise).then(\n                // When the promise is resolved\n                function(objData, sStatus, jqXHR) {\n                    objRSVP.onSingleSuccess(sKey, objData, sStatus, jqXHR);\n                },\n                // When the promise is rejected\n                function(jqXHR, sStatus, errorThrown) {\n                    objRSVP.onSingleFailure(sKey, jqXHR, sStatus, errorThrown);\n                }\n            );\n        });\n        // Set the new promise config to an object variable\n        this.objPromiseConfig = objPromiseConfig;\n        // Set the callback config to an object variable\n        this.arrCallback = arrCallbackConfigurations;\n        // Set the new promise config to an object variable\n        this.objControllerInstance = objController;\n    },\n    /**\n     * This function will be called when a promise is resolved\n     *\n     * @author Michael Barnard <michael.barnard@a24group.com>\n     * @since  12 November 2015\n     *\n     * @param sKey - The key of the promise that succeeded\n     * @param objData - The response of the service call\n     * @param sStatus - The status of the service call\n     * @param jqXHR - The response header of the service call\n     */\n    onSingleSuccess: function(sKey, objData, sStatus, jqXHR) {\n        this.objPromiseConfig[sKey].bDone = true;\n        if (a24Core.isEmpty(objData)) {\n            // If the data is empty, we standard it to null\n            objData = null;\n        }\n        this.objPromiseConfig[sKey].objResponse = objData; // Set the data on the promise config\n        this.objControllerInstance.set(sKey, objData); // Set the data on the controller\n        this.objPromiseConfig[sKey].objHeaders = jqXHR; // Set the headers on the promise config\n        // Process to see if callbacks should be called\n        this.processCallbackConfig(sKey);\n    },\n    /**\n     * This function will be called when a promise is rejected\n     *\n     * @author Michael Barnard <michael.barnard@a24group.com>\n     * @since  12 November 2015\n     *\n     * @param sKey - The key of the promise that succeeded\n     * @param jqXHR - The response header of the service call\n     * @param sStatus - The status of the service call\n     * @param errorThrown - The error that is thrown by the promise\n     */\n    onSingleFailure: function(sKey, jqXHR, sStatus, errorThrown) {\n        this.objPromiseConfig[sKey].bDone = true;\n        this.objPromiseConfig[sKey].objResponse = null; // Set the data on the promise to null\n        this.objControllerInstance.set(sKey, null); // Set the data on the controller to null\n        this.objPromiseConfig[sKey].objHeaders = jqXHR; // Set the headers on the promise config\n        // Process to see if callbacks should be called\n        this.processCallbackConfig(sKey);\n    },\n    /**\n     * This function is used to check whether any of the callbacks should be called based on\n     * a completed service call. This will fire every time any of the promise objects gets\n     * rejected or resolved.\n     *\n     * @author Michael Barnard <michael.barnard@a24group.com>\n     * @since  12 November 2015\n     *\n     * @param sKey - The key of the promise that completed\n     */\n    processCallbackConfig: function(sKey) {\n        // This reference\n        var objRSVP = this;\n        // Iterate over the various callback configurations\n        $.each(this.arrCallback, function(iCallbackIndex, objCallbackConfig) {\n            // Set whether we execute equal to whether the current config needs this service\n            var bExecute = $.inArray(sKey, objCallbackConfig.arrRequiredResponses) != -1;\n            // If the current config does not need the service, we skip this step\n            if (bExecute) {\n                // Iterate over the keys required for a specific configuration\n                $.each(objCallbackConfig.arrRequiredResponses, function(sRequireKey, sRequireValue) {\n\n                    // If the current keys service is not done\n                    if (!objRSVP.objPromiseConfig[sRequireValue].bDone) {\n                        // Stop function from executing\n                        bExecute = false;\n                        return false; // Break\n                    }\n                });\n            }\n            // Execute callback if all services have completed and service is required in service config\n            if (bExecute) {\n                objCallbackConfig.funcOnComplete(\n                    objRSVP.objPromiseConfig // Send along promise object for data\n                );\n            }\n        });\n    }\n};\n\nvar a24RestCallHelperExtend = {\n    /**\n     * This function will be used to take all the data given by the datagrid and convert it to the correct\n     * post body that can be used by a post type datagrid\n     *\n     * @param objFilterParamObject - The param generated by the filter component\n     * @param objPermFilterParamObject - The param that must always be applied\n     * @param objSortObject - The param generated by the sorting on the datagrid\n     * @param iPage - The current page number of the data\n     * @param iPerPage - The amount of results to display per page\n     *\n     * @author Michael Barnard <michael.barnard@a24group.com>\n     */\n    convertHooksToPostBody: function(\n        objFilterParamObject,\n        objPermFilterParamObject,\n        objSortObject,\n        iPage,\n        iPerPage,\n        objPayloadOverride,\n        objProjectionQuery\n    ) {\n        var objReturn = {\n            page: iPage,\n            items_per_page: iPerPage\n        };\n\n        objReturn = this.createQueryParamForBody(objReturn, objFilterParamObject);\n        objReturn = this.createQueryParamForBody(objReturn, objProjectionQuery);\n        objReturn = this.createQueryParamForBody(objReturn, objPermFilterParamObject);\n        objReturn = this.createQueryParamForBody(objReturn, objSortObject);\n\n        if (!a24Core.isEmpty(objPayloadOverride)) {\n            $.each(objPayloadOverride, function(sFieldName, mFieldValue) {\n                // For now this is just straight override with no support for query types like bLike etc.\n                // This is because this is meant to override post body params on top level.\n                // Can add more support in future when we have better idea of other cases\n                if (!a24Core.isEmpty(mFieldValue) && !a24Core.isEmpty(mFieldValue.mValue)) {\n                    objReturn[sFieldName] = mFieldValue.mValue;\n                }\n            });\n        }\n\n        return objReturn;\n    },\n\n    /**\n     * This function will be used to take all the data given by the datagrid and convert it to the correct\n     * post body that can be used by a post type datagrid\n     *\n     * @param objFilterParamObject - The param generated by the filter component\n     * @param objPermFilterParamObject - The param that must always be applied\n     * @param objSortObject - The param generated by the sorting on the datagrid\n     * @param iPage - The current page number of the data\n     * @param iPerPage - The amount of results to display per page\n     *\n     * @author Ahmed Onawale<ahmedonawale@gmail.com>\n     * @since  19 September 2018\n     */\n    convertHooksToPostBodyV2: function(\n        objFilterParamObject,\n        objPermFilterParamObject,\n        objSortObject,\n        iPage,\n        iPerPage,\n        objPayloadOverride,\n        objProjectionQuery\n    ) {\n        var objReturn = {\n            page: iPage,\n            items_per_page: iPerPage\n        };\n\n        objReturn = this.createQueryParamForBodyV2(objReturn, objFilterParamObject);\n        objReturn = this.createQueryParamForBodyV2(objReturn, objProjectionQuery);\n        objReturn = this.createQueryParamForBodyV2(objReturn, objPermFilterParamObject);\n        objReturn = this.createQueryParamForBodyV2(objReturn, objSortObject);\n\n        if (!a24Core.isEmpty(objPayloadOverride)) {\n            $.each(objPayloadOverride, function(sFieldName, mFieldValue) {\n                // For now this is just straight override with no support for query types like bLike etc.\n                // This is because this is meant to override post body params on top level.\n                // Can add more support in future when we have better idea of other cases\n                if (!a24Core.isEmpty(mFieldValue) && !a24Core.isEmpty(mFieldValue.mValue)) {\n                    objReturn[sFieldName] = mFieldValue.mValue;\n                }\n            });\n        }\n\n        return objReturn;\n    },\n\n    createQueryParamForBodyV2: function(objBody, objQueryParams) {\n        var objThis = this;\n        if (!a24Core.isEmpty(objQueryParams)) {\n\n            // Loop over all the query params\n            $.each(objQueryParams, function(sFieldName, mFieldValue) {\n                if (mFieldValue.bProject) {\n                    // Create the projection part if not yet created\n                    if (!objBody.hasOwnProperty(\"project\")) {\n                        objBody.project = {};\n                    }\n\n                    objBody.project[sFieldName] = mFieldValue.mValue;\n\n                } else if (mFieldValue.bSortBy) {\n                    // Create the sort part if not yet created\n                    if (a24Core.isEmpty(objBody.sort)) {\n                        objBody.sort = [];\n                    }\n\n                    // Handle the sort by field\n                    var sSortItem = sFieldName.replace(\"__\", \".\");\n\n                    if (mFieldValue.mValue === \"desc\") {\n                        sSortItem = \"-\" + sSortItem;\n                    }\n\n                    objBody.sort.push(sSortItem);\n                } else {\n                    // Create the query part if not yet created\n                    if (a24Core.isEmpty(objBody.query)) {\n                        objBody.query = {\n                            and: []\n                        };\n                    }\n\n                    // For now we only support nested object or nested array, not nested array in nested object etc\n                    // For now we also build up nested object and arrays the same way until there is need for more\n                    // complex queries.\n                    var arrProperties = [sFieldName];\n                    var bNestedArray = false;\n                    if (sFieldName.indexOf(\"___\") != -1) { //nested array\n                        arrProperties = sFieldName.split(\"___\");\n                        bNestedArray = true;\n                    } else if (sFieldName.indexOf(\"__\") != -1) { //nested object\n                        arrProperties = sFieldName.split(\"__\");\n                    }\n\n                    var mValue = null;\n                    if (mFieldValue instanceof Array && mFieldValue.length > 1) {\n                        var bAndPrio = false;\n                        if (!a24Core.isEmpty(mFieldValue[1].bA) && mFieldValue[1].bA) {\n                            bAndPrio = true;\n                        }\n\n                        var arrTagItems = [];\n                        var iGroup = 0;\n                        var bNeedsBrackets = false;\n\n                        //First we group all the items based on the first operation the user chose\n                        for (var i = 0; i < mFieldValue.length; i++) {\n                            var objTagItem = {\n                                iGroup: null,\n                                objFilter: {}\n                            };\n\n                            let arrPropertiesInner = arrProperties;\n                            let bNestedArrayInner = bNestedArray;\n                            if (mFieldValue[i].sProp) {\n                                arrPropertiesInner = [mFieldValue[i].sProp];\n                                bNestedArrayInner = false;\n                                if (mFieldValue[i].sProp.indexOf(\"___\") != -1) { //nested array\n                                    arrPropertiesInner = mFieldValue[i].sProp.split(\"___\");\n                                    bNestedArrayInner = true;\n                                } else if (mFieldValue[i].sProp.indexOf(\"__\") != -1) { //nested object\n                                    arrPropertiesInner = mFieldValue[i].sProp.split(\"__\");\n                                }\n                            }\n\n                            //NOTE for now we only support a nesting one level deep for advance filter items\n                            if (arrPropertiesInner.length > 1) {\n                                if (!a24Core.isEmpty(mFieldValue[i].mCstmQry)) {\n                                    // We went with this approach since we wanted to override the query\n                                    // and the best way is for it to run through the create query func again\n                                    // for when we want a custom query and attach that to the existing prop\n                                    // This way we can still feed it a query our datagrid understands\n                                    // and our rest helper can create a backend query for it\n                                    let objQuery = {}\n                                    objQuery[sFieldName] = mFieldValue[i].mCstmQry\n                                    let objCustomQuery = objThis.createQueryParamForBodyV2(\n                                        {},\n                                        objQuery\n                                    );\n                                    objTagItem.objFilter = objCustomQuery.query.and[0]\n                                } else {\n                                    objTagItem.objFilter[arrPropertiesInner[0]] = objThis._createQueryValuesV2(\n                                        arrPropertiesInner[arrPropertiesInner.length - 1],\n                                        mFieldValue[i],\n                                        bNestedArrayInner\n                                    );\n                                }\n                            } else {\n                                if (!a24Core.isEmpty(mFieldValue[i].mCstmQry)) {\n                                    // We went with this approach since we wanted to override the query\n                                    // and the best way is for it to run through the create query func again\n                                    // for when we want a custom query and attach that to the existing prop\n                                    // This way we can still feed it a query our datagrid understands\n                                    // and our rest helper can create a backend query for it\n                                    let objQuery = {}\n                                    objQuery[sFieldName] = mFieldValue[i].mCstmQry\n                                    let objCustomQuery = objThis.createQueryParamForBodyV2(\n                                        {},\n                                        objQuery\n                                    );\n                                    objTagItem.objFilter = objCustomQuery.query.and[0]\n                                } else {\n                                    objTagItem.objFilter = objThis._createQueryValuesV2(\n                                        arrPropertiesInner[arrPropertiesInner.length - 1],\n                                        mFieldValue[i],\n                                        bNestedArrayInner\n                                    );\n                                }\n                            }\n\n                            if (i === 0) {\n                                iGroup = iGroup + 1;\n                                objTagItem.iGroup = iGroup;\n                            } else if (\n                                bAndPrio && mFieldValue[i].bA ||\n                                !bAndPrio && mFieldValue[i].bO\n                            ) {\n                                if (a24Core.isEmpty(arrTagItems[i - 1].iGroup)) {\n                                    iGroup = iGroup + 1;\n                                    objTagItem.iGroup = iGroup;\n                                    arrTagItems[i - 1].iGroup = iGroup;\n                                } else {\n                                    objTagItem.iGroup = arrTagItems[i - 1].iGroup;\n                                }\n                            } else {\n                                bNeedsBrackets = true;\n                            }\n                            arrTagItems.push(objTagItem);\n                        }\n\n                        var arrMain = [];\n                        var arrGroup = null;\n                        var iCurrentGroup = 0;\n\n                        for (var j = 0; j < arrTagItems.length; j++) {\n                            if (bNeedsBrackets) {\n                                if (a24Core.isEmpty(arrTagItems[j].iGroup)) {\n                                    if (!a24Core.isEmpty(arrGroup)) {\n                                        arrMain.push(bAndPrio ? {and: arrGroup} : {or: arrGroup});\n                                        arrGroup = null;\n                                        iCurrentGroup = 0;\n                                    }\n                                    arrMain.push(arrTagItems[j].objFilter);\n                                } else if (arrTagItems[j].iGroup !== iCurrentGroup) {\n                                    if (a24Core.isEmpty(arrGroup)) {\n                                        iCurrentGroup = arrTagItems[j].iGroup;\n                                        arrGroup = [arrTagItems[j].objFilter];\n                                    } else {\n                                        arrMain.push(bAndPrio ? {and: arrGroup} : {or: arrGroup});\n                                        iCurrentGroup = arrTagItems[j].iGroup;\n                                        arrGroup = [arrTagItems[j].objFilter];\n                                    }\n                                } else {\n                                    arrGroup.push(arrTagItems[j].objFilter);\n                                }\n                            } else {\n                                arrMain.push(arrTagItems[j].objFilter);\n                            }\n                        }\n                        //This caters for the scenario where there is only one group and also for the last group in the\n                        //set\n                        if (!a24Core.isEmpty(arrGroup)) {\n                            arrMain.push(bAndPrio ? {and: arrGroup} : {or: arrGroup});\n                        }\n\n                        var objFilter = null;\n                        if (bNeedsBrackets) {\n                            objFilter = bAndPrio ? {or: arrMain} : {and: arrMain};\n                        } else {\n                            objFilter = bAndPrio ? {and: arrMain} : {or: arrMain};\n                        }\n\n                        objBody.query.and.push(objFilter);\n                    } else if (mFieldValue instanceof Array) {\n\n                        var objFilterSingle = {};\n\n                        if (mFieldValue[0].sProp) {\n                            arrProperties = [mFieldValue[0].sProp];\n                            bNestedArray = false;\n                            if (mFieldValue[0].sProp.indexOf(\"___\") != -1) { //nested array\n                                arrProperties = mFieldValue[0].sProp.split(\"___\");\n                                bNestedArray = true;\n                            } else if (mFieldValue[0].sProp.indexOf(\"__\") != -1) { //nested object\n                                arrProperties = mFieldValue[0].sProp.split(\"__\");\n                            }\n                        }\n                        if (!a24Core.isEmpty(mFieldValue[0].mCstmQry)) {\n                            // We went with this approach since we wanted to override the query\n                            // and the best way is for it to run through the create query func again\n                            // for when we want a custom query and attach that to the existing prop\n                            // This way we can still feed it a query our datagrid understands\n                            // and our rest helper can create a backend query for it\n                            let objQuery = {}\n                            objQuery[sFieldName] = mFieldValue[0].mCstmQry\n                            let objCustomQuery = objThis.createQueryParamForBodyV2(\n                                {},\n                                objQuery\n                            );\n                            mValue = objCustomQuery.query.and[0];\n                        } else {\n                            mValue = objThis._createQueryValuesV2(\n                                arrProperties[arrProperties.length - 1],\n                                mFieldValue[0],\n                                bNestedArray\n                            );\n                        }\n\n                        if (!a24Core.isEmpty(mFieldValue[0].mCstmQry)) {\n                            objFilterSingle = mValue;\n                        } else if (arrProperties.length > 1) {\n                            objFilterSingle[arrProperties[0]] = mValue;\n                        } else {\n                            objFilterSingle = mValue;\n                        }\n\n                        objBody.query.and.push(objFilterSingle);\n                    } else {\n                        if (!a24Core.isEmpty(mFieldValue.mCstmQry)) {\n                            // We went with this approach since we wanted to override the query\n                            // and the best way is for it to run through the create query func again\n                            // for when we want a custom query and attach that to the existing prop\n                            // This way we can still feed it a query our datagrid understands\n                            // and our rest helper can create a backend query for it\n                            let objQuery = {}\n                            objQuery[sFieldName] = mFieldValue.mCstmQry\n                            let objCustomQuery = objThis.createQueryParamForBodyV2(\n                                {},\n                                objQuery\n                            );\n                            mValue = objCustomQuery.query.and[0];\n                        } else {\n                            mValue = objThis._createQueryValueV2(mFieldValue);\n                        }\n\n                        if (mFieldValue.sProp) {\n                            arrProperties = [mFieldValue.sProp];\n                            bNestedArray = false;\n                            if (mFieldValue.sProp.indexOf(\"___\") != -1) { //nested array\n                                arrProperties = mFieldValue.sProp.split(\"___\");\n                                bNestedArray = true;\n                            } else if (mFieldValue.sProp.indexOf(\"__\") != -1) { //nested object\n                                arrProperties = mFieldValue.sProp.split(\"__\");\n                            }\n                        }\n\n                        var objFilterPlain = {};\n                        if (!a24Core.isEmpty(mFieldValue.mCstmQry)) {\n                            objFilterPlain = mValue;\n                        } else if (mFieldValue.bContainsAny) {\n                            objFilterPlain[arrProperties[0]] = mValue;\n                        } else {\n                            var objTemp = objFilterPlain;\n                            for(var k = 0; k < arrProperties.length; k++) {\n                                if (k === arrProperties.length - 1) {\n                                    if (bNestedArray && mFieldValue.bApplyContains) {\n                                        objTemp[\"contains\"] = [{}];\n                                        objTemp = objTemp.contains[0][arrProperties[k]] = mValue;\n                                    } else {\n                                        objTemp = objTemp[arrProperties[k]] = mValue;\n                                    }\n                                } else {\n                                    objTemp = objTemp[arrProperties[k]] = {};\n                                }\n                            }\n                        }\n\n                        objBody.query.and.push(objFilterPlain);\n                    }\n                }\n            });\n        }\n\n        return objBody;\n    },\n    _createQueryValuesV2: function(sPrimaryProperty, objField, bNestedArray) {\n        var objFilterMulti = {};\n        if (bNestedArray && !a24Core.isEmpty(objField.arSec) && !objField.bContainsAny) {\n            objFilterMulti[\"contains\"] = [{}];\n            if (!objField.bAny) {\n                objFilterMulti.contains[0][sPrimaryProperty] = this._createQueryValueV2(objField);\n            }\n        } else if (objField.bContainsAny) {\n            objFilterMulti = this._createQueryValueV2(objField);\n        } else {\n            objFilterMulti[sPrimaryProperty] = this._createQueryValueV2(objField);\n        }\n        if (!a24Core.isEmpty(objField.arSec)) {\n            for (var i = 0; i < objField.arSec.length; i++) {\n                if (bNestedArray) {\n                    objFilterMulti.contains[0][objField.arSec[i].sProp] = this._createQueryValueV2(objField.arSec[i]);\n                } else {\n                    objFilterMulti[objField.arSec[i].sProp] = this._createQueryValueV2(objField.arSec[i]);\n                }\n            }\n        }\n        return objFilterMulti;\n    },\n    _createQueryValueV2: function(objField) {\n        // Get the value from the field\n        var mValue = objField.mValue;\n\n        if (mValue == \"null\") {\n            // Null value\n            mValue = {\n                equal: null\n            };\n        } else if (objField.bDelimited) {\n            var arrValues = mValue.split(\"|\");\n            for (var i = 0; i < arrValues.length; i++) {\n                if (arrValues[i] === \"null\") {\n                    arrValues[i] = null;\n                }\n            }\n            mValue = {\n                in: arrValues\n            };\n        } else if (objField.bDelimitedNot) {\n            mValue = {\n                nin: mValue.split(\"|\")\n            };\n        } else if (objField.bLike) {\n            // Like value\n            mValue = {\n                like: \"*\" + mValue + \"*\"\n            };\n        } else if (objField.bStartWith) {\n            mValue = {\n                like: mValue + \"*\"\n            };\n        } else if (objField.bEndsWith) {\n            mValue = {\n                like: \"*\" + mValue\n            };\n        } else if (\n            objField.bFrom ||\n            objField.bTo ||\n            objField.bFromAndTo ||\n            objField.bNotWithinLast ||\n            objField.bNotWithinNext\n        ) {\n            // The field has been identified as a date\n            if (objField.bFrom) {\n                mValue = {\n                    greater_than_equal: mValue\n                };\n            } else if (objField.bTo) {\n                mValue = {\n                    less_than_equal: mValue\n                };\n            } else if (objField.bFromAndTo) {\n                mValue = {\n                    greater_than_equal: mValue.sFrom,\n                    less_than_equal: mValue.sTo\n                };\n            } else if (objField.bNotWithinLast) {\n                mValue = {\n                    less_than_equal: mValue.sFrom\n                };\n            } else if (objField.bNotWithinNext) {\n                mValue = {\n                    greater_than_equal: mValue.sTo\n                };\n            }\n        } else if (\n            objField.bAfter ||\n            objField.bBefore ||\n            objField.bAfterAndBefore\n        ) {\n            // The field has been identified as a date\n            if (objField.bAfter) {\n                mValue = {\n                    greater_than: mValue\n                };\n            } else if (objField.bBefore) {\n                mValue = {\n                    less_than: mValue\n                };\n            } else if (objField.bAfterAndBefore) {\n                mValue = {\n                    greater_than: mValue.sFrom,\n                    less_than: mValue.sTo\n                };\n            }\n        } else if (objField.bContainsAny) {\n            mValue = [];\n            for (var i = 0; i < objField.arExt.length; i++) {\n                mValue.push(this._createQueryValuesV2(objField.arExt[i].sProp, objField.arExt[i], false));\n            }\n            mValue = {\"contains_any\": mValue};\n        } else if (objField.bNear) {\n            mValue = {\n                \"near\": {\n                    \"coordinates\": [\n                        objField.fLong, objField.fLat\n                    ],\n                    \"max_distance\": objField.iMax,\n                    \"min_distance\": objField.iMin\n                }\n            };\n        } else if (objField.bWithin) {\n            mValue = {\n                \"within\": {\n                    \"coordinates\": [\n                        objField.fLong, objField.fLat\n                    ],\n                    \"max_distance\": objField.iMax\n                }\n            };\n        } else {\n            mValue = {\n                equal: mValue\n            };\n        }\n\n        return mValue;\n    },\n\n    /**\n     * This method is used to convert standard datagrid filter values to a post type\n     * query object. This function is called with the existing body, and will append the properties\n     * that are not yet set. The function will then return the modified object.\n     *\n     * @param objBody - The original body that will be used to do the post\n     * @param objQueryParams - The query param object that should be applied to the body\n     *\n     * @author Michael Barnard <michael.barnard@a24group.com>\n     */\n    createQueryParamForBody: function(objBody, objQueryParams) {\n        if (!a24Core.isEmpty(objQueryParams)) {\n\n            // Loop over all the query params\n            $.each(objQueryParams, function(sFieldName, objField) {\n                // Get the value from the field\n                var mValue = objField.mValue;\n\n                if (objField.bProject) {\n                    // Create the projection part if not yet created\n                    if (!objBody.hasOwnProperty(\"project\")) {\n                        objBody.project = {};\n                    }\n\n                    objBody.project[sFieldName] = mValue;\n\n                } else if (objField.bSortBy) {\n                    // Create the sort part if not yet created\n                    if (!objBody.hasOwnProperty(\"sort\")) {\n                        objBody.sort = [];\n                    }\n\n                    // Handle the sort by field\n                    var sSortItem = sFieldName;\n\n                    if (mValue === \"desc\") {\n                        sSortItem = \"-\" + sFieldName;\n                    }\n\n                    objBody.sort.push(sSortItem);\n                } else {\n                    // Create the query part if not yet created\n                    if (!objBody.hasOwnProperty(\"query\")) {\n                        objBody.query = {\n                            and: []\n                        };\n                    }\n\n                    // Append stars to the like field\n                    if (mValue == \"null\") {\n                        // Null value\n                        mValue = {\n                            equal: null\n                        };\n                    } else if (objField.bDelimited) {\n                        mValue = {\n                            in: mValue.split(\"|\")\n                        };\n                    } else if (\n                        objField.bFrom ||\n                        objField.bTo ||\n                        objField.bFromAndTo ||\n                        objField.bNotWithinLast ||\n                        objField.bNotWithinNext\n                    ) {\n                        // The field has been identified as a date\n                        if (objField.bFrom) {\n                            mValue = {\n                                greater_than_equal: mValue\n                            };\n                        } else if (objField.bTo) {\n                            mValue = {\n                                less_than_equal: mValue\n                            };\n                        } else if (objField.bFromAndTo) {\n                            mValue = {\n                                greater_than_equal: mValue.sFrom,\n                                less_than_equal: mValue.sTo,\n                            };\n                        } else if (objField.bNotWithinLast) {\n                            mValue = {\n                                less_than_equal: mValue.sFrom\n                            };\n                        } else if (objField.bNotWithinNext) {\n                            mValue = {\n                                greater_than_equal: mValue.sTo\n                            };\n                        }\n                    } else if (objField.bLike) {\n                        // Like value\n                        mValue = {\n                            like: \"*\" + mValue + \"*\"\n                        };\n                    } else {\n                        // Normal equal value\n                        mValue = {\n                            equal: mValue\n                        };\n                    }\n\n                    // Add a standard query field\n                    var objFilter = {\n                        field: sFieldName,\n                        op: mValue\n                    };\n\n                    objBody.query.and.push(objFilter);\n                }\n            });\n\n        }\n        return objBody;\n    },\n\n    /**\n     * This function will get the X-Result-Count from the jqXHR and the return it as an int\n     * or as 0 if not defined or not a number.\n     *\n     * @param jqXHR - The jquery XHR from the reponse.\n     *\n     * @return int - The X-Result-Count value or 0 if it was not found or not a number\n     */\n    getXResultCount: function(jqXHR) {\n        var iXResultCount = parseInt(jqXHR.getResponseHeader(\"X-Result-Count\"));\n        if (isNaN(iXResultCount) || a24Core.isEmpty(iXResultCount)) {\n            return 0;\n        } else {\n            return iXResultCount;\n        }\n    },\n    /**\n     * This function will simply abort the given promise if not empty and has abort function\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since  22 Jan 2016\n     */\n    abortRestCall: function(objPromise) {\n        if (!a24Core.isEmpty(objPromise) && typeof(objPromise.abort) === \"function\") {\n            objPromise.abort();\n        }\n    },\n    /**\n     * Will determine if there is already a service taking place, if there is an existing promise, we will abort it\n     *\n     * @param objEmberItem The ember object on which the property must exist, component / controller\n     * @param sProperty The property name on which to get and set the promise. Can be send in as null for service calls\n     *                  that specifically do no need to be canceled when making the same call again\n     * @param objPromise The ajax promise\n     *\n     * @author Neil Nienaber <neil.nienaber@a24group.com>\n     * @since  21 September 2015\n     *\n     * @returns The ajax promise\n     */\n    doRestServiceCall: function(objEmberItem, sProperty, objPromise) {\n        if (!a24Core.isEmpty(sProperty)) {\n            var objExistingService = objEmberItem.get(sProperty);\n            a24RestCallHelper.abortRestCall(objExistingService);\n            objEmberItem.set(sProperty, objPromise);\n        }\n        return objPromise;\n    },\n    /**\n     * Get the rel=\"next\" part of the Link header from a response\n     *\n     * @param jqXHR - The header object from the response\n     *\n     * @author Michael Barnard <michael.barnard@a24group.com>\n     * @since  6 January 2016\n     *\n     * @returns The string url for the next page, null if none is found\n     */\n    getNextUrlFromResponseHeaders: function(jqXHR) {\n        // Get the \"Link\" header as a string\n        var sLinkHeader = jqXHR.getResponseHeader(\"Link\");\n\n        // Define the link that will be returned\n        var sNextLinkUrl = null;\n\n        // Split sLinkHeader into multiple items\n        var arrLinks = sLinkHeader.split(\",\");\n\n        // Iterate over the items\n        $.each(arrLinks, function(iKey, sValue) {\n            // Split the url part up\n            var arrLinkParts = sValue.split(\";\");\n            // If the end part defines it as next\n            if (arrLinkParts[1].trim() === 'rel=\"next\"') {\n                // Get the url part for next\n                var sUrlPart = arrLinkParts[0].trim();\n                // Trim off opening \"<\" and closing \">\"\n                sNextLinkUrl = sUrlPart.substring(1, sUrlPart.length - 1);\n                // Break from the $.each\n                return false;\n            }\n        });\n\n        // Return the url\n        return sNextLinkUrl;\n    },\n    /**\n     * This function is used to make an ajax call with the required headers\n     * This is a generic helper used to reduce code duplication\n     * This function can perform both GET and POST requests\n     *\n     * Note: This function only supports Json encoding.\n     *\n     * @param objContext - The current component calling the make ajax call\n     * @param objUserSessionService - An instance of the user session service\n     * @param objNavigationService - An instance of the navigation service\n     * @param sRequestType - Whether it service call is a GET or a POST\n     * @param sUrl - The url of the service call that should be made\n     * @param funcSuccess - The function that will be called on a successful service call\n     * @param objFailure (Optional) - The object that will deal with failed service calls\n     * @param objRequestData (Optional) - The data that will be passed along if the sRequestType is 'POST'\n     * @param sContentType (Optional) - The content type i.e. application/json\n     * @param bRetrieveAll (Optional) - This option makes the rel=\"next\" link recursively fire until all results\n     *     are retrieved.\n     * @param bNonSwaggerError (Optional) - True if the error method does not follow the swagger pattern\n     * @param bXhrFieldsCredentials (Optional) - True if not including xhrFields with withCredentials\n     * @param iTimeout (Optional) - The  request timeout\n     *\n     * @author Michael Barnard <michael.barnard@a24group.com>\n     * @since  8 August 2014\n     *\n     * @return The jquery ajax object\n     */\n    makeJsonAjaxCall: function(\n        objContext,\n        objUserSessionService,\n        objNavigationService,\n        sRequestType,\n        sUrl,\n        funcSuccess,\n        objFailure,\n        objRequestData,\n        sContentType,\n        bRetrieveAll,\n        bNonSwaggerError,\n        bXhrFieldsCredentials,\n        iTimeout,\n        objCustomHeaders\n    ) {\n        /**\n         * This if is a man in the middle that will fire when the bearer function is specified. This will do\n         * some logic to get the token and once the token is retrieved (either by persistance or by making a refresh\n         * attempt) it will make the service call using that token.\n         */\n        if (\n            !a24Core.isEmpty(objUserSessionService) &&\n            !a24Core.isEmpty(objUserSessionService.get(\"objRestDetails.funcBearer\")) &&\n            typeof objUserSessionService.get(\"objRestDetails.funcBearer\") === \"function\"\n        ) {\n            var objAjax = null;\n            // Define a new promise\n            var objDeferred = $.Deferred();\n\n            // Set up a custom abort function\n            objDeferred.abort = function() {\n                objDeferred.reject();\n                if (objAjax != null) {\n                    // Abort the service call if it is in progress\n                    objAjax.abort();\n                }\n            };\n\n            var objThis = this;\n\n            // Get the token promise using the funcBearer\n            objUserSessionService.get(\"objRestDetails\").funcBearer().then(\n\n                // Once the token is given\n                function (sAccessToken) {\n\n                    // Set the new token on the bearer\n                    objUserSessionService.set(\n                        \"objRestDetails.sBearer\",\n                        sAccessToken\n                    );\n\n                    var arrErrorCodes = null;\n                    if (!a24Core.isEmpty(objFailure) && !a24Core.isEmpty(objFailure.arrErrorCodes)) {\n                        arrErrorCodes = objFailure.arrErrorCodes;\n                    }\n                    var funcOriginalFail = null;\n                    if (!a24Core.isEmpty(objFailure) && !a24Core.isEmpty(objFailure.funcCallback)) {\n                        funcOriginalFail = objFailure.funcCallback;\n                    }\n\n                    // Make the new service call\n                    objAjax = objThis.makeJsonAjaxCallActual(\n                        objContext,\n                        objUserSessionService,\n                        objNavigationService,\n                        sRequestType,\n                        sUrl,\n                        function(objData, sStatus, jqXHR) {\n                            /**\n                             * Custom success callback\n                             */\n\n                            // We do not want to deal with an abort service call\n                            if (sStatus !== \"abort\" && !a24Core.isEmpty(objContext)) {\n                                // Call the success function\n                                funcSuccess(objData, sStatus, jqXHR);\n                                // Resolve the promise\n                                objDeferred.resolve(\n                                    objData, sStatus, jqXHR\n                                );\n                            }\n                        },\n                        a24RestCallHelper.createJsonAjaxFailureObject(\n                            arrErrorCodes,\n                            function (objErrorData, sStatus, objErrorThrown, objError) {\n                                /**\n                                 * Custom failure callback\n                                 */\n                                if (sStatus !== \"abort\" && !a24Core.isEmpty(objContext)) {\n                                    // Call the failure function\n                                    funcOriginalFail(objErrorData, sStatus, objErrorThrown, objError);\n                                     // Reject the promise\n                                    objDeferred.reject(objErrorData, sStatus, objErrorThrown, objError);\n                                }\n                            }\n                        ),\n                        objRequestData,\n                        sContentType,\n                        bRetrieveAll,\n                        bNonSwaggerError,\n                        bXhrFieldsCredentials,\n                        iTimeout,\n                        objCustomHeaders\n                    );\n                }\n            );\n\n            return objDeferred;\n        }\n\n        return this.makeJsonAjaxCallActual(\n            objContext,\n            objUserSessionService,\n            objNavigationService,\n            sRequestType,\n            sUrl,\n            funcSuccess,\n            objFailure,\n            objRequestData,\n            sContentType,\n            bRetrieveAll,\n            bNonSwaggerError,\n            bXhrFieldsCredentials,\n            iTimeout,\n            objCustomHeaders\n        );\n    },\n    /**\n     * This function is used to make an ajax call with the required headers\n     * This is a generic helper used to reduce code duplication\n     * This function can perform both GET and POST requests\n     *\n     * Note: This function only supports Json encoding.\n     *\n     * @param objUserSessionService - An instance of the user session service\n     * @param objNavigationService - An instance of the navigation service\n     * @param sRequestType - Whether it service call is a GET or a POST\n     * @param sUrl - The url of the service call that should be made\n     * @param funcSuccess - The function that will be called on a successful service call\n     * @param objFailure (Optional) - The object that will deal with failed service calls\n     * @param objRequestData (Optional) - The data that will be passed along if the sRequestType is 'POST'\n     * @param sContentType (Optional) - The content type i.e. application/json\n     * @param bRetrieveAll (Optional) - This option makes the rel=\"next\" link recursively fire until all results\n     *     are retrieved.\n     * @param bNonSwaggerError (Optional) - True if the error method does not follow the swagger pattern\n     * @param bXhrFieldsCredentials (Optional) - True if xhrFields with withCredentials\n     * @param iTimeout (Optional) - The  request timeout\n     *\n     * @author Michael Barnard <michael.barnard@a24group.com>\n     * @since  8 August 2014\n     *\n     * @return The jquery ajax object\n     */\n    makeJsonAjaxCallActual: function(\n        objContext,\n        objUserSessionService,\n        objNavigationService,\n        sRequestType,\n        sUrl,\n        funcSuccess,\n        objFailure,\n        objRequestData,\n        sContentType,\n        bRetrieveAll,\n        bNonSwaggerError,\n        bXhrFieldsCredentials,\n        iTimeout,\n        objCustomHeaders\n    ) {\n        sContentType = a24Core.isEmpty(sContentType) ? \"application/json\" : sContentType;\n\n        var objThis = this;\n        // Build up the Ajax request that should always be present\n        var objAjaxRequestObject;\n\n        objAjaxRequestObject = {\n            beforeSend: function(xhr) {\n                xhr.setRequestHeader(\"Content-Type\", sContentType);\n                xhr.setRequestHeader(\"Accept\", \"application/json\");\n                if (!a24Core.isEmpty(objUserSessionService)) {\n                    if (!a24Core.isEmpty(objUserSessionService.get(\"objRestDetails.sContext\"))) {\n                        xhr.setRequestHeader(\"Context\", objUserSessionService.get(\"objRestDetails.sContext\"));\n                    }\n                    if (!a24Core.isEmpty(objUserSessionService.get(\"objRestDetails.sBearer\"))) {\n                        xhr.setRequestHeader(\"Authorization\", objUserSessionService.get(\"objRestDetails.sBearer\"));\n                    }\n                    if (!a24Core.isEmpty(objUserSessionService.get(\"objContextDetails.sTimezone\"))) {\n                        xhr.setRequestHeader(\"X-Accept-Timezone\", objUserSessionService.get(\"objContextDetails.sTimezone\"));\n                    }\n                }\n\n                if (!a24Core.isEmpty(bNonSwaggerError) && bNonSwaggerError) {\n                    xhr.setRequestHeader(\"X-Accept-Date-ISO\", \"on\");\n                }\n\n                if (!a24Core.isEmpty(objCustomHeaders)) {\n                    $.each(objCustomHeaders, function(sKey, sValue) {\n                        xhr.setRequestHeader(sKey, sValue);\n                    });\n                }\n            },\n            url: sUrl,\n            timeout: iTimeout\n        };\n        // Add additional data based on the type of ajax call (sRequestType)\n        if (sRequestType === \"POST\" || sRequestType === \"post\" || sRequestType === \"Post\") {\n            objAjaxRequestObject.type = \"POST\";\n            if (sContentType === \"application/json\") {\n                objRequestData = JSON.stringify(objRequestData);\n            }\n            objAjaxRequestObject.data = objRequestData;\n        } else if (sRequestType === \"PUT\" || sRequestType === \"put\" || sRequestType === \"Put\") {\n            objAjaxRequestObject.type = \"PUT\";\n            if (sContentType === \"application/json\") {\n                objRequestData = JSON.stringify(objRequestData);\n            }\n            objAjaxRequestObject.data = objRequestData;\n        } else if (sRequestType === \"DELETE\" || sRequestType === \"delete\" || sRequestType === \"Delete\") {\n            objAjaxRequestObject.type = \"DELETE\";\n        } else {\n            objAjaxRequestObject.type = \"GET\";\n        }\n\n        // add xhrFields with withCredentials for sub domain support\n        if (bXhrFieldsCredentials) {\n            objAjaxRequestObject.xhrFields = {\n                withCredentials: true\n            };\n        }\n\n        // Construct the function that will handle all failed responses from the service calls\n        var funcFailure = function(objErrorData, sStatus, objErrorThrown) {\n            //@see http://www.w3schools.com/ajax/ajax_xmlhttprequest_onreadystatechange.asp\n            // this appears to happen when the iframe is destroyed just after a service call takes place.\n            // we have no info to handle this, so do not continue with normal error handling\n            if (\n                a24Core.isEmpty(objErrorData) ||\n                objErrorData.readyState === 0 && objErrorData.status === 0 && a24Core.isEmpty(objErrorData.responseText)\n            ) {\n                //The request was not initialized, we can not continue with normal error handling\n                if (\n                    !a24Core.isEmpty(objFailure) &&\n                    !a24Core.isEmpty(objFailure.arrErrorCodes) &&\n                    objFailure.arrErrorCodes.indexOf(\"*MALFORMED\") !== -1 &&\n                    !a24Core.isEmpty(objContext)\n                ) {\n                    return objFailure.funcCallback(\n                        \"*MALFORMED\",\n                        sStatus,\n                        objErrorThrown\n                    );\n                }\n                return;\n            }\n\n            // If the service call was aborted, we do the callback with status being = to abort\n            if (sStatus === \"abort\") {\n                //The service call was aborted\n                if (!a24Core.isEmpty(objFailure) && !a24Core.isEmpty(objContext)) {\n                    //Error handler exists, we will still call it for the abort status\n                    objFailure.funcCallback(null, sStatus, objErrorThrown);\n                }\n                return; // We do not wish to continue with normal error handling\n            }\n\n            var objError = {\n                sField: null,\n                iIndex: null,\n                sCode: null\n            };\n\n            // If the response is not empty\n            if (!a24Core.isEmpty(objErrorData.responseText)) {\n                // Try parsing the response as json\n                try {\n                    // Retrieve the response body from the error\n                    var objErrorBody = JSON.parse(objErrorData.responseText);\n                    // Parse body for error code and location\n                    objError = $.extend(true, {}, a24RestResponseHandler).getErrorCodeFromResponse(objErrorBody, bNonSwaggerError);\n                } catch(objError) {\n                    // Ignore any failures\n                }\n            }\n\n            // Make sure that some failure handling has been put in place\n            if (!a24Core.isEmpty(objFailure)) {\n                var sErrorCode = objError.sCode;\n\n                /**\n                 * If the first error code was found on the body and is allowed by the array,\n                 * the custom failure callback will be executed.\n                 *\n                 * Note that if the array of allowed error codes contain the '*' as an item\n                 * the function will execute the callback on any non-empty code.\n                 */\n                if (\n                    !a24Core.isEmpty(sErrorCode) &&\n                    !a24Core.isEmpty(objFailure.arrErrorCodes) &&\n                    (\n                        objFailure.arrErrorCodes.indexOf(sErrorCode) !== -1 ||\n                        objFailure.arrErrorCodes.indexOf(\"*\") !== -1\n                    )\n                ) {\n                    if (\n                        sErrorCode === \"IP_ADDRESS_NOT_WHITELISTED\" &&\n                        objFailure.arrErrorCodes.indexOf(sErrorCode) === -1\n                    ) {\n                        a24RestCallHelper._funcGoToDefaultErrorPage(objNavigationService, objError, objErrorData, bNonSwaggerError);\n                    } else {\n                        // Call specified callback function with the error code\n                        a24RestCallHelper._funcErrorCallbackDetails(\n                            objFailure, sErrorCode, sStatus, objErrorThrown, objError, bNonSwaggerError\n                        );\n                    }\n                } else {\n                    if (sErrorCode === \"IP_ADDRESS_NOT_WHITELISTED\") {\n                        a24RestCallHelper._funcGoToDefaultErrorPage(objNavigationService, objError, objErrorData, bNonSwaggerError);\n                    } else {\n                        //no error code found so we will look at the status code.\n                        sErrorCode = objErrorData.status.toString();\n                        if (\n                            objFailure.arrErrorCodes.indexOf(sErrorCode) !== -1 ||\n                            objFailure.arrErrorCodes.indexOf(\"*CODE\") !== -1\n                        ) {\n                            a24RestCallHelper._funcErrorCallbackDetails(\n                                objFailure, sErrorCode, sStatus, objErrorThrown, objError, bNonSwaggerError\n                            );\n                        } else {\n                            // Direct to the general error as no error was found in the body, or\n                            // an error was found, but not expected on the route\n\n                            a24RestCallHelper._funcGoToDefaultErrorPage(objNavigationService, objError, objErrorData, bNonSwaggerError);\n                        }\n                    }\n                }\n            } else {\n                if (sStatus === \"error\" && a24Core.isEmpty(objErrorData.responseText)) {\n                    return;\n                }\n\n                // Direct to General error as no error handling was specified\n                a24RestCallHelper._funcGoToDefaultErrorPage(objNavigationService, objError, objErrorData, bNonSwaggerError);\n            }\n        };\n\n        // If the service call should be recursive\n        if (bRetrieveAll) {\n            /**\n             * NOTE: This section of the code does not deal with concurrency. If data changes\n             * while the service calls are being made, it might cause duplicate entries or completely\n             * empty responses.\n             */\n\n            // Stores the last service call made in the sequence\n            var objAjax = null;\n\n            // Create a new deferred object\n            var objDeferred = $.Deferred();\n            // Create abort function on the deferred\n            objDeferred.abort = function() {\n                objDeferred.reject();\n                if (objAjax != null) {\n                    objAjax.abort();\n                }\n            };\n\n            // Store the service call result as an array\n            var objReturn = [];\n            /**\n             * This function is defined to make it possible to recursively call a url\n             *\n             * @author Michael Barnard <michael.barnard@a24group.com>\n             * @since  6 January 2016\n             *\n             * @param objAjaxRequestObject - The request object for the service call\n             */\n            var funcDoRecursiveServiceCall = function(objAjaxRequestObject) {\n\n                // Wrapper function for the success call\n                var funcWrapSuccess = function(objData, sStatus, jqXHR) {\n\n                    // Append data to the return object\n                    if (objData == null) {\n                        // If the data is null the return is null\n                        /**\n                         * NOTE: This section of the code does not deal with concurrency. If for i.e. page 2 retrieves\n                         * data and the header indicates a page 3 has more records and someone deletes this entries,\n                         * then when page 3 is seen as 204(No Data) then it will see the entire response as empty.\n                         */\n                        objReturn = null;\n                    } else {\n                        // Append data array to the return array\n                        objReturn = objReturn.concat(objData);\n                    }\n\n                    // Get the url from the response headers\n                    var sLinkUrl = a24RestCallHelper.getNextUrlFromResponseHeaders(jqXHR);\n\n                    // If the next link url is set\n                    if (sLinkUrl != null && !a24Core.isEmpty(objContext)) {\n                        // Set new url on request object\n                        objAjaxRequestObject.url = sLinkUrl;\n                        // Make next service call\n                        funcDoRecursiveServiceCall(objAjaxRequestObject);\n                    } else   {\n                        // We do not want to deal with an abort service call\n                        if (sStatus !== \"abort\" && !a24Core.isEmpty(objContext)) {\n                            // Call the success function\n                            funcSuccess(objReturn, sStatus, jqXHR);\n                            // Resolve the promise\n                            objDeferred.resolve(\n                                objReturn, sStatus, jqXHR\n                            );\n                        }\n                    }\n                };\n\n                // Wrapper function for the failure call\n                var funcWrapFailure = function(objErrorData, sStatus, objErrorThrown) {\n                    // We do not want to deal with an abort service call\n                    if (sStatus !== \"abort\" && !a24Core.isEmpty(objContext)) {\n                        // Call the failure function\n                        funcFailure(objErrorData, sStatus, objErrorThrown);\n                        // Reject the promise\n                        objDeferred.reject(\n                            objErrorData, sStatus, objErrorThrown\n                        );\n                    }\n                };\n\n                // Make ajax call\n                objAjax = objThis._funcAjaxCall(objAjaxRequestObject, funcWrapSuccess, funcWrapFailure);\n            };\n\n            // Initial call on recursive function\n            funcDoRecursiveServiceCall(objAjaxRequestObject);\n\n            // Return the deffered objects promise\n            return objDeferred;\n        } else {\n            // Wrapper function for the success call\n            var funcWrapSuccess = function(objData, sStatus, jqXHR) {\n                // We do not want to deal with an abort service call\n                if (sStatus !== \"abort\" && !a24Core.isEmpty(objContext)) {\n                    return funcSuccess(objData, sStatus, jqXHR);\n                }\n            };\n\n            // Wrapper function for the failure call\n            var funcWrapFailure = function(objErrorData, sStatus, objErrorThrown) {\n                // We do not want to deal with an abort service call\n                if (sStatus !== \"abort\" && !a24Core.isEmpty(objContext)) {\n                    //return the response of the failure function, status not abort\n                    return funcFailure(objErrorData, sStatus, objErrorThrown);\n                }\n            };\n\n            // Make ajax call\n            return objThis._funcAjaxCall(objAjaxRequestObject, funcWrapSuccess, funcWrapFailure);\n        }\n    },\n    _funcAjaxCall: function(objAjaxRequestObject, funcSuccess, funcFailure) {\n        return $.ajax(objAjaxRequestObject).done(funcSuccess).fail(funcFailure);\n    },\n    _funcErrorCallbackDetails: function(objFailure, sErrorCode, sStatus, objErrorThrown, objError) {\n        objFailure.funcCallback(sErrorCode, sStatus, objErrorThrown, objError);\n    },\n    _funcGoToDefaultErrorPage: function(objNavigationService, objError/*, objErrorData, bNonSwaggerError*/) {\n        if (objError.sCode === \"IP_ADDRESS_NOT_WHITELISTED\") {\n            objNavigationService.navigateOutsideContext(\"access-denied\");\n        } else {\n            objNavigationService.navigateOutsideContext(\"error\");\n        }\n    },\n    /**\n     * This function is used as a quick way to construct the failure object used\n     * by the makeJsonAjaxCall\n     *\n     * @param arrExpectedErrorCodes - An array of expected failure keyword strings, can also have status codes\n     * @param funcErrorCodeHandlerFunction - The callback function that will be called if the code is found\n     *     function(sCode, sStatus, objErrorThrown) {}\n     *\n     * @author Michael Barnard <michael.barnard@a24group.com>\n     * @since  13 August 2014\n     *\n     * @returns Object constructed as {{arrErrorCodes: *, funcCallback: *}}\n     */\n    createJsonAjaxFailureObject: function(arrExpectedErrorCodes, funcErrorCodeHandlerFunction) {\n        return {\n            arrErrorCodes: arrExpectedErrorCodes,\n            funcCallback: funcErrorCodeHandlerFunction\n        };\n    },\n\n    /**\n     * The method will download a PDF for a GET route\n     *\n     * @param sUrl - The URL of the pdf\n     * @param sFileName - The name you wish to give the PDF getting downloaded\n     * @param funcSuccess - The function you want to call once the pdf has successfully downloaded\n     * @param funcFailure - The function you want to call once the pdf has failed to download\n     * @param objHeaders - The object containing the xhr headers for the request - Defaults to empty object\n     *\n     * @author Michael Banrard <michael.barnard@a24group.com>\n     * @since  22 June 2017\n     *\n     * @return Ajax Promise object\n     */\n    downloadPdfByGET: function(\n        sUrl,\n        sFileName,\n        funcSuccess,\n        funcFailure,\n        objHeaders\n    ) {\n        objHeaders = objHeaders || {};\n\n        return this._downloadPdf(\n            sUrl,\n            \"GET\",\n            null,\n            null,\n            objHeaders,\n            sFileName,\n            funcSuccess,\n            funcFailure\n        );\n    },\n    /**\n     * The method will download a PDF for a POST route\n     *\n     * @param sUrl - The URL of the pdf\n     * @param objBody - The body you wish to post to the route\n     * @param sFileName - The name you wish to give the PDF getting downloaded\n     * @param funcSuccess - The function you want to call once the pdf has successfully downloaded\n     * @param funcFailure - The function you want to call once the pdf has failed to download\n     * @param objHeaders - The object containing the xhr headers for the request - Defaults to empty object\n     * @param sContentType - The content type of the post body - Defaults to application/json and if application/json will auto JSON.stringify content\n     *\n     * @author Michael Banrard <michael.barnard@a24group.com>\n     * @since  22 June 2017\n     *\n     * @return Ajax Promise object\n     */\n    downloadPdfByPOST: function(\n        sUrl,\n        objBody,\n        sFileName,\n        funcSuccess,\n        funcFailure,\n        objHeaders,\n        sContentType\n    ) {\n        objHeaders = objHeaders || {};\n        sContentType = sContentType || \"application/json\";\n\n        return this._downloadPdf(\n            sUrl,\n            \"POST\",\n            objBody,\n            sContentType,\n            objHeaders,\n            sFileName,\n            funcSuccess,\n            funcFailure\n        );\n    },\n    /**\n     * Private function used to download a pdf\n     *\n     * @param sUrl - The URL of the pdf\n     * @param sMethod - The request verb i.e. GET or POST\n     * @param objBody - The body you wish to post to the route\n     * @param sContentType - The content type of the post body - If application/json will auto JSON.stringify content\n     * @param objHeaders - The object containing the xhr headers for the request\n     * @param sFileName - The name you wish to give the PDF getting downloaded\n     * @param funcSuccess - The function you want to call once the pdf has successfully downloaded\n     * @param funcFailure - The function you want to call once the pdf has failed to download\n     *\n     * @author Michael Banrard <michael.barnard@a24group.com>\n     * @since  22 June 2017\n     *\n     * @return Ajax Promise object\n     */\n    _downloadPdf: function(sUrl, sMethod, objBody, sContentType, objHeaders, sFileName, funcSuccess, funcFailure) {\n\n        var objAjaxConfig = {\n            cache: false, // Force a no-cache since this is a document\n            url: sUrl, // Url for the pdf\n            type: sMethod, // The request verb i.e. GET or POST,\n            processData: false, // Do not auto process data\n            xhrFields: {\n                responseType: \"blob\"\n            }\n        };\n\n        if (sMethod === \"POST\") {\n            if (sContentType === \"application/json\") {\n                // JSON encode if the content type is application/json\n                objBody = JSON.stringify(objBody);\n            }\n            objAjaxConfig.data = objBody; // Append the data if it is a post type\n            objAjaxConfig.contentType = sContentType; // Add content type for the post data\n        }\n\n        if (a24Core.isEmpty(objHeaders)) {\n            objHeaders = {};\n        }\n        objAjaxConfig.beforeSend = function(xhr) {\n            $.each(objHeaders, function(sKey, sValue) {\n                xhr.setRequestHeader(sKey, sValue);\n            });\n            xhr.setRequestHeader(\"Accept\", \"application/pdf\");\n        };\n        return this._funcAjaxCall(\n            objAjaxConfig,\n            function (objResponse, sStatus, objXhr) {\n                // Wraped in a try-catch incase the document can not be saved\n                try {\n                    // Create a blob from the response\n                    var objBlob = new Blob(\n                        [\n                            objResponse\n                        ],\n                        {\n                            type: 'application/octet-stream'\n                        }\n                    );\n\n                    // Call FileSaver Lib\n                    saveAs(objBlob, sFileName);\n\n                    if (!a24Core.isEmpty(funcSuccess)) {\n                        funcSuccess();\n                    }\n\n                } catch (eException) {\n                    if (!a24Core.isEmpty(funcFailure)) {\n                        funcFailure(eException);\n                    }\n                }\n            },\n            function(objErrorData, sStatus, objErrorThrown) {\n                if (!a24Core.isEmpty(funcFailure)) {\n                    funcFailure(objErrorData, sStatus, objErrorThrown);\n                }\n            }\n        );\n    }\n};\n\nvar a24RestResponseHandlerExtend = {\n    /**\n     * These params will be used by the below functions to store values for the initial call\n     * to use when it returns the code.\n     */\n    sCode: null,\n    /**\n     * These params will be used by the below functions to store values for the initial call\n     * to use when it returns the path.\n     */\n    arrPath: null,\n    /**\n     * This is a wrapper for a recursive calling method to allow single param entry\n     *\n     * This function is used to parse through the body of a failure response and\n     * retrieve the first Error Constant based on a generic structures for the\n     * response.\n     *\n     * @param objError - The json body of the error response\n     * @param bNonSwaggerError (Optional) - True if the error method does not follow the swagger pattern\n     *\n     * @author Michael Barnard <michael.barnard@a24group.com>\n     * @since  09 December 2015\n     *\n     * @returns An object containing the Error Code, The array index and the Field for the error\n     */\n    getErrorCodeFromResponse: function(objError, bNonSwaggerError) {\n        return this.getFullErrorLookup(objError, true, bNonSwaggerError);\n    },\n    /**\n     * This function is used to parse through the body of a failure response and\n     * retrieve the first Error Constant based on a generic structures for the\n     * response.\n     *\n     * @param objError - The json body of the error response\n     * @param bReturn - Whether this itteration of the service call should return the object\n     * @param bNonSwaggerError (Optional) - True if the error method does not follow the swagger pattern\n     *\n     * @author Michael Barnard <michael.barnard@a24group.com>\n     * @since  03 October 2016\n     *\n     * @returns An object containing the Error Code\n     *     {\n     *         sCode: \"STATUS_CODE\"\n     *     }\n     */\n    getFullErrorLookup: function(objError, bReturn, bNonSwaggerError) {\n        return this.getSwaggerError(objError, bReturn, bNonSwaggerError);\n    },\n    /**\n     * This function is used to parse through the body of a failure response and\n     * retrieve the first Error Constant based on a swagger structures for the\n     * response.\n     *\n     * @param objError - The json body of the error response\n     * @param bReturn - Whether this itteration of the service call should return the object\n     * @param bNonSwaggerError (Optional) - True if the error method does not follow the swagger pattern\n     *\n     * @author Michael Barnard <michael.barnard@a24group.com>\n     * @since  03 October 2016\n     *\n     * @returns An object containing the Error Code\n     *     {\n     *         sCode: \"STATUS_CODE\"\n     *     }\n     */\n    getSwaggerError: function(objError, bReturn, bNonSwaggerError) {\n        if (objError.errors) {\n            // If the errors is present, it means that there are lower levels\n            this.getFullErrorLookup(objError.errors[0], false, bNonSwaggerError);\n        } else if (objError.path || objError.stack) {\n            // If path or stack is present, it means that this is the lowest level\n            this.sCode = objError.code;\n            this.arrPath = objError.path;\n            if (a24Core.isEmpty(this.arrPath)) {\n                this.arrPath = null;\n            }\n        } else if (objError.exceptionCode) {\n            this.sCode = objError.exceptionCode;\n            this.arrPath = null;\n        }\n        // If return is specified\n        if (bReturn) {\n            // Return the value on a single object\n            return {\n                sCode: this.sCode,\n                arrPath: this.arrPath\n            };\n        }\n    }\n};\n\nif (typeof a24RestUrlConstruct === \"undefined\") {\n    var a24RestUrlConstruct = {};\n}\nif (typeof a24RestCallHelper === \"undefined\") {\n    var a24RestCallHelper = {};\n}\nif (typeof a24RestResponseHandler === \"undefined\") {\n    var a24RestResponseHandler = {};\n}\nif (typeof a24RSVP === \"undefined\") {\n    var a24RSVP = {};\n}\n\n//Only add the extended values to the global if they do not exist on it already\nObject.keys(a24RestUrlConstructExtend).forEach(function(sKey) {\n    if (!a24RestUrlConstruct.hasOwnProperty(sKey)) {\n        a24RestUrlConstruct[sKey] = a24RestUrlConstructExtend[sKey];\n    }\n});\nObject.keys(a24RestCallHelperExtend).forEach(function(sKey) {\n    if (!a24RestCallHelper.hasOwnProperty(sKey)) {\n        a24RestCallHelper[sKey] = a24RestCallHelperExtend[sKey];\n    }\n});\nObject.keys(a24RestResponseHandlerExtend).forEach(function(sKey) {\n    if (!a24RestResponseHandler.hasOwnProperty(sKey)) {\n        a24RestResponseHandler[sKey] = a24RestResponseHandlerExtend[sKey];\n    }\n});\nObject.keys(a24RSVPExtend).forEach(function(sKey) {\n    if (!a24RSVP.hasOwnProperty(sKey)) {\n        a24RSVP[sKey] = a24RSVPExtend[sKey];\n    }\n});\n","var a24Validation = {\n    //Don't add anything in here, this is purely to create the object if the project using\n    //this addon does not create and import one.\n    //In ember the parent vendor file with the same name and location will take preference over a file with the same\n    //name and directory in addons(one in addon will not be imported, only the parent one),\n    //If the parent does not have that file but 2 addons have that file then the last addon to be added in the\n    //package.json in the parent, will take preference.\n};\n","var a24ValidationExtend = {\n    addMaxLength: function(objMixin, iMaxLength) {\n        if (\n            objMixin.get(\"sInputType\") === \"text\" ||\n            objMixin.get(\"sInputType\") === \"text-area\" ||\n            objMixin.get(\"sInputType\") === \"tel\"\n        ) {\n            //Only set the iMaxCharacters for inputs that support the character counter\n            //This is in separate if to allow adding more types in the next if later\n            objMixin.set(\"iMaxCharacters\", iMaxLength);\n        }\n\n        if (\n            objMixin.get(\"sInputType\") === \"text\" ||\n            objMixin.get(\"sInputType\") === \"text-area\" ||\n            objMixin.get(\"sInputType\") === \"tel\"\n        ) {\n            objMixin.get(\"arrValidation\").pushObject(\n                function() {\n                    if (!a24Core.isEmpty(objMixin.get(\"mValue\")) && objMixin.get(\"mValue\").trim().length > iMaxLength) {\n                        return objMixin.get(\"_objStringsService\").getTokenString(\n                            \"validationMaxLength\",\n                            objMixin.get(\"sFieldName\"),\n                            iMaxLength\n                        );\n                    }\n                }\n            );\n        } else if (objMixin.get(\"sInputType\") === \"password\") {\n            objMixin.get(\"arrValidation\").pushObject(\n                function() {\n                    //passwords can not be trimmed thus custom empty checks\n                    if (objMixin.get(\"mValue\").length > 0 && objMixin.get(\"mValue\").length > iMaxLength) {\n                        return objMixin.get(\"_objStringsService\").getTokenString(\n                            \"validationMaxLength\",\n                            objMixin.get(\"sFieldName\"),\n                            iMaxLength\n                        );\n                    }\n                }\n            );\n        } else if (objMixin.get(\"sInputType\") === \"tag\") {\n            objMixin.get(\"arrValidation\").pushObject(\n                function() {\n                    if (a24Core.isEmpty(objMixin.get(\"mValue\"))) {\n                        return;\n                    }\n                    for (var i = 0; i < objMixin.get(\"mValue\").length; i++) {\n                        if (\n                            !a24Core.isEmpty(objMixin.get(\"mValue.\" + i)[objMixin.get(\"sValueKey\")]) &&\n                            objMixin.get(\"mValue.\" + i)[objMixin.get(\"sValueKey\")].trim().length > iMaxLength\n                        ) {\n                            return objMixin.get(\"_objStringsService\").getTokenString(\n                                \"validationMaxLengthMulti\",\n                                objMixin.get(\"sFieldName\"),\n                                iMaxLength\n                            );\n                        }\n                    }\n                }\n            );\n        } else if (objMixin.get(\"sInputType\") === \"week\") {\n            objMixin.get(\"arrValidation\").pushObject(\n                function() {\n                    if (a24Core.isEmpty(objMixin.get(\"mValue\"))) {\n                        return;\n                    }\n                    if (objMixin.get(\"mValue\").length > iMaxLength) {\n                        //Yes validationMaxFileSize string works here, those keys should have been more generic\n                        return objMixin.get(\"_objStringsService\").getTokenString(\n                            \"validationMaxFileSize\",\n                            objMixin.get(\"sFieldName\"),\n                            iMaxLength\n                        );\n                    }\n                }\n            );\n        }\n    },\n    addMinLength: function(objMixin, iMinLength) {\n        if (\n            objMixin.get(\"sInputType\") === \"text\" ||\n            objMixin.get(\"sInputType\") === \"text-area\" ||\n            objMixin.get(\"sInputType\") === \"tel\"\n        ) {\n            objMixin.get(\"arrValidation\").pushObject(\n                function() {\n                    if (!a24Core.isEmpty(objMixin.get(\"mValue\")) && objMixin.get(\"mValue\").trim().length < iMinLength) {\n                        return objMixin.get(\"_objStringsService\").getTokenString(\n                            \"validationMinLength\",\n                            objMixin.get(\"sFieldName\"),\n                            iMinLength\n                        );\n                    }\n                }\n            );\n        } else if (objMixin.get(\"sInputType\") === \"password\") {\n            objMixin.get(\"arrValidation\").pushObject(\n                function() {\n                    //passwords can not be trimmed thus custom empty checks\n                    if (objMixin.get(\"mValue\").length > 0 && objMixin.get(\"mValue\").length < iMinLength) {\n                        return objMixin.get(\"_objStringsService\").getTokenString(\n                            \"validationMinLength\",\n                            objMixin.get(\"sFieldName\"),\n                            iMinLength\n                        );\n                    }\n                }\n            );\n        } else if (objMixin.get(\"sInputType\") === \"tag\") {\n            objMixin.get(\"arrValidation\").pushObject(\n                function() {\n                    if (a24Core.isEmpty(objMixin.get(\"mValue\"))) {\n                        return;\n                    }\n                    for (var i = 0; i < objMixin.get(\"mValue\").length; i++) {\n                        if (\n                            !a24Core.isEmpty(objMixin.get(\"mValue.\" + i)[objMixin.get(\"sValueKey\")]) &&\n                            objMixin.get(\"mValue.\" + i)[objMixin.get(\"sValueKey\")].trim().length < iMinLength\n                        ) {\n                            return objMixin.get(\"_objStringsService\").getTokenString(\n                                \"validationMinLengthMulti\",\n                                objMixin.get(\"sFieldName\"),\n                                iMinLength\n                            );\n                        }\n                    }\n                }\n            );\n        } else if (objMixin.get(\"sInputType\") === \"week\") {\n            objMixin.get(\"arrValidation\").pushObject(\n                function() {\n                    if (a24Core.isEmpty(objMixin.get(\"mValue\"))) {\n                        return;\n                    }\n                    if (objMixin.get(\"mValue\").length < iMinLength) {\n                        //Yes validationMinFileSize string works here, those keys should have been more generic\n                        return objMixin.get(\"_objStringsService\").getTokenString(\n                            \"validationMinFileSize\",\n                            objMixin.get(\"sFieldName\"),\n                            iMinLength\n                        );\n                    }\n                }\n            );\n        }\n    },\n    addExtraRequired: function(/*objMixin*/) {\n        // This function can be overridden if any other extra types are added for the required validation\n    },\n    addAllowedMimeTypes: function(objMixin, arrMimeTypes, arrPrettyMimeTypes) {\n        if (objMixin.get(\"sInputType\") === \"file\") {\n            objMixin.get(\"arrValidation\").pushObject(\n                function() {\n                    var objFile = objMixin.get(\"mValue\");\n                    var bFound = false;\n                    if (a24Core.isEmpty(objFile)) {\n                        return;\n                    }\n\n                    var sMimeTypes = \"\";\n\n                    if (!a24Core.isEmpty(arrPrettyMimeTypes)) {\n                        sMimeTypes = arrPrettyMimeTypes.join(\", \");\n                    } else {\n                        sMimeTypes = arrMimeTypes.join(\", \");\n                    }\n\n                    for (var i = 0; i < arrMimeTypes.length; i++) {\n                        if (!a24Core.isEmpty(objFile.type)) {\n                            if (\n                                arrMimeTypes[i] === objFile.type ||\n                                arrMimeTypes[i] === \"*\"\n                            ) {\n                                bFound = true;\n                            }\n                        } else {\n                            return objMixin.get(\"_objStringsService\").getTokenString(\n                                \"validationFileAllowedAllMimeTypes\",\n                                objMixin.get(\"sFieldName\")\n                            );\n                        }\n                    }\n\n                    if (!bFound) {\n                        return objMixin.get(\"_objStringsService\").getTokenString(\n                            \"validationFileAllowedMimeTypes\",\n                            objMixin.get(\"sFieldName\"),\n                            sMimeTypes\n                        );\n                    }\n                }\n            );\n        }\n    },\n    // Max file size in MB\n    addMaxFileSize: function(objMixin, iMaxFileSize) {\n        if (objMixin.get(\"sInputType\") === \"file\") {\n            objMixin.get(\"arrValidation\").pushObject(\n                function() {\n                    var objFile = objMixin.get(\"mValue\");\n                    if (a24Core.isEmpty(objFile)) {\n                        return;\n                    }\n                    // this is to convert to MB\n                    var iFileSize = objFile.size / 1024 / 1024;\n                    if (iFileSize > iMaxFileSize) {\n                        if (iMaxFileSize < 1) {\n                            var iMaxFileSizeInKB = iMaxFileSize * 1024;\n                            return objMixin.get(\"_objStringsService\").getTokenString(\n                                \"validationMaxFileSize\",\n                                objMixin.get(\"sFieldName\"),\n                                iMaxFileSizeInKB + \"KB\"\n                            );\n                        } else {\n                            return objMixin.get(\"_objStringsService\").getTokenString(\n                                \"validationMaxFileSize\",\n                                objMixin.get(\"sFieldName\"),\n                                iMaxFileSize + \"MB\"\n                            );\n                        }\n                    }\n                }\n            );\n        }\n    },\n    // Min file size in MB\n    addMinFileSize: function(objMixin, iMinFileSize) {\n        if (objMixin.get(\"sInputType\") === \"file\") {\n            objMixin.get(\"arrValidation\").pushObject(\n                function() {\n                    var objFile = objMixin.get(\"mValue\");\n                    if (a24Core.isEmpty(objFile)) {\n                        return;\n                    }\n                    // this is to convert to MB\n                    var iFileSize = objFile.size / 1024 / 1024;\n                    if (iFileSize < iMinFileSize) {\n                        if (iMinFileSize < 1) {\n                            var iMinFileSizeInKB = iMinFileSize * 1024;\n                            return objMixin.get(\"_objStringsService\").getTokenString(\n                                \"validationMinFileSize\",\n                                objMixin.get(\"sFieldName\"),\n                                iMinFileSizeInKB + \"KB\"\n                            );\n                        } else {\n                            return objMixin.get(\"_objStringsService\").getTokenString(\n                                \"validationMinFileSize\",\n                                objMixin.get(\"sFieldName\"),\n                                iMinFileSize + \"MB\"\n                            );\n                        }\n                    }\n                }\n            );\n        }\n    },\n    addRequired: function(objMixin, bRequired) {\n        if (bRequired) {\n            if (a24Core.isEmpty(objMixin.get(\"funcValidationRequired\"))) {\n                var funcValidation = this.addExtraRequired(objMixin);\n                if (a24Core.isEmpty(funcValidation)) {\n                    if (\n                        objMixin.get(\"sInputType\") === \"text\" ||\n                        objMixin.get(\"sInputType\") === \"text-area\" ||\n                        objMixin.get(\"sInputType\") === \"tag\" ||\n                        objMixin.get(\"sInputType\") === \"dropdown-single\" ||\n                        objMixin.get(\"sInputType\") === \"dropdown-multi\" ||\n                        objMixin.get(\"sInputType\") === \"radio\" ||\n                        objMixin.get(\"sInputType\") === \"date\" ||\n                        objMixin.get(\"sInputType\") === \"html\" ||\n                        objMixin.get(\"sInputType\") === \"time\" ||\n                        objMixin.get(\"sInputType\") === \"file\" ||\n                        objMixin.get(\"sInputType\") === \"tel\" ||\n                        objMixin.get(\"sInputType\") === \"email\" ||\n                        objMixin.get(\"sInputType\") === \"number\" ||\n                        objMixin.get(\"sInputType\") === \"week\"\n                    ) {\n                        funcValidation = function() {\n                            if (a24Core.isEmpty(objMixin.get(\"mValue\"))) {\n                                return objMixin.get(\"_objStringsService\").getTokenString(\n                                    \"validationRequired\",\n                                    objMixin.get(\"sFieldName\")\n                                );\n                            }\n                        };\n                    } else if (objMixin.get(\"sInputType\") === \"password\") {\n                        funcValidation = function() {\n                            //passwords can not be trimmed thus custom empty checks\n                            if (objMixin.get(\"mValue\") === \"\" || objMixin.get(\"mValue\") === null) {\n                                return objMixin.get(\"_objStringsService\").getTokenString(\n                                    \"validationRequired\",\n                                    objMixin.get(\"sFieldName\")\n                                );\n                            }\n                        };\n                    } else if (\n                        objMixin.get(\"sInputType\") === \"suggest\" ||\n                        objMixin.get(\"sInputType\") === \"address-suggest\"\n                    ) {\n                        funcValidation = function() {\n                            if (a24Core.isEmpty(objMixin.get(\"mValue\"))) {\n                                return objMixin.get(\"_objStringsService\").getTokenString(\n                                    \"validationSuggestionRequired\",\n                                    objMixin.get(\"sFieldName\")\n                                );\n                            }\n                        };\n                    } else if (objMixin.get(\"sInputType\") === \"checkbox\") {\n                        funcValidation = function() {\n                            if (\n                                a24Core.isEmpty(objMixin.get(\"mValue\")) ||\n                                a24Core.isEmpty(objMixin.get(\"mValue.bValue\")) ||\n                                !objMixin.get(\"mValue.bValue\")\n                            ) {\n                                return objMixin.get(\"_objStringsService\").getTokenString(\n                                    \"validationRequired\",\n                                    objMixin.get(\"sFieldName\")\n                                );\n                            }\n                        };\n                    }\n                }\n\n                if (!a24Core.isEmpty(funcValidation)) {\n                    objMixin.get(\"arrValidation\").pushObject(\n                        funcValidation\n                    );\n                    objMixin.set(\"funcValidationRequired\", funcValidation);\n                }\n            }\n        } else {\n            if (!a24Core.isEmpty(objMixin.get(\"funcValidationRequired\"))) {\n                objMixin.get(\"arrValidation\").removeObject(\n                    objMixin.get(\"funcValidationRequired\")\n                );\n                objMixin.set(\"funcValidationRequired\", null);\n            }\n        }\n\n    },\n    addAgeMinMax: function(objMixin, iMinAge, iMaxAge, sTimeZone, sInputDateFormat) {\n        if (\n            objMixin.get(\"sInputType\") === \"date\"\n        ) {\n            objMixin.get(\"arrValidation\").pushObject(function() {\n                var objCurrentDate = a24DateManager.createDate(sTimeZone);\n                objCurrentDate.setTimeToStartOfDay();\n\n                var objDateOfBirth = a24DateManager.createDate(sTimeZone);\n                objDateOfBirth.setDateFromBrowser(objMixin.get(\"mValue\"), sInputDateFormat);\n\n                var iDifferenceInYears = objCurrentDate.difference(objDateOfBirth, a24Constants.MOMENT_TIME_YEARS);\n\n                if (iDifferenceInYears < iMinAge) {\n                    return objMixin.get(\"_objStringsService\").getTokenString(\n                        \"validationDateOfBirthTooYoung\",\n                        objMixin.get(\"sFieldName\"),\n                        iMinAge.toString()\n                    );\n                }\n                if (iDifferenceInYears > iMaxAge) {\n                    return objMixin.get(\"_objStringsService\").getTokenString(\n                        \"validationDateOfBirthTooOld\",\n                        objMixin.get(\"sFieldName\"),\n                        iMaxAge.toString()\n                    );\n                }\n            });\n        }\n    },\n    addWholeNumber: function(objMixin) {\n        if (objMixin.get(\"sInputType\") === \"text\") {\n            objMixin.get(\"arrValidation\").pushObject(\n                function() {\n                    if (\n                        !a24Core.isEmpty(objMixin.get(\"mValue\")) &&\n                        (\n                            !$.isNumeric(objMixin.get(\"mValue\")) ||\n                            (objMixin.get(\"mValue\") < 0) ||\n                            (objMixin.get(\"mValue\") % 1 !== 0)\n                        )\n                    ) {\n                        return objMixin.get(\"_objStringsService\").getTokenString(\n                            \"validationWholeNumber\",\n                            objMixin.get(\"sFieldName\")\n                        );\n                    }\n                }\n            );\n        }\n    },\n    addPostCode: function(objMixin, sCountryCode) {\n        if (a24Core.isEmpty(sCountryCode)) {\n            sCountryCode = \"GB\";\n        }\n        if (objMixin.get(\"sInputType\") === \"text\") {\n            objMixin.get(\"arrValidation\").pushObject(\n                function() {\n                    if (!a24Core.isEmpty(objMixin.get(\"mValue\"))) {\n                        var mResult = objMixin.get(\"_objPostCodeValidatorService\").validatePostCode(objMixin.get(\"mValue\"), sCountryCode.toLowerCase());\n                        if (mResult !== true) {\n                            return mResult;\n                        }\n                    }\n                }\n            );\n        }\n    }\n};\n\n//Only add the extended values to the a24Validation if they do not exist on it already\nObject.keys(a24ValidationExtend).forEach(function(sKey) {\n    if (!a24Validation.hasOwnProperty(sKey)) {\n        a24Validation[sKey] = a24ValidationExtend[sKey];\n    }\n});\n","var a24ComponentEvent = {\n    //Don't add anything in here, this is purely to create the object if the project using\n    //this addon does not create and import one.\n    //In ember the parent vendor file with the same name and location will take preference over a file with the same\n    //name and directory in addons(one in addon will not be imported, only the parent one),\n    //If the parent does not have that file but 2 addons have that file then the last addon to be added in the\n    //package.json in the parent, will take preference.\n};\n","var a24ComponentEventExtend = {\n    onPopupConfirmationModalOpen: function() {\n        // This is left blank for overriding purpose\n    },\n    onPopupConfirmationModalClose: function() {\n        // This is left blank for overriding purpose\n    },\n    onPopupResponsiveModalOpen: function() {\n        // This is left blank for overriding purpose\n    },\n    onPopupResponsiveModalClose: function() {\n        // This is left blank for overriding purpose\n    }\n};\n\n//Only add the extended values to the a24ComponentEvent if they do not exist on it already\nObject.keys(a24ComponentEventExtend).forEach(function(sKey) {\n    if (!a24ComponentEvent.hasOwnProperty(sKey)) {\n        a24ComponentEvent[sKey] = a24ComponentEventExtend[sKey];\n    }\n});\n","var a24ConstantsCalender = {\n    //======== A24 ADDON OVERRIDES START ========\n\n    DATE_FORMAT_REST_FORMAT_MONTH_YEAR_ONLY: \"YYYY-MM\",\n    DATE_FORMAT_REST_FORMAT_DATE_ONLY: \"YYYY-MM-DD\",\n    DATE_FORMAT_REST_FORMAT_WITHOUT_TZ: \"YYYY-MM-DDTHH:mm:ss.SSS\",\n    DATE_FORMAT_REST_FORMAT: \"YYYY-MM-DDTHH:mm:ss.SSSZ\"\n\n    //======== A24 ADDON OVERRIDES END   ========\n};\n\nif (typeof a24Constants === \"undefined\") {\n    var a24Constants = {};\n}\n\nObject.keys(a24ConstantsCalender).forEach(function(sKey) {\n    a24Constants[sKey] = a24ConstantsCalender[sKey];\n});\n","var a24EmberSSCore = {\n    isUrlDefaultAvatar: function(objConstService, sUrl) {\n        return (\n            sUrl === objConstService.AGENCY_DEFAULT_AVATAR ||\n            sUrl === objConstService.CANDIDATE_DEFAULT_AVATAR ||\n            sUrl === objConstService.ORGANISATION_DEFAULT_AVATAR ||\n            sUrl === objConstService.SYSTEM_ADMIN_DEFAULT_AVATAR ||\n            sUrl === objConstService.AGENCY_GROUP_DEFAULT_AVATAR\n        );\n    },\n    getUserContextAvatarUrl: function(sTriageBaseUrl, objConstService, sAvatarUrl) {\n\n        // Reset the avatar if it is one of the default\n        if (a24.isUrlDefaultAvatar(objConstService, sAvatarUrl)) {\n            //Reset the icon if it is a default one\n            sAvatarUrl = null;\n        }\n\n        if (\n            !a24Core.isEmpty(sAvatarUrl) &&\n            sAvatarUrl.substr(0, \"http\".length) !== \"http\"\n        ) {\n            if (sAvatarUrl[0] === \"/\") {\n                return sTriageBaseUrl + sAvatarUrl;\n            } else {\n                return sTriageBaseUrl + \"/\" + sAvatarUrl;\n            }\n        } else {\n            return sAvatarUrl;\n        }\n    }\n};\n\nif (typeof a24 === \"undefined\") {\n    var a24 = {};\n}\n\nObject.keys(a24EmberSSCore).forEach(function(sKey) {\n    a24[sKey] = a24EmberSSCore[sKey];\n});\n","/*\n * Report browser settings like whatsmybrowser.org\n * Inspired by\n * http://stackoverflow.com/questions/9514179/how-to-find-the-operating-system-version-using-javascript\n */\n(function () {\n    \"use strict\";\n\n    var extractDataFromClient, definePropertySupported;\n\n    extractDataFromClient = function (userAgent) {\n        var report, match, uuid;\n\n        userAgent = userAgent || navigator.userAgent;\n\n        // initialize object to store results\n        report = {\n            \"browser\": {\n                \"name\": null,\n                \"version\": null\n            },\n            \"cookies\": null,\n            \"flash\": {\n                \"version\": null\n            },\n            \"ip\": null,\n            \"java\": {\n                \"version\": null\n            },\n            \"os\": {\n                \"name\": null,\n                \"version\": null\n            },\n            \"screen\": {\n                \"colors\": null,\n                \"dppx\": null,\n                \"height\": null,\n                \"width\": null\n            },\n            \"scripts\": true,\n            \"userAgent\": userAgent,\n            \"viewport\": {\n                \"height\": null,\n                \"layout\": {\n                    \"height\": null,\n                    \"width\": null\n                },\n                \"width\": null,\n                \"zoom\": null\n            },\n            \"websockets\": null\n        };\n\n\n        // extract browser name from user agent\n        if (userAgent.indexOf(\"Trident\") >= 0 || userAgent.indexOf(\"MSIE\") >= 0) {\n            if (userAgent.indexOf(\"Mobile\") >= 0) {\n                report.browser.name = \"IE Mobile\";\n            } else {\n                report.browser.name = \"Internet Explorer\";\n            }\n        }\n\n        if (userAgent.indexOf(\"Firefox\") >= 0 && userAgent.indexOf(\"Seamonkey\") === -1) {\n            if (userAgent.indexOf(\"Android\") >= 0) {\n                report.browser.name = \"Firefox for Android\";\n            } else {\n                report.browser.name = \"Firefox\";\n            }\n        }\n\n        if (userAgent.indexOf(\"Safari\") >= 0 && userAgent.indexOf(\"Chrome\") === -1 && userAgent.indexOf(\"Chromium\") === -1 && userAgent.indexOf(\"Android\") === -1) {\n            if (userAgent.indexOf(\"CriOS\") >= 0) {\n                report.browser.name = \"Chrome for iOS\";\n            } else if (userAgent.indexOf(\"FxiOS\") >= 0) {\n                report.browser.name = \"Firefox for iOS\";\n            } else {\n                report.browser.name = \"Safari\";\n            }\n        }\n\n        if (userAgent.indexOf(\"Chrome\") >= 0) {\n            if (userAgent.match(/\\bChrome\\/[.0-9]* Mobile\\b/)) {\n                if (userAgent.match(/\\bVersion\\/\\d+\\.\\d+\\b/) || userAgent.match(/\\bwv\\b/)) {\n                    report.browser.name = \"WebView on Android\";\n                } else {\n                    report.browser.name = \"Chrome for Android\";\n                }\n            } else {\n                report.browser.name = \"Chrome\";\n            }\n        }\n\n        if (userAgent.indexOf(\"Android\") >= 0 && userAgent.indexOf(\"Chrome\") === -1 && userAgent.indexOf(\"Chromium\") === -1 && userAgent.indexOf(\"Trident\") === -1 && userAgent.indexOf(\"Firefox\") === -1) {\n            report.browser.name = \"Android Browser\";\n        }\n\n        if (userAgent.indexOf(\"Edge\") >= 0) {\n            report.browser.name = \"Edge\";\n        }\n\n        if (userAgent.indexOf(\"UCBrowser\") >= 0) {\n            report.browser.name = \"UC Browser for Android\";\n        }\n\n        if (userAgent.indexOf(\"SamsungBrowser\") >= 0) {\n            report.browser.name = \"Samsung Internet\";\n        }\n\n        if (userAgent.indexOf(\"OPR\") >= 0 || userAgent.indexOf(\"Opera\") >= 0) {\n            if (userAgent.indexOf(\"Opera Mini\") >= 0) {\n                report.browser.name = \"Opera Mini\";\n            } else if (userAgent.indexOf(\"Opera Mobi\") >= 0 || userAgent.indexOf(\"Opera Tablet\") >= 0 || userAgent.indexOf(\"Mobile\") >= 0) {\n                report.browser.name = \"Opera Mobile\";\n            } else {\n                report.browser.name = \"Opera\";\n            }\n        }\n\n        if (userAgent.indexOf(\"BB10\") >= 0 || userAgent.indexOf(\"PlayBook\") >= 0 || userAgent.indexOf(\"BlackBerry\") >= 0) {\n            report.browser.name = \"BlackBerry\";\n        }\n\n        if (userAgent.indexOf(\"MQQBrowser\") >= 0) {\n            report.browser.name = \"QQ Browser\";\n        }\n\n\n        // extract browser version number from user agent\n        match = null;\n\n        switch (report.browser.name) {\n        case \"Chrome\":\n        case \"Chrome for Android\":\n        case \"WebView on Android\":\n            match = userAgent.match(/Chrome\\/((\\d+\\.)+\\d+)/);\n            break;\n        case \"Firefox\":\n        case \"Firefox for Android\":\n            match = userAgent.match(/Firefox\\/((\\d+\\.)+\\d+)/);\n            break;\n        case \"Firefox for iOS\":\n            match = userAgent.match(/FxiOS\\/((\\d+\\.)+\\d+)/);\n            break;\n        case \"Edge\":\n        case \"Internet Explorer\":\n        case \"IE Mobile\":\n\n            if (userAgent.indexOf(\"Edge\") >= 0) {\n                match = userAgent.match(/Edge\\/((\\d+\\.)+\\d+)/);\n            } else if (userAgent.indexOf(\"rv:11\") >= 0) {\n                match = userAgent.match(/rv:((\\d+\\.)+\\d+)/);\n            } else if (userAgent.indexOf(\"MSIE\") >= 0) {\n                match = userAgent.match(/MSIE ((\\d+\\.)+\\d+)/);\n            }\n\n            break;\n        case \"Safari\":\n            match = userAgent.match(/Version\\/((\\d+\\.)+\\d+)/);\n            break;\n        case \"Android Browser\":\n            match = userAgent.match(/Android ((\\d+\\.)+\\d+)/);\n            break;\n        case \"UC Browser for Android\":\n            match = userAgent.match(/UCBrowser\\/((\\d+\\.)+\\d+)/);\n            break;\n        case \"Samsung Internet\":\n            match = userAgent.match(/SamsungBrowser\\/((\\d+\\.)+\\d+)/);\n            break;\n        case \"Opera Mini\":\n            match = userAgent.match(/Opera Mini\\/((\\d+\\.)+\\d+)/);\n            break;\n        case \"Opera\":\n            if (userAgent.match(/OPR/)) {\n                match = userAgent.match(/OPR\\/((\\d+\\.)+\\d+)/);\n            } else if (userAgent.match(/Version/)) {\n                match = userAgent.match(/Version\\/((\\d+\\.)+\\d+)/);\n            } else {\n                match = userAgent.match(/Opera\\/((\\d+\\.)+\\d+)/);\n            }\n            break;\n        case \"BlackBerry\":\n            match = userAgent.match(/Version\\/((\\d+\\.)+\\d+)/);\n            break;\n        case \"QQ Browser\":\n            match = userAgent.match(/MQQBrowser\\/((\\d+\\.)+\\d+)/);\n            break;\n        default:\n            match = userAgent.match(/\\/((\\d+\\.)+\\d+)$/);\n            break;\n        }\n\n        if (match && match[1]) {\n            report.browser.version = match[1];\n        }\n\n        // pull in browser window size from the visual viewport\n        report.viewport.width = window.innerWidth || document.documentElement.clientWidth;\n        report.viewport.height = window.innerHeight || document.documentElement.clientHeight;\n\n\n        /*\n         * test if Object.defineProperty function is fully supported\n         */\n        try {\n            Object.defineProperty({}, \"x\", {});\n            definePropertySupported = true;\n        } catch (e) {\n            definePropertySupported = false;\n        }\n\n\n        /*\n         * helper function to safely log warning messages\n         */\n        /* eslint-disable no-console */\n        function warning(msg) {\n            if (window.console) {\n                if (console.warn) {\n                    console.warn(msg);\n                } else {\n                    console.log(msg);\n                }\n            }\n        }\n        /* eslint-enable no-console */\n\n        // deprecate report.browser.size\n        if (definePropertySupported) {\n            Object.defineProperty(report.browser, \"size\", {\n                get: function () {\n                    warning(\"browser.size is deprecated; use viewport.width and viewport.height\");\n                    return report.viewport.width + \" x \" + report.viewport.height;\n                }\n            });\n        }\n\n        // pull in raw values for layout viewport\n        report.viewport.layout.width = document.documentElement.clientWidth;\n        report.viewport.layout.height = document.documentElement.clientHeight;\n\n        // define viewport zoom property\n        report.viewport.zoom = report.viewport.layout.width / report.viewport.width;\n\n\n        // are cookies enabled\n        // can't trust this value (Microsoft Edge lies)\n        // report.cookies = !!navigator.cookieEnabled;\n\n        // truly check if cookies are enabled\n        // generate UUID for cookie name\n        uuid = \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\";\n        uuid = uuid.replace(/[xy]/g, function (c) {\n            var r, v;\n\n            r = Math.random() * 16 | 0;\n            v = c === \"x\"\n                ? r\n                : (r & 0x3 | 0x8);\n\n            return v.toString(16);\n        });\n        document.cookie = uuid;\n\n        if (document.cookie.indexOf(uuid) >= 0) {\n            report.cookies = true;\n        } else {\n            report.cookies = false;\n        }\n        // delete temporary cookie\n        document.cookie = uuid + \"=; expires=Thu, 01 Jan 1970 00:00:01 GMT;\";\n\n\n        // check plugins\n        (function (plugins) {\n            var i, l, plugin;\n\n            if (plugins) {\n                l = plugins.length;\n\n                for (i = 0; i < l; i += 1) {\n                    plugin = plugins.item(i);\n\n                    // what version of Adobe Flash\n                    if (plugin.name.indexOf(\"Flash\") >= 0) {\n                        match = plugin.description.match(/\\b((\\d+\\.)+\\d+)\\b/);\n                        if (match && match[1]) {\n                            report.flash.version = match[1];\n                        }\n                    }\n\n                    // what version of Java\n                    if (plugin.name.indexOf(\"Java\") >= 0) {\n                        match = plugin.description.match(/\\b((\\d+\\.)+\\d+)\\b/);\n                        if (match && match[1]) {\n                            report.java.version = match[1];\n                        }\n                    }\n                }\n            }\n        }(navigator.plugins));\n\n\n        // extract operating system name from user agent\n        if (userAgent.indexOf(\"Windows\") >= 0) {\n            if (userAgent.indexOf(\"Windows Phone\") >= 0) {\n                report.os.name = \"Windows Phone\";\n            } else {\n                report.os.name = \"Windows\";\n            }\n        }\n\n        if (userAgent.indexOf(\"OS X\") >= 0 && userAgent.indexOf(\"Android\") === -1) {\n            report.os.name = \"OS X\";\n        }\n\n        if (userAgent.indexOf(\"Linux\") >= 0) {\n            report.os.name = \"Linux\";\n        }\n\n        if (userAgent.indexOf(\"like Mac OS X\") >= 0) {\n            report.os.name = \"iOS\";\n        }\n\n        if ((userAgent.indexOf(\"Android\") >= 0 || userAgent.indexOf(\"Adr\") >= 0) && userAgent.indexOf(\"Windows Phone\") === -1) {\n            report.os.name = \"Android\";\n        }\n\n        if (userAgent.indexOf(\"BB10\") >= 0) {\n            report.os.name = \"BlackBerry\";\n        }\n\n        if (userAgent.indexOf(\"RIM Tablet OS\") >= 0) {\n            report.os.name = \"BlackBerry Tablet OS\";\n        }\n\n        if (userAgent.indexOf(\"BlackBerry\") >= 0) {\n            report.os.name = \"BlackBerryOS\";\n        }\n\n        if (userAgent.indexOf(\"CrOS\") >= 0) {\n            report.os.name = \"Chrome OS\";\n        }\n\n        if (userAgent.indexOf(\"KAIOS\") >= 0) {\n            report.os.name = \"KaiOS\";\n        }\n\n        // extract operating system version from user agent\n        match = null;\n\n        switch (report.os.name) {\n        case \"Windows\":\n        case \"Windows Phone\":\n            if (userAgent.indexOf(\"Win16\") >= 0) {\n                report.os.version = \"3.1.1\";\n            } else if (userAgent.indexOf(\"Windows CE\") >= 0) {\n                report.os.version = \"CE\";\n            } else if (userAgent.indexOf(\"Windows 95\") >= 0) {\n                report.os.version = \"95\";\n            } else if (userAgent.indexOf(\"Windows 98\") >= 0) {\n                if (userAgent.indexOf(\"Windows 98; Win 9x 4.90\") >= 0) {\n                    report.os.version = \"Millennium Edition\";\n                } else {\n                    report.os.version = \"98\";\n                }\n            } else {\n                match = userAgent.match(/Win(?:dows)?(?: Phone)?[ _]?(?:(?:NT|9x) )?((?:(\\d+\\.)*\\d+)|XP|ME|CE)\\b/);\n\n                if (match && match[1]) {\n                    switch (match[1]) {\n                    case \"6.4\":\n                        // some versions of Firefox mistakenly used 6.4\n                        match[1] = \"10.0\";\n                        break;\n                    case \"6.3\":\n                        match[1] = \"8.1\";\n                        break;\n                    case \"6.2\":\n                        match[1] = \"8\";\n                        break;\n                    case \"6.1\":\n                        match[1] = \"7\";\n                        break;\n                    case \"6.0\":\n                        match[1] = \"Vista\";\n                        break;\n                    case \"5.2\":\n                        match[1] = \"Server 2003\";\n                        break;\n                    case \"5.1\":\n                        match[1] = \"XP\";\n                        break;\n                    case \"5.01\":\n                        match[1] = \"2000 SP1\";\n                        break;\n                    case \"5.0\":\n                        match[1] = \"2000\";\n                        break;\n                    case \"4.0\":\n                        match[1] = \"4.0\";\n                        break;\n                    default:\n                        // nothing\n                        break;\n                    }\n                }\n            }\n            break;\n        case \"OS X\":\n            match = userAgent.match(/OS X ((\\d+[._])+\\d+)\\b/);\n            break;\n        case \"Linux\":\n            // linux user agent strings do not usually include the version\n            report.os.version = null;\n            break;\n        case \"iOS\":\n            match = userAgent.match(/OS ((\\d+[._])+\\d+) like Mac OS X/);\n            break;\n        case \"Android\":\n            match = userAgent.match(/(?:Android|Adr) (\\d+([._]\\d+)*)/);\n            break;\n        case \"BlackBerry\":\n        case \"BlackBerryOS\":\n            match = userAgent.match(/Version\\/((\\d+\\.)+\\d+)/);\n            break;\n        case \"BlackBerry Tablet OS\":\n            match = userAgent.match(/RIM Tablet OS ((\\d+\\.)+\\d+)/);\n            break;\n        case \"Chrome OS\":\n            report.os.version = report.browser.version;\n            break;\n        case \"KaiOS\":\n            match = userAgent.match(/KAIOS\\/(\\d+(\\.\\d+)*)/);\n            break;\n        default:\n            // no good default behavior\n            report.os.version = null;\n            break;\n        }\n\n        if (match && match[1]) {\n\n            // replace underscores in version number with periods\n            match[1] = match[1].replace(/_/g, \".\");\n            report.os.version = match[1];\n        }\n\n        // handle Mac OS X / OS X / macOS naming conventions\n        if (report.os.name === \"OS X\" && report.os.version) {\n\n            var versions = report.os.version.split(\".\");\n            if (versions.length >= 2) {\n                var minorVersion = parseInt(versions[1], 10);\n                if (minorVersion <= 7) {\n                    report.os.name = \"Mac OS X\";\n                } else if (minorVersion >= 12) {\n                    report.os.name = \"macOS\";\n                } else {\n                    report.os.name = \"OS X\";\n                }\n            }\n\n        }\n\n\n        // pull in screen info from W3C standard properties\n        report.screen.width = screen.width;\n        report.screen.height = screen.height;\n        report.screen.colors = screen.colorDepth;\n        if (window.devicePixelRatio && !isNaN(window.devicePixelRatio)) {\n            report.screen.dppx = window.devicePixelRatio;\n        } else {\n            report.screen.dppx = 1;\n        }\n\n        // deprecate report.screen.size\n        if (definePropertySupported) {\n            Object.defineProperty(report.screen, \"size\", {\n                get: function () {\n                    warning(\"screen.size is deprecated; use screen.width and screen.height\");\n                    return report.screen.width + \" x \" + report.screen.height;\n                }\n            });\n        }\n\n        // deprecate report.screen.resolution\n        if (definePropertySupported) {\n            Object.defineProperty(report.screen, \"resolution\", {\n                get: function () {\n                    warning(\"screen.resolution is deprecated; multiply screen.width and screen.height by screen.dppx\");\n                    return (report.screen.dppx * report.screen.width) + \" x \" + (report.screen.dppx * report.screen.height);\n                }\n            });\n        }\n\n\n        // are web sockets supported\n        report.websockets = !!window.WebSocket;\n\n\n        // preferred language(s) for displaying pages\n        report.lang = navigator.languages || navigator.language;\n\n\n        // local date, time, and time zone\n        report.timestamp = (new Date()).toString();\n\n\n        return report;\n    };\n\n\n    /*\n     * asynchronous version includes the remote client IP address\n     * uses ipify.org API\n     */\n    window.browserReport = window.browserReport || function (callback) {\n        var report, newScriptTag, existingScriptTag;\n\n        report = extractDataFromClient();\n\n        // use ipify.org to get the remote client ip address\n        // define function to handle data from ipify.org\n        window.getip = window.getip || function (data) {\n            report.ip = data.ip;\n            callback(null, report);\n        };\n\n        // inject script tag get JSONP response from ipify.org\n        newScriptTag = document.createElement(\"script\");\n        newScriptTag.src = \"https://api.ipify.org?format=jsonp&callback=getip\";\n        existingScriptTag = document.getElementsByTagName(\"script\")[0];\n        existingScriptTag.parentNode.insertBefore(newScriptTag, existingScriptTag);\n\n        // report on errors\n        newScriptTag.onerror = callback;\n\n    };\n\n\n    /*\n     * synchronous version returns report immediately\n     * but does not include the remote client IP address\n     */\n    window.browserReportSync = window.browserReportSync || function (userAgent) {\n        return extractDataFromClient(userAgent);\n    };\n}());\n","var a24ConstantsExtendSSEL = {\n    // VERY SPECIFIC USE CASE\n    DATE_FORMAT_ISO_NO_MILLI_FORMAT: \"YYYY-MM-DDTHH:mm:ssZ\",\n\n    //Date formats\n    DATE_FORMAT_REST_FORMAT_MONTH_YEAR_ONLY: \"YYYY-MM\",\n    DATE_FORMAT_REST_FORMAT_DATE_ONLY: \"YYYY-MM-DD\",\n    DATE_FORMAT_REST_FORMAT_WITHOUT_TZ: \"YYYY-MM-DDTHH:mm:ss.sss\",\n    DATE_FORMAT_REST_FORMAT: \"YYYY-MM-DDTHH:mm:ss.sssZ\"\n};\n\nif (typeof a24Constants === \"undefined\") {\n    var a24Constants = {};\n}\n\nObject.keys(a24ConstantsExtendSSEL).forEach(function(sKey) {\n    a24Constants[sKey] = a24ConstantsExtendSSEL[sKey];\n});\n","var _objTimeZoneDateExtendSSEL = {\n    getDateAsISOWithoutMiliFormat: function() {\n        return this._getFormattedDate(a24Constants.DATE_FORMAT_ISO_NO_MILLI_FORMAT);\n    }\n};\n\nObject.keys(_objTimeZoneDateExtendSSEL).forEach(function(sKey) {\n    _objTimeZoneDate[sKey] = _objTimeZoneDateExtendSSEL[sKey];\n});\n","var a24ConstantsPolicyLibrary = {\n    //======== A24 ADDON OVERRIDES START ========\n\n    DATE_FORMAT_REST_FORMAT_MONTH_YEAR_ONLY: \"YYYY-MM\",\n    DATE_FORMAT_REST_FORMAT_DATE_ONLY: \"YYYY-MM-DD\",\n    DATE_FORMAT_REST_FORMAT_WITHOUT_TZ: \"YYYY-MM-DDTHH:mm:ss.sss\",\n    DATE_FORMAT_REST_FORMAT: \"YYYY-MM-DDTHH:mm:ss.sssZ\"\n\n    //======== A24 ADDON OVERRIDES END   ========\n};\n\nif (typeof a24Constants === \"undefined\") {\n    var a24Constants = {};\n}\n\nObject.keys(a24ConstantsPolicyLibrary).forEach(function(sKey) {\n    a24Constants[sKey] = a24ConstantsPolicyLibrary[sKey];\n});\n","var a24SSCandidateProfile = {\n    getIconForPhoneNumber: function(sType) {\n        var sIcon = \"\";\n        switch(sType) {\n            case \"home\":\n            case \"work\":\n            case \"additional\":\n                sIcon = \"phone\";\n                break;\n            case \"home_fax\":\n            case \"work_fax\":\n                sIcon = \"print\";\n                break;\n            case \"mobile\":\n                sIcon = \"phone_android\";\n                break;\n        }\n\n        return sIcon;\n    },\n\n    getIconForAddress: function (sType) {\n        var sIcon = \"\";\n        switch (sType) {\n            case \"physical_address\":\n            case \"alternative_address\":\n                sIcon = \"home\";\n                break;\n            case \"postal_address\":\n                sIcon = \"markunread_mailbox\";\n                break;\n        }\n\n        return sIcon;\n    },\n\n    getIconForEmail: function(sType) {\n        var sIcon = \"\";\n        switch(sType) {\n            case \"home\":\n                sIcon = \"person\";\n                break;\n            case \"work\":\n                sIcon = \"work\";\n                break;\n            case \"other\":\n                sIcon = \"email\";\n                break;\n        }\n\n        return sIcon;\n    }\n};\n\nif (typeof a24 === \"undefined\") {\n    var a24 = {};\n}\n\nObject.keys(a24SSCandidateProfile).forEach(function(sKey) {\n    a24[sKey] = a24SSCandidateProfile[sKey];\n});\n","var a24ConstantsSSCandidateProfile = {\n    //======== A24 ADDON OVERRIDES START ========\n\n    DATE_FORMAT_REST_FORMAT_MONTH_YEAR_ONLY: \"YYYY-MM\",\n    DATE_FORMAT_REST_FORMAT_DATE_ONLY: \"YYYY-MM-DD\",\n    DATE_FORMAT_REST_FORMAT_WITHOUT_TZ: \"YYYY-MM-DDTHH:mm:ss\",\n    DATE_FORMAT_REST_FORMAT: \"YYYY-MM-DDTHH:mm:ssZ\"\n\n    //======== A24 ADDON OVERRIDES END   ========\n};\n\nif (typeof a24Constants === \"undefined\") {\n    var a24Constants = {};\n}\n\nObject.keys(a24ConstantsSSCandidateProfile).forEach(function(sKey) {\n    a24Constants[sKey] = a24ConstantsSSCandidateProfile[sKey];\n});\n","(function (factory) {\n    if (typeof exports === 'object') {\n        // Node/CommonJS\n        module.exports = factory();\n    } else if (typeof define === 'function' && define.amd) {\n        // AMD\n        define(factory);\n    } else {\n        // Browser globals (with support for web workers)\n        var glob;\n\n        try {\n            glob = window;\n        } catch (e) {\n            glob = self;\n        }\n\n        glob.SparkMD5 = factory();\n    }\n}(function (undefined) {\n\n    'use strict';\n\n    /*\n     * Fastest md5 implementation around (JKM md5).\n     * Credits: Joseph Myers\n     *\n     * @see http://www.myersdaily.org/joseph/javascript/md5-text.html\n     * @see http://jsperf.com/md5-shootout/7\n     */\n\n    /* this function is much faster,\n      so if possible we use it. Some IEs\n      are the only ones I know of that\n      need the idiotic second function,\n      generated by an if clause.  */\n    var add32 = function (a, b) {\n        return (a + b) & 0xFFFFFFFF;\n    },\n        hex_chr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];\n\n\n    function cmn(q, a, b, x, s, t) {\n        a = add32(add32(a, q), add32(x, t));\n        return add32((a << s) | (a >>> (32 - s)), b);\n    }\n\n    function md5cycle(x, k) {\n        var a = x[0],\n            b = x[1],\n            c = x[2],\n            d = x[3];\n\n        a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n        a  = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n        d  = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n        c  = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n        b  = (b << 22 | b >>> 10) + c | 0;\n        a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n        a  = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n        d  = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n        c  = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n        b  = (b << 22 | b >>> 10) + c | 0;\n        a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n        a  = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n        d  = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[10] - 42063 | 0;\n        c  = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n        b  = (b << 22 | b >>> 10) + c | 0;\n        a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n        a  = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n        d  = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n        c  = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n        b  = (b << 22 | b >>> 10) + c | 0;\n\n        a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n        a  = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n        d  = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n        c  = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n        b  = (b << 20 | b >>> 12) + c | 0;\n        a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n        a  = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n        d  = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n        c  = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n        b  = (b << 20 | b >>> 12) + c | 0;\n        a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n        a  = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n        d  = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n        c  = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n        b  = (b << 20 | b >>> 12) + c | 0;\n        a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n        a  = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n        d  = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n        c  = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n        b  = (b << 20 | b >>> 12) + c | 0;\n\n        a += (b ^ c ^ d) + k[5] - 378558 | 0;\n        a  = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n        d  = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n        c  = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n        b  = (b << 23 | b >>> 9) + c | 0;\n        a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n        a  = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n        d  = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n        c  = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n        b  = (b << 23 | b >>> 9) + c | 0;\n        a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n        a  = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n        d  = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n        c  = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n        b  = (b << 23 | b >>> 9) + c | 0;\n        a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n        a  = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n        d  = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n        c  = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n        b  = (b << 23 | b >>> 9) + c | 0;\n\n        a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n        a  = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n        d  = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n        c  = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n        b  = (b << 21 |b >>> 11) + c | 0;\n        a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n        a  = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n        d  = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n        c  = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n        b  = (b << 21 |b >>> 11) + c | 0;\n        a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n        a  = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n        d  = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n        c  = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n        b  = (b << 21 |b >>> 11) + c | 0;\n        a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n        a  = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n        d  = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n        c  = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n        b  = (b << 21 | b >>> 11) + c | 0;\n\n        x[0] = a + x[0] | 0;\n        x[1] = b + x[1] | 0;\n        x[2] = c + x[2] | 0;\n        x[3] = d + x[3] | 0;\n    }\n\n    function md5blk(s) {\n        var md5blks = [],\n            i; /* Andy King said do it this way. */\n\n        for (i = 0; i < 64; i += 4) {\n            md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n        }\n        return md5blks;\n    }\n\n    function md5blk_array(a) {\n        var md5blks = [],\n            i; /* Andy King said do it this way. */\n\n        for (i = 0; i < 64; i += 4) {\n            md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n        }\n        return md5blks;\n    }\n\n    function md51(s) {\n        var n = s.length,\n            state = [1732584193, -271733879, -1732584194, 271733878],\n            i,\n            length,\n            tail,\n            tmp,\n            lo,\n            hi;\n\n        for (i = 64; i <= n; i += 64) {\n            md5cycle(state, md5blk(s.substring(i - 64, i)));\n        }\n        s = s.substring(i - 64);\n        length = s.length;\n        tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n        for (i = 0; i < length; i += 1) {\n            tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);\n        }\n        tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n        if (i > 55) {\n            md5cycle(state, tail);\n            for (i = 0; i < 16; i += 1) {\n                tail[i] = 0;\n            }\n        }\n\n        // Beware that the final length might not fit in 32 bits so we take care of that\n        tmp = n * 8;\n        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n        lo = parseInt(tmp[2], 16);\n        hi = parseInt(tmp[1], 16) || 0;\n\n        tail[14] = lo;\n        tail[15] = hi;\n\n        md5cycle(state, tail);\n        return state;\n    }\n\n    function md51_array(a) {\n        var n = a.length,\n            state = [1732584193, -271733879, -1732584194, 271733878],\n            i,\n            length,\n            tail,\n            tmp,\n            lo,\n            hi;\n\n        for (i = 64; i <= n; i += 64) {\n            md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n        }\n\n        // Not sure if it is a bug, however IE10 will always produce a sub array of length 1\n        // containing the last element of the parent array if the sub array specified starts\n        // beyond the length of the parent array - weird.\n        // https://connect.microsoft.com/IE/feedback/details/771452/typed-array-subarray-issue\n        a = (i - 64) < n ? a.subarray(i - 64) : new Uint8Array(0);\n\n        length = a.length;\n        tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n        for (i = 0; i < length; i += 1) {\n            tail[i >> 2] |= a[i] << ((i % 4) << 3);\n        }\n\n        tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n        if (i > 55) {\n            md5cycle(state, tail);\n            for (i = 0; i < 16; i += 1) {\n                tail[i] = 0;\n            }\n        }\n\n        // Beware that the final length might not fit in 32 bits so we take care of that\n        tmp = n * 8;\n        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n        lo = parseInt(tmp[2], 16);\n        hi = parseInt(tmp[1], 16) || 0;\n\n        tail[14] = lo;\n        tail[15] = hi;\n\n        md5cycle(state, tail);\n\n        return state;\n    }\n\n    function rhex(n) {\n        var s = '',\n            j;\n        for (j = 0; j < 4; j += 1) {\n            s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F];\n        }\n        return s;\n    }\n\n    function hex(x) {\n        var i;\n        for (i = 0; i < x.length; i += 1) {\n            x[i] = rhex(x[i]);\n        }\n        return x.join('');\n    }\n\n    // In some cases the fast add32 function cannot be used..\n    if (hex(md51('hello')) !== '5d41402abc4b2a76b9719d911017c592') {\n        add32 = function (x, y) {\n            var lsw = (x & 0xFFFF) + (y & 0xFFFF),\n                msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n            return (msw << 16) | (lsw & 0xFFFF);\n        };\n    }\n\n    // ---------------------------------------------------\n\n    /**\n     * ArrayBuffer slice polyfill.\n     *\n     * @see https://github.com/ttaubert/node-arraybuffer-slice\n     */\n\n    if (typeof ArrayBuffer !== 'undefined' && !ArrayBuffer.prototype.slice) {\n        (function () {\n            function clamp(val, length) {\n                val = (val | 0) || 0;\n\n                if (val < 0) {\n                    return Math.max(val + length, 0);\n                }\n\n                return Math.min(val, length);\n            }\n\n            ArrayBuffer.prototype.slice = function (from, to) {\n                var length = this.byteLength,\n                    begin = clamp(from, length),\n                    end = length,\n                    num,\n                    target,\n                    targetArray,\n                    sourceArray;\n\n                if (to !== undefined) {\n                    end = clamp(to, length);\n                }\n\n                if (begin > end) {\n                    return new ArrayBuffer(0);\n                }\n\n                num = end - begin;\n                target = new ArrayBuffer(num);\n                targetArray = new Uint8Array(target);\n\n                sourceArray = new Uint8Array(this, begin, num);\n                targetArray.set(sourceArray);\n\n                return target;\n            };\n        })();\n    }\n\n    // ---------------------------------------------------\n\n    /**\n     * Helpers.\n     */\n\n    function toUtf8(str) {\n        if (/[\\u0080-\\uFFFF]/.test(str)) {\n            str = unescape(encodeURIComponent(str));\n        }\n\n        return str;\n    }\n\n    function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n        var length = str.length,\n           buff = new ArrayBuffer(length),\n           arr = new Uint8Array(buff),\n           i;\n\n        for (i = 0; i < length; i += 1) {\n            arr[i] = str.charCodeAt(i);\n        }\n\n        return returnUInt8Array ? arr : buff;\n    }\n\n    function arrayBuffer2Utf8Str(buff) {\n        return String.fromCharCode.apply(null, new Uint8Array(buff));\n    }\n\n    function concatenateArrayBuffers(first, second, returnUInt8Array) {\n        var result = new Uint8Array(first.byteLength + second.byteLength);\n\n        result.set(new Uint8Array(first));\n        result.set(new Uint8Array(second), first.byteLength);\n\n        return returnUInt8Array ? result : result.buffer;\n    }\n\n    function hexToBinaryString(hex) {\n        var bytes = [],\n            length = hex.length,\n            x;\n\n        for (x = 0; x < length - 1; x += 2) {\n            bytes.push(parseInt(hex.substr(x, 2), 16));\n        }\n\n        return String.fromCharCode.apply(String, bytes);\n    }\n\n    // ---------------------------------------------------\n\n    /**\n     * SparkMD5 OOP implementation.\n     *\n     * Use this class to perform an incremental md5, otherwise use the\n     * static methods instead.\n     */\n\n    function SparkMD5() {\n        // call reset to init the instance\n        this.reset();\n    }\n\n    /**\n     * Appends a string.\n     * A conversion will be applied if an utf8 string is detected.\n     *\n     * @param {String} str The string to be appended\n     *\n     * @return {SparkMD5} The instance itself\n     */\n    SparkMD5.prototype.append = function (str) {\n        // Converts the string to utf8 bytes if necessary\n        // Then append as binary\n        this.appendBinary(toUtf8(str));\n\n        return this;\n    };\n\n    /**\n     * Appends a binary string.\n     *\n     * @param {String} contents The binary string to be appended\n     *\n     * @return {SparkMD5} The instance itself\n     */\n    SparkMD5.prototype.appendBinary = function (contents) {\n        this._buff += contents;\n        this._length += contents.length;\n\n        var length = this._buff.length,\n            i;\n\n        for (i = 64; i <= length; i += 64) {\n            md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n        }\n\n        this._buff = this._buff.substring(i - 64);\n\n        return this;\n    };\n\n    /**\n     * Finishes the incremental computation, reseting the internal state and\n     * returning the result.\n     *\n     * @param {Boolean} raw True to get the raw string, false to get the hex string\n     *\n     * @return {String} The result\n     */\n    SparkMD5.prototype.end = function (raw) {\n        var buff = this._buff,\n            length = buff.length,\n            i,\n            tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n            ret;\n\n        for (i = 0; i < length; i += 1) {\n            tail[i >> 2] |= buff.charCodeAt(i) << ((i % 4) << 3);\n        }\n\n        this._finish(tail, length);\n        ret = hex(this._hash);\n\n        if (raw) {\n            ret = hexToBinaryString(ret);\n        }\n\n        this.reset();\n\n        return ret;\n    };\n\n    /**\n     * Resets the internal state of the computation.\n     *\n     * @return {SparkMD5} The instance itself\n     */\n    SparkMD5.prototype.reset = function () {\n        this._buff = '';\n        this._length = 0;\n        this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n        return this;\n    };\n\n    /**\n     * Gets the internal state of the computation.\n     *\n     * @return {Object} The state\n     */\n    SparkMD5.prototype.getState = function () {\n        return {\n            buff: this._buff,\n            length: this._length,\n            hash: this._hash.slice()\n        };\n    };\n\n    /**\n     * Gets the internal state of the computation.\n     *\n     * @param {Object} state The state\n     *\n     * @return {SparkMD5} The instance itself\n     */\n    SparkMD5.prototype.setState = function (state) {\n        this._buff = state.buff;\n        this._length = state.length;\n        this._hash = state.hash;\n\n        return this;\n    };\n\n    /**\n     * Releases memory used by the incremental buffer and other additional\n     * resources. If you plan to use the instance again, use reset instead.\n     */\n    SparkMD5.prototype.destroy = function () {\n        delete this._hash;\n        delete this._buff;\n        delete this._length;\n    };\n\n    /**\n     * Finish the final calculation based on the tail.\n     *\n     * @param {Array}  tail   The tail (will be modified)\n     * @param {Number} length The length of the remaining buffer\n     */\n    SparkMD5.prototype._finish = function (tail, length) {\n        var i = length,\n            tmp,\n            lo,\n            hi;\n\n        tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n        if (i > 55) {\n            md5cycle(this._hash, tail);\n            for (i = 0; i < 16; i += 1) {\n                tail[i] = 0;\n            }\n        }\n\n        // Do the final computation based on the tail and length\n        // Beware that the final length may not fit in 32 bits so we take care of that\n        tmp = this._length * 8;\n        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n        lo = parseInt(tmp[2], 16);\n        hi = parseInt(tmp[1], 16) || 0;\n\n        tail[14] = lo;\n        tail[15] = hi;\n        md5cycle(this._hash, tail);\n    };\n\n    /**\n     * Performs the md5 hash on a string.\n     * A conversion will be applied if utf8 string is detected.\n     *\n     * @param {String}  str The string\n     * @param {Boolean} [raw] True to get the raw string, false to get the hex string\n     *\n     * @return {String} The result\n     */\n    SparkMD5.hash = function (str, raw) {\n        // Converts the string to utf8 bytes if necessary\n        // Then compute it using the binary function\n        return SparkMD5.hashBinary(toUtf8(str), raw);\n    };\n\n    /**\n     * Performs the md5 hash on a binary string.\n     *\n     * @param {String}  content The binary string\n     * @param {Boolean} [raw]     True to get the raw string, false to get the hex string\n     *\n     * @return {String} The result\n     */\n    SparkMD5.hashBinary = function (content, raw) {\n        var hash = md51(content),\n            ret = hex(hash);\n\n        return raw ? hexToBinaryString(ret) : ret;\n    };\n\n    // ---------------------------------------------------\n\n    /**\n     * SparkMD5 OOP implementation for array buffers.\n     *\n     * Use this class to perform an incremental md5 ONLY for array buffers.\n     */\n    SparkMD5.ArrayBuffer = function () {\n        // call reset to init the instance\n        this.reset();\n    };\n\n    /**\n     * Appends an array buffer.\n     *\n     * @param {ArrayBuffer} arr The array to be appended\n     *\n     * @return {SparkMD5.ArrayBuffer} The instance itself\n     */\n    SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n        var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),\n            length = buff.length,\n            i;\n\n        this._length += arr.byteLength;\n\n        for (i = 64; i <= length; i += 64) {\n            md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n        }\n\n        this._buff = (i - 64) < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n\n        return this;\n    };\n\n    /**\n     * Finishes the incremental computation, reseting the internal state and\n     * returning the result.\n     *\n     * @param {Boolean} raw True to get the raw string, false to get the hex string\n     *\n     * @return {String} The result\n     */\n    SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n        var buff = this._buff,\n            length = buff.length,\n            tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n            i,\n            ret;\n\n        for (i = 0; i < length; i += 1) {\n            tail[i >> 2] |= buff[i] << ((i % 4) << 3);\n        }\n\n        this._finish(tail, length);\n        ret = hex(this._hash);\n\n        if (raw) {\n            ret = hexToBinaryString(ret);\n        }\n\n        this.reset();\n\n        return ret;\n    };\n\n    /**\n     * Resets the internal state of the computation.\n     *\n     * @return {SparkMD5.ArrayBuffer} The instance itself\n     */\n    SparkMD5.ArrayBuffer.prototype.reset = function () {\n        this._buff = new Uint8Array(0);\n        this._length = 0;\n        this._hash = [1732584193, -271733879, -1732584194, 271733878];\n\n        return this;\n    };\n\n    /**\n     * Gets the internal state of the computation.\n     *\n     * @return {Object} The state\n     */\n    SparkMD5.ArrayBuffer.prototype.getState = function () {\n        var state = SparkMD5.prototype.getState.call(this);\n\n        // Convert buffer to a string\n        state.buff = arrayBuffer2Utf8Str(state.buff);\n\n        return state;\n    };\n\n    /**\n     * Gets the internal state of the computation.\n     *\n     * @param {Object} state The state\n     *\n     * @return {SparkMD5.ArrayBuffer} The instance itself\n     */\n    SparkMD5.ArrayBuffer.prototype.setState = function (state) {\n        // Convert string to buffer\n        state.buff = utf8Str2ArrayBuffer(state.buff, true);\n\n        return SparkMD5.prototype.setState.call(this, state);\n    };\n\n    SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n\n    SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n\n    /**\n     * Performs the md5 hash on an array buffer.\n     *\n     * @param {ArrayBuffer} arr The array buffer\n     * @param {Boolean}     [raw] True to get the raw string, false to get the hex one\n     *\n     * @return {String} The result\n     */\n    SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n        var hash = md51_array(new Uint8Array(arr)),\n            ret = hex(hash);\n\n        return raw ? hexToBinaryString(ret) : ret;\n    };\n\n    return SparkMD5;\n}));\n","var a24RestCallHelperAgencySubdomain = {\n    _funcGoToDefaultErrorPage: function(objNavigationService, objError/*, objErrorData, bNonSwaggerError*/) {\n        if (objError.sCode === \"IP_ADDRESS_NOT_WHITELISTED\") {\n            objNavigationService.navigateOutsideContext(\"access-denied\");\n        } else {\n            objNavigationService.navigateToGWTPage(\"error-general\");\n        }\n    },\n    _funcErrorCallbackDetails: function(objFailure, sErrorCode, sStatus, objErrorThrown, objError, bNonSwaggerError) {\n        if (bNonSwaggerError) {\n            objFailure.funcCallback(sErrorCode, sStatus, objErrorThrown, objError.iIndex, objError.sField);\n        } else {\n            objFailure.funcCallback(sErrorCode, sStatus, objErrorThrown, objError);\n        }\n    }\n};\n\nvar a24RestResponseHandlerAgencySubdomain = {\n    /**\n     * These params will be used by the below functions to store values for the initial call\n     * to use when it returns the code.\n     */\n    sField: null,\n    iIndex: null, // This is set to null as to not confuse it with index -1 that gets returned from the backend\n    sCode: null,\n    /**\n     * This function is used to parse through the body of a failure response and\n     * retrieve the first Error Constant based on a generic structures for the\n     * response.\n     *\n     * @param objError - The json body of the error response\n     * @param bReturn - Whether this itteration of the service call should return the object\n     * @param bNonSwaggerError (Optional) - True if the error method does not follow the swagger pattern\n     *\n     * @author Michael Barnard <michael.barnard@a24group.com>\n     * @since  09 December 2015\n     *\n     * @returns An object containing the Error Code, The array index and the Field for the error\n     *     {\n     *         sField: \"fieldname\",\n     *         iIndex: 1,\n     *         sCode: \"STATUS_CODE\"\n     *     }\n     */\n    getFullErrorLookup: function(objError, bReturn, bNonSwaggerError) {\n\n        if (bNonSwaggerError) {\n            var objThis = this;\n\n            // Get an instance of the current class\n            if (objError.errors) {\n                // If the object has an \"errors\" property\n\n                //Store the field value\n                this.sField = objError.field;\n\n                // This is a safe way to get the first object for the set\n                $.each(objError.errors, function (sKey, sValue) {\n                    if (sKey !== -1) {\n                        // Call this function recursively with return false\n                        objThis.getFullErrorLookup(sValue, false, bNonSwaggerError);\n                        return false;//Break\n                    }\n                });\n\n            } else if (objError.embeddedErrors) {\n                // If the object has an \"embeddedErrors\" property\n\n                // Call this function recursively with return false\n                this.getFullErrorLookup(objError.embeddedErrors, false, bNonSwaggerError);\n            } else if (objError.embeddedErrorsInArray) {\n                // If the object has an \"embeddedErrors\" property\n\n                // This is a safe way to get the first object for the set\n                $.each(objError.embeddedErrorsInArray, function(sKey, sValue) {\n                    if (sKey !== -1) {\n                        //Store the index value\n                        objThis.iIndex = sKey;\n                        // Call this function recursively with return false\n                        objThis.getFullErrorLookup(sValue, false, bNonSwaggerError);\n                        return false;//Break\n                    }\n                });\n            } else if (typeof objError === \"string\") {\n                // If the object is of type string\n\n                // Store the code value\n                this.sCode = objError;\n            } else if (objError.exceptionCode) {\n                this.sCode = objError.exceptionCode;\n                this.sField = null;\n                this.iIndex = null;\n            }\n\n            // If return is specified\n            if (bReturn) {\n                // Return all the values on a single object\n                return {\n                    sField: this.sField,\n                    iIndex: this.iIndex,\n                    sCode: this.sCode\n                };\n            }\n        } else {\n            return this.getSwaggerError(objError, bReturn, bNonSwaggerError);\n        }\n    }\n};\n\nif (typeof a24RestCallHelper === \"undefined\") {\n    var a24RestCallHelper = {};\n}\n\nObject.keys(a24RestCallHelperAgencySubdomain).forEach(function(sKey) {\n    a24RestCallHelper[sKey] = a24RestCallHelperAgencySubdomain[sKey];\n});\n\nif (typeof a24RestResponseHandler === \"undefined\") {\n    var a24RestResponseHandler = {};\n}\n\nObject.keys(a24RestResponseHandlerAgencySubdomain).forEach(function(sKey) {\n    a24RestResponseHandler[sKey] = a24RestResponseHandlerAgencySubdomain[sKey];\n});\n","var a24ConstantsSSAgency = {\n    //======== A24 ADDON OVERRIDES START ========\n\n    DATE_FORMAT_REST_FORMAT_MONTH_YEAR_ONLY: \"YYYY-MM\",\n    DATE_FORMAT_REST_FORMAT_DATE_ONLY: \"YYYY-MM-DD\",\n    DATE_FORMAT_REST_FORMAT_WITHOUT_TZ: \"YYYY-MM-DDTHH:mm:ss\",\n    DATE_FORMAT_REST_FORMAT: \"YYYY-MM-DDTHH:mm:ssZ\"\n\n    //======== A24 ADDON OVERRIDES END   ========\n};\n\nif (typeof a24Constants === \"undefined\") {\n    var a24Constants = {};\n}\n\n//Only add the extended values to the a24Constants if they do not exist on it already\nObject.keys(a24ConstantsSSAgency).forEach(function(sKey) {\n    a24Constants[sKey] = a24ConstantsSSAgency[sKey];\n});\n","define('@ember/ordered-set/index', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var NEEDS_CUSTOM_ORDERED_SET = false;\n\n  var OrderedSet = void 0;\n\n  if (NEEDS_CUSTOM_ORDERED_SET) {\n    /**\n    @class OrderedSet\n    @constructor\n    */\n    OrderedSet = function () {\n      function OrderedSet() {\n        _classCallCheck(this, OrderedSet);\n\n        this.clear();\n      }\n\n      /**\n      @method create\n      @static\n      @return {OrderedSet}\n      */\n\n\n      OrderedSet.create = function create() {\n        var Constructor = this;\n        return new Constructor();\n      };\n\n      OrderedSet.prototype.clear = function clear() {\n        this.presenceSet = Object.create(null);\n        this.list = [];\n        this.size = 0;\n      };\n\n      OrderedSet.prototype.add = function add(obj, _guid) {\n        var guid = _guid || Ember.guidFor(obj);\n        var presenceSet = this.presenceSet;\n        var list = this.list;\n\n        if (presenceSet[guid] !== true) {\n          presenceSet[guid] = true;\n          this.size = list.push(obj);\n        }\n\n        return this;\n      };\n\n      OrderedSet.prototype.delete = function _delete(obj, _guid) {\n        var guid = _guid || Ember.guidFor(obj);\n        var presenceSet = this.presenceSet;\n        var list = this.list;\n\n        if (presenceSet[guid] === true) {\n          delete presenceSet[guid];\n          var index = list.indexOf(obj);\n          if (index > -1) {\n            list.splice(index, 1);\n          }\n          this.size = list.length;\n          return true;\n        } else {\n          return false;\n        }\n      };\n\n      OrderedSet.prototype.isEmpty = function isEmpty() {\n        return this.size === 0;\n      };\n\n      OrderedSet.prototype.has = function has(obj) {\n        if (this.size === 0) {\n          return false;\n        }\n\n        var guid = Ember.guidFor(obj);\n        var presenceSet = this.presenceSet;\n\n        return presenceSet[guid] === true;\n      };\n\n      OrderedSet.prototype.forEach = function forEach(fn /*, ...thisArg*/) {\n        (true && !(typeof fn === 'function') && Ember.assert(Object.prototype.toString.call(fn) + ' is not a function', typeof fn === 'function'));\n\n\n        if (this.size === 0) {\n          return;\n        }\n\n        var list = this.list;\n\n        if (arguments.length === 2) {\n          for (var i = 0; i < list.length; i++) {\n            fn.call(arguments[1], list[i]);\n          }\n        } else {\n          for (var _i = 0; _i < list.length; _i++) {\n            fn(list[_i]);\n          }\n        }\n      };\n\n      OrderedSet.prototype.toArray = function toArray() {\n        return this.list.slice();\n      };\n\n      OrderedSet.prototype.copy = function copy() {\n        var Constructor = this.constructor;\n        var set = new Constructor();\n\n        set.presenceSet = Object.create(null);\n\n        for (var prop in this.presenceSet) {\n          // hasOwnPropery is not needed because obj is Object.create(null);\n          set.presenceSet[prop] = this.presenceSet[prop];\n        }\n\n        set.list = this.toArray();\n        set.size = this.size;\n\n        return set;\n      };\n\n      return OrderedSet;\n    }();\n  } else {\n    OrderedSet = Ember.__OrderedSet__ || Ember.OrderedSet;\n  }\n\n  exports.default = OrderedSet;\n});","define(\"a24-calendar/components/calendar-day\", [\"exports\", \"a24-calendar/templates/components/calendar-day\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _calendarDay, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        /*\n          Default values.\n        */\n        layout: _calendarDay.default,\n        classNames: [\"calendar-day\"],\n        classNameBindings: [\"objDay.bIsToday:today\", \"objDay.bIsNextMonthDay:next\", \"objDay.bIsThisMonthDay:current\", \"objDay.bIsPrevMonthDay:previous\"],\n\n        /*\n          @property objDay\n          The day object this component represents\n        */\n        objDay: null,\n\n        /*\n          Events\n        */\n        click: function click() {\n            if (!a24Core.isEmpty(this.get(\"onDayAction\"))) {\n                this.get(\"onDayAction\")(\"click\", Ember.get(this, \"objDay\"));\n            }\n        }\n    });\n});","define(\"a24-calendar/components/calendar-month\", [\"exports\", \"a24-calendar/templates/components/calendar-month\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _calendarMonth, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        /*\n          Default values\n        */\n        layout: _calendarMonth.default,\n        classNames: [\"calendar-month\"],\n\n        /*\n          @property iYear\n          The year of the month being displayed.\n        */\n        iYear: moment().year(),\n\n        /*\n          @property iMonth\n          The month (0-11) the component should display.\n        */\n        iMonth: moment().month(),\n\n        /*\n          @property iOffset\n          The number of days the week days will be offset by.\n        */\n        iOffset: 0,\n\n        /*\n          @property bLoading\n          It is true when the month days data is loading.\n        */\n        bLoading: false,\n\n        /*\n          @property bShowWeekHeading\n          It is true when the week heading is displayed.\n        */\n        bShowWeekHeading: true,\n\n        /*\n          @property objMonthDays\n          The list of days data that will be displayed for the specified month.\n        */\n        objMonthDays: null,\n\n        /*\n          @property objPrevMonthDays\n          The list of days data that will be displayed for the previous month.\n        */\n        objPrevMonthDays: null,\n\n        /*\n          @property objNextMonthDays\n          The list of days data that will be displayed for the next month.\n        */\n        objNextMonthDays: null,\n\n        /*\n          @property onDayAction\n          A generic action that is triggered in the event of any action on a day component. The first argument is the type (String) of the action followed by any number of arguments.\n        */\n        onDayAction: null,\n\n        /*\n          @property sDayComponent\n          The name of the component that will render inside each day block of the current month.\n        */\n        sDayComponent: \"calendar-day\",\n\n        /*\n          Inline computed properties\n        */\n        /*\n          @property sPrevMonthDayComponent\n          The name of the component that will render inside each day block of the previous month.\n        */\n        sPrevMonthDayComponent: Ember.computed.reads(\"sDayComponent\"),\n\n        /*\n          @property sNextMonthDayComponent\n          The name of the component that will render inside each day block of the next month.\n        */\n        sNextMonthDayComponent: Ember.computed.reads(\"sPrevMonthDayComponent\"),\n\n        /*\n          Multiline computed properties\n        */\n        /*\n          A valid offset.\n          @computed iValidOffset\n          @return {Integer} offset.\n        */\n        iValidOffset: Ember.computed(\"iOffset\", function () {\n            return Math.max(0, Math.min(this.get(\"iOffset\"), 6));\n        }).readOnly(),\n\n        /*\n          The current moment object of the month and year.\n          @computed objCurrentMoment\n          @return {Moment} The moment object representing the current month and year.\n        */\n        objCurrentMoment: Ember.computed(\"iYear\", \"iMonth\", function () {\n            return moment().year(this.get(\"iYear\")).month(this.get(\"iMonth\"));\n        }).readOnly(),\n\n        /*\n          Calculates the names of the week days for desktop and mobile.\n          @computed arrWeekdays\n          @return {Array<Object>} Week days.\n        */\n        arrWeekdays: Ember.computed(\"media.isMobile\", \"iValidOffset\", function () {\n            var iValidOffset = this.get(\"iValidOffset\");\n            var objCurrentMoment = this.get(\"objCurrentMoment\");\n            var iWeekday = objCurrentMoment.weekday();\n            var bIsMobile = this.get(\"media.isMobile\");\n            var bIsCurrentMonth = moment().isSame(objCurrentMoment, \"month\");\n            var arrWeekDays = moment.weekdaysShort().map(function (sDay, iIndex) {\n                return {\n                    sId: iIndex,\n                    sName: bIsMobile ? sDay.charAt(0) : sDay,\n                    bIsToday: iWeekday === iIndex && bIsCurrentMonth\n                };\n            });\n\n            return [].concat(arrWeekDays.slice(iValidOffset, arrWeekDays.length), arrWeekDays.slice(0, iValidOffset));\n        }).readOnly(),\n\n        objFirstDay: Ember.computed(\"objCurrentMoment\", \"iValidOffset\", function () {\n            var objDay = this.get(\"objCurrentMoment\").clone().startOf(\"month\");\n            var iValidOffset = this.get(\"iValidOffset\");\n            while (objDay.isoWeekday() % 7 !== iValidOffset) {\n                objDay.add(-1, \"day\");\n            }\n            return objDay;\n        }).readOnly(),\n\n        objLastDay: Ember.computed(\"objFirstDay\", function () {\n            var iValidOffset = this.get(\"iValidOffset\");\n            var objDay = this.get(\"objCurrentMoment\").clone().endOf(\"month\");\n            var iEndOfWeek = (iValidOffset + 6) % 7;\n            while (objDay.isoWeekday() % 7 !== iEndOfWeek) {\n                objDay.add(1, \"day\");\n            }\n            return objDay;\n        }).readOnly(),\n\n        /*\n          Computes the structure of each day in the month.\n          @computed arrDaysInMonth\n          @return {Array<Object>} Array containing objects of each days in the month.\n        */\n        arrDaysInMonth: Ember.computed(\"objLastDay\", \"iMonth\", \"objMonthDays\", \"objPrevMonthDays\", \"objNextMonthDays\", function () {\n            var _ref = [momentHelper.getCurrentDateString(a24Constants.DATE_FORMAT), this.get(\"iMonth\")],\n                objToday = _ref[0],\n                iMonth = _ref[1];\n            var _ref2 = [Ember.A(), this.get(\"objLastDay\")],\n                arrDays = _ref2[0],\n                objLastDay = _ref2[1];\n\n            var objCurrentDay = this.get(\"objFirstDay\").clone();\n            while (objCurrentDay.isBefore(objLastDay)) {\n                arrDays.pushObject(this._buildDay(objCurrentDay, objToday, iMonth));\n                objCurrentDay.add(1, \"day\");\n            }\n\n            return arrDays;\n        }).readOnly(),\n\n        /*\n          Calculates the data for the month weeks.\n          @computed arrWeeks\n          @return {Array<Object>} Array containing objects of each weeks in the month.\n        */\n        arrWeeks: Ember.computed(\"arrDaysInMonth.{[],@each.sId}\", \"objMonthDays\", \"objPrevMonthDays\", \"objNextMonthDays\", function () {\n            var arrWeeks = Ember.A();\n            var arrDaysInMonth = this.get(\"arrDaysInMonth\");\n            var iDaysLength = arrDaysInMonth.length;\n            for (var i = 0; i < iDaysLength; i += 7) {\n                var objDay = arrDaysInMonth.objectAt(i);\n                arrWeeks.pushObject({\n                    sId: objDay.objMoment.format(\"YYYY-w\"),\n                    arrDays: arrDaysInMonth.slice(i, i + 7)\n                });\n            }\n\n            return arrWeeks;\n        }).readOnly(),\n        /*\n          private functions\n        */\n        _buildDay: function _buildDay(objDayMoment, objToday, iMonth) {\n            var objMoment = objDayMoment.clone();\n            var iMomentMonth = objMoment.month();\n\n            var bIsThisMonthDay = iMomentMonth === iMonth;\n            var bIsPrevMonthDay = iMomentMonth < iMonth;\n            var bIsNextMonthDay = iMomentMonth > iMonth;\n\n            var iNumber = objMoment.date();\n\n            var objDay = {};\n\n            if (bIsThisMonthDay) {\n                objDay = this.get(\"objMonthDays.\" + iNumber);\n            } else if (bIsPrevMonthDay) {\n                objDay = this.get(\"objPrevMonthDays.\" + iNumber);\n            } else if (bIsNextMonthDay) {\n                objDay = this.get(\"objNextMonthDays.\" + iNumber);\n            }\n\n            if (typeof objDay === \"undefined\") {\n                objDay = {};\n            }\n\n            Ember.set(objDay, \"sId\", objMoment.format(\"YYYY-MM-DD\"));\n            Ember.set(objDay, \"objMoment\", objMoment);\n            Ember.set(objDay, \"objDate\", objMoment.toDate());\n            Ember.set(objDay, \"iNumber\", iNumber);\n            Ember.set(objDay, \"bIsPast\", objMoment.isBefore(objToday, \"day\"));\n            Ember.set(objDay, \"bIsFuture\", objMoment.isAfter(objToday, \"day\"));\n            Ember.set(objDay, \"bIsToday\", objMoment.isSame(objToday, \"day\"));\n            Ember.set(objDay, \"bIsThisMonthDay\", bIsThisMonthDay);\n            Ember.set(objDay, \"bIsPrevMonthDay\", bIsPrevMonthDay);\n            Ember.set(objDay, \"bIsNextMonthDay\", bIsNextMonthDay);\n\n            return objDay;\n        }\n    });\n});","define(\"a24-calendar/components/calendar-navigation\", [\"exports\", \"a24-calendar/templates/components/calendar-navigation\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _calendarNavigation, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        /*\n         * Default values\n        */\n        layout: _calendarNavigation.default,\n        classNames: [\"calendar-navigation\"],\n\n        /*\n         * @property bTextDisabled\n         * True when the text button is disabled\n        */\n        bTextDisabled: false,\n\n        /*\n         * @property bBackDisabled\n         * True when the back icon is disabled\n        */\n        bBackDisabled: false,\n\n        /*\n         * @property bForwardDisabled\n         * True when the forward icon is disabled\n        */\n        bForwardDisabled: false,\n\n        /*\n         * @property bTextHidden\n         * True when the text button is hidden\n        */\n        bTextHidden: false,\n\n        /*\n         * @property bText\n         * Sets the text button content\n        */\n        bText: \"TODAY\",\n\n        actions: {\n            /*\n             * @action btnClick\n             * Dispatches clicked button if not disabled\n            */\n            btnClick: function btnClick() {\n                if (!this.get(\"bTextDisabled\")) {\n                    if (!a24Core.isEmpty(this.get(\"navBtnClick\"))) {\n                        this.get(\"navBtnClick\")();\n                    }\n                }\n            },\n\n\n            /*\n             * @action goBack\n             * Dispatches clicked back icon if not disabled\n            */\n            goBack: function goBack() {\n                if (!this.get(\"bBackDisabled\")) {\n                    if (!a24Core.isEmpty(this.get(\"navGoBack\"))) {\n                        this.get(\"navGoBack\")();\n                    }\n                }\n            },\n\n\n            /*\n             * @action goForward\n             * Dispatches clicked forward icon if not disabled\n            */\n            goForward: function goForward() {\n                if (!this.get(\"bForwardDisabled\")) {\n                    if (!a24Core.isEmpty(this.get(\"navGoForward\"))) {\n                        this.get(\"navGoForward\")();\n                    }\n                }\n            }\n        }\n    });\n});","define(\"a24-calendar/templates/components/calendar-day\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"8VEyULGF\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[22,[\\\"objDay\\\",\\\"iNumber\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-calendar/templates/components/calendar-day.hbs\" } });\n});","define(\"a24-calendar/templates/components/calendar-month\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"PFRSCAZ8\", \"block\": \"{\\\"symbols\\\":[\\\"arrWeek\\\",\\\"objDay\\\",\\\"objWeekday\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"bLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"loading-component\\\",null,[[\\\"class\\\"],[\\\"loader\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[6,\\\"table\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bShowWeekHeading\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"thead\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"tr\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"arrWeekdays\\\"]]],[[\\\"key\\\"],[\\\"sId\\\"]],{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"th\\\"],[11,\\\"class\\\",[27,[[26,\\\"if\\\",[[21,3,[\\\"bIsToday\\\"]],\\\"today\\\"],null]]]],[8],[1,[21,3,[\\\"sName\\\"]],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[6,\\\"tbody\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"arrWeeks\\\"]]],[[\\\"key\\\"],[\\\"sId\\\"]],{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"tr\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[21,1,[\\\"arrDays\\\"]]],[[\\\"key\\\"],[\\\"sId\\\"]],{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"td\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[21,2,[\\\"bIsThisMonthDay\\\"]]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[1,[26,\\\"component\\\",[[22,[\\\"sDayComponent\\\"]]],[[\\\"objDay\\\",\\\"onDayAction\\\"],[[21,2,[]],[22,[\\\"onDayAction\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[21,2,[\\\"bIsPrevMonthDay\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"objPrevMonthDays\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[1,[26,\\\"component\\\",[[22,[\\\"sPrevMonthDayComponent\\\"]]],[[\\\"objDay\\\",\\\"onDayAction\\\"],[[21,2,[]],[22,[\\\"onDayAction\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[21,2,[\\\"bIsNextMonthDay\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"objNextMonthDays\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[1,[26,\\\"component\\\",[[22,[\\\"sNextMonthDayComponent\\\"]]],[[\\\"objDay\\\",\\\"onDayAction\\\"],[[21,2,[]],[22,[\\\"onDayAction\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                        \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-calendar/templates/components/calendar-month.hbs\" } });\n});","define(\"a24-calendar/templates/components/calendar-navigation\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"tTxEucNd\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"d-flex justify-content-center align-items-center\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[22,[\\\"bTextHidden\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"button\\\"],[11,\\\"class\\\",[27,[\\\"btn btn-flat-navigation \\\",[26,\\\"if\\\",[[22,[\\\"bTextDisabled\\\"]],\\\"disabled\\\",\\\"cursor-clickable\\\"],null]]]],[10,\\\"type\\\",\\\"button\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"btnClick\\\"]],[8],[0,\\\"\\\\n            \\\"],[1,[20,\\\"bText\\\"],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[6,\\\"i\\\"],[11,\\\"class\\\",[27,[\\\"material-icons md-dark md-30 \\\",[26,\\\"if\\\",[[22,[\\\"bBackDisabled\\\"]],\\\"md-inactive\\\",\\\"cursor-clickable\\\"],null]]]],[3,\\\"action\\\",[[21,0,[]],\\\"goBack\\\"]],[8],[0,\\\"\\\\n        keyboard_arrow_left\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"i\\\"],[11,\\\"class\\\",[27,[\\\"material-icons md-dark md-30 \\\",[26,\\\"if\\\",[[22,[\\\"bForwardDisabled\\\"]],\\\"md-inactive\\\",\\\"cursor-clickable\\\"],null]]]],[3,\\\"action\\\",[[21,0,[]],\\\"goForward\\\"]],[8],[0,\\\"\\\\n        keyboard_arrow_right\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-calendar/templates/components/calendar-navigation.hbs\" } });\n});","define(\"a24-ember-candidate-profile/components/candidate-activities\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/candidate-activities\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _didRenderChangesMixin, _candidateActivities, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _candidateActivities.default,\n        sCandidateId: null,\n        sCandidateName: null,\n        objActivityRestService: null,\n        objActivityTypeRestService: null,\n        objRestCandidateActivityEmailComm: null,\n        objRestCandidateActivityConversation: null,\n        objRestCandidateActivityNotification: null,\n        sActivityContext: null,\n        _bLoading: false,\n        _bPopupLoading: false,\n        _arrHeaderActions: null,\n        _sPopupHeader: null,\n        _arrActivities: null,\n        _objSpecialAddPopupAction: null,\n        _bShowUnsavedData: false,\n        _bShowAddPopup: false,\n        _objActivityEditData: null,\n        _objActivitiesGetPromise: null,\n        _objActivityPostPromise: null,\n        _arrActivityTypes: null,\n        _arrActivityTypeAddEditDropdown: null,\n        _arrReloadActions: null,\n\n        _sActivityTypeSelected: null,\n        _mapActivityTypeDescription: null,\n\n        _env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n        _sTriageBaseUrl: Ember.computed.readOnly(\"_env.sTriageBaseUrl\"),\n        _sReactGatewayUrl: Ember.computed.readOnly(\"_env.sReactGatewayUrl\"),\n\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objSSCoreStrings: Ember.inject.service(\"a24-strings-staffshift-core\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objCoreStrings: Ember.inject.service(\"a24-strings-staffshift-core\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objCandidateProfileEnumsService: Ember.inject.service(\"a24-enums-candidate-profile\"),\n        _objSSCoreEnumsService: Ember.inject.service(\"a24-enums-staffshift-core\"),\n\n        _bServerError: false,\n        _iResultCount: 0,\n        _iPage: 1,\n        _iPerPage: 10,\n        _arrFilterConfig: null,\n        _objQueryParams: null,\n\n        _bShowEmailMessagePopup: false,\n        _objActivityTypesGetPromise: null,\n        _bShowNotifcationsSentPopup: false,\n        _objCurrentNotificationSentCache: null,\n        _objEmailActivity: null,\n        _objNotificationActivity: null,\n\n        _sIFrameUrl: null,\n        _objReactPopupPostData: null,\n        _bShowReactPopup: false,\n        _bReactPopupLoading: true,\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", this.get(\"_sReactGatewayUrl\"));\n            }\n\n            this.set(\"_sActivityTypeSelected\", this.get(\"_objCandidateProfileStringsService\").getTokenString(\"selectedActivityTypes\", \"-\"));\n\n            this.set(\"_arrReloadActions\", [{\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"reload\"),\n                sIcon: \"refresh\",\n                executeCardAction: function executeCardAction() {\n                    _this.doServiceCalls();\n                }\n            }]);\n\n            this.set(\"_sPopupHeader\", this.get(\"_objStringsService\").getTokenString(\"addItem\", this.get(\"_objCandidateProfileStringsService\").getString(\"activity\")));\n\n            this.set(\"_arrHeaderActions\", [{\n                sTooltipText: this.get(\"_objStringsService\").getString(\"add\"),\n                sIcon: \"add\",\n                executeCardAction: function executeCardAction() {\n                    _this.setAddPopup();\n                }\n            }, {\n                sTooltipText: this.get(\"_objCandidateProfileStringsService\").getString(\"reload\"),\n                sIcon: \"refresh\",\n                executeCardAction: function executeCardAction() {\n                    _this.doServiceCalls(_this.get(\"_objQueryParams\"));\n                }\n            }]);\n\n            this.set(\"_objSpecialAddPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this.hidePopup();\n                }\n            });\n\n            // Set up the form children\n            this.set(\"objChildConfig\", {\n                // activity type drop down\n                \"objChildren.activity_type\": function objChildrenActivity_type(objMixin) {\n                    // This field is required\n                    a24Validation.addRequired(objMixin, true);\n                },\n                // description\n                \"objChildren.description\": function objChildrenDescription(objMixin) {\n                    // This fields has a min Length of 1\n                    a24Validation.addMinLength(objMixin, 3);\n                },\n                // comment\n                \"objChildren.comment\": function objChildrenComment(objMixin) {\n                    // This fields has a min Length of 1\n                    a24Validation.addMinLength(objMixin, 1);\n                }\n            });\n            this.set(\"_objCurrentNotificationSentCache\", {});\n\n            this.doServiceCalls();\n        },\n        doServiceCalls: function doServiceCalls(objQueryParams) {\n            var _this2 = this;\n\n            this.set(\"_bLoading\", true);\n            this.set(\"_bServerError\", false);\n            this.set(\"_iResultCount\", 0);\n\n            var sCandidateId = this.get(\"sCandidateId\");\n\n            if (a24Core.isEmpty(objQueryParams)) {\n                objQueryParams = {\n                    page: { mValue: this.get(\"_iPage\") },\n                    items_per_page: { mValue: this.get(\"_iPerPage\") }\n                };\n            }\n\n            if (a24Core.isEmpty(objQueryParams.activity_date)) {\n                objQueryParams.activity_date = {\n                    mValue: \"desc\",\n                    bSortBy: true\n                };\n            }\n            // Save the current query params for later use.\n            this.set(\"_objQueryParams\", Ember.copy(objQueryParams, true));\n\n            var objPromiseActivities = this.get(\"objActivityRestService\").getActivities(this, \"_objActivitiesGetPromise\", sCandidateId, function () {}, // handled in RSVP\n            a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode /*, sStatus, objErrorThrown, objError*/) {\n                if (sCode === \"500\" || sCode === \"502\" || sCode === \"503\" || sCode === \"504\") {\n                    _this2.set(\"_bServerError\", true);\n                    return;\n                }\n                // Clear data\n                _this2.set(\"_arrActivities\", []);\n            }), objQueryParams);\n\n            var objServiceCalls = {\n                _objRestActivitiesProperty: objPromiseActivities\n            };\n\n            var arrRequiredResponses = [\"_objRestActivitiesProperty\"];\n\n            // load activity types if not loaded\n            if (a24Core.isEmpty(this.get(\"_arrActivityTypesContext\"))) {\n                var objActivityTypesContextQueryParams = {\n                    disabled: { mValue: false },\n                    context: { mValue: this.get(\"sActivityContext\") },\n                    subject_type: { mValue: this.get(\"_objSSCoreEnumsService.activitySubjectTypes.CANDIDATE.backend\") },\n                    name: { mValue: \"asc\", bSortBy: true },\n                    page: { mValue: 1 },\n                    items_per_page: { mValue: 1000 }\n                };\n\n                var objPromiseActivityTypesContext = this.get(\"objActivityTypeRestService\").getActivityTypes(this, \"_objActivityTypesContextGetPromise\", function () {}, // handled in RSVP\n                a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode /*, sStatus, objErrorThrown, objError*/) {\n                    if (sCode === \"500\" || sCode === \"502\" || sCode === \"503\" || sCode === \"504\") {\n                        _this2.set(\"_bServerError\", true);\n                        return;\n                    }\n                    // Clear data\n                    _this2.set(\"_arrActivityTypesContext\", []);\n                }), objActivityTypesContextQueryParams);\n\n                objServiceCalls._objRestActivityTypesContextProperty = objPromiseActivityTypesContext;\n                arrRequiredResponses.push(\"_objRestActivityTypesContextProperty\");\n            }\n\n            if (a24Core.isEmpty(this.get(\"_arrActivityTypes\"))) {\n                var objActivityTypesQueryParams = {\n                    subject_type: { mValue: this.get(\"_objSSCoreEnumsService.activitySubjectTypes.CANDIDATE.backend\") },\n                    name: { mValue: \"asc\", bSortBy: true },\n                    page: { mValue: 1 },\n                    items_per_page: { mValue: 1000 }\n                };\n\n                var objPromiseActivityTypes = this.get(\"objActivityTypeRestService\").getActivityTypes(this, \"_objActivityTypesGetPromise\", function () {}, // handled in RSVP\n                a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode /*, sStatus, objErrorThrown, objError*/) {\n                    if (sCode === \"500\" || sCode === \"502\" || sCode === \"503\" || sCode === \"504\") {\n                        _this2.set(\"_bServerError\", true);\n                        return;\n                    }\n                    // Clear data\n                    _this2.set(\"_arrActivityTypes\", []);\n                }), objActivityTypesQueryParams);\n\n                objServiceCalls._objRestActivityTypesProperty = objPromiseActivityTypes;\n                arrRequiredResponses.push(\"_objRestActivityTypesProperty\");\n            }\n\n            Ember.copy(a24RSVP).configure(this, objServiceCalls, [{\n                arrRequiredResponses: arrRequiredResponses,\n                funcOnComplete: function funcOnComplete(objResponses) {\n                    if (!a24Core.isEmpty(objResponses._objRestActivityTypesContextProperty) && !a24Core.isEmpty(objResponses._objRestActivityTypesContextProperty.objHeaders) && objResponses._objRestActivityTypesContextProperty.objHeaders.statusText === \"abort\" || !a24Core.isEmpty(objResponses._objRestActivityTypesProperty) && !a24Core.isEmpty(objResponses._objRestActivityTypesProperty.objHeaders) && objResponses._objRestActivityTypesProperty.objHeaders.statusText === \"abort\" || !a24Core.isEmpty(objResponses._objRestActivitiesProperty) && !a24Core.isEmpty(objResponses._objRestActivitiesProperty.objHeaders) && objResponses._objRestActivitiesProperty.objHeaders.statusText === \"abort\") {\n                        return;\n                    }\n\n                    if (!a24Core.isEmpty(objResponses._objRestActivityTypesProperty) && !a24Core.isEmpty(objResponses._objRestActivityTypesProperty.objResponse)) {\n                        var arrActivityTypes = objResponses._objRestActivityTypesProperty.objResponse;\n                        _this2.set(\"_arrActivityTypes\", arrActivityTypes);\n\n                        var arrActivityTypeDropdown = [];\n                        for (var k = 0; k < arrActivityTypes.length; k++) {\n                            arrActivityTypeDropdown.push({\n                                sTitle: arrActivityTypes[k].name,\n                                sValue: arrActivityTypes[k].code\n                            });\n                        }\n\n                        _this2.set(\"_arrFilterConfig\", [{\n                            sTitle: _this2.get(\"_objStringsService\").getString(\"createdBy\"),\n                            sProperty: \"created_by_user_name\",\n                            sFilterType: \"text\",\n                            bHideEmptyCheck: true,\n                            bText: true\n                        }, {\n                            sTitle: _this2.get(\"_objCandidateProfileStringsService\").getString(\"activityType\"),\n                            sProperty: \"activity_type\",\n                            sFilterType: \"dropdownMulti\",\n                            arrMappingData: arrActivityTypeDropdown,\n                            bHideEmptyCheck: true,\n                            bMapping: true\n                        }, {\n                            sTitle: _this2.get(\"_objCandidateProfileStringsService\").getString(\"activityDate\"),\n                            sProperty: \"activity_date_at\",\n                            sFilterType: \"date\",\n                            bHideEmptyCheck: true,\n                            bDate: true\n                        }]);\n                    }\n\n                    if (!a24Core.isEmpty(objResponses._objRestActivityTypesContextProperty) && !a24Core.isEmpty(objResponses._objRestActivityTypesContextProperty.objResponse)) {\n                        _this2.set(\"_arrActivityTypesContext\", objResponses._objRestActivityTypesContextProperty.objResponse);\n\n                        var arrActivityTypeContextDropdown = [];\n                        var mapActivityTypeDescription = new Map();\n                        var arrActivityTypesContext = objResponses._objRestActivityTypesContextProperty.objResponse;\n                        for (var l = 0; l < arrActivityTypesContext.length; l++) {\n                            mapActivityTypeDescription.set(arrActivityTypesContext[l].code, arrActivityTypesContext[l].description);\n                            arrActivityTypeContextDropdown.push({\n                                sTitle: arrActivityTypesContext[l].name,\n                                sValue: arrActivityTypesContext[l].code\n                            });\n                        }\n                        _this2.set(\"_mapActivityTypeDescription\", mapActivityTypeDescription);\n                        _this2.set(\"_arrActivityTypeAddEditDropdown\", arrActivityTypeContextDropdown);\n                    }\n\n                    if (!a24Core.isEmpty(objResponses._objRestActivitiesProperty) && !a24Core.isEmpty(objResponses._objRestActivitiesProperty.objResponse) && !a24Core.isEmpty(_this2.get(\"_arrActivityTypes\"))) {\n                        _this2.set(\"_arrActivities\", _this2.prepareForDisplay(objResponses._objRestActivitiesProperty.objResponse));\n\n                        _this2.set(\"_iResultCount\", a24RestCallHelper.getXResultCount(objResponses._objRestActivitiesProperty.objHeaders));\n\n                        _this2.set(\"_bLoading\", false);\n                        if (!a24Core.isEmpty(_this2.get(\"onDoneLoading\"))) {\n                            _this2.get(\"onDoneLoading\")();\n                        }\n                    } else {\n                        _this2.set(\"_arrActivities\", []);\n                        _this2.set(\"_bLoading\", false);\n                        if (!a24Core.isEmpty(_this2.get(\"onDoneLoading\"))) {\n                            _this2.get(\"onDoneLoading\")();\n                        }\n                    }\n                }\n            }]);\n        },\n        prepareForDisplay: function prepareForDisplay(arrData) {\n            var _this3 = this;\n\n            var arrActivities = [];\n            var objThis = this;\n\n            arrData.forEach(function (objActivity) {\n                // lookup icon and label for activity type\n                var objLookupData = null;\n                var arrActivityTypes = _this3.get(\"_arrActivityTypes\");\n                for (var l = 0; l < arrActivityTypes.length; l++) {\n                    if (arrActivityTypes[l].code === objActivity.activity_type) {\n                        objLookupData = arrActivityTypes[l];\n                        break;\n                    }\n                }\n\n                var sSeenDateFormatted = momentHelper.getTimeFromNow(objActivity.activity_date, a24Constants.DATE_FORMAT_REST_FORMAT);\n                var objActivityDateTime = a24DateManager.createDate(objThis.get(\"_objUserSession\").get(\"objContextDetails.sTimezone\"));\n                objActivityDateTime.setDateFromRest(objActivity.activity_date);\n\n                var arrData = [{\n                    arrItems: [{\n                        sLabel: _this3.get(\"_objStringsService\").getString(\"description\"),\n                        sValue: objActivity.description,\n                        bText: true\n                    }, {\n                        sLabel: _this3.get(\"_objStringsService\").getString(\"comment\"),\n                        sValue: objActivity.comment,\n                        bText: true\n                    }, {\n                        sLabel: _this3.get(\"_objStringsService\").getString(\"createdBy\"),\n                        sValue: objActivity.created_by_user_name,\n                        bText: true\n                    }, {\n                        sLabel: _this3.get(\"_objCandidateProfileStringsService\").getString(\"activityDate\"),\n                        sValue: objActivityDateTime.getDateTimeFormat(),\n                        bText: true\n                    }]\n                }];\n\n                var sIcon = null;\n                var sName = _this3.get(\"_objCandidateProfileStringsService\").getString(\"unknown\");\n\n                if (!a24Core.isEmpty(objLookupData)) {\n                    sIcon = objLookupData.icon;\n                    sName = objLookupData.name;\n                }\n\n                // Add an actvity entry\n                var objExpandingActivity = {\n                    sIcon: sIcon,\n                    sLabel: _this3.get(\"_objStringsService\").getHTMLTokenString(\"a24-string-html-dot-value\", sName, objActivity.created_by_user_name),\n                    sDate: sSeenDateFormatted,\n                    arrData: arrData\n                };\n\n                if (!a24Core.isEmpty(objThis.get(\"objActivityRestService.sContext\")) && (objThis.get(\"objActivityRestService.sContext\") === objThis.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\") || objThis.get(\"objActivityRestService.sContext\") === objThis.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY\"))) {\n                    // Check the linked entities for an EmailCommunicationMessage\n                    if (!a24Core.isEmpty(objActivity.linked_entities)) {\n                        var _loop = function _loop(i) {\n                            var objLinkedEntity = objActivity.linked_entities[i];\n                            objExpandingActivity.arrActions = [];\n                            if (objLinkedEntity.entity_type === \"EmailCommunicationMessage\") {\n                                // EmailCommunicationMessage found, adding action\n                                objExpandingActivity.arrActions.push({\n                                    sTitle: _this3.get(\"_objCandidateProfileStringsService\").getString(\"emailPreview\"),\n                                    sIcon: \"attachment\",\n                                    executeCardAction: function executeCardAction() {\n                                        _this3.set(\"_objEmailActivity\", {\n                                            sSubjectId: _this3.get(\"sCandidateId\"),\n                                            sLinkedEntityId: objLinkedEntity.entity_id,\n                                            sActivityId: objActivity._id,\n                                            sSubjectType: \"candidate\"\n                                        });\n                                        _this3.set(\"_bShowEmailMessagePopup\", true);\n                                    }\n                                });\n                                return \"break\";\n                            } else if (objLinkedEntity.entity_type === \"ChatConversation\") {\n                                objExpandingActivity.arrActions.push({\n                                    sTitle: _this3.get(\"_objCoreStrings\").getString(\"conversationPreview\"),\n                                    sIcon: \"open_in_browser\",\n                                    executeCardAction: function executeCardAction() {\n                                        _this3.set(\"_bShowReactPopup\", true);\n                                        _this3.set(\"_objReactPopupPostData\", {\n                                            type: \"trigger_route\",\n                                            data: {\n                                                route: \"agency/conversation/previewPopup\",\n                                                data: { conversationId: objLinkedEntity.entity_id }\n                                            }\n                                        });\n                                    }\n                                });\n                                return \"break\";\n                            } else if (objLinkedEntity.entity_type === \"CandidateNotifications\") {\n                                objExpandingActivity.arrActions.push({\n                                    sTitle: _this3.get(\"_objCoreStrings\").getString(\"notificationPreview\"),\n                                    sIcon: \"open_in_browser\",\n                                    executeCardAction: function executeCardAction() {\n                                        _this3.set(\"_objNotificationActivity\", {\n                                            sSubjectId: _this3.get(\"sCandidateId\"),\n                                            sLinkedEntityId: objLinkedEntity.entity_id,\n                                            sActivityId: objActivity._id,\n                                            sSubjectType: \"candidate\"\n                                        });\n                                        _this3.set(\"_bShowNotifcationsSentPopup\", true);\n                                    }\n                                });\n                                return \"break\";\n                            } else if (objLinkedEntity.entity_type === \"Order\" && !a24Core.isEmpty(objLinkedEntity.entity_id) && objThis.get(\"objActivityRestService.sContext\") === objThis.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY\")) {\n                                var iOrderId = objLinkedEntity.entity_id;\n                                objExpandingActivity.arrActions.push({\n                                    sTitle: _this3.get(\"_objCandidateProfileStringsService\").getString(\"openOrderInNewTab\"),\n                                    sIcon: \"open_in_new\",\n                                    executeCardAction: function executeCardAction() {\n                                        objThis._viewOrderInNewWindow(iOrderId);\n                                    }\n                                });\n                                return \"break\";\n                            }\n                        };\n\n                        for (var i = 0; i < objActivity.linked_entities.length; i++) {\n                            var _ret = _loop(i);\n\n                            if (_ret === \"break\") break;\n                        }\n                    }\n                }\n\n                arrActivities.push(objExpandingActivity);\n            });\n            return arrActivities;\n        },\n        _viewOrderInNewWindow: function _viewOrderInNewWindow(sOrderId) {\n            var sUrl = this.get(\"_sTriageBaseUrl\") + \"/views#agency-staffing-order-details;orderId=\" + sOrderId + \";cId=\" + this.get(\"_objNavigation\").get(\"sContextId\");\n\n            this._openLink(sUrl);\n        },\n        _openLink: function _openLink(sLink) {\n            window.open(sLink);\n        },\n        setAddPopup: function setAddPopup() {\n            var _this4 = this;\n\n            this.clearAllErrorMessages();\n            this.clearForm();\n            this.set(\"_bShowAddPopup\", true);\n\n            Ember.run.next(function () {\n                if (a24Core.isEmpty(_this4)) {\n                    return;\n                }\n                Ember.run.schedule(\"afterRender\", function () {\n                    _this4.set(\"_objOriginalData\", _this4.getPlainFormValueObject());\n                });\n            });\n        },\n        hidePopup: function hidePopup() {\n            if (this.get(\"_bPopupLoading\")) {\n                return;\n            }\n            // Check if the form has any unsaved data\n            var bDataMatches = a24Core.compareObjects(Ember, this.getPlainFormValueObject(), this.get(\"_objOriginalData\"));\n\n            if (bDataMatches) {\n                this.set(\"_bShowAddPopup\", false);\n            } else {\n                this.set(\"_bShowUnsavedData\", true);\n            }\n        },\n        getPayload: function getPayload() {\n            // Get the form data\n            var objFormData = a24Core.removeNullsFromValue(Ember, this.getPlainFormValueObject());\n\n            return objFormData;\n        },\n        setErrorResponse: function setErrorResponse(sCode, objError, sSnackbarMessage) {\n            if (sCode === \"MIN_LENGTH\") {\n                this.setResponseError(objError.arrPath, \"validationRestMinLength\");\n            } else if (sCode === \"ENUM_MISMATCH\") {\n                this.setResponseError(objError.arrPath, \"validationRestUnsupportedValue\");\n            } else {\n                this.get(\"_objSnackbarService\").showSnackbarMessage(sSnackbarMessage);\n            }\n\n            this.set(\"_bPopupLoading\", false);\n        },\n        setSuccessResponse: function setSuccessResponse(sSnackbarMessage) {\n            this.get(\"_objSnackbarService\").showSnackbarMessage(sSnackbarMessage);\n            this.set(\"_bPopupLoading\", false);\n            this.set(\"_bShowAddPopup\", false);\n\n            this.doServiceCalls();\n        },\n        onInputValueChanged: function onInputValueChanged(arrChildRef) {\n            var sLookup = arrChildRef.join(\".\");\n            if (sLookup === \"objChildren.activity_type\") {\n                if (!a24Core.isEmpty(this.get(sLookup + \".mValue.sValue\"))) {\n                    var mapActivityTypesDescription = this.get(\"_mapActivityTypeDescription\");\n                    var sActivityTypeDescription = mapActivityTypesDescription.get(this.get(sLookup + \".mValue.sValue\"));\n                    if (!a24Core.isEmpty(sActivityTypeDescription)) {\n                        this.set(\"_sActivityTypeSelected\", this.get(\"_objCandidateProfileStringsService\").getTokenString(\"selectedActivityTypes\", sActivityTypeDescription));\n                    } else {\n                        this.set(\"_sActivityTypeSelected\", this.get(\"_objCandidateProfileStringsService\").getTokenString(\"selectedActivityTypes\", \"-\"));\n                    }\n                } else {\n                    this.set(\"_sActivityTypeSelected\", this.get(\"_objCandidateProfileStringsService\").getTokenString(\"selectedActivityTypes\", \"-\"));\n                }\n            }\n        },\n        actions: {\n            // If the filter changes, we wish to reload the card\n            cardDatagridFilterChangeEvent: function cardDatagridFilterChangeEvent(sProperty, objValue) {\n                objValue = Ember.copy(objValue, true);\n                var objParams = objValue;\n                this.set(\"_iPage\", 1);\n                objParams.page = { mValue: 1 };\n                objParams.items_per_page = { mValue: this.get(\"_iPerPage\") };\n                if (!a24Core.isEmpty(objParams.activity_date_at)) {\n                    if (objParams.activity_date_at.bNotWithinLast === true) {\n                        objParams.activity_date_at_to = {\n                            mValue: objParams.activity_date_at.mValue.sFrom,\n                            bEncode: true\n                        };\n                    } else if (objParams.activity_date_at.bNotWithinNext === true) {\n                        objParams.activity_date_at_from = {\n                            mValue: objParams.activity_date_at.mValue.sTo,\n                            bEncode: true\n                        };\n                    } else {\n                        objParams.activity_date_at_from = {\n                            mValue: objParams.activity_date_at.mValue.sFrom,\n                            bEncode: true\n                        };\n                        objParams.activity_date_at_to = {\n                            mValue: objParams.activity_date_at.mValue.sTo,\n                            bEncode: true\n                        };\n                    }\n                    delete objParams.activity_date_at;\n                }\n                this.doServiceCalls(objParams);\n            },\n            cardDatagridPagerEvent: function cardDatagridPagerEvent(objPageQuery) {\n                objPageQuery = Ember.copy(objPageQuery, true);\n\n                var objQueryParams = this.get(\"_objQueryParams\");\n                objQueryParams.page = objPageQuery.page;\n                objQueryParams.items_per_page = objPageQuery.per_page;\n\n                this.doServiceCalls(objQueryParams);\n            },\n            onPopupConfirmationCancel: function onPopupConfirmationCancel() {\n                this.hidePopup();\n            },\n            onPopupConfirmationConfirm: function onPopupConfirmationConfirm() {\n                var _this5 = this;\n\n                // When the save button is clicked\n                var bHasError = this.doFullValidation();\n                if (!bHasError) {\n                    this.set(\"_bPopupLoading\", true);\n\n                    this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsService\").getTokenString(\"addingItem\", this.get(\"_objCandidateProfileStringsService\").getString(\"activity\")));\n\n                    var objPayload = this.getPayload();\n                    // call to save the person activity\n                    this.get(\"objActivityRestService\").createActivity(this, \"_objActivityPostPromise\", this.get(\"sCandidateId\"), objPayload, function () {\n                        _this5.setSuccessResponse(_this5.get(\"_objStringsService\").getTokenString(\"successAddItem\", _this5.get(\"_objCandidateProfileStringsService\").getString(\"activity\")));\n                    }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode, sStatus, objErrorThrown, objError) {\n                        _this5.setErrorResponse(sCode, objError, _this5.get(\"_objStringsService\").getTokenString(\"failAddItem\", _this5.get(\"_objCandidateProfileStringsService\").getString(\"activity\")));\n                    }));\n                }\n            },\n            onInputValueChangedAction: function onInputValueChangedAction(arrPath) {\n                this.onInputValueChanged(arrPath);\n            },\n            onPopupUnsavedConfirm: function onPopupUnsavedConfirm() {\n                this.set(\"_bShowUnsavedData\", false);\n                this.set(\"_bShowAddPopup\", false);\n            },\n            // If the custom action is clicked\n            customActionClicked: function customActionClicked(objItem) {\n                objItem.executeCardAction();\n            },\n\n            onEmailMessagePopupClose: function onEmailMessagePopupClose() {\n                this.set(\"_bShowEmailMessagePopup\", false);\n            },\n            onNotificationSentPopupClose: function onNotificationSentPopupClose() {\n                this.set(\"_bShowNotifcationsSentPopup\", false);\n            },\n            onRecievePopupData: function onRecievePopupData(objData) {\n                if (objData.type === \"app_ready\") {\n                    this.set(\"_bReactPopupLoading\", false);\n                } else if (objData.type === \"refresh\") {\n                    // for if we need to do refresh\n                } else if (objData.type === \"close\") {\n                    this.set(\"_bShowReactPopup\", false);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/candidate-compliance-exemptions\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/candidate-compliance-exemptions\"], function (exports, _didRenderChangesMixin, _candidateComplianceExemptions) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n    function _toConsumableArray(arr) {\n        if (Array.isArray(arr)) {\n            for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n                arr2[i] = arr[i];\n            }\n\n            return arr2;\n        } else {\n            return Array.from(arr);\n        }\n    }\n\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _candidateComplianceExemptions.default,\n        bDatagridLoading: false,\n        sCandidateId: null,\n        sCandidateName: null,\n        sUrlBase: null,\n        objQueryParams: null,\n        sContext: null,\n\n        _bPageLoading: false,\n        _bServerError: false,\n        _bReactPopupLoading: true,\n        _bReactPopupOpen: false,\n\n        _sIFrameUrl: \"\",\n\n        _objSelectedItem: null,\n        _objReactPopupPostData: null,\n\n        _arrSelectedItems: null,\n\n        _env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        _sReactGatewayUrl: Ember.computed.readOnly(\"_env.sReactGatewayUrl\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_env.sRestApiBaseUrl\"),\n\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objSSCoreStrings: Ember.inject.service(\"a24-strings-staffshift-core\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objCandidateProfileEnumsService: Ember.inject.service(\"a24-enums-candidate-profile\"),\n\n        _objReactEmberUtils: Ember.inject.service(\"react-ember-utils\"),\n        _objQueryParamBuilderService: Ember.inject.service(\"query-param-object-builder\"),\n        _objRestEntityActionSection: Ember.inject.service(\"rest-entity-action-section\"),\n        _objFabButtonService: Ember.inject.service(\"fab-button\"),\n\n        _getDefaultNowDateFilter: function _getDefaultNowDateFilter() {\n            var objNowDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n            objNowDate.setDateFromRestAllowTimeAlter(momentHelper.getCurrentDateString(a24Constants.DATE_FORMAT_REST_FORMAT));\n\n            return objNowDate.getDateTimeFormat();\n        },\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"_sIFrameUrl\", this.get(\"_sReactGatewayUrl\"));\n\n            var sDefaultNowDate = this._getDefaultNowDateFilter();\n            if (a24Core.isEmpty(this.get(\"objQueryParams.effective_to.sValue\"))) {\n                this.set(\"objQueryParams.effective_toFrom.sValue\", sDefaultNowDate);\n            }\n\n            this._doServiceCalls();\n        },\n\n        _doServiceCalls: function _doServiceCalls() {\n            this.set(\"_bPageLoading\", true);\n\n            var sContextId = this.get(\"_objNavigation.sContextId\");\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/\" + this.get(\"sContext\") + \"/\" + sContextId + \"/candidate-type\");\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: { mValue: 1000 },\n                name: {\n                    bSortBy: true,\n                    mValue: \"asc\"\n                }\n            });\n\n            var sCandidateTypesEndpoint = this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl();\n\n            var objPromiseCandidateTypes = this.get(\"_objReactEmberUtils\").makeReactApiRequest({\n                sEndpoint: sCandidateTypesEndpoint,\n                objOptions: {\n                    noAbortError: true,\n                    method: 'GET',\n                    fetchAll: true,\n                    useCache: 24,\n                    cacheTimeUnit: 'hours'\n                },\n                objParams: {}\n            });\n\n            var objPromiseEntityAction = this.get(\"_objRestEntityActionSection\").getEntityActionsForSection(this, \"_objPromiseEntityAction\", \"compliance-rule-exemption\", function () {}, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode , sStatus, objErrorThrown, objError*/{}));\n\n            var objPromiseList = {\n                _objCandidateTypesPromise: objPromiseCandidateTypes,\n                _objPromiseEntityAction: objPromiseEntityAction\n            };\n\n            var objThis = this;\n\n            var arrRequiredResponses = [\"_objCandidateTypesPromise\", \"_objPromiseEntityAction\"];\n\n            if (this.get(\"sContext\") === \"agency-group\") {\n                a24RestUrlConstruct.setBaseUrl(\"/v1/agency-group/\" + sContextId + \"/agency\");\n                a24RestUrlConstruct.addQueryParamObject({\n                    items_per_page: { mValue: 1000 }\n                });\n\n                var sAgenciesEndpoint = this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl();\n\n                var objAgenciesPromise = this.get(\"_objReactEmberUtils\").makeReactApiRequest({\n                    sEndpoint: sAgenciesEndpoint,\n                    objOptions: {\n                        noAbortError: true,\n                        method: 'GET',\n                        fetchAll: true,\n                        useCache: 24,\n                        cacheTimeUnit: 'hours'\n                    },\n                    objParams: {}\n                });\n\n                objPromiseList._objAgenciesPromise = objAgenciesPromise;\n                arrRequiredResponses.push(\"_objAgenciesPromise\");\n            }\n\n            Ember.copy(a24RSVP).configure(this, objPromiseList, [{\n                arrRequiredResponses: arrRequiredResponses,\n                funcOnComplete: function funcOnComplete(objResponses) {\n                    var arrCandidateTypes = [];\n                    var arrAgencies = [];\n                    if (!a24Core.isEmpty(objResponses._objPromiseEntityAction) && !a24Core.isEmpty(objResponses._objPromiseEntityAction.objResponse)) {\n                        objThis._setFabAction(objResponses._objPromiseEntityAction.objResponse);\n                    }\n\n                    if (objThis.get(\"sContext\") === \"agency-group\" && !a24Core.isEmpty(objResponses._objAgenciesPromise)) {\n                        arrAgencies = objResponses._objAgenciesPromise.objResponse;\n\n                        if (a24Core.isEmpty(arrAgencies)) {\n                            arrAgencies = [];\n                        }\n                    }\n\n                    if (!a24Core.isEmpty(objResponses._objCandidateTypesPromise)) {\n                        arrCandidateTypes = objResponses._objCandidateTypesPromise.objResponse;\n\n                        if (a24Core.isEmpty(arrCandidateTypes)) {\n                            arrCandidateTypes = [];\n                        }\n                    }\n                    if (!a24Core.isEmpty(objResponses._objCandidateTypesPromise)) {\n                        objThis._setupPageConfig(arrCandidateTypes, arrAgencies);\n                    }\n                }\n            }]);\n        },\n\n        _setFabAction: function _setFabAction(arrSectionActions) {\n            var _this = this;\n\n            var bAllowAction = false;\n            if (!a24Core.isEmpty(arrSectionActions)) {\n                var objSectionAction = arrSectionActions.find(function (objActionSection) {\n                    return objActionSection.entity_type === \"compliance-rule-exemption\";\n                });\n                var arrAllowedActions = [];\n                if (!a24Core.isEmpty(objSectionAction.actions)) {\n                    objSectionAction.actions.forEach(function (objItem) {\n                        if (objItem.allowed) {\n                            arrAllowedActions.push(objItem.action);\n                        }\n                    });\n                }\n                bAllowAction = arrAllowedActions.includes(\"create\");\n            }\n            if (bAllowAction) {\n                this.get(\"_objFabButtonService\").showFabButton(function () {\n                    _this.set(\"_bReactPopupOpen\", true);\n                    _this.set(\"_objReactPopupPostData\", {\n                        type: \"trigger_route\",\n                        data: {\n                            route: \"agency/compliance/ruleExemptions/addPopup\",\n                            data: {\n                                subjectId: _this.get(\"sCandidateId\"),\n                                subjectType: \"candidate\",\n                                headerName: _this.get(\"sCandidateName\")\n                            }\n                        }\n                    });\n                });\n            }\n        },\n\n        _setupPageConfig: function _setupPageConfig(arrCandidateTypes, arrAgencies) {\n            var objThis = this;\n\n            var arrAppliesTo = this.get(\"_objCandidateProfileEnumsService\").getList(\"appliesTo\");\n            var arrAppliesToOptions = [];\n            for (var i = 0; i < arrAppliesTo.length; i++) {\n                arrAppliesToOptions.push({\n                    sTitle: arrAppliesTo[i].sLabel,\n                    sValue: arrAppliesTo[i].sValue\n                });\n            }\n\n            var arrAgenciesOptions = [];\n            if (!a24Core.isEmpty(arrAgencies)) {\n                for (var l = 0; l < arrAgencies.length; l++) {\n                    arrAgenciesOptions.push({\n                        sTitle: arrAgencies[l].agency_details.display_name,\n                        sValue: arrAgencies[l].agency_id\n                    });\n                }\n            }\n\n            // This array contain the datagrid columns\n            var arrDataGridHeaderConfig = [{\n                iUniqueColNum: 1,\n                sTitle: this.get(\"_objStringsService\").getString(\"organisation\"),\n                sProperty: \"organisation_id\",\n                bStopColumnSort: true,\n                iWidth: 10,\n                bSilent: true,\n                sFilterType: \"suggest\",\n                bFilterOr: true,\n                sReactFilterRoute: \"datagrid/filters/client\",\n                arrReactFilterExtraDataProps: [\"index_types\"]\n            }, {\n                iUniqueColNum: 2,\n                sTitle: this.get(\"_objStringsService\").getString(\"organisation\"),\n                sProperty: \"organisation_name\",\n                bText: true,\n                iWidth: 10,\n                bStopFiltering: true,\n                bStopColumnSort: true\n            }, {\n                iUniqueColNum: 3,\n                sTitle: this.get(\"_objStringsCandidateProfile\").getString(\"site\"),\n                sProperty: \"site_id\",\n                bStopColumnSort: true,\n                iWidth: 10,\n                bSilent: true,\n                sFilterType: \"suggest\",\n                bFilterOr: true,\n                sReactFilterRoute: \"datagrid/filters/client\"\n            }, {\n                iUniqueColNum: 4,\n                sTitle: this.get(\"_objStringsCandidateProfile\").getString(\"site\"),\n                sProperty: \"site_name\",\n                bText: true,\n                iWidth: 15,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 5,\n                sTitle: this.get(\"_objStringsCandidateProfile\").getString(\"wardName\"),\n                sProperty: \"ward_name\",\n                bText: true,\n                iWidth: 15,\n                bStopFiltering: true,\n                bStopColumnSort: true\n            }, {\n                iUniqueColNum: 6,\n                sTitle: \"At Client\",\n                sProperty: \"at_client\",\n                bStopColumnSort: true,\n                iWidth: 10,\n                bSilent: true,\n                sFilterType: \"suggest\",\n                bFilterOr: true,\n                sReactFilterRoute: \"datagrid/filters/atClient\"\n            }, {\n                iUniqueColNum: 7,\n                sTitle: this.get(\"_objStringsCandidateProfile\").getString(\"appliesTo\"),\n                sProperty: \"applies_to\",\n                sFilterType: \"dropdownMulti\",\n                bMapping: true,\n                arrMappingData: arrAppliesToOptions,\n                iWidth: 10\n            }, {\n                iUniqueColNum: 8,\n                sTitle: this.get(\"_objStringsCandidateProfile\").getString(\"complianceRule\"),\n                sProperty: \"compliance_rule_id\",\n                sFilterType: \"suggest\",\n                sReactFilterRoute: \"datagrid/filterEditor/complianceRule\",\n                arrReactFilterExtraDataProps: [\"candidate_types\"],\n                iWidth: 10,\n                bSilent: true,\n                bFilterAnd: true,\n                bFilterOr: true\n            }, {\n                iUniqueColNum: 9,\n                sTitle: this.get(\"_objStringsCandidateProfile\").getString(\"complianceRule\"),\n                sProperty: \"compliance_rule_name\",\n                bText: true,\n                iWidth: 10,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 10,\n                sTitle: this.get(\"_objStringsCandidateProfile\").getString(\"effectiveFrom\"),\n                sProperty: \"effective_from\",\n                sFilterType: \"date\",\n                bDate: true,\n                bFilterAllowTime: true,\n                iWidth: 15\n            }, {\n                iUniqueColNum: 11,\n                sTitle: this.get(\"_objStringsCandidateProfile\").getString(\"effectiveTo\"),\n                sProperty: \"effective_to\",\n                sFilterType: \"date\",\n                bDate: true,\n                bFilterAllowTime: true,\n                iWidth: 15\n            }].concat(_toConsumableArray(this.get(\"sContext\") === \"agency-group\" ? [{\n                iUniqueColNum: 12,\n                sTitle: this.get(\"_objSSCoreStrings\").getString(\"agency\"),\n                sProperty: \"agency_id\",\n                sFilterType: \"dropdown\",\n                bMapping: true,\n                arrMappingData: arrAgenciesOptions,\n                iWidth: 10,\n                bSilent: true,\n                bStopColumnSort: true\n            }, {\n                iUniqueColNum: 13,\n                sTitle: this.get(\"_objSSCoreStrings\").getString(\"agency\"),\n                sProperty: \"agency_name\",\n                sFilterType: \"dropdown\",\n                bText: true,\n                bStopFiltering: true,\n                iWidth: 10\n            }] : [])).filter(Boolean);\n\n            var objPermanentQuery = {\n                candidate_id: {\n                    mValue: this.get(\"sCandidateId\"),\n                    sFitlerValue: this.get(\"sCandidateName\")\n                }\n            };\n\n            var arrSingleItemActions = [{\n                sTitle: this.get(\"_objStringsCandidateProfile\").getString(\"viewExemption\"),\n                sIcon: \"visibility\",\n                executeCardAction: function executeCardAction() {\n                    var objExemption = objThis.get(\"_arrSelectedItems\")[0];\n                    objThis._viewExemption(objExemption);\n                }\n            }];\n\n            this.set(\"_objDatagridConfig\", {\n                sDatagridHeader: this.get(\"_objStringsCandidateProfile\").getString(\"complianceExemptions\"),\n                iMaxHeight: 40 * 27,\n                bSelectColumn: true,\n                bEmitSelectRowEvent: true,\n                bHasReloadButton: true,\n                bEmitWillDoServiceCall: true,\n                index_types: [\"client_organisation\"],\n                candidate_types: arrCandidateTypes,\n                sReactIFrameUrl: this.get(\"_sReactGatewayUrl\"),\n                arrSingleItemSelectActions: arrSingleItemActions,\n                arrHeaderConfig: arrDataGridHeaderConfig,\n                objPermanentQuery: objPermanentQuery\n            });\n\n            this.set(\"_bPageLoading\", false);\n        },\n\n        _viewExemption: function _viewExemption(objExemption) {\n            this.set(\"_bReactPopupOpen\", true);\n            this.set(\"_objReactPopupPostData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"agency/compliance/ruleExemptions/viewPopup\",\n                    data: {\n                        complianceRuleExemptionId: objExemption.compliance_rule_exemption_id,\n                        rangeId: objExemption.range_id,\n                        agencyId: this.get(\"sContext\") === \"agency-group\" ? objExemption.agency_id : undefined\n                    }\n                }\n            });\n        },\n\n        _onItemsSelect: function _onItemsSelect(arrSelectedItems) {\n            if (!a24Core.isEmpty(arrSelectedItems) && arrSelectedItems.length === 1) {\n                this.set(\"_objSelectedItem\", arrSelectedItems[0]);\n            }\n            // Set the selected items\n            this.set(\"_arrSelectedItems\", arrSelectedItems);\n        },\n        _refresh: function _refresh() {\n            var _this2 = this;\n\n            this.set(\"_bReactPopupOpen\", false);\n            // Put the page in loading\n            this.set(\"_bPageLoading\", true);\n\n            Ember.run.next(function () {\n                if (a24Core.isEmpty(_this2)) {\n                    return;\n                }\n                Ember.run.schedule(\"afterRender\", function () {\n                    // Take page out of loading\n                    _this2.set(\"_bPageLoading\", false);\n                });\n            });\n        },\n        actions: {\n            cardDatagridTableNoneSelected: function cardDatagridTableNoneSelected() {\n                this._onItemsSelect(null);\n            },\n            cardDatagridTableOneSelected: function cardDatagridTableOneSelected(arrSelectedItems) {\n                this._onItemsSelect(arrSelectedItems);\n            },\n            cardDatagridTableMultiSelected: function cardDatagridTableMultiSelected(arrSelectedItems) {\n                this._onItemsSelect(arrSelectedItems);\n            },\n            cardDatagridTableCell: function cardDatagridTableCell() /*sColumnName, objRowData*/{},\n            onPageReload: function onPageReload() {\n                this._doServiceCalls();\n            },\n            onRecieveReactData: function onRecieveReactData(objData) {\n                if (objData.type === \"app_ready\") {\n                    this.set(\"_bReactPopupLoading\", false);\n                } else if (objData.type === \"refresh\") {\n                    this._refresh();\n                } else if (objData.type === \"close\") {\n                    this.set(\"_bReactPopupOpen\", false);\n                }\n            },\n            onWillDoServiceCall: function onWillDoServiceCall()\n            /*arrTableData,\n            objUrlConstantPart,\n            objFilterParamObject,\n            objTableParamObject,\n            iPage,\n            iPerPage,\n            objSuccessCallback,\n            objFailure,\n            objProject*/\n            {\n                if (!a24Core.isEmpty(this.get(\"onWillDoServiceCall\"))) {\n                    this.get(\"onWillDoServiceCall\").apply(undefined, arguments);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/candidate-dismissals\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/candidate-dismissals\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _didRenderChangesMixin, _candidateDismissals, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _candidateDismissals.default,\n        classNames: [\"candidate-dismissals\"],\n        objSettingsRestService: null,\n        sCandidateId: null,\n        objEmploymentDismissalsRestService: null,\n        _bLoading: false,\n        _objCandidateProfileEnumsService: Ember.inject.service(\"a24-enums-candidate-profile\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objEnumsService: Ember.inject.service(\"a24-enums\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _sPopupHeader: null,\n        _arrEmploymentDismissalsData: null,\n        _arrEmploymentDismissalsDataView: null,\n        _objOriginalData: null,\n        _objSpecialEditPopupAction: null,\n        _objEmploymentDissmisalsGetPromise: null,\n        _objEmploymentDissmisalsCreatePromise: null,\n        _objEmploymentDissmisalsUpdatePromise: null,\n        _objEmploymentDissmisalsDeletePromise: null,\n        _arrActionItems: null,\n        _bAllowEdit: true,\n        _bShowUnsavedData: false,\n        _bShowEditPopup: false,\n        _bPopupLoading: false,\n        _bServerError: false,\n        _arrReloadActions: null,\n        _arrYesNoRadioButtonItems: null,\n        _bShowTextArea: false,\n        _objDismissalSelected: null,\n        _bReason: false,\n        _sReason: null,\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n            this.set(\"objChildConfig\", {\n                \"objChildren.bDismissal\": function objChildrenBDismissal(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                },\n                \"objChildren.reason\": function objChildrenReason(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                }\n            });\n\n            this.set(\"_arrReloadActions\", [{\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"reload\"),\n                sIcon: \"refresh\",\n                executeCardAction: function executeCardAction() {\n                    _this.getCandidateEmploymentDismissals();\n                }\n            }]);\n\n            if (!this.get(\"objSettingsRestService.objSettings.employment_history_editable\")) {\n                this.set(\"_bAllowEdit\", false);\n            }\n\n            this.set(\"_objSpecialEditPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this.send(\"onPopupClose\");\n                }\n            });\n\n            this.set(\"_arrActionItems\", []);\n\n            var sPopupHeader = this.get(\"_objStringsService\").getTokenString(\"editItem\", this.get(\"_objCandidateProfileStringsService\").getString(\"dismissal\"));\n\n            this.set(\"_sPopupHeader\", sPopupHeader);\n\n            this.set(\"_arrYesNoRadioButtonItems\", this.get(\"_objEnumsService\").getList(\"yesNo\"));\n            this.getCandidateEmploymentDismissals();\n        },\n        onInputValueChanged: function onInputValueChanged(arrPathToInputMixin) {\n\n            var sLookup = arrPathToInputMixin.join(\".\");\n\n            if (sLookup === \"objChildren.bDismissal\") {\n                this.set(\"_bShowTextArea\", this.get(sLookup + \".mValue.sValue\") === this.get(\"_objStringsService\").getString(\"yes\"));\n            }\n        },\n        getCandidateEmploymentDismissals: function getCandidateEmploymentDismissals() {\n            var _this2 = this;\n\n            this.set(\"_bLoading\", true);\n            this.set(\"_bServerError\", false);\n\n            var sCandidateId = this.get(\"sCandidateId\");\n\n            this.get(\"objEmploymentDismissalsRestService\").getEmploymentDismissals(this, \"_objEmploymentDissmisalsGetPromise\", sCandidateId, function (arrData) {\n                _this2.getEmploymentDismissalsDone();\n                _this2.prepareForDisplay(arrData);\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n            function (sCode) {\n                if (sCode === \"500\" || sCode === \"502\" || sCode === \"503\" || sCode === \"504\") {\n                    _this2.set(\"_bServerError\", true);\n                    return;\n                }\n                _this2.getEmploymentDismissalsDone();\n                _this2.prepareForDisplay([]);\n            }));\n        },\n        getEmploymentDismissalsDone: function getEmploymentDismissalsDone() {\n            var _this3 = this;\n\n            if (this.get(\"_bAllowEdit\") && (this.get(\"objEmploymentDismissalsRestService.sContext\") === this.get(\"_objStaffshiftCoreConstants.CONTEXT_CANDIDATE\") || this.get(\"objEmploymentDismissalsRestService.sContext\") === this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\"))) {\n                this.set(\"_arrActionItems\", [{\n                    sTitle: this.get(\"_objStringsService\").getString(\"edit\"),\n                    sIcon: \"edit\",\n                    executeCardAction: function executeCardAction() {\n                        _this3.openEditPopup();\n                    }\n                }]);\n            }\n\n            this.set(\"_bLoading\", false);\n        },\n        setRadioButtonInputValue: function setRadioButtonInputValue(sProperty, bValue) {\n            if (bValue) {\n                this.set(sProperty, {\n                    sValue: this.get(\"_objStringsService\").getString(\"yes\"),\n                    sLabel: this.get(\"_objStringsService\").getString(\"yes\")\n                });\n            } else {\n                this.set(sProperty, {\n                    sValue: this.get(\"_objStringsService\").getString(\"no\"),\n                    sLabel: this.get(\"_objStringsService\").getString(\"no\")\n                });\n            }\n        },\n        prepareForDisplay: function prepareForDisplay(arrData) {\n            this.set(\"_arrEmploymentDismissalsData\", arrData);\n\n            var sDismisal = this.get(\"_objStringsService\").getString(\"no\");\n            if (!a24Core.isEmpty(arrData)) {\n                sDismisal = this.get(\"_objStringsService\").getString(\"yes\");\n            }\n\n            var arrItems = [{\n                sLabel: this.get(\"_objCandidateProfileStringsService\").getString(\"haveYouEverBeenDismissed\"),\n                sValue: sDismisal,\n                bText: true\n            }];\n\n            this.set(\"_arrEmploymentDismissalsDataView\", [{\n                arrItems: arrItems\n            }]);\n\n            if (!a24Core.isEmpty(arrData) && !a24Core.isEmpty(arrData[0]) && !a24Core.isEmpty(arrData[0].reason)) {\n                this.set(\"_bReason\", true);\n                this.set(\"_sReason\", arrData[0].reason);\n            } else {\n                this.set(\"_bReason\", false);\n            }\n        },\n        openEditPopup: function openEditPopup() {\n            var _this4 = this;\n\n            this.clearAllErrorMessages();\n            this.clearForm();\n            this.set(\"_bShowEditPopup\", true);\n            if (!a24Core.isEmpty(this.get(\"setBreadCrumbAction\"))) {\n                this.get(\"setBreadCrumbAction\")();\n            }\n\n            var arrEmploymentDismissalsData = this.get(\"_arrEmploymentDismissalsData\");\n            if (!a24Core.isEmpty(arrEmploymentDismissalsData)) {\n                // choose yes if not empty\n                this.setRadioButtonInputValue(\"_objDismissalSelected\", true);\n                this.get(\"objChildren\")[\"reason\"].setValueFromOutside(arrEmploymentDismissalsData[0].reason);\n            } else {\n                // choose no if empty response\n                this.setRadioButtonInputValue(\"_objDismissalSelected\", false);\n            }\n\n            Ember.run.next(function () {\n                if (a24Core.isEmpty(_this4)) {\n                    return;\n                }\n                Ember.run.schedule(\"afterRender\", function () {\n                    _this4.set(\"_objOriginalData\", _this4.getPlainFormValueObject());\n                });\n            });\n        },\n        getPayload: function getPayload() {\n            var objPayload = a24Core.removeNullsFromValue(Ember, this.getPlainFormValueObject());\n\n            // remove bDismissal\n            delete objPayload.bDismissal;\n\n            return objPayload;\n        },\n        createEmploymentDismissal: function createEmploymentDismissal() {\n            var _this5 = this;\n\n            this.set(\"_bPopupLoading\", true);\n\n            var sCandidateId = this.get(\"sCandidateId\");\n\n            this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsService\").getTokenString(\"updatingItem\", this.get(\"_objCandidateProfileStringsService\").getString(\"dismissal\")));\n\n            this.get(\"objEmploymentDismissalsRestService\").createEmploymentDismissal(this, \"_objEmploymentDissmisalsCreatePromise\", sCandidateId, this.getPayload(), function () {\n                _this5.get(\"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objStringsService\").getTokenString(\"successUpdateItem\", _this5.get(\"_objCandidateProfileStringsService\").getString(\"dismissal\")));\n                _this5.set(\"_bPopupLoading\", false);\n                _this5.set(\"_bShowEditPopup\", false);\n                _this5.getCandidateEmploymentDismissals();\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                _this5.get(\"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objStringsService\").getTokenString(\"failUpdateItem\", _this5.get(\"_objCandidateProfileStringsService\").getString(\"dismissal\")));\n\n                _this5.set(\"_bPopupLoading\", false);\n            }));\n        },\n        updateEmploymentDismissal: function updateEmploymentDismissal() {\n            var _this6 = this;\n\n            this.set(\"_bPopupLoading\", true);\n\n            var sCandidateId = this.get(\"sCandidateId\");\n            var arrEmploymentDismissalsData = this.get(\"_arrEmploymentDismissalsData\");\n            var sEmploymentDismissalId = arrEmploymentDismissalsData[0]._id;\n\n            this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsService\").getTokenString(\"updatingItem\", this.get(\"_objCandidateProfileStringsService\").getString(\"dismissal\")));\n\n            this.get(\"objEmploymentDismissalsRestService\").updateEmploymentDismissal(this, \"_objEmploymentDissmisalsUpdatePromise\", sCandidateId, sEmploymentDismissalId, this.getPayload(), function () {\n                _this6.get(\"_objSnackbarService\").showSnackbarMessage(_this6.get(\"_objStringsService\").getTokenString(\"successUpdateItem\", _this6.get(\"_objCandidateProfileStringsService\").getString(\"dismissal\")));\n                _this6.set(\"_bPopupLoading\", false);\n                _this6.set(\"_bShowEditPopup\", false);\n                _this6.getCandidateEmploymentDismissals();\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                _this6.get(\"_objSnackbarService\").showSnackbarMessage(_this6.get(\"_objStringsService\").getTokenString(\"failUpdateItem\", _this6.get(\"_objCandidateProfileStringsService\").getString(\"dismissal\")));\n\n                _this6.set(\"_bPopupLoading\", false);\n            }));\n        },\n        deleteEmploymentDismissal: function deleteEmploymentDismissal() {\n            var _this7 = this;\n\n            this.set(\"_bPopupLoading\", true);\n\n            var sCandidateId = this.get(\"sCandidateId\");\n            var arrEmploymentDismissalsData = this.get(\"_arrEmploymentDismissalsData\");\n            var sEmploymentDismissalId = arrEmploymentDismissalsData[0]._id;\n\n            this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsService\").getTokenString(\"updatingItem\", this.get(\"_objCandidateProfileStringsService\").getString(\"dismissal\")));\n\n            this.get(\"objEmploymentDismissalsRestService\").deleteEmploymentDismissal(this, \"_objEmploymentDissmisalsDeletePromise\", sCandidateId, sEmploymentDismissalId, function () {\n                _this7.get(\"_objSnackbarService\").showSnackbarMessage(_this7.get(\"_objStringsService\").getTokenString(\"successUpdateItem\", _this7.get(\"_objCandidateProfileStringsService\").getString(\"dismissal\")));\n                _this7.set(\"_bPopupLoading\", false);\n                _this7.set(\"_bShowEditPopup\", false);\n                _this7.getCandidateEmploymentDismissals();\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                _this7.get(\"_objSnackbarService\").showSnackbarMessage(_this7.get(\"_objStringsService\").getTokenString(\"failUpdateItem\", _this7.get(\"_objCandidateProfileStringsService\").getString(\"dismissal\")));\n\n                _this7.set(\"_bPopupLoading\", false);\n            }));\n        },\n        actions: {\n            onPopupClose: function onPopupClose() {\n                if (!this.get(\"_bPopupLoading\")) {\n                    var bDataMatches = a24Core.compareObjects(Ember, this.getPlainFormValueObject(), this.get(\"_objOriginalData\"));\n                    if (bDataMatches) {\n                        this.set(\"_bShowEditPopup\", false);\n                    } else {\n                        this.set(\"_bShowUnsavedData\", true);\n                    }\n                }\n            },\n\n            onPopupEditConfirm: function onPopupEditConfirm() {\n                this.clearAllErrorMessages();\n\n                if (!this.doFullValidation()) {\n                    var arrEmploymentDismissalsData = this.get(\"_arrEmploymentDismissalsData\");\n                    if (!a24Core.isEmpty(arrEmploymentDismissalsData) && this.get(\"objChildren.bDismissal.mValue.sValue\") === this.get(\"_objStringsService\").getString(\"no\")) {\n                        // delete\n                        this.deleteEmploymentDismissal();\n                    } else if (!a24Core.isEmpty(arrEmploymentDismissalsData) && this.get(\"objChildren.bDismissal.mValue.sValue\") === this.get(\"_objStringsService\").getString(\"yes\")) {\n                        // put with reason\n                        this.updateEmploymentDismissal();\n                    } else if (a24Core.isEmpty(arrEmploymentDismissalsData) && this.get(\"objChildren.bDismissal.mValue.sValue\") === this.get(\"_objStringsService\").getString(\"yes\")) {\n                        // post with reason\n                        this.createEmploymentDismissal();\n                    } else {\n                        // do nothing\n                        this.set(\"_bShowEditPopup\", false);\n                    }\n                }\n            },\n\n            onPopupUnsavedConfirm: function onPopupUnsavedConfirm() {\n                this.set(\"_bShowEditPopup\", false);\n                this.set(\"_bShowUnsavedData\", false);\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/candidate-equality-monitoring-section-component\", [\"exports\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/candidate-equality-monitoring-section-component\"], function (exports, _inputFormElement, _didRenderChangesMixin, _candidateEqualityMonitoringSectionComponent) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _candidateEqualityMonitoringSectionComponent.default,\n        sCandidateId: null,\n        objEqualityMonitoringRestService: null,\n        arrCandidateData: null,\n        bLoading: true,\n        _bPopupLoading: false,\n        arrActionItems: null,\n        bShowEditPopup: false,\n        bShowUnsavedData: false,\n        _objOriginalData: null,\n        objSelectedReligion: null,\n        objSelectedEthnicOrigin: null,\n        objSelectedSexualOrientation: null,\n        objSelectedDisabled: null,\n        sSelectedAgeGroup: null,\n        _objCandidateProfileEnumsService: Ember.inject.service(\"a24-enums-candidate-profile\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objEnumsService: Ember.inject.service(\"a24-enums\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objCandidateEqualityMonitoringGetPromise: null,\n        _objCandidateEqualityMonitoringUpdatePromise: null,\n        _objSpecialEditPopupAction: null,\n\n        _bServerError: false,\n        _arrReloadActions: null,\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.set(\"_arrReloadActions\", [{\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"reload\"),\n                sIcon: \"refresh\",\n                executeCardAction: function executeCardAction() {\n                    _this.getEqualityMonitorDetails();\n                }\n            }]);\n\n            if (a24Core.isEmpty(this.get(\"arrCandidateData\"))) {\n                this.set(\"arrCandidateData\", []);\n            }\n\n            this.set(\"_objSpecialEditPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this.send(\"onPopupClose\");\n                }\n            });\n\n            this.getEqualityMonitorDetails();\n\n            this.set(\"arrActionItems\", [{\n                sTitle: this.get(\"_objStringsService\").getString(\"edit\"),\n                sIcon: \"edit\",\n                executeCardAction: function executeCardAction() {\n                    _this.setEditPopupModal();\n                }\n            }]);\n\n            this.setInitialDropdownPopupData();\n\n            this.set(\"objChildConfig\", {\n                \"objChildren.religion\": function objChildrenReligion(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                },\n                \"objChildren.ethnic_origin\": function objChildrenEthnic_origin(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                },\n                \"objChildren.sexual_orientation\": function objChildrenSexual_orientation(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                },\n                \"objChildren.gender_identity\": function objChildrenGender_identity(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                }\n            });\n        },\n        prepareForDisplay: function prepareForDisplay(objData) {\n\n            var sReligion = null;\n            var sEthnicOrigin = null;\n            var sSexualOrientation = null;\n            var sGenderIdentity = null;\n            var sDisabled = null;\n\n            if (!a24Core.isEmpty(objData) && !a24Core.isEmpty(objData.religion)) {\n                sReligion = this.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"religion\", objData.religion);\n            }\n\n            if (!a24Core.isEmpty(objData) && !a24Core.isEmpty(objData.ethnic_origin)) {\n                sEthnicOrigin = this.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"ethnicOrigin\", objData.ethnic_origin);\n            }\n\n            if (!a24Core.isEmpty(objData) && !a24Core.isEmpty(objData.sexual_orientation)) {\n                sSexualOrientation = this.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"sexualOrientation\", objData.sexual_orientation);\n            }\n\n            if (!a24Core.isEmpty(objData) && !a24Core.isEmpty(objData.gender_identity)) {\n                sGenderIdentity = this.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"genderIdentity\", objData.gender_identity);\n            }\n\n            if (!a24Core.isEmpty(objData) && !a24Core.isEmpty(objData.disabled)) {\n                sDisabled = this.get(\"_objEnumsService\").getFrontendValue(\"disabled\", objData.disabled === true ? \"yes\" : \"no\");\n            }\n\n            return [{\n                sLabel: this.get(\"_objCandidateProfileStringsService\").getString(\"religion\"),\n                sValue: sReligion,\n                bText: true\n            }, {\n                sLabel: this.get(\"_objCandidateProfileStringsService\").getString(\"ethnicOrigin\"),\n                sValue: sEthnicOrigin,\n                bText: true\n            }, {\n                sLabel: this.get(\"_objCandidateProfileStringsService\").getString(\"sexualOrientation\"),\n                sValue: sSexualOrientation,\n                bText: true\n            }, {\n                sLabel: this.get(\"_objCandidateProfileStringsService\").getString(\"genderIdentity\"),\n                sValue: sGenderIdentity,\n                bText: true\n            }, {\n                sLabel: this.get(\"_objStringsService\").getString(\"disabled\"),\n                sValue: sDisabled,\n                bText: true\n            }];\n        },\n        _candidateDataSuccess: function _candidateDataSuccess(objData) {\n            if (!a24Core.isEmpty(objData)) {\n                this.set(\"arrCandidateData\", [{\n                    arrItems: this.prepareForDisplay(objData)\n                }]);\n                this.setSelectedPopupValues(objData);\n            }\n            this.set(\"bLoading\", false);\n        },\n        _candidateEqualityDataFailure: function _candidateEqualityDataFailure(sCode) {\n            if (sCode === \"500\" || sCode === \"502\" || sCode === \"503\" || sCode === \"504\") {\n                this.set(\"_bServerError\", true);\n                return;\n            }\n            this.set(\"bLoading\", false);\n        },\n        getEqualityMonitorDetails: function getEqualityMonitorDetails() {\n            this.set(\"bLoading\", true);\n            this.set(\"_bServerError\", false);\n\n            var sCandidateId = Ember.get(this, \"sCandidateId\");\n\n            var funcSuccessCallback = Ember.run.bind(this, this._candidateDataSuccess);\n            var funcFailureCallback = Ember.run.bind(this, this._candidateEqualityDataFailure);\n\n            this.get(\"objEqualityMonitoringRestService\").getEquality(this, \"_objCandidateEqualityMonitoringGetPromise\", sCandidateId, funcSuccessCallback, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n            funcFailureCallback));\n        },\n        setEditPopupModal: function setEditPopupModal() {\n            var _this2 = this;\n\n            this.clearAllErrorMessages();\n            this.set(\"bShowEditPopup\", true);\n            this.setSelectedPopupValues(this.get(\"_objOriginalData\"));\n            Ember.run.next(function () {\n                if (a24Core.isEmpty(_this2)) {\n                    return;\n                }\n                Ember.run.schedule(\"afterRender\", function () {\n                    _this2.set(\"_objOriginalData\", _this2.getPlainFormValueObject());\n                });\n            });\n        },\n        setInitialDropdownPopupData: function setInitialDropdownPopupData() {\n            this.set(\"_arrReligionDropdown\", this.get(\"_objCandidateProfileEnumsService\").getList(\"religion\"));\n            this.set(\"_arrEthnicOriginDropdown\", this.get(\"_objCandidateProfileEnumsService\").getList(\"ethnicOrigin\"));\n            this.set(\"_arrSexualOrientationDropdown\", this.get(\"_objCandidateProfileEnumsService\").getList(\"sexualOrientation\"));\n            this.set(\"_arrGenderIdentityDropdown\", this.get(\"_objCandidateProfileEnumsService\").getList(\"genderIdentity\"));\n            this.set(\"_arrDisabledDropdown\", this.get(\"_objEnumsService\").getList(\"disabled\"));\n        },\n        setSelectedPopupValues: function setSelectedPopupValues(objData) {\n            if (!a24Core.isEmpty(objData)) {\n                this.setProperties({\n                    objSelectedReligion: {\n                        sLabel: this.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"religion\", objData.religion),\n                        sValue: objData.religion\n                    },\n                    objSelectedEthnicOrigin: {\n                        sLabel: this.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"ethnicOrigin\", objData.ethnic_origin),\n                        sValue: objData.ethnic_origin\n                    },\n                    objSelectedSexualOrientation: {\n                        sLabel: this.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"sexualOrientation\", objData.sexual_orientation),\n                        sValue: objData.sexual_orientation\n                    },\n                    objSelectedGenderIdentity: {\n                        sLabel: this.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"genderIdentity\", objData.gender_identity),\n                        sValue: objData.gender_identity\n                    }\n                });\n                if (!a24Core.isEmpty(objData.disabled)) {\n                    this.set(\"objSelectedDisabled\", {\n                        sLabel: this.get(\"_objEnumsService\").getFrontendValue(\"disabled\", objData.disabled),\n                        sValue: objData.disabled === true || objData.disabled === \"yes\" ? \"yes\" : \"no\"\n                    });\n                } else {\n                    this.set(\"objSelectedDisabled\", {\n                        sValue: null\n                    });\n                }\n            }\n        },\n        getPayload: function getPayload(sCandidateId) {\n            var objPayload = a24Core.removeNullsFromValue(Ember, this.getPlainFormValueObject());\n            objPayload.candidate_id = sCandidateId;\n            if (objPayload.disabled === \"yes\") {\n                objPayload.disabled = true;\n            } else if (objPayload.disabled === \"no\") {\n                objPayload.disabled = false;\n            } else {\n                delete objPayload.disabled;\n            }\n            return objPayload;\n        },\n        updateEqualityMonitorDetails: function updateEqualityMonitorDetails() {\n            var _this3 = this;\n\n            var sCandidateId = Ember.get(this, \"sCandidateId\");\n\n            this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objCandidateProfileStringsService\").getString(\"updatingEqualityDetails\"));\n\n            this.get(\"objEqualityMonitoringRestService\").updateEquality(this, \"_objCandidateEqualityMonitoringUpdatePromise\", sCandidateId, this.getPayload(sCandidateId), function (objResult) {\n                Ember.run.next(function () {\n                    if (a24Core.isEmpty(_this3)) {\n                        return;\n                    }\n                    Ember.run.schedule(\"afterRender\", function () {\n                        _this3.set(\"_objOriginalData\", _this3.getPlainFormValueObject());\n                    });\n                });\n                _this3._candidateDataSuccess(objResult);\n                _this3.get(\"_objSnackbarService\").showSnackbarMessage(_this3.get(\"_objCandidateProfileStringsService\").getString(\"equalityDetailsUpdateSuccess\"));\n                _this3.set(\"_bPopupLoading\", false);\n                _this3.set(\"bShowEditPopup\", false);\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode, sStatus, objErrorThrown, objError) {\n                if (sCode === \"PATTERN\") {\n                    _this3.setResponseError(objError.arrPath, \"validationRestInvalidFormat\");\n                } else if (sCode === \"INVALID_TYPE\") {\n                    _this3.setResponseError(objError.arrPath, \"validationRestUnsupportedValue\");\n                } else {\n                    _this3.get(\"_objSnackbarService\").showSnackbarMessage(_this3.get(\"_objCandidateProfileStringsService\").getString(\"equalityDetailsUpdateFailure\"));\n                }\n                _this3.set(\"_bPopupLoading\", false);\n            }));\n        },\n\n\n        actions: {\n            onPopupClose: function onPopupClose() {\n\n                var bDataMatches = a24Core.compareObjects(Ember, this.getPlainFormValueObject(), this.get(\"_objOriginalData\"));\n                if (bDataMatches) {\n                    this.set(\"bShowEditPopup\", false);\n                } else {\n                    this.set(\"bShowUnsavedData\", true);\n                }\n            },\n            onPopupEditConfirm: function onPopupEditConfirm() {\n                var bHasErrors = this.doFullValidation();\n                if (!bHasErrors) {\n                    this.set(\"_bPopupLoading\", true);\n                    this.updateEqualityMonitorDetails();\n                }\n            },\n            onPopupUnsavedConfirm: function onPopupUnsavedConfirm() {\n                this.set(\"bShowEditPopup\", false);\n                this.set(\"bShowUnsavedData\", false);\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/candidate-exclusions\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/candidate-exclusions\"], function (exports, _didRenderChangesMixin, _candidateExclusions) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _candidateExclusions.default,\n        bDatagridLoading: false,\n        sCandidateId: null,\n        sUrlBase: null,\n        objQueryParams: null,\n\n        _bPageLoading: false,\n\n        _bServerError: false,\n        _arrFilterConfig: null,\n\n        _sIFrameUrl: \"\",\n        _bReactPopupOpen: false,\n        _bReactPopupLoading: false,\n        _objReactPopupPostData: null,\n        _objSelectedItem: null,\n        _arrSelectedItems: null,\n\n        _env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objCandidateProfileEnumsService: Ember.inject.service(\"a24-enums-candidate-profile\"),\n        _objReactEmberUtils: Ember.inject.service(\"react-ember-utils\"),\n        _objRestEntityAction: Ember.inject.service(\"rest-entity-action\"),\n        _sReactGatewayUrl: Ember.computed.readOnly(\"_env.sReactGatewayUrl\"),\n        _sClientApiBaseUrl: Ember.computed.readOnly(\"_env.sClientApiBaseUrl\"),\n        _objRestEntityActionSection: Ember.inject.service(\"rest-entity-action-section\"),\n        _objFabButtonService: Ember.inject.service(\"fab-button\"),\n\n        _arrComplaintType: null,\n        _objEntityActionPromise: null,\n        _bEntityActionPending: false,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"_sIFrameUrl\", this.get(\"_sReactGatewayUrl\"));\n            this._doServiceCalls();\n        },\n        _doServiceCalls: function _doServiceCalls() {\n            this.set(\"_bPageLoading\", true);\n            a24RestUrlConstruct.setBaseUrl('/v1/system/complaint-type');\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: { mValue: 1000 }\n            });\n\n            var sComplaintTypeEndpoint = this.get(\"_sClientApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl();\n\n            var objPromiseComplaintType = this.get(\"_objReactEmberUtils\").makeReactApiRequest({\n                sEndpoint: sComplaintTypeEndpoint,\n                objOptions: {\n                    noAbortError: true,\n                    method: 'GET',\n                    fetchAll: true,\n                    useCache: 24,\n                    cacheTimeUnit: 'hours'\n                },\n                objParams: {\n                    sortBy: 'name'\n                }\n            });\n\n            var objPromiseEntityAction = this.get(\"_objRestEntityActionSection\").getEntityActionsForSection(this, \"_objPromiseEntityAction\", \"client-initiated-exclusion\", function () {}, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode , sStatus, objErrorThrown, objError*/{}));\n\n            var objPromiseList = {\n                _objPromiseComplaintType: objPromiseComplaintType,\n                _objPromiseEntityAction: objPromiseEntityAction\n            };\n\n            var objThis = this;\n\n            Ember.copy(a24RSVP).configure(this, objPromiseList, [{\n                arrRequiredResponses: [\"_objPromiseComplaintType\", \"_objPromiseEntityAction\"],\n                funcOnComplete: function funcOnComplete(objResponses) {\n                    if (!a24Core.isEmpty(objResponses._objPromiseEntityAction) && !a24Core.isEmpty(objResponses._objPromiseEntityAction.objResponse)) {\n                        objThis._setFabAction(objResponses._objPromiseEntityAction.objResponse);\n                    }\n\n                    if (!a24Core.isEmpty(objResponses._objPromiseComplaintType) && !a24Core.isEmpty(objResponses._objPromiseComplaintType.objResponse)) {\n                        var arrComplaintType = objResponses._objPromiseComplaintType.objResponse;\n\n                        if (a24Core.isEmpty(arrComplaintType)) {\n                            arrComplaintType = [];\n                        }\n                        objThis.set(\"_arrComplaintType\", arrComplaintType);\n                        objThis._setupPageConfig(arrComplaintType);\n                    }\n                }\n            }]);\n        },\n        _setFabAction: function _setFabAction(arrSectionActions) {\n            var _this = this;\n\n            var bAllowAction = false;\n            if (!a24Core.isEmpty(arrSectionActions)) {\n                var objSectionAction = arrSectionActions.find(function (objActionSection) {\n                    return objActionSection.entity_type === \"exclusion\";\n                });\n                var arrAllowedActions = [];\n                if (!a24Core.isEmpty(objSectionAction.actions)) {\n                    objSectionAction.actions.forEach(function (objItem) {\n                        if (objItem.allowed) {\n                            arrAllowedActions.push(objItem.action);\n                        }\n                    });\n                }\n                bAllowAction = arrAllowedActions.includes(\"create_exclusion\");\n            }\n            if (bAllowAction) {\n                this.get(\"_objFabButtonService\").showFabButton(function () {\n                    _this.set(\"_bReactPopupOpen\", true);\n                    _this.set(\"_objReactPopupPostData\", {\n                        type: \"trigger_route\",\n                        data: {\n                            route: \"agency/client/complaints/clientInitiatedExclusions/addPopup\",\n                            data: {\n                                candidateName: _this.get(\"sCandidateName\"),\n                                candidateId: _this.get(\"sCandidateId\")\n                            }\n                        }\n                    });\n                });\n            }\n        },\n        _setupPageConfig: function _setupPageConfig(arrComplaintType) {\n            var objThis = this;\n\n            var arrClientType = this.get(\"_objCandidateProfileEnumsService\").getList(\"clientType\");\n            var arrClientTypeOptions = [];\n            for (var i = 0; i < arrClientType.length; i++) {\n                arrClientTypeOptions.push({\n                    sTitle: arrClientType[i].sLabel,\n                    sValue: arrClientType[i].sValue\n                });\n            }\n\n            var arrSeverity = this.get(\"_objCandidateProfileEnumsService\").getList(\"severity\");\n            var arrSeverityOptions = [];\n            for (var j = 0; j < arrSeverity.length; j++) {\n                arrSeverityOptions.push({\n                    sTitle: arrSeverity[j].sLabel,\n                    sValue: arrSeverity[j].sValue\n                });\n            }\n\n            var arrComplaintTypeOptions = [];\n            for (var k = 0; k < arrComplaintType.length; k++) {\n                arrComplaintTypeOptions.push({\n                    sTitle: arrComplaintType[k].name,\n                    sValue: arrComplaintType[k]._id\n                });\n            }\n\n            // This array contain the datagrid columns\n            var arrDataGridHeaderConfig = [{\n                iUniqueColNum: 1,\n                sTitle: this.get(\"_objStringsService\").getString(\"organisation\"),\n                sProperty: \"organisation_name\",\n                bText: true,\n                iWidth: 15,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 2,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"site\"),\n                sProperty: \"site_name\",\n                bText: true,\n                iWidth: 15,\n                bStopFiltering: true,\n                bStopColumnSort: true\n            }, {\n                iUniqueColNum: 3,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"site\"),\n                sProperty: \"site_id\",\n                bSilent: true,\n                sFilterType: \"suggest\",\n                bFilterOr: true,\n                sReactFilterRoute: \"datagrid/filters/client\",\n                funcFilterParseQueryValue: function funcFilterParseQueryValue(objQueryObjectParam) {\n                    var objQueryObject = Ember.copy(objQueryObjectParam, true);\n                    objQueryObject = objQueryObject[0];\n\n                    return objQueryObject;\n                }\n            }, {\n                iUniqueColNum: 4,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"ward\"),\n                sProperty: \"ward_name\",\n                bText: true,\n                iWidth: 15,\n                bStopFiltering: true,\n                bStopColumnSort: true\n            }, {\n                iUniqueColNum: 5,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"appliesTo\"),\n                sProperty: \"client_type\",\n                bMapping: true,\n                arrMappingData: arrClientTypeOptions,\n                iWidth: 10,\n                bStopFiltering: true,\n                bStopColumnSort: true\n            }, {\n                iUniqueColNum: 6,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"severity\"),\n                sProperty: \"severity\",\n                sFilterType: \"dropdownMulti\",\n                bHideEmptyCheck: true,\n                iWidth: 5,\n                bMapping: true,\n                arrMappingData: arrSeverityOptions,\n                bStopColumnSort: true\n            }, {\n                iUniqueColNum: 7,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"type\"),\n                sProperty: \"complaint_type_name\",\n                bText: true,\n                iWidth: 10,\n                bStopFiltering: true,\n                bStopColumnSort: true\n            }, {\n                iUniqueColNum: 8,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"type\"),\n                sProperty: \"complaint_type_id\",\n                bHideEmptyCheck: true,\n                bSilent: true,\n                sFilterType: \"dropdownMulti\",\n                bMapping: true,\n                arrMappingData: arrComplaintTypeOptions\n            }, {\n                iUniqueColNum: 9,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"dateExcluded\"),\n                sProperty: \"date_excluded\",\n                bHideEmptyCheck: true,\n                bDate: true,\n                sFilterType: \"date\",\n                bFilterAllowTime: false,\n                iWidth: 10,\n                bStopColumnSort: true\n            }, {\n                iUniqueColNum: 10,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"lifted\"),\n                sProperty: \"fully_lifted__status\",\n                bHideEmptyCheck: true,\n                bBool: true,\n                sFilterType: \"dropdown\",\n                bMapping: true,\n                arrMappingData: [{\n                    sValue: \"yes\",\n                    sTitle: this.get(\"_objStringsService\").getString(\"yes\")\n                }, {\n                    sValue: \"no\",\n                    sTitle: this.get(\"_objStringsService\").getString(\"no\")\n                }],\n                iWidth: 5,\n                bStopColumnSort: true\n            }];\n\n            var arrSingleItemActions = [{\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"viewExclusion\"),\n                sIcon: \"visibility\",\n                executeCardAction: function executeCardAction() {\n                    var objExclusion = objThis.get(\"_arrSelectedItems\")[0];\n                    objThis._viewExclusion(objExclusion._id);\n                }\n            }];\n\n            this.set(\"_arrSingleLoadingActions\", arrSingleItemActions);\n\n            this.set(\"_objDatagridConfig\", {\n                sDatagridHeader: this.get(\"_objCandidateProfileStringsService\").getString(\"exclusions\"),\n                iMaxHeight: 40 * 27,\n                bSelectColumn: true,\n                bEmitSelectRowEvent: true,\n                bHasReloadButton: true,\n                bEmitDidDoServiceCall: true,\n                bEmitWillDoServiceCall: true,\n                sReactIFrameUrl: this.get(\"_sReactGatewayUrl\"),\n                arrSingleItemSelectActions: arrSingleItemActions,\n                arrHeaderConfig: arrDataGridHeaderConfig,\n                bFormatDatesToContextTimezone: true\n            });\n\n            this.set(\"_bPageLoading\", false);\n        },\n\n        _viewExclusion: function _viewExclusion(sBookingRequestId) {\n            this.set(\"_bReactPopupOpen\", true);\n            this.set(\"_objReactPopupPostData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"agency/client/complaints/clientInitiatedExclusions/viewPopup\",\n                    data: {\n                        exclusionId: sBookingRequestId\n                    }\n                }\n            });\n        },\n\n        _doEntityActionCall: function _doEntityActionCall(arrExclusionIds) {\n            // Sets the loading state on the actions\n            //this.set(\"_objDatagridConfig.arrSingleItemSelectActions\", copy(this.get(\"_arrLoadingActions\"), true));\n            if (!a24Core.isEmpty(arrExclusionIds)) {\n                var objQuery = {\n                    entity_id: { mValue: arrExclusionIds.join(\",\") }\n                };\n\n                var objPromiseEntityActions = this.get(\"_objRestEntityAction\").getEntityActions(this, \"_objEntityActionPromise\", \"client-initiated-exclusion\", objQuery, function () {\n                    // Handled by RSVP\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"500\", \"502\", \"503\", \"504\"], function () /*sCode, sStatus, objErrorThrown, objError*/{}));\n\n                var objPromiseList = {\n                    _objEntityActions: objPromiseEntityActions\n                };\n\n                var arrRequiredResponses = [\"_objEntityActions\"];\n\n                var objThis = this;\n\n                Ember.copy(a24RSVP).configure(this, objPromiseList, [{\n                    arrRequiredResponses: arrRequiredResponses,\n                    funcOnComplete: function funcOnComplete(objResponses) {\n                        if (!a24Core.isEmpty(objResponses._objEntityActions) && !a24Core.isEmpty(objResponses._objEntityActions.objResponse)) {\n                            objThis.set(\"_bEntityActionPending\", false);\n                        }\n                    }\n                }]);\n            }\n        },\n        _onItemsSelect: function _onItemsSelect(arrSelectedItems) {\n            if (!a24Core.isEmpty(arrSelectedItems) && arrSelectedItems.length === 1) {\n                this.set(\"_objSelectedItem\", arrSelectedItems[0]);\n            }\n\n            // Set the selected items\n            this.set(\"_arrSelectedItems\", arrSelectedItems);\n        },\n        actions: {\n            cardDatagridTableNoneSelected: function cardDatagridTableNoneSelected() {\n                this._onItemsSelect(null);\n            },\n            cardDatagridTableOneSelected: function cardDatagridTableOneSelected(arrSelectedItems) {\n                this._onItemsSelect(arrSelectedItems);\n            },\n            cardDatagridTableMultiSelected: function cardDatagridTableMultiSelected(arrSelectedItems) {\n                this._onItemsSelect(arrSelectedItems);\n            },\n            cardDatagridTableCell: function cardDatagridTableCell() /*sColumnName, objRowData*/{},\n            onPageReload: function onPageReload() {\n                this._doServiceCalls();\n            },\n            onWillDoServiceCall: function onWillDoServiceCall(arrTableData, objUrlConstantPart, objFilterParamObject) {\n                this.set(\"_bEntityActionPending\", true);\n\n                if (!a24Core.isEmpty(objFilterParamObject.date_excluded)) {\n                    if (objFilterParamObject.date_excluded.bFrom) {\n                        objFilterParamObject.date_excluded_from = {\n                            mValue: encodeURIComponent(objFilterParamObject.date_excluded.mValue)\n                        };\n                    } else if (objFilterParamObject.date_excluded.bNotWithinLast) {\n\n                        objFilterParamObject.date_excluded_from = {\n                            mValue: encodeURIComponent(objFilterParamObject.date_excluded.mValue.sFrom)\n                        };\n                    } else if (objFilterParamObject.date_excluded.bNotWithinNext) {\n                        objFilterParamObject.date_excluded_to = {\n                            mValue: encodeURIComponent(objFilterParamObject.date_excluded.mValue.sTo)\n                        };\n                    } else if (objFilterParamObject.date_excluded.bTo) {\n                        objFilterParamObject.date_excluded_to = {\n                            mValue: encodeURIComponent(objFilterParamObject.date_excluded.mValue)\n                        };\n                    } else if (objFilterParamObject.date_excluded.bFromAndTo) {\n                        objFilterParamObject.date_excluded_from = {\n                            mValue: encodeURIComponent(objFilterParamObject.date_excluded.mValue.sFrom)\n                        };\n                        objFilterParamObject.date_excluded_to = {\n                            mValue: encodeURIComponent(objFilterParamObject.date_excluded.mValue.sTo)\n                        };\n                    }\n                    delete objFilterParamObject.date_excluded;\n                }\n                if (!a24Core.isEmpty(objFilterParamObject.fully_lifted__status)) {\n                    objFilterParamObject.fully_lifted_status = {\n                        mValue: objFilterParamObject.fully_lifted__status.mValue\n                    };\n                    delete objFilterParamObject.fully_lifted__status;\n                }\n            },\n            onDidDoServiceCall: function onDidDoServiceCall(arrTableData) {\n                var arrExclusionIds = [];\n                for (var i = 0; i < arrTableData.length; i++) {\n                    arrExclusionIds.push(arrTableData[i]._id);\n                }\n\n                this._doEntityActionCall(arrExclusionIds);\n            },\n            onRecieveReactData: function onRecieveReactData(objData) {\n                if (objData.type === \"app_ready\") {\n                    this.set(\"_bReactPopupLoading\", false);\n                } else if (objData.type === \"close\") {\n                    this.set(\"_bReactPopupOpen\", false);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/candidate-external-days-to-expiry\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/candidate-external-days-to-expiry\"], function (exports, _didRenderChangesMixin, _candidateExternalDaysToExpiry) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _candidateExternalDaysToExpiry.default,\n        bLoading: true,\n        arrExternalDaysToExpiryData: null,\n        _arrExternalDaysToExpiryDataView: null,\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        init: function init() {\n            this._super.apply(this, arguments);\n            this.prepareExternalDataForDisplay();\n        },\n        prepareExternalDataForDisplay: Ember.observer(\"arrExternalDaysToExpiryData\", function () {\n            var arrExternalDaysToExpiryData = this.get(\"arrExternalDaysToExpiryData\");\n            if (!a24Core.isEmpty(arrExternalDaysToExpiryData)) {\n                arrExternalDaysToExpiryData.sort(function (objA, objB) {\n                    if (objA.name < objB.name) {\n                        return -1;\n                    } else if (objA.name > objB.name) {\n                        return 1;\n                    }\n                    return 0;\n                });\n                this.set(\"_arrExternalDaysToExpiryDataView\", this._prepareForDisplay(arrExternalDaysToExpiryData));\n            }\n        }),\n        _prepareForDisplay: function _prepareForDisplay(arrExternalDaysToExpiry) {\n            var _this = this;\n\n            return arrExternalDaysToExpiry.map(function (objItem) {\n                var objDate = a24DateManager.createDate(_this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                var sDate = null;\n\n                if (!a24Core.isEmpty(objItem.value)) {\n                    var iDays = momentHelper.stringDiffInUnits(objItem.value, _this.get(\"_objLibConstants.DATE_FORMAT_ISO_FORMAT\"), objDate.getDateFormat(), _this.get(\"_objLibConstants.DATE_FORMAT\"), _this.get(\"_objLibConstants.MOMENT_TIME_DAYS\"));\n                    sDate = iDays + \" \" + _this.get(\"_objCandidateProfileStringsService\").getString(\"days\").toLowerCase();\n                } else {\n                    sDate = _this.get(\"_objCandidateProfileStringsService\").getString(\"never\");\n                }\n\n                return {\n                    sIcon: \"insert_drive_file\",\n                    sLabel: objItem.name,\n                    sExtra: _this.get(\"_objStringsService\").getHTMLTokenString(\"a24-string-html-dot-value\", _this.get(\"_objCandidateProfileStringsService\").getString(\"expiresIn\"), sDate)\n                };\n            });\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/candidate-external-documents\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/candidate-external-documents\"], function (exports, _didRenderChangesMixin, _candidateExternalDocuments) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _candidateExternalDocuments.default,\n        arrExternalDocumentsData: null,\n        _arrExternalDocumentsDataView: null,\n        _arrExternalDocumentsOrigData: null,\n        _bLoading: true,\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objDatagridConfig: null,\n        _arrFilterConfig: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"_arrFilterConfig\", [{\n                sTitle: this.get(\"_objStringsService\").getString(\"documentName\"),\n                sProperty: \"name\",\n                sFilterType: \"text\",\n                bHideEmptyCheck: true,\n                bText: true\n            }]);\n\n            this.prepareExternalDataForDisplay();\n        },\n        prepareExternalDataForDisplay: Ember.observer(\"arrExternalDocumentsData\", function () {\n            this.set(\"_bLoading\", false);\n            var arrExternalDocumentsData = this.get(\"arrExternalDocumentsData\");\n            if (!a24Core.isEmpty(arrExternalDocumentsData)) {\n                arrExternalDocumentsData.sort(function (objA, objB) {\n                    if (objA.name < objB.name) {\n                        return -1;\n                    } else if (objA.name > objB.name) {\n                        return 1;\n                    }\n                    return 0;\n                });\n\n                arrExternalDocumentsData = this._prepareForDisplay(arrExternalDocumentsData);\n\n                this.set(\"_arrExternalDocumentsDataView\", arrExternalDocumentsData);\n                this.set(\"_arrExternalDocumentsOrigData\", arrExternalDocumentsData);\n            }\n        }),\n        _prepareForDisplay: function _prepareForDisplay(arrDocuments) {\n            var _this = this;\n\n            return arrDocuments.map(function (objDocument) {\n                var sUpdatedDateFormatted = _this.get(\"_objStringsService\").getHTMLTokenString(\"a24-string-html-dot-value\", _this.get(\"_objCandidateProfileStringsService\").getString(\"lastUploaded\"), momentHelper.getTimeFromNow(objDocument.date, a24Constants.DATE_FORMAT_REST_FORMAT));\n\n                var objDate = a24DateManager.createDate(_this.get(\"_objUserSession\").get(\"objContextDetails.sTimezone\"));\n\n                objDate.setDateFromRest(objDocument.date);\n                var sDateLastUpdated = objDate.getDateTimeFormat();\n\n                var arrItems = [{\n                    sLabel: _this.get(\"_objStringsService\").getString(\"name\"),\n                    sValue: objDocument.name,\n                    bText: true\n                }, {\n                    sLabel: _this.get(\"_objCandidateProfileStringsService\").getString(\"lastUploadedDate\"),\n                    sValue: sDateLastUpdated,\n                    bText: true\n                }];\n\n                if (!a24Core.isEmpty(objDocument.expiry_date)) {\n                    var objExpiryDate = a24DateManager.createDate(_this.get(\"_objUserSession\").get(\"objContextDetails.sTimezone\"));\n\n                    objExpiryDate.setDateFromRest(objDocument.expiry_date);\n\n                    arrItems.push({\n                        sLabel: _this.get(\"_objCandidateProfileStringsService\").getString(\"expiryDate\"),\n                        sValue: objExpiryDate.getDateTimeFormat(),\n                        bText: true\n                    });\n                }\n\n                return {\n                    sIcon: \"insert_drive_file\",\n                    sLabel: objDocument.name,\n                    sExtra: sUpdatedDateFormatted,\n                    arrItems: [{\n                        arrItems: arrItems\n                    }]\n                };\n            });\n        },\n        filterDocuments: function filterDocuments(arrData, sFilterValue) {\n            // loop over data and filter documents\n            var arrExternalDocumentsData = [];\n            if (!a24Core.isEmpty(arrData)) {\n                arrData.forEach(function (objDocument) {\n                    if (objDocument.sLabel.toLowerCase().indexOf(sFilterValue.toLowerCase()) !== -1) {\n                        arrExternalDocumentsData.pushObject(objDocument);\n                    }\n                });\n            }\n\n            if (a24Core.isEmpty(arrExternalDocumentsData)) {\n                this.set(\"_arrExternalDocumentsDataView\", []);\n            } else {\n                this.set(\"_arrExternalDocumentsDataView\", arrExternalDocumentsData);\n            }\n        },\n        actions: {\n            cardDatagridFilterChangeEvent: function cardDatagridFilterChangeEvent(sProperty, objValue) {\n                var arrExternalDocumentsData = this.get(\"_arrExternalDocumentsOrigData\");\n                if (!a24Core.isEmpty(objValue.name)) {\n                    var sFilterValue = objValue.name.mValue;\n                    this.filterDocuments(arrExternalDocumentsData, sFilterValue);\n                } else {\n                    this.set(\"_arrExternalDocumentsDataView\", arrExternalDocumentsData);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/candidate-external-general\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/candidate-external-general\"], function (exports, _didRenderChangesMixin, _candidateExternalGeneral) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _candidateExternalGeneral.default,\n        arrExternalData: null,\n        bLoading: false,\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _arrExternalDataView: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.prepareExternalDataForDisplay();\n        },\n        prepareExternalDataForDisplay: Ember.observer(\"arrExternalData\", function () {\n            this.set(\"_bLoading\", false);\n            var arrExternalData = this.get(\"arrExternalData\");\n            this.set(\"_arrExternalDataView\", [{\n                arrItems: arrExternalData\n            }]);\n        })\n    });\n});","define(\"a24-ember-candidate-profile/components/candidate-external-verification\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/candidate-external-verification\"], function (exports, _didRenderChangesMixin, _candidateExternalVerification) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _candidateExternalVerification.default,\n        arrExternalVerificationData: null,\n        _arrExternalVerificationDataView: null,\n        _arrExternalVerificationDataOrig: null,\n        _arrHeaders: null,\n        _bLoading: true,\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objDatagridConfig: null,\n        _arrFilterConfig: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.prepareExternalDataForDisplay();\n        },\n        prepareExternalDataForDisplay: Ember.observer(\"arrExternalVerificationData\", function () {\n            this.set(\"_bLoading\", false);\n            var arrExternalVerificationData = this.get(\"arrExternalVerificationData\");\n            if (!a24Core.isEmpty(arrExternalVerificationData)) {\n                arrExternalVerificationData.sort(function (objA, objB) {\n                    if (objA.name < objB.name) {\n                        return -1;\n                    } else if (objA.name > objB.name) {\n                        return 1;\n                    }\n                    return 0;\n                });\n                arrExternalVerificationData = this._prepareForDisplay(arrExternalVerificationData);\n                this.set(\"_arrExternalVerificationDataView\", arrExternalVerificationData);\n                this.set(\"_arrExternalVerificationDataOrig\", arrExternalVerificationData);\n            }\n        }),\n        _prepareForDisplay: function _prepareForDisplay(arrExternalVerification) {\n            var _this = this;\n\n            return arrExternalVerification.map(function (objItem) {\n                return {\n                    sIcon: \"assignment\",\n                    sLabel: objItem.name,\n                    sExtra: objItem.value,\n                    arrItems: [{\n                        arrItems: [{\n                            sLabel: _this.get(\"_objStringsService\").getString(\"name\"),\n                            sValue: objItem.name,\n                            bText: true\n                        }, {\n                            sLabel: _this.get(\"_objCandidateProfileStringsService\").getString(\"verified\"),\n                            sValue: objItem.value,\n                            bText: true\n                        }]\n                    }]\n                };\n            });\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/candidate-info-section-component\", [\"exports\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/candidate-info-section-component\"], function (exports, _inputFormElement, _didRenderChangesMixin, _candidateInfoSectionComponent) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        _ENV: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        layout: _candidateInfoSectionComponent.default,\n        classNames: [\"candidate-info-section\"],\n        sCandidateId: null,\n        sUserId: null,\n        objSettingsRestService: null,\n        objBasicInfoRestService: null,\n        objCandidateTypeRestService: null,\n        objAvatarRestService: null,\n        objCandidateMetaRestService: null,\n        arrCandidateData: null,\n        bShowAvatar: true,\n        bShowOpenInNewTab: false,\n\n        _iTimesGetCalled: 0,\n        _iDelayTime: 1000,\n\n        _objAvatarGetPromise: null,\n        _objAvatarPutPromise: null,\n        _objAvatarDeletePromise: null,\n        _objMetaGetPromise: null,\n        _objFileReader: null,\n        _bAddAvatarUploading: false,\n        _sProfilePicHeader: \"\",\n        _sLoaderText: \"\",\n        _bScriptLoaded: false,\n        _objCropper: null,\n        _sProfileIcon: \"\",\n        _sChangeImage: \"\",\n        _bShowDeleteConfirm: false,\n        _bDeletePopupLoading: false,\n\n        _objMinDate: null,\n        _objMaxDate: null,\n        _bOpenProfilePic: false,\n        _bProfilePicLoading: true,\n        _bLoading: false,\n        _bShowUnsavedData: false,\n        _bAllowEditIdNumber: false,\n        _bAllowEditCandidateType: false,\n        _bShowEditPopup: false,\n        _bPopupLoading: false,\n        _bAllowEdit: true,\n        _objSelectedTitle: null,\n        _objSelectedGender: null,\n        _sPopupHeader: null,\n        _objBasicInfoData: null,\n        _objSpecialAddEditPopupAction: null,\n        _arrHeaderActions: null,\n        _arrTitleDropdown: null,\n        _arrGenderDropdown: null,\n        _objBasicInfoUpdatePromise: null,\n        _objBasicInfoGetPromise: null,\n        _objCandidateProfileCandidateTypePromise: null,\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objEnumsService: Ember.inject.service(\"a24-enums\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objCandidateProfileEnumsService: Ember.inject.service(\"a24-enums-candidate-profile\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objSSCoreStrings: Ember.inject.service(\"a24-strings-staffshift-core\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _bServerError: false,\n        _arrReloadActions: null,\n        _objSelectedCandidateType: null,\n        _arrCandidateTypeDropdown: null,\n        _objPromiseBasicInfoRestService: null,\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            var objMinDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n\n            var objMaxDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n\n            this.set(\"_sProfileIcon\", \"camera_alt\");\n            this.set(\"_sChangeImage\", this.get(\"_objCandidateProfileStringsService\").getString(\"changeProfilePic\"));\n\n            if (a24Core.isEmpty(this.get(\"_objFileReader\"))) {\n                this.set(\"_objFileReader\", new FileReader());\n            }\n\n            this.set(\"_sProfilePicHeader\", this.get(\"_objCandidateProfileStringsService\").getString(\"profilePicture\"));\n            this.set(\"_sLoaderText\", this.get(\"_objCandidateProfileStringsService\").getString(\"uploadingProfilePic\"));\n\n            objMinDate.subtractTimeFromDate(this.get(\"_objLibConstants.MOMENT_TIME_YEARS\"), 120);\n            objMaxDate.subtractTimeFromDate(this.get(\"_objLibConstants.MOMENT_TIME_YEARS\"), 16);\n\n            this.set(\"_objMinDate\", objMinDate);\n            this.set(\"_objMaxDate\", objMaxDate);\n\n            this.set(\"_arrReloadActions\", [{\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"reload\"),\n                sIcon: \"refresh\",\n                executeCardAction: function executeCardAction() {\n                    _this.getCandidateBasicInfo();\n                }\n            }]);\n\n            if (!this.get(\"objSettingsRestService.objSettings.profile_editable\")) {\n                this.set(\"_bAllowEdit\", false);\n            }\n\n            var sPopupHeader = this.get(\"_objStringsService\").getTokenString(\"editItem\", this.get(\"_objCandidateProfileStringsService\").getString(\"personalInfo\"));\n\n            this.set(\"_sPopupHeader\", sPopupHeader);\n\n            this.set(\"_objSpecialAddEditPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this.send(\"onPopupClose\");\n                }\n            });\n\n            var objValidationConfig = {};\n\n            objValidationConfig[\"objChildren.first_name\"] = function (objMixin) {\n                a24Validation.addMinLength(objMixin, 2);\n                a24Validation.addMaxLength(objMixin, 100);\n                a24Validation.addRequired(objMixin, true);\n            };\n\n            objValidationConfig[\"objChildren.last_name\"] = function (objMixin) {\n                a24Validation.addMinLength(objMixin, 2);\n                a24Validation.addMaxLength(objMixin, 100);\n                a24Validation.addRequired(objMixin, true);\n            };\n\n            objValidationConfig[\"objChildren.candidate_type_id\"] = function (objMixin) {\n                a24Validation.addRequired(objMixin, true);\n            };\n\n            objValidationConfig[\"objChildren.id_number\"] = function (objMixin) {\n                a24Validation.addMinLength(objMixin, 1);\n                a24Validation.addMaxLength(objMixin, 30);\n            };\n\n            this.set(\"objChildConfig\", objValidationConfig);\n\n            this.set(\"_arrGenderDropdown\", this.get(\"_objCandidateProfileEnumsService\").getList(\"genderBinary\"));\n\n            this.set(\"_arrTitleDropdown\", this.get(\"_objCandidateProfileEnumsService\").getList(\"title\"));\n\n            this.set(\"arrCandidateData\", []);\n\n            if (!this.get(\"_bIsCandidateContext\")) {\n                if (this.get(\"bShowAvatar\")) {\n                    this._getCandidateUserId();\n                } else {\n                    this.getCandidateBasicInfo();\n                }\n            } else {\n                this.set(\"sUserId\", this.get(\"_objUserSession\").objAuthData.context.sUserId);\n                this.getCandidateBasicInfo();\n            }\n        },\n\n        _getCandidateUserId: function _getCandidateUserId() {\n            var _this2 = this;\n\n            this.set(\"_bLoading\", true);\n            this.set(\"_bServerError\", false);\n\n            // This is temporary until the candidate object returns the avatar url\n            this.get(\"objCandidateMetaRestService\").getCandidateMeta(this, \"_objMetaGetPromise\", this.get(\"sCandidateId\"), function (objResponse) {\n                if (!a24Core.isEmpty(objResponse) && !a24Core.isEmpty(objResponse.user_id)) {\n                    _this2.set(\"sUserId\", objResponse.user_id);\n                }\n                _this2.getCandidateBasicInfo();\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n            function (sCode) {\n                if (sCode === \"500\" || sCode === \"502\" || sCode === \"503\" || sCode === \"504\") {\n                    _this2.set(\"_bServerError\", true);\n                    return;\n                }\n\n                _this2.set(\"sUserId\", \"\");\n                // this is so that we can just go through to get the candidate info. Dont want to block the candidate\n                _this2.getCandidateBasicInfo();\n            }));\n        },\n\n        _onLoadingChange: Ember.observer(\"_bLoading\", function () {\n            var _this3 = this;\n\n            if (this.get(\"_bLoading\")) {\n                this.set(\"_arrHeaderActions\", []);\n            } else {\n                var arrHeaderActions = [];\n\n                if (this.get(\"_bAllowEdit\")) {\n                    arrHeaderActions.push({\n                        sTitle: this.get(\"_objStringsService\").getString(\"edit\"),\n                        sIcon: \"edit\",\n                        executeCardAction: function executeCardAction() {\n                            _this3.openEditPopup();\n                        }\n                    });\n                }\n\n                if (this.get(\"bShowOpenInNewTab\")) {\n                    arrHeaderActions.push({\n                        sTitle: this.get(\"_objSSCoreStrings\").getString(\"openInNewTab\"),\n                        sIcon: \"open_in_new\",\n                        executeCardAction: function executeCardAction() {\n                            if (_this3.get(\"objBasicInfoRestService.sContext\") === _this3.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\")) {\n                                var sAgencyGroupLink = _this3.get(\"_objNavigation\").navigateWithinContext(\"candidate-search-view\", {\n                                    \"candidate-search-view\": [_this3.get(\"sCandidateId\")]\n                                }, null, true);\n                                _this3._openLink(sAgencyGroupLink);\n                            } else if (_this3.get(\"objBasicInfoRestService.sContext\") === _this3.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY\")) {\n                                var sAgencyLink = _this3.get(\"_objNavigation\").navigateWithinContext(\"agency-candidate-search-view\", {\n                                    \"agency-candidate-search-view\": [_this3.get(\"sCandidateId\")]\n                                }, null, true);\n                                _this3._openLink(sAgencyLink);\n                            }\n                        }\n                    });\n                }\n                this.set(\"_arrHeaderActions\", arrHeaderActions);\n            }\n        }).on(\"init\"),\n        _bIsCandidateContext: Ember.computed(\"objBasicInfoRestService.sContext\", function () {\n            return this.get(\"objBasicInfoRestService.sContext\") === this.get(\"_objStaffshiftCoreConstants.CONTEXT_CANDIDATE\");\n        }),\n        _openLink: function _openLink(sLink) {\n            window.open(sLink);\n        },\n        prepareForDisplay: function prepareForDisplay(objData) {\n            var sTitle = null;\n            var sGender = null;\n            var sFirstName = null;\n            var sLastName = null;\n            var sDOB = null;\n            var sIdNumber = null;\n            var sCandidateType = null;\n\n            if (!a24Core.isEmpty(objData) && !a24Core.isEmpty(objData.title)) {\n                sTitle = this.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"title\", objData.title);\n            }\n\n            if (!a24Core.isEmpty(objData) && !a24Core.isEmpty(objData.gender)) {\n                sGender = this.get(\"_objEnumsService\").getFrontendValue(\"gender\", objData.gender);\n            }\n\n            if (!a24Core.isEmpty(objData) && !a24Core.isEmpty(objData.first_name)) {\n                sFirstName = objData.first_name;\n            }\n\n            if (!a24Core.isEmpty(objData) && !a24Core.isEmpty(objData.last_name)) {\n                sLastName = objData.last_name;\n            }\n\n            if (!a24Core.isEmpty(objData) && !a24Core.isEmpty(objData.id_number)) {\n                sIdNumber = objData.id_number;\n            }\n\n            if (!a24Core.isEmpty(objData) && !a24Core.isEmpty(objData.date_of_birth)) {\n                var objDateOfBirth = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                objDateOfBirth.setDateFromRest(objData.date_of_birth, true);\n                sDOB = objDateOfBirth.getDateFormat();\n            }\n\n            if (!this.get(\"_bIsCandidateContext\") && !a24Core.isEmpty(objData) && !a24Core.isEmpty(objData.candidate_type_id)) {\n                var objSelectedCandidateType = this.get(\"_arrCandidateTypeDropdown\").findBy(\"sValue\", objData.candidate_type_id);\n\n                if (!a24Core.isEmpty(objSelectedCandidateType)) {\n                    sCandidateType = objSelectedCandidateType.sLabel;\n                }\n            }\n\n            var arrItems = [{\n                sLabel: this.get(\"_objStringsService\").getString(\"title\"),\n                sValue: sTitle,\n                bText: true\n            }, {\n                sLabel: this.get(\"_objStringsService\").getString(\"firstName\"),\n                sValue: sFirstName,\n                bText: true\n            }, {\n                sLabel: this.get(\"_objStringsService\").getString(\"lastName\"),\n                sValue: sLastName,\n                bText: true\n            }, {\n                sLabel: this.get(\"_objStringsService\").getString(\"dateOfBirth\"),\n                sValue: sDOB,\n                bDate: true\n            }, {\n                sLabel: this.get(\"_objStringsService\").getString(\"gender\"),\n                sValue: sGender,\n                bText: true\n            }];\n\n            var objIdNumberData = {\n                sLabel: this.get(\"_objCandidateProfileStringsService\").getString(\"idNumber\"),\n                sValue: sIdNumber,\n                bText: true\n            };\n\n            if (this.get(\"_bIsCandidateContext\") && !a24Core.isEmpty(sIdNumber)) {\n                arrItems.pushObject(objIdNumberData);\n            } else if (!this.get(\"_bIsCandidateContext\") && this.get(\"_objUserSession.objContextDetails.sCountryId\") === \"710\") {\n                arrItems.pushObject(objIdNumberData);\n                this.set(\"_bAllowEditIdNumber\", true);\n            }\n\n            if (!this.get(\"_bIsCandidateContext\")) {\n                this.set(\"_bAllowEditCandidateType\", true);\n\n                var objCandidateTypeData = {\n                    sLabel: this.get(\"_objCandidateProfileStringsService\").getString(\"candidateType\"),\n                    sValue: sCandidateType,\n                    bText: true\n                };\n\n                arrItems.pushObject(objCandidateTypeData);\n            } else {\n                this.set(\"_bAllowEditCandidateType\", false);\n            }\n\n            this.set(\"arrCandidateData\", [{\n                arrItems: arrItems\n            }]);\n        },\n\n        getCandidateBasicInfo: function getCandidateBasicInfo() {\n            var _this4 = this;\n\n            this.set(\"_bLoading\", true);\n            this.set(\"_bServerError\", false);\n\n            var objServiceCalls = {};\n            var arrRequiredResponses = [];\n\n            var objPromiseCandidateType = null;\n            if (!this.get(\"_bIsCandidateContext\") && a24Core.isEmpty(this.get(\"_arrCandidateTypeDropdown\"))) {\n                var sId = this.get(\"_objUserSession\").getUserContextReference().mId; // the agency or agency group id\n\n                objPromiseCandidateType = this.get(\"objCandidateTypeRestService\").getCandidateTypes(this, \"_objCandidateProfileCandidateTypePromise\", sId, function () {}, // handled in rsvp\n                a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode) {\n                    if (sCode === \"500\" || sCode === \"502\" || sCode === \"503\" || sCode === \"504\") {\n                        _this4.set(\"_bServerError\", true);\n                        return;\n                    }\n                    // Handle 404 for no candidate types\n                    if (sCode === \"404\") {\n                        _this4.set(\"_arrCandidateTypeDropdown\", []);\n                        _this4.set(\"_bLoading\", false);\n                    }\n                }));\n\n                objServiceCalls._objRestCandidateTypeProperty = objPromiseCandidateType;\n                arrRequiredResponses.push(\"_objRestCandidateTypeProperty\");\n            }\n\n            var _objPromiseBasicInfoRestService = this.get(\"objBasicInfoRestService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"sCandidateId\"), function () {}, // handled in rsvp\n            a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n            function (sCode) {\n                if (sCode === \"500\" || sCode === \"502\" || sCode === \"503\" || sCode === \"504\") {\n                    _this4.set(\"_bServerError\", true);\n                    return;\n                }\n                if (sCode === \"404\" || sCode === \"403\") {\n                    if (!a24Core.isEmpty(_this4.get(\"onGetBasicInfoFailure\"))) {\n                        _this4.get(\"onGetBasicInfoFailure\")(sCode);\n                        return;\n                    }\n                }\n\n                _this4.set(\"_objBasicInfoData\", null);\n                _this4.set(\"arrCandidateData\", null);\n                _this4.set(\"_bLoading\", false);\n            }));\n\n            if (!a24Core.isEmpty(this.get(\"sUserId\")) && this.get(\"bShowAvatar\")) {\n                var _objPromiseAvatarRestService = this.get(\"objAvatarRestService\").getAvatar(this, \"_objAvatarGetPromise\", this.get(\"sUserId\"), function () {}, // handled in rsvp\n                a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"500\" || sCode === \"502\" || sCode === \"503\" || sCode === \"504\") {\n                        _this4.set(\"_bServerError\", true);\n                        return;\n                    }\n\n                    _this4.set(\"_sAvatar\", \"\");\n                    _this4.set(\"_bLoading\", false);\n                }));\n                objServiceCalls._objRestAvatarProperty = _objPromiseAvatarRestService;\n                arrRequiredResponses.push(\"_objRestAvatarProperty\");\n            }\n\n            objServiceCalls._objRestBasicInfoProperty = _objPromiseBasicInfoRestService;\n            arrRequiredResponses.push(\"_objRestBasicInfoProperty\");\n\n            Ember.copy(a24RSVP).configure(this, objServiceCalls, [{\n                arrRequiredResponses: arrRequiredResponses,\n                funcOnComplete: function funcOnComplete(objResponses) {\n                    if (!a24Core.isEmpty(objResponses._objRestCandidateTypeProperty) && !a24Core.isEmpty(objResponses._objRestCandidateTypeProperty.objHeaders) && objResponses._objRestCandidateTypeProperty.objHeaders.statusText === \"abort\" || !a24Core.isEmpty(objResponses._objRestBasicInfoProperty) && !a24Core.isEmpty(objResponses._objRestBasicInfoProperty.objHeaders) && objResponses._objRestBasicInfoProperty.objHeaders.statusText === \"abort\" || !a24Core.isEmpty(objResponses._objRestAvatarProperty) && !a24Core.isEmpty(objResponses._objRestAvatarProperty.objHeaders) && objResponses._objRestAvatarProperty.objHeaders.statusText === \"abort\") {\n                        return;\n                    }\n\n                    if (!a24Core.isEmpty(objResponses._objRestCandidateTypeProperty) && !a24Core.isEmpty(objResponses._objRestCandidateTypeProperty.objResponse)) {\n                        var arrCandidateTypes = objResponses._objRestCandidateTypeProperty.objResponse;\n                        var arrCandidateTypesDropdown = [];\n                        for (var i = 0; i < arrCandidateTypes.length; i++) {\n                            if (!arrCandidateTypes[i].disabled) {\n                                var objCandidateTypeItem = {\n                                    sValue: arrCandidateTypes[i]._id + \"\",\n                                    sLabel: arrCandidateTypes[i].name\n                                };\n\n                                arrCandidateTypesDropdown.push(objCandidateTypeItem);\n                            }\n                        }\n\n                        _this4.set(\"_arrCandidateTypeDropdown\", arrCandidateTypesDropdown);\n                    }\n\n                    if (!a24Core.isEmpty(objResponses._objRestBasicInfoProperty) && !a24Core.isEmpty(objResponses._objRestBasicInfoProperty.objResponse)) {\n                        var objData = objResponses._objRestBasicInfoProperty.objResponse;\n                        _this4.set(\"_objBasicInfoData\", objData);\n                        if (!a24Core.isEmpty(_this4.get(\"onGetBasicInfoSuccess\"))) {\n                            _this4.get(\"onGetBasicInfoSuccess\")(objData);\n                        }\n                        if (!a24Core.isEmpty(objResponses._objRestAvatarProperty) && !a24Core.isEmpty(objResponses._objRestAvatarProperty.objResponse)) {\n                            var objAvatarData = objResponses._objRestAvatarProperty.objResponse;\n                            _this4.set(\"_sAvatar\", a24.getUserContextAvatarUrl(_this4.get(\"_ENV.sTriageBaseUrl\"), _this4.get(\"_objStaffshiftCoreConstants\"), objAvatarData.avatar_url));\n                        } else {\n                            _this4.set(\"_sAvatar\", \"\");\n                        }\n                        _this4.prepareForDisplay(objData);\n                        _this4.set(\"_bLoading\", false);\n                    } else {\n                        _this4.set(\"_objBasicInfoData\", null);\n                        _this4.set(\"arrCandidateData\", null);\n                        _this4.set(\"_bLoading\", false);\n                    }\n                }\n            }]);\n        },\n\n        _getRestAvatar: function _getRestAvatar(funcSuccess, funcFailure) {\n            this.get(\"objAvatarRestService\").getAvatar(this, \"_objAvatarGetPromise\", this.get(\"sUserId\"), funcSuccess, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n            funcFailure));\n        },\n\n        _getAvatarWithDelay: function _getAvatarWithDelay() {\n            var _this5 = this;\n\n            var funcSuccess = function funcSuccess(objResponse) {\n                if (!a24Core.isEmpty(objResponse)) {\n                    if (!a24Core.isEmpty(objResponse.avatar_url)) {\n                        _this5.set(\"_sAvatar\", a24.getUserContextAvatarUrl(_this5.get(\"_ENV.sTriageBaseUrl\"), _this5.get(\"_objStaffshiftCoreConstants\"), objResponse.avatar_url));\n                        _this5.set(\"_sProfileIcon\", \"camera_alt\");\n                        _this5.set(\"_sChangeImage\", _this5.get(\"_objCandidateProfileStringsService\").getString(\"changeProfilePic\"));\n                    } else {\n                        _this5.set(\"_sAvatar\", \"\");\n                        if (_this5.get(\"_iTimesGetCalled\") < 4) {\n                            _this5.set(\"_iTimesGetCalled\", _this5.get(\"_iTimesGetCalled\") + 1);\n                            Ember.run.later(_this5, _this5._getAvatarWithDelay, _this5.get(\"_iDelayTime\"));\n                        } else {\n                            _this5.get(\"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objCandidateProfileStringsService\").getString(\"avatarFailedToRetrieve\"));\n                            _this5.set(\"_sChangeImage\", _this5.get(\"_objCandidateProfileStringsService\").getString(\"reloadImage\"));\n                            _this5.set(\"_sProfileIcon\", \"refresh\");\n                        }\n                    }\n                } else {\n                    _this5.set(\"_sAvatar\", \"\");\n                    _this5.get(\"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objCandidateProfileStringsService\").getString(\"avatarFailedToRetrieve\"));\n                    _this5.set(\"_sChangeImage\", _this5.get(\"_objCandidateProfileStringsService\").getString(\"reloadImage\"));\n                    _this5.set(\"_sProfileIcon\", \"refresh\");\n                }\n            };\n\n            var funcFailure = function funcFailure(sCode) {\n                if (sCode === \"500\" || sCode === \"502\" || sCode === \"503\" || sCode === \"504\") {\n                    _this5.set(\"_bServerError\", true);\n                    return;\n                }\n                _this5.set(\"_sAvatar\", \"\");\n                _this5.get(\"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objCandidateProfileStringsService\").getString(\"avatarFailedToRetrieve\"));\n                _this5.set(\"_sChangeImage\", _this5.get(\"_objCandidateProfileStringsService\").getString(\"reloadImage\"));\n                _this5.set(\"_sProfileIcon\", \"refresh\");\n                _this5.set(\"_bLoading\", false);\n            };\n            this._getRestAvatar(funcSuccess, funcFailure);\n        },\n\n        _getAvatar: function _getAvatar() {\n            var _this6 = this;\n\n            var funcSuccess = function funcSuccess(objResponse) {\n                if (!a24Core.isEmpty(objResponse)) {\n                    if (!a24Core.isEmpty(objResponse.avatar_url)) {\n                        _this6.set(\"_sAvatar\", a24.getUserContextAvatarUrl(_this6.get(\"_ENV.sTriageBaseUrl\"), _this6.get(\"_objStaffshiftCoreConstants\"), objResponse.avatar_url));\n                        _this6.set(\"_sProfileIcon\", \"camera_alt\");\n                        _this6.set(\"_sChangeImage\", _this6.get(\"_objCandidateProfileStringsService\").getString(\"changeProfilePic\"));\n                    } else {\n                        _this6.set(\"_sAvatar\", \"\");\n                        _this6.get(\"_objSnackbarService\").showSnackbarMessage(_this6.get(\"_objCandidateProfileStringsService\").getString(\"avatarFailedToRetrieve\"));\n                        _this6.set(\"_sChangeImage\", _this6.get(\"_objCandidateProfileStringsService\").getString(\"reloadImage\"));\n                        _this6.set(\"_sProfileIcon\", \"refresh\");\n                    }\n                } else {\n                    _this6.set(\"_sAvatar\", \"\");\n                    _this6.get(\"_objSnackbarService\").showSnackbarMessage(_this6.get(\"_objCandidateProfileStringsService\").getString(\"avatarFailedToRetrieve\"));\n                    _this6.set(\"_sChangeImage\", _this6.get(\"_objCandidateProfileStringsService\").getString(\"reloadImage\"));\n                    _this6.set(\"_sProfileIcon\", \"refresh\");\n                }\n            };\n\n            var funcFailure = function funcFailure(sCode) {\n                if (sCode === \"500\" || sCode === \"502\" || sCode === \"503\" || sCode === \"504\") {\n                    _this6.set(\"_bServerError\", true);\n                    return;\n                }\n                _this6.set(\"_sAvatar\", \"\");\n                _this6.get(\"_objSnackbarService\").showSnackbarMessage(_this6.get(\"_objCandidateProfileStringsService\").getString(\"avatarFailedToRetrieve\"));\n                _this6.set(\"_sChangeImage\", _this6.get(\"_objCandidateProfileStringsService\").getString(\"reloadImage\"));\n                _this6.set(\"_sProfileIcon\", \"refresh\");\n                _this6.set(\"_bLoading\", false);\n            };\n            this._getRestAvatar(funcSuccess, funcFailure);\n        },\n\n        openEditPopup: function openEditPopup() {\n            var _this7 = this;\n\n            this.clearAllErrorMessages();\n            this.clearForm();\n\n            this.set(\"_bShowEditPopup\", true);\n            if (!a24Core.isEmpty(this.get(\"setBreadCrumbAction\"))) {\n                this.get(\"setBreadCrumbAction\")();\n            }\n\n            var objBasicInfoData = this.get(\"_objBasicInfoData\");\n\n            if (!a24Core.isEmpty(objBasicInfoData)) {\n                this.populateInputFields(objBasicInfoData);\n            }\n\n            Ember.run.next(function () {\n                if (a24Core.isEmpty(_this7)) {\n                    return;\n                }\n                Ember.run.schedule(\"afterRender\", function () {\n                    _this7.set(\"_objOriginalData\", _this7.getPlainFormValueObject());\n                });\n            });\n        },\n        populateInputFields: function populateInputFields(objData) {\n            if (!a24Core.isEmpty(objData)) {\n                this.get(\"objChildren.first_name\").setValueFromOutside(objData.first_name);\n                this.get(\"objChildren.last_name\").setValueFromOutside(objData.last_name);\n\n                if (this.get(\"_bAllowEditIdNumber\")) {\n                    this.get(\"objChildren.id_number\").setValueFromOutside(objData.id_number);\n                }\n\n                if (!a24Core.isEmpty(objData.date_of_birth)) {\n                    var objDate = a24DateManager.createDate(this.get(\"_objUserSession\").get(\"objContextDetails.sTimezone\"));\n                    objDate.setDateFromRest(objData.date_of_birth, true);\n\n                    this.get(\"objChildren.date_of_birth\").setValueFromOutside(objDate.getDateFormat());\n                }\n\n                if (!a24Core.isEmpty(objData.title)) {\n                    this.set(\"_objSelectedTitle\", {\n                        sLabel: this.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"title\", objData.title),\n                        sValue: objData.title\n                    });\n                }\n                if (!a24Core.isEmpty(objData.gender)) {\n                    this.set(\"_objSelectedGender\", {\n                        sLabel: this.get(\"_objEnumsService\").getFrontendValue(\"gender\", objData.gender),\n                        sValue: objData.gender\n                    });\n                }\n                if (!a24Core.isEmpty(objData.candidate_type_id)) {\n                    var objSelectedCandidateType = {\n                        \"sValue\": objData.candidate_type_id\n                    };\n\n                    this.set(\"_objSelectedCandidateType\", objSelectedCandidateType);\n                }\n            }\n        },\n        getPayload: function getPayload() {\n            var objData = a24Core.removeNullsFromValue(Ember, this.getPlainFormValueObject());\n\n            if (!a24Core.isEmpty(objData.date_of_birth)) {\n                var objDate = a24DateManager.createDate(this.get(\"_objUserSession\").get(\"objContextDetails.sTimezone\"));\n                objDate.setDateFromBrowser(objData.date_of_birth, a24Constants.DATE_FORMAT);\n\n                objData.date_of_birth = objDate.getDateStringForRest(true);\n            }\n\n            return objData;\n        },\n        setSuccessResponse: function setSuccessResponse(sSnackbarMessage) {\n            this.get(\"_objSnackbarService\").showSnackbarMessage(sSnackbarMessage);\n            this.set(\"_bPopupLoading\", false);\n            this.set(\"_bShowEditPopup\", false);\n            this.getCandidateBasicInfo();\n        },\n        setErrorResponse: function setErrorResponse(sCode, objError, sSnackbarMessage) {\n            if (sCode === \"MAX_LENGTH\") {\n                this.setResponseError(objError.arrPath, \"validationRestMaxLength\");\n            } else if (sCode === \"MIN_LENGTH\") {\n                this.setResponseError(objError.arrPath, \"validationRestMaxLength\");\n            } else if (sCode === \"PATTERN\" || sCode === \"INVALID_FORMAT\") {\n                if (objError.arrPath[0] === \"first_name\" || objError.arrPath[0] === \"last_name\") {\n                    this.setResponseError(objError.arrPath, \"invalidNameError\", false, false, this.get(\"_objCandidateProfileStringsService\"));\n                } else {\n                    this.setResponseError(objError.arrPath, \"validationRestInvalidFormat\");\n                }\n            } else if (sCode === \"ENUM_MISMATCH\") {\n                this.setResponseError(objError.arrPath, \"validationRestUnsupportedValue\");\n            } else {\n                this.get(\"_objSnackbarService\").showSnackbarMessage(sSnackbarMessage);\n            }\n\n            this.set(\"_bPopupLoading\", false);\n        },\n\n        _hexToBase64: function _hexToBase64(sString) {\n            var sFormattedString = sString.replace(/\\r|\\n/g, \"\").replace(/([\\da-fA-F]{2}) ?/g, \"0x$1 \").replace(/ +$/, \"\").split(\" \");\n\n            return btoa(String.fromCharCode.apply(null, sFormattedString));\n        },\n\n        _getPayload: function _getPayload(objFile, objBlob, funcSuccess) {\n            var _this8 = this;\n\n            var objReader = this.get(\"_objFileReader\");\n\n            objReader.onloadend = function (objEvent) {\n                if (objEvent.target.readyState === FileReader.DONE) {\n                    var objSpark = new SparkMD5.ArrayBuffer(objBlob);\n                    objSpark.append(objEvent.target.result);\n                    var sEtag = objSpark.end();\n                    var sMd5Digest = _this8._hexToBase64(sEtag);\n\n                    var objPayload = {\n                        name: \"avatar\",\n                        metadata: {\n                            //this is kb as backend uses this in kb. Note on documents its in bytes ugh...\n                            file_size: parseInt(objBlob.size / 1024),\n                            file_type: objBlob.type,\n                            etag: sEtag,\n                            md5_digest: sMd5Digest,\n                            original_file_name: objFile.name\n                        }\n                    };\n\n                    funcSuccess(objPayload);\n                }\n            };\n\n            objReader.readAsArrayBuffer(objBlob);\n        },\n\n        _createAvatar: function _createAvatar(objFile, objBlob, funcSuccess) {\n            var _this9 = this;\n\n            this._getPayload(objFile, objBlob, function (objPayload) {\n                _this9.get(\"_objSnackbarService\").showSnackbarMessage(_this9.get(\"_objStringsService\").getTokenString(\"addingItem\", _this9.get(\"_objCandidateProfileStringsService\").getString(\"profilePicture\")));\n\n                _this9.get(\"objAvatarRestService\").updateAvatar(_this9, \"_objAvatarPutPromise\", _this9.get(\"sUserId\"), objPayload, function (objResponse) {\n                    _this9.set(\"_bOpenProfilePic\", false);\n                    _this9.set(\"_bProfilePicLoading\", false);\n\n                    funcSuccess(objResponse);\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function () {\n                    _this9.get(\"_objSnackbarService\").showSnackbarMessage(_this9.get(\"_objCandidateProfileStringsService\").getString(\"uploadProfilePicFailure\"));\n\n                    _this9.set(\"_bProfilePicLoading\", false);\n                }));\n            });\n        },\n\n        _getXhrObject: function _getXhrObject() {\n            return $.ajaxSettings.xhr();\n        },\n\n        _uploadAvatar: function _uploadAvatar(objBlob, sSignedUploadUrl, objHeaders) {\n            var _this10 = this;\n\n            this.set(\"_bAddAvatarUploading\", true);\n\n            this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objCandidateProfileStringsService\").getString(\"uploadingProfilePic\"));\n\n            var funcXhr = function funcXhr() {\n                return Ember.run(function () {\n                    // get the native XmlHttpRequest object\n                    var objXhr = _this10._getXhrObject();\n                    // set the onprogress event handler\n                    objXhr.upload.onprogress = function (objEvent) {\n                        var iProgress = parseInt(objEvent.loaded / objEvent.total * 100);\n                        _this10.set(\"_iUploadProgress\", iProgress);\n                    };\n                    // return the customized object\n                    return objXhr;\n                });\n            };\n\n            this._performUpload(sSignedUploadUrl, objBlob, objBlob.type, objHeaders, funcXhr, Ember.run.bind(this, this._uploadAvatarSuccess), Ember.run.bind(this, this._uploadAvatarFailure));\n        },\n\n        _uploadAvatarSuccess: function _uploadAvatarSuccess(objErrorData, sStatus /* , objErrorThrown */) {\n            // We do not want to deal with an abort service call\n            if (sStatus === \"abort\" || a24Core.isEmpty(this)) {\n                return;\n            }\n\n            this.set(\"_sProfileIcon\", \"hourglass_empty\");\n            this.set(\"_sChangeImage\", this.get(\"_objCandidateProfileStringsService\").getString(\"imagePreparing\"));\n            this.set(\"_sAvatar\", \"\");\n\n            this.set(\"_bAddAvatarUploading\", false);\n            this.set(\"_iUploadProgress\", 0);\n\n            this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objCandidateProfileStringsService\").getString(\"uploadProfilePicSuccess\"));\n            Ember.run.later(this, this._getAvatarWithDelay, this.get(\"_iDelayTime\"));\n        },\n\n        _uploadAvatarFailure: function _uploadAvatarFailure(objErrorData, sStatus /* , objErrorThrown */) {\n            // We do not want to deal with an abort service call\n            if (sStatus === \"abort\" || a24Core.isEmpty(this)) {\n                return;\n            }\n\n            this.set(\"_bAddAvatarUploading\", false);\n            this.set(\"_iUploadProgress\", 0);\n\n            this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objCandidateProfileStringsService\").getString(\"uploadProfilePicFailure\"));\n        },\n\n        _performUpload: function _performUpload(sUrl, arrBlob, sContentType, objHeaders, funcXhr, funcSuccess, funcFailure) {\n            /**\n             * This is done manually because of the precise nature of this call and also\n             * that because of how the upload is done, it is safe since the first get call\n             * will handle the spamming scenario, since if user spams service call it\n             * will stop the success from running thus stopping the upload calls aswell\n             */\n            return $.ajax({\n                url: sUrl,\n                type: \"PUT\",\n                data: arrBlob,\n                contentType: sContentType,\n                processData: false,\n                headers: objHeaders,\n                xhr: funcXhr,\n                success: funcSuccess,\n                error: funcFailure\n            });\n        },\n\n        _funcCreateObjectUrl: function _funcCreateObjectUrl(arrBlob) {\n            return URL.createObjectURL(arrBlob);\n        },\n\n        _deleteAvatar: function _deleteAvatar() {\n            var _this11 = this;\n\n            this.set(\"_bProfilePicLoading\", true);\n            this.set(\"_bDeletePopupLoading\", true);\n            this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objCandidateProfileStringsService\").getString(\"removingProfilePic\"));\n            this.get(\"objAvatarRestService\").deleteAvatar(this, \"_objAvatarDeletePromise\", this.get(\"sUserId\"), function () {\n                _this11.set(\"_sAvatar\", \"\");\n                _this11.set(\"_sProfileIcon\", \"camera_alt\");\n                _this11.set(\"_sChangeImage\", _this11.get(\"_objCandidateProfileStringsService\").getString(\"changeProfilePic\"));\n                _this11.get(\"_objSnackbarService\").showSnackbarMessage(_this11.get(\"_objCandidateProfileStringsService\").getString(\"removeProfilePicSuccess\"));\n                _this11.set(\"_bOpenProfilePic\", false);\n                _this11.set(\"_bProfilePicLoading\", false);\n                _this11.set(\"_bDeletePopupLoading\", false);\n                _this11.set(\"_bShowDeleteConfirm\", false);\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n            function (sCode) {\n                if (sCode === \"403\" || sCode === \"401\") {\n                    _this11.get(\"_objSnackbarService\").showSnackbarMessage(_this11.get(\"_objCandidateProfileStringsService\").getString(\"removePermissionError\"));\n                } else {\n                    _this11.get(\"_objSnackbarService\").showSnackbarMessage(_this11.get(\"_objCandidateProfileStringsService\").getString(\"removeProfilePicFailure\"));\n                }\n\n                _this11.set(\"_bOpenProfilePic\", false);\n                _this11.set(\"_bProfilePicLoading\", false);\n                _this11.set(\"_bDeletePopupLoading\", false);\n                _this11.set(\"_bShowDeleteConfirm\", false);\n            }));\n        },\n\n        actions: {\n            onPopupEditConfirm: function onPopupEditConfirm() {\n                var _this12 = this;\n\n                if (!this.doFullValidation()) {\n                    this.set(\"_bPopupLoading\", true);\n\n                    this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsService\").getTokenString(\"updatingItem\", this.get(\"_objCandidateProfileStringsService\").getString(\"personalInfo\")));\n\n                    this.get(\"objBasicInfoRestService\").updateBasicInfo(this, \"_objBasicInfoUpdatePromise\", this.get(\"sCandidateId\"), this.getPayload(), function () {\n                        _this12.setSuccessResponse(_this12.get(\"_objStringsService\").getTokenString(\"successUpdateItem\", _this12.get(\"_objCandidateProfileStringsService\").getString(\"personalInfo\")));\n                    }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode, sStatus, objErrorThrown, objError) {\n                        _this12.setErrorResponse(sCode, objError, _this12.get(\"_objStringsService\").getTokenString(\"failUpdateItem\", _this12.get(\"_objCandidateProfileStringsService\").getString(\"personalInfo\")));\n                    }));\n                }\n            },\n            onPopupClose: function onPopupClose() {\n                if (!this.get(\"_bPopupLoading\")) {\n                    var bDataMatches = a24Core.compareObjects(Ember, this.getPlainFormValueObject(), this.get(\"_objOriginalData\"));\n                    if (bDataMatches) {\n                        this.set(\"_bShowEditPopup\", false);\n                    } else {\n                        this.set(\"_bShowUnsavedData\", true);\n                    }\n                }\n            },\n            onPopupUnsavedConfirm: function onPopupUnsavedConfirm() {\n                this.set(\"_bShowEditPopup\", false);\n                this.set(\"_bShowUnsavedData\", false);\n            },\n            onProfilePicPopupToggle: function onProfilePicPopupToggle(bShow) {\n                if (this.get(\"_sProfileIcon\") === \"refresh\") {\n                    this.set(\"_sProfileIcon\", \"hourglass_empty\");\n                    this.set(\"_sChangeImage\", this.get(\"_objCandidateProfileStringsService\").getString(\"imagePreparing\"));\n                    this.set(\"_sAvatar\", \"\");\n                    this._getAvatar();\n                } else {\n                    if (this.get(\"_bIsCandidateContext\")) {\n                        this.set(\"_bOpenProfilePic\", bShow);\n                    }\n                }\n            },\n            onDeleteImage: function onDeleteImage() {\n                this._deleteAvatar();\n            },\n            onDeleteTextClicked: function onDeleteTextClicked() {\n                this.set(\"_bShowDeleteConfirm\", true);\n            },\n            onUploadImage: function onUploadImage(objFile, objBlob) {\n                var _this13 = this;\n\n                this.set(\"_bProfilePicLoading\", true);\n                this._createAvatar(objFile, objBlob, function (objResponse) {\n                    var objHeaders = objResponse.headers.reduce(function (objHeaders, objHeader) {\n                        objHeaders[objHeader.name] = objHeader.value;\n                        return objHeaders;\n                    }, {});\n\n                    _this13._uploadAvatar(objBlob, objResponse.signed_upload_url, objHeaders);\n                });\n            },\n            onPopupDeleteConfirm: function onPopupDeleteConfirm() {\n                this.set(\"_bDeletePopupLoading\", true);\n                this._deleteAvatar();\n            },\n            onPopupDeletePopupClose: function onPopupDeletePopupClose() {\n                if (this.get(\"_bDeletePopupLoading\")) {\n                    return;\n                }\n\n                this.set(\"_bShowDeleteConfirm\", false);\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/candidate-languages\", [\"exports\", \"a24-ember-candidate-profile/templates/components/candidate-languages\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _candidateLanguages, _didRenderChangesMixin, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _candidateLanguages.default,\n        objLanguagesRestService: null,\n        sCandidateId: \"\",\n        _bLoading: true,\n        _arrLanguages: null,\n        _objLanguagesGetPromise: null,\n        _objAddLanguageResponse: null,\n        _objEditLanguageResponse: null,\n        _objRemoveLanguageResponse: null,\n        _arrProficiencyOrder: null,\n        _objCandidateProfileEnumsService: Ember.inject.service(\"a24-enums-candidate-profile\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objSpecialAddEditPopupAction: null,\n        _bShowLanguagePopup: false,\n        _bPopupLoading: false,\n        _bShowUnsavedData: false,\n        _bShowConfirmRemoveData: false,\n        _bLoadingRemovePopup: false,\n\n        _bServerError: false,\n        _arrReloadActions: null,\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.set(\"_arrReloadActions\", [{\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"reload\"),\n                sIcon: \"refresh\",\n                executeCardAction: function executeCardAction() {\n                    _this.getLanguageDetails();\n                }\n            }]);\n\n            if (a24Core.isEmpty(this.get(\"_arrLanguages\"))) {\n                this.set(\"_arrLanguages\", []);\n            }\n\n            this.set(\"_objSpecialAddEditPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this.send(\"onPopupAddEditCancel\");\n                }\n            });\n\n            this.set(\"_arrHeaderActions\", [{\n                sTitle: this.get(\"_objStringsService\").getString(\"add\"),\n                sIcon: \"add\",\n                executeCardAction: function executeCardAction() {\n                    _this.setAddEditPopup();\n                }\n            }]);\n\n            this.set(\"objChildConfig\", {\n                \"objChildren.code\": function objChildrenCode(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                },\n                \"objChildren.proficiency\": function objChildrenProficiency(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                }\n            });\n\n            // Set the order of the of the language proficiency\n            this.set(\"_arrProficiencyOrder\", [this.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"languageProficiency\", \"native\"), this.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"languageProficiency\", \"read_write_speak\"), this.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"languageProficiency\", \"limited\")]);\n            this.getLanguageDetails();\n\n            this.set(\"_arrLanguageOptions\", this.get(\"_objCandidateProfileEnumsService\").getList(\"language\"));\n            this.set(\"_arrProficiencyOptions\", this.get(\"_objCandidateProfileEnumsService\").getList(\"languageProficiency\"));\n        },\n        prepareLanguageForDisplay: function prepareLanguageForDisplay(arrLanguages) {\n            var _this2 = this;\n\n            // Iterate over languages to build up an array of languages using locale values\n            var arrLanguageLocale = arrLanguages.map(function (objLanguage) {\n                return {\n                    sProficiency: _this2.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"languageProficiency\", objLanguage.proficiency),\n                    sLanguage: _this2.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"language\", objLanguage.code),\n                    sLanguageId: objLanguage._id,\n                    sProficiencyBackend: objLanguage.proficiency,\n                    sLanguageBackend: objLanguage.code\n                };\n            });\n\n            // We sort the languages by proficiency and then by language\n            arrLanguageLocale.sort(function (a, b) {\n                // Get the index of the proficiency order\n                var iProfIndexA = _this2.get(\"_arrProficiencyOrder\").indexOf(a.sProficiency);\n                var iProfIndexB = _this2.get(\"_arrProficiencyOrder\").indexOf(b.sProficiency);\n\n                // Sort items based on proficiency order\n                if (iProfIndexA < iProfIndexB) {\n                    return -1;\n                } else if (iProfIndexA > iProfIndexB) {\n                    return 1;\n                }\n                // Sort item based on language\n                if (a.sLanguage < b.sLanguage) {\n                    return -1;\n                } else if (a.sLanguage > b.sLanguage) {\n                    return 1;\n                }\n                return 0;\n            });\n\n            var objThis = this;\n            var funcCardActionEditExecute = function funcCardActionEditExecute(sId) {\n                return function () {\n                    objThis.setAddEditPopup(sId);\n                };\n            };\n            var funcCardActionRemoveExecute = function funcCardActionRemoveExecute(sId) {\n                return function () {\n                    objThis.removeLanguage(sId);\n                };\n            };\n\n            var arrItems = [];\n            // Create items for display on card.\n            for (var i = 0; i < arrLanguageLocale.length; i++) {\n\n                var objLanguage = arrLanguageLocale[i];\n\n                var arrActions = [];\n                arrActions.push({\n                    sTitle: this.get(\"_objStringsService\").getString(\"edit\"),\n                    sIcon: \"edit\",\n                    executeCardAction: funcCardActionEditExecute(objLanguage.sLanguageId)\n                });\n                arrActions.push({\n                    sTitle: this.get(\"_objStringsService\").getString(\"remove\"),\n                    sIcon: \"delete\",\n                    executeCardAction: funcCardActionRemoveExecute(objLanguage.sLanguageId)\n                });\n\n                arrItems.push({\n                    sLabel: objLanguage.sProficiency,\n                    sValue: objLanguage.sLanguage,\n                    sIcon: \"language\",\n                    arrActions: arrActions,\n                    sLanguageId: objLanguage.sLanguageId,\n                    sProficiencyBackend: objLanguage.sProficiencyBackend,\n                    sLanguageBackend: objLanguage.sLanguageBackend\n                });\n            }\n\n            return arrItems;\n        },\n        setAddEditPopup: function setAddEditPopup(sLanguageId) {\n            var _this3 = this;\n\n            this.clearAllErrorMessages();\n            this.clearForm();\n            this.set(\"_bPopupLoading\", false);\n\n            this.set(\"_sHeaderPopup\", this.get(\"_objCandidateProfileStringsService\").getString(\"addLanguage\"));\n            this.set(\"_bIsAdd\", true);\n\n            if (!a24Core.isEmpty(sLanguageId)) {\n                // set inputs based on id\n                this.set(\"_sHeaderPopup\", this.get(\"_objCandidateProfileStringsService\").getString(\"editLanguage\"));\n                this.set(\"_bIsAdd\", false);\n                this.set(\"_sLanguageId\", sLanguageId);\n\n                this.populateInputFields(sLanguageId);\n            }\n\n            this.set(\"_bShowLanguagePopup\", true);\n            if (!a24Core.isEmpty(this.get(\"setBreadCrumbAction\"))) {\n                this.get(\"setBreadCrumbAction\")();\n            }\n\n            Ember.run.next(function () {\n                if (a24Core.isEmpty(_this3)) {\n                    return;\n                }\n                Ember.run.schedule(\"afterRender\", function () {\n                    _this3.set(\"_objOriginalData\", _this3.getPlainFormValueObject());\n                });\n            });\n        },\n        removeLanguage: function removeLanguage(sLanguageId) {\n            this.set(\"_sLanguageId\", sLanguageId);\n            this.set(\"_bLoadingRemovePopup\", false);\n            this.set(\"_bShowConfirmRemoveData\", true);\n        },\n        getLanguageDetails: function getLanguageDetails() {\n            var _this4 = this;\n\n            this.set(\"_bLoading\", true);\n            this.set(\"_bServerError\", false);\n\n            var sCandidateId = this.get(\"sCandidateId\");\n\n            this.get(\"objLanguagesRestService\").getLanguages(this, \"_objLanguagesGetPromise\", sCandidateId, function (arrData) {\n                if (!a24Core.isEmpty(arrData)) {\n                    _this4.set(\"_arrLanguages\", _this4.prepareLanguageForDisplay(arrData));\n                } else {\n                    _this4.set(\"_arrLanguages\", []);\n                }\n                _this4.set(\"_bLoading\", false);\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode /*, sStatus, objErrorThrown, objError*/) {\n                if (sCode === \"500\" || sCode === \"502\" || sCode === \"503\" || sCode === \"504\") {\n                    _this4.set(\"_bServerError\", true);\n                    return;\n                }\n\n                // Clear data\n                _this4.set(\"_arrLanguages\", []);\n                _this4.set(\"_bLoading\", false);\n            }));\n        },\n        populateInputFields: function populateInputFields(sId) {\n            var arrLanguages = this.get(\"_arrLanguages\");\n\n            if (!a24Core.isEmpty(sId) && !a24Core.isEmpty(arrLanguages)) {\n                for (var i = 0; i < arrLanguages.length; i++) {\n                    if (arrLanguages[i].sLanguageId === sId) {\n                        this.set(\"objSelectedLanguage\", {\n                            sValue: arrLanguages[i].sLanguageBackend\n                        });\n                        this.set(\"objSelectedProficiency\", {\n                            sValue: arrLanguages[i].sProficiencyBackend\n                        });\n                    }\n                }\n            }\n        },\n        actions: {\n            onPopupAddEditCancel: function onPopupAddEditCancel() {\n                if (this.get(\"_bPopupLoading\")) {\n                    return;\n                }\n                // Check if the form has any unsaved data\n                var bDataMatches = a24Core.compareObjects(Ember, this.getPlainFormValueObject(), this.get(\"_objOriginalData\"));\n\n                if (bDataMatches) {\n                    this.set(\"_bShowLanguagePopup\", false);\n                } else {\n                    this.set(\"_bShowUnsavedData\", true);\n                }\n            },\n            onPopupUnsavedConfirm: function onPopupUnsavedConfirm() {\n                this.set(\"_bShowLanguagePopup\", false);\n                this.set(\"_bShowUnsavedData\", false);\n            },\n            onPopupRemoveConfirm: function onPopupRemoveConfirm() {\n                var _this5 = this;\n\n                this.set(\"_bLoadingRemovePopup\", true);\n\n                var sLanguageId = this.get(\"_sLanguageId\");\n                var sCandidateId = this.get(\"sCandidateId\");\n\n                this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objCandidateProfileStringsService\").getString(\"removingLang\"));\n\n                this.get(\"objLanguagesRestService\").deleteLanguage(this, \"_objRemoveLanguageResponse\", sCandidateId, sLanguageId, function () {\n                    _this5.set(\"_bShowConfirmRemoveData\", false);\n\n                    _this5.get(\"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objCandidateProfileStringsService\").getString(\"successRemoveLang\"));\n\n                    _this5.getLanguageDetails();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"404\"], function (sCode /*, sStatus, objErrorThrown, objError*/) {\n                    _this5.set(\"_bLoadingRemovePopup\", false);\n                    if (sCode === \"404\") {\n                        _this5.get(\"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objStringsService\").getString(\"removeFailedRefreshPage\"));\n                    } else {\n                        _this5.get(\"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objCandidateProfileStringsService\").getString(\"failRemoveLang\"));\n                    }\n                }));\n            },\n            onPopupRemoveCancel: function onPopupRemoveCancel() {\n                if (this.get(\"_bLoadingRemovePopup\")) {\n                    return;\n                }\n                this.set(\"_bShowConfirmRemoveData\", false);\n            },\n            onPopupAddEditConfirm: function onPopupAddEditConfirm() {\n                var _this6 = this;\n\n                this.clearAllErrorMessages();\n\n                if (!this.doFullValidation()) {\n                    this.set(\"_bPopupLoading\", true);\n\n                    var sCandidateId = this.get(\"sCandidateId\");\n                    var objData = this.getPlainFormValueObject();\n\n                    if (this.get(\"_bIsAdd\")) {\n\n                        this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objCandidateProfileStringsService\").getString(\"creatingLang\"));\n\n                        this.get(\"objLanguagesRestService\").createLanguage(this, \"_objAddLanguageResponse\", sCandidateId, objData, function () {\n                            _this6.get(\"_objSnackbarService\").showSnackbarMessage(_this6.get(\"_objCandidateProfileStringsService\").getString(\"successAddLang\"));\n\n                            _this6.set(\"_bShowLanguagePopup\", false);\n\n                            _this6.getLanguageDetails();\n                        }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n\n                            _this6.get(\"_objSnackbarService\").showSnackbarMessage(_this6.get(\"_objCandidateProfileStringsService\").getString(\"failAddLang\"));\n\n                            _this6.set(\"_bPopupLoading\", false);\n                        }));\n                    } else {\n                        this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objCandidateProfileStringsService\").getString(\"updatingLang\"));\n\n                        var sLanguageId = this.get(\"_sLanguageId\");\n\n                        this.get(\"objLanguagesRestService\").editLanguage(this, \"_objEditLanguageResponse\", sCandidateId, sLanguageId, objData, function () {\n                            _this6.get(\"_objSnackbarService\").showSnackbarMessage(_this6.get(\"_objCandidateProfileStringsService\").getString(\"successUpdateLang\"));\n\n                            _this6.set(\"_bShowLanguagePopup\", false);\n\n                            _this6.getLanguageDetails();\n                        }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode /*, sStatus, objErrorThrown, objError*/) {\n                            if (sCode === \"404\") {\n                                _this6.get(\"_objSnackbarService\").showSnackbarMessage(_this6.get(\"_objStringsService\").getString(\"updateFailedRefreshPage\"));\n                                _this6.set(\"_bPopupLoading\", false);\n                            } else {\n                                _this6.get(\"_objSnackbarService\").showSnackbarMessage(_this6.get(\"_objCandidateProfileStringsService\").getString(\"failUpdateLang\"));\n\n                                _this6.set(\"_bPopupLoading\", false);\n                            }\n                        }));\n                    }\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/candidate-misc-details\", [\"exports\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/candidate-misc-details\"], function (exports, _inputFormElement, _didRenderChangesMixin, _candidateMiscDetails) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _candidateMiscDetails.default,\n        objSettingsRestService: null,\n        sCandidateId: null,\n        objMiscDetailsRestService: null,\n        _bLoading: false,\n        _objCandidateProfileEnumsService: Ember.inject.service(\"a24-enums-candidate-profile\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _sPopupHeader: null,\n        _arrMiscData: null,\n        _objMiscDetailsData: null,\n        _objOriginalData: null,\n        _objSpecialEditPopupAction: null,\n        _objMiscDetailsGetPromise: null,\n        _objMiscDetailsUpdatePromise: null,\n        _arrActionItems: null,\n        _bAllowEdit: true,\n        _bShowUnsavedData: false,\n        _arrTransportTypeDropdownItems: null,\n        _objSelectedTransportType: null,\n        _bShowEditPopup: false,\n        _bPopupLoading: false,\n\n        _bServerError: false,\n        _arrReloadActions: null,\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.set(\"_arrReloadActions\", [{\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"reload\"),\n                sIcon: \"refresh\",\n                executeCardAction: function executeCardAction() {\n                    _this.getCandidateMiscDetails();\n                }\n            }]);\n\n            if (!this.get(\"objSettingsRestService.objSettings.profile_editable\")) {\n                this.set(\"_bAllowEdit\", false);\n            }\n\n            this.set(\"_objSpecialEditPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this.send(\"onPopupClose\");\n                }\n            });\n\n            this.set(\"_arrActionItems\", []);\n\n            var sPopupHeader = this.get(\"_objStringsService\").getTokenString(\"editItem\", this.get(\"_objCandidateProfileStringsService\").getString(\"miscDetails\"));\n\n            this.set(\"_sPopupHeader\", sPopupHeader);\n\n            this.set(\"_arrTransportTypeDropdownItems\", this.get(\"_objCandidateProfileEnumsService\").getList(\"transportType\"));\n\n            this.getCandidateMiscDetails();\n        },\n        getCandidateMiscDetails: function getCandidateMiscDetails() {\n            var _this2 = this;\n\n            this.set(\"_bLoading\", true);\n            this.set(\"_bServerError\", false);\n\n            var sCandidateId = this.get(\"sCandidateId\");\n\n            this.get(\"objMiscDetailsRestService\").getMiscDetails(this, \"_objMiscDetailsGetPromise\", sCandidateId, function (objData) {\n                _this2.getMiscDetailsDone();\n                _this2.prepareForDisplay(objData);\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n            function (sCode) {\n                if (sCode === \"500\" || sCode === \"502\" || sCode === \"503\" || sCode === \"504\") {\n                    _this2.set(\"_bServerError\", true);\n                    return;\n                }\n                _this2.getMiscDetailsDone();\n            }));\n        },\n        getMiscDetailsDone: function getMiscDetailsDone() {\n            var _this3 = this;\n\n            if (this.get(\"_bAllowEdit\")) {\n                this.set(\"_arrActionItems\", [{\n                    sTitle: this.get(\"_objStringsService\").getString(\"edit\"),\n                    sIcon: \"edit\",\n                    executeCardAction: function executeCardAction() {\n                        _this3.openEditPopup();\n                    }\n                }]);\n            }\n            this.set(\"_bLoading\", false);\n        },\n        prepareForDisplay: function prepareForDisplay(objData) {\n            var sTransportType = null;\n\n            if (!a24Core.isEmpty(objData) && !a24Core.isEmpty(objData.transport_type)) {\n                sTransportType = this.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"transportType\", objData.transport_type);\n            }\n\n            this.set(\"_objMiscDetailsData\", objData);\n\n            this.set(\"_arrMiscData\", [{\n                arrItems: [{\n                    sLabel: this.get(\"_objCandidateProfileStringsService\").getString(\"transportType\"),\n                    sValue: sTransportType,\n                    bText: true\n                }]\n            }]);\n        },\n        openEditPopup: function openEditPopup() {\n            var _this4 = this;\n\n            this.clearAllErrorMessages();\n            this.clearForm();\n\n            this.set(\"_bShowEditPopup\", true);\n            if (!a24Core.isEmpty(this.get(\"setBreadCrumbAction\"))) {\n                this.get(\"setBreadCrumbAction\")();\n            }\n\n            var objMiscDetailsData = this.get(\"_objMiscDetailsData\");\n\n            if (!a24Core.isEmpty(objMiscDetailsData)) {\n                this.setSelectedPopupValues(objMiscDetailsData);\n            }\n\n            Ember.run.next(function () {\n                if (a24Core.isEmpty(_this4)) {\n                    return;\n                }\n                Ember.run.schedule(\"afterRender\", function () {\n                    _this4.set(\"_objOriginalData\", _this4.getPlainFormValueObject());\n                });\n            });\n        },\n        setSelectedPopupValues: function setSelectedPopupValues(objData) {\n            if (!a24Core.isEmpty(objData) && !a24Core.isEmpty(objData.transport_type)) {\n                this.set(\"_objSelectedTransportType\", {\n                    sLabel: this.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"transportType\", objData.transport_type),\n                    sValue: objData.transport_type\n                });\n            }\n        },\n        getPayload: function getPayload() {\n            return a24Core.removeNullsFromValue(Ember, this.getPlainFormValueObject());\n        },\n        updateMiscDetails: function updateMiscDetails() {\n            var _this5 = this;\n\n            this.set(\"_bPopupLoading\", true);\n\n            var sCandidateId = this.get(\"sCandidateId\");\n\n            this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsService\").getTokenString(\"updatingItem\", this.get(\"_objCandidateProfileStringsService\").getString(\"miscDetails\")));\n\n            this.get(\"objMiscDetailsRestService\").updateMiscDetails(this, \"_objMiscDetailsUpdatePromise\", sCandidateId, this.getPayload(), function () {\n                _this5.get(\"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objStringsService\").getTokenString(\"successUpdateItem\", _this5.get(\"_objCandidateProfileStringsService\").getString(\"miscDetails\")));\n                _this5.set(\"_bPopupLoading\", false);\n                _this5.set(\"_bShowEditPopup\", false);\n                _this5.getCandidateMiscDetails();\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                _this5.get(\"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objStringsService\").getTokenString(\"failUpdateItem\", _this5.get(\"_objCandidateProfileStringsService\").getString(\"miscDetails\")));\n\n                _this5.set(\"_bPopupLoading\", false);\n            }));\n        },\n        actions: {\n            onPopupClose: function onPopupClose() {\n                if (!this.get(\"_bPopupLoading\")) {\n                    var bDataMatches = a24Core.compareObjects(Ember, this.getPlainFormValueObject(), this.get(\"_objOriginalData\"));\n                    if (bDataMatches) {\n                        this.set(\"_bShowEditPopup\", false);\n                    } else {\n                        this.set(\"_bShowUnsavedData\", true);\n                    }\n                }\n            },\n\n            onPopupEditConfirm: function onPopupEditConfirm() {\n                this.updateMiscDetails();\n            },\n\n            onPopupUnsavedConfirm: function onPopupUnsavedConfirm() {\n                this.set(\"_bShowEditPopup\", false);\n                this.set(\"_bShowUnsavedData\", false);\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/candidate-next-of-kin\", [\"exports\", \"a24-ember-candidate-profile/templates/components/candidate-next-of-kin\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _candidateNextOfKin, _didRenderChangesMixin, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _candidateNextOfKin.default,\n        sCandidateId: null,\n        objNextOfKinRestService: null,\n        _objNextofKinEditData: null,\n        _objSelectedCountry: null,\n        _objSelectedAddressType: null,\n        _arrCandidateData: null,\n        _arrHeaderActions: null,\n        _arrAddressTypeDropdown: null,\n        _arrCountryDropdown: null,\n        _bLoading: true,\n        _bPopupLoading: false,\n        _bShowUnsavedData: false,\n        _bIsAdd: false,\n        _bShowNextOfKinErrorMessagePopup: false,\n        _bShowDeleteConfirm: false,\n        _sHeaderPopup: null,\n        _objOriginalData: null,\n        _bShowAddEditPopup: false,\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objRestCountry: Ember.inject.service(\"rest-country\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objCandidateProfileEnumsService: Ember.inject.service(\"a24-enums-candidate-profile\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objEnumsService: Ember.inject.service(\"a24-enums\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objCandidateProfileNextOfKinPromise: null,\n        _objSpecialAddEditPopupAction: null,\n        _bAddressFieldsRequired: false,\n        _funcGetCountiesSuggestions: null,\n\n        _bIsUkSaCountry: false,\n        _sSelectedCountryCode: null,\n        _arrCounties: null,\n\n        _bServerError: false,\n        _arrReloadActions: null,\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            var sCountryId = this.get(\"_objUserSession.objContextDetails.sCountryId\");\n\n            var sCountryCode = this.get(\"_objRestCountry\").getCountryCodeFromCountryId(sCountryId);\n            // default country code is that of the context details\n            this.set(\"_sSelectedCountryCode\", sCountryCode);\n\n            this.set(\"_arrReloadActions\", [{\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"reload\"),\n                sIcon: \"refresh\",\n                executeCardAction: function executeCardAction() {\n                    _this.getNextOfKinDetails();\n                }\n            }]);\n\n            this.set(\"_objSpecialAddEditPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this.send(\"onPopupAddEditCancel\");\n                }\n            });\n\n            var objValidationConfig = {};\n\n            objValidationConfig[\"objChildren.relationship\"] = function (objMixin) {\n                a24Validation.addMinLength(objMixin, 2);\n                a24Validation.addMaxLength(objMixin, 100);\n                a24Validation.addRequired(objMixin, true);\n            };\n            objValidationConfig[\"objChildren.name\"] = function (objMixin) {\n                a24Validation.addMinLength(objMixin, 2);\n                a24Validation.addMaxLength(objMixin, 100);\n                a24Validation.addRequired(objMixin, true);\n            };\n            objValidationConfig[\"objChildren.contact_number\"] = function (objMixin) {\n                a24Validation.addRequired(objMixin, true);\n            };\n            objValidationConfig[\"objChildren.comment\"] = function (objMixin) {\n                a24Validation.addMinLength(objMixin, 2);\n                a24Validation.addMaxLength(objMixin, 100);\n            };\n            objValidationConfig[\"objChildren.address.type\"] = function (objMixin) {\n                objMixin.get(\"arrValidation\").pushObject(function () {\n                    if (_this._addressHasValues()) {\n                        a24Validation.addRequired(objMixin, true);\n                    } else {\n                        a24Validation.addRequired(objMixin, false);\n                    }\n                });\n            };\n            objValidationConfig[\"objChildren.address.address_line1\"] = function (objMixin) {\n                a24Validation.addMinLength(objMixin, 1);\n                a24Validation.addMaxLength(objMixin, 100);\n                objMixin.get(\"arrValidation\").pushObject(function () {\n                    if (_this._addressHasValues()) {\n                        a24Validation.addRequired(objMixin, true);\n                    } else {\n                        a24Validation.addRequired(objMixin, false);\n                    }\n                });\n            };\n            objValidationConfig[\"objChildren.address.address_line2\"] = function (objMixin) {\n                a24Validation.addMinLength(objMixin, 1);\n                a24Validation.addMaxLength(objMixin, 100);\n            };\n            objValidationConfig[\"objChildren.address.city\"] = function (objMixin) {\n                a24Validation.addMinLength(objMixin, 1);\n                a24Validation.addMaxLength(objMixin, 100);\n            };\n            objValidationConfig[\"objChildren.province_uksa\"] = function (objMixin) {\n                objMixin.get(\"arrValidation\").pushObject(function () {\n                    if (_this._addressHasValues()) {\n                        a24Validation.addRequired(objMixin, true);\n                    } else {\n                        a24Validation.addRequired(objMixin, false);\n                    }\n                });\n            };\n            objValidationConfig[\"objChildren.province_other\"] = function (objMixin) {\n                a24Validation.addMinLength(objMixin, 2);\n                a24Validation.addMaxLength(objMixin, 100);\n            };\n            objValidationConfig[\"objChildren.address.country_code\"] = function (objMixin) {\n                objMixin.get(\"arrValidation\").pushObject(function () {\n                    if (_this._addressHasValues()) {\n                        a24Validation.addRequired(objMixin, true);\n                    } else {\n                        a24Validation.addRequired(objMixin, false);\n                    }\n                });\n            };\n            objValidationConfig[\"objChildren.address.post_code\"] = function (objMixin) {\n                a24Validation.addMinLength(objMixin, 1);\n                a24Validation.addMaxLength(objMixin, 100);\n                objMixin.get(\"arrValidation\").pushObject(function () {\n                    if (_this._addressHasValues()) {\n                        a24Validation.addRequired(objMixin, true);\n                    } else {\n                        a24Validation.addRequired(objMixin, false);\n                    }\n                });\n            };\n\n            this.set(\"objChildConfig\", objValidationConfig);\n\n            if (a24Core.isEmpty(this.get(\"_arrCandidateData\"))) {\n                this.set(\"_arrCandidateData\", []);\n            }\n\n            this.set(\"_arrAddressTypeDropdown\", this.get(\"_objCandidateProfileEnumsService\").getList(\"addressType\"));\n            this.set(\"_arrCountryDropdown\", this.get(\"_objEnumsService\").getList(\"country\"));\n\n            this.getNextOfKinDetails();\n        },\n        _addressHasValues: function _addressHasValues() {\n            return !a24Core.isEmpty(this.get(\"objChildren\")[\"address.type\"].mValue) || !a24Core.isEmpty(this.get(\"objChildren\")[\"address.address_line1\"].mValue) || !a24Core.isEmpty(this.get(\"objChildren\")[\"address.address_line2\"].mValue) || !a24Core.isEmpty(this.get(\"objChildren\")[\"address.city\"].mValue) || !a24Core.isEmpty(this.get(\"objChildren\")[\"province_uksa\"].mValue) || !a24Core.isEmpty(this.get(\"objChildren\")[\"province_other\"].mValue) || !a24Core.isEmpty(this.get(\"objChildren\")[\"address.country_code\"].mValue) || !a24Core.isEmpty(this.get(\"objChildren\")[\"address.post_code\"].mValue);\n        },\n        onInputValueChanged: function onInputValueChanged(arrPath) {\n            var _this2 = this;\n\n            this.set(\"_bAddressFieldsRequired\", this._addressHasValues());\n\n            // Get the reference of the field that changed\n            var sLookup = arrPath.join(\".\");\n\n            if (sLookup === \"objChildren.address.country_code\") {\n                var objCountryCode = this.get(\"objChildren\")[\"address.country_code\"];\n\n                if (!a24Core.isEmpty(objCountryCode) && !a24Core.isEmpty(objCountryCode.mValue)) {\n                    var sCountryCode = objCountryCode.mValue.sValue;\n                    this._setCountiesFromCountryCode(sCountryCode);\n                    this.set(\"_sSelectedCountryCode\", sCountryCode);\n                    var objPostCode = this.get(\"objChildren\")[\"address.post_code\"];\n\n                    objPostCode.get(\"arrValidation\").clear();\n                    objPostCode.set(\"funcValidationRequired\", null);\n\n                    if (sCountryCode === \"UK\" || sCountryCode === \"GB\" || sCountryCode === \"US\") {\n                        a24Validation.addPostCode(objPostCode, sCountryCode);\n                        objPostCode.get(\"arrValidation\").pushObject(function () {\n                            if (_this2._addressHasValues()) {\n                                a24Validation.addRequired(objPostCode, true);\n                            } else {\n                                a24Validation.addRequired(objPostCode, false);\n                            }\n                        });\n                    } else {\n                        a24Validation.addMinLength(objPostCode, 1);\n                        a24Validation.addMaxLength(objPostCode, 100);\n                        objPostCode.get(\"arrValidation\").pushObject(function () {\n                            if (_this2._addressHasValues()) {\n                                a24Validation.addRequired(objPostCode, true);\n                            } else {\n                                a24Validation.addRequired(objPostCode, false);\n                            }\n                        });\n                    }\n\n                    this._formatPostCode();\n                }\n            } else if (sLookup === \"objChildren.address.post_code\") {\n                this._formatPostCode();\n            }\n        },\n        _formatPostCode: function _formatPostCode() {\n            var objCountryCode = this.get(\"objChildren\")[\"address.country_code\"];\n            var objPostCode = this.get(\"objChildren\")[\"address.post_code\"];\n\n            if (!a24Core.isEmpty(objCountryCode) && !a24Core.isEmpty(objCountryCode.mValue) && (objCountryCode.mValue.sValue === \"UK\" || objCountryCode.mValue.sValue === \"GB\")) {\n                if (!a24Core.isEmpty(objPostCode.mValue)) {\n                    var sInputValue = objPostCode.mValue.trim();\n                    if (!/\\s/.test(sInputValue)) {\n                        var sValue1 = sInputValue.slice(0, sInputValue.length - 3);\n                        var sValue2 = sInputValue.slice(sInputValue.length - 3, sInputValue.length);\n                        objPostCode.setValueFromOutside(sValue1.toUpperCase() + \" \" + sValue2.toUpperCase());\n                    } else if (sInputValue.split(\" \").length > 1) {\n                        objPostCode.setValueFromOutside(sInputValue.replace(/  +/g, \" \").toUpperCase());\n                    }\n                }\n            }\n        },\n        _onLoadingChange: Ember.observer(\"_bLoading\", function () {\n            var _this3 = this;\n\n            if (this.get(\"_bLoading\")) {\n                this.set(\"_arrHeaderActions\", []);\n            } else {\n                this.set(\"_arrHeaderActions\", [{\n                    sTitle: this.get(\"_objStringsService\").getString(\"add\"),\n                    sIcon: \"add\",\n                    executeCardAction: function executeCardAction() {\n                        _this3.setAddEditPopup();\n                    }\n                }]);\n            }\n        }).on(\"init\"),\n\n        _setCountyDropdown: function _setCountyDropdown(sCountryCode) {\n            var arrCounties = null;\n            if (sCountryCode === \"ZA\") {\n                arrCounties = this.get(\"_objCandidateProfileEnumsService\").getList(\"saProvinces\");\n            } else if (sCountryCode === \"UK\" || sCountryCode === \"GB\") {\n                arrCounties = this.get(\"_objCandidateProfileEnumsService\").getList(\"ukProvinces\");\n            } else if (sCountryCode === \"US\") {\n                arrCounties = this.get(\"_objCandidateProfileEnumsService\").getList(\"usProvinces\");\n            } else if (sCountryCode === \"AU\") {\n                arrCounties = this.get(\"_objCandidateProfileEnumsService\").getList(\"auProvinces\");\n            }\n\n            this.set(\"_funcGetCountiesSuggestions\", function (sQueryString, funcOnComplete) {\n                var arrFilteredCounties = [];\n\n                if (!a24Core.isEmpty(sQueryString)) {\n                    for (var i = 0; i < arrCounties.length; i++) {\n                        if (arrCounties[i].sLabel.toLowerCase().indexOf(sQueryString.toLowerCase()) !== -1) {\n                            arrFilteredCounties.push(arrCounties[i]);\n                        }\n                    }\n                } else {\n                    arrFilteredCounties = arrCounties;\n                }\n\n                funcOnComplete(arrFilteredCounties);\n            });\n            this.set(\"_arrCounties\", arrCounties);\n        },\n\n        _setCountiesFromCountryCode: function _setCountiesFromCountryCode(sCountryCode) {\n            if (sCountryCode === \"ZA\" || sCountryCode === \"UK\" || sCountryCode === \"GB\" || sCountryCode === \"US\" || sCountryCode === \"AU\") {\n                this.set(\"_bIsUkSaCountry\", true);\n\n                this.get(\"objChildren.province_uksa\").clear();\n                this._setCountyDropdown(sCountryCode);\n            } else {\n                this.set(\"_bIsUkSaCountry\", false);\n            }\n        },\n\n        prepareForDisplay: function prepareForDisplay(arrData) {\n            var arrDisplay = [];\n\n            // Callback function for the array filter\n            var funcFilter = function funcFilter(sValue) {\n                return !a24Core.isEmpty(sValue);\n            };\n\n            var objThis = this;\n\n            var funcCardActionEditExecute = function funcCardActionEditExecute(sId) {\n                return function () {\n                    objThis.setAddEditPopup(sId);\n                };\n            };\n            var funcCardActionRemoveExecute = function funcCardActionRemoveExecute(sId) {\n                return function () {\n                    objThis.removeNextOfKin(sId);\n                };\n            };\n\n            for (var i = 0; i < arrData.length; i++) {\n\n                var sAddress = \"\";\n                var arrAddress = [];\n                var bAddress = false;\n\n                if (!a24Core.isEmpty(arrData[i].address)) {\n                    arrAddress = [arrData[i].address.address_line1, arrData[i].address.address_line2, arrData[i].address.city, arrData[i].address.post_code, arrData[i].address.province, this.get(\"_objEnumsService\").getFrontendValue(\"country\", arrData[i].address.country_code)];\n\n                    arrAddress = arrAddress.filter(funcFilter);\n\n                    sAddress = Ember.String.htmlSafe(arrAddress.join(\"<br/>\"));\n                    bAddress = true;\n                }\n\n                var arrActions = [{\n                    sTitle: this.get(\"_objStringsService\").getString(\"edit\"),\n                    sIcon: \"edit\",\n                    executeCardAction: funcCardActionEditExecute(arrData[i])\n                }, {\n                    sTitle: this.get(\"_objStringsService\").getString(\"remove\"),\n                    sIcon: \"delete\",\n                    executeCardAction: funcCardActionRemoveExecute(arrData[i])\n                }];\n\n                arrDisplay.push({\n                    sIcon: \"person\",\n                    sName: arrData[i].name,\n                    sExtra: arrData[i].relationship,\n                    arrActions: arrActions,\n                    arrItems: [{\n                        arrItems: [{\n                            sLabel: this.get(\"_objCandidateProfileStringsService\").getString(\"relationship\"),\n                            sValue: arrData[i].relationship,\n                            bText: true\n                        }, {\n                            sLabel: this.get(\"_objStringsService\").getString(\"contactNumber\"),\n                            sValue: arrData[i].contact_number,\n                            bText: true\n                        }, {\n                            sLabel: this.get(\"_objStringsService\").getString(\"comment\"),\n                            sValue: arrData[i].comment,\n                            bText: true\n                        }, {\n                            sLabel: bAddress ? this.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"addressType\", arrData[i].address.type) : this.get(\"_objStringsService\").getString(\"addresses\"),\n                            sValue: sAddress,\n                            bText: true\n                        }]\n                    }]\n                });\n            }\n            return arrDisplay;\n        },\n        getNextOfKinDetails: function getNextOfKinDetails() {\n            var _this4 = this;\n\n            this.set(\"_bLoading\", true);\n            this.set(\"_bServerError\", false);\n\n            this.get(\"objNextOfKinRestService\").getNextOfKins(this, \"_objCandidateProfileNextOfKinPromise\", this.get(\"sCandidateId\"), function (arrData) {\n                _this4.set(\"_arrCandidateData\", []);\n                if (!a24Core.isEmpty(arrData)) {\n                    _this4.set(\"_arrCandidateData\", _this4.prepareForDisplay(arrData));\n                }\n                _this4.set(\"_bLoading\", false);\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode /*, sStatus, objErrorThrown, objError*/) {\n                if (sCode === \"500\" || sCode === \"502\" || sCode === \"503\" || sCode === \"504\") {\n                    _this4.set(\"_bServerError\", true);\n                    return;\n                }\n                // We swallow all 404 errors as it means that the candidate does not have\n                // any next of kin info\n                _this4.set(\"_arrCandidateData\", []);\n                _this4.set(\"_bLoading\", false);\n            }));\n        },\n        removeNextOfKin: function removeNextOfKin(objNextofKinData) {\n            this.set(\"_bShowDeleteConfirm\", true);\n            this.set(\"_objNextofKinEditData\", objNextofKinData);\n        },\n        setAddEditPopup: function setAddEditPopup(objNextofKinData) {\n            var _this5 = this;\n\n            this.clearAllErrorMessages();\n            this.clearForm();\n\n            this.set(\"_sHeaderPopup\", this.get(\"_objCandidateProfileStringsService\").getString(\"addNextofKin\"));\n            this.set(\"_bIsAdd\", true);\n\n            if (!a24Core.isEmpty(objNextofKinData)) {\n                // set inputs based on id\n                this.set(\"_sHeaderPopup\", this.get(\"_objCandidateProfileStringsService\").getString(\"editNextofKin\"));\n                this.set(\"_bIsAdd\", false);\n                this.set(\"_objNextofKinEditData\", objNextofKinData);\n\n                this.populateInputFields(objNextofKinData);\n            }\n\n            this.set(\"_bShowAddEditPopup\", true);\n            if (!a24Core.isEmpty(this.get(\"setBreadCrumbAction\"))) {\n                this.get(\"setBreadCrumbAction\")();\n            }\n\n            Ember.run.next(function () {\n                if (a24Core.isEmpty(_this5)) {\n                    return;\n                }\n                Ember.run.schedule(\"afterRender\", function () {\n                    _this5.set(\"_objOriginalData\", _this5.getPlainFormValueObject());\n                });\n            });\n        },\n        populateInputFields: function populateInputFields(objNextofKinData) {\n            var _this6 = this;\n\n            this.get(\"objChildren.name\").setValueFromOutside(objNextofKinData.name);\n            this.get(\"objChildren.relationship\").setValueFromOutside(objNextofKinData.relationship);\n            this.get(\"objChildren.contact_number\").setValueFromOutside(objNextofKinData.contact_number);\n            this.get(\"objChildren.comment\").setValueFromOutside(objNextofKinData.comment);\n\n            if (!a24Core.isEmpty(objNextofKinData.address)) {\n                this.get(\"objChildren\")[\"address.address_line1\"].setValueFromOutside(objNextofKinData.address.address_line1);\n                this.get(\"objChildren\")[\"address.address_line2\"].setValueFromOutside(objNextofKinData.address.address_line2);\n                this.get(\"objChildren\")[\"address.city\"].setValueFromOutside(objNextofKinData.address.city);\n                this.get(\"objChildren\")[\"address.post_code\"].setValueFromOutside(objNextofKinData.address.post_code);\n\n                var sCountryCode = objNextofKinData.address.country_code;\n\n                var objSelectedCountry = this.get(\"_arrCountryDropdown\").findBy(\"sValue\", objNextofKinData.address.country_code);\n                var objSelectedAddressType = this.get(\"_arrAddressTypeDropdown\").findBy(\"sValue\", objNextofKinData.address.type);\n\n                if (!a24Core.isEmpty(objSelectedCountry)) {\n                    this.set(\"_objSelectedCountry\", Ember.copy(objSelectedCountry));\n                }\n\n                if (!a24Core.isEmpty(objSelectedAddressType)) {\n                    this.set(\"_objSelectedAddressType\", Ember.copy(objSelectedAddressType));\n                }\n\n                Ember.run.next(function () {\n                    if (a24Core.isEmpty(_this6)) {\n                        return;\n                    }\n                    if (!a24Core.isEmpty(objNextofKinData.address.province)) {\n                        if (sCountryCode === \"ZA\" || sCountryCode === \"UK\" || sCountryCode === \"GB\" || sCountryCode === \"US\") {\n                            _this6._setCountiesFromCountryCode(sCountryCode);\n                            var objSelectedCounty = _this6.get(\"_arrCounties\").findBy(\"sValue\", objNextofKinData.address.province);\n                            if (!a24Core.isEmpty(objSelectedCounty)) {\n                                _this6.get(\"objChildren.province_uksa\").setValueFromOutside(objSelectedCounty);\n                            }\n                        } else {\n                            _this6.get(\"objChildren.province_other\").setValueFromOutside(objNextofKinData.address.province);\n                        }\n                    }\n                });\n            }\n        },\n        setErrorResponse: function setErrorResponse(sCode, objError, sSnackbarMessage) {\n            if (!a24Core.isEmpty(objError) && !a24Core.isEmpty(objError.arrPath)) {\n                var arrPath = objError.arrPath.length > 1 ? [objError.arrPath.join(\".\")] : objError.arrPath;\n\n                if (sCode === \"MAX_LENGTH\") {\n                    this.setResponseError(arrPath, \"validationRestMaxLength\");\n                } else if (sCode === \"MIN_LENGTH\") {\n                    this.setResponseError(arrPath, \"validationRestMaxLength\");\n                } else if (sCode === \"PATTERN\") {\n                    this.setResponseError(arrPath, \"validationRestInvalidFormat\");\n                } else if (sCode === \"ENUM_MISMATCH\") {\n                    this.setResponseError(arrPath, \"validationRestUnsupportedValue\");\n                } else {\n                    this.get(\"_objSnackbarService\").showSnackbarMessage(sSnackbarMessage);\n                }\n            } else {\n                this.get(\"_objSnackbarService\").showSnackbarMessage(sSnackbarMessage);\n            }\n\n            this.set(\"_bPopupLoading\", false);\n        },\n        setSuccessResponse: function setSuccessResponse(sSnackbarMessage) {\n            this.get(\"_objSnackbarService\").showSnackbarMessage(sSnackbarMessage);\n            this.set(\"_bPopupLoading\", false);\n            this.set(\"_bShowAddEditPopup\", false);\n            this.set(\"_bShowDeleteConfirm\", false);\n\n            this.getNextOfKinDetails();\n        },\n        getPayload: function getPayload() {\n            var objPayload = a24Core.removeNullsFromValue(Ember, this.getPlainFormValueObject());\n            if (!this._addressHasValues()) {\n                delete objPayload.address;\n            } else {\n                if (!a24Core.isEmpty(objPayload.province_uksa)) {\n                    objPayload.address.province = objPayload.province_uksa.sValue;\n                    delete objPayload.province_uksa;\n                } else if (!a24Core.isEmpty(objPayload.province_other)) {\n                    objPayload.address.province = objPayload.province_other;\n                    delete objPayload.province_other;\n                }\n            }\n            return objPayload;\n        },\n\n        actions: {\n            onPopupDeleteConfirm: function onPopupDeleteConfirm() {\n                var _this7 = this;\n\n                this.set(\"_bPopupLoading\", true);\n                this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objCandidateProfileStringsService\").getString(\"removingNextOfKin\"));\n                this.get(\"objNextOfKinRestService\").deleteNextOfKin(this, \"_objCandidateProfileNextOfKinPromise\", this.get(\"sCandidateId\"), this.get(\"_objNextofKinEditData._id\"), function () {\n                    _this7.setSuccessResponse(_this7.get(\"_objCandidateProfileStringsService\").getString(\"successRemoveNextOfKin\"));\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode /*, sStatus, objErrorThrown, objError*/) {\n                    if (sCode === \"404\") {\n                        _this7.get(\"_objSnackbarService\").showSnackbarMessage(_this7.get(\"_objStringsService\").getString(\"removeFailedRefreshPage\"));\n                    } else {\n                        _this7.get(\"_objSnackbarService\").showSnackbarMessage(_this7.get(\"_objCandidateProfileStringsService\").getString(\"failRemoveNextOfKin\"));\n                    }\n\n                    _this7.set(\"_bPopupLoading\", false);\n                }));\n            },\n            onPopupClose: function onPopupClose() {\n                if (this.get(\"_bPopupLoading\")) {\n                    return;\n                }\n\n                this.set(\"_bShowDeleteConfirm\", false);\n            },\n            onPopupAddEditCancel: function onPopupAddEditCancel() {\n                if (this.get(\"_bPopupLoading\")) {\n                    return;\n                }\n                // Check if the form has any unsaved data\n                var bDataMatches = a24Core.compareObjects(Ember, this.getPlainFormValueObject(), this.get(\"_objOriginalData\"));\n\n                if (bDataMatches) {\n                    this.set(\"_bShowAddEditPopup\", false);\n                } else {\n                    this.set(\"_bShowUnsavedData\", true);\n                }\n            },\n            onPopupAddEditConfirm: function onPopupAddEditConfirm() {\n                var _this8 = this;\n\n                this.clearAllErrorMessages();\n\n                if (!this.doFullValidation()) {\n                    var objPayload = this.getPayload();\n\n                    this.set(\"_bPopupLoading\", true);\n                    if (this.get(\"_bIsAdd\")) {\n                        this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objCandidateProfileStringsService\").getString(\"creatingNextOfKin\"));\n                        this.get(\"objNextOfKinRestService\").createNextOfKin(this, \"_objCandidateProfileNextOfKinPromise\", this.get(\"sCandidateId\"), objPayload, function () {\n                            _this8.setSuccessResponse(_this8.get(\"_objCandidateProfileStringsService\").getString(\"successAddNextOfKin\"));\n                        }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode, sStatus, objErrorThrown, objError) {\n                            _this8.setErrorResponse(sCode, objError, _this8.get(\"_objCandidateProfileStringsService\").getString(\"failAddNextOfKin\"));\n                        }));\n                    } else {\n                        this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objCandidateProfileStringsService\").getString(\"updatingNextOfKin\"));\n                        this.get(\"objNextOfKinRestService\").updateNextOfKin(this, \"_objCandidateProfileNextOfKinPromise\", this.get(\"sCandidateId\"), this.get(\"_objNextofKinEditData._id\"), objPayload, function () {\n                            _this8.setSuccessResponse(_this8.get(\"_objCandidateProfileStringsService\").getString(\"successUpdateNextOfKin\"));\n                        }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode, sStatus, objErrorThrown, objError) {\n                            if (sCode === \"404\") {\n                                _this8.get(\"_objSnackbarService\").showSnackbarMessage(_this8.get(\"_objStringsService\").getString(\"updateFailedRefreshPage\"));\n                                _this8.set(\"_bPopupLoading\", false);\n                            } else {\n                                _this8.setErrorResponse(sCode, objError, _this8.get(\"_objCandidateProfileStringsService\").getString(\"failUpdateNextOfKin\"));\n                            }\n                        }));\n                    }\n                }\n            },\n            onPopupUnsavedConfirm: function onPopupUnsavedConfirm() {\n                this.set(\"_bShowAddEditPopup\", false);\n                this.set(\"_bShowUnsavedData\", false);\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/candidate-other-names\", [\"exports\", \"a24-ember-candidate-profile/templates/components/candidate-other-names\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _candidateOtherNames, _didRenderChangesMixin, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _candidateOtherNames.default,\n        objSettingsRestService: null,\n        objOtherNamesRestService: null,\n        sCandidateId: null,\n        _arrCandidateData: null,\n        _objCandidateOtherNamesPromise: null,\n        _bLoading: false,\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _bAllowEdit: true,\n        _sHeaderPopup: null,\n        _bShowEditPopup: false,\n        _arrHeaderActions: null,\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objSpecialEditPopupAction: null,\n        _bPopupLoading: true,\n        _objOriginalData: null,\n\n        _bServerError: false,\n        _arrReloadActions: null,\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.set(\"_arrReloadActions\", [{\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"reload\"),\n                sIcon: \"refresh\",\n                executeCardAction: function executeCardAction() {\n                    _this.getOtherNameDetails();\n                }\n            }]);\n\n            if (!this.get(\"objSettingsRestService.objSettings.profile_editable\")) {\n                this.set(\"_bAllowEdit\", false);\n            }\n\n            var objValidationConfig = {};\n\n            objValidationConfig[\"objChildren.known_as\"] = function (objMixin) {\n                a24Validation.addMinLength(objMixin, 2);\n                a24Validation.addMaxLength(objMixin, 100);\n            };\n            objValidationConfig[\"objChildren.middle_name\"] = function (objMixin) {\n                a24Validation.addMinLength(objMixin, 2);\n                a24Validation.addMaxLength(objMixin, 100);\n            };\n            objValidationConfig[\"objChildren.maiden_name\"] = function (objMixin) {\n                a24Validation.addMinLength(objMixin, 2);\n                a24Validation.addMaxLength(objMixin, 100);\n            };\n\n            this.set(\"objChildConfig\", objValidationConfig);\n\n            if (a24Core.isEmpty(this.get(\"_arrCandidateData\"))) {\n                this.set(\"_arrCandidateData\", []);\n            }\n            if (a24Core.isEmpty(this.get(\"_arrHeaderActions\"))) {\n                this.set(\"_arrHeaderActions\", []);\n            }\n\n            this.set(\"_objSpecialEditPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this.send(\"onPopupEditCancel\");\n                }\n            });\n\n            this.getOtherNameDetails();\n        },\n        getOtherNameDetails: function getOtherNameDetails() {\n            var _this2 = this;\n\n            this.set(\"_bLoading\", true);\n            this.set(\"_bServerError\", false);\n\n            this.get(\"objOtherNamesRestService\").getOtherNames(this, \"_objCandidateOtherNamesPromise\", this.get(\"sCandidateId\"), function (objData) {\n                if (!a24Core.isEmpty(objData)) {\n                    _this2.set(\"_arrCandidateData\", [{\n                        arrItems: [{\n                            sLabel: _this2.get(\"_objCandidateProfileStringsService\").getString(\"knownAs\"),\n                            sValue: objData.known_as,\n                            bText: true\n                        }, {\n                            sLabel: _this2.get(\"_objCandidateProfileStringsService\").getString(\"middleName\"),\n                            sValue: objData.middle_name,\n                            bText: true\n                        }, {\n                            sLabel: _this2.get(\"_objCandidateProfileStringsService\").getString(\"maidenName\"),\n                            sValue: objData.maiden_name,\n                            bText: true\n                        }]\n                    }]);\n                }\n\n                _this2.getOtherNamesDone(objData);\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode /*, sStatus, objErrorThrown, objError*/) {\n                if (sCode === \"500\" || sCode === \"502\" || sCode === \"503\" || sCode === \"504\") {\n                    _this2.set(\"_bServerError\", true);\n                    return;\n                }\n                // We swallow all 404 errors as it means that the candidate does not have\n                // any other names info\n                _this2.getOtherNamesDone();\n            }));\n        },\n        getOtherNamesDone: function getOtherNamesDone(objData) {\n            var _this3 = this;\n\n            if (this.get(\"_bAllowEdit\")) {\n                this.set(\"_arrHeaderActions\", [{\n                    sTitle: this.get(\"_objStringsService\").getString(\"edit\"),\n                    sIcon: \"edit\",\n                    executeCardAction: function executeCardAction() {\n                        _this3.setEditPopup(objData);\n                    }\n                }]);\n            }\n\n            this.set(\"_bLoading\", false);\n        },\n        getPayload: function getPayload() {\n            return a24Core.removeNullsFromValue(Ember, this.getPlainFormValueObject());\n        },\n\n        setEditPopup: function setEditPopup(objOtherNamesData) {\n            var _this4 = this;\n\n            this.clearAllErrorMessages();\n            this.clearForm();\n\n            this.set(\"_sHeaderPopup\", this.get(\"_objStringsService\").getTokenString(\"editItem\", this.get(\"_objCandidateProfileStringsService\").getString(\"otherNames\")));\n\n            this.populateInputFields(objOtherNamesData);\n\n            this.set(\"_bShowEditPopup\", true);\n            this.set(\"_bPopupLoading\", false);\n\n            if (!a24Core.isEmpty(this.get(\"setBreadCrumbAction\"))) {\n                this.get(\"setBreadCrumbAction\")();\n            }\n\n            Ember.run.next(function () {\n                if (a24Core.isEmpty(_this4)) {\n                    return;\n                }\n                Ember.run.schedule(\"afterRender\", function () {\n                    _this4.set(\"_objOriginalData\", _this4.getPlainFormValueObject());\n                });\n            });\n        },\n        populateInputFields: function populateInputFields(objOtherNamesData) {\n            if (!a24Core.isEmpty(objOtherNamesData)) {\n                this.get(\"objChildren.known_as\").setValueFromOutside(objOtherNamesData.known_as);\n                this.get(\"objChildren.middle_name\").setValueFromOutside(objOtherNamesData.middle_name);\n                this.get(\"objChildren.maiden_name\").setValueFromOutside(objOtherNamesData.maiden_name);\n            }\n        },\n        setSuccessResponse: function setSuccessResponse(sSnackbarMessage) {\n            this.get(\"_objSnackbarService\").showSnackbarMessage(sSnackbarMessage);\n            this.set(\"_bPopupLoading\", false);\n            this.set(\"_bShowEditPopup\", false);\n\n            this.getOtherNameDetails();\n        },\n        setErrorResponse: function setErrorResponse(sCode, objError, sSnackbarMessage) {\n            if (sCode === \"MAX_LENGTH\") {\n                this.setResponseError(objError.arrPath, \"validationRestMaxLength\");\n            } else if (sCode === \"MIN_LENGTH\") {\n                this.setResponseError(objError.arrPath, \"validationRestMaxLength\");\n            } else if (sCode === \"PATTERN\") {\n                this.setResponseError(objError.arrPath, \"validationRestInvalidChar\");\n            } else {\n                this.get(\"_objSnackbarService\").showSnackbarMessage(sSnackbarMessage);\n            }\n\n            this.set(\"_bPopupLoading\", false);\n        },\n        actions: {\n            onPopupClose: function onPopupClose() {\n                if (this.get(\"_bPopupLoading\")) {\n                    return;\n                }\n            },\n            onPopupEditCancel: function onPopupEditCancel() {\n                if (this.get(\"_bPopupLoading\")) {\n                    return;\n                }\n                // Check if the form has any unsaved data\n                var bDataMatches = a24Core.compareObjects(Ember, this.getPlainFormValueObject(), this.get(\"_objOriginalData\"));\n\n                if (bDataMatches) {\n                    this.set(\"_bShowEditPopup\", false);\n                } else {\n                    this.set(\"_bShowUnsavedData\", true);\n                }\n            },\n            onPopupEditConfirm: function onPopupEditConfirm() {\n                var _this5 = this;\n\n                this.clearAllErrorMessages();\n\n                if (!this.doFullValidation()) {\n                    var objPayload = this.getPayload();\n\n                    this.set(\"_bPopupLoading\", true);\n\n                    this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsService\").getTokenString(\"updatingItem\", this.get(\"_objCandidateProfileStringsService\").getString(\"otherNames\")));\n                    this.get(\"objOtherNamesRestService\").updateOtherNames(this, \"_objCandidateOtherNamesPromise\", this.get(\"sCandidateId\"), objPayload, function () {\n                        _this5.setSuccessResponse(_this5.get(\"_objStringsService\").getTokenString(\"successUpdateItem\", _this5.get(\"_objCandidateProfileStringsService\").getString(\"otherNames\")));\n                    }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode, sStatus, objErrorThrown, objError) {\n                        _this5.setErrorResponse(sCode, objError, _this5.get(\"_objStringsService\").getTokenString(\"failUpdateItem\", _this5.get(\"_objCandidateProfileStringsService\").getString(\"otherNames\")));\n                    }));\n                }\n            },\n            onPopupUnsavedConfirm: function onPopupUnsavedConfirm() {\n                this.set(\"_bShowEditPopup\", false);\n                this.set(\"_bShowUnsavedData\", false);\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/candidate-plugins-overview\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/candidate-plugins-overview\"], function (exports, _didRenderChangesMixin, _candidatePluginsOverview) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _candidatePluginsOverview.default,\n        objPluginRestService: null,\n        sCandidateId: null,\n        _sIFrameUrl: null,\n        _sIFrameHeader: null,\n        _bShowManagePopup: false,\n        _bPluginLoading: true,\n        _arrPluginData: null,\n        _objUrlCall: null,\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objSpecialEditPopupAction: null,\n        _bIsCandidateContext: Ember.computed(\"objPluginRestService.sContext\", function () {\n            return this.get(\"objPluginRestService.sContext\") === this.get(\"_objStaffshiftCoreConstants.CONTEXT_CANDIDATE\");\n        }),\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            // This is to init the rest service\n            this.get(\"objPluginRestService\");\n\n            if (a24Core.isEmpty(this.get(\"arrPluginData\"))) {\n                this.set(\"_arrPluginData\", []);\n            }\n\n            this.set(\"_objSpecialEditPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this.send(\"onPopupClose\");\n                }\n            });\n\n            this.getPluginData();\n        },\n        _candidateDataSuccess: function _candidateDataSuccess(arrResponse) {\n            var _this2 = this;\n\n            if (a24Core.isEmpty(arrResponse)) {\n                this.set(\"_bPluginLoading\", false);\n            } else {\n                var arrPluginData = [];\n                // Loop over items in the response and build up array of objects containing the properties\n                // required to display plug-ins\n                arrResponse.forEach(function (objItem) {\n\n                    var sPluginUrl = \"\";\n                    var sOverviewUrl = \"\";\n                    var sPluginName = \"\";\n\n                    // Ensure that required object and properties exist\n                    if (!a24Core.isEmpty(objItem.objSetting) && !a24Core.isEmpty(objItem.objSetting.sOverviewUrl)) {\n                        // If sFormUrl is not empty we build up the ember navigation route\n                        sOverviewUrl = \"/plugin-loader?plugin_id=\" + objItem.id + \"&plugin_state=overview_url\";\n                        sPluginName = objItem.objSetting.sPluginName;\n                        if (!a24Core.isEmpty(objItem.objSetting.sFormUrl)) {\n                            sPluginUrl = _this2.get(\"_objNavigation\").navigateWithinContext(\"plugin\", { plugin: [objItem.id] }, null, true);\n                        }\n\n                        // Build up array of plugin data\n                        arrPluginData.push({\n                            sPluginUrl: sPluginUrl,\n                            sIFrameUrl: sOverviewUrl,\n                            sHeader: sPluginName\n                        });\n                    }\n                });\n\n                this.set(\"_arrPluginData\", arrPluginData);\n                this.set(\"_bPluginLoading\", false);\n            }\n        },\n        getPluginData: function getPluginData() {\n            var _this3 = this;\n\n            var sCandidateId = this.get(\"sCandidateId\");\n\n            var funcSuccessCallback = Ember.run.bind(this, this._candidateDataSuccess);\n            var funcFailureCallback = {\n                funcCallback: function funcCallback() {\n                    _this3.set(\"_bPluginLoading\", false);\n                },\n                arrErrorCodes: [\"*\", \"*CODE\", \"*MALFORMED\"]\n            };\n\n            this.get(\"objPluginRestService\").getPlugins(this, \"_objUrlCall\", sCandidateId, funcSuccessCallback, funcFailureCallback);\n        },\n\n\n        actions: {\n            onAgencyGroupManageClick: function onAgencyGroupManageClick(sPluginUrl, sPluginName) {\n                var arrPlugin = sPluginUrl.split(\"/\");\n                var sPluginId = arrPlugin[arrPlugin.length - 1];\n\n                this.set(\"_sIFrameUrl\", \"/plugin-loader?plugin_id=\" + sPluginId + \"&plugin_state=form_url\");\n\n                this.set(\"_sIFrameHeader\", sPluginName);\n\n                this.set(\"_bShowManagePopup\", true);\n            },\n            onPopupClose: function onPopupClose() {\n                if (this.get(\"_bPluginLoading\")) {\n                    return;\n                }\n\n                this.set(\"_bShowManagePopup\", false);\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/candidate-position-held\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/candidate-position-held\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _didRenderChangesMixin, _candidatePositionHeld, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _candidatePositionHeld.default,\n        objCandidatePositionHeldRestService: null,\n        classNames: [\"candidate-position-held\"],\n        sCandidateId: null,\n\n        _bLoading: false,\n        _arrPositionHeld: null,\n        _objChartData: null,\n        _objChartOptions: null,\n        _arrReloadActions: null,\n        _objCandidatePositionHeldServicePromise: null,\n\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objCandidateProfileEnumsService: Ember.inject.service(\"a24-enums-candidate-profile\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objRestEntityActionSection: Ember.inject.service(\"rest-entity-action-section\"),\n        _bNoUpdatePermission: null,\n        _sPopupMessage: null,\n        _bShowConfirmation: false,\n        _sCurrentCheckBoxLookup: null,\n        _bPopupLoading: false,\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.set(\"_arrReloadActions\", [{\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"reload\"),\n                sIcon: \"refresh\",\n                executeCardAction: function executeCardAction() {\n                    _this.getPositionsHeld();\n                }\n            }]);\n\n            this.doServiceCalls();\n        },\n        doServiceCalls: function doServiceCalls() {\n            var _this2 = this;\n\n            var objEntityActionPromise = this.get(\"_objRestEntityActionSection\").getEntityActionsForSection(this, \"_objEntityActionPromise\", \"position-held\", function () {}, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode , sStatus, objErrorThrown, objError*/{\n                _this2.set(\"_bNoUpdatePermission\", true);\n            }));\n\n            var objPositionHeldPromise = this.get(\"objCandidatePositionHeldRestService\").getPositionsHeld(this, \"_objCandidatePositionHeldServicePromise\", this.get(\"sCandidateId\"), function () {}, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode , sStatus, objErrorThrown, objError*/{\n                _this2.set(\"_bServerError\", true);\n            }), {\n                items_per_page: {\n                    mValue: 1000\n                },\n                overall_duration: {\n                    mValue: \"desc\",\n                    bSortBy: true\n                }\n            });\n\n            var objServiceCalls = {\n                _objRestCandidatePositionHeldProperty: objPositionHeldPromise,\n                _objRestEntityActionProperty: objEntityActionPromise\n            };\n\n            var arrRequiredResponses = [\"_objRestCandidatePositionHeldProperty\", \"_objRestEntityActionProperty\"];\n\n            this.set(\"_bLoading\", true);\n            this.set(\"_bServerError\", false);\n            Ember.copy(a24RSVP).configure(this, objServiceCalls, [{\n                arrRequiredResponses: arrRequiredResponses,\n                funcOnComplete: function funcOnComplete(objResponses) {\n                    if (!a24Core.isEmpty(objResponses._objRestCandidatePositionHeldProperty) && !a24Core.isEmpty(objResponses._objRestCandidatePositionHeldProperty.objHeaders) && objResponses._objRestCandidatePositionHeldProperty.objHeaders.statusText === \"abort\" || !a24Core.isEmpty(objResponses._objRestEntityActionProperty) && !a24Core.isEmpty(objResponses._objRestEntityActionProperty.objHeaders) && objResponses._objRestEntityActionProperty.objHeaders.statusText === \"abort\") {\n                        return;\n                    }\n\n                    if (!a24Core.isEmpty(objResponses._objRestEntityActionProperty) && !a24Core.isEmpty(objResponses._objRestEntityActionProperty.objResponse)) {\n                        var arrResponse = objResponses._objRestEntityActionProperty.objResponse;\n                        var objUpdatePermission = arrResponse.find(function (objEntityAction) {\n                            var objUpdateAction = objEntityAction.actions.find(function (objAction) {\n                                return objAction.action === \"update_status\";\n                            });\n\n                            if (!a24Core.isEmpty(objUpdateAction) && objUpdateAction.allowed) {\n                                return true;\n                            }\n\n                            return false;\n                        });\n\n                        if (!a24Core.isEmpty(objUpdatePermission)) {\n                            _this2.set(\"_bNoUpdatePermission\", false);\n                        } else {\n                            _this2.set(\"_bNoUpdatePermission\", true);\n                        }\n                    }\n\n                    if (!a24Core.isEmpty(objResponses._objRestCandidatePositionHeldProperty) && !a24Core.isEmpty(objResponses._objRestCandidatePositionHeldProperty.objResponse)) {\n                        var arrData = objResponses._objRestCandidatePositionHeldProperty.objResponse;\n\n                        _this2.setPositionHeldData(arrData);\n                    } else if (a24Core.isEmpty(objResponses._objRestCandidatePositionHeldProperty.objResponse)) {\n                        _this2.set(\"_bLoading\", false);\n                    }\n                }\n            }]);\n        },\n        setPositionHeldData: function setPositionHeldData(arrData) {\n            if (a24Core.isEmpty(arrData)) {\n                this.set(\"_arrPositionHeld\", []);\n                this.setupChartData([]);\n            } else {\n                var sActiveBackendValue = this.get(\"_objCandidateProfileEnumsService.positionHeldWorkSuggestStatus.ACTIVE.backend\");\n                arrData.forEach(function (objData) {\n                    Ember.set(objData, \"bActive\", objData.work_suggestion_status === sActiveBackendValue);\n                    Ember.set(objData, \"bLoading\", false);\n                    Ember.set(objData, \"sProperty\", \"workSuggest\" + objData._id);\n                });\n                this.set(\"_arrPositionHeld\", arrData);\n\n                this.setupChartData(arrData);\n            }\n\n            this.set(\"_bLoading\", false);\n        },\n        getPositionsHeld: function getPositionsHeld() {\n            var _this3 = this;\n\n            this.set(\"_bLoading\", true);\n            this.set(\"_bServerError\", false);\n\n            this.get(\"objCandidatePositionHeldRestService\").getPositionsHeld(this, \"_objCandidatePositionHeldServicePromise\", this.get(\"sCandidateId\"), function (arrData) {\n                _this3.setPositionHeldData(arrData);\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode , sStatus, objErrorThrown, objError*/{\n                _this3.set(\"_bLoading\", false);\n                _this3.set(\"_bServerError\", true);\n            }), {\n                items_per_page: {\n                    mValue: 1000\n                },\n                overall_duration: {\n                    mValue: \"desc\",\n                    bSortBy: true\n                }\n            });\n        },\n        setupChartData: function setupChartData(arrData) {\n            var _this4 = this;\n\n            var arrChartLabels = arrData.map(function (objData) {\n                return [objData.job_family_name, objData.job_title_name];\n            });\n\n            var iSecondsInAYear = 60 * 60 * 24 * 365;\n            var objCandidateProfileStringsService = this.get(\"_objCandidateProfileStringsService\");\n\n            this.set(\"_objChartData\", {\n                labels: arrChartLabels,\n                datasets: [{\n                    label: objCandidateProfileStringsService.getString(\"verified\"),\n                    backgroundColor: this.get(\"_objLibConstants.COLOR_SUCCESS\"),\n                    data: arrData.map(function (objData) {\n                        var fValue = 0.0;\n                        if (!a24Core.isEmpty(objData.states)) {\n                            var objVerified = objData.states.findBy(\"status\", _this4.get(\"_objCandidateProfileEnumsService.positionHeldStatus.VERIFIED.backend\"));\n                            if (!a24Core.isEmpty(objVerified)) {\n                                fValue = objVerified.total_time / iSecondsInAYear;\n                            }\n                        }\n                        return fValue;\n                    })\n                }, {\n                    label: objCandidateProfileStringsService.getString(\"unverified\"),\n                    backgroundColor: this.get(\"_objLibConstants.COLOR_WARNING\"),\n                    data: arrData.map(function (objData) {\n                        var fValue = 0.0;\n                        if (!a24Core.isEmpty(objData.states)) {\n                            var objVerified = objData.states.findBy(\"status\", _this4.get(\"_objCandidateProfileEnumsService.positionHeldStatus.VERIFIED.backend\"));\n                            var objUnverified = objData.states.findBy(\"status\", _this4.get(\"_objCandidateProfileEnumsService.positionHeldStatus.UNVERIFIED.backend\"));\n                            if (!a24Core.isEmpty(objVerified) && !a24Core.isEmpty(objUnverified)) {\n                                fValue = (objVerified.total_time + objUnverified.total_time) / iSecondsInAYear;\n                            } else if (!a24Core.isEmpty(objUnverified)) {\n                                fValue = objUnverified.total_time / iSecondsInAYear;\n                            }\n                        }\n                        return fValue;\n                    })\n                }],\n                borderWidth: 0\n            });\n\n            this.set(\"_objChartOptions\", {\n                tooltips: {\n                    callbacks: {\n                        label: function label(objTooltipItem, objData) {\n                            var iValue = objTooltipItem.xLabel;\n\n                            if (objTooltipItem.datasetIndex === 1) {\n                                iValue = objTooltipItem.xLabel - objData.datasets[0].data[objTooltipItem.index];\n                            }\n\n                            if (iValue <= 0) {\n                                return;\n                            }\n\n                            var iYear = parseInt(iValue);\n                            var iMonth = Math.round(12 * (iValue - iYear));\n                            var sLabel = objData.datasets[objTooltipItem.datasetIndex].label + \": \";\n\n                            if (iYear <= 0 && iMonth <= 0) {\n                                return sLabel + objCandidateProfileStringsService.getString(\"lessThanAMonth\");\n                            }\n\n                            var sYear = null;\n                            if (iYear > 1) {\n                                sYear = objCandidateProfileStringsService.getString(\"years\").toLowerCase();\n                            } else {\n                                sYear = objCandidateProfileStringsService.getString(\"year\").toLowerCase();\n                            }\n\n                            var sMonth = null;\n                            if (iMonth > 1) {\n                                sMonth = objCandidateProfileStringsService.getString(\"months\").toLowerCase();\n                            } else {\n                                sMonth = objCandidateProfileStringsService.getString(\"month\").toLowerCase();\n                            }\n\n                            if (!a24Core.isEmpty(iYear) && iYear > 0) {\n                                sLabel += iYear + \" \" + sYear;\n                            }\n\n                            if (!a24Core.isEmpty(iMonth) && iMonth > 0) {\n                                if (!a24Core.isEmpty(iYear) && iYear > 0) {\n                                    sLabel += \", \";\n                                }\n                                sLabel += iMonth + \" \" + sMonth;\n                            }\n\n                            return sLabel;\n                        }\n                    }\n                },\n                title: {\n                    display: true,\n                    position: \"bottom\",\n                    text: objCandidateProfileStringsService.getString(\"totalYearsOfExperience\")\n                },\n                scales: {\n                    xAxes: [{\n                        gridLines: {\n                            display: true\n                        },\n                        ticks: {\n                            beginAtZero: true,\n                            callback: function callback(iValue /*, index, values*/) {\n                                if (iValue !== 0) {\n                                    // check if more than 5 decimal places, limit to 5 if more\n                                    if (iValue.toString().includes(\".\") && iValue.toString().split(\".\")[1].length > 5) {\n                                        return iValue.toFixed(5);\n                                    } else {\n                                        return iValue;\n                                    }\n                                }\n                            }\n                        }\n                    }],\n                    yAxes: [{\n                        stacked: true,\n                        barThickness: 30,\n                        gridLines: {\n                            display: false\n                        },\n                        ticks: {\n                            beginAtZero: true\n                        }\n                    }]\n                },\n                responsive: true,\n                maintainAspectRatio: false\n            });\n        },\n\n        onInputValueChanged: function onInputValueChanged(arrChildRef) {\n            if (!a24Core.isEmpty(arrChildRef)) {\n                var sLookup = arrChildRef.join(\".\");\n                var objCheckbox = this.get(sLookup + \".mCheckboxValue\");\n                this.set(\"_sCurrentCheckBoxLookup\", sLookup);\n\n                var bActive = !objCheckbox.bActive;\n                // update checkbox\n                this.set(sLookup + \".mCheckboxValue.bActive\", bActive);\n\n                this.set(\"_sPopupMessage\", this.get(\"_objCandidateProfileStringsService\").getHTMLTokenString(\"positionHeldSetToActiveMessage\", objCheckbox.job_family_name + \" - \" + objCheckbox.job_title_name));\n                if (!bActive) {\n                    this.set(\"_sPopupMessage\", this.get(\"_objCandidateProfileStringsService\").getHTMLTokenString(\"positionHeldSetToInactiveMessage\", objCheckbox.job_family_name + \" - \" + objCheckbox.job_title_name));\n                }\n\n                this.set(\"_bShowConfirmation\", true);\n            }\n        },\n        actions: {\n            onPopupConfirm: function onPopupConfirm() {\n                var _this5 = this;\n\n                var sLookup = this.get(\"_sCurrentCheckBoxLookup\");\n                var objCheckbox = this.get(sLookup + \".mCheckboxValue\");\n\n                var bActive = objCheckbox.bActive;\n\n                var sActive = this.get(\"_objCandidateProfileEnumsService.positionHeldWorkSuggestStatus.ACTIVE.backend\");\n                if (!bActive) {\n                    sActive = this.get(\"_objCandidateProfileEnumsService.positionHeldWorkSuggestStatus.INACTIVE.backend\");\n                }\n\n                var objPayload = {\n                    \"action\": sActive\n                };\n\n                this.set(\"_bPopupLoading\", true);\n\n                this.get(\"objCandidatePositionHeldRestService\").updatePositionsHeld(this, null, this.get(\"sCandidateId\"), objCheckbox.job_family_id, objCheckbox.job_title_id, objPayload, function () {\n                    _this5.set(\"_bPopupLoading\", false);\n                    // close popup\n                    _this5.set(\"_bShowConfirmation\", false);\n\n                    _this5.get(\"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objStringsService\").getTokenString(\"successUpdateItem\", _this5.get(\"_objCandidateProfileStringsService\").getString(\"positionHeld\")));\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                    _this5.get(\"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objStringsService\").getTokenString(\"failUpdateItem\", _this5.get(\"_objCandidateProfileStringsService\").getString(\"positionHeld\")));\n                    _this5.set(\"_bPopupLoading\", false);\n                }));\n            },\n            onPopupCancel: function onPopupCancel() {\n                var sLookup = this.get(\"_sCurrentCheckBoxLookup\");\n                var objCheckbox = this.get(sLookup + \".mCheckboxValue\");\n                var bActive = objCheckbox.bActive;\n                this.set(\"_bPopupLoading\", false);\n\n                // update checkbox\n                this.set(sLookup + \".mCheckboxValue.bActive\", !bActive);\n\n                this.set(\"_bShowConfirmation\", false);\n            }\n        }\n\n    });\n});","define(\"a24-ember-candidate-profile/components/candidate-qualifications\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/candidate-qualifications\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _didRenderChangesMixin, _candidateQualifications, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _candidateQualifications.default,\n        objSettingsRestService: null,\n        sCandidateId: null,\n        sCandidateType: null,\n        sCandidateTypeName: null,\n        objCandidateQualificationsRestService: null,\n\n        _bAllowEdit: true,\n        _bServerError: false,\n        _bLoading: true,\n        _bNoData: true,\n        _bPopupLoading: true,\n        _bPopupQualificationLoading: false,\n        _bPopupDeleteLoading: false,\n        _bShowManagePopup: false,\n        _bChangesMadeToQualifications: false,\n        _bShowQualificationEdit: false,\n        _bIsAdd: false,\n        _bShowDeleteConfirm: false,\n        _bShowUnsavedData: false,\n        _bShowVerifyConfirm: false,\n        _bPopupVerifyLoading: false,\n\n        _sFilterCurrentQualificationsValue: \"\",\n        _sFilterQualificationsValue: \"\",\n        _sQualificationId: null,\n        _sCandidateQualificationId: null,\n        _sCardHeader: null,\n        _sManagePopupHeader: null,\n        _sAddEditQualificationHeader: null,\n\n        _objCandidateQualificationsServicePromise: null,\n        _objSystemServicePromise: null,\n        _objEntityActionPromise: null,\n        _objSpecialPopupAction: null,\n        _objSpecialAddEditQualificationPopupAction: null,\n        _objOriginalData: null,\n\n        _arrQualifications: null,\n        _arrSystemQualifications: null,\n        _arrHeaderActions: null,\n        _arrQualificationsSortComponents: null,\n        _arrSortComponents: null,\n        _arrCandidateQualificationsSortComponent: null,\n        _arrCandidateQualifications: null,\n        _arrEntityData: null,\n\n        _bShowQualificationView: false,\n        _sViewQualificationHeader: null,\n        _arrViewQualificationData: null,\n        _arrViewQualificationHeaderActions: null,\n        _objSpecialViewQualificationPopupAction: null,\n\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objFabButtonService: Ember.inject.service(\"fab-button\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objCandidateEnums: Ember.inject.service(\"a24-enums-candidate-profile\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n\n        _objSystemService: Ember.inject.service(\"rest-system\"),\n        _objEntityActionService: Ember.inject.service(\"rest-entity-action\"),\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.set(\"_objSpecialPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this._onPopupManageCancel();\n                }\n            });\n\n            this.set(\"_objSpecialAddEditQualificationPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this._onPopupQualificationAddEditCancel();\n                }\n            });\n\n            this.set(\"_objSpecialViewQualificationPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this._onPopupQualificationViewCancel();\n                }\n            });\n\n            this.set(\"_arrReloadActions\", [{\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"reload\"),\n                sIcon: \"refresh\",\n                executeCardAction: function executeCardAction() {\n                    _this._getCandidateQualifications(_this.get(\"sCandidateType\"));\n                }\n            }]);\n\n            if (a24Core.isEmpty(this.get(\"_arrViewQualificationHeaderActions\"))) {\n                this.set(\"_arrViewQualificationHeaderActions\", []);\n            }\n\n            if (a24Core.isEmpty(this.get(\"_arrHeaderActions\"))) {\n                this.set(\"_arrHeaderActions\", []);\n            }\n\n            if (a24Core.isEmpty(this.get(\"_arrQualificationsSortComponents\"))) {\n                this.set(\"_arrQualificationsSortComponents\", []);\n            }\n\n            this._getCandidateQualifications(this.get(\"sCandidateType\"));\n        },\n        onCandidateTypeChange: Ember.observer(\"sCandidateType\", function () {\n            // Resets the system qualifications as tabs changed.\n            this.set(\"_arrEntityData\", null);\n            this.set(\"_arrSystemQualifications\", null);\n            this._getCandidateQualifications(this.get(\"sCandidateType\"));\n        }),\n        _bIsAgency: Ember.computed(\"objCandidateQualificationsRestService.sContext\", function () {\n            return this.get(\"objCandidateQualificationsRestService.sContext\") === this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY\");\n        }),\n        _bIsAgencyGroup: Ember.computed(\"objCandidateQualificationsRestService.sContext\", function () {\n            return this.get(\"objCandidateQualificationsRestService.sContext\") === this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\");\n        }),\n        _getCandidateQualifications: function _getCandidateQualifications(sCandidateType) {\n            var _this2 = this;\n\n            if (!this.get(\"objSettingsRestService.objSettings.employment_skills_editable\") || a24Core.isEmpty(this.get(\"objSettingsRestService.objSettings.agency_groups\")) || a24Core.isEmpty(this.get(\"sCandidateType\"))) {\n                this.set(\"_bAllowEdit\", false);\n                return;\n            } else {\n                this.set(\"_bAllowEdit\", true);\n            }\n            this.set(\"_bLoading\", true);\n            this.set(\"_bPopupLoading\", true);\n            this.set(\"_bServerError\", false);\n            if (!a24Core.isEmpty(this.get(\"objChildren.sSearchCurrentQualifications\"))) {\n                this.get(\"objChildren.sSearchCurrentQualifications\").clear();\n            }\n            this.set(\"_sCardHeader\", this.get(\"_objCandidateProfileStringsService\").getTokenString(\"qualificationsHeader\", this.get(\"sCandidateTypeName\")));\n            this.get(\"objCandidateQualificationsRestService\").getQualifications(this, \"_objCandidateQualificationsServicePromise\", this.get(\"sCandidateId\"), function (arrResponse) {\n                _this2.set(\"_arrCandidateQualifications\", null);\n                _this2._prepareForDisplay(arrResponse);\n                _this2.set(\"_bShowQualificationEdit\", false);\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode , sStatus, objErrorThrown, objError*/{\n                _this2.set(\"_bServerError\", true);\n                _this2.set(\"_bLoading\", false);\n            }), {\n                items_per_page: {\n                    mValue: 1000\n                },\n                position_types: {\n                    mValue: sCandidateType\n                }\n            });\n        },\n        _prepareForDisplay: function _prepareForDisplay(arrResponse) {\n            var _this3 = this;\n\n            if (this.get(\"_bAllowEdit\") && !this.get(\"_bIsAgency\")) {\n                this.get(\"_objFabButtonService\").showFabButton(function () {\n                    _this3._showManageQualifications();\n                });\n            }\n\n            if (a24Core.isEmpty(arrResponse)) {\n                this.set(\"_bNoData\", true);\n                this.set(\"_arrHeaderActions\", []);\n            } else {\n                this.set(\"_bNoData\", false);\n                this.set(\"_arrCandidateQualifications\", arrResponse);\n                var arrHeaderActions = [{\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"refresh\"),\n                    sIcon: \"refresh\",\n                    executeCardAction: function executeCardAction() {\n                        _this3._getCandidateQualifications(_this3.get(\"sCandidateType\"));\n                    }\n                }];\n\n                if (!this.get(\"_bIsAgency\")) {\n                    arrHeaderActions.push({\n                        sTitle: this.get(\"_objStringsService\").getString(\"edit\"),\n                        sIcon: \"edit\",\n                        executeCardAction: function executeCardAction() {\n                            _this3._showManageQualifications();\n                        }\n                    });\n                }\n\n                this.set(\"_arrHeaderActions\", arrHeaderActions);\n\n                this.set(\"_arrSortComponents\", this._setupTagComponents(arrResponse, false));\n            }\n            this.set(\"_bLoading\", false);\n        },\n        onInputValueChanged: function onInputValueChanged(arrChildRef) {\n            this._super.apply(this, arguments);\n\n            // Get the reference of the field that changed\n            var sLookup = arrChildRef.join(\".\");\n            if (sLookup === \"objChildren.sSearchCurrentQualifications\") {\n                this.set(\"_sFilterCurrentQualificationsValue\", this.get(sLookup + \".mValue\"));\n            } else if (sLookup === \"objChildren.sSearchQualifications\") {\n                this.set(\"_sFilterQualificationsValue\", this.get(sLookup + \".mValue\"));\n            }\n        },\n\n        _setupTagComponents: function _setupTagComponents(arrCandidateQualifications, bManage) {\n            var objThis = this;\n            var bCanAction = false;\n            var arrSortComponents = [];\n            var sEditIcon = null;\n\n            // Setup edit qualifications part\n            if (!a24Core.isEmpty(arrCandidateQualifications)) {\n                for (var k = 0; k < arrCandidateQualifications.length; k++) {\n                    sEditIcon = \"\";\n                    bCanAction = arrCandidateQualifications[k].status === this.get(\"_objCandidateEnums.qualificationsStatus.UNVERIFIED.backend\");\n                    if (bManage) {\n                        sEditIcon = \"edit\";\n                    }\n                    arrSortComponents.push({\n                        sComponent: \"tag-component-shrink\",\n                        objData: {\n                            sTitle: arrCandidateQualifications[k].qualification_name,\n                            mValue: arrCandidateQualifications[k],\n                            sColor: \"a24-primary-color-hue-3-force white-text\",\n                            sActionIcon: bCanAction ? sEditIcon : \"verified_user\",\n                            sActionIconColor: \"white-text\"\n                        },\n                        objActions: {\n                            onTagClicked: function onTagClicked(sTitle, mValue) {\n                                objThis.onQualificationsTagClicked(mValue);\n                            }\n                        }\n                    });\n                }\n            }\n\n            if (bManage) {\n                arrSortComponents.sort(function (objA, objB) {\n                    if (objA.objData.sTitle.toLowerCase() < objB.objData.sTitle.toLowerCase()) {\n                        return -1;\n                    }\n                    if (objA.objData.sTitle.toLowerCase() > objB.objData.sTitle.toLowerCase()) {\n                        return 1;\n                    }\n                    return 0;\n                });\n            }\n\n            return arrSortComponents;\n        },\n\n        _showManageQualifications: function _showManageQualifications() {\n            this.set(\"_sManagePopupHeader\", this.get(\"_objCandidateProfileStringsService\").getTokenString(\"headerManageQualifications\", this.get(\"sCandidateTypeName\")));\n            this.set(\"_bShowManagePopup\", true);\n            this._getSystemQualifications();\n        },\n\n        _getSystemQualifications: function _getSystemQualifications() {\n            var _this4 = this;\n\n            this.set(\"_bPopupLoading\", true);\n\n            var objPromiseList = {};\n\n            var arrRequiredResponses = [];\n            if (!this.get(\"_bIsAgency\") && a24Core.isEmpty(this.get(\"_arrEntityData\")) && !a24Core.isEmpty(this.get(\"_arrCandidateQualifications\"))) {\n                var arrQualifications = this.get(\"_arrCandidateQualifications\");\n\n                var arrQualificationsIds = [];\n                if (!a24Core.isEmpty(arrQualifications)) {\n                    for (var i = 0; i < arrQualifications.length; i++) {\n                        arrQualificationsIds.push(arrQualifications[i]._id);\n                    }\n                }\n\n                var objQuery = {\n                    entity_id: { mValue: arrQualificationsIds.join(\",\") }\n                };\n\n                var objPromiseEntityAction = this.get(\"_objEntityActionService\").getEntityActions(this, \"_objEntityActionPromise\", \"qualification\", objQuery, function () {\n                    // Handled by RSVP\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"500\", \"502\", \"503\", \"504\"], function () /*sCode, sStatus, objErrorThrown, objError*/{}));\n\n                objPromiseList._objEntityAction = objPromiseEntityAction;\n                arrRequiredResponses.push(\"_objEntityAction\");\n            }\n\n            if (a24Core.isEmpty(this.get(\"_arrSystemQualifications\"))) {\n                var objPromiseSystemQualifications = this.get(\"_objSystemService\").getQualifications(this, \"_objSystemServicePromise\", function () {}, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode , sStatus, objErrorThrown, objError*/{\n                    _this4.set(\"_bPopupLoading\", false);\n                    _this4.set(\"_bShowManagePopup\", false);\n                    _this4.get(\"_objSnackbarService\").showSnackbarMessage(_this4.get(\"_objCandidateProfileStringsService\").getString(\"getSystemQualificationsError\"));\n                }), {\n                    position_types: {\n                        mValue: this.get(\"sCandidateType\")\n                    },\n                    sortBy: {\n                        mValue: \"name\"\n                    },\n                    status: {\n                        mValue: this.get(\"_objCandidateEnums.systemQualificationStatus.ACTIVE.backend\")\n                    },\n                    items_per_page: {\n                        mValue: 1000\n                    }\n                });\n\n                objPromiseList._objRestSystemQualifications = objPromiseSystemQualifications;\n                arrRequiredResponses.push(\"_objRestSystemQualifications\");\n            }\n\n            if (!a24Core.isEmpty(arrRequiredResponses)) {\n                Ember.copy(a24RSVP).configure(this, objPromiseList, [{\n                    arrRequiredResponses: arrRequiredResponses,\n                    funcOnComplete: function funcOnComplete(objResponses) {\n                        if (!a24Core.isEmpty(objResponses._objEntityAction) && !a24Core.isEmpty(objResponses._objEntityAction.objHeaders) && objResponses._objEntityAction.objHeaders.statusText === \"abort\" || !a24Core.isEmpty(objResponses._objRestSystemQualifications) && !a24Core.isEmpty(objResponses._objRestSystemQualifications.objHeaders) && objResponses._objRestSystemQualifications.objHeaders.statusText === \"abort\") {\n                            return;\n                        }\n\n                        if (!a24Core.isEmpty(objPromiseList._objEntityAction)) {\n                            if (!a24Core.isEmpty(objResponses._objEntityAction) && !a24Core.isEmpty(objResponses._objEntityAction.objResponse)) {\n                                _this4.set(\"_arrEntityData\", objResponses._objEntityAction.objResponse);\n                            } else {\n                                _this4.set(\"_arrEntityData\", []);\n                            }\n                        }\n\n                        if (!a24Core.isEmpty(objPromiseList._objRestSystemQualifications)) {\n                            if (!a24Core.isEmpty(objResponses._objRestSystemQualifications) && !a24Core.isEmpty(objResponses._objRestSystemQualifications.objResponse)) {\n                                _this4.set(\"_arrSystemQualifications\", objResponses._objRestSystemQualifications.objResponse);\n                            } else {\n                                _this4.set(\"_arrSystemQualifications\", []);\n                            }\n                        }\n\n                        _this4._setupQualificationsForManage();\n                        _this4.set(\"_bPopupLoading\", false);\n                    }\n                }]);\n            } else {\n                this._setupQualificationsForManage();\n                this.set(\"_bPopupLoading\", false);\n            }\n        },\n        _setupQualificationsForManage: function _setupQualificationsForManage() {\n            var arrSystemQualifications = this.get(\"_arrSystemQualifications\");\n            var arrCandidateQualifications = this.get(\"_arrCandidateQualifications\");\n            var arrSystemQualificationSortComponents = [];\n            var bFound = false;\n            var objThis = this;\n\n            // Setup edit qualifications part\n\n            this.set(\"_arrCandidateQualificationsSortComponent\", this._setupTagComponents(arrCandidateQualifications, true));\n\n            //Setup System qualifications for the list\n            if (!a24Core.isEmpty(arrSystemQualifications)) {\n                for (var i = 0; i < arrSystemQualifications.length; i++) {\n                    bFound = false;\n                    if (!a24Core.isEmpty(arrCandidateQualifications)) {\n                        for (var l = 0; l < arrCandidateQualifications.length; l++) {\n                            if (arrCandidateQualifications[l].qualification_name === arrSystemQualifications[i].name) {\n                                bFound = true;\n                                break;\n                            }\n                        }\n                    }\n                    if (!bFound) {\n                        arrSystemQualificationSortComponents.push({\n                            sComponent: \"tag-component-shrink\",\n                            objData: {\n                                sTitle: arrSystemQualifications[i].name,\n                                mValue: arrSystemQualifications[i]\n                            },\n                            objActions: {\n                                onTagClicked: function onTagClicked(sTitle, mValue) {\n                                    objThis.onQualificationsTagClicked(mValue);\n                                }\n                            }\n                        });\n                    }\n                }\n            }\n            this.set(\"_arrQualificationsSortComponents\", arrSystemQualificationSortComponents);\n        },\n        _onPopupManageCancel: function _onPopupManageCancel() {\n            if (this.get(\"_bPopupLoading\")) {\n                return;\n            }\n            this.set(\"_bShowManagePopup\", false);\n            if (!a24Core.isEmpty(this.get(\"objChildren.sSearchQualifications\"))) {\n                this.get(\"objChildren.sSearchQualifications\").clear();\n            }\n            if (this.get(\"_bChangesMadeToQualifications\")) {\n                this.set(\"_bChangesMadeToQualifications\", false);\n                this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objCandidateProfileStringsService\").getHTMLTokenString(\"itemUpdateDelay\"));\n                this._getCandidateQualifications(this.get(\"sCandidateType\"));\n                if (!a24Core.isEmpty(this.get(\"objChildren.sSearchCurrentQualifications\"))) {\n                    this.get(\"objChildren.sSearchCurrentQualifications\").clear();\n                }\n            }\n        },\n        _onPopupQualificationViewCancel: function _onPopupQualificationViewCancel() {\n            this.set(\"_bShowQualificationView\", false);\n        },\n        _onPopupQualificationAddEditCancel: function _onPopupQualificationAddEditCancel() {\n            if (this.get(\"_bPopupQualificationLoading\")) {\n                return;\n            }\n            // Check if the form has any unsaved data\n            var bDataMatches = a24Core.compareObjects(Ember, this.getPlainFormValueObject(), this.get(\"_objOriginalData\"));\n\n            if (bDataMatches) {\n                this.set(\"_bShowQualificationEdit\", false);\n            } else {\n                this.set(\"_bShowUnsavedData\", true);\n            }\n        },\n        _clearFormData: function _clearFormData() {\n            var sFilterCurrentQualificationsValue = this.get(\"_sFilterCurrentQualificationsValue\");\n            var sFilterQualificationsValue = this.get(\"_sFilterQualificationsValue\");\n            this.clearAllErrorMessages();\n            this.clearForm();\n\n            //Reset the search values since the clearForm would have cleared them.\n            if (!a24Core.isEmpty(this.get(\"objChildren.sSearchCurrentQualifications\"))) {\n                this.get(\"objChildren.sSearchCurrentQualifications\").setValueFromOutside(sFilterCurrentQualificationsValue);\n            }\n            if (!a24Core.isEmpty(this.get(\"objChildren.sSearchQualifications\"))) {\n                this.get(\"objChildren.sSearchQualifications\").setValueFromOutside(sFilterQualificationsValue);\n            }\n        },\n        onQualificationsVerifyClicked: function onQualificationsVerifyClicked(mValue) {\n            this.set(\"_bShowVerifyConfirm\", true);\n            this.set(\"_bPopupVerifyLoading\", false);\n\n            this.set(\"_sQualificationId\", mValue.qualification_id);\n            this.set(\"_sCandidateQualificationId\", mValue._id);\n        },\n        onQualificationsRemoveClicked: function onQualificationsRemoveClicked(mValue) {\n            this.set(\"_bShowDeleteConfirm\", true);\n            this.set(\"_bPopupDeleteLoading\", false);\n\n            this.set(\"_sQualificationId\", mValue.qualification_id);\n            this.set(\"_sCandidateQualificationId\", mValue._id);\n        },\n        onQualificationsEditClicked: function onQualificationsEditClicked(mValue) {\n            var _this5 = this;\n\n            this._clearFormData();\n\n            this.set(\"_sAddEditQualificationHeader\", this.get(\"_objCandidateProfileStringsService\").getHTMLTokenString(\"editQualificationsHeader\", this.get(\"sCandidateTypeName\"), mValue.qualification_name));\n            if (!a24Core.isEmpty(mValue.obtained_at)) {\n                var objObtainedAtDate = a24DateManager.createDate(this.get(\"_objUserSession\").get(\"objContextDetails.sTimezone\"));\n                objObtainedAtDate.setDateFromRest(mValue.obtained_at, true);\n\n                this.get(\"objChildren.obtained_at\").setValueFromOutside(objObtainedAtDate.getDateFormat());\n            }\n            if (!a24Core.isEmpty(mValue.expires_at)) {\n                var objExpiresAtDate = a24DateManager.createDate(this.get(\"_objUserSession\").get(\"objContextDetails.sTimezone\"));\n                objExpiresAtDate.setDateFromRest(mValue.expires_at, true);\n\n                this.get(\"objChildren.expires_at\").setValueFromOutside(objExpiresAtDate.getDateFormat());\n            }\n            this.get(\"objChildren.institution\").setValueFromOutside(mValue.institution);\n\n            this.set(\"_sQualificationId\", mValue.qualification_id);\n            this.set(\"_sCandidateQualificationId\", mValue._id);\n            this.set(\"_bIsAdd\", false);\n            this.set(\"_bPopupQualificationLoading\", false);\n            this.set(\"_bShowQualificationEdit\", true);\n\n            Ember.run.next(function () {\n                if (a24Core.isEmpty(_this5)) {\n                    return;\n                }\n                Ember.run.schedule(\"afterRender\", function () {\n                    _this5.set(\"_objOriginalData\", _this5.getPlainFormValueObject());\n                });\n            });\n        },\n        onQualificationsTagClicked: function onQualificationsTagClicked(mValue) {\n            var _this6 = this;\n\n            if (a24Core.isEmpty(mValue.qualification_id)) {\n                this._clearFormData();\n\n                // this is when its from the system list\n                this.set(\"_sAddEditQualificationHeader\", this.get(\"_objCandidateProfileStringsService\").getHTMLTokenString(\"addQualificationsHeader\", this.get(\"sCandidateTypeName\"), mValue.name));\n                this.set(\"_sQualificationId\", mValue._id);\n                this.set(\"_sCandidateQualificationId\", null);\n                this.set(\"_bIsAdd\", true);\n                this.set(\"_bPopupQualificationLoading\", false);\n                this.set(\"_bShowQualificationEdit\", true);\n\n                Ember.run.next(function () {\n                    if (a24Core.isEmpty(_this6)) {\n                        return;\n                    }\n                    Ember.run.schedule(\"afterRender\", function () {\n                        _this6.set(\"_objOriginalData\", _this6.getPlainFormValueObject());\n                    });\n                });\n            } else {\n                if (!this.get(\"_bIsAgency\")) {\n                    this._showManageQualifications();\n                }\n\n                this.set(\"_sViewQualificationHeader\", this.get(\"_objCandidateProfileStringsService\").getHTMLTokenString(\"viewQualificationsHeader\", this.get(\"sCandidateTypeName\"), mValue.qualification_name));\n\n                var objThis = this;\n\n                var funcCardActionVerifyExecute = function funcCardActionVerifyExecute(objItem) {\n                    return function () {\n                        objThis.onQualificationsVerifyClicked(objItem);\n                    };\n                };\n\n                var funcCardActionEditExecute = function funcCardActionEditExecute(objItem) {\n                    return function () {\n                        objThis.onQualificationsEditClicked(objItem);\n                    };\n                };\n\n                var funcCardActionRemoveExecute = function funcCardActionRemoveExecute(objItem) {\n                    return function () {\n                        objThis.onQualificationsRemoveClicked(objItem);\n                    };\n                };\n\n                var arrActions = [];\n\n                var arrEntityData = this.get(\"_arrEntityData\");\n\n                var objEntityData = {};\n                if (!a24Core.isEmpty(arrEntityData)) {\n                    objEntityData = arrEntityData.find(function (objEntityAction) {\n                        var objUpdateAction = {};\n                        if (objEntityAction.entity_id === mValue._id) {\n                            objUpdateAction = objEntityAction.actions.find(function (objAction) {\n                                return objAction.action === \"update\";\n                            });\n                        }\n\n                        if (!a24Core.isEmpty(objUpdateAction) && objUpdateAction.allowed) {\n                            return true;\n                        }\n\n                        return false;\n                    });\n                }\n                if (!this.get(\"_bIsAgency\")) {\n                    if (mValue.status === this.get(\"_objCandidateEnums.qualificationsStatus.VERIFIED.backend\")) {\n                        if (this.get(\"_bIsAgencyGroup\") && !a24Core.isEmpty(objEntityData)) {\n                            arrActions.push({\n                                sTitle: this.get(\"_objStringsService\").getString(\"remove\"),\n                                sIcon: \"delete\",\n                                executeCardAction: funcCardActionRemoveExecute(mValue)\n                            });\n                            arrActions.push({\n                                sTitle: this.get(\"_objStringsService\").getString(\"edit\"),\n                                sIcon: \"edit\",\n                                executeCardAction: funcCardActionEditExecute(mValue)\n                            });\n                        }\n                    } else if (mValue.status === this.get(\"_objCandidateEnums.qualificationsStatus.UNVERIFIED.backend\")) {\n                        arrActions.push({\n                            sTitle: this.get(\"_objStringsService\").getString(\"remove\"),\n                            sIcon: \"delete\",\n                            executeCardAction: funcCardActionRemoveExecute(mValue)\n                        });\n                        arrActions.push({\n                            sTitle: this.get(\"_objStringsService\").getString(\"edit\"),\n                            sIcon: \"edit\",\n                            executeCardAction: funcCardActionEditExecute(mValue)\n                        });\n                        if (this.get(\"_bIsAgencyGroup\")) {\n                            arrActions.unshift({\n                                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"verify\"),\n                                sIcon: \"verified_user\",\n                                executeCardAction: funcCardActionVerifyExecute(mValue)\n                            });\n                        }\n                    }\n                }\n\n                this.set(\"_arrViewQualificationHeaderActions\", arrActions);\n\n                var sDateObtained = null;\n                var sDateExpired = null;\n\n                if (!a24Core.isEmpty(mValue.obtained_at)) {\n                    var objDateObtained = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                    objDateObtained.setDateFromRest(mValue.obtained_at, true);\n                    sDateObtained = objDateObtained.getDateFormat();\n                }\n                if (!a24Core.isEmpty(mValue.expires_at)) {\n                    var objDateExpired = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                    objDateExpired.setDateFromRest(mValue.expires_at, true);\n                    sDateExpired = objDateExpired.getDateFormat();\n                }\n\n                var arrItems = [{\n                    sLabel: this.get(\"_objCandidateProfileStringsService\").getString(\"dateObtained\"),\n                    sValue: sDateObtained,\n                    bText: true\n                }, {\n                    sLabel: this.get(\"_objCandidateProfileStringsService\").getString(\"expiryDate\"),\n                    sValue: sDateExpired,\n                    bText: true\n                }, {\n                    sLabel: this.get(\"_objCandidateProfileStringsService\").getString(\"institution\"),\n                    sValue: mValue.institution,\n                    bText: true\n                }, {\n                    sLabel: this.get(\"_objStringsService\").getString(\"status\"),\n                    sValue: this.get(\"_objCandidateEnums\").getFrontendValue(\"qualificationsStatus\", mValue.status),\n                    bText: true\n                }];\n\n                this.set(\"_arrViewQualificationData\", [{\n                    arrItems: arrItems\n                }]);\n\n                this.set(\"_objQualificationView\", true);\n                this.set(\"_bShowQualificationView\", true);\n            }\n        },\n        getPayload: function getPayload() {\n            var objPayload = a24Core.removeNullsFromValue(Ember, this.getPlainFormValueObject());\n\n            if (!a24Core.isEmpty(objPayload.obtained_at)) {\n                var objStartDate = a24DateManager.createDate(this.get(\"_objUserSession\").get(\"objContextDetails.sTimezone\"));\n                objStartDate.setDateFromBrowser(objPayload.obtained_at, a24Constants.DATE_FORMAT);\n\n                objStartDate.setTimeToStartOfDay();\n\n                objPayload.obtained_at = objStartDate.getDateStringForRest();\n            }\n\n            if (!a24Core.isEmpty(objPayload.expires_at)) {\n                var objEndDate = a24DateManager.createDate(this.get(\"_objUserSession\").get(\"objContextDetails.sTimezone\"));\n                objEndDate.setDateFromBrowser(objPayload.expires_at, a24Constants.DATE_FORMAT);\n\n                objEndDate.setTimeToEndOfDay();\n\n                objPayload.expires_at = objEndDate.getDateStringForRest();\n            }\n\n            objPayload.qualification_id = this.get(\"_sQualificationId\");\n\n            return objPayload;\n        },\n\n        _onPopupQualificationAddEditSave: function _onPopupQualificationAddEditSave() {\n            var _this7 = this;\n\n            this.clearAllErrorMessages();\n\n            if (!this.doFullValidation()) {\n                var objPayload = this.getPayload();\n\n                this.set(\"_bPopupQualificationLoading\", true);\n                if (this.get(\"_bIsAdd\")) {\n                    this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsService\").getTokenString(\"addingItem\", this.get(\"_objCandidateProfileStringsService\").getString(\"qualification\")));\n\n                    this.get(\"objCandidateQualificationsRestService\").addQualification(this, \"_objCandidateQualificationsServicePromise\", this.get(\"sCandidateId\"), objPayload, function (objNewQualification) {\n                        var arrSystemQualifications = _this7.get(\"_arrSystemQualifications\");\n                        var objQualification = objNewQualification;\n                        for (var i = 0; i < arrSystemQualifications.length; i++) {\n\n                            if (objNewQualification.qualification_id === arrSystemQualifications[i]._id) {\n                                objQualification.qualification_name = arrSystemQualifications[i].name;\n                                objQualification.position_types = arrSystemQualifications[i].position_types;\n                                break;\n                            }\n                        }\n\n                        if (a24Core.isEmpty(_this7.get(\"_arrCandidateQualifications\"))) {\n                            _this7.set(\"_arrCandidateQualifications\", [objQualification]);\n                        } else {\n                            _this7.get(\"_arrCandidateQualifications\").pushObject(objQualification);\n                        }\n\n                        _this7.set(\"_arrEntityData\", []);\n\n                        _this7._doSuccess(_this7.get(\"_objStringsService\").getTokenString(\"successAddItem\", _this7.get(\"_objCandidateProfileStringsService\").getString(\"qualification\")));\n                    }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode, sStatus, objErrorThrown, objError) {\n                        _this7.set(\"_bPopupQualificationLoading\", false);\n                        if (sCode === \"404\" || sCode === \"409\") {\n                            _this7.get(\"_objSnackbarService\").showSnackbarMessage(_this7.get(\"_objCandidateProfileStringsService\").getString(\"addFailedRefreshPage\"));\n                        } else {\n                            _this7._doError(sCode, objError, _this7.get(\"_objStringsService\").getTokenString(\"failAddItem\", _this7.get(\"_objCandidateProfileStringsService\").getString(\"qualification\")));\n                        }\n                    }));\n                } else {\n                    this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsService\").getTokenString(\"updatingItem\", this.get(\"_objCandidateProfileStringsService\").getString(\"qualification\")));\n\n                    this.get(\"objCandidateQualificationsRestService\").updateQualification(this, \"_objCandidateQualificationsServicePromise\", this.get(\"sCandidateId\"), this.get(\"_sCandidateQualificationId\"), objPayload, function (objResponse) {\n                        //Update the item from the existing items so that the manage popup will display the correct\n                        // information when users click on it again.\n                        var arrCandidateQualifications = _this7.get(\"_arrCandidateQualifications\");\n                        for (var i = 0; i < arrCandidateQualifications.length; i++) {\n                            if (_this7.get(\"_sQualificationId\") === arrCandidateQualifications[i].qualification_id) {\n                                var objQualification = arrCandidateQualifications[i];\n                                objQualification.obtained_at = objResponse.obtained_at;\n                                objQualification.expires_at = objResponse.expires_at;\n                                objQualification.institution = objResponse.institution;\n                                objQualification.status = objResponse.status;\n                                break;\n                            }\n                        }\n\n                        _this7._doSuccess(_this7.get(\"_objStringsService\").getTokenString(\"successUpdateItem\", _this7.get(\"_objCandidateProfileStringsService\").getString(\"qualification\")));\n                    }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode, sStatus, objErrorThrown, objError) {\n                        _this7.set(\"_bPopupQualificationLoading\", false);\n                        if (sCode === \"404\" || sCode === \"409\") {\n                            _this7.get(\"_objSnackbarService\").showSnackbarMessage(_this7.get(\"_objStringsService\").getString(\"updateFailedRefreshPage\"));\n                        } else {\n                            _this7._doError(sCode, objError, _this7.get(\"_objStringsService\").getTokenString(\"failUpdateItem\", _this7.get(\"_objCandidateProfileStringsService\").getString(\"qualification\")));\n                        }\n                    }));\n                }\n            }\n        },\n        _onPopupQualificationVerifyConfirm: function _onPopupQualificationVerifyConfirm() {\n            var _this8 = this;\n\n            this.set(\"_bPopupVerifyLoading\", true);\n\n            this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objCandidateProfileStringsService\").getTokenString(\"verifyingItem\", this.get(\"_objCandidateProfileStringsService\").getString(\"qualification\")));\n\n            this.get(\"objCandidateQualificationsRestService\").verifyQualification(this, \"_objCandidateQualificationsServicePromise\", this.get(\"sCandidateId\"), this.get(\"_sCandidateQualificationId\"), function () {\n                // Changing the status of the qualification so that it will reflect on the manage popup\n                var arrCandidateQualifications = _this8.get(\"_arrCandidateQualifications\");\n                for (var i = 0; i < arrCandidateQualifications.length; i++) {\n                    if (_this8.get(\"_sQualificationId\") === arrCandidateQualifications[i].qualification_id) {\n                        _this8.set(\"_arrCandidateQualifications.\" + i + \".status\", _this8.get(\"_objCandidateEnums.qualificationsStatus.VERIFIED.backend\"));\n                        break;\n                    }\n                }\n\n                _this8._doSuccess(_this8.get(\"_objCandidateProfileStringsService\").getTokenString(\"successVerifyItem\", _this8.get(\"_objCandidateProfileStringsService\").getString(\"qualification\")));\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode, sStatus, objErrorThrown, objError) {\n                _this8.set(\"_bPopupVerifyLoading\", false);\n                if (sCode === \"404\" || sCode === \"409\") {\n                    _this8.get(\"_objSnackbarService\").showSnackbarMessage(_this8.get(\"_objCandidateProfileStringsService\").getString(\"verifyFailedRefreshPage\"));\n                } else {\n                    _this8._doError(sCode, objError, _this8.get(\"_objCandidateProfileStringsService\").getTokenString(\"failVerifyItem\", _this8.get(\"_objCandidateProfileStringsService\").getString(\"qualification\")));\n                }\n            }));\n        },\n        _onPopupQualificationDeleteConfirm: function _onPopupQualificationDeleteConfirm() {\n            var _this9 = this;\n\n            this.set(\"_bPopupDeleteLoading\", true);\n\n            this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsService\").getTokenString(\"removingItem\", this.get(\"_objCandidateProfileStringsService\").getString(\"qualification\")));\n\n            this.get(\"objCandidateQualificationsRestService\").deleteQualification(this, \"_objCandidateQualificationsServicePromise\", this.get(\"sCandidateId\"), this.get(\"_sCandidateQualificationId\"), function () {\n                //Remove the item from the existing items so that the manage popup wont display that item and make it\n                //availible to be added again\n                var arrCandidateQualifications = _this9.get(\"_arrCandidateQualifications\");\n                var iRemoveIndex = -1;\n                for (var i = 0; i < arrCandidateQualifications.length; i++) {\n                    if (_this9.get(\"_sQualificationId\") === arrCandidateQualifications[i].qualification_id) {\n                        iRemoveIndex = i;\n                        break;\n                    }\n                }\n                if (iRemoveIndex !== -1) {\n                    arrCandidateQualifications.removeAt(iRemoveIndex);\n                }\n\n                _this9.set(\"_arrEntityData\", []);\n\n                _this9._doSuccess(_this9.get(\"_objStringsService\").getTokenString(\"successRemoveItem\", _this9.get(\"_objCandidateProfileStringsService\").getString(\"qualification\")));\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode, sStatus, objErrorThrown, objError) {\n                _this9.set(\"_bPopupDeleteLoading\", false);\n                if (sCode === \"404\" || sCode === \"409\") {\n                    _this9.get(\"_objSnackbarService\").showSnackbarMessage(_this9.get(\"_objStringsService\").getString(\"removeFailedRefreshPage\"));\n                } else {\n                    _this9._doError(sCode, objError, _this9.get(\"_objStringsService\").getTokenString(\"failRemoveItem\", _this9.get(\"_objCandidateProfileStringsService\").getString(\"qualification\")));\n                }\n            }));\n        },\n        _doSuccess: function _doSuccess(sSnackbarMessage) {\n            this.get(\"_objSnackbarService\").showSnackbarMessage(sSnackbarMessage);\n            this.set(\"_bShowQualificationView\", false);\n            this.set(\"_bShowQualificationEdit\", false);\n            this.set(\"_bShowDeleteConfirm\", false);\n            this.set(\"_bShowVerifyConfirm\", false);\n\n            if (!a24Core.isEmpty(this.get(\"objChildren.sSearchQualifications\"))) {\n                this.get(\"objChildren.sSearchQualifications\").clear();\n            }\n\n            this.set(\"_bChangesMadeToQualifications\", true);\n\n            this._getSystemQualifications();\n        },\n        _doError: function _doError(sCode, objError, sSnackbarMessage) {\n            this.get(\"_objSnackbarService\").showSnackbarMessage(sSnackbarMessage);\n        },\n        actions: {\n            onPopupManageCancel: function onPopupManageCancel() {\n                this._onPopupManageCancel();\n            },\n            onPopupQualificationAddEditCancel: function onPopupQualificationAddEditCancel() {\n                this._onPopupQualificationAddEditCancel();\n            },\n            onPopupQualificationAddEditSave: function onPopupQualificationAddEditSave() {\n                this._onPopupQualificationAddEditSave();\n            },\n            onPopupDeleteClose: function onPopupDeleteClose() {\n                if (this.get(\"_bPopupDeleteLoading\")) {\n                    return;\n                }\n\n                this.set(\"_bShowDeleteConfirm\", false);\n            },\n            onPopupVerifyClose: function onPopupVerifyClose() {\n                if (this.get(\"_bPopupVerifyLoading\")) {\n                    return;\n                }\n\n                this.set(\"_bShowVerifyConfirm\", false);\n            },\n            onPopupVerifyConfirm: function onPopupVerifyConfirm() {\n                this._onPopupQualificationVerifyConfirm();\n            },\n            onPopupDeleteConfirm: function onPopupDeleteConfirm() {\n                this._onPopupQualificationDeleteConfirm();\n            },\n            onPopupQualificationViewDone: function onPopupQualificationViewDone() {\n                this._onPopupQualificationViewCancel();\n            },\n            onPopupQualificationViewCancel: function onPopupQualificationViewCancel() {\n                this._onPopupQualificationViewCancel();\n            },\n            onPopupUnsavedConfirm: function onPopupUnsavedConfirm() {\n                this.set(\"_bShowQualificationEdit\", false);\n                this.set(\"_bShowUnsavedData\", false);\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/candidate-skills\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/candidate-skills\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _didRenderChangesMixin, _candidateSkills, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _candidateSkills.default,\n        objSettingsRestService: null,\n        sCandidateId: null,\n        sCandidateType: null,\n        sCandidateTypeName: null,\n        objCandidateSkillsRestService: null,\n        objCandidateStatedSkillsRestService: null,\n\n        _bAllowEdit: true,\n        _bServerError: false,\n        _bLoading: true,\n        _bNoData: true,\n        _bPopupLoading: true,\n        _bPopupSkillLoading: false,\n        _bPopupDeleteLoading: false,\n        _bPopupVerifyLoading: false,\n        _bShowManagePopup: false,\n        _bChangesMadeToSkills: false,\n        _bShowSkillEdit: false,\n        _bIsAdd: false,\n        _bShowDeleteConfirm: false,\n        _bShowVerifyConfirm: false,\n        _bShowUnsavedData: false,\n        _bShowSkillManagePopup: false,\n\n        _sFilterCurrentSkillsValue: \"\",\n        _sFilterSkillsValue: \"\",\n        _sSkillId: null,\n        _sCardHeader: null,\n        _sManagePopupHeader: null,\n        _sManageSkillPopupHeader: null,\n        _sAddEditSkillHeader: null,\n\n        _objCandidateSkillsServicePromise: null,\n        _objCandidateStatedSkillsServicePromise: null,\n        _objSystemServicePromise: null,\n        _objSpecialPopupAction: null,\n        _objSpecialAddEditSkillPopupAction: null,\n        _objOriginalData: null,\n\n        _arrSkills: null,\n        _arrSystemSkills: null,\n        _arrHeaderActions: null,\n        _arrSkillsSortComponents: null,\n        _arrSortComponents: null,\n        _arrCandidateSkillsSortComponent: null,\n        _arrGroupings: null,\n        _arrCandidateSkills: null,\n        _arrCandidateSkillManage: null,\n\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objFabButtonService: Ember.inject.service(\"fab-button\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objCandidateEnums: Ember.inject.service(\"a24-enums-candidate-profile\"),\n        _objConstantsEmberLibService: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n\n        _objSystemService: Ember.inject.service(\"rest-system\"),\n\n        _bIsAgencyGroup: Ember.computed(\"objCandidateSkillsRestService.sContext\", function () {\n            return this.get(\"objCandidateSkillsRestService.sContext\") === this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\");\n        }),\n\n        _bIsAgency: Ember.computed(\"objCandidateSkillsRestService.sContext\", function () {\n            return this.get(\"objCandidateSkillsRestService.sContext\") === this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY\");\n        }),\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.set(\"_objSpecialPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this._onPopupManageCancel();\n                }\n            });\n\n            this.set(\"_objSpecialManageSkillPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this._onPopupManageSkillCancel();\n                }\n            });\n\n            this.set(\"_objSpecialAddEditSkillPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this._onPopupSkillAddEditCancel();\n                }\n            });\n\n            this.set(\"_arrReloadActions\", [{\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"reload\"),\n                sIcon: \"refresh\",\n                executeCardAction: function executeCardAction() {\n                    _this._getCandidateSkills(_this.get(\"sCandidateType\"));\n                }\n            }]);\n\n            if (a24Core.isEmpty(this.get(\"_arrHeaderActions\"))) {\n                this.set(\"_arrHeaderActions\", []);\n            }\n\n            if (a24Core.isEmpty(this.get(\"_arrSkillsSortComponents\"))) {\n                this.set(\"_arrSkillsSortComponents\", []);\n            }\n\n            var objValidationConfig = {};\n\n            objValidationConfig[\"objChildren.years\"] = function (objMixin) {\n                objMixin.get(\"arrValidation\").pushObject(function () {\n                    if (!a24Core.isEmpty(objMixin.mValue) && objMixin.mValue.trim().match(/[^0-9]/g)) {\n                        return _this.get(\"_objCandidateProfileStringsService\").getTokenString(\"validationOnlyNumbes\", objMixin.sFieldName);\n                    }\n                    if ((a24Core.isEmpty(_this.get(\"objChildren.years.mValue\")) || parseInt(_this.get(\"objChildren.years.mValue\").trim()) === 0) && (a24Core.isEmpty(_this.get(\"objChildren.months.mValue\")) || parseInt(_this.get(\"objChildren.months.mValue\").trim()) === 0)) {\n                        return _this.get(\"_objCandidateProfileStringsService\").getString(\"validationYearsOrMonthsRequired\");\n                    }\n                });\n            };\n            objValidationConfig[\"objChildren.months\"] = function (objMixin) {\n                objMixin.get(\"arrValidation\").pushObject(function () {\n                    if (!a24Core.isEmpty(objMixin.mValue) && objMixin.mValue.trim().match(/[^0-9]/g)) {\n                        return _this.get(\"_objCandidateProfileStringsService\").getTokenString(\"validationOnlyNumbes\", objMixin.sFieldName);\n                    }\n                    if (!a24Core.isEmpty(objMixin.mValue) && parseInt(_this.get(\"objChildren.months.mValue\").trim()) > 11) {\n                        return _this.get(\"_objCandidateProfileStringsService\").getString(\"validationMonthSmallerThan12\");\n                    }\n                    if ((a24Core.isEmpty(_this.get(\"objChildren.years.mValue\")) || parseInt(_this.get(\"objChildren.years.mValue\").trim()) === 0) && (a24Core.isEmpty(_this.get(\"objChildren.months.mValue\")) || parseInt(_this.get(\"objChildren.months.mValue\").trim()) === 0)) {\n                        return _this.get(\"_objCandidateProfileStringsService\").getString(\"validationYearsOrMonthsRequired\");\n                    }\n                });\n            };\n\n            this.set(\"objChildConfig\", objValidationConfig);\n\n            this._getCandidateSkills(this.get(\"sCandidateType\"));\n        },\n\n        onCandidateTypeChange: Ember.observer(\"sCandidateType\", function () {\n            // Resets the system skills as tabs changed.\n            this.set(\"_arrSystemSkills\", null);\n            this._getCandidateSkills(this.get(\"sCandidateType\"));\n        }),\n\n        _getCandidateSkills: function _getCandidateSkills(sSelectedType) {\n            var _this2 = this;\n\n            if (!this.get(\"objSettingsRestService.objSettings.employment_skills_editable\") || a24Core.isEmpty(this.get(\"objSettingsRestService.objSettings.agency_groups\")) || a24Core.isEmpty(this.get(\"sCandidateType\"))) {\n                this.set(\"_bAllowEdit\", false);\n                return;\n            } else {\n                this.set(\"_bAllowEdit\", true);\n            }\n\n            this.set(\"_bLoading\", true);\n            this.set(\"_bPopupLoading\", true);\n            this.set(\"_bServerError\", false);\n            if (!a24Core.isEmpty(this.get(\"objChildren.sSearchCurrentSkills\"))) {\n                this.get(\"objChildren.sSearchCurrentSkills\").clear();\n            }\n            this.set(\"_sCardHeader\", this.get(\"_objCandidateProfileStringsService\").getTokenString(\"skillsHeader\", this.get(\"sCandidateTypeName\")));\n            this.get(\"objCandidateSkillsRestService\").getSkills(this, \"_objCandidateSkillsServicePromise\", this.get(\"sCandidateId\"), function (arrResponse) {\n                _this2.set(\"_arrCandidateSkills\", null);\n                _this2._prepareForDisplay(arrResponse);\n                _this2.set(\"_bShowSkillEdit\", false);\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode , sStatus, objErrorThrown, objError*/{\n                _this2.set(\"_bServerError\", true);\n                _this2.set(\"_bLoading\", false);\n            }), {\n                position_types: {\n                    mValue: sSelectedType\n                }\n            });\n        },\n        _prepareForDisplay: function _prepareForDisplay(arrResponse) {\n            var _this3 = this;\n\n            this.set(\"_arrSkills\", arrResponse);\n            if (this.get(\"_bAllowEdit\") && !this.get(\"_bIsAgency\")) {\n                this.get(\"_objFabButtonService\").showFabButton(function () {\n                    _this3._showManageSkills();\n                });\n            }\n\n            if (a24Core.isEmpty(arrResponse)) {\n                this.set(\"_bNoData\", true);\n                this.set(\"_arrHeaderActions\", []);\n            } else {\n                var arrHeaderActions = [{\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"refresh\"),\n                    sIcon: \"refresh\",\n                    executeCardAction: function executeCardAction() {\n                        _this3._getCandidateSkills(_this3.get(\"sCandidateType\"));\n                    }\n                }];\n                this.set(\"_bNoData\", false);\n                this.set(\"_arrCandidateSkills\", arrResponse);\n                if (!this.get(\"_bIsAgency\")) {\n                    arrHeaderActions.push({\n                        sTitle: this.get(\"_objStringsService\").getString(\"edit\"),\n                        sIcon: \"edit\",\n                        executeCardAction: function executeCardAction() {\n                            _this3._showManageSkills();\n                        }\n                    });\n                }\n                this.set(\"_arrHeaderActions\", arrHeaderActions);\n\n                this.set(\"_arrSortComponents\", this._setupTagComponents(arrResponse, false));\n\n                this.set(\"_arrGroupings\", [{\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"experience4PlusYears\"),\n                    funcGroupFilter: function funcGroupFilter(objComponent) {\n                        if (objComponent.objData.mValue.computed.duration > 12 * 4) {\n                            return true;\n                        } else {\n                            return false;\n                        }\n                    }\n                }, {\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"experience2To4Years\"),\n                    funcGroupFilter: function funcGroupFilter(objComponent) {\n                        if (objComponent.objData.mValue.computed.duration > 12 * 2 && objComponent.objData.mValue.computed.duration <= 12 * 4) {\n                            return true;\n                        } else {\n                            return false;\n                        }\n                    }\n                }, {\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"experience6MonthsTo2Years\"),\n                    funcGroupFilter: function funcGroupFilter(objComponent) {\n                        if (objComponent.objData.mValue.computed.duration > 6 && objComponent.objData.mValue.computed.duration <= 12 * 2) {\n                            return true;\n                        } else {\n                            return false;\n                        }\n                    }\n                }, {\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"experience0To6Months\"),\n                    funcGroupFilter: function funcGroupFilter(objComponent) {\n                        if (objComponent.objData.mValue.computed.duration <= 6) {\n                            return true;\n                        } else {\n                            return false;\n                        }\n                    }\n                }]);\n            }\n            this.set(\"_bLoading\", false);\n        },\n        onInputValueChanged: function onInputValueChanged(arrChildRef) {\n            this._super.apply(this, arguments);\n\n            // Get the reference of the field that changed\n            var sLookup = arrChildRef.join(\".\");\n            if (sLookup === \"objChildren.sSearchCurrentSkills\") {\n                this.set(\"_sFilterCurrentSkillsValue\", this.get(sLookup + \".mValue\"));\n            } else if (sLookup === \"objChildren.sSearchSkills\") {\n                this.set(\"_sFilterSkillsValue\", this.get(sLookup + \".mValue\"));\n            }\n        },\n\n        _setupTagComponents: function _setupTagComponents(arrCandidateSkills, bManage) {\n            var objThis = this;\n            var bCanAction = false;\n            var sIconStyle = null;\n            var arrSortComponents = [];\n            var sEditIcon = null;\n\n            // Setup edit skills part.\n            if (!a24Core.isEmpty(arrCandidateSkills)) {\n                for (var k = 0; k < arrCandidateSkills.length; k++) {\n                    sIconStyle = \"white-text\";\n                    sEditIcon = \"\";\n                    if (arrCandidateSkills[k].computed.status === this.get(\"_objCandidateEnums.skillsStatus.PARTIALLY_VERIFIED.backend\")) {\n                        sIconStyle = \"material-icons-outlined white-text\";\n                    }\n                    bCanAction = arrCandidateSkills[k].computed.status === this.get(\"_objCandidateEnums.skillsStatus.UNVERIFIED.backend\");\n\n                    if (bManage) {\n                        sEditIcon = \"edit\";\n                    }\n                    arrSortComponents.push({\n                        sComponent: \"tag-component-shrink\",\n                        objData: {\n                            sTitle: arrCandidateSkills[k].skill_name,\n                            mValue: arrCandidateSkills[k],\n                            sColor: \"a24-primary-color-hue-3-force white-text\",\n                            sActionIcon: bCanAction ? sEditIcon : \"verified_user\",\n                            sActionIconColor: sIconStyle,\n                            sClearColor: \"white-text\"\n                        },\n                        objActions: {\n                            onTagClicked: function onTagClicked(sTitle, mValue) {\n                                objThis.onSkillsTagClicked(mValue);\n                            }\n                        }\n                    });\n                }\n            }\n\n            if (bManage) {\n                arrSortComponents.sort(function (objA, objB) {\n                    if (objA.objData.sTitle.toLowerCase() < objB.objData.sTitle.toLowerCase()) {\n                        return -1;\n                    }\n                    if (objA.objData.sTitle.toLowerCase() > objB.objData.sTitle.toLowerCase()) {\n                        return 1;\n                    }\n                    return 0;\n                });\n            }\n\n            return arrSortComponents;\n        },\n\n        _setEditPopup: function _setEditPopup(objItem) {\n            var _this4 = this;\n\n            this.set(\"_sSkillId\", objItem.skill_id);\n            this.get(\"objChildren.years\").setValueFromOutside(parseInt(objItem.stated.duration / 12));\n            this.get(\"objChildren.months\").setValueFromOutside(parseInt(objItem.stated.duration % 12));\n            this.set(\"_bIsAdd\", false);\n            this.set(\"_bPopupSkillLoading\", false);\n            this.set(\"_bShowSkillEdit\", true);\n\n            Ember.run.next(function () {\n                if (a24Core.isEmpty(_this4)) {\n                    return;\n                }\n                Ember.run.schedule(\"afterRender\", function () {\n                    _this4.set(\"_objOriginalData\", _this4.getPlainFormValueObject());\n                });\n            });\n        },\n\n        _showManageOneSkill: function _showManageOneSkill(objSkill) {\n            var objThis = this;\n            // var arrEmploymentSkillItems = [];\n\n            var objStatedSkill = objSkill.stated;\n            // NOTE: employment details has been comented out for now as the api is not sure how to do this yet.\n            // var arrEmploymentSkills = objSkill.employment_details;\n\n            // var sEmploymentLabel = null;\n            // var sEmploymentType = null;\n            // // We doing a instance of here just in case the API decides to not go the array route just so that the screen\n            // // does not break. Also the API not defined yet so this part is just guessing\n            // if (!a24Core.isEmpty(arrEmploymentSkills) && arrEmploymentSkills instanceof Array) {\n            //     for (var i = 0; i < arrEmploymentSkills.length; i++) {\n            //         sEmploymentLabel = parseInt(arrEmploymentSkills[i].duration / 12) +\n            //             \" \" + this.get(\"_objCandidateProfileStringsService\").getString(\"years\") + \" \" +\n            //             parseInt(arrEmploymentSkills[i].duration % 12) +\n            //             \" \" + this.get(\"_objCandidateProfileStringsService\").getString(\"months\");\n            //         sEmploymentType = this.get(\"_objCandidateEnums\").getFrontendValue(\n            //             \"skillsStatus\",\n            //             arrEmploymentSkills[i].skill_status\n            //         );\n            //         arrEmploymentSkillItems.push({\n            //             sLabel: this.get(\"_objStringsService\").getHTMLTokenString(\n            //                 \"a24-string-html-dot-value\",\n            //                 sEmploymentLabel,\n            //                 sEmploymentType\n            //             )\n            //         });\n            //     }\n            // }\n\n            var sType = this.get(\"_objCandidateEnums\").getFrontendValue(\"skillsStatus\", objStatedSkill.status);\n            var sLabel = parseInt(objStatedSkill.duration / 12) + \" \" + this.get(\"_objCandidateProfileStringsService\").getString(\"years\") + \" \" + parseInt(objStatedSkill.duration % 12) + \" \" + this.get(\"_objCandidateProfileStringsService\").getString(\"months\");\n            var objStatedSkillItem = {\n                sLabel: this.get(\"_objStringsService\").getHTMLTokenString(\"a24-string-html-dot-value\", sLabel, sType),\n                arrActions: []\n            };\n\n            var funcCardActionVerifyExecute = function funcCardActionVerifyExecute(objItem) {\n                return function () {\n                    objThis.onVerifyClicked(objItem);\n                };\n            };\n\n            var funcCardActionEditExecute = function funcCardActionEditExecute(objItem) {\n                return function () {\n                    objThis._setEditPopup(objItem);\n                };\n            };\n\n            var funcCardActionRemoveExecute = function funcCardActionRemoveExecute(objItem) {\n                return function () {\n                    objThis.onSkillsTagRemoveClicked(objItem);\n                };\n            };\n\n            if (!this.get(\"_bIsAgency\")) {\n                if (this.get(\"_bIsAgencyGroup\")) {\n                    if (objStatedSkill.status === this.get(\"_objCandidateEnums.skillsStatus.UNVERIFIED.backend\")) {\n                        objStatedSkillItem.arrActions.push({\n                            sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"verify\"),\n                            sIcon: \"verified_user\",\n                            executeCardAction: funcCardActionVerifyExecute(objSkill)\n                        });\n                    }\n                    objStatedSkillItem.arrActions.push({\n                        sTitle: this.get(\"_objStringsService\").getString(\"remove\"),\n                        sIcon: \"delete\",\n                        executeCardAction: funcCardActionRemoveExecute(objSkill)\n                    });\n                    objStatedSkillItem.arrActions.push({\n                        sTitle: this.get(\"_objStringsService\").getString(\"edit\"),\n                        sIcon: \"edit\",\n                        executeCardAction: funcCardActionEditExecute(objSkill)\n                    });\n                } else {\n                    if (objStatedSkill.status === this.get(\"_objCandidateEnums.skillsStatus.UNVERIFIED.backend\")) {\n                        objStatedSkillItem.arrActions.push({\n                            sTitle: this.get(\"_objStringsService\").getString(\"remove\"),\n                            sIcon: \"delete\",\n                            executeCardAction: funcCardActionRemoveExecute(objSkill)\n                        });\n                        objStatedSkillItem.arrActions.push({\n                            sTitle: this.get(\"_objStringsService\").getString(\"edit\"),\n                            sIcon: \"edit\",\n                            executeCardAction: funcCardActionEditExecute(objSkill)\n                        });\n                    }\n                }\n            }\n\n            this.set(\"_objStatedSkill\", objStatedSkillItem);\n            // this.set(\"_arrEmploymentSkills\", arrEmploymentSkillItems);\n            this.set(\"_bShowSkillManagePopup\", true);\n        },\n\n        _showManageSkills: function _showManageSkills() {\n            this.set(\"_sManagePopupHeader\", this.get(\"_objCandidateProfileStringsService\").getTokenString(\"headerManageSkills\", this.get(\"sCandidateTypeName\")));\n            this.set(\"_bShowManagePopup\", true);\n            this._getSystemSkills();\n        },\n\n        _getSystemSkills: function _getSystemSkills() {\n            var _this5 = this;\n\n            this.set(\"_bPopupLoading\", true);\n            if (a24Core.isEmpty(this.get(\"_arrSystemSkills\"))) {\n                this.get(\"_objSystemService\").getSkills(this, \"_objSystemServicePromise\", function (arrResponse) {\n                    _this5.set(\"_arrSystemSkills\", arrResponse);\n                    _this5._setupSkillsForManage();\n                    _this5.set(\"_bPopupLoading\", false);\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode , sStatus, objErrorThrown, objError*/{\n                    _this5.set(\"_bPopupLoading\", false);\n                    _this5.get(\"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objCandidateProfileStringsService\").getString(\"getSystemSkillsError\"));\n                }), {\n                    position_types: {\n                        mValue: this.get(\"sCandidateType\")\n                    },\n                    sortBy: {\n                        mValue: \"name\"\n                    },\n                    status: {\n                        mValue: this.get(\"_objCandidateEnums.systemSkillStatus.ACTIVE.backend\")\n                    },\n                    items_per_page: {\n                        mValue: 1000\n                    }\n                });\n            } else {\n                this._setupSkillsForManage();\n                this.set(\"_bPopupLoading\", false);\n            }\n        },\n        _setupSkillsForManage: function _setupSkillsForManage() {\n            var arrSystemSkills = this.get(\"_arrSystemSkills\");\n            var arrCandidateSkills = this.get(\"_arrCandidateSkills\");\n            var arrSystemSkillSortComponents = [];\n            var bFound = false;\n            var objThis = this;\n\n            // Setup edit skills part\n\n            this.set(\"_arrCandidateSkillsSortComponent\", this._setupTagComponents(arrCandidateSkills, true));\n\n            //Setup System skills for the list\n            if (!a24Core.isEmpty(arrSystemSkills)) {\n                for (var i = 0; i < arrSystemSkills.length; i++) {\n                    bFound = false;\n                    if (!a24Core.isEmpty(arrCandidateSkills)) {\n                        for (var l = 0; l < arrCandidateSkills.length; l++) {\n                            if (arrCandidateSkills[l].skill_name === arrSystemSkills[i].name) {\n                                bFound = true;\n                                break;\n                            }\n                        }\n                    }\n                    if (!bFound) {\n                        arrSystemSkillSortComponents.push({\n                            sComponent: \"tag-component-shrink\",\n                            objData: {\n                                sTitle: arrSystemSkills[i].name,\n                                mValue: arrSystemSkills[i]\n                            },\n                            objActions: {\n                                onTagClicked: function onTagClicked(sTitle, mValue) {\n                                    objThis.onSkillsTagClicked(mValue);\n                                }\n                            }\n                        });\n                    }\n                }\n            }\n            this.set(\"_arrSkillsSortComponents\", arrSystemSkillSortComponents);\n        },\n        _onPopupManageCancel: function _onPopupManageCancel() {\n            if (this.get(\"_bPopupLoading\")) {\n                return;\n            }\n            this.set(\"_bShowManagePopup\", false);\n            if (!a24Core.isEmpty(this.get(\"objChildren.sSearchSkills\"))) {\n                this.get(\"objChildren.sSearchSkills\").clear();\n            }\n            if (this.get(\"_bChangesMadeToSkills\")) {\n                this.set(\"_bChangesMadeToSkills\", false);\n                this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objCandidateProfileStringsService\").getHTMLTokenString(\"itemUpdateDelay\"));\n                this._getCandidateSkills(this.get(\"sCandidateType\"));\n                if (!a24Core.isEmpty(this.get(\"objChildren.sSearchCurrentSkills\"))) {\n                    this.get(\"objChildren.sSearchCurrentSkills\").clear();\n                }\n            }\n        },\n        _onPopupManageSkillCancel: function _onPopupManageSkillCancel() {\n            if (this.get(\"_bPopupSkillManageLoading\")) {\n                return;\n            }\n            this.set(\"_bShowSkillManagePopup\", false);\n        },\n        _onPopupSkillAddEditCancel: function _onPopupSkillAddEditCancel() {\n            if (this.get(\"_bPopupSkillLoading\")) {\n                return;\n            }\n            // Check if the form has any unsaved data\n            var bDataMatches = a24Core.compareObjects(Ember, this.getPlainFormValueObject(), this.get(\"_objOriginalData\"));\n\n            if (bDataMatches) {\n                this.set(\"_bShowSkillEdit\", false);\n            } else {\n                this.set(\"_bShowUnsavedData\", true);\n            }\n        },\n        onVerifyClicked: function onVerifyClicked(mValue) {\n            this.set(\"_bShowVerifyConfirm\", true);\n            this.set(\"_bPopupVerifyLoading\", false);\n\n            this.set(\"_sSkillId\", mValue.skill_id);\n        },\n\n        onSkillsTagRemoveClicked: function onSkillsTagRemoveClicked(mValue) {\n            this.set(\"_bShowDeleteConfirm\", true);\n            this.set(\"_bPopupDeleteLoading\", false);\n\n            this.set(\"_sSkillId\", mValue.skill_id);\n        },\n        onSkillsTagClicked: function onSkillsTagClicked(mValue) {\n            var _this6 = this;\n\n            var sFilterCurrentSkillsValue = this.get(\"_sFilterCurrentSkillsValue\");\n            var sFilterSkillsValue = this.get(\"_sFilterSkillsValue\");\n            this.clearAllErrorMessages();\n            this.clearForm();\n\n            //Reset the search values since the clearForm would have cleared them.\n            if (!a24Core.isEmpty(this.get(\"objChildren.sSearchCurrentSkills\"))) {\n                this.get(\"objChildren.sSearchCurrentSkills\").setValueFromOutside(sFilterCurrentSkillsValue);\n            }\n            if (!a24Core.isEmpty(this.get(\"objChildren.sSearchSkills\"))) {\n                this.get(\"objChildren.sSearchSkills\").setValueFromOutside(sFilterSkillsValue);\n            }\n\n            if (a24Core.isEmpty(mValue.skill_id)) {\n                // this is when its from the system list\n                this.set(\"_sAddEditSkillHeader\", this.get(\"_objCandidateProfileStringsService\").getHTMLTokenString(\"addSkillsHeader\", this.get(\"sCandidateTypeName\"), mValue.name));\n                this.set(\"_sSkillId\", mValue._id);\n                this.set(\"_bIsAdd\", true);\n                this.set(\"_bPopupSkillLoading\", false);\n                this.set(\"_bShowSkillEdit\", true);\n\n                Ember.run.next(function () {\n                    if (a24Core.isEmpty(_this6)) {\n                        return;\n                    }\n                    Ember.run.schedule(\"afterRender\", function () {\n                        _this6.set(\"_objOriginalData\", _this6.getPlainFormValueObject());\n                    });\n                });\n            } else {\n                if (!this.get(\"_bIsAgency\")) {\n                    this._showManageSkills();\n                }\n\n                this.set(\"_sAddEditSkillHeader\", this.get(\"_objCandidateProfileStringsService\").getHTMLTokenString(\"editSkillsHeader\", this.get(\"sCandidateTypeName\"), mValue.skill_name));\n                this.set(\"_sManageSkillPopupHeader\", this.get(\"_objCandidateProfileStringsService\").getHTMLTokenString(\"headerManageEditSkill\", this.get(\"sCandidateTypeName\"), mValue.skill_name));\n\n                this._showManageOneSkill(mValue);\n            }\n        },\n        getPayload: function getPayload() {\n\n            var objPayload = a24Core.removeNullsFromValue(Ember, this.getPlainFormValueObject());\n            var iDuration = 0;\n\n            if (!a24Core.isEmpty(objPayload.years)) {\n                iDuration = parseInt(objPayload.years) * 12;\n            }\n            if (!a24Core.isEmpty(objPayload.months)) {\n                iDuration = iDuration + parseInt(objPayload.months);\n            }\n\n            objPayload.duration = iDuration;\n            delete objPayload.years;\n            delete objPayload.months;\n\n            return objPayload;\n        },\n\n        _onPopupSkillAddEditSave: function _onPopupSkillAddEditSave() {\n            var _this7 = this;\n\n            this.clearAllErrorMessages();\n\n            if (!this.doFullValidation()) {\n                var objPayload = this.getPayload();\n\n                this.set(\"_bPopupSkillLoading\", true);\n                if (this.get(\"_bIsAdd\")) {\n                    this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsService\").getTokenString(\"addingItem\", this.get(\"_objCandidateProfileStringsService\").getString(\"skill\")));\n\n                    this.get(\"objCandidateStatedSkillsRestService\").addStatedSkills(this, \"_objCandidateStatedSkillsServicePromise\", this.get(\"sCandidateId\"), this.get(\"_sSkillId\"), objPayload, function (objNewSkill) {\n                        //Add the new skill to the existing list so that the manage skill popup can remove that item\n                        //from the avilible choices\n                        objNewSkill.stated = {\n                            duration: objNewSkill.duration,\n                            status: objNewSkill.status\n                        };\n                        objNewSkill.computed = {\n                            duration: objNewSkill.duration,\n                            status: objNewSkill.status\n                        };\n                        delete objNewSkill.duration;\n                        delete objNewSkill.sStatus;\n\n                        if (a24Core.isEmpty(_this7.get(\"_arrCandidateSkills\"))) {\n                            _this7.set(\"_arrCandidateSkills\", [objNewSkill]);\n                        } else {\n                            _this7.get(\"_arrCandidateSkills\").pushObject(objNewSkill);\n                        }\n\n                        _this7._doSuccess(_this7.get(\"_objStringsService\").getTokenString(\"successAddItem\", _this7.get(\"_objCandidateProfileStringsService\").getString(\"skill\")));\n                    }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode, sStatus, objErrorThrown, objError) {\n                        _this7.set(\"_bPopupSkillLoading\", false);\n                        if (sCode === \"404\" || sCode === \"409\") {\n                            _this7.get(\"_objSnackbarService\").showSnackbarMessage(_this7.get(\"_objCandidateProfileStringsService\").getString(\"addFailedRefreshPage\"));\n                        } else {\n                            _this7._doError(sCode, objError, _this7.get(\"_objStringsService\").getTokenString(\"failAddItem\", _this7.get(\"_objCandidateProfileStringsService\").getString(\"skill\")));\n                        }\n                    }));\n                } else {\n                    this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsService\").getTokenString(\"updatingItem\", this.get(\"_objCandidateProfileStringsService\").getString(\"skill\")));\n\n                    this.get(\"objCandidateStatedSkillsRestService\").updateStatedSkills(this, \"_objCandidateStatedSkillsServicePromise\", this.get(\"sCandidateId\"), this.get(\"_sSkillId\"), objPayload, function () {\n                        //Update the item from the existing items so that the manage popup wil display the correct\n                        //duration when users click on it again.\n                        var arrCandidateSkills = _this7.get(\"_arrCandidateSkills\");\n                        for (var i = 0; i < arrCandidateSkills.length; i++) {\n                            if (_this7.get(\"_sSkillId\") === arrCandidateSkills[i].skill_id) {\n                                _this7.set(\"_arrCandidateSkills.\" + i + \".stated.duration\", objPayload.duration);\n                                break;\n                            }\n                        }\n\n                        _this7._doSuccess(_this7.get(\"_objStringsService\").getTokenString(\"successUpdateItem\", _this7.get(\"_objCandidateProfileStringsService\").getString(\"skill\")));\n                    }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode, sStatus, objErrorThrown, objError) {\n                        _this7.set(\"_bPopupSkillLoading\", false);\n                        if (sCode === \"404\" || sCode === \"409\") {\n                            _this7.get(\"_objSnackbarService\").showSnackbarMessage(_this7.get(\"_objStringsService\").getString(\"updateFailedRefreshPage\"));\n                        } else {\n                            _this7._doError(sCode, objError, _this7.get(\"_objStringsService\").getTokenString(\"failUpdateItem\", _this7.get(\"_objCandidateProfileStringsService\").getString(\"skill\")));\n                        }\n                    }));\n                }\n            }\n        },\n\n        _onPopupSkillVerifyConfirm: function _onPopupSkillVerifyConfirm() {\n            var _this8 = this;\n\n            this.set(\"_bPopupVerifyLoading\", true);\n            this.set(\"_bPopupLoading\", true);\n\n            this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objCandidateProfileStringsService\").getTokenString(\"verifyingItem\", this.get(\"_objCandidateProfileStringsService\").getString(\"skill\")));\n\n            this.get(\"objCandidateStatedSkillsRestService\").verifyStatedSkills(this, \"_objCandidateStatedSkillsServicePromise\", this.get(\"sCandidateId\"), this.get(\"_sSkillId\"), function () {\n                // Changing the status of the skill so that it will reflect on the manage popup\n                var arrCandidateSkills = _this8.get(\"_arrCandidateSkills\");\n                for (var i = 0; i < arrCandidateSkills.length; i++) {\n                    if (_this8.get(\"_sSkillId\") === arrCandidateSkills[i].skill_id) {\n                        _this8.set(\"_arrCandidateSkills.\" + i + \".stated.status\", _this8.get(\"_objCandidateEnums.skillsStatus.VERIFIED.backend\"));\n                        _this8.set(\"_arrCandidateSkills.\" + i + \".computed.status\", _this8.get(\"_objCandidateEnums.skillsStatus.VERIFIED.backend\"));\n                        break;\n                    }\n                }\n\n                _this8._doSuccess(_this8.get(\"_objCandidateProfileStringsService\").getTokenString(\"successVerifyItem\", _this8.get(\"_objCandidateProfileStringsService\").getString(\"skill\")));\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode, sStatus, objErrorThrown, objError) {\n                _this8.set(\"_bPopupVerifyLoading\", false);\n                if (sCode === \"404\" || sCode === \"409\") {\n                    _this8.get(\"_objSnackbarService\").showSnackbarMessage(_this8.get(\"_objCandidateProfileStringsService\").getString(\"verifyFailedRefreshPage\"));\n                } else {\n                    _this8._doError(sCode, objError, _this8.get(\"_objCandidateProfileStringsService\").getTokenString(\"failVerifyItem\", _this8.get(\"_objCandidateProfileStringsService\").getString(\"skill\")));\n                }\n            }));\n        },\n        _onPopupSkillDeleteConfirm: function _onPopupSkillDeleteConfirm() {\n            var _this9 = this;\n\n            this.set(\"_bPopupDeleteLoading\", true);\n\n            this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsService\").getTokenString(\"removingItem\", this.get(\"_objCandidateProfileStringsService\").getString(\"skill\")));\n\n            this.get(\"objCandidateStatedSkillsRestService\").deleteStatedSkills(this, \"_objCandidateStatedSkillsServicePromise\", this.get(\"sCandidateId\"), this.get(\"_sSkillId\"), function () {\n                //Remove the item from the existing items so that the manage popup wont display that item and make it\n                //availible to be added again\n                var arrCandidateSkills = _this9.get(\"_arrCandidateSkills\");\n                var iRemoveIndex = -1;\n                for (var i = 0; i < arrCandidateSkills.length; i++) {\n                    if (_this9.get(\"_sSkillId\") === arrCandidateSkills[i].skill_id) {\n                        iRemoveIndex = i;\n                        break;\n                    }\n                }\n                if (iRemoveIndex !== -1) {\n                    arrCandidateSkills.removeAt(iRemoveIndex);\n                }\n\n                _this9._doSuccess(_this9.get(\"_objStringsService\").getTokenString(\"successRemoveItem\", _this9.get(\"_objCandidateProfileStringsService\").getString(\"skill\")));\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode, sStatus, objErrorThrown, objError) {\n                _this9.set(\"_bPopupDeleteLoading\", false);\n                if (sCode === \"404\" || sCode === \"409\") {\n                    _this9.get(\"_objSnackbarService\").showSnackbarMessage(_this9.get(\"_objStringsService\").getString(\"removeFailedRefreshPage\"));\n                } else {\n                    _this9._doError(sCode, objError, _this9.get(\"_objStringsService\").getTokenString(\"failRemoveItem\", _this9.get(\"_objCandidateProfileStringsService\").getString(\"skill\")));\n                }\n            }));\n        },\n        _doSuccess: function _doSuccess(sSnackbarMessage) {\n            this.get(\"_objSnackbarService\").showSnackbarMessage(sSnackbarMessage);\n            this.set(\"_bShowSkillEdit\", false);\n            this.set(\"_bShowSkillManagePopup\", false);\n            this.set(\"_bShowDeleteConfirm\", false);\n            this.set(\"_bShowVerifyConfirm\", false);\n\n            if (!a24Core.isEmpty(this.get(\"objChildren.sSearchSkills\"))) {\n                this.get(\"objChildren.sSearchSkills\").clear();\n            }\n\n            this.set(\"_bChangesMadeToSkills\", true);\n\n            this._getSystemSkills();\n        },\n        _doError: function _doError(sCode, objError, sSnackbarMessage) {\n            if (sCode === \"MINIMUM\") {\n                this.setResponseError(objError.arrPath, \"failedAddingSkillMin\", false, true, this.get(\"_objCandidateProfileStringsService\"));\n            }\n            this.get(\"_objSnackbarService\").showSnackbarMessage(sSnackbarMessage);\n        },\n        actions: {\n            onPopupManageCancel: function onPopupManageCancel() {\n                this._onPopupManageCancel();\n            },\n            onPopupManageSkillCancel: function onPopupManageSkillCancel() {\n                this._onPopupManageSkillCancel();\n            },\n            onPopupSkillAddEditCancel: function onPopupSkillAddEditCancel() {\n                this._onPopupSkillAddEditCancel();\n            },\n            onPopupSkillAddEditSave: function onPopupSkillAddEditSave() {\n                this._onPopupSkillAddEditSave();\n            },\n            onPopupDeleteClose: function onPopupDeleteClose() {\n                if (this.get(\"_bPopupDeleteLoading\")) {\n                    return;\n                }\n\n                this.set(\"_bShowDeleteConfirm\", false);\n            },\n            onPopupVerifyClose: function onPopupVerifyClose() {\n                if (this.get(\"_bPopupVerifyLoading\")) {\n                    return;\n                }\n\n                this.set(\"_bShowVerifyConfirm\", false);\n            },\n            onPopupVerifyConfirm: function onPopupVerifyConfirm() {\n                this._onPopupSkillVerifyConfirm();\n            },\n            onPopupDeleteConfirm: function onPopupDeleteConfirm() {\n                this._onPopupSkillDeleteConfirm();\n            },\n            onPopupUnsavedConfirm: function onPopupUnsavedConfirm() {\n                this.set(\"_bShowSkillEdit\", false);\n                this.set(\"_bShowUnsavedData\", false);\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/card-datagrid-custom-filter-candidate-distance\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/card-datagrid-custom-filter-candidate-distance\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _didRenderChangesMixin, _cardDatagridCustomFilterCandidateDistance, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _cardDatagridCustomFilterCandidateDistance.default,\n\n        objHeaderItem: null,\n\n        _bShowDistanceUnitField: false,\n        _bShowLinkedClientField: false,\n        _bShowCustomLocationField: false,\n        _bLoading: true,\n        _bInputLoaded: false,\n        _bInputError: false,\n        _arrDistanceUnitOptions: null,\n        _arrLocationsOptions: null,\n        _sLocationPrompt: null,\n        _sUnitPrompt: null,\n        _sLatitude: null,\n        _sLongitude: null,\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objCandidateProfileEnumsService: Ember.inject.service(\"a24-enums-candidate-profile\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objEnumsService: Ember.inject.service(\"a24-enums\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objFormInputsStringsService: Ember.inject.service(\"a24-strings-form-inputs\"),\n        _objFilterCustomCandidateDistanceService: Ember.inject.service(\"card-datagrid-custom-filter-candidate-distance\"),\n        _arrLimitByCountryCodes: null,\n        _bClientSearch: false,\n        _bCandidateSearch: false,\n        _objGetCandidateSuggestions: null,\n        _objGetUserSuggestions: null,\n        _bCoordinatesLoading: false,\n        _bCandidateCoordError: false,\n        _objCandidateProfileAddressDetailsPromise: null,\n        _bHasLocationDropDown: Ember.computed(\"_bClientSearch\", \"_bCandidateSearch\", \"_bAgencyContext\", function () {\n            if (this.get(\"_bAgencyContext\") && !this.get(\"_bClientSearch\") || this.get(\"_bCandidateSearch\")) {\n                return true;\n            }\n            return false;\n        }),\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var arrDistanceUnitOptions = this.get(\"_objCandidateProfileEnumsService\").getList(\"distanceUnitOptions\");\n            // Strip the kilometers from the enum since the option of the dropdown is kilometers\n            arrDistanceUnitOptions.shift();\n\n            this.set(\"_arrDistanceUnitOptions\", arrDistanceUnitOptions);\n            if (!a24Core.isEmpty(this.get(\"objHeaderItem.bCandidateSearch\")) && this.get(\"objHeaderItem.bCandidateSearch\")) {\n                this.set(\"_sLocationPrompt\", this.get(\"_objCandidateProfileStringsService\").getString(\"candidate\"));\n            } else {\n                this.set(\"_sLocationPrompt\", this.get(\"_objCandidateProfileStringsService\").getString(\"client\"));\n            }\n            this.set(\"_sUnitPrompt\", this.get(\"_objCandidateProfileStringsService\").getString(\"kilometers\"));\n\n            var arrLocationOptions = [{\n                sLabel: this.get(\"_objCandidateProfileStringsService\").getString(\"customLocation\"),\n                sValue: \"custom_location\"\n            }];\n\n            this.set(\"_arrLocationsOptions\", arrLocationOptions);\n\n            // Get the country based on context sCountryId\n            var objContextCountry = this.get(\"_objEnumsService\").getCountryObjectByCode(this.get(\"_objUserSession.objContextDetails.sCountryId\"));\n            if (!a24Core.isEmpty(objContextCountry)) {\n                // Limit address if country is set\n                this.set(\"_arrLimitByCountryCodes\", [objContextCountry.backend]);\n            }\n\n            this.setDefaultDistanceUnit();\n\n            if (!a24Core.isEmpty(this.get(\"objHeaderItem.bClientSearch\")) && this.get(\"objHeaderItem.bClientSearch\")) {\n                this.set(\"_bClientSearch\", true);\n            }\n            if (!a24Core.isEmpty(this.get(\"objHeaderItem.bCandidateSearch\")) && this.get(\"objHeaderItem.bCandidateSearch\")) {\n                this.set(\"_bCandidateSearch\", true);\n            }\n\n            if (this.get(\"_bHasLocationDropDown\")) {\n                if (this.get(\"_bCandidateSearch\")) {\n                    this.setGetCandidateSuggestionFunction();\n                } else {\n                    this.setGetSuggestionFunction();\n                }\n            } else {\n                this.set(\"objHeaderItem._objLocationOption\", {\n                    sValue: \"custom_location\"\n                });\n            }\n\n            this._observeAllValues();\n        },\n        _bAgencyContext: Ember.computed(\"objHeaderItem.sContext\", function () {\n            if (this.get(\"objHeaderItem.sContext\") === this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY\")) {\n                return true;\n            }\n            return false;\n        }),\n\n        _observeAllValues: Ember.observer(\"objHeaderItem._iWithinDistance\", \"objHeaderItem._objDistanceUnit\", \"objHeaderItem._objLinkedClient\", \"objHeaderItem._objSelectedCandidate\", \"objHeaderItem._objAddressSuggest\", \"objHeaderItem._objLocationOption\", \"objHeaderItem._sLatitude\", \"objHeaderItem._sLongitude\", \"objHeaderItem._bEmptyEntriesOnly\", function () {\n            if (!a24Core.isEmpty(this.get(\"objHeaderItem._iWithinDistance\"))) {\n                if (this.get(\"objHeaderItem._iWithinDistance\") < 1) {\n                    this.set(\"objHeaderItem._iWithinDistance\", 1);\n                }\n            }\n\n            Ember.run.once(this, \"_setupFilterForEdit\");\n            Ember.run.once(this, \"_onInputChanges\");\n        }),\n\n        _setupFilterForEdit: function _setupFilterForEdit() {\n            var _this = this;\n\n            //NB only input-form-??? fields that work the corrent way with setValueFromOutside should be in a next\n            //all other inputs will bind correctly on their inits\n            if (!this.get(\"objHeaderItem._bEmptyEntriesOnly\")) {\n                Ember.run.next(function () {\n                    if (a24Core.isEmpty(_this)) {\n                        return;\n                    }\n                    Ember.run.schedule(\"afterRender\", function () {\n                        if (!a24Core.isEmpty(_this.get(\"objHeaderItem._objLinkedClient\")) && a24Core.isEmpty(_this.get(\"objHeaderItem._objLocationOption\"))) {\n                            _this.get(\"objChildren.objLinkedClient\").setValueFromOutside(_this.get(\"objHeaderItem._objLinkedClient\"));\n                        }\n                        if (!a24Core.isEmpty(_this.get(\"objHeaderItem._objSelectedCandidate\")) && a24Core.isEmpty(_this.get(\"objHeaderItem._objLocationOption\"))) {\n                            _this.get(\"objChildren.objSelectedCandidate\").setValueFromOutside(_this.get(\"objHeaderItem._objSelectedCandidate\"));\n                        }\n\n                        if (!a24Core.isEmpty(_this.get(\"objHeaderItem._objAddressSuggest\")) && !a24Core.isEmpty(_this.get(\"objHeaderItem._objLocationOption\")) && _this.get(\"objHeaderItem._objLocationOption.sValue\") === \"custom_location\") {\n                            if (_this.get(\"_bInputLoaded\")) {\n                                _this.get(\"objChildren.objAddressSuggest\").setValueFromOutside(_this.get(\"objHeaderItem._objAddressSuggest\"));\n                            }\n                        }\n                        if (!a24Core.isEmpty(_this.get(\"objHeaderItem._sLatitude\"))) {\n                            _this.get(\"objChildren.sLatitude\").setValueFromOutside(_this.get(\"objHeaderItem._sLatitude\"));\n                        }\n                        if (!a24Core.isEmpty(_this.get(\"objHeaderItem._sLongitude\"))) {\n                            _this.get(\"objChildren.sLongitude\").setValueFromOutside(_this.get(\"objHeaderItem._sLongitude\"));\n                        }\n                    });\n                });\n            }\n        },\n\n        _onInputChanges: function _onInputChanges() {\n            var _this2 = this;\n\n            if (this.get(\"objHeaderItem._bEmptyEntriesOnly\")) {\n                this.customFilterDisplayAddButtonEvent(this.get(\"objHeaderItem._bEmptyEntriesOnly\"));\n            } else if (!a24Core.isEmpty(this.get(\"objHeaderItem._iWithinDistance\"))) {\n                this.set(\"_bShowDistanceUnitField\", true);\n\n                if (a24Core.isEmpty(this.get(\"objHeaderItem._objDistanceUnit\"))) {\n                    var objDistanceUnit = this.get(\"_objCandidateProfileEnumsService\").getList(\"distanceUnitOptions\").findBy(\"sValue\", this.get(\"_objCandidateProfileEnumsService.distanceUnitOptions.KM.backend\"));\n                    this.set(\"objHeaderItem._objDistanceUnit\", objDistanceUnit);\n                }\n                this.set(\"_bShowGeoInputs\", true);\n\n                if (a24Core.isEmpty(this.get(\"objHeaderItem._objLocationOption.sValue\"))) {\n                    if (!this.get(\"_bCandidateSearch\")) {\n                        this.set(\"_bShowLinkedClientField\", true);\n                        this.set(\"_bShowCustomLocationField\", false);\n                        this.set(\"_bShowCandidateField\", false);\n\n                        if (a24Core.isEmpty(this.get(\"objHeaderItem._objLinkedClient\"))) {\n                            //This is just to clear text enterend before\n                            if (!a24Core.isEmpty(this.get(\"objChildren.objLinkedClient\"))) {\n                                this.get(\"objChildren.objLinkedClient\").clear();\n                            }\n                        } else {\n                            Ember.run.schedule(\"afterRender\", function () {\n                                _this2._setCoordsFromClient(_this2.get(\"objHeaderItem._objLinkedClient\"));\n                            });\n                        }\n                    } else {\n                        this.set(\"_bShowLinkedClientField\", false);\n                        this.set(\"_bShowCustomLocationField\", false);\n                        this.set(\"_bShowCandidateField\", true);\n\n                        if (a24Core.isEmpty(this.get(\"objHeaderItem._objSelectedCandidate\"))) {\n                            //This is just to clear text entered before\n                            if (!a24Core.isEmpty(this.get(\"objChildren.objSelectedCandidate\"))) {\n                                this.get(\"objChildren.objSelectedCandidate\").clear();\n                            }\n                        } else {\n                            Ember.run.schedule(\"afterRender\", function () {\n                                if (!a24Core.isEmpty(_this2.get(\"objHeaderItem._objSelectedCandidate.objAddressGeoLocation\"))) {\n                                    _this2.get(\"objChildren.sLatitude\").setValueFromOutside(_this2.get(\"objHeaderItem._objSelectedCandidate.objAddressGeoLocation.fLatitude\"));\n                                    _this2.get(\"objChildren.sLongitude\").setValueFromOutside(_this2.get(\"objHeaderItem._objSelectedCandidate.objAddressGeoLocation.fLongitude\"));\n                                }\n                            });\n                        }\n                    }\n                } else if (this.get(\"objHeaderItem._objLocationOption.sValue\") === \"custom_location\") {\n                    this.set(\"_bShowLinkedClientField\", false);\n                    this.set(\"_bShowCandidateField\", false);\n                    this.set(\"_bShowCustomLocationField\", true);\n                    if (a24Core.isEmpty(this.get(\"objHeaderItem._objAddressSuggest\"))) {\n                        if (this.get(\"_bInputLoaded\") && !a24Core.isEmpty(this.get(\"objChildren.objAddressSuggest\"))) {\n                            //This is just to clear text entered before\n                            this.get(\"objChildren.objAddressSuggest\").clear();\n                        }\n                    } else {\n                        Ember.run.schedule(\"afterRender\", function () {\n                            _this2._setCoordsFromGoogle(_this2.get(\"objHeaderItem._objAddressSuggest\"));\n                        });\n                    }\n                }\n\n                if (!a24Core.isEmpty(this.get(\"objHeaderItem._sLatitude\")) && !a24Core.isEmpty(this.get(\"objHeaderItem._sLongitude\"))) {\n                    this.customFilterDisplayAddButtonEvent(true);\n                } else {\n                    this.customFilterDisplayAddButtonEvent(false);\n                }\n            } else {\n                // reset all inputs\n                this.set(\"_bShowDistanceUnitField\", false);\n                this.set(\"_bShowLinkedClientField\", false);\n                this.set(\"_bShowCandidateField\", false);\n                this.set(\"_bShowCustomLocationField\", false);\n\n                this.set(\"_bShowGeoInputs\", false);\n                this.customFilterDisplayAddButtonEvent(false);\n\n                if (a24Core.isEmpty(this.get(\"objHeaderItem._objLocationOption\"))) {\n                    this.set(\"_objLocationOption\", null);\n                }\n\n                if (a24Core.isEmpty(this.get(\"objHeaderItem._objLinkedClient\")) && !a24Core.isEmpty(this.get(\"objChildren.objLinkedClient\"))) {\n                    this.get(\"objChildren.objLinkedClient\").clear();\n                }\n\n                if (a24Core.isEmpty(this.get(\"objHeaderItem._objSelectedCandidate\")) && !a24Core.isEmpty(this.get(\"objChildren.objSelectedCandidate\"))) {\n                    this.get(\"objChildren.objSelectedCandidate\").clear();\n                }\n\n                if (a24Core.isEmpty(this.get(\"objHeaderItem._objAddressSuggest\")) && this.get(\"_bInputLoaded\") && !a24Core.isEmpty(this.get(\"objChildren.objAddressSuggest\"))) {\n                    this.get(\"objChildren.objAddressSuggest\").clear();\n                }\n                if (a24Core.isEmpty(this.get(\"objHeaderItem._sLatitude\")) && !a24Core.isEmpty(this.get(\"objChildren.sLatitude\"))) {\n                    this.get(\"objChildren.sLatitude\").clear();\n                }\n                if (a24Core.isEmpty(this.get(\"objHeaderItem._sLongitude\")) && !a24Core.isEmpty(this.get(\"objChildren.sLongitude\"))) {\n                    this.get(\"objChildren.sLongitude\").clear();\n                }\n            }\n        },\n\n        _observerForErrorMessage: Ember.observer(\"_bShowCustomLocationField\", function () {\n            var _this3 = this;\n\n            if (this.get(\"_bInputError\") && this.get(\"_bShowCustomLocationField\")) {\n                Ember.run.next(function () {\n                    if (a24Core.isEmpty(_this3)) {\n                        return;\n                    }\n                    _this3.get(\"objChildren.objAddressSuggest\").clearAllErrorMessages();\n                    _this3.setResponseError([\"objAddressSuggest\"], \"addressSuggestInputLoadError\", false, false, _this3.get(\"_objCandidateProfileStringsService\"));\n                });\n            }\n        }),\n\n        _setCoordsFromClient: function _setCoordsFromClient(objClient) {\n            if (!a24Core.isEmpty(objClient.objSiteGeoLocation)) {\n                this.get(\"objChildren.sLatitude\").setValueFromOutside(objClient.objSiteGeoLocation.fLatitude);\n                this.get(\"objChildren.sLongitude\").setValueFromOutside(objClient.objSiteGeoLocation.fLongitude);\n                this.get(\"objChildren.objLinkedClient\").clearAllErrorMessages();\n            } else {\n                this.get(\"objChildren.objLinkedClient\").clearAllErrorMessages();\n                this.setResponseError([\"objLinkedClient\"], \"cannotDoQueryForClient\", false, false, this.get(\"_objCandidateProfileStringsService\"));\n            }\n        },\n        _setCoordsFromCandidate: function _setCoordsFromCandidate(objCandidate) {\n            var _this4 = this;\n\n            if (!a24Core.isEmpty(objCandidate.objAddressGeoLocation)) {\n                this.get(\"objChildren.sLatitude\").setValueFromOutside(objCandidate.objAddressGeoLocation.fLatitude);\n                this.get(\"objChildren.sLongitude\").setValueFromOutside(objCandidate.objAddressGeoLocation.fLongitude);\n                this.get(\"objChildren.objSelectedCandidate\").clearAllErrorMessages();\n            } else {\n                this.set(\"_bCoordinatesLoading\", true);\n                this.set(\"_bCandidateCoordError\", false);\n                // Do query to get address and coords\n                this.get(\"objHeaderItem.objCandidateAddressService\").getAddressDetails(this, \"_objCandidateProfileAddressDetailsPromise\", objCandidate.iCandidateId, function (arrData) {\n                    var bAddressFound = false;\n\n                    if (!a24Core.isEmpty(arrData)) {\n                        for (var i = 0; i < arrData.length; i++) {\n                            if (arrData[i].type === \"physical_address\" && !a24Core.isEmpty(arrData[i].co_ords)) {\n                                _this4.get(\"objChildren.sLatitude\").setValueFromOutside(arrData[i].co_ords.latitude);\n                                _this4.get(\"objChildren.sLongitude\").setValueFromOutside(arrData[i].co_ords.longitude);\n                                _this4.set(\"objHeaderItem._objSelectedCandidate.objAddressGeoLocation\", {\n                                    fLatitude: arrData[i].co_ords.latitude,\n                                    fLongitude: arrData[i].co_ords.longitude\n                                });\n                                bAddressFound = true;\n                                break;\n                            }\n                        }\n                    }\n                    // no physical address found\n                    if (!bAddressFound) {\n                        _this4.setResponseError([\"objSelectedCandidate\"], \"cannotDoQueryForCandidate\", false, false, _this4.get(\"_objCandidateProfileStringsService\"));\n                        _this4.set(\"_bCandidateCoordError\", true);\n                        _this4.get(\"objChildren.sLatitude\").clear();\n                        _this4.get(\"objChildren.sLongitude\").clear();\n                    } else {\n                        _this4.set(\"_bCandidateCoordError\", false);\n                    }\n                    _this4.set(\"_bCoordinatesLoading\", false);\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode /*, sStatus, objErrorThrown, objError*/) {\n                    if (sCode === \"404\") {\n                        _this4.setResponseError([\"objSelectedCandidate\"], \"cannotDoQueryForCandidateNoAddress\", false, false, _this4.get(\"_objCandidateProfileStringsService\"));\n                    } else {\n                        _this4.get(\"objChildren.objSelectedCandidate\").clearAllErrorMessages();\n                        _this4.get(\"objChildren.objSelectedCandidate\").clear();\n\n                        _this4.setResponseError([\"objSelectedCandidate\"], \"cannotDoQueryForCandidateFailed\", false, false, _this4.get(\"_objCandidateProfileStringsService\"));\n                    }\n                    _this4.set(\"_bCandidateCoordError\", true);\n                    _this4.get(\"objChildren.sLatitude\").clear();\n                    _this4.get(\"objChildren.sLongitude\").clear();\n                    _this4.set(\"_bCoordinatesLoading\", false);\n                    return;\n                }));\n            }\n        },\n\n        _setCoordsFromGoogle: function _setCoordsFromGoogle(objAddressSuggest) {\n            if (!a24Core.isEmpty(objAddressSuggest.sLatitude) && !a24Core.isEmpty(objAddressSuggest.sLongitude)) {\n                this.get(\"objChildren.sLatitude\").setValueFromOutside(objAddressSuggest.sLatitude);\n                this.get(\"objChildren.sLongitude\").setValueFromOutside(objAddressSuggest.sLongitude);\n                this.get(\"objChildren.objAddressSuggest\").clearAllErrorMessages();\n            } else {\n                this.get(\"objChildren.objAddressSuggest\").clearAllErrorMessages();\n                this.setResponseError([\"objAddressSuggest\"], \"cannotDoQueryForAddress\", false, false, this.get(\"_objCandidateProfileStringsService\"));\n            }\n        },\n\n        onInputValueChanged: function onInputValueChanged(arrPathToInputMixin) {\n            var sLookup = arrPathToInputMixin.join(\".\");\n\n            if (sLookup === \"objChildren.objLinkedClient\") {\n                var objClient = this.get(sLookup + \".mValue\");\n                if (!a24Core.isEmpty(objClient)) {\n                    this.set(\"objHeaderItem._objLinkedClient\", objClient);\n                    this._setCoordsFromClient(objClient);\n                } else {\n                    this.get(sLookup).clearAllErrorMessages();\n                    this.set(\"objHeaderItem._objLinkedClient\", null);\n                }\n            } else if (sLookup === \"objChildren.objSelectedCandidate\") {\n                var objSelectedCandidate = this.get(sLookup + \".mValue\");\n                if (!a24Core.isEmpty(objSelectedCandidate)) {\n                    this.set(\"_bCandidateCoordError\", false);\n                    this.set(\"objHeaderItem._objSelectedCandidate\", objSelectedCandidate);\n                    this.get(\"objChildren.objSelectedCandidate\").clearAllErrorMessages();\n                    this._setCoordsFromCandidate(this.get(\"objHeaderItem._objSelectedCandidate\"));\n                } else {\n                    this.get(sLookup).clearAllErrorMessages();\n                    this.set(\"objHeaderItem._objSelectedCandidate\", null);\n                }\n            } else if (sLookup === \"objChildren.objAddressSuggest\") {\n                var objAddressSuggest = this.get(sLookup + \".mValue\");\n                if (!a24Core.isEmpty(objAddressSuggest)) {\n                    this.set(\"objHeaderItem._objAddressSuggest\", objAddressSuggest);\n                    this._setCoordsFromGoogle(objAddressSuggest);\n                } else {\n                    this.get(sLookup).clearAllErrorMessages();\n                    this.set(\"objHeaderItem._objAddressSuggest\", null);\n                }\n            } else if (sLookup === \"objChildren.sLatitude\") {\n                var sLatitude = this.get(sLookup + \".mValue\");\n                this.get(\"objChildren.sLatitude\").clearAllErrorMessages();\n                if (!a24Core.isEmpty(sLatitude)) {\n                    var isFloat = this._isFloat(sLatitude);\n                    var isValid = false;\n                    var fLatitude = null;\n                    if (isFloat) {\n                        fLatitude = parseFloat(sLatitude);\n                        isValid = fLatitude >= -90 && fLatitude <= 90;\n                    }\n                    if (isFloat && isValid) {\n                        this.set(\"objHeaderItem._sLatitude\", fLatitude);\n                    } else {\n                        this.set(\"objHeaderItem._sLatitude\", null);\n                        if (sLatitude.trim() !== \"-\") {\n                            this.get(\"objChildren.sLatitude\").clearAllErrorMessages();\n                            this.setResponseError([\"sLatitude\"], this.get(\"_objCandidateProfileStringsService\").getString(\"latitudeInputError\"), true, true);\n                        }\n                    }\n                } else {\n                    this.set(\"objHeaderItem._sLatitude\", null);\n                }\n            } else if (sLookup === \"objChildren.sLongitude\") {\n                var sLongitude = this.get(sLookup + \".mValue\");\n                this.get(\"objChildren.sLongitude\").clearAllErrorMessages();\n                if (!a24Core.isEmpty(sLongitude)) {\n                    var _isFloat = this._isFloat(sLongitude);\n                    var _isValid = false;\n                    var fLongitude = null;\n                    if (_isFloat) {\n                        fLongitude = parseFloat(sLongitude);\n                        _isValid = fLongitude >= -180 && fLongitude <= 180;\n                    }\n                    if (_isFloat && _isValid) {\n                        this.set(\"objHeaderItem._sLongitude\", fLongitude);\n                    } else {\n                        this.set(\"objHeaderItem._sLongitude\", null);\n                        if (sLongitude.trim() !== \"-\") {\n                            this.get(\"objChildren.sLongitude\").clearAllErrorMessages();\n                            this.setResponseError([\"sLongitude\"], this.get(\"_objCandidateProfileStringsService\").getString(\"longitudeInputError\"), true, true);\n                        }\n                    }\n                } else {\n                    this.set(\"objHeaderItem._sLongitude\", null);\n                }\n            }\n        },\n\n        _isFloat: function _isFloat(mValue) {\n            var floatRegex = /^-?\\d+(?:[.,]\\d*?)?$/;\n            if (!floatRegex.test(mValue)) {\n                return false;\n            }\n\n            mValue = parseFloat(mValue);\n            return !isNaN(mValue);\n        },\n\n        setDefaultDistanceUnit: function setDefaultDistanceUnit() {\n            if (a24Core.isEmpty(this.get(\"objHeaderItem._objDistanceUnit\"))) {\n                if (this.get(\"_objUserSession.objContextDetails.sCountryId\") === \"826\" || this.get(\"_objUserSession.objContextDetails.sCountryId\") === \"840\") {\n                    var objCountyDistanceUnit = this.get(\"_arrDistanceUnitOptions\").findBy(\"sValue\", this.get(\"_objCandidateProfileEnumsService.distanceUnitOptions.MILES.backend\"));\n                    this.set(\"objHeaderItem._objDistanceUnit\", objCountyDistanceUnit);\n                }\n            }\n        },\n\n        setGetSuggestionFunction: function setGetSuggestionFunction() {\n            var _this5 = this;\n\n            this.set(\"_funcGetSuggestions\", function (sQueryString, funcOnComplete) {\n                var objQuery = {\n                    sSiteName: {\n                        mValue: sQueryString,\n                        bLike: true,\n                        bEncode: true\n                    },\n                    sortBy: {\n                        mValue: \"sSiteName\"\n                    },\n                    items_per_page: {\n                        mValue: 10\n                    }\n                };\n\n                _this5.get(\"objHeaderItem.objLinkedClientsService\").getLinkedClients(_this5, \"_objGetUserSuggestions\", objQuery, function (arrData) {\n                    // If the data is empty, ensure it's an empty array\n                    if (a24Core.isEmpty(arrData)) {\n                        arrData = [];\n                    }\n\n                    for (var i = 0; i < arrData.length; i++) {\n                        arrData[i].sDisplayName = arrData[i].sOrganisationName + \": \" + arrData[i].sSiteName;\n                    }\n\n                    // Call the callback with the formatted data\n                    funcOnComplete(arrData);\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                    // Call the callback with empty\n                    funcOnComplete([]);\n                }));\n            });\n        },\n        setGetCandidateSuggestionFunction: function setGetCandidateSuggestionFunction() {\n            var _this6 = this;\n\n            this.set(\"_funcGetSuggestions\", function (sQueryString, funcOnComplete) {\n                var objQuery = {\n                    index_types: [\"candidate\"],\n                    search_term: sQueryString\n                };\n\n                _this6.get(\"objHeaderItem.objCandidateSearchService\").search(_this6, \"_objGetCandidateSuggestions\", objQuery, function (arrData) {\n                    var arrResults = [];\n                    // If the data is empty, ensure it's an empty array\n                    if (a24Core.isEmpty(arrData) || a24Core.isEmpty(arrData.results[0]) || a24Core.isEmpty(arrData.results[0].data)) {\n                        arrResults = [];\n                    } else {\n                        for (var i = 0; i < arrData.results[0].data.length; i++) {\n                            arrResults.push({\n                                iCandidateId: arrData.results[0].data[i].candidate_id,\n                                sDisplayName: arrData.results[0].data[i].full_name\n                            });\n                        }\n                    }\n                    // Call the callback with the formatted data\n                    funcOnComplete(arrResults);\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                    // Call the callback with empty\n                    funcOnComplete([]);\n                }));\n            });\n        },\n        inputFormAddressSuggestInitDone: function inputFormAddressSuggestInitDone() {\n            this.set(\"_bInputLoaded\", true);\n            this.set(\"_bInputError\", false);\n            this.set(\"_bLoading\", false);\n            this._setupFilterForEdit();\n        },\n        actions: {\n            onInputFormAddressSuggestInitDone: function onInputFormAddressSuggestInitDone() {\n                this.inputFormAddressSuggestInitDone();\n            },\n            onInputFormAddressSuggestError: function onInputFormAddressSuggestError() {\n                this.set(\"_bInputError\", true);\n                this.set(\"_bInputLoaded\", false);\n                this.set(\"_bLoading\", false);\n                this._observerForErrorMessage();\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/card-datagrid-custom-filter-candidate-external-days-to-expiry\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/card-datagrid-custom-filter-candidate-external-days-to-expiry\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _didRenderChangesMixin, _cardDatagridCustomFilterCandidateExternalDaysToExpiry, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _cardDatagridCustomFilterCandidateExternalDaysToExpiry.default,\n        objHeaderItem: null,\n\n        _arrExternalDaysType: null,\n        _arrExpiringIn: null,\n        _objGetExternalDaysToExpiry: null,\n\n        _bShowExpiryDaysNumberInput: false,\n\n        _objCandidateProfileEnumsService: Ember.inject.service(\"a24-enums-candidate-profile\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objFilterCustomCandidateExternalDaysToExpiryService: Ember.inject.service(\"card-datagrid-custom-filter-candidate-external-days-to-expiry\"),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"_arrExpiringIn\", this.get(\"_objCandidateProfileEnumsService\").getList(\"expiringIn\"));\n        },\n\n        onInputValueChanged: function onInputValueChanged(arrPathToInputMixin) {\n            var sLookup = arrPathToInputMixin.join(\".\");\n\n            if (sLookup === \"objChildren._bEmptyEntriesOnly\") {\n                this.set(\"objHeaderItem._bEmptyEntriesOnly\", this.get(sLookup + \".mValue.bValue\") === true);\n            } else if (sLookup === \"objChildren._objExternalDaysType\") {\n                var objExternalDaysType = this.get(sLookup + \".mValue\");\n                if (!a24Core.isEmpty(objExternalDaysType)) {\n                    this.set(\"objHeaderItem._objExternalDaysType\", objExternalDaysType);\n                } else {\n                    this.set(\"objHeaderItem._objExternalDaysType\", null);\n                }\n            } else if (sLookup === \"objChildren._objExpiringIn\") {\n                var objExpiringIn = this.get(sLookup + \".mValue\");\n\n                if (!a24Core.isEmpty(objExpiringIn)) {\n                    this.set(\"objHeaderItem._objExpiringIn\", objExpiringIn);\n                } else {\n                    this.set(\"objHeaderItem._objExpiringIn\", null);\n                }\n            }\n        },\n\n        _observeAllValues: Ember.observer(\"objHeaderItem._bEmptyEntriesOnly\", \"objHeaderItem._objExternalDaysType\", \"objHeaderItem._objExpiringIn\", \"objHeaderItem._iNumberOfDays\", function () {\n            if (!a24Core.isEmpty(this.get(\"objChildren._objExternalDaysType\")) && a24Core.isEmpty(this.get(\"objHeaderItem._objExternalDaysType\"))) {\n                this.get(\"objChildren._objExternalDaysType\").clear();\n            }\n            if (!a24Core.isEmpty(this.get(\"objChildren._objExpiringIn\")) && a24Core.isEmpty(this.get(\"objHeaderItem._objExpiringIn\"))) {\n                this.get(\"objChildren._objExpiringIn\").clear();\n            }\n\n            Ember.run.once(this, \"_setupFilterForEdit\");\n            Ember.run.once(this, \"_setFlags\");\n        }).on(\"init\"),\n\n        _setupFilterForEdit: function _setupFilterForEdit() {},\n\n        _setFlags: function _setFlags() {\n            if (this.get(\"objHeaderItem._bEmptyEntriesOnly\")) {\n                this.customFilterDisplayAddButtonEvent(true);\n            } else {\n                if (!a24Core.isEmpty(this.get(\"objHeaderItem._objExternalDaysType\")) && !a24Core.isEmpty(this.get(\"objHeaderItem._objExpiringIn\"))) {\n                    if (this.get(\"objHeaderItem._objExpiringIn.sValue\") !== this.get(\"_objCandidateProfileEnumsService.expiringIn.NEVER.backend\")) {\n                        this.set(\"_bShowExpiryDaysNumberInput\", true);\n                        if (!a24Core.isEmpty(this.get(\"objHeaderItem._iNumberOfDays\"))) {\n                            if (this.get(\"objHeaderItem._iNumberOfDays\") == \"-\") {\n                                this.customFilterDisplayAddButtonEvent(false);\n                            } else {\n                                this.customFilterDisplayAddButtonEvent(true);\n                            }\n                        } else {\n                            this.customFilterDisplayAddButtonEvent(false);\n                        }\n                    } else {\n                        this.set(\"_bShowExpiryDaysNumberInput\", false);\n                        this.customFilterDisplayAddButtonEvent(true);\n                    }\n                } else {\n                    this.set(\"_bShowExpiryDaysNumberInput\", false);\n                    this.customFilterDisplayAddButtonEvent(false);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/card-datagrid-custom-filter-candidate-external-portfolios\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-candidate-profile/templates/components/card-datagrid-custom-filter-candidate-external-portfolios\"], function (exports, _didRenderChangesMixin, _inputFormElement, _cardDatagridCustomFilterCandidateExternalPortfolios) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _cardDatagridCustomFilterCandidateExternalPortfolios.default,\n        objHeaderItem: null,\n\n        _arrPlayedKeywords: null,\n        _objGetPortfolioSuggestions: null,\n        _objGetPortfolioConsultantSuggestions: null,\n        _funcGetPortfolioSuggestions: null,\n        _funcGetPortfolioConsultantSuggestions: null,\n        _objCandidateProfileEnumsService: Ember.inject.service(\"a24-enums-candidate-profile\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objFilterCustomCandidateExternalPortfoliosService: Ember.inject.service(\"card-datagrid-custom-filter-candidate-external-portfolios\"),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"_arrPlayedKeywords\", this.get(\"_objCandidateProfileEnumsService\").getList(\"playedKeywords\"));\n\n            this._setGetPortfolioSuggestionFunction();\n            this._setGetPortfolioConsultantSuggestionFunction();\n        },\n\n        _setGetPortfolioSuggestionFunction: function _setGetPortfolioSuggestionFunction() {\n            var _this = this;\n\n            this.set(\"_funcGetPortfolioSuggestions\", function (sQueryString, funcOnComplete) {\n                var objQuery = {\n                    name: {\n                        mValue: sQueryString,\n                        bLike: true,\n                        bEncode: true\n                    },\n                    sortBy: {\n                        mValue: \"name\"\n                    },\n                    items_per_page: {\n                        mValue: 10\n                    }\n                };\n\n                _this.get(\"_objFilterCustomCandidateExternalPortfoliosService._objLookupService\").getPortfolios(_this, \"_objGetPortfolioSuggestions\", function (arrData) {\n                    // If the data is empty, ensure it's an empty array\n                    if (a24Core.isEmpty(arrData)) {\n                        arrData = [];\n                    }\n\n                    var arrPortfoliosDropdown = [];\n                    if (_this.get(\"objHeaderItem\").sContext === _this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY\")) {\n                        for (var i = 0; i < arrData.length; i++) {\n                            arrPortfoliosDropdown.push({\n                                name: arrData[i].name,\n                                _id: arrData[i].metadata.agency_group_lookup_id\n                            });\n                        }\n                    } else {\n                        arrPortfoliosDropdown = arrData;\n                    }\n\n                    // Call the callback with the formatted data\n                    funcOnComplete(arrPortfoliosDropdown);\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                    // Call the callback with empty\n                    funcOnComplete([]);\n                }), objQuery);\n            });\n        },\n\n        _setGetPortfolioConsultantSuggestionFunction: function _setGetPortfolioConsultantSuggestionFunction() {\n            var _this2 = this;\n\n            this.set(\"_funcGetPortfolioConsultantSuggestions\", function (sQueryString, funcOnComplete) {\n                var objQuery = {\n                    name: {\n                        mValue: sQueryString,\n                        bLike: true,\n                        bEncode: true\n                    },\n                    sortBy: {\n                        mValue: \"name\"\n                    },\n                    items_per_page: {\n                        mValue: 10\n                    }\n                };\n\n                _this2.get(\"_objFilterCustomCandidateExternalPortfoliosService._objLookupService\").getPortfolioConsultants(_this2, \"_objGetPortfolioConsultantSuggestions\", function (arrData) {\n                    // If the data is empty, ensure it's an empty array\n                    if (a24Core.isEmpty(arrData)) {\n                        arrData = [];\n                    }\n\n                    var arrPortfolioConsultantsDropdown = [];\n                    if (_this2.get(\"objHeaderItem\").sContext === _this2.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY\")) {\n                        for (var i = 0; i < arrData.length; i++) {\n                            arrPortfolioConsultantsDropdown.push({\n                                name: arrData[i].name,\n                                _id: arrData[i].metadata.agency_group_lookup_id\n                            });\n                        }\n                    } else {\n                        arrPortfolioConsultantsDropdown = arrData;\n                    }\n                    // Call the callback with the formatted data\n                    funcOnComplete(arrPortfolioConsultantsDropdown);\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                    // Call the callback with empty\n                    funcOnComplete([]);\n                }), objQuery);\n            });\n        },\n\n        onInputValueChanged: function onInputValueChanged(arrPathToInputMixin) {\n            var sLookup = arrPathToInputMixin.join(\".\");\n\n            if (sLookup === \"objChildren._bEmptyEntriesOnly\") {\n                this.set(\"objHeaderItem._bEmptyEntriesOnly\", this.get(sLookup + \".mValue.bValue\") === true);\n            } else if (sLookup === \"objChildren._objPortfolio\") {\n                var objPortfolio = this.get(sLookup + \".mValue\");\n\n                if (!a24Core.isEmpty(objPortfolio)) {\n                    this.set(\"objHeaderItem._objPortfolio\", objPortfolio);\n                } else {\n                    this.set(\"objHeaderItem._objPortfolio\", null);\n                }\n            } else if (sLookup === \"objChildren._objConsultantType\") {\n                var objConsultantType = this.get(sLookup + \".mValue\");\n\n                if (!a24Core.isEmpty(objConsultantType)) {\n                    this.set(\"objHeaderItem._objConsultantType\", objConsultantType);\n                } else {\n                    this.set(\"objHeaderItem._objConsultantType\", null);\n                }\n            } else if (sLookup === \"objChildren._objConsultant\") {\n                var objConsultant = this.get(sLookup + \".mValue\");\n\n                if (!a24Core.isEmpty(objConsultant)) {\n                    this.set(\"objHeaderItem._objConsultant\", objConsultant);\n                } else {\n                    this.set(\"objHeaderItem._objConsultant\", null);\n                }\n            } else if (sLookup === \"objChildren._objPlayedKeyword\") {\n                var objPlayedKeyword = this.get(sLookup + \".mValue\");\n\n                if (!a24Core.isEmpty(objPlayedKeyword)) {\n                    this.set(\"objHeaderItem._objPlayedKeyword\", objPlayedKeyword);\n                } else {\n                    this.set(\"objHeaderItem._objPlayedKeyword\", null);\n                }\n            }\n        },\n\n        _observeAllValues: Ember.observer(\"objHeaderItem._bEmptyEntriesOnly\", \"objHeaderItem._objPortfolio\", \"objHeaderItem._objConsultantType\", \"objHeaderItem._objConsultant\", \"objHeaderItem._objPlayedKeyword\", function () {\n            if (!a24Core.isEmpty(this.get(\"objChildren._objPortfolio\")) && a24Core.isEmpty(this.get(\"objHeaderItem._objPortfolio\"))) {\n                this.get(\"objChildren._objPortfolio\").clear();\n            }\n            if (!a24Core.isEmpty(this.get(\"objChildren._objConsultantType\")) && a24Core.isEmpty(this.get(\"objHeaderItem._objConsultantType\"))) {\n                this.get(\"objChildren._objConsultantType\").clear();\n            }\n            if (!a24Core.isEmpty(this.get(\"objChildren._objConsultant\")) && a24Core.isEmpty(this.get(\"objHeaderItem._objConsultant\"))) {\n                this.get(\"objChildren._objConsultant\").clear();\n            }\n            if (!a24Core.isEmpty(this.get(\"objChildren._objPlayedKeyword\")) && a24Core.isEmpty(this.get(\"objHeaderItem._objPlayedKeyword\"))) {\n                this.get(\"objChildren._objPlayedKeyword\").clear();\n            }\n\n            Ember.run.once(this, \"_setupFilterForEdit\");\n            Ember.run.once(this, \"_setFlags\");\n        }).on(\"init\"),\n\n        _setupFilterForEdit: function _setupFilterForEdit() {\n            var _this3 = this;\n\n            Ember.run.next(function () {\n                if (a24Core.isEmpty(_this3)) {\n                    return;\n                }\n                Ember.run.schedule(\"afterRender\", function () {\n                    if (!a24Core.isEmpty(_this3.get(\"objHeaderItem._objPortfolio\")) && a24Core.isEmpty(_this3.get(\"objChildren._objPortfolio.mValue\"))) {\n                        _this3.get(\"objChildren._objPortfolio\").setValueFromOutside(_this3.get(\"objHeaderItem._objPortfolio\"));\n                    }\n\n                    if (!a24Core.isEmpty(_this3.get(\"objHeaderItem._objConsultant\")) && a24Core.isEmpty(_this3.get(\"objChildren._objConsultant.mValue\"))) {\n                        _this3.get(\"objChildren._objConsultant\").setValueFromOutside(_this3.get(\"objHeaderItem._objConsultant\"));\n                    }\n                });\n            });\n        },\n\n        _setFlags: function _setFlags() {\n            if (this.get(\"objHeaderItem._bEmptyEntriesOnly\")) {\n                this.customFilterDisplayAddButtonEvent(true);\n            } else {\n                if (!a24Core.isEmpty(this.get(\"objHeaderItem._objPortfolio\")) || !a24Core.isEmpty(this.get(\"objHeaderItem._objConsultantType\")) || !a24Core.isEmpty(this.get(\"objHeaderItem._objConsultant\")) || !a24Core.isEmpty(this.get(\"objHeaderItem._objPlayedKeyword\"))) {\n                    this.customFilterDisplayAddButtonEvent(true);\n                } else {\n                    this.customFilterDisplayAddButtonEvent(false);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/card-datagrid-custom-filter-candidate-position-held\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/card-datagrid-custom-filter-candidate-position-held\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _didRenderChangesMixin, _cardDatagridCustomFilterCandidatePositionHeld, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _cardDatagridCustomFilterCandidatePositionHeld.default,\n        objHeaderItem: null,\n\n        _bLoadingJobFamilies: false,\n        _bLoadingJobTitles: false,\n        _bShowJobTitleField: false,\n        _bShowExperienceDurationField: false,\n        _bShowExperienceDurationFieldNumberInput: false,\n\n        _arrFilterJobTitles: null,\n        _arrExperienceDuration: null,\n        _objGetJobTitleSuggestions: null,\n        _arrStatuses: null,\n        _arrVerifiedStatuses: null,\n\n        _objCandidateProfileEnumsService: Ember.inject.service(\"a24-enums-candidate-profile\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objFilterCustomCandidatePositionHeldService: Ember.inject.service(\"card-datagrid-custom-filter-candidate-position-held\"),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"_arrExperienceDuration\", this.get(\"_objCandidateProfileEnumsService\").getList(\"experienceDuration\"));\n\n            this.set(\"_arrVerifiedStatuses\", this.get(\"_objCandidateProfileEnumsService\").getList(\"positionHeldStatus\"));\n\n            this.set(\"_arrStatuses\", this.get(\"_objCandidateProfileEnumsService\").getList(\"positionHeldWorkSuggestStatus\"));\n\n            this._setGetSuggestionFunction();\n        },\n        _setGetSuggestionFunction: function _setGetSuggestionFunction() {\n            var _this = this;\n\n            this.set(\"_funcGetSuggestions\", function (sQueryString, funcOnComplete) {\n                var objQuery = {\n                    sTitleName: {\n                        mValue: sQueryString,\n                        bLike: true,\n                        bEncode: true\n                    },\n                    sortBy: {\n                        mValue: \"sTitleName\"\n                    },\n                    items_per_page: {\n                        mValue: 10\n                    }\n                };\n\n                _this.get(\"_objFilterCustomCandidatePositionHeldService._objJobTitleService\").getJobTitles(_this, \"_objGetJobTitleSuggestions\", objQuery, function (arrData) {\n                    // If the data is empty, ensure it's an empty array\n                    if (a24Core.isEmpty(arrData)) {\n                        arrData = [];\n                    }\n\n                    for (var i = 0; i < arrData.length; i++) {\n                        arrData[i].sDisplayName = arrData[i].sJobFamilyName + \": \" + arrData[i].sTitleName;\n                    }\n\n                    // Call the callback with the formatted data\n                    funcOnComplete(arrData);\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                    // Call the callback with empty\n                    funcOnComplete([]);\n                }));\n            });\n        },\n        _observeAllValues: Ember.observer(\"objHeaderItem._objJobTitle\", \"objHeaderItem._objStatus\", \"objHeaderItem._objExperienceDuration\", \"objHeaderItem._iNumberOfMonths\", \"objHeaderItem._objVerifiedStatus\", function () {\n            if (!a24Core.isEmpty(this.get(\"objHeaderItem._iNumberOfMonths\"))) {\n                if (this.get(\"objHeaderItem._iNumberOfMonths\") < 1) {\n                    this.set(\"objHeaderItem._iNumberOfMonths\", 1);\n                }\n            }\n\n            if (!a24Core.isEmpty(this.get(\"objChildren._objJobTitle\")) && a24Core.isEmpty(this.get(\"objHeaderItem._objJobTitle\"))) {\n                this.get(\"objChildren._objJobTitle\").clear();\n            }\n            if (!a24Core.isEmpty(this.get(\"objChildren._objVerifiedStatus\")) && a24Core.isEmpty(this.get(\"objHeaderItem._objVerifiedStatus\"))) {\n                this.get(\"objChildren._objVerifiedStatus\").clear();\n            }\n            if (!a24Core.isEmpty(this.get(\"objChildren._objStatus\")) && a24Core.isEmpty(this.get(\"objHeaderItem._objStatus\"))) {\n                this.get(\"objChildren._objStatus\").clear();\n            }\n\n            if (!a24Core.isEmpty(this.get(\"objChildren._objExperienceDuration\")) && a24Core.isEmpty(this.get(\"objHeaderItem._objExperienceDuration\"))) {\n                this.get(\"objChildren._objExperienceDuration\").clear();\n            }\n\n            Ember.run.once(this, \"_setupFilterForEdit\");\n            Ember.run.once(this, \"_setFlags\");\n        }).on(\"init\"),\n\n        _setupFilterForEdit: function _setupFilterForEdit() {\n            var _this2 = this;\n\n            Ember.run.next(function () {\n                if (a24Core.isEmpty(_this2)) {\n                    return;\n                }\n                Ember.run.schedule(\"afterRender\", function () {\n                    if (!a24Core.isEmpty(_this2.get(\"objHeaderItem._objJobTitle\")) && a24Core.isEmpty(_this2.get(\"objChildren._objJobTitle.mValue\"))) {\n                        _this2.get(\"objChildren._objJobTitle\").setValueFromOutside(_this2.get(\"objHeaderItem._objJobTitle\"));\n                    }\n                });\n            });\n        },\n\n        onInputValueChanged: function onInputValueChanged(arrPathToInputMixin) {\n            var sLookup = arrPathToInputMixin.join(\".\");\n\n            if (sLookup === \"objChildren._objJobTitle\") {\n                var objJobTitle = this.get(sLookup + \".mValue\");\n\n                if (!a24Core.isEmpty(objJobTitle)) {\n                    this.set(\"objHeaderItem._objJobTitle\", objJobTitle);\n                } else {\n                    this.set(\"objHeaderItem._objJobTitle\", null);\n                    this.set(\"objHeaderItem._objStatus\", null);\n                    this.set(\"objHeaderItem._objExperienceDuration\", null);\n                    this.set(\"objHeaderItem._iNumberOfMonths\", null);\n                    this.set(\"objHeaderItem._objVerifiedStatus\", null);\n                }\n            } else if (sLookup === \"objChildren._objExperienceDuration\") {\n                var objExperienceDuration = this.get(sLookup + \".mValue\");\n                if (!a24Core.isEmpty(objExperienceDuration)) {\n                    this.set(\"objHeaderItem._objExperienceDuration\", objExperienceDuration);\n                } else {\n                    this.set(\"objHeaderItem._objExperienceDuration\", null);\n                    this.set(\"objHeaderItem._iNumberOfMonths\", null);\n                }\n            } else if (sLookup === \"objChildren._objStatus\") {\n                var objStatus = this.get(sLookup + \".mValue\");\n                if (!a24Core.isEmpty(objStatus)) {\n                    this.set(\"objHeaderItem._objStatus\", objStatus);\n                } else {\n                    this.set(\"objHeaderItem._objStatus\", null);\n                }\n            } else if (sLookup === \"objChildren._objVerifiedStatus\") {\n                var objVerifiedStatus = this.get(sLookup + \".mValue\");\n                if (!a24Core.isEmpty(objVerifiedStatus)) {\n                    this.set(\"objHeaderItem._objVerifiedStatus\", objVerifiedStatus);\n                } else {\n                    this.set(\"objHeaderItem._objVerifiedStatus\", null);\n                }\n            }\n        },\n\n        _setFlags: function _setFlags() {\n            if (!a24Core.isEmpty(this.get(\"objHeaderItem._objJobTitle\"))) {\n                this.set(\"_bShowExperienceDurationField\", true);\n\n                if (!a24Core.isEmpty(this.get(\"objHeaderItem._objExperienceDuration\"))) {\n\n                    if (this.get(\"objHeaderItem._objExperienceDuration.sValue\") === this.get(\"_objCandidateProfileEnumsService.experienceDuration.ANY_AMOUNT_OF.backend\")) {\n                        this.set(\"_bShowExperienceDurationFieldNumberInput\", false);\n                        this.customFilterDisplayAddButtonEvent(true);\n                    } else {\n                        this.set(\"_bShowExperienceDurationFieldNumberInput\", true);\n                        this.customFilterDisplayAddButtonEvent(!a24Core.isEmpty(this.get(\"objHeaderItem._iNumberOfMonths\")));\n                    }\n                } else {\n                    this.set(\"_bShowExperienceDurationFieldNumberInput\", false);\n                    this.customFilterDisplayAddButtonEvent(false);\n                }\n            } else {\n                this.set(\"_bShowExperienceDurationField\", false);\n                this.set(\"_bShowExperienceDurationFieldNumberInput\", false);\n                this.customFilterDisplayAddButtonEvent(false);\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/card-datagrid-custom-filter-candidate-professional-registration\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-candidate-profile/templates/components/card-datagrid-custom-filter-candidate-professional-registration\"], function (exports, _didRenderChangesMixin, _inputFormElement, _cardDatagridCustomFilterCandidateProfessionalRegistration) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _cardDatagridCustomFilterCandidateProfessionalRegistration.default,\n        objHeaderItem: null,\n\n        _arrRegistrationBodyStatuses: null,\n        _arrRegistrationBodyEntries: null,\n        _arrRegistrationBodyEntryStatuses: null,\n        _arrRegistrationBodies: null,\n\n        _objGetRegistrationBodyPromise: null,\n        _objGetRegistrationBodyStatusesPromise: null,\n        _objGetRegistrationBodyEntriesPromise: null,\n        _objGetRegistrationBodyEntryStatusesPromise: null,\n\n        _funcGetRegistrationBodySuggestions: null,\n\n        _bLoadingRegistrationBodyStatuses: false,\n        _bLoadingRegistrationBodyEntries: false,\n        _bLoadingRegistrationBodyEntryStatuses: false,\n\n        _bShowRegistrationBodyStatusField: false,\n        _bShowRegistrationBodyEntryField: false,\n        _bShowRegistrationBodyEntryStatusField: false,\n\n        _objSystemService: Ember.inject.service(\"rest-system\"),\n        _objFilterCustomCandidateProfRegService: Ember.inject.service(\"card-datagrid-custom-filter-candidate-professional-registration\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            this.set(\"_arrRegistrationBodyStatuses\", []);\n            this.set(\"_arrRegistrationBodyEntries\", []);\n            this.set(\"_arrRegistrationBodyEntryStatuses\", []);\n            this.set(\"_arrRegistrationBodies\", this.get(\"_objFilterCustomCandidateProfRegService._arrRegistrationBodies\").map(function (objRegBody) {\n                return {\n                    name: objRegBody.short_name + \" - \" + objRegBody.name,\n                    _id: objRegBody._id\n                };\n            }));\n        },\n\n        _observeAllValues: Ember.observer(\"objHeaderItem._objRegistrationBody\", \"objHeaderItem._objRegistrationBodyStatus\", \"objHeaderItem._objRegistrationBodyEntry\", \"objHeaderItem._objRegistrationBodyEntryStatus\", function () {\n            if (!a24Core.isEmpty(this.get(\"objChildren._objRegistrationBody\")) && a24Core.isEmpty(this.get(\"objHeaderItem._objRegistrationBody\"))) {\n                this.get(\"objChildren._objRegistrationBody\").clear();\n            }\n            if (!a24Core.isEmpty(this.get(\"objChildren._objRegistrationBodyStatus\")) && a24Core.isEmpty(this.get(\"objHeaderItem._objRegistrationBodyStatus\"))) {\n                this.get(\"objChildren._objRegistrationBodyStatus\").clear();\n            }\n            if (!a24Core.isEmpty(this.get(\"objChildren._objRegistrationBodyEntry\")) && a24Core.isEmpty(this.get(\"objHeaderItem._objRegistrationBodyEntry\"))) {\n                this.get(\"objChildren._objRegistrationBodyEntry\").clear();\n            }\n            if (!a24Core.isEmpty(this.get(\"objChildren._objRegistrationBodyEntryStatus\")) && a24Core.isEmpty(this.get(\"objHeaderItem._objRegistrationBodyEntryStatus\"))) {\n                this.get(\"objChildren._objRegistrationBodyEntryStatus\").clear();\n            }\n\n            Ember.run.once(this, \"_setupFilterForEdit\");\n            Ember.run.once(this, \"_setFlags\");\n        }).on(\"init\"),\n\n        onInputValueChanged: function onInputValueChanged(arrPathToInputMixin) {\n            var sLookup = arrPathToInputMixin.join(\".\");\n\n            if (sLookup === \"objChildren._objRegistrationBody\") {\n                var objRegistrationBody = this.get(sLookup + \".mValue\");\n\n                if (!a24Core.isEmpty(objRegistrationBody)) {\n                    this.set(\"objHeaderItem._objRegistrationBody\", objRegistrationBody);\n                    this.set(\"_objRegistrationBody\", objRegistrationBody);\n                    this._getRegistrationBodyStatuses(objRegistrationBody._id);\n                    this._getRegistrationBodyEntries(objRegistrationBody._id);\n                    this._getRegistrationBodyEntryStatuses(objRegistrationBody._id);\n                } else {\n                    this.set(\"objHeaderItem._objRegistrationBody\", null);\n                    this.set(\"objHeaderItem._objRegistrationBodyStatus\", null);\n                    this.set(\"objHeaderItem._objRegistrationBodyEntry\", null);\n                    this.set(\"objHeaderItem._objRegistrationBodyEntryStatus\", null);\n\n                    this.set(\"_arrRegistrationBodyStatuses\", []);\n                    this.set(\"_arrRegistrationBodyEntries\", []);\n                    this.set(\"_arrRegistrationBodyEntryStatuses\", []);\n                }\n            } else if (sLookup === \"objChildren._objRegistrationBodyStatus\") {\n                var objRegistrationBodyStatus = this.get(sLookup + \".mValue\");\n\n                if (!a24Core.isEmpty(objRegistrationBodyStatus)) {\n                    this.set(\"objHeaderItem._objRegistrationBodyStatus\", objRegistrationBodyStatus);\n                } else {\n                    this.set(\"objHeaderItem._objRegistrationBodyStatus\", null);\n                }\n            } else if (sLookup === \"objChildren._objRegistrationBodyEntry\") {\n                var objRegistrationBodyEntry = this.get(sLookup + \".mValue\");\n\n                if (!a24Core.isEmpty(objRegistrationBodyEntry)) {\n                    this.set(\"objHeaderItem._objRegistrationBodyEntry\", objRegistrationBodyEntry);\n                } else {\n                    this.set(\"objHeaderItem._objRegistrationBodyEntry\", null);\n                }\n            } else if (sLookup === \"objChildren._objRegistrationBodyEntryStatus\") {\n                var objRegistrationBodyEntryStatus = this.get(sLookup + \".mValue\");\n\n                if (!a24Core.isEmpty(objRegistrationBodyEntryStatus)) {\n                    this.set(\"objHeaderItem._objRegistrationBodyEntryStatus\", objRegistrationBodyEntryStatus);\n                } else {\n                    this.set(\"objHeaderItem._objRegistrationBodyEntryStatus\", null);\n                }\n            }\n        },\n\n        _getRegistrationBodyStatuses: function _getRegistrationBodyStatuses(sRegistrationBodyId) {\n            var _this = this;\n\n            this.set(\"_bLoadingRegistrationBodyStatuses\", true);\n\n            this.get(\"_objSystemService\").getRegistrationBodyStatuses(this, \"_objSystemServiceRegistrationBodyStatusesPromise\", sRegistrationBodyId, function (arrData) {\n                if (a24Core.isEmpty(arrData)) {\n                    arrData = [];\n                }\n                _this.set(\"_bLoadingRegistrationBodyStatuses\", false);\n                _this.set(\"_arrRegistrationBodyStatuses\", arrData);\n                if (!a24Core.isEmpty(_this.get(\"objHeaderItem._objRegistrationBodyStatus\"))) {\n                    _this.set(\"objHeaderItem._objRegistrationBodyStatus\", Ember.copy(_this.get(\"objHeaderItem._objRegistrationBodyStatus\"), true));\n                }\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode , sStatus, objErrorThrown, objError*/{\n                _this.set(\"_bLoadingRegistrationBodyStatuses\", false);\n                _this.set(\"_arrRegistrationBodyStatuses\", []);\n            }), {\n                items_per_page: {\n                    mValue: 1000\n                },\n                sortBy: {\n                    mValue: \"name\"\n                }\n            });\n        },\n\n        _getRegistrationBodyEntries: function _getRegistrationBodyEntries(sRegistrationBodyId) {\n            var _this2 = this;\n\n            this.set(\"_bLoadingRegistrationBodyEntries\", true);\n\n            this.get(\"_objSystemService\").getRegistrationBodyEntries(this, \"_objGetRegistrationBodyEntriesPromise\", sRegistrationBodyId, function (arrData) {\n                if (a24Core.isEmpty(arrData)) {\n                    arrData = [];\n                }\n                _this2.set(\"_bLoadingRegistrationBodyEntries\", false);\n                _this2.set(\"_arrRegistrationBodyEntries\", arrData.map(function (objRegBodyEntry) {\n                    return {\n                        name: objRegBodyEntry.short_name + \" - \" + objRegBodyEntry.name,\n                        _id: objRegBodyEntry._id\n                    };\n                }));\n\n                if (!a24Core.isEmpty(_this2.get(\"objHeaderItem._objRegistrationBodyEntry\"))) {\n                    _this2.set(\"objHeaderItem._objRegistrationBodyEntry\", Ember.copy(_this2.get(\"objHeaderItem._objRegistrationBodyEntry\"), true));\n                }\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode , sStatus, objErrorThrown, objError*/{\n                _this2.set(\"_bLoadingRegistrationBodyEntries\", false);\n                _this2.set(\"_arrRegistrationBodyEntries\", []);\n            }), {\n                items_per_page: {\n                    mValue: 1000\n                },\n                sortBy: {\n                    mValue: \"name\"\n                }\n            });\n        },\n\n        _getRegistrationBodyEntryStatuses: function _getRegistrationBodyEntryStatuses(sRegistrationBodyId) {\n            var _this3 = this;\n\n            this.set(\"_bLoadingRegistrationBodyEntryStatuses\", true);\n\n            this.get(\"_objSystemService\").getRegistrationBodyEntryStatuses(this, \"_objGetRegistrationBodyEntryStatusesPromise\", sRegistrationBodyId, function (arrData) {\n                if (a24Core.isEmpty(arrData)) {\n                    arrData = [];\n                }\n                _this3.set(\"_bLoadingRegistrationBodyEntryStatuses\", false);\n                _this3.set(\"_arrRegistrationBodyEntryStatuses\", arrData);\n                if (!a24Core.isEmpty(_this3.get(\"objHeaderItem._objRegistrationBodyEntryStatus\"))) {\n                    _this3.set(\"objHeaderItem._objRegistrationBodyEntryStatus\", Ember.copy(_this3.get(\"objHeaderItem._objRegistrationBodyEntryStatus\"), true));\n                }\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode , sStatus, objErrorThrown, objError*/{\n                _this3.set(\"_bLoadingRegistrationBodyEntryStatuses\", false);\n                _this3.set(\"_arrRegistrationBodyEntryStatuses\", []);\n            }), {\n                items_per_page: {\n                    mValue: 1000\n                },\n                sortBy: {\n                    mValue: \"name\"\n                }\n            });\n        },\n\n        _setupFilterForEdit: function _setupFilterForEdit() {\n            var _this4 = this;\n\n            Ember.run.next(function () {\n                if (a24Core.isEmpty(_this4)) {\n                    return;\n                }\n                Ember.run.schedule(\"afterRender\", function () {\n                    if (!a24Core.isEmpty(_this4.get(\"objHeaderItem._objRegistrationBody\")) && a24Core.isEmpty(_this4.get(\"objChildren._objRegistrationBody.mValue\"))) {\n                        _this4.set(\"_objRegistrationBody\", Ember.copy(_this4.get(\"objHeaderItem._objRegistrationBody\"), true));\n                    }\n                });\n            });\n        },\n\n        _setFlags: function _setFlags() {\n            if (!a24Core.isEmpty(this.get(\"objHeaderItem._objRegistrationBody\"))) {\n                this.set(\"_bShowRegistrationBodyStatusField\", true);\n                this.set(\"_bShowRegistrationBodyEntryField\", true);\n                this.set(\"_bShowRegistrationBodyEntryStatusField\", true);\n                this.customFilterDisplayAddButtonEvent(true);\n            } else {\n                this.set(\"_bShowRegistrationBodyStatusField\", false);\n                this.set(\"_bShowRegistrationBodyEntryField\", false);\n                this.set(\"_bShowRegistrationBodyEntryStatusField\", false);\n                this.customFilterDisplayAddButtonEvent(false);\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/card-datagrid-custom-filter-consultant-role\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-candidate-profile/templates/components/card-datagrid-custom-filter-consultant-role\"], function (exports, _didRenderChangesMixin, _inputFormElement, _cardDatagridCustomFilterConsultantRole) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _cardDatagridCustomFilterConsultantRole.default,\n        _bShowConsultantField: true,\n\n        _arrQueryType: null,\n        _arrConsultantRoles: null,\n        _arrConsultantRolesAnyRemoved: null,\n        _objGetConsultantsSuggestions: null,\n\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n\n        _objEnumEmberLibService: Ember.inject.service(\"a24-enums-ember-lib\"),\n        _bAnyIncluded: true,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"_sQueryTypeOptionPrompt\", this.get(\"_objStringsService\").getString(\"is\"));\n            var arrQueryType = this.get(\"_objEnumEmberLibService\").getList(\"filterOptionsType\");\n\n            var arrQueryTypeDropdown = [];\n            for (var i = 0; i < arrQueryType.length; i++) {\n                arrQueryTypeDropdown.push({\n                    sTitle: arrQueryType[i].sLabel,\n                    sValue: arrQueryType[i].sValue\n                });\n            }\n            this.set(\"_arrQueryType\", arrQueryTypeDropdown);\n\n            this.set(\"_arrConsultantRoles\", this.get(\"objHeaderItem.arrConsultantRoles\"));\n            var arrConsultantRoles = Ember.copy(this.get(\"_arrConsultantRoles\"), true);\n            if (!a24Core.isEmpty(arrConsultantRoles)) {\n                // remove 'any'\n                arrConsultantRoles.splice(0, 1);\n                this.set(\"_arrConsultantRolesAnyRemoved\", arrConsultantRoles);\n            }\n\n            if (!a24Core.isEmpty(this.get(\"objHeaderItem._objSelectedQueryType\"))) {\n                this.set(\"_bShowConsultantField\", false);\n            }\n\n            var funcGetSuggestions = this.get(\"objHeaderItem.funcFilterGetSuggestions\");\n\n            if (a24Core.isEmpty(funcGetSuggestions)) {\n                this.setGetSuggestionFunction();\n            } else {\n                this.set(\"_funcGetSuggestions\", funcGetSuggestions);\n            }\n\n            this._observeAllValues();\n        },\n        _observeAllValues: Ember.observer(\"objHeaderItem._objConsultantRole\", \"objHeaderItem._objConsultant\", \"objHeaderItem._objSelectedQueryType\", function () {\n            if (!a24Core.isEmpty(this.get(\"objHeaderItem._objSelectedQueryType\"))) {\n                this.set(\"_bAnyIncluded\", false);\n                this.set(\"_bShowConsultantField\", false);\n            } else {\n                this.set(\"_bAnyIncluded\", true);\n                this.set(\"_bShowConsultantField\", true);\n            }\n\n            Ember.run.once(this, \"_setupFilterForEdit\");\n            Ember.run.once(this, \"_onInputChanges\");\n        }),\n        _setupFilterForEdit: function _setupFilterForEdit() {\n            var _this = this;\n\n            //NB only input-form-??? fields that work the current way with setValueFromOutside should be in a next\n            //all other inputs will bind correctly on their inits\n            Ember.run.next(function () {\n                Ember.run.schedule(\"afterRender\", function () {\n                    if (!a24Core.isEmpty(_this.get(\"objHeaderItem._objConsultant\")) && a24Core.isEmpty(_this.get(\"objChildren.objConsultant.mValue\"))) {\n                        _this.get(\"objChildren.objConsultant\").setValueFromOutside(_this.get(\"objHeaderItem._objConsultant\"));\n                    }\n                });\n            });\n        },\n\n        _onInputChanges: function _onInputChanges() {\n            if (!a24Core.isEmpty(this.get(\"objHeaderItem._objConsultantRole\"))) {\n                if (this.get(\"objHeaderItem._objConsultantRole.sValue\") === \"*\") {\n                    if (!a24Core.isEmpty(this.get(\"objHeaderItem._objSelectedQueryType\"))) {\n                        this.customFilterDisplayAddButtonEvent(true);\n                    } else {\n                        this.customFilterDisplayAddButtonEvent(false);\n                        if (!a24Core.isEmpty(this.get(\"objHeaderItem._objConsultant.name\"))) {\n                            this.customFilterDisplayAddButtonEvent(true);\n                        }\n                    }\n                } else {\n                    this.customFilterDisplayAddButtonEvent(true);\n                }\n            } else {\n                this.customFilterDisplayAddButtonEvent(false);\n\n                if (a24Core.isEmpty(this.get(\"objHeaderItem._objConsultantRole\")) && !a24Core.isEmpty(this.get(\"objChildren.objConsultantRole\"))) {\n                    this.get(\"objChildren.objConsultantRole\").clear();\n                }\n\n                if (a24Core.isEmpty(this.get(\"objHeaderItem._objConsultant\")) && !a24Core.isEmpty(this.get(\"objChildren.objConsultant\"))) {\n                    this.get(\"objChildren.objConsultant\").clear();\n                }\n            }\n        },\n\n        onInputValueChanged: function onInputValueChanged(arrPathToInputMixin) {\n            var sLookup = arrPathToInputMixin.join(\".\");\n\n            if (sLookup === \"objChildren.objConsultant\") {\n                var objConsultant = this.get(sLookup + \".mValue\");\n                if (!a24Core.isEmpty(objConsultant)) {\n                    this.set(\"objHeaderItem._objConsultant\", objConsultant);\n                } else {\n                    this.get(sLookup).clearAllErrorMessages();\n                    this.set(\"objHeaderItem._objConsultant\", null);\n                }\n            } else if (sLookup === \"objChildren.objConsultantRole\") {\n                var objConsultantRole = this.get(sLookup + \".mValue\");\n                if (!a24Core.isEmpty(objConsultantRole)) {\n                    this.set(\"objHeaderItem._objConsultantRole\", objConsultantRole);\n                } else {\n                    this.get(sLookup).clearAllErrorMessages();\n                    this.set(\"objHeaderItem._objConsultantRole\", null);\n                }\n            }\n        },\n\n        setGetSuggestionFunction: function setGetSuggestionFunction() {\n            var _this2 = this;\n\n            this.set(\"_funcGetSuggestions\", function (sQueryString, funcOnComplete) {\n                var objQuery = {\n                    search_term: { mValue: sQueryString },\n                    size: { mValue: 10 }\n                };\n\n                _this2.get(\"objHeaderItem.objConsultantAutocompleteService\")._getAutocomplete(_this2, \"_objGetConsultantsSuggestions\", objQuery, \"consultant\", function (arrData) {\n                    var arrResult = [];\n                    // If the data is empty, ensure it's an empty array\n                    if (a24Core.isEmpty(arrData.results)) {\n                        arrResult = [];\n                    }\n\n                    arrData = arrData.results;\n                    for (var i = 0; i < arrData.length; i++) {\n                        arrResult.push({\n                            name: arrData[i]\n                        });\n                    }\n\n                    // Call the callback with the formatted data\n                    funcOnComplete(arrResult);\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                    // Call the callback with empty\n                    funcOnComplete([]);\n                }));\n            });\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/compliance-rules-condition-query-builder\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/compliance-rules-condition-query-builder\"], function (exports, _didRenderChangesMixin, _complianceRulesConditionQueryBuilder) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _complianceRulesConditionQueryBuilder.default,\n        classNames: [\"compliance-rules-condition-query-builder\"],\n\n        bShow: false,\n        bForceReset: false,\n        sWarningMessage: null,\n        sSimpleTagsUrl: null,\n        sSearchUrl: null,\n        sContext: null,\n\n        _env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n        _sReactGatewayUrl: Ember.computed.readOnly(\"_env.sReactGatewayUrl\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_env.sRestApiBaseUrl\"),\n\n        _objQueryParams: null,\n        _objDatagridConfig: null,\n        _sUrlBase: null,\n        _sQuery: null,\n        _bLoading: true,\n        _bDoneDisabled: true,\n        _bShowPopup: false,\n        _bServiceCallsDone: false,\n        _bShowLoadFailedPopup: false,\n        _bAgencyGroupContext: true,\n        _bHandleServerError: false,\n        _bResetUrl: false,\n\n        _arrCandidateStatus: null,\n        _arrCandidateTypes: null,\n\n        _objCandidateTypesResponse: null,\n        _objCandidateStatusResponse: null,\n        _objAckPoliciesResponse: null,\n        // _objExternalDocumentTypesResponse: null,\n        _objDocumentTypesResponse: null,\n        _objExternalVerificationResponse: null,\n        _objActivityTypesResponse: null,\n        _objConsultantTypeResponse: null,\n        // _objGetExternalDaysToExpiry: null,\n        _objConsultantRolePromise: null,\n\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objRestCountry: Ember.inject.service(\"rest-country\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objQueryParamBuilderService: Ember.inject.service(\"query-param-object-builder\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objSSCoreStringsService: Ember.inject.service(\"a24-strings-staffshift-core\"),\n        _objEmberLibStringService: Ember.inject.service(\"a24-strings-ember-lib\"),\n        _objA24EnumsPolicyLib: Ember.inject.service(\"a24-enums-policy-library\"),\n        _objConstantsLib: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objCandidateProfileEnumsService: Ember.inject.service(\"a24-enums-candidate-profile\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objEnumEmberLibService: Ember.inject.service(\"a24-enums-ember-lib\"),\n        _objSSCoreEnumsService: Ember.inject.service(\"a24-enums-staffshift-core\"),\n        _objDatagridFilterService: Ember.inject.service(\"card-datagrid-filter\"),\n\n        _objRestActivityTypes: Ember.inject.service(\"rest-advanced-search-activity-type\"),\n\n        _objTemporalVariableService: Ember.inject.service(\"card-datagrid-temporal-variable\"),\n\n        _objRestCandidateType: null,\n        _objRestStatus: null,\n        _objRestLookup: Ember.computed(function () {\n            return Ember.getOwner(this).lookup(\"service:rest-agency-group-lookup\");\n        }),\n        _objRestAgencyLookup: Ember.computed(function () {\n            return Ember.getOwner(this).lookup(\"service:rest-agency-lookup\");\n        }),\n        _objConsultantRoleService: Ember.computed(function () {\n            return Ember.getOwner(this).lookup(\"service:rest-agency-group-consultant-role\");\n        }),\n        _objRestPolicyType: Ember.computed(function () {\n            return Ember.getOwner(this).lookup(\"service:rest-agency-group-policy-type\");\n        }),\n        _objRestDocumentTypes: Ember.computed(function () {\n            return Ember.getOwner(this).lookup(\"service:rest-agency-group-document-types\");\n        }),\n\n        _objRestAgencyGroupCandidateType: Ember.computed(function () {\n            return Ember.getOwner(this).lookup(\"service:rest-agency-group-candidate-type\");\n        }),\n        _objRestAgencyGroupStatus: Ember.computed(function () {\n            return Ember.getOwner(this).lookup(\"service:rest-agency-group-status-details\");\n        }),\n\n        _objRestAgencyCandidateType: Ember.computed(function () {\n            return Ember.getOwner(this).lookup(\"service:rest-agency-candidate-type\");\n        }),\n        _objRestAgencyStatus: Ember.computed(function () {\n            return Ember.getOwner(this).lookup(\"service:rest-agency-status-details\");\n        }),\n\n        _objFilterCustomCandidatePositionHeldService: Ember.inject.service(\"card-datagrid-custom-filter-candidate-position-held\"),\n        _objFilterCustomCandidateExternalPortfoliosService: Ember.inject.service(\"card-datagrid-custom-filter-candidate-external-portfolios\"),\n        // _objFilterCustomCandidateExternalDaysToExpiryService: inject(\"card-datagrid-custom-filter-candidate-external-days-to-expiry\"),\n        _objFilterCustomCandidateProfessionalRegistrationService: Ember.inject.service(\"card-datagrid-custom-filter-candidate-professional-registration\"),\n        _objFilterCustomCandidateDistanceService: Ember.inject.service(\"card-datagrid-custom-filter-candidate-distance\"),\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.set(\"_sUrlBase\", this.get(\"_sRestApiBaseUrl\") + \"/v1/agency-group/\" + this.get(\"_objNavigation.sContextId\") + \"/advanced-search-v2/candidate\");\n\n            if (this.get(\"sContext\") === this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\")) {\n                this.set(\"_bAgencyGroupContext\", true);\n                this.set(\"_objRestCandidateType\", this.get(\"_objRestAgencyGroupCandidateType\"));\n                this.set(\"_objRestStatus\", this.get(\"_objRestAgencyGroupStatus\"));\n            } else {\n                this.set(\"_bAgencyGroupContext\", false);\n                this.set(\"_objRestCandidateType\", this.get(\"_objRestAgencyCandidateType\"));\n                this.set(\"_objRestStatus\", this.get(\"_objRestAgencyStatus\"));\n            }\n\n            this.set(\"_objSpecialQueryBuilderPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this._onQueryBuilderPopupCancel();\n                }\n            });\n\n            var objQueryParamSetup = Ember.Object.create({\n                queryParams: [\"first_name\", \"last_name\", \"full_name\", \"gender\", \"city\", \"province\", \"post_code\", \"physical_address_geo_location\", \"username\", \"current_status__status\", \"current_status__date\", \"responsible_consultant\", \"consultants___consultant_role\", \"current_status__dateTo\", \"current_status__dateFrom\", \"first_status__status\", \"first_status__date\", \"first_status__dateTo\", \"first_status__dateFrom\", \"linked_to_agency_group_at\", \"linked_to_agency_group_atTo\", \"linked_to_agency_group_atFrom\", \"candidate_type_id\", \"emails___email\", \"contact_numbers___number\", \"languages___name\", \"current_employment_reference\", \"employment_references___reference\", \"dbs_status\", \"last_contacted_at\", \"last_contacted_atTo\", \"last_contacted_atFrom\", \"policies___type_id\", \"last_shift_worked_at\", \"last_shift_worked_atTo\", \"last_shift_worked_atFrom\", \"next_shift_at\", \"next_shift_atTo\", \"next_shift_atFrom\", \"employment_position_held___job_family_id\", \"activities___activity_type\", \"first_status_date___status\", \"last_status_date___status\", \"external_documents___type_id\", \"documents___system_document_type_id\", \"external_portfolios___portfolio_id\", \"user_status\", \"last_login_at\", \"last_login_atTo\", \"last_login_atFrom\", \"tags_links___tag_id\", \"skill_details___skill_id\", \"qualification_details___qualification_id\", \"external_verifications___name\", \"registration_body_details___registration_body_id\", \"registration_body_details___registration_body_entry_id\", \"external_days_to_expiry___type_id\", \"keywords___name\", \"chat_token_last_issued_at\", \"chat_token_last_issued_atFrom\", \"chat_token_last_issued_atTo\", \"notification_dnc\", \"medium_dnc___type\", \"transport_type\", \"allocated_agency_group_verified_documents___document_type_id\", \"external_workforce\", \"reference_compliance___reference_compliance_standard_id\", \"has_next_of_kin\", \"page\", \"sortBy\", \"vis_cols\", \"savedSearchKey\"],\n                first_name: \"\",\n                last_name: \"\",\n                full_name: \"\",\n                gender: \"\",\n                city: \"\",\n                province: \"\",\n                post_code: \"\",\n                physical_address_geo_location: \"\",\n                username: \"\",\n                current_status__status: \"\",\n                current_status__date: \"\",\n                responsible_consultant: \"\",\n                consultants___consultant_role: \"\",\n                current_status__dateTo: \"\",\n                current_status__dateFrom: \"\",\n                first_status__status: \"\",\n                first_status__date: \"\",\n                first_status__dateTo: \"\",\n                first_status__dateFrom: \"\",\n                linked_to_agency_group_at: \"\",\n                linked_to_agency_group_atTo: \"\",\n                linked_to_agency_group_atFrom: \"\",\n                candidate_type_id: \"\",\n                emails___email: \"\",\n                contact_numbers___number: \"\",\n                languages___name: \"\",\n                current_employment_reference: \"\",\n                employment_references___reference: \"\",\n                dbs_status: \"\",\n                last_contacted_at: \"\",\n                last_contacted_atTo: \"\",\n                last_contacted_atFrom: \"\",\n                policies___type_id: \"\",\n                last_shift_worked_at: \"\",\n                last_shift_worked_atTo: \"\",\n                last_shift_worked_atFrom: \"\",\n                next_shift_at: \"\",\n                next_shift_atTo: \"\",\n                next_shift_atFrom: \"\",\n                employment_position_held___job_family_id: \"\",\n                activities___activity_type: \"\",\n                first_status_date___status: \"\",\n                last_status_date___status: \"\",\n                external_documents___type_id: \"\",\n                documents___system_document_type_id: \"\",\n                external_portfolios___portfolio_id: \"\",\n                user_status: \"\",\n                last_login_at: \"\",\n                last_login_atTo: \"\",\n                last_login_atFrom: \"\",\n                tags_links___tag_id: \"\",\n                skill_details___skill_id: \"\",\n                qualification_details___qualification_id: \"\",\n                external_verifications___name: \"\",\n                registration_body_details___registration_body_id: \"\",\n                registration_body_details___registration_body_entry_id: \"\",\n                external_days_to_expiry___type_id: \"\",\n                keywords___name: \"\",\n                chat_token_last_issued_at: \"\",\n                chat_token_last_issued_atFrom: \"\",\n                chat_token_last_issued_atTo: \"\",\n                notification_dnc: \"\",\n                medium_dnc___type: \"\",\n                transport_type: \"\",\n                allocated_agency_group_verified_documents___document_type_id: \"\",\n                external_workforce: \"\",\n                reference_compliance___reference_compliance_standard_id: \"\",\n                has_next_of_kin: \"\",\n                page: \"1\",\n                sortBy: \"full_name::asc\",\n                vis_cols: \"1,5,10,6,7,8\",\n                savedSearchKey: \"\"\n            });\n\n            this.set(\"_objQueryParams\", this.get(\"_objQueryParamBuilderService\").createQueryParamObject(objQueryParamSetup.queryParams, objQueryParamSetup, null, true, true));\n\n            this.doServiceCalls();\n        },\n        doServiceCalls: function doServiceCalls() {\n            var _this2 = this;\n\n            this.set(\"_bLoading\", true);\n\n            var objPromiseCandidateTypes = this.get(\"_objRestCandidateType\").getCandidateTypes(this, \"_objCandidateTypesResponse\", this.get(\"_objUserSession\").getUserContextReference().mId, function () {\n                // Handled by RSVP\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"500\", \"502\", \"503\", \"504\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                _this2._handleServerErrors();\n            }));\n\n            var objPromiseCandidateStatus = this.get(\"_objRestStatus\").getStatusList(this, \"_objCandidateStatusResponse\", function () {\n                // Handled by RSVP\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"412\", \"500\", \"502\", \"503\", \"504\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                _this2._handleServerErrors();\n            }));\n\n            var objActivityTypesQueryParams = {\n                disabled: { mValue: false },\n                subject_type: { mValue: this.get(\"_objSSCoreEnumsService.activitySubjectTypes.CANDIDATE.backend\") },\n                name: { mValue: \"asc\", bSortBy: true },\n                page: { mValue: 1 },\n                items_per_page: { mValue: 1000 }\n            };\n\n            var objActivityTypes = this.get(\"_objRestActivityTypes\").getActivityTypes(this, \"_objActivityTypesResponse\", function () {\n                // Handled by RSVP\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"500\", \"502\", \"503\", \"504\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                _this2._handleServerErrors();\n            }), objActivityTypesQueryParams);\n\n            var objPromiseList = {\n                _objRSVPCandidateTypes: objPromiseCandidateTypes,\n                _objRSVPCandidateStatus: objPromiseCandidateStatus,\n                _objRSVPActivityTypes: objActivityTypes\n            };\n\n            var arrRequiredResponses = [\"_objRSVPCandidateTypes\", \"_objRSVPCandidateStatus\", \"_objRSVPActivityTypes\"];\n\n            // var objExternalDocumentTypes = null;\n            var objExternalVerificationTypes = null;\n            // var objPromiseExternalDaysTypes = null;\n            if (this.get(\"_bAgencyGroupContext\")) {\n                // Commented out for this ticket https://github.com/A24Group/react-core/issues/3411\n                // objExternalDocumentTypes = this.get(\"_objRestLookup\").getExternalDocuments(\n                //     this,\n                //     \"_objExternalDocumentTypesResponse\",\n                //     () => {\n                //         // Handled by RSVP\n                //     },\n                //     a24RestCallHelper.createJsonAjaxFailureObject(\n                //         [\"500\", \"502\", \"503\", \"504\"],\n                //         (/*sCode, sStatus, objErrorThrown, objError*/) => {\n                //             this._handleServerErrors();\n                //         }\n                //     ),\n                //     {\n                //         items_per_page: {\n                //             mValue: 1000\n                //         },\n                //         sortBy: {\n                //             mValue: \"name\"\n                //         }\n                //     }\n                // );\n\n                var objPromiseConsultantRole = this.get(\"_objConsultantRoleService\").getConsultantRoles(this, \"_objConsultantRolePromise\", function () {}, // handled in rsvp\n                a24RestCallHelper.createJsonAjaxFailureObject([\"500\", \"502\", \"503\", \"504\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                    _this2._handleServerErrors();\n                }));\n\n                var objAckPolicies = this.get(\"_objRestPolicyType\").getPolicyTypes(this, \"_objAckPoliciesResponse\", this.get(\"_objUserSession\").getUserContextReference().mId, function () {\n                    // Handled by RSVP\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"500\", \"502\", \"503\", \"504\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                    _this2._handleServerErrors();\n                }), {\n                    items_per_page: {\n                        mValue: 1000\n                    },\n                    classification: {\n                        mValue: this.get(\"_objA24EnumsPolicyLib.classification.ACKNOWLEDGEABLE.backend\")\n                    }\n                });\n\n                var objDocumentTypes = this.get(\"_objRestDocumentTypes\").getDocumentTypes(this, \"_objDocumentTypesResponse\", function () {\n                    // Handled by RSVP\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"500\", \"502\", \"503\", \"504\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                    _this2._handleServerErrors();\n                }));\n\n                objExternalVerificationTypes = this.get(\"_objRestLookup\").getExternalVerification(this, \"_objExternalVerificationResponse\", function () {\n                    // Handled by RSVP\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"500\", \"502\", \"503\", \"504\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                    _this2._handleServerErrors();\n                }), {\n                    items_per_page: {\n                        mValue: 1000\n                    }\n                });\n\n                var objPromiseConsultantTypes = this.get(\"_objRestLookup\").getPortfolioConsultantTypes(this, \"_objConsultantTypeResponse\", function () {\n                    // Handled by RSVP\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"500\", \"502\", \"503\", \"504\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                    _this2._handleServerErrors();\n                }), {\n                    items_per_page: {\n                        mValue: 1000\n                    }\n                });\n\n                // Commented out for this ticket https://github.com/A24Group/react-core/issues/2994\n                // objPromiseExternalDaysTypes = this.get(\"_objRestLookup\").getExternalDaysToExpiry(\n                //     this,\n                //     \"_objGetExternalDaysToExpiry\",\n                //     () => {\n                //         // Handled by RSVP\n                //     },\n                //     a24RestCallHelper.createJsonAjaxFailureObject(\n                //         [\"500\", \"502\", \"503\", \"504\"],\n                //         (/*sCode, sStatus, objErrorThrown, objError*/) => {\n                //             this._handleServerErrors();\n                //         }\n                //     ),\n                //     {\n                //         sortBy: {\n                //             mValue: \"name\"\n                //         },\n                //         items_per_page: {\n                //             mValue: 1000\n                //         }\n                //     }\n                // );\n\n                objPromiseList._objConsultantRolePromise = objPromiseConsultantRole;\n                // objPromiseList._objRSVPExternalDocumentTypes = objExternalDocumentTypes;\n                objPromiseList._objRSVPAckPolicies = objAckPolicies;\n                objPromiseList._objRSVPDocumentTypes = objDocumentTypes;\n                objPromiseList._objRSVPConsultantTypes = objPromiseConsultantTypes;\n                objPromiseList._objRSVPExternalVerificationTypes = objExternalVerificationTypes;\n                // objPromiseList._objRSVPExternalDaysTypes = objPromiseExternalDaysTypes;\n\n                // arrRequiredResponses.push(\"_objRSVPExternalDocumentTypes\");\n                arrRequiredResponses.push(\"_objConsultantRolePromise\");\n                arrRequiredResponses.push(\"_objRSVPAckPolicies\");\n                arrRequiredResponses.push(\"_objRSVPDocumentTypes\");\n                arrRequiredResponses.push(\"_objRSVPConsultantTypes\");\n                arrRequiredResponses.push(\"_objRSVPExternalVerificationTypes\");\n                // arrRequiredResponses.push(\"_objRSVPExternalDaysTypes\");\n            } else {\n                // Commented out for this ticket https://github.com/A24Group/react-core/issues/3411\n                // objExternalDocumentTypes = this.get(\"_objRestAgencyLookup\").getExternalDocuments(\n                //     this,\n                //     \"_objExternalDocumentTypesResponse\",\n                //     () => {\n                //         // Handled by RSVP\n                //     },\n                //     a24RestCallHelper.createJsonAjaxFailureObject(\n                //         [\"500\", \"502\", \"503\", \"504\"],\n                //         (/*sCode, sStatus, objErrorThrown, objError*/) => {\n                //             this._handleServerErrors();\n                //         }\n                //     ),\n                //     {\n                //         items_per_page: {\n                //             mValue: 1000\n                //         },\n                //         sortBy: {\n                //             mValue: \"name\"\n                //         }\n                //     }\n                // );\n\n                objExternalVerificationTypes = this.get(\"_objRestAgencyLookup\").getExternalVerification(this, \"_objExternalVerificationResponse\", function () {\n                    // Handled by RSVP\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"500\", \"502\", \"503\", \"504\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                    _this2._handleServerErrors();\n                }), {\n                    items_per_page: {\n                        mValue: 1000\n                    }\n                });\n                // Commented out for this ticket https://github.com/A24Group/react-core/issues/2994\n                // objPromiseExternalDaysTypes = this.get(\"_objRestAgencyLookup\").getExternalDaysToExpiry(\n                //     this,\n                //     \"_objGetExternalDaysToExpiry\",\n                //     () => {\n                //         // Handled by RSVP\n                //     },\n                //     a24RestCallHelper.createJsonAjaxFailureObject(\n                //         [\"500\", \"502\", \"503\", \"504\"],\n                //         (/*sCode, sStatus, objErrorThrown, objError*/) => {\n                //             this._handleServerErrors();\n                //         }\n                //     ),\n                //     {\n                //         sortBy: {\n                //             mValue: \"name\"\n                //         },\n                //         items_per_page: {\n                //             mValue: 1000\n                //         }\n                //     }\n                // );\n                // objPromiseList._objRSVPExternalDocumentTypes = objExternalDocumentTypes;\n                objPromiseList._objRSVPExternalVerificationTypes = objExternalVerificationTypes;\n                // objPromiseList._objRSVPExternalDaysTypes = objPromiseExternalDaysTypes;\n\n                // arrRequiredResponses.push(\"_objRSVPExternalDocumentTypes\");\n                arrRequiredResponses.push(\"_objRSVPExternalVerificationTypes\");\n                // arrRequiredResponses.push(\"_objRSVPExternalDaysTypes\");\n            }\n\n            var objThis = this;\n\n            a24RSVP.configure(this, objPromiseList, [{\n                arrRequiredResponses: arrRequiredResponses,\n                funcOnComplete: function funcOnComplete(objResponses) {\n                    var arrCandidateTypes = objResponses._objRSVPCandidateTypes.objResponse;\n                    var arrCandidateStatus = objResponses._objRSVPCandidateStatus.objResponse;\n                    var arrActivityTypes = objResponses._objRSVPActivityTypes.objResponse;\n\n                    var arrAckPolicies = objThis.get(\"_bAgencyGroupContext\") ? objResponses._objRSVPAckPolicies.objResponse : [];\n                    var arrDocumentTypes = objThis.get(\"_bAgencyGroupContext\") ? objResponses._objRSVPDocumentTypes.objResponse : [];\n                    var arrConsultantTypes = objThis.get(\"_bAgencyGroupContext\") ? objResponses._objRSVPConsultantTypes.objResponse : [];\n                    var arrExternalVerificationTypes = objResponses._objRSVPExternalVerificationTypes.objResponse;\n                    // var arrExternalDaysTypes = objResponses._objRSVPExternalDaysTypes.objResponse;\n                    // var arrExternalDocsTypes = objResponses._objRSVPExternalDocumentTypes.objResponse;\n                    var arrConsultantRoles = objThis.get(\"_bAgencyGroupContext\") ? objResponses._objConsultantRolePromise.objResponse : [];\n\n                    if (a24Core.isEmpty(arrCandidateTypes)) {\n                        arrCandidateTypes = [];\n                    }\n                    if (a24Core.isEmpty(arrCandidateStatus)) {\n                        arrCandidateStatus = [];\n                    }\n                    if (a24Core.isEmpty(arrAckPolicies)) {\n                        arrAckPolicies = [];\n                    }\n                    // if (a24Core.isEmpty(arrExternalDocsTypes)) {\n                    //     arrExternalDocsTypes = [];\n                    // }\n                    if (a24Core.isEmpty(arrDocumentTypes)) {\n                        arrDocumentTypes = [];\n                    }\n                    if (a24Core.isEmpty(arrActivityTypes)) {\n                        arrActivityTypes = [];\n                    }\n                    if (a24Core.isEmpty(arrConsultantTypes)) {\n                        arrConsultantTypes = [];\n                    }\n                    if (a24Core.isEmpty(arrExternalVerificationTypes)) {\n                        arrExternalVerificationTypes = [];\n                    }\n                    // if (a24Core.isEmpty(arrExternalDaysTypes)) {\n                    //     arrExternalDaysTypes = [];\n                    // }\n                    if (a24Core.isEmpty(arrConsultantRoles)) {\n                        arrConsultantRoles = [];\n                    }\n                    objThis.set(\"_arrConsultantRoles\", arrConsultantRoles);\n\n                    objThis.setupSearchConfig(arrCandidateTypes, arrCandidateStatus, arrAckPolicies, [], arrDocumentTypes, arrActivityTypes, arrConsultantTypes, arrExternalVerificationTypes, [], arrConsultantRoles);\n                }\n            }]);\n        },\n        setupSearchConfig: function setupSearchConfig(arrCandidateTypes, arrCandidateStatus, arrAckPolicies, arrExternalDocsTypes, arrDocumentTypes, arrActivityTypes, arrConsultantTypes, arrExternalVerificationTypes, arrExternalDaysTypes, arrConsultantRoles) {\n            var _this3 = this;\n\n            var objThis = this;\n            this.set(\"_arrCandidateTypes\", arrCandidateTypes);\n            this.set(\"_arrCandidateStatus\", arrCandidateStatus);\n            var arrLanguageOptions = objThis.get(\"_objCandidateProfileEnumsService\").getList(\"language\");\n            var arrDBSStatusOptions = objThis.get(\"_objCandidateProfileEnumsService\").getList(\"dbsStatuses\");\n            var arrMediumTypeOptions = objThis.get(\"_objCandidateProfileEnumsService\").getList(\"mediumTypeDnc\");\n            var arrDBSWorkforceOptions = objThis.get(\"_objCandidateProfileEnumsService\").getList(\"dbsWorforce\");\n            var arrTransportOptions = objThis.get(\"_objCandidateProfileEnumsService\").getList(\"transportType\");\n\n            var arrUserStatusDropdown = objThis.get(\"_objCandidateProfileEnumsService\").getList(\"userStatuses\").map(function (objStatus) {\n                return {\n                    sTitle: objStatus.sLabel,\n                    sValue: objStatus.sValue\n                };\n            });\n\n            var arrCandidateTypeIds = [];\n\n            var arrCandidateTypesDropdown = [];\n            for (var i = 0; i < arrCandidateTypes.length; i++) {\n                arrCandidateTypeIds.push(arrCandidateTypes[i]._id);\n                arrCandidateTypesDropdown.push({\n                    sTitle: arrCandidateTypes[i].name,\n                    sValue: arrCandidateTypes[i]._id\n                });\n            }\n\n            var arrStatusesDropdown = [];\n            for (var j = 0; j < arrCandidateStatus.length; j++) {\n                arrStatusesDropdown.push({\n                    sTitle: arrCandidateStatus[j].name,\n                    sValue: arrCandidateStatus[j].name // This is done to comply with api\n                });\n            }\n\n            var arrCandidateStatusesDropdown = [];\n            arrCandidateStatusesDropdown.push({\n                sTitle: objThis.get(\"_objEmberLibStringService\").getString(\"empty\"),\n                sValue: \"null\"\n            });\n            for (var r = 0; r < arrCandidateStatus.length; r++) {\n                arrCandidateStatusesDropdown.push({\n                    sTitle: arrCandidateStatus[r].name,\n                    sValue: arrCandidateStatus[r].name // This is done to comply with api\n                });\n            }\n\n            var arrAckPoliciesDropdown = [];\n            for (var m = 0; m < arrAckPolicies.length; m++) {\n                arrAckPoliciesDropdown.push({\n                    sTitle: arrAckPolicies[m].title,\n                    sValue: arrAckPolicies[m]._id\n                });\n            }\n\n            var arrDocumentTypesDropdown = [];\n            arrDocumentTypesDropdown.push({\n                sTitle: this.get(\"_objStringsService\").getString(\"any\"),\n                sValue: \"*\"\n            });\n            for (var p = 0; p < arrDocumentTypes.length; p++) {\n                arrDocumentTypesDropdown.push({\n                    sTitle: arrDocumentTypes[p].name,\n                    sValue: arrDocumentTypes[p].system_document_type_id\n                });\n            }\n\n            var arrLanguagesDropdown = [];\n            for (var k = 0; k < arrLanguageOptions.length; k++) {\n                arrLanguagesDropdown.push({\n                    sTitle: arrLanguageOptions[k].sLabel,\n                    sValue: arrLanguageOptions[k].sLabel // This is done to comply with api\n                });\n            }\n\n            var arrDBSStatusDropdown = [];\n            for (var l = 0; l < arrDBSStatusOptions.length; l++) {\n                arrDBSStatusDropdown.push({\n                    sTitle: arrDBSStatusOptions[l].sLabel,\n                    sValue: arrDBSStatusOptions[l].sValue\n                });\n            }\n\n            var arrExternalVerificationDropdown = [];\n            for (var t = 0; t < arrExternalVerificationTypes.length; t++) {\n                arrExternalVerificationDropdown.push({\n                    sTitle: arrExternalVerificationTypes[t].name,\n                    sValue: arrExternalVerificationTypes[t].name\n                });\n            }\n\n            var arrActivityTypeDropdown = [];\n            for (var n = 0; n < arrActivityTypes.length; n++) {\n                arrActivityTypeDropdown.push({\n                    sTitle: arrActivityTypes[n].name,\n                    sValue: arrActivityTypes[n].code\n                });\n            }\n\n            var arrConsultantRolesDropdown = [];\n            arrConsultantRolesDropdown.push({\n                sTitle: objThis.get(\"_objStringsService\").getString(\"any\"),\n                sValue: \"*\"\n            });\n\n            for (var x = 0; x < arrConsultantRoles.length; x++) {\n                //For now we will equal on the name since advance search does not have access to id\n                arrConsultantRolesDropdown.push({\n                    sTitle: arrConsultantRoles[x].name,\n                    sValue: arrConsultantRoles[x].name\n                });\n            }\n\n            var arrMediaTypesDropdown = [];\n            if (!a24Core.isEmpty(arrMediumTypeOptions)) {\n                for (var s = 0; s < arrMediumTypeOptions.length; s++) {\n                    arrMediaTypesDropdown.push({\n                        sTitle: arrMediumTypeOptions[s].sLabel,\n                        sValue: arrMediumTypeOptions[s].sValue\n                    });\n                }\n            }\n\n            var arrTransportOptionsDropdown = [];\n            for (var q = 0; q < arrTransportOptions.length; q++) {\n                arrTransportOptionsDropdown.push({\n                    sTitle: arrTransportOptions[q].sLabel,\n                    sValue: arrTransportOptions[q].sValue\n                });\n            }\n\n            var arrDBSWorkforceDropdown = [];\n            for (var v = 0; v < arrDBSWorkforceOptions.length; v++) {\n                arrDBSWorkforceDropdown.push({\n                    sTitle: arrDBSWorkforceOptions[v].sLabel,\n                    sValue: arrDBSWorkforceOptions[v].sValue\n                });\n            }\n\n            var arrQueryType = this.get(\"_objEnumEmberLibService\").getList(\"filterOptionsTextType\");\n            var objConstants = this.get(\"_objConstantsLib\");\n            arrQueryType.push({\n                \"sValue\": objConstants.CARD_DATAGRID_FILTER_QUERY_TYPE_CONTAINS,\n                \"sLabel\": this.get(\"_objStringsService\").getString(\"contains\")\n            });\n\n            var sCountryId = this.get(\"_objUserSession.objContextDetails.sCountryId\");\n            var sCountryCode = this.get(\"_objRestCountry\").getCountryCodeFromCountryId(sCountryId);\n\n            var arrDataGridHeaderConfig = [];\n\n            arrDataGridHeaderConfig = [// This array contain the datagrid columns\n            {\n                iUniqueColNum: 1,\n                sTitle: this.get(\"_objSSCoreStringsService\").getString(\"fullName\"),\n                sProperty: \"full_name\",\n                sFilterType: \"text\",\n                bText: true,\n                iWidth: 15,\n                bIsClickable: true,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 2,\n                sTitle: this.get(\"_objStringsService\").getString(\"firstName\"),\n                sProperty: \"first_name\",\n                sFilterType: \"text\",\n                bText: true,\n                iWidth: 8,\n                bIsClickable: true,\n                bStopFiltering: true,\n                bStopColumnSort: true\n            }, {\n                iUniqueColNum: 3,\n                sTitle: this.get(\"_objStringsService\").getString(\"lastName\"),\n                sProperty: \"last_name\",\n                sFilterType: \"text\",\n                bText: true,\n                iWidth: 8,\n                bIsClickable: true,\n                bStopFiltering: true,\n                bStopColumnSort: true\n            }, {\n                iUniqueColNum: 4,\n                sTitle: this.get(\"_objStringsService\").getString(\"gender\"),\n                sProperty: \"gender\",\n                sFilterType: \"dropdown\",\n                bMapping: true,\n                arrMappingData: [{\n                    sValue: \"male\",\n                    sTitle: this.get(\"_objStringsService\").getString(\"male\")\n                }, {\n                    sValue: \"female\",\n                    sTitle: this.get(\"_objStringsService\").getString(\"female\")\n                }],\n                iWidth: 8,\n                bStopColumnSort: true,\n                bHideEmptyCheck: true\n            }, {\n                iUniqueColNum: 5,\n                sTitle: this.get(\"_objSSCoreStringsService\").getString(\"type\"),\n                sProperty: \"candidate_type_id\",\n                sFilterType: \"dropdownMulti\",\n                bMapping: true,\n                arrMappingData: arrCandidateTypesDropdown,\n                iWidth: 15,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 10,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"currentStatus\"),\n                sProperty: \"current_status__status\",\n                sFilterType: \"dropdownMulti\",\n                bMapping: true,\n                arrMappingData: arrCandidateStatusesDropdown,\n                iWidth: 15\n            }, {\n                iUniqueColNum: 18,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"firstStatus\"),\n                sProperty: \"first_status__status\",\n                sFilterType: \"dropdownMulti\",\n                bMapping: true,\n                arrMappingData: arrStatusesDropdown,\n                iWidth: 15,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 11,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"currentStatusSince\"),\n                sProperty: \"current_status__date\",\n                sFilterType: \"date\",\n                bDate: true,\n                iWidth: 15,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 19,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"firstStatusSince\"),\n                sProperty: \"first_status__date\",\n                sFilterType: \"date\",\n                bDate: true,\n                iWidth: 15,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 20,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"linkedToGroupSince\"),\n                sProperty: \"linked_to_agency_group_at\",\n                sFilterType: \"date\",\n                bDate: true,\n                iWidth: 15,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 38,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"consultantRole\"),\n                sProperty: \"consultants___consultant_role\",\n                bMapping: true,\n                sFilterType: \"dropdown\",\n                arrMappingData: arrConsultantRolesDropdown,\n                iWidth: 15,\n                bSilent: true,\n                bFilterAnd: true,\n                bFilterOr: true,\n                bFilterSecondary: true,\n                bStopFiltering: true,\n                funcFilterParseQueryValue: function funcFilterParseQueryValue(objQueryObjectParam) {\n                    var objQueryObject = Ember.copy(objQueryObjectParam, true);\n                    for (var _i = 0; _i < objQueryObject.length; _i++) {\n                        if (objQueryObject[_i].mValue === \"*\") {\n                            objQueryObject[_i].bAny = true;\n                        }\n                    }\n\n                    return objQueryObject;\n                }\n            }, {\n                iUniqueColNum: 12,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"responsibleConsultant\"),\n                sProperty: \"responsible_consultant\",\n                sFilterType: \"text\",\n                bText: true,\n                iWidth: 15,\n                bFilterOr: true,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 6,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"city\"),\n                sProperty: \"city\",\n                sFilterType: \"text\",\n                bText: true,\n                iWidth: 15,\n                bFilterOr: true,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 7,\n                sTitle: this.get(\"_objStringsService\").getLocalisedString(\"province\", sCountryCode),\n                sProperty: \"province\",\n                sFilterType: \"text\",\n                bText: true,\n                iWidth: 15,\n                bFilterOr: true,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 8,\n                sTitle: this.get(\"_objStringsService\").getLocalisedString(\"postCode\", sCountryCode),\n                sProperty: \"post_code\",\n                sFilterType: \"text\",\n                bText: true,\n                iWidth: 8,\n                bFilterOr: true,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 41,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"distance\"),\n                sProperty: \"physical_address_geo_location\",\n                bText: true,\n                sFilterType: \"custom\",\n                bSilent: true,\n                iWidth: 15,\n                bHideEmptyCheck: true,\n                sContext: this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\"),\n                sFilterCustomComponentName: \"card-datagrid-custom-filter-candidate-distance\",\n                objFilterCustomService: this.get(\"_objFilterCustomCandidateDistanceService\"),\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 9,\n                sTitle: this.get(\"_objStringsService\").getString(\"username\"),\n                sProperty: \"username\",\n                sFilterType: \"text\",\n                bText: true,\n                iWidth: 8,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 47,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"currentPayrollNumber\"),\n                sProperty: \"current_employment_reference\",\n                sFilterType: \"text\",\n                bText: true,\n                iWidth: 8,\n                bFilterOr: true,\n                bStopFiltering: true,\n                arrQueryType: Ember.copy(arrQueryType, true),\n                bStopColumnSort: true\n            }, {\n                iUniqueColNum: 48,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"historicalPayrollNumber\"),\n                sProperty: \"employment_references___reference\",\n                sFilterType: \"text\",\n                bSilent: true,\n                bText: true,\n                iWidth: 8,\n                bFilterOr: true,\n                bStopFiltering: true,\n                arrQueryType: Ember.copy(arrQueryType, true)\n            }, {\n                iUniqueColNum: 13,\n                sTitle: this.get(\"_objStringsService\").getString(\"email\"),\n                sProperty: \"emails___email\",\n                sFilterType: \"text\",\n                bText: true,\n                bSilent: true,\n                iWidth: 8,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 14,\n                sTitle: this.get(\"_objStringsService\").getString(\"contactNumber\"),\n                sProperty: \"contact_numbers___number\",\n                sFilterType: \"text\",\n                bText: true,\n                bSilent: true,\n                iWidth: 8,\n                funcFilterParseQueryValue: function funcFilterParseQueryValue(objQueryObject) {\n                    var arrValids = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"];\n                    var sSearchFilter = \"\";\n                    var bFirstChar = true;\n\n                    // Doing a null string check because for some reason the mValue is a string\n                    if (!a24Core.isEmpty(objQueryObject.mValue) && objQueryObject.mValue !== \"null\") {\n\n                        // Loops over the mValue to build up a string without invalid chars for the filter\n                        // Also replaces the invalid chars with a *\n                        for (var i = 0; i < objQueryObject.mValue.length; i++) {\n                            if (arrValids.indexOf(objQueryObject.mValue.charAt(i)) !== -1) {\n                                if (bFirstChar) {\n                                    // If the first char is a 0 then it will strip it off\n                                    if (objQueryObject.mValue.charAt(i) !== \"0\") {\n                                        sSearchFilter += objQueryObject.mValue.charAt(i);\n                                    }\n                                    bFirstChar = false;\n                                } else {\n                                    sSearchFilter += objQueryObject.mValue.charAt(i);\n                                }\n                            } else {\n                                sSearchFilter += \"*\";\n                            }\n                        }\n\n                        objQueryObject.mValue = sSearchFilter;\n                    }\n                    return objQueryObject;\n                },\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 15,\n                sTitle: this.get(\"_objStringsService\").getString(\"language\"),\n                sProperty: \"languages___name\",\n                sFilterType: \"dropdown\",\n                bSilent: true,\n                bMapping: true,\n                arrMappingData: arrLanguagesDropdown,\n                iWidth: 8,\n                bFilterSecondary: true,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 21,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"acknowledgedPolicies\"),\n                sProperty: \"policies___type_id\",\n                sFilterType: \"dropdown\",\n                bSilent: true,\n                bMapping: true,\n                arrMappingData: arrAckPoliciesDropdown,\n                iWidth: 8,\n                bFilterAnd: true,\n                bFilterOr: true,\n                bFilterSecondary: true\n            }, {\n                iUniqueColNum: 22,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"positionHeld\"),\n                sProperty: \"employment_position_held___job_family_id\",\n                bText: true,\n                sFilterType: \"custom\",\n                bSilent: true,\n                iWidth: 15,\n                bFilterAnd: true,\n                bFilterOr: true,\n\n                sFilterCustomComponentName: \"card-datagrid-custom-filter-candidate-position-held\",\n                objFilterCustomService: this.get(\"_objFilterCustomCandidatePositionHeldService\"),\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 23,\n                sTitle: this.get(\"_objSSCoreStringsService\").getString(\"lastShiftDate\"),\n                sProperty: \"last_shift_worked_at\",\n                sFilterType: \"date\",\n                bDate: true,\n                iWidth: 15,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 24,\n                sTitle: this.get(\"_objSSCoreStringsService\").getString(\"nextShiftDate\"),\n                sProperty: \"next_shift_at\",\n                sFilterType: \"date\",\n                bDate: true,\n                iWidth: 15,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 25,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"activities\"),\n                sProperty: \"activities___activity_type\",\n                sFilterType: \"dropdown\",\n                bSilent: true,\n                bMapping: true,\n                arrMappingData: arrActivityTypeDropdown,\n                iWidth: 8,\n                bFilterAnd: true,\n                bFilterOr: true,\n                bFilterSecondary: true,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 26,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"firstTimeToStatus\"),\n                sProperty: \"first_status_date___status\",\n                sFilterType: \"dropdown\",\n                bSilent: true,\n                bMapping: true,\n                arrMappingData: arrStatusesDropdown,\n                iWidth: 8,\n                bFilterAnd: true,\n                bFilterOr: true,\n                bFilterSecondary: true,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 27,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"lastTimeToStatus\"),\n                sProperty: \"last_status_date___status\",\n                sFilterType: \"dropdown\",\n                bSilent: true,\n                bMapping: true,\n                arrMappingData: arrStatusesDropdown,\n                iWidth: 8,\n                bFilterAnd: true,\n                bFilterOr: true,\n                bFilterSecondary: true,\n                bStopFiltering: true\n            },\n            // Commented out for this ticket https://github.com/A24Group/react-core/issues/3411\n            // {\n            //     iUniqueColNum: 28,\n            //     sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"externalDocs\"),\n            //     sProperty: \"external_documents___type_id\",\n            //     sFilterType: \"suggest\",\n            //     sReactFilterRoute: \"datagrid/filterEditor/externalDocs\",\n            //     bSilent: true,\n            //     iWidth: 8,\n            //     bFilterAnd: true,\n            //     bFilterOr: true,\n            //     bFilterSecondary: true\n            // },\n            {\n                iUniqueColNum: 29,\n                sTitle: this.get(\"_objStringsService\").getString(\"documents\"),\n                sProperty: \"documents___system_document_type_id\",\n                sFilterType: \"dropdown\",\n                bSilent: true,\n                bMapping: true,\n                arrMappingData: arrDocumentTypesDropdown,\n                iWidth: 8,\n                bFilterAnd: true,\n                bFilterOr: true,\n                bFilterSecondary: true,\n                funcFilterParseQueryValue: function funcFilterParseQueryValue(arrQuery) {\n                    var arrNewQuery = [];\n                    for (var i = 0; i < arrQuery.length; i++) {\n                        arrNewQuery.push(arrQuery[i]);\n                        if (arrNewQuery[i].mValue === \"*\") {\n                            arrNewQuery[i].bLike = true;\n                        }\n                    }\n\n                    return arrNewQuery;\n                },\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 30,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"userStatus\"),\n                sProperty: \"user_status\",\n                sFilterType: \"dropdown\",\n                bMapping: true,\n                arrMappingData: arrUserStatusDropdown,\n                iWidth: 15,\n                bFilterOr: true,\n                bStopFiltering: true,\n                bStopColumnSort: true\n            }, {\n                iUniqueColNum: 31,\n                sTitle: this.get(\"_objSSCoreStringsService\").getString(\"lastLoggedIn\"),\n                sProperty: \"last_login_at\",\n                sFilterType: \"date\",\n                bDate: true,\n                iWidth: 8,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 32,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"externalPortfolio\"),\n                sProperty: \"external_portfolios___portfolio_id\",\n                bText: true,\n                sFilterType: \"custom\",\n                bSilent: true,\n                iWidth: 15,\n                bFilterAnd: true,\n                bFilterOr: true,\n                arrConsultantTypes: arrConsultantTypes,\n\n                sFilterCustomComponentName: \"card-datagrid-custom-filter-candidate-external-portfolios\",\n                objFilterCustomService: this.get(\"_objFilterCustomCandidateExternalPortfoliosService\"),\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 46,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"tags\"),\n                sProperty: \"tags_links___tag_id\",\n                sFilterType: \"suggest\",\n                sReactFilterRoute: \"datagrid/filterEditor/candidate-tags\",\n                iWidth: 15,\n                bSilent: true,\n                bFilterAnd: true,\n                bFilterOr: true,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 33,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"skill\"),\n                sProperty: \"skill_details___skill_id\",\n                sFilterType: \"suggest\",\n                sReactFilterRoute: \"datagrid/filterEditor/skills\",\n                //Whatever property is listed in the arrReactFilterExtraDataPropswill be pulled from\n                //_objDatagridConfig config and send on to react popup\n                arrReactFilterExtraDataProps: [\"candidate_types\"],\n                iWidth: 15,\n                bSilent: true,\n                bFilterAnd: true,\n                bFilterOr: true,\n                bFilterSecondary: true,\n                funcFilterParseQueryValue: function funcFilterParseQueryValue(objQueryObjectParam) {\n                    var objQueryObject = Ember.copy(objQueryObjectParam, true);\n                    for (var _i2 = 0; _i2 < objQueryObject.length; _i2++) {\n                        if (objQueryObject[_i2].mValue === \"*\") {\n                            objQueryObject[_i2].bAny = true;\n                        }\n                        if (!a24Core.isEmpty(objQueryObject[_i2].arSec)) {\n                            for (var _j = 0; _j < objQueryObject[_i2].arSec.length; _j++) {\n                                if (objQueryObject[_i2].arSec[_j].sProp === \"duration\") {\n                                    objQueryObject[_i2].arSec[_j].mValue = Math.ceil(objQueryObject[_i2].arSec[_j].mValue * 12);\n                                }\n                            }\n                        }\n                    }\n\n                    return objQueryObject;\n                }\n            }, {\n                iUniqueColNum: 34,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"qualification\"),\n                sProperty: \"qualification_details___qualification_id\",\n                sFilterType: \"suggest\",\n                sReactFilterRoute: \"datagrid/filterEditor/qualifications_v2\",\n                //Whatever property is listed in the arrReactFilterExtraDataProps will be pulled from\n                //_objDatagridConfig config and send on to react popup\n                arrReactFilterExtraDataProps: [\"candidate_types\"],\n                iWidth: 15,\n                bSilent: true,\n                bFilterAnd: true,\n                bFilterOr: true,\n                bFilterSecondary: true,\n                funcFilterParseQueryValue: function funcFilterParseQueryValue(objQueryObjectParam) {\n                    var objQueryObject = Ember.copy(objQueryObjectParam, true);\n                    for (var _i3 = 0; _i3 < objQueryObject.length; _i3++) {\n                        if (objQueryObject[_i3].mValue === \"*\") {\n                            objQueryObject[_i3].bAny = true;\n                        }\n                    }\n\n                    return objQueryObject;\n                }\n            }, {\n                iUniqueColNum: 35,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"professionalRegistration\"),\n                sProperty: \"registration_body_details___registration_body_id\",\n                sFilterType: \"custom\",\n                sReactFilterRoute: \"datagrid/filterEditor/professional-registration_v2\",\n                //Whatever property is listed in the arrReactFilterExtraDataProps will be pulled from\n                //_objDatagridConfig config and send on to react popup\n                arrReactFilterExtraDataProps: [\"candidate_types\"],\n                bSilent: true,\n                bFilterAnd: true,\n                bFilterOr: true,\n                iWidth: 15,\n                bFilterSecondary: true,\n                sFilterCustomComponentName: \"card-datagrid-custom-filter-candidate-professional-registration\",\n                objFilterCustomService: this.get(\"_objFilterCustomCandidateProfessionalRegistrationService\")\n            }, {\n                iUniqueColNum: 44,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"profRegEntries\"),\n                sProperty: \"registration_body_details___registration_body_entry_id\",\n                bText: true,\n                sFilterType: \"custom\",\n                sReactFilterRoute: \"datagrid/filterEditor/professional-registration-entry\",\n                //Whatever property is listed in the arrReactFilterExtraDataProps will be pulled from\n                //_objDatagridConfig config and send on to react popup\n                arrReactFilterExtraDataProps: [\"candidate_types\"],\n                bSilent: true,\n                bFilterAnd: true,\n                bFilterOr: true,\n                iWidth: 15,\n                bHideEmptyCheck: true,\n                sFilterCustomComponentName: \"card-datagrid-custom-filter-candidate-professional-registration\",\n                objFilterCustomService: this.get(\"_objFilterCustomCandidateProfessionalRegistrationService\"),\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 36,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"externalVerification\"),\n                sProperty: \"external_verifications___name\",\n                sFilterType: \"dropdown\",\n                bSilent: true,\n                bMapping: true,\n                arrMappingData: arrExternalVerificationDropdown,\n                iWidth: 8,\n                bFilterAnd: true,\n                bFilterOr: true,\n                bFilterSecondary: true\n            },\n            // Commented out for this ticket https://github.com/A24Group/react-core/issues/2994\n            // {\n            //     iUniqueColNum: 37,\n            //     sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"externalDaysToExpiry\"),\n            //     sProperty: \"external_days_to_expiry___type_id\",\n            //     bText: true,\n            //     sFilterType: \"custom\",\n            //     sReactFilterRoute: \"datagrid/filterEditor/externalDaysToExpiry\",\n            //     bSilent: true,\n            //     iWidth: 15,\n            //     bFilterAnd: true,\n            //     bFilterOr: true,\n            //     bFilterSecondary: true,\n            //     arrExternalDaysTypes: arrExternalDaysTypes,\n\n            //     sFilterCustomComponentName: \"card-datagrid-custom-filter-candidate-external-days-to-expiry\",\n            //     objFilterCustomService: this.get(\"_objFilterCustomCandidateExternalDaysToExpiryService\"),\n            // },\n            {\n                iUniqueColNum: 39,\n                sTitle: this.get(\"_objSSCoreStringsService\").getString(\"keywords\"),\n                sProperty: \"keywords___name\",\n                sFilterType: \"text\",\n                iWidth: 15,\n                bSilent: true,\n                bFilterAnd: true,\n                bFilterOr: true,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 40,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"lastSeenInApp\"),\n                sProperty: \"chat_token_last_issued_at\",\n                sFilterType: \"date\",\n                bDate: true,\n                iWidth: 15,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 42,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"doNotContact\"),\n                sProperty: \"notification_dnc\",\n                sFilterType: \"bool\",\n                bHideEmptyCheck: true,\n                bBool: true,\n                bMapping: true,\n                arrMappingData: [{\n                    sValue: \"true\",\n                    sTitle: this.get(\"_objStringsService\").getString(\"yes\")\n                }, {\n                    sValue: \"false\",\n                    sTitle: this.get(\"_objStringsService\").getString(\"no\")\n                }],\n                iWidth: 8,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 43,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"notificationPreference\"),\n                sProperty: \"medium_dnc___type\",\n                sFilterType: \"dropdown\",\n                bMapping: false,\n                bFilterAnd: true,\n                bFilterOr: true,\n                bFilterSecondary: true,\n                arrMappingData: arrMediaTypesDropdown,\n                arrQueryType: [{\n                    sLabel: this.get(\"_objStringsService\").getString(\"is\"),\n                    sValue: this.get(\"_objConstantsLib\").CARD_DATAGRID_FILTER_QUERY_TYPE_IS\n                }],\n                bCustom: true,\n                funcTableCustomVal: function funcTableCustomVal(objHeader, objRowData) {\n                    var sMediumTypes = \"\";\n                    if (!a24Core.isEmpty(objRowData.medium_dnc)) {\n                        var arrRowMediumDncData = objRowData.medium_dnc;\n                        for (var _i4 = 0; _i4 < arrRowMediumDncData.length; _i4++) {\n                            if (!arrRowMediumDncData[_i4].value) {\n                                var sMediumType = _this3.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"mediumTypeDnc\", arrRowMediumDncData[_i4].type);\n                                if (a24Core.isEmpty(sMediumType)) {\n                                    sMediumType = arrRowMediumDncData[_i4].type;\n                                }\n                                if (!a24Core.isEmpty(sMediumTypes)) {\n                                    sMediumTypes += \", \";\n                                }\n                                sMediumTypes += sMediumType;\n                            }\n                        }\n                    }\n                    return Ember.String.htmlSafe(\"<span title=\\\"\" + sMediumTypes + \"\\\">\" + sMediumTypes + \"</span>\");\n                },\n                iWidth: 15,\n                bStopFiltering: true,\n                bStopColumnSort: true\n            }, {\n                iUniqueColNum: 45,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"transport\"),\n                sProperty: \"transport_type\",\n                sFilterType: \"dropdown\",\n                bHideEmptyCheck: false,\n                bSilent: true,\n                bMapping: false,\n                arrMappingData: arrTransportOptionsDropdown,\n                iWidth: 8,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 49,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"verifiedDocuments\"),\n                sProperty: \"allocated_agency_group_verified_documents___document_type_id\",\n                sFilterType: \"suggest\",\n                sReactFilterRoute: \"datagrid/filterEditor/verifiedDocumentsCompliance\",\n                bSilent: true,\n                iWidth: 8,\n                bFilterAnd: true,\n                bFilterOr: true,\n                bFilterSecondary: true\n            }, {\n                iUniqueColNum: 51,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"referenceCompliance\"),\n                sProperty: \"reference_compliance___reference_compliance_standard_id\",\n                sFilterType: \"suggest\",\n                sReactFilterRoute: \"datagrid/filterEditor/referenceCompliance\",\n                bSilent: true,\n                iWidth: 8,\n                bFilterAnd: true,\n                bFilterOr: true,\n                bFilterSecondary: true,\n                // Once backend is done test that this works as expected\n                funcFilterParseQueryValue: function funcFilterParseQueryValue(arrQuery) {\n                    var arrNewQuery = Ember.copy(arrQuery, true);\n                    for (var _i5 = 0; _i5 < arrNewQuery.length; _i5++) {\n                        arrNewQuery[_i5].arSec.push({\n                            sProp: 'candidate_match_enabled_position_type',\n                            bEncode: true,\n                            mValue: true\n                        });\n                    }\n\n                    return arrNewQuery;\n                }\n            }, {\n                iUniqueColNum: 52,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"hasNextOfKin\"),\n                sProperty: \"has_next_of_kin\",\n                sFilterType: \"bool\",\n                bSilent: true,\n                bHideEmptyCheck: true,\n                bBool: true,\n                bMapping: true,\n                arrMappingData: [{\n                    sValue: \"true\",\n                    sTitle: this.get(\"_objStringsService\").getString(\"yes\")\n                }, {\n                    sValue: \"false\",\n                    sTitle: this.get(\"_objStringsService\").getString(\"no\")\n                }],\n                iWidth: 8\n            }];\n            if (this.get(\"_objUserSession.objContextDetails.sCountryId\") === \"826\") {\n                arrDataGridHeaderConfig.push({\n                    iUniqueColNum: 16,\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"dbsStatus\"),\n                    sProperty: \"dbs_status\",\n                    sFilterType: \"dropdownMulti\",\n                    bMapping: true,\n                    arrMappingData: arrDBSStatusDropdown,\n                    iWidth: 15\n                });\n                arrDataGridHeaderConfig.push({\n                    iUniqueColNum: 50,\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"externalWorkforce\"),\n                    sProperty: \"external_workforce\",\n                    sFilterType: \"dropdownMulti\",\n                    bMapping: true,\n                    arrMappingData: arrDBSWorkforceDropdown,\n                    iWidth: 15,\n                    bStopColumnSort: true,\n                    bHideEmptyCheck: true\n                });\n            }\n\n            arrDataGridHeaderConfig.push({\n                iUniqueColNum: 17,\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"lastContactedAt\"),\n                sProperty: \"last_contacted_at\",\n                sFilterType: \"date\",\n                bDate: true,\n                iWidth: 15,\n                bStopFiltering: true\n            });\n\n            var arrSingleItemActions = [{\n                sTitle: this.get(\"_objSSCoreStringsService\").getString(\"openInNewTab\"),\n                sIcon: \"open_in_new\",\n                executeCardAction: function executeCardAction() {\n                    objThis.viewAllCandidatesInNewWindows(objThis.get(\"_arrSelectedItems\"));\n                }\n            }];\n\n            var arrMultiItemActions = [{\n                sTitle: this.get(\"_objSSCoreStringsService\").getString(\"openInNewTab\"),\n                sIcon: \"open_in_new\",\n                executeCardAction: function executeCardAction() {\n                    objThis.viewAllCandidatesInNewWindows(objThis.get(\"_arrSelectedItems\"));\n                },\n                funcFilterFunc: function funcFilterFunc(arrSelectedItems) {\n                    // Only show when selected items is not more than 10\n                    return !a24Core.isEmpty(arrSelectedItems) && arrSelectedItems.length <= 10;\n                }\n            }];\n\n            var arrProficiencyDropdown = this.get(\"_objCandidateProfileEnumsService\").getList(\"languageProficiency\").map(function (objProficiency) {\n                return {\n                    sTitle: objProficiency.sLabel,\n                    sValue: objProficiency.sValue\n                };\n            });\n\n            var arrDocumentStatusesDropdown = this.get(\"_objCandidateProfileEnumsService\").getList(\"documentStatuses\").map(function (objDocumentStatus) {\n                return {\n                    sTitle: objDocumentStatus.sLabel,\n                    sValue: objDocumentStatus.sValue\n                };\n            });\n\n            var arrSkillsStatusesDropdown = this.get(\"_objCandidateProfileEnumsService\").getList(\"skillsStatusSearch\").map(function (objSkillStatus) {\n                return {\n                    sTitle: objSkillStatus.sLabel,\n                    sValue: objSkillStatus.sValue\n                };\n            });\n\n            var arrQualificationsStatusesDropdown = this.get(\"_objCandidateProfileEnumsService\").getList(\"qualificationsStatus\").map(function (objQualificationsStatus) {\n                return {\n                    sTitle: objQualificationsStatus.sLabel,\n                    sValue: objQualificationsStatus.sValue\n                };\n            });\n\n            var iPerPage = 15;\n\n            // Set up datagrid config\n            this.set(\"_objDatagridConfig\", {\n                sDatagridHeader: this.get(\"_objSSCoreStringsService\").getString(\"candidateSearch\"),\n                iMaxHeight: 40 * 27,\n                bSelectColumn: true,\n                bEmitSelectRowEvent: true,\n                bHasReloadButton: true,\n                bEmitDidDoServiceCall: true,\n                bEmitWillDoServiceCall: true,\n                iResultCountLimit: 251,\n                arrSingleItemSelectActions: arrSingleItemActions,\n                arrMultiItemSelectActions: arrMultiItemActions,\n                arrHeaderConfig: arrDataGridHeaderConfig, // This array contain the datagrid columns\n                sReactIFrameUrl: this.get(\"_sReactGatewayUrl\"),\n                candidate_types: arrCandidateTypes,\n                iPerPage: iPerPage,\n                arrFilterSecondary_consultants___consultant_role: [{\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"consultant\"),\n                    sProperty: \"user_name\",\n                    sFilterType: \"text\",\n                    bHideEmptyCheck: true,\n                    funcFilterPrimaryChange: function funcFilterPrimaryChange(sPrimaryValue, objPrimary, objSecondary) {\n                        Ember.set(objSecondary, \"bFilterRequired\", sPrimaryValue === \"*\");\n                    }\n                }],\n                arrFilterSecondary_policies___type_id: [{\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"version\"),\n                    sProperty: \"version\",\n                    bHideEmptyCheck: true,\n                    sFilterType: \"int\"\n                }],\n                arrFilterSecondary_languages___name: [{\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"languageProficiency\"),\n                    sProperty: \"proficiency\",\n                    sFilterType: \"dropdown\",\n                    bHideEmptyCheck: true,\n                    arrMappingData: arrProficiencyDropdown\n                }],\n                arrFilterSecondary_activities___activity_type: [{\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"lastOccurredAt\"),\n                    sProperty: \"last_activity_at\",\n                    bHideEmptyCheck: true,\n                    sFilterType: \"date\"\n                }, {\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"numberOfOccurrences\"),\n                    sProperty: \"total\",\n                    bHideEmptyCheck: true,\n                    sFilterType: \"int\"\n                }],\n                arrFilterSecondary_first_status_date___status: [{\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"withinDateRange\"),\n                    sProperty: \"date\",\n                    sFilterType: \"date\",\n                    bHideEmptyCheck: true,\n                    bFilterRequired: true\n                }],\n                arrFilterSecondary_last_status_date___status: [{\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"withinDateRange\"),\n                    sProperty: \"date\",\n                    sFilterType: \"date\",\n                    bHideEmptyCheck: true,\n                    bFilterRequired: true\n                }],\n                arrFilterSecondary_external_days_to_expiry___type_id: [{\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"expiresOn\"),\n                    sProperty: \"value\",\n                    sFilterType: \"date\",\n                    bTemporal: true,\n                    bTimeless: true\n                }],\n                arrFilterSecondary_external_documents___type_id: [{\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"uploaded\"),\n                    sProperty: \"date\",\n                    bHideEmptyCheck: true,\n                    sFilterType: \"date\",\n                    bTemporal: true\n                }, {\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"expiry\"),\n                    sProperty: \"expiry_date\",\n                    bHideEmptyCheck: true,\n                    sFilterType: \"date\",\n                    bTemporal: true\n                }],\n                arrFilterSecondary_documents___system_document_type_id: [{\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"uploaded\"),\n                    sProperty: \"uploaded_at\",\n                    bHideEmptyCheck: true,\n                    sFilterType: \"date\"\n                }, {\n                    sTitle: this.get(\"_objStringsService\").getString(\"status\"),\n                    sProperty: \"status\",\n                    bHideEmptyCheck: true,\n                    sFilterType: \"dropdown\",\n                    arrMappingData: arrDocumentStatusesDropdown\n                }],\n                arrFilterSecondary_skill_details___skill_id: [{\n                    sTitle: this.get(\"_objStringsService\").getString(\"status\"),\n                    sProperty: \"status\",\n                    bHideEmptyCheck: true,\n                    sFilterType: \"dropdown\",\n                    arrMappingData: arrSkillsStatusesDropdown,\n                    bFilterRequired: false,\n                    funcFilterPrimaryChange: function funcFilterPrimaryChange(sPrimaryValue, objPrimary, objSecondary) {\n                        Ember.set(objSecondary, \"bFilterRequired\", sPrimaryValue === \"*||\" + objThis.get(\"_objStringsService\").getString(\"any\"));\n                    }\n                }, {\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"yearsOfExperience\"),\n                    sProperty: \"duration\",\n                    bHideEmptyCheck: true,\n                    sFilterType: \"int\",\n                    bFilterAllowFloat: true,\n                    iFilterFloatPlaces: 1\n                }],\n                arrFilterSecondary_qualification_details___qualification_id: [{\n                    sTitle: this.get(\"_objStringsService\").getString(\"status\"),\n                    sProperty: \"status\",\n                    bHideEmptyCheck: true,\n                    sFilterType: \"dropdown\",\n                    arrMappingData: arrQualificationsStatusesDropdown,\n                    funcFilterPrimaryChange: function funcFilterPrimaryChange(sPrimaryValue, objPrimary, objSecondary) {\n                        Ember.set(objSecondary, \"bFilterRequired\", sPrimaryValue === \"*||\" + objThis.get(\"_objStringsService\").getString(\"any\"));\n                    }\n                }, {\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"obtainedAt\"),\n                    sProperty: \"obtained_at\",\n                    bHideEmptyCheck: true,\n                    sFilterType: \"date\",\n                    bTemporal: true\n                }, {\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"expiresOn\"),\n                    sProperty: \"expires_at\",\n                    bHideEmptyCheck: true,\n                    sFilterType: \"date\",\n                    bTemporal: true\n                }],\n                arrFilterSecondary_registration_body_details___registration_body_id: [{\n                    sTitle: this.get(\"_objStringsService\").getString(\"status\"),\n                    sProperty: \"status_id\",\n                    sFilterType: \"suggest\"\n                }, {\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"entry\"),\n                    sProperty: \"registration_body_entry_id\",\n                    sFilterType: \"suggest\"\n                }, {\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"entryStatus\"),\n                    sProperty: \"registration_body_entry_status_id\",\n                    sFilterType: \"suggest\"\n                }, {\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"expiresOn\"),\n                    sProperty: \"expires_at\",\n                    sFilterType: \"date\",\n                    bTemporal: true,\n                    bTimeless: true\n                }, {\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"obtainedAt\"),\n                    sProperty: \"obtained_at\",\n                    sFilterType: \"date\",\n                    bTemporal: true,\n                    bTimeless: true\n                }, {\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"validFrom\"),\n                    sProperty: \"valid_at\",\n                    sFilterType: \"date\",\n                    bTemporal: true,\n                    bTimeless: true\n                }],\n                arrFilterSecondary_registration_body_details___registration_body_entry_id: [{\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"professionalRegistration\"),\n                    sProperty: \"registration_body_id\",\n                    sFilterType: \"suggest\",\n                    bFilterHideTag: true\n                }, {\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"entryStatus\"),\n                    sProperty: \"registration_body_entry_status_id\",\n                    sFilterType: \"suggest\"\n                }, {\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"expiresOn\"),\n                    sProperty: \"expires_at\",\n                    sFilterType: \"date\"\n                }, {\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"obtainedAt\"),\n                    sProperty: \"obtained_at\",\n                    sFilterType: \"date\"\n                }, {\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"validFrom\"),\n                    sProperty: \"valid_at\",\n                    sFilterType: \"date\"\n                }],\n                arrFilterSecondary_external_verifications___name: [{\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"verified\"),\n                    sProperty: \"value\",\n                    bHideEmptyCheck: true,\n                    bFilterRequired: true,\n                    sFilterType: \"dropdown\",\n                    arrMappingData: [{\n                        sValue: this.get(\"_objStringsService\").getString(\"no\"),\n                        sTitle: this.get(\"_objStringsService\").getString(\"no\")\n                    }, {\n                        sValue: this.get(\"_objStringsService\").getString(\"yes\"),\n                        sTitle: this.get(\"_objStringsService\").getString(\"yes\")\n                    }]\n                }],\n                arrFilterSecondary_medium_dnc___type: [{\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"enabled\"),\n                    sProperty: \"value\",\n                    bHideEmptyCheck: true,\n                    sFilterType: \"bool\",\n                    bFilterRequired: true,\n                    bBool: true,\n                    arrMappingData: [{\n                        sValue: \"false\",\n                        sTitle: this.get(\"_objStringsService\").getString(\"yes\")\n                    }, {\n                        sValue: \"true\",\n                        sTitle: this.get(\"_objStringsService\").getString(\"no\")\n                    }]\n                }],\n                arrFilterSecondary_allocated_agency_group_verified_documents___document_type_id: [{\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"verifiedAt\"),\n                    sProperty: \"verified_at\",\n                    bHideEmptyCheck: true,\n                    sFilterType: \"date\",\n                    bTemporal: true\n                }, {\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"issuedAt\"),\n                    sProperty: \"issued_at\",\n                    bHideEmptyCheck: true,\n                    sFilterType: \"date\",\n                    bTemporal: true\n                }, {\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"expireAt\"),\n                    sProperty: \"expire_at\",\n                    bHideEmptyCheck: true,\n                    sFilterType: \"date\",\n                    bTemporal: true\n                }],\n                arrFilterSecondary_reference_compliance___reference_compliance_standard_id: [{\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"isCompliant\"),\n                    sProperty: \"is_compliant\",\n                    bHideEmptyCheck: true,\n                    sFilterType: \"suggest\"\n                }, {\n                    sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"expiry\"),\n                    sProperty: \"compliance_expiry_date\",\n                    bHideEmptyCheck: true,\n                    sFilterType: \"date\",\n                    bTemporal: true\n                }],\n                objPermanentQuery: {\n                    // Required fields, either by api or UI components\n                    agency_group_id: {\n                        mValue: 1,\n                        bProject: true\n                    },\n                    candidate_id: {\n                        mValue: 1,\n                        bProject: true\n                    },\n                    full_name: {\n                        mValue: 1,\n                        bProject: true\n                    },\n                    first_name: {\n                        mValue: 1,\n                        bProject: true\n                    },\n                    last_name: {\n                        mValue: 1,\n                        bProject: true\n                    }\n\n                    // Optional based on column visibility\n                    // gender\n                    // candidate_type_id\n                    // current_status\n                    // first_status\n                    // first_status_date\n                    // status_since\n                    // linked_to_agency_group_at\n                    // city\n                    // province\n                    // post_code\n                    // username\n                    // last_shift_worked_at\n                    // next_shift_at\n                    // user_status\n                    // last_login_at\n                    // chat_token_last_issued_at\n                    // notification_dnc\n                    // medium_dnc\n                    // last_contacted_at\n                }\n            });\n            this.set(\"_bLoading\", false);\n            this.set(\"_bServiceCallsDone\", true);\n            if (this.get(\"_bHandleServerError\") && !a24Core.isEmpty(this.get(\"onQueryPageReload\"))) {\n                this.set(\"_bHandleServerError\", false);\n                this.get(\"onQueryPageReload\")(false);\n            }\n        },\n        _handleServerErrors: function _handleServerErrors() {\n            this.set(\"_bShowLoadFailedPopup\", true);\n        },\n        viewAllCandidatesInNewWindows: function viewAllCandidatesInNewWindows(arrSelectedItems) {\n            var _this4 = this;\n\n            $.each(arrSelectedItems, function (iKey, objCandidate) {\n                _this4.viewCandidateInNewWindow(objCandidate.candidate_id);\n            });\n        },\n        viewCandidateInNewWindow: function viewCandidateInNewWindow(sCandidateId) {\n            var sLink = this.get(\"_objNavigation\").navigateWithinContext(\"candidate-search-view\", {\n                \"candidate-search-view\": [sCandidateId]\n            }, null, true);\n            // Open the candidate link\n            this.openLink(sLink);\n        },\n        openLink: function openLink(sLink) {\n            window.open(sLink);\n        },\n\n        _onForceReset: Ember.observer(\"bForceReset\", function () {\n            if (this.get(\"bForceReset\")) {\n                this.set(\"_objQueryParams\", {});\n                this.get(\"onForceResetTriggered\")();\n            }\n        }),\n        _runTagsUrlChange: function _runTagsUrlChange() {\n            var _this5 = this;\n\n            if (this.get(\"sSimpleTagsUrl\") !== null) {\n                var objSimpleTagsQueryParams = this.get(\"_objDatagridFilterService\").transplantUrlValuesToDatagrid(this.get(\"_objQueryParams\"), this.get(\"sSimpleTagsUrl\"), [\"page\", \"sortBy\", \"vis_cols\"]);\n                this.set(\"_objQueryParams\", objSimpleTagsQueryParams);\n\n                if (this.get(\"_bResetUrl\")) {\n                    this.set(\"_bResetUrl\", false);\n                } else {\n                    Ember.run.next(function () {\n                        if (a24Core.isEmpty(_this5)) {\n                            return;\n                        }\n                        var arrHeaders = _this5.get(\"_objDatagridConfig.arrHeaderConfig\");\n                        var arrSimpleTags = _this5.get(\"_objDatagridFilterService\").getSimpleTags(arrHeaders);\n\n                        for (var i = 0; i < arrSimpleTags.length; i++) {\n                            // We are specificly checking for ack policies here since the lookup could not be done for agency\n                            if (!_this5.get(\"_bAgencyGroupContext\") && arrSimpleTags[i].property === \"policies___type_id\") {\n                                arrSimpleTags[i].title = arrSimpleTags[i].header + \": \";\n                                arrSimpleTags[i].error = true;\n                            } else if (a24Core.isEmpty(arrSimpleTags[i].value)) {\n                                arrSimpleTags[i].title = arrSimpleTags[i].header + \": \";\n                                arrSimpleTags[i].error = true;\n                            }\n                        }\n\n                        _this5.get(\"onSimpleTagsAction\")(arrSimpleTags);\n                        if (!_this5.get(\"bShow\")) {\n                            _this5.set(\"_bResetUrl\", true);\n                            _this5.set(\"sSimpleTagsUrl\", \"\");\n                        }\n                    });\n                }\n            }\n        },\n        _onTagsUrlChange: Ember.observer(\"sSimpleTagsUrl\", function () {\n            Ember.run.once(this, \"_runTagsUrlChange\");\n        }),\n        _onShowPopup: Ember.observer(\"bShow\", function () {\n            var _this6 = this;\n\n            this.set(\"_bShowPopup\", this.get(\"bShow\"));\n            if (this.get(\"bShow\")) {\n                if (!a24Core.isEmpty(this.get(\"_sQuery\"))) {\n                    this.set(\"_bDoneDisabled\", false);\n                } else {\n                    this.set(\"_bDoneDisabled\", true);\n                }\n            }\n            Ember.run.next(function () {\n                if (a24Core.isEmpty(_this6)) {\n                    return;\n                }\n                $(window).trigger(\"resize\");\n            });\n        }),\n        onItemsSelect: function onItemsSelect(arrSelectedItems) {\n            if (!a24Core.isEmpty(arrSelectedItems) && arrSelectedItems.length === 1) {\n                this.set(\"_objSelectedItem\", arrSelectedItems[0]);\n            }\n            // Set the selected items\n            this.set(\"_arrSelectedItems\", arrSelectedItems);\n        },\n        doCandidateView: function doCandidateView(sCandidateId) {\n            var _this7 = this;\n\n            Ember.run.next(function () {\n                if (a24Core.isEmpty(_this7)) {\n                    return;\n                }\n                _this7.get(\"_objNavigation\").navigateWithinContext(\"candidate-search-view\", {\n                    \"candidate-search-view\": [sCandidateId]\n                });\n            });\n        },\n        _onQueryBuilderPopupCancel: function _onQueryBuilderPopupCancel() {\n            this.get(\"onPopupCloseAction\")();\n        },\n        actions: {\n            cardDatagridTableNoneSelected: function cardDatagridTableNoneSelected() {\n                this.onItemsSelect(null);\n            },\n            cardDatagridTableOneSelected: function cardDatagridTableOneSelected(arrSelectedItems) {\n                this.onItemsSelect(arrSelectedItems);\n            },\n            cardDatagridTableMultiSelected: function cardDatagridTableMultiSelected(arrSelectedItems) {\n                this.onItemsSelect(arrSelectedItems);\n            },\n            cardDatagridTableCell: function cardDatagridTableCell(sColumnName, objRowData) {\n                if (sColumnName === \"first_name\" || sColumnName === \"last_name\" || sColumnName === \"full_name\") {\n\n                    var sCandidateId = objRowData.candidate_id;\n\n                    this.viewCandidateInNewWindow(sCandidateId);\n                }\n            },\n            onQueryBuilderPopupCancel: function onQueryBuilderPopupCancel() {\n                this._onQueryBuilderPopupCancel();\n            },\n            onPageReload: function onPageReload() {\n                this.set(\"_bShowLoadFailedPopup\", false);\n                this.set(\"_bHandleServerError\", true);\n                if (a24Core.isEmpty(this.get(\"onQueryPageReload\"))) {\n                    this.get(\"onQueryPageReload\")(true);\n                }\n                this.doServiceCalls();\n            },\n            onQueryBuilderPopupConfirm: function onQueryBuilderPopupConfirm() {\n                if (!this.get(\"_bDoneDisabled\")) {\n                    this.set(\"_bDoneDisabled\", true);\n                    var sDatagridUrl = this.get(\"_objDatagridFilterService\").getDatagridUrlQueryString(this.get(\"_objQueryParams\"));\n\n                    var arrHeaders = this.get(\"_objDatagridConfig.arrHeaderConfig\");\n                    var arrSimpleTags = this.get(\"_objDatagridFilterService\").getSimpleTags(arrHeaders);\n                    this.get(\"onPopupDoneAction\")(arrSimpleTags, sDatagridUrl, this.get(\"_sQuery\"));\n                }\n            },\n            onDidDoServiceCall: function onDidDoServiceCall(arrTableData, jqXHR, objPOSTBody) {\n                if (!a24Core.isEmpty(objPOSTBody)) {\n                    if (!a24Core.isEmpty(objPOSTBody.query)) {\n                        objPOSTBody.query = this.get(\"_objTemporalVariableService\").convertQueryToTemporalVariables(Ember.copy(objPOSTBody.query, true), this.get(\"_objDatagridConfig\"));\n                    }\n                    delete objPOSTBody.project;\n                    delete objPOSTBody.items_per_page;\n                    delete objPOSTBody.page;\n                    delete objPOSTBody.sort;\n                    if (!a24Core.isEmpty(objPOSTBody) && Object.keys(objPOSTBody).length !== 0) {\n                        this.set(\"_bDoneDisabled\", false);\n                        this.set(\"_sQuery\", JSON.stringify(objPOSTBody));\n                    } else {\n                        this.set(\"_bDoneDisabled\", true);\n                    }\n                } else {\n                    this.set(\"_bDoneDisabled\", true);\n                }\n            },\n            onWillDoServiceCall: function onWillDoServiceCall() {\n                this.set(\"_bDoneDisabled\", true);\n                this.set(\"_sQuery\", null);\n                if (!a24Core.isEmpty(this.get(\"onWillDoServiceCall\"))) {\n                    return this.get(\"onWillDoServiceCall\")(arguments[6]); // this is the success callback\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/email-preview\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/email-preview\"], function (exports, _didRenderChangesMixin, _emailPreview) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _emailPreview.default,\n        classNames: [\"email-preview\"],\n        objEmail: null,\n\n        _objAjax: $.ajax,\n        _sPreviewString: null,\n        _objEmailPreviewGeneratorService: Ember.inject.service(\"email-preview-generator\"),\n        _bInitDone: false,\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            if (\"srcdoc\" in document.createElement(\"iframe\")) {\n                this.set(\"_bInitDone\", true);\n\n                // Render the initial value\n                this.onValueChange();\n            } else {\n                this.get(\"_objAjax\")({\n                    url: this.get(\"_objEmailPreviewGeneratorService._sSrcDocPolyfilJs\"),\n                    dataType: \"script\",\n                    cache: true\n                }).always(function () {\n                    _this.set(\"_bInitDone\", true);\n                    // Render the initial value\n                    _this.onValueChange();\n                });\n            }\n        },\n        onValueChange: Ember.observer(\"objEmail\", function () {\n            if (this.get(\"_bInitDone\")) {\n                // Re-render the value when it changes\n                this.set(\"_sPreviewString\", this.get(\"_objEmailPreviewGeneratorService\").generateFullHtmlFromEmailObject(this.get(\"objEmail\")));\n            }\n        })\n    });\n});","define(\"a24-ember-candidate-profile/components/page-agency-group-candidate-view\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/page-agency-group-candidate-view\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _didRenderChangesMixin, _pageAgencyGroupCandidateView, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _pageAgencyGroupCandidateView.default,\n        classNames: [\"candidate-notifications-container\"],\n        _sCandidateId: null,\n        _sCandidateName: null,\n        _arrReloadActions: null,\n        _bDisplayReloadCard: false,\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objBasicInfoRestService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objStringsSSCore: Ember.inject.service(\"a24-strings-staffshift-core\"),\n        _objAvailabilityStrings: Ember.inject.service(\"a24-strings-staffshift-availability\"),\n        _objRestAgencyGroupCandidateInvite: Ember.inject.service(\"rest-invitation-verification\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objCandidateTypeTabsService: Ember.inject.service(\"candidate-type-tabs\"),\n        _objStaffshiftCoreEnums: Ember.inject.service(\"a24-enums-staffshift-core\"),\n        _objSettingsRestService: Ember.inject.service(\"rest-agency-group-candidate-settings\"),\n        _objRestAgencyGroupCandidateReportInterviewProfile: Ember.inject.service(\"rest-agency-group-candidate-report-interview-profile\"),\n        _objCandidateDocumentGeneration: Ember.inject.service(\"candidate-document-generation-service\"),\n        _objRestCandidateType: Ember.inject.service(\"rest-agency-group-candidate-type\"),\n        _objConstantsSSCore: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objSystemService: Ember.inject.service(\"rest-system\"),\n        _objReportInterviewDocumentResponse: null,\n        _objCandidateTypesResponse: null,\n\n        _objResendInviteServiceCall: null,\n        _bInvitePopupLoading: false,\n        _bShowResendInvitePopup: false,\n        _bHasSkills: false,\n        _bHasQualifications: false,\n        _bHasProfessionalRegistrations: false,\n        _sCurrentRouteName: \"\",\n        _iLastSkillTabIndex: null,\n        _iLastQualificationTabIndex: null,\n        _iLastProfessionalRegistrationTabIndex: null,\n\n        _bShowResendInviteSuccessPopup: false,\n        _sResendInviteSuccessMessage: null,\n        _objRestAgencyNotificationTypes: Ember.inject.service(\"rest-agency-group-notification-types\"),\n        _objRestAgencyCandidateNotification: Ember.inject.service(\"rest-agency-group-candidate-notification\"),\n        _objRestAgencyNotificationTypeTemplates: Ember.inject.service(\"rest-agency-group-notification-type-templates\"),\n        _objCandidateProfileEnumsService: Ember.inject.service(\"a24-enums-candidate-profile\"),\n\n        _bShowReplyBackWithInput: false,\n        _bShowReplyWithInput: false,\n        _bShowCampaignNameInput: false,\n        _bShowContentInput: false,\n        _bShowRegards: false,\n        _bShowReplyWithInputContact: false,\n\n        _arrCandidateTypes: null,\n        _arrPositionTypes: null,\n        _bServerError: false,\n        _bSendNotificationPopupLoading: true,\n        _bShowSendNotificationPopup: false,\n        _arrNotificationTypeDropdown: null,\n        _objGetNotificationTypesServiceCall: null,\n        _bShowNotificationPreviewPopup: false,\n        _bDisplayPreviewSend: false,\n        _sNotificationId: null,\n        _objGetNotificationServiceCall: null,\n        _objPreviewNotificationServiceCall: null,\n        _objSendNotificationServiceCall: null,\n        _objNotificationPreview: null,\n        _bNotificationTypeLoading: false,\n        _objSpecialNotificationPopupAction: null,\n        _objSpecialNotificationTypePreviewPopupAction: null,\n        _objOriginalData: null,\n        _arrNotificationTypeComponents: null,\n        _arrComponents: null,\n        _bIsEmail: null,\n        _bShowNotificationTypes: false,\n        _arrNotificationCache: null,\n        _bShowSentMessagePopup: false,\n        _objBasicInfoGetPromise: null,\n\n        _sPreviewLabel: \"\",\n\n        _bShowField1: false,\n        _bShowField2: false,\n        _bShowField3: false,\n        _bShowField4: false,\n        _bShowField5: false,\n\n        _sLabelField1: \"\",\n        _sLabelField2: \"\",\n        _sLabelField3: \"\",\n        _sLabelField4: \"\",\n        _sLabelField5: \"\",\n\n        _bRequiredField1: false,\n        _bRequiredField2: false,\n        _bRequiredField3: false,\n        _bRequiredField4: false,\n        _bRequiredField5: false,\n\n        _bComplianceUpdateNotification: false,\n        _bShowNotificationInputs: Ember.computed(\"_bComplianceUpdateNotification\", \"_bCandidateCallbackRequestedNotification\", \"_bCandidateReminderNotification\", function () {\n            return this.get(\"_bComplianceUpdateNotification\") || this.get(\"_bCandidateCallbackRequestedNotification\") || this.get(\"_bCandidateReminderNotification\");\n        }),\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.set(\"_objBasicInfoRestService.objLastCandidateDetails\", null);\n\n            var objCandidateViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-view\"];\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            this.set(\"_arrReloadActions\", [{\n                sTitle: this.get(\"_objStringsCandidateProfile\").getString(\"reload\"),\n                sIcon: \"refresh\",\n                executeCardAction: function executeCardAction() {\n                    // For now this does nothing since nothing sets _bServerError as true, but leaving this and the hbs\n                    // parts there if we need this in future again.\n                }\n            }]);\n\n            var objValidationConfig = {};\n\n            objValidationConfig[\"objChildren.campaign_name\"] = function (objMixin) {\n                a24Validation.addRequired(objMixin, true);\n            };\n\n            objValidationConfig[\"objChildren.reply_back_with\"] = function (objMixin) {\n                a24Validation.addRequired(objMixin, true);\n            };\n\n            objValidationConfig[\"objChildren.reply_with_contact\"] = function (objMixin) {\n                a24Validation.addRequired(objMixin, true);\n            };\n\n            objValidationConfig[\"objChildren.reply_with\"] = function (objMixin) {\n                a24Validation.addRequired(objMixin, true);\n                a24Validation.addMaxLength(objMixin, 50);\n            };\n\n            objValidationConfig[\"objChildren.content\"] = function (objMixin) {\n                a24Validation.addRequired(objMixin, true);\n                a24Validation.addMaxLength(objMixin, 200);\n            };\n\n            objValidationConfig[\"objChildren.regards\"] = function (objMixin) {\n                a24Validation.addRequired(objMixin, true);\n                a24Validation.addMaxLength(objMixin, 100);\n            };\n\n            this.set(\"objChildConfig\", objValidationConfig);\n\n            this.set(\"_objSpecialNotificationPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this.onPopupNotificationCancel();\n                }\n            });\n\n            this.set(\"_objSpecialNotificationTypePreviewPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this.set(\"_bShowNotificationPreviewPopup\", false);\n                }\n            });\n\n            this.setTitleBarTextWithSetup();\n\n            this.set(\"_arrNotificationCache\", {});\n        },\n        setTitleBarTextWithSetup: function setTitleBarTextWithSetup() {\n            var _this2 = this;\n\n            var objThis = this;\n            var objActionItems = {\n                arrActionItems: []\n            };\n\n            objActionItems.arrActionItems.pushObject({\n                sTitle: this.get(\"_objStringsCandidateProfile\").getString(\"generateCandidateInterviewDocument\"),\n                sIcon: \"assignment_ind\",\n                bCandidateProfileDefault: true,\n                executeCardAction: function executeCardAction() {\n                    objThis._onGenerateInterviewDocClick();\n                }\n            });\n\n            // check settings\n            if (this.get(\"_objSettingsRestService.objSettings.invitation_status\") === \"not_used\" || this.get(\"_objSettingsRestService.objSettings.user_status\") === \"awaiting_verification\" || a24Core.isEmpty(this.get(\"_objSettingsRestService.objSettings.user_status\")) && this.get(\"_objSettingsRestService.objSettings.invitation_status\") !== \"used\" || a24Core.isEmpty(this.get(\"_objSettingsRestService.objSettings.user_status\")) && a24Core.isEmpty(this.get(\"_objSettingsRestService.objSettings.invitation_status\"))) {\n                objActionItems.arrActionItems.pushObject({\n                    sTitle: this.get(\"_objStringsCandidateProfile\").getString(\"resendInviteEmail\"),\n                    sIcon: \"email\",\n                    bCandidateProfileDefault: true,\n                    executeCardAction: function executeCardAction() {\n                        objThis.onResendEmailClick();\n                    }\n                });\n            }\n\n            objActionItems.arrActionItems.pushObject({\n                sTitle: this.get(\"_objStringsCandidateProfile\").getString(\"sendNotification\"),\n                sIcon: \"notifications\",\n                bCandidateProfileDefault: true,\n                executeCardAction: function executeCardAction() {\n                    objThis.onNoticationEmailClick();\n                }\n            });\n\n            this.get(\"_objTitleBarService\").setTitleBar(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\"), function () {\n                _this2.get(\"_objNavigationService\").navigateBack();\n            }, false, \"card-actions-component\", objActionItems);\n        },\n        openWindowWithHtml: function openWindowWithHtml(sHtml) {\n            var objNewWindow = window.open();\n\n            if (objNewWindow !== null) {\n                objNewWindow.document.write(sHtml);\n                objNewWindow.document.close();\n                objNewWindow.focus();\n            }\n        },\n        _generateInterviewDocument: function _generateInterviewDocument() {\n            var _this3 = this;\n\n            this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsCandidateProfile\").getString(\"generateReport\"));\n\n            this.get(\"_objRestAgencyGroupCandidateReportInterviewProfile\").getCandidateReportInterviewProfile(this, \"_objReportInterviewDocumentResponse\", this.get(\"_sCandidateId\"), function (objData) {\n                _this3.set(\"_objCandidateDocumentGeneration.arrTypes\", _this3.get(\"_arrCandidateTypes\"));\n                var sHtml = _this3.get(\"_objCandidateDocumentGeneration\").generateInterviewCandidateProfile(objData);\n                _this3.openWindowWithHtml(sHtml);\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                _this3.get(\"_objSnackbarService\").showSnackbarMessage(_this3.get(\"_objStringsCandidateProfile\").getString(\"failGenerateReport\"));\n            }));\n        },\n        _onGenerateInterviewDocClick: function _onGenerateInterviewDocClick() {\n            var _this4 = this;\n\n            if (a24Core.isEmpty(this.get(\"_arrCandidateTypes\"))) {\n                this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsCandidateProfile\").getString(\"preparingGeneration\"));\n                this.get(\"_objRestCandidateType\").getCandidateTypes(this, \"_objCandidateTypesResponse\", this.get(\"_objUserSession\").getUserContextReference().mId, function (objResponse) {\n                    _this4.set(\"_arrCandidateTypes\", objResponse);\n                    _this4._generateInterviewDocument();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                    _this4.get(\"_objSnackbarService\").showSnackbarMessage(_this4.get(\"_objStringsCandidateProfile\").getString(\"failGenerateReport\"));\n                }));\n            } else {\n                this._generateInterviewDocument();\n            }\n        },\n        onResendEmailClick: function onResendEmailClick() {\n            this.set(\"_bInvitePopupLoading\", false);\n            // Show the popup\n            this.set(\"_bShowResendInvitePopup\", true);\n        },\n        _funcResetNotificationFields: function _funcResetNotificationFields() {\n            this.set(\"_sPreviewLabel\", \"\");\n\n            this.set(\"_bShowField1\", false);\n            this.set(\"_bShowField2\", false);\n            this.set(\"_bShowField3\", false);\n            this.set(\"_bShowField4\", false);\n            this.set(\"_bShowField5\", false);\n\n            this.set(\"_sLabelField1\", \"\");\n            this.set(\"_sLabelField2\", \"\");\n            this.set(\"_sLabelField3\", \"\");\n            this.set(\"_sLabelField4\", \"\");\n            this.set(\"_sLabelField5\", \"\");\n\n            this.set(\"_bRequiredField1\", false);\n            this.set(\"_bRequiredField2\", false);\n            this.set(\"_bRequiredField3\", false);\n            this.set(\"_bRequiredField4\", false);\n            this.set(\"_bRequiredField5\", false);\n        },\n        onNoticationEmailClick: function onNoticationEmailClick() {\n            var _this5 = this;\n\n            this.clearForm();\n\n            this.set(\"_bShowSendNotificationPopup\", true);\n            this.set(\"_bDisplayPreviewSend\", false);\n\n            var objPromiseList = {};\n            var arrRequiredResponses = [];\n\n            if (a24Core.isEmpty(this.get(\"_arrNotificationTypeDropdown\"))) {\n                this.set(\"_bSendNotificationPopupLoading\", true);\n                var objExtraParams = {\n                    enabled: {\n                        mValue: true\n                    }\n                };\n\n                var objNotificationsPromise = this.get(\"_objRestAgencyNotificationTypes\").getNotificationTypes(this, \"_objGetNotificationTypesServiceCall\", function (arrData) {\n                    if (!a24Core.isEmpty(arrData)) {\n\n                        var arrNotificationTypeDropdown = [];\n                        for (var l = 0; l < arrData.length; l++) {\n                            arrNotificationTypeDropdown.push({\n                                sTitle: arrData[l].name,\n                                sValue: arrData[l].metadata.type\n                            });\n                        }\n\n                        _this5.set(\"_arrNotificationTypeDropdown\", arrNotificationTypeDropdown);\n                    }\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                    var sServerError = _this5.get(\"_objStringsService\").getString(\"serverError\");\n                    _this5.get(\"_objSnackbarService\").showSnackbarMessage(sServerError);\n\n                    _this5.set(\"_bShowSendNotificationPopup\", false);\n                }), objExtraParams);\n\n                objPromiseList._objNotificationsPromise = objNotificationsPromise;\n                arrRequiredResponses.push(\"_objNotificationsPromise\");\n            }\n\n            if (a24Core.isEmpty(this.get(\"_objBasicInfoRestService.objLastCandidateDetails\"))) {\n                this.set(\"_bSendNotificationPopupLoading\", true);\n                var objBasicInfoPromise = this.get(\"_objBasicInfoRestService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    // Do nothing since the service will store the candidate data and we use it from there\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function () {\n                    //Do nothing, we simply wont be able to autocomplete the candidate name\n                }));\n\n                objPromiseList._objBasicInfoPromise = objBasicInfoPromise;\n                arrRequiredResponses.push(\"_objBasicInfoPromise\");\n            }\n\n            if (arrRequiredResponses.length > 0) {\n                a24RSVP.configure(this, objPromiseList, [{\n                    arrRequiredResponses: arrRequiredResponses,\n                    funcOnComplete: function funcOnComplete() {\n                        _this5.set(\"_bSendNotificationPopupLoading\", false);\n                    }\n                }]);\n            }\n        },\n        hidePopupAndShowSnackbar: function hidePopupAndShowSnackbar(sMessage) {\n            // Hide the popup\n            this.set(\"_bShowResendInvitePopup\", false);\n            // Show the snackbar message\n            this.get(\"_objSnackbarService\").showSnackbarMessage(sMessage);\n        },\n\n        onInputValueChanged: function onInputValueChanged(arrPathToInputMixin) {\n            var _this6 = this;\n\n            var sLookup = arrPathToInputMixin.join(\".\");\n\n            if (sLookup === \"objChildren._objNotificationType\") {\n                if (a24Core.isEmpty(this.get(\"objChildren._objNotificationType.mValue\"))) {\n                    this.set(\"_bDisplayPreviewSend\", false);\n                    this.set(\"_bShowNotificationTypes\", false);\n                } else {\n                    this.set(\"_sNotificationId\", this.get(\"objChildren._objNotificationType.mValue.sValue\"));\n\n                    this.set(\"_bComplianceUpdateNotification\", false);\n                    this._funcResetNotificationFields();\n\n                    this.set(\"_bShowCampaignNameInput\", false);\n                    this.set(\"_bShowReplyWithInput\", false);\n                    this.set(\"_bShowReplyBackWithInput\", false);\n                    this.set(\"_bShowContentInput\", false);\n                    this.set(\"_bShowRegards\", false);\n                    this.set(\"_bShowReplyWithInputContact\", false);\n                    if (this.get(\"_sNotificationId\") === \"failed_to_contact_registration\") {\n                        this.set(\"_bShowReplyWithInputContact\", true);\n                    } else if (this.get(\"_sNotificationId\") === \"failed_to_contact_campaign_registration\") {\n                        this.set(\"_bShowCampaignNameInput\", true);\n                        this.set(\"_bShowReplyBackWithInput\", true);\n                    } else if (this.get(\"_sNotificationId\") === \"compliance_update_request\") {\n                        this.set(\"_bComplianceUpdateNotification\", true);\n                    } else if (this.get(\"_sNotificationId\") === \"callback_requested_notification\") {\n                        this.set(\"_bShowReplyWithInput\", true);\n                        this.set(\"_bShowContentInput\", true);\n                        this.set(\"_bShowRegards\", true);\n                    } else if (this.get(\"_sNotificationId\") === \"candidate_reminder_on_action\") {\n                        this.set(\"_bShowReplyWithInput\", true);\n                        this.set(\"_bShowContentInput\", true);\n                        this.set(\"_bShowRegards\", true);\n                    }\n\n                    this.set(\"_bShowNotificationTypes\", true);\n                    if (a24Core.isEmpty(this.get(\"_arrNotificationCache.\" + this.get(\"_sNotificationId\")))) {\n\n                        var arrAgencyGroups = this.get(\"_objSettingsRestService.objSettings.agency_groups\");\n\n                        var arrCandidateTypes = [];\n                        if (!a24Core.isEmpty(arrAgencyGroups)) {\n                            for (var i = 0; i < arrAgencyGroups.length; i++) {\n                                if (!a24Core.isEmpty(arrAgencyGroups[i].candidate_type)) {\n                                    arrCandidateTypes.push(arrAgencyGroups[i].candidate_type);\n                                }\n                            }\n                        }\n\n                        var objExtraParams = {\n                            position_types: {\n                                mValue: arrCandidateTypes\n                            },\n                            context_notification_type: {\n                                mValue: this.get(\"_sNotificationId\")\n                            },\n                            status: {\n                                mValue: \"enabled\"\n                            }\n                        };\n\n                        this.set(\"_bNotificationTypeLoading\", true);\n                        this.set(\"_bDisplayPreviewSend\", false);\n                        this.get(\"_objRestAgencyNotificationTypeTemplates\").getNotificationTypeTemplates(this, \"_objGetNotificationTypesServiceCall\", function (arrData) {\n                            if (!a24Core.isEmpty(arrData)) {\n                                _this6.set(\"_arrNotificationTypeComponents\", _this6._setupTagComponents(arrData));\n                                Ember.run.schedule(\"afterRender\", function () {\n                                    if (a24Core.isEmpty(_this6)) {\n                                        return;\n                                    }\n                                    _this6.set(\"_bDisplayPreviewSend\", true);\n                                });\n                            } else {\n                                _this6.set(\"_arrNotificationTypeComponents\", []);\n                            }\n                            _this6.set(\"_arrNotificationCache.\" + _this6.get(\"_sNotificationId\"), _this6.get(\"_arrNotificationTypeComponents\"));\n                            _this6._funcPrepopulateNotificationFields();\n                            _this6.set(\"_bNotificationTypeLoading\", false);\n                            _this6.set(\"_bShowNotificationTypes\", true);\n                        }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                            var sServerError = _this6.get(\"_objStringsService\").getString(\"serverError\");\n                            _this6.get(\"_objSnackbarService\").showSnackbarMessage(sServerError);\n                            _this6.set(\"_bNotificationTypeLoading\", false);\n                            _this6.set(\"_bDisplayPreviewSend\", false);\n                            _this6.set(\"_bShowNotificationTypes\", false);\n                        }), objExtraParams);\n                    } else {\n                        this.set(\"_arrNotificationTypeComponents\", this.get(\"_arrNotificationCache.\" + this.get(\"_sNotificationId\")));\n                        this._funcPrepopulateNotificationFields();\n                        Ember.run.schedule(\"afterRender\", function () {\n                            if (a24Core.isEmpty(_this6)) {\n                                return;\n                            }\n                            _this6.set(\"_bDisplayPreviewSend\", true);\n                        });\n                        this.set(\"_bNotificationTypeLoading\", false);\n                    }\n                }\n            }\n        },\n        setPriorityGroupNames: function setPriorityGroupNames(arrGroupings) {\n            // replace priority 1 with Primary Delivery\n            // replace 2 with 1st Fallback\n            // replace 3 with 2nd Fallback\n            // replace 4 with 3rd Fallback\n            arrGroupings[0].sTitle = this.get(\"_objStringsCandidateProfile\").getString(\"primaryDelivery\");\n            if (arrGroupings.length > 1) {\n                arrGroupings[1].sTitle = this.get(\"_objStringsCandidateProfile\").getString(\"firstFallback\");\n            }\n            if (arrGroupings.length > 2) {\n                arrGroupings[2].sTitle = this.get(\"_objStringsCandidateProfile\").getString(\"secondFallback\");\n            }\n            if (arrGroupings.length > 3) {\n                arrGroupings[3].sTitle = this.get(\"_objStringsCandidateProfile\").getString(\"thirdFallback\");\n            }\n            if (arrGroupings.length > 4) {\n                for (var i = 4; i < arrGroupings.length; i++) {\n                    arrGroupings[i].sTitle = i + this.get(\"_objStringsCandidateProfile\").getString(\"th\") + \" \" + this.get(\"_objStringsCandidateProfile\").getString(\"fallback\");\n                }\n            }\n            return arrGroupings;\n        },\n        _setupTagComponents: function _setupTagComponents(arrNotificationTypeTemplates) {\n            var _this7 = this;\n\n            var objThis = this;\n            var funcGroupFilterExecute = function funcGroupFilterExecute(objItem) {\n                return function (objComponent) {\n                    return objItem.priority === objComponent.objData.mValue.priority;\n                };\n            };\n\n            var arrGroupings = arrNotificationTypeTemplates.uniqBy(\"priority\").sortBy(\"priority\").map(function (objItem) {\n                return {\n                    sTitle: objItem.priority,\n                    funcGroupFilter: funcGroupFilterExecute(objItem)\n                };\n            });\n\n            arrGroupings = this.setPriorityGroupNames(arrGroupings);\n\n            var arrComponents = arrNotificationTypeTemplates.map(function (objEntry) {\n                return {\n                    sComponent: \"tag-component-shrink\",\n                    objData: {\n                        sTitle: _this7.get(\"_objStaffshiftCoreEnums\").getFrontendValue(\"mediumType\", objEntry.type),\n                        mValue: objEntry,\n                        sColor: \"a24-primary-color-hue-3-force white-text\",\n                        sActionIcon: \"remove_red_eye\",\n                        sActionIconColor: \"white-text\"\n                    },\n                    objActions: {\n                        onTagClicked: function onTagClicked(sTitle, objItem) {\n                            objThis.clearAllErrorMessages();\n                            if (!objThis.doFullValidation()) {\n                                var objItemData = Ember.copy(objItem.data, true);\n                                var objData = objThis.getPlainFormValueObject();\n\n                                if (objItem.type === objThis.get(\"_objStaffshiftCoreEnums.mediumType.EMAIL.backend\")) {\n                                    objItemData.html = objThis._funcTokenReplaceNotificationPreview(objData, objItemData.html);\n                                } else {\n                                    objItemData.text = objThis._funcTokenReplaceNotificationPreview(objData, objItemData.text);\n                                }\n\n                                // show medium preview\n                                objThis.activityNotificationFromMedium(objItem.type, objItemData);\n                                objThis.set(\"_bShowNotificationPreviewPopup\", true);\n                            }\n                        }\n                    }\n                };\n            });\n\n            return {\n                arrComponents: arrComponents,\n                arrGroupings: arrGroupings,\n                sGroupTitleStyle: \"font-md a24-grey-text-darken-1\"\n            };\n        },\n        _funcTokenReplaceNotificationPreview: function _funcTokenReplaceNotificationPreview(objData, sTokenString) {\n            if (this.get(\"_bShowReplyWithInput\")) {\n                // Replace token for preview\n                sTokenString = sTokenString.replace(new RegExp(\"{{reply_with}}\", \"g\"), objData.reply_with);\n            }\n            if (this.get(\"_bShowReplyWithInputContact\")) {\n                // Replace token for preview\n                sTokenString = sTokenString.replace(new RegExp(\"{{reply_with}}\", \"g\"), objData.reply_with_contact);\n            }\n            if (this.get(\"_bShowCampaignNameInput\")) {\n                // Replace token for preview\n                sTokenString = sTokenString.replace(new RegExp(\"{{campaign_name}}\", \"g\"), objData.campaign_name);\n            }\n            if (this.get(\"_bShowReplyBackWithInput\")) {\n                // Replace token for preview\n                sTokenString = sTokenString.replace(new RegExp(\"{{reply_back_with}}\", \"g\"), objData.reply_back_with);\n            }\n            // tokens for callback_requested_notification\n            if (this.get(\"_bShowContentInput\")) {\n                // Replace token for preview\n                if (this.get(\"_sNotificationId\") === \"candidate_reminder_on_action\") {\n                    var sContent = objData.content + \". \" + this.get(\"_objStringsCandidateProfile\").getString(\"pleaseReplyWith\") + \" \" + objData.reply_with;\n                    sTokenString = sTokenString.replace(new RegExp(\"{{content}}\", \"g\"), sContent);\n                } else {\n                    sTokenString = sTokenString.replace(new RegExp(\"{{content}}\", \"g\"), objData.content);\n                }\n\n                var sTokenStringReplace = \"\";\n                var sTitle = this.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"title\", this.get(\"_objBasicInfoRestService.objLastCandidateDetails.title\"));\n\n                if ((this.get(\"_objBasicInfoRestService.objLastCandidateDetails.candidate_type_id\") === this.get(\"_objConstantsSSCore.UK_GP\") || this.get(\"_objBasicInfoRestService.objLastCandidateDetails.candidate_type_id\") === this.get(\"_objConstantsSSCore.UK_LOCUM\") || this.get(\"_objBasicInfoRestService.objLastCandidateDetails.candidate_type_id\") === this.get(\"_objConstantsSSCore.UK_LOCUM_ALLIED\") || this.get(\"_objBasicInfoRestService.objLastCandidateDetails.candidate_type_id\") === this.get(\"_objConstantsSSCore.ZA_LOCUM\") || this.get(\"_objBasicInfoRestService.objLastCandidateDetails.candidate_type_id\") === this.get(\"_objConstantsSSCore.ZA_LOCUM_ALLIED\")) && !a24Core.isEmpty(this.get(\"_objBasicInfoRestService.objLastCandidateDetails.title\"))) {\n                    sTokenStringReplace = sTitle + \" \" + this.get(\"_objBasicInfoRestService.objLastCandidateDetails.last_name\");\n                } else {\n                    sTokenStringReplace = this.get(\"_objBasicInfoRestService.objLastCandidateDetails.first_name\");\n                }\n\n                sTokenString = sTokenString.replace(new RegExp(\"{{candidate_first_name}}\", \"g\"), sTokenStringReplace);\n            }\n\n            if (this.get(\"_bShowRegards\")) {\n                // Replace token for preview\n                sTokenString = sTokenString.replace(new RegExp(\"{{regards}}\", \"g\"), objData.regards + \". \" + this.get(\"_objUserSession.objContextDetails.sName\") + \", \" + this.get(\"_objStringsCandidateProfile\").getString(\"aMemberOf\"));\n            }\n\n            if (this.get(\"_bComplianceUpdateNotification\")) {\n                // {{greeting}} Please update {{update_entity}} as {{update_reason}}. Regards {{regards}}{{reply_with}}\n                var sRegards = objData.field4;\n                if (!a24Core.isEmpty(objData.field5)) {\n                    sRegards = sRegards + \". \" + this.get(\"_objStringsCandidateProfile\").getString(\"pleaseReplyWith\") + \": \" + objData.field5;\n                }\n                sTokenString = sTokenString.replace(\"{{greeting}}\", objData.field1 + \".\");\n                sTokenString = sTokenString.replace(\"{{update_entity}}\", objData.field2);\n                sTokenString = sTokenString.replace(\"{{update_reason}}\", objData.field3);\n                sTokenString = sTokenString.replace(\"{{regards}}\", sRegards);\n                return sTokenString;\n            }\n\n            return sTokenString;\n        },\n        activityNotificationFromMedium: function activityNotificationFromMedium(sType, objNotificationTypePreview) {\n            if (sType === this.get(\"_objStaffshiftCoreEnums.mediumType.EMAIL.backend\")) {\n                this.set(\"_bIsEmail\", true);\n                this.set(\"_objNotificationPreview\", {\n                    sSubject: objNotificationTypePreview.subject,\n                    objFrom: objNotificationTypePreview.send_by,\n                    objTo: null,\n                    arrCC: null,\n                    arrBCC: null,\n                    objReplyTo: objNotificationTypePreview.reply_to,\n                    sHTML: objNotificationTypePreview.html\n                });\n            } else {\n                this.set(\"_bIsEmail\", false);\n                this.set(\"_objNotificationPreview\", {\n                    collected_tokens: [],\n                    sender_phone_number_formatted: null,\n                    recipient_mobile_number_formatted: null,\n                    medium: sType,\n                    data: {\n                        body: objNotificationTypePreview.text\n                    },\n                    created_at: null,\n                    status: null\n                });\n            }\n        },\n        _funcSetInputStates: function _funcSetInputStates(sVal1, sVal2, sVal3, sVal4, sVal5, bDisabled1, bDisabled2, bDisabled3, bDisabled4, bDisabled5) {\n            // Reset all inputs\n            var objField1 = this.get(\"objChildren.field1\");\n            var objField2 = this.get(\"objChildren.field2\");\n            var objField3 = this.get(\"objChildren.field3\");\n            var objField4 = this.get(\"objChildren.field4\");\n            var objField5 = this.get(\"objChildren.field5\");\n            if (!a24Core.isEmpty(objField1)) {\n                objField1.setValueFromOutside(sVal1 ? sVal1 : null);\n                this.$(\"#\" + objField1.get(\"_sInputId\")).prop('disabled', bDisabled1 ? bDisabled1 : false);\n                a24Validation.addRequired(objField1, this.get(\"_bRequiredField1\"));\n            }\n            if (!a24Core.isEmpty(objField2)) {\n                objField2.setValueFromOutside(sVal2 ? sVal2 : null);\n                this.$(\"#\" + objField2.get(\"_sInputId\")).prop('disabled', bDisabled2 ? bDisabled2 : false);\n                a24Validation.addRequired(objField2, this.get(\"_bRequiredField2\"));\n            }\n            if (!a24Core.isEmpty(objField3)) {\n                objField3.setValueFromOutside(sVal3 ? sVal3 : null);\n                this.$(\"#\" + objField3.get(\"_sInputId\")).prop('disabled', bDisabled3 ? bDisabled3 : false);\n                a24Validation.addRequired(objField3, this.get(\"_bRequiredField3\"));\n            }\n            if (!a24Core.isEmpty(objField4)) {\n                objField4.setValueFromOutside(sVal4 ? sVal4 : null);\n                this.$(\"#\" + objField4.get(\"_sInputId\")).prop('disabled', bDisabled4 ? bDisabled4 : false);\n                a24Validation.addRequired(objField4, this.get(\"_bRequiredField4\"));\n            }\n            if (!a24Core.isEmpty(objField5)) {\n                objField5.setValueFromOutside(sVal5 ? sVal5 : null);\n                this.$(\"#\" + objField5.get(\"_sInputId\")).prop('disabled', bDisabled5 ? bDisabled5 : false);\n                a24Validation.addRequired(objField5, this.get(\"_bRequiredField5\"));\n            }\n        },\n        _funcPrepopulateNotificationFields: function _funcPrepopulateNotificationFields() {\n            var _this8 = this;\n\n            //Reset error states when we switch notification types\n            this.clearAllErrorMessages();\n\n            if (this.get(\"_bComplianceUpdateNotification\")) {\n                this.set(\"_bShowField1\", true);\n                this.set(\"_bShowField2\", true);\n                this.set(\"_bShowField3\", true);\n                this.set(\"_bShowField4\", true);\n                this.set(\"_bShowField5\", true);\n\n                this.set(\"_sLabelField1\", this.get(\"_objStringsCandidateProfile\").getString(\"greeting\"));\n                this.set(\"_sLabelField2\", this.get(\"_objStringsCandidateProfile\").getString(\"updateEntity\"));\n                this.set(\"_sLabelField3\", this.get(\"_objStringsCandidateProfile\").getString(\"updateReason\"));\n                this.set(\"_sLabelField4\", this.get(\"_objStringsCandidateProfile\").getString(\"regards\"));\n                this.set(\"_sLabelField5\", this.get(\"_objStringsCandidateProfile\").getString(\"replyWith\"));\n\n                this.set(\"_bRequiredField1\", true);\n                this.set(\"_bRequiredField2\", true);\n                this.set(\"_bRequiredField3\", true);\n                this.set(\"_bRequiredField4\", true);\n                this.set(\"_bRequiredField5\", true);\n\n                Ember.run.next(function () {\n                    if (a24Core.isEmpty(_this8)) {\n                        return;\n                    }\n                    Ember.run.schedule(\"afterRender\", function () {\n                        _this8._funcSetInputStates(_this8.get(\"_objStringsCandidateProfile\").getString(\"hi\") + \" \" + _this8.get(\"_objBasicInfoRestService.objLastCandidateDetails.first_name\"), null, null, _this8.get(\"_objUserSession\").getUserFirstName());\n                    });\n                });\n            } else if (this.get(\"_sNotificationId\") === \"callback_requested_notification\") {\n                // prepopulate the regards input with user's name\n                Ember.run.next(function () {\n                    if (a24Core.isEmpty(_this8)) {\n                        return;\n                    }\n                    var sFullUsername = _this8.get(\"_objUserSession.objAuthData.identity.sFirstName\") + \" \" + _this8.get(\"_objUserSession.objAuthData.identity.sLastName\");\n                    Ember.run.schedule(\"afterRender\", function () {\n                        _this8.get(\"objChildren.regards\").setValueFromOutside(sFullUsername);\n                    });\n                });\n            } else if (this.get(\"_sNotificationId\") === \"candidate_reminder_on_action\") {\n                // prepopulate the regards input with user's name\n                Ember.run.next(function () {\n                    if (a24Core.isEmpty(_this8)) {\n                        return;\n                    }\n                    var sFullUsername = _this8.get(\"_objUserSession.objAuthData.identity.sFirstName\") + \" \" + _this8.get(\"_objUserSession.objAuthData.identity.sLastName\");\n                    Ember.run.schedule(\"afterRender\", function () {\n                        _this8.get(\"objChildren.regards\").setValueFromOutside(sFullUsername);\n                    });\n                });\n            }\n        },\n        _funcCheckRequiredFieldsReady: function _funcCheckRequiredFieldsReady(objInputData) {\n            if (this.get(\"_bShowReplyWithInput\") && a24Core.isEmpty(objInputData.reply_with)) {\n                return false;\n            }\n            if (this.get(\"_bShowReplyWithInputContact\") && a24Core.isEmpty(objInputData.reply_with_contact)) {\n                return false;\n            }\n            if (this.get(\"_bShowCampaignNameInput\") && a24Core.isEmpty(objInputData.campaign_name)) {\n                return false;\n            }\n            if (this.get(\"_bShowReplyBackWithInput\") && a24Core.isEmpty(objInputData.reply_back_with)) {\n                return false;\n            }\n            if (this.get(\"_bShowContentInput\") && a24Core.isEmpty(objInputData.content)) {\n                return false;\n            }\n            if (this.get(\"_bShowRegards\") && a24Core.isEmpty(objInputData.regards)) {\n                return false;\n            }\n            if (this.get(\"_bComplianceUpdateNotification\")) {\n                if (a24Core.isEmpty(objInputData.field1) || a24Core.isEmpty(objInputData.field2) || a24Core.isEmpty(objInputData.field3) || a24Core.isEmpty(objInputData.field4)) {\n                    return false;\n                }\n            }\n            return true;\n        },\n        sendNotification: function sendNotification() {\n            var _this9 = this;\n\n            if (!this.doFullValidation()) {\n                var objInputData = a24Core.removeNullsFromValue(Ember, this.getPlainFormValueObject());\n\n                if (!this._funcCheckRequiredFieldsReady(objInputData)) {\n                    this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsCandidateProfile\").getString(\"notificationSendUnexpectedError\"));\n                    return;\n                }\n\n                // call send notification service\n                this.set(\"_bSendNotificationPopupLoading\", true);\n\n                var sCandidateId = this.get(\"_sCandidateId\");\n                var sNotificationId = this.get(\"_sNotificationId\");\n\n                var objData = {\n                    type: sNotificationId,\n                    data: {}\n                };\n\n                if (this.get(\"_bShowReplyWithInput\")) {\n                    objData.data = {\n                        \"reply_with\": objInputData.reply_with\n                    };\n                }\n\n                if (this.get(\"_bShowReplyWithInputContact\")) {\n                    objData.data = {\n                        \"reply_with\": objInputData.reply_with_contact\n                    };\n                }\n\n                if (this.get(\"_bShowCampaignNameInput\") && this.get(\"_bShowReplyBackWithInput\")) {\n                    objData.data = {\n                        \"campaign_name\": objInputData.campaign_name,\n                        \"reply_back_with\": objInputData.reply_back_with\n                    };\n                }\n\n                if (this.get(\"_bShowContentInput\")) {\n                    var sTokenStringReplace = \"\";\n                    var sTitle = this.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"title\", this.get(\"_objBasicInfoRestService.objLastCandidateDetails.title\"));\n                    if ((this.get(\"_objBasicInfoRestService.objLastCandidateDetails.candidate_type_id\") === this.get(\"_objConstantsSSCore.UK_GP\") || this.get(\"_objBasicInfoRestService.objLastCandidateDetails.candidate_type_id\") === this.get(\"_objConstantsSSCore.UK_LOCUM\") || this.get(\"_objBasicInfoRestService.objLastCandidateDetails.candidate_type_id\") === this.get(\"_objConstantsSSCore.UK_LOCUM_ALLIED\") || this.get(\"_objBasicInfoRestService.objLastCandidateDetails.candidate_type_id\") === this.get(\"_objConstantsSSCore.ZA_LOCUM\") || this.get(\"_objBasicInfoRestService.objLastCandidateDetails.candidate_type_id\") === this.get(\"_objConstantsSSCore.ZA_LOCUM_ALLIED\")) && !a24Core.isEmpty(this.get(\"_objBasicInfoRestService.objLastCandidateDetails.title\"))) {\n                        sTokenStringReplace = sTitle + \" \" + this.get(\"_objBasicInfoRestService.objLastCandidateDetails.last_name\");\n                    } else {\n                        sTokenStringReplace = this.get(\"_objBasicInfoRestService.objLastCandidateDetails.first_name\");\n                    }\n\n                    if (this.get(\"_sNotificationId\") === \"candidate_reminder_on_action\") {\n                        var sContent = objInputData.content + \". \" + this.get(\"_objStringsCandidateProfile\").getString(\"pleaseReplyWith\") + \" \" + objInputData.reply_with;\n\n                        objData.data = {\n                            candidate_first_name: sTokenStringReplace,\n                            content: sContent,\n                            regards: objInputData.regards + \". \" + this.get(\"_objUserSession.objContextDetails.sName\") + \", \" + this.get(\"_objStringsCandidateProfile\").getString(\"aMemberOf\")\n                        };\n                    } else {\n                        objData.data = {\n                            candidate_first_name: sTokenStringReplace,\n                            content: objInputData.content,\n                            reply_with: objInputData.reply_with,\n                            regards: objInputData.regards + \". \" + this.get(\"_objUserSession.objContextDetails.sName\") + \", \" + this.get(\"_objStringsCandidateProfile\").getString(\"aMemberOf\")\n                        };\n                    }\n                }\n\n                if (this.get(\"_bComplianceUpdateNotification\")) {\n                    // {{greeting}} Please update {{update_entity}} as {{update_reason}}. Regards {{regards}}{{area}}\n                    var sRegards = objInputData.field4;\n                    if (!a24Core.isEmpty(objInputData.field5)) {\n                        sRegards = sRegards + \". \" + this.get(\"_objStringsCandidateProfile\").getString(\"pleaseReplyWith\") + \": \" + objInputData.field5;\n                    }\n                    objData.data = {\n                        greeting: objInputData.field1 + \".\",\n                        update_entity: objInputData.field2,\n                        update_reason: objInputData.field3,\n                        regards: sRegards\n                    };\n                }\n\n                this.get(\"_objRestAgencyCandidateNotification\").sendNotification(this, \"_objSendNotificationServiceCall\", sCandidateId, objData, function () {\n                    _this9.set(\"_bSendNotificationPopupLoading\", false);\n                    _this9.set(\"_bShowSendNotificationPopup\", false);\n                    _this9.set(\"_bShowSentMessagePopup\", true);\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode /*, sStatus, objErrorThrown, objError*/) {\n                    var sServerError = \"\";\n                    if (sCode === \"404\") {\n                        sServerError = _this9.get(\"_objStringsCandidateProfile\").getString(\"noNotificationForType\");\n                    } else {\n                        sServerError = _this9.get(\"_objStringsService\").getString(\"serverError\");\n                    }\n                    _this9.get(\"_objSnackbarService\").showSnackbarMessage(sServerError);\n\n                    _this9.set(\"_bSendNotificationPopupLoading\", false);\n                }));\n            }\n        },\n        onPopupNotificationCancel: function onPopupNotificationCancel() {\n            if (this.get(\"_bSendNotificationPopupLoading\")) {\n                return;\n            }\n\n            this.set(\"_bShowSendNotificationPopup\", false);\n        },\n        actions: {\n            onPopupResendConfirm: function onPopupResendConfirm() {\n                var _this10 = this;\n\n                /**\n                 * The user has confirmed that they wish to resend the invite\n                 */\n\n                // Set the popup into loading state\n                this.set(\"_bInvitePopupLoading\", true);\n\n                // Get the ids that are required for the service call\n                var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n                var sCandidateId = this.get(\"_sCandidateId\");\n                // Call the service to resend candidate invite\n                this.get(\"_objRestAgencyGroupCandidateInvite\").resendCandidateInvite(this, \"_objResendInviteServiceCall\", sAgencyGroupId, sCandidateId, function (objData) {\n                    // Show success message\n                    if (objData.status === \"invite_sent\") {\n                        _this10.set(\"_sResendInviteSuccessMessage\", _this10.get(\"_objStringsCandidateProfile\").getString(\"sendInviteEmailSuccess\"));\n                    } else if (objData.status === \"invite_resent\") {\n                        _this10.set(\"_sResendInviteSuccessMessage\", _this10.get(\"_objStringsCandidateProfile\").getString(\"resendInviteEmailSuccess\"));\n                    } else if (objData.status === \"verification_sent\") {\n                        _this10.set(\"_sResendInviteSuccessMessage\", _this10.get(\"_objStringsCandidateProfile\").getString(\"sendVerificationEmailSuccess\"));\n                    } else if (objData.status === \"nothing_sent\") {\n                        _this10.set(\"_sResendInviteSuccessMessage\", _this10.get(\"_objStringsCandidateProfile\").getString(\"noInviteVerificationEmailSent\"));\n                    }\n\n                    _this10.set(\"_bShowResendInvitePopup\", false);\n                    _this10.set(\"_bShowResendInviteSuccessPopup\", true);\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\"], function () {\n                    // Show failure message\n                    _this10.hidePopupAndShowSnackbar(_this10.get(\"_objStringsCandidateProfile\").getString(\"resendInviteEmailFailure\"));\n                    _this10.set(\"_bShowResendInvitePopup\", false);\n                }));\n            },\n            onPopupResendCancel: function onPopupResendCancel() {\n                // Hide the popup\n                this.set(\"_bShowResendInvitePopup\", false);\n            },\n            onPopupResendSuccessCancel: function onPopupResendSuccessCancel() {\n                // Hide the popup\n                this.set(\"_sResendInviteSuccessMessage\", null);\n                this.set(\"_bShowResendInviteSuccessPopup\", false);\n            },\n            onPopupSendNotificationCancel: function onPopupSendNotificationCancel() {\n                this.onPopupNotificationCancel();\n            },\n            onPopupUnsavedConfirm: function onPopupUnsavedConfirm() {\n                this.set(\"_bShowSendNotificationPopup\", false);\n                this.set(\"_bShowUnsavedData\", false);\n            },\n            onPopupSendNotificationPreviewSend: function onPopupSendNotificationPreviewSend() {\n                // call send notification service\n                this.sendNotification();\n            },\n            onNotificationPreviewPopupClose: function onNotificationPreviewPopupClose() {\n                this.set(\"_bShowNotificationPreviewPopup\", false);\n            },\n            onSentMessagePopupCancel: function onSentMessagePopupCancel() {\n                this.set(\"_bShowSentMessagePopup\", false);\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/page-compliance-rule-view\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/page-compliance-rule-view\"], function (exports, _didRenderChangesMixin, _pageComplianceRuleView) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _pageComplianceRuleView.default,\n        sContext: null,\n        classNames: [\"page-compliance-rule-view\"],\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n        _sIFrameUrl: null,\n        _objEntityActionPromise: null,\n        _objProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n\n        _objRestEntityAction: Ember.inject.service(\"rest-entity-action-compliance-rule\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n\n        _sComplianceRuleId: null,\n        _objReactViewPostData: null,\n\n        _arrConvert: null,\n        _arrEntityAction: null,\n        // query builder params\n        _bShowConditionBuilder: false,\n        _sSimpleTagsUrl: null,\n        _sSearchUrl: null,\n        _bForceReset: null,\n        _sWarningMessage: null,\n        _bBusy: false,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"_arrConvert\", []);\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n\n            this.get(\"_objTitleBarService\").setTitleBar(this.get(\"_objProfileStringsService\").getString(\"viewComplianceRule\"));\n\n            // get the complaince rule id\n            var objRouteParams = this.get(\"_objNavigation.objRouteParams\");\n            this._loadComplianceRule(objRouteParams);\n        },\n        _loadComplianceRule: function _loadComplianceRule(objRouteParams) {\n            var sPrevComplianceId = this.get(\"_sComplianceRuleId\");\n            var sRoute = \"index.agency-compliance-rule-view\";\n\n            if (this.get(\"sContext\") === this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\")) {\n                sRoute = \"agency-group.compliance-rule-view\";\n            }\n            if (!a24Core.isEmpty(objRouteParams) && !a24Core.isEmpty(objRouteParams[sRoute])) {\n                var objRouteParam = objRouteParams[sRoute];\n                this.set(\"_sComplianceRuleId\", objRouteParam[\"compliance_rule_id\"]);\n            }\n\n            if (sPrevComplianceId !== this.get(\"_sComplianceRuleId\")) {\n                if (this.get(\"sContext\") === this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\")) {\n                    this.set(\"_sSearchUrl\", this.get(\"_sRestApiBaseUrl\") + \"/v1/agency-group/\" + this.get(\"_objNavigation.sContextId\") + \"/advanced-search-v2/candidate\");\n                }\n\n                this.set(\"_objReactViewPostData\", {\n                    type: \"trigger_route\",\n                    data: {\n                        route: \"agency/complianceRules/viewPage\",\n                        data: {\n                            complianceRuleId: this.get(\"_sComplianceRuleId\")\n                        }\n                    }\n                });\n            }\n        },\n\n        _onRouteParamChange: Ember.observer(\"_objNavigation.objRouteParams\", function () {\n            var objRouteParams = this.get(\"_objNavigation.objRouteParams\");\n            this._loadComplianceRule(objRouteParams);\n        }),\n\n        _triggerQueue: Ember.observer(\"_arrConvert.@each\", function () {\n            var _this = this;\n\n            if (!this.get(\"_bBusy\") && !a24Core.isEmpty(this.get(\"_arrConvert\"))) {\n                this.set(\"_bBusy\", true);\n                var objConvert = this.get(\"_arrConvert\").objectAt(0);\n                this.set(\"_sSimpleTagsUrl\", null); // This is to reset the observe as the below set didnt want to fire the observer\n                if (a24Core.isEmpty(objConvert.sUrl)) {\n                    this.set(\"_bForceReset\", true);\n                }\n                Ember.run.next(function () {\n                    if (a24Core.isEmpty(_this)) {\n                        return;\n                    }\n                    _this.set(\"_sSimpleTagsUrl\", objConvert.sUrl);\n                });\n                this.set(\"_iRequestId\", objConvert.sRequestId);\n            }\n        }),\n        actions: {\n            onRecieveDataViewReact: function onRecieveDataViewReact(objData) {\n                var _this2 = this;\n\n                if (objData.type === \"complianceRuleConditionEdit\") {\n                    this.set(\"_sSimpleTagsUrl\", null); // This is to reset the observe as the below set didnt want to fire the observer\n                    this.set(\"_bShowConditionBuilder\", true);\n                    this.set(\"_bPostSimpleTagsOnly\", false);\n                    Ember.run.next(function () {\n                        if (a24Core.isEmpty(_this2)) {\n                            return;\n                        }\n                        if (!a24Core.isEmpty(objData.data.url)) {\n                            _this2.set(\"_sSimpleTagsUrl\", objData.data.url);\n                        } else {\n                            _this2.set(\"_sSimpleTagsUrl\", \"\");\n                        }\n                    });\n                    if (!a24Core.isEmpty(objData.data.requestId)) {\n                        this.set(\"_iRequestId\", objData.data.requestId);\n                    }\n                    if (objData.data.index > 0) {\n                        this.set(\"_sWarningMessage\", this.get(\"_objProfileStringsService\").getString(\"complianceRulesWarningMessage\"));\n                    } else {\n                        this.set(\"_sWarningMessage\", \"\");\n                    }\n                } else if (objData.type === \"function\") {\n                    if (objData.data.type === \"convertFilterUrl\") {\n                        this.set(\"_bPostSimpleTagsOnly\", true);\n\n                        this.get(\"_arrConvert\").pushObject({\n                            sUrl: objData.data.data,\n                            sRequestId: objData.data.requestId\n                        });\n                    }\n                } else if (objData.type === \"refresh\") {\n\n                    this.set(\"_objReactViewPostData\", {\n                        type: \"trigger_route\",\n                        data: {\n                            route: \"agency/complianceRules/viewPage\",\n                            data: {\n                                complianceRuleId: this.get(\"_sComplianceRuleId\")\n                            }\n                        }\n                    });\n                } else if (objData.type === \"navigate_within_context\") {\n                    Ember.run.later(this, function () {\n                        _this2.get(\"_objNavigation\").navigateWithinContext(\"compliance-rules\");\n                    }, 600);\n                }\n            },\n\n            // query builder events\n            onWillDoServiceCallConditions: function onWillDoServiceCallConditions(objSuccessCallback) {\n                if (!this.get(\"_bShowConditionBuilder\")) {\n                    objSuccessCallback([], null, {\n                        getResponseHeader: function getResponseHeader() {\n                            return \"0\";\n                        }\n                    });\n                    return true;\n                }\n            },\n\n            onSimpleTagsAction: function onSimpleTagsAction(arrTags) {\n                if (this.get(\"_bPostSimpleTagsOnly\")) {\n                    var objPostbody = {\n                        type: \"functionResponse\",\n                        data: {\n                            requestId: this.get(\"_iRequestId\"),\n                            data: arrTags\n                        }\n                    };\n\n                    this.set(\"_objReactViewPostData\", objPostbody);\n\n                    this.set(\"_bBusy\", false);\n                    if (!a24Core.isEmpty(this.get(\"_arrConvert\"))) {\n                        this.get(\"_arrConvert\").removeAt(0);\n                    }\n                }\n            },\n            onPopupCloseAction: function onPopupCloseAction() {\n                var objPostbody = {\n                    type: \"complianceRuleConditionFiltersData\"\n                };\n                this.set(\"_objReactViewPostData\", objPostbody);\n                this.set(\"_bShowConditionBuilder\", false);\n            },\n            onPopupDoneAction: function onPopupDoneAction(arrTags, sUrl, objQuery) {\n                var objJsonQuery = JSON.parse(objQuery);\n                var objPostbody = {\n                    type: \"complianceRuleConditionFiltersData\",\n                    data: {\n                        requestId: this.get(\"_iRequestId\"),\n                        url: sUrl,\n                        data: objJsonQuery.query,\n                        tags: arrTags\n                    }\n                };\n\n                this.set(\"_objReactViewPostData\", objPostbody);\n\n                this.set(\"_bShowConditionBuilder\", false);\n            },\n            onForceResetTriggered: function onForceResetTriggered() {\n                this.set(\"_bForceReset\", false);\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/page-compliance-rules\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/page-compliance-rules\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _didRenderChangesMixin, _pageComplianceRules, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _pageComplianceRules.default,\n        classNames: [\"page-compliance-rules\"],\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n        _sReactGatewayUrl: Ember.computed.readOnly(\"env.sReactGatewayUrl\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        objQueryParams: null,\n        objRestCandidateType: null,\n        objSavedSearchService: null,\n        sUrlBase: null,\n        sSavedSearchRef: null,\n        sDatagridRoute: null,\n        sContext: null,\n        sContractId: null,\n        sContractName: null,\n        sContractStatus: null,\n\n        bLinkedRulesView: false,\n        bRuleLoading: false,\n        arrLinkedRules: null,\n        arrComplianceContractEntityActions: null,\n        iVisibleActions: 0,\n\n        _bPageLoading: true,\n        _bAgencyGroupContext: false,\n        _bAllowEdit: false,\n        _bShowConditionBuilder: false,\n        _bBusy: false,\n        _bDatagridReady: false,\n        _bPostSimpleTagsOnly: false,\n        _bForceReset: false,\n        _bServiceCallsDone: false,\n        _bShowLoadFailedPopup: false,\n        _bServerError: false,\n        _bShowUnlinkError: false,\n        _bEntityActionPending: true,\n\n        _sSimpleTagsUrl: null,\n        _sSearchUrl: null,\n\n        _iRequestId: null,\n\n        _arrSelectedItems: null,\n        _arrConvert: null,\n        _arrEntityActions: null,\n        _arrCandidateTypes: null,\n\n        _objSelectedItem: null,\n        _objCandidateTypesResponse: null,\n        _objEntityActionPromise: null,\n        _objEntityActionSectionPromise: null,\n        _objQueuedPostData: null,\n\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objFabButtonService: Ember.inject.service(\"fab-button\"),\n        _objProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objEnumsStaffshiftCore: Ember.inject.service(\"a24-enums-staffshift-core\"),\n        _objChatterIframeComService: Ember.inject.service(\"chatter-iframe-com\"),\n\n        _objRestEntityAction: Ember.inject.service(\"rest-entity-action-compliance-rule\"),\n\n        // These are for the react popups\n        _sIFrameUrl: null,\n        _bPopupLoading: true,\n        _bShowManageComplianceRules: false,\n        _objReactPopupPostData: null,\n\n        _sIFrameViewUrl: null,\n        _bPopupViewLoading: true,\n        _bShowViewComplianceRules: false,\n        _objReactViewPopupPostData: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"_arrConvert\", []);\n\n            this.set(\"_sIFrameUrl\", this.get(\"_sReactGatewayUrl\"));\n            this.set(\"_sIFrameViewUrl\", this.get(\"_sReactGatewayUrl\"));\n\n            this.get(\"_objTitleBarService\").setTitleBar(this.get(\"_objProfileStringsService\").getString(\"complianceRules\"));\n\n            if (this.get(\"sContext\") === this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\")) {\n                this.set(\"_bAgencyGroupContext\", true);\n                this.set(\"_sSearchUrl\", this.get(\"_sRestApiBaseUrl\") + \"/v1/agency-group/\" + this.get(\"_objNavigation.sContextId\") + \"/advanced-search-v2/candidate\");\n            } else {\n                this.set(\"_bAgencyGroupContext\", false);\n                this.set(\"_sSearchUrl\", this.get(\"_sRestApiBaseUrl\") + \"/v1/agency/\" + this.get(\"_objNavigation.sContextId\") + \"/advanced-search/candidate\");\n            }\n\n            this.doServiceCalls();\n        },\n        _onLinkedRules: Ember.observer(\"_bServiceCallsDone\", \"arrLinkedRules\", \"arrComplianceContractEntityActions\", function () {\n            Ember.run.once(this, \"linkedRulesActions\");\n        }),\n\n        linkedRulesActions: function linkedRulesActions() {\n            var _this = this;\n\n            if (this.get(\"bLinkedRulesView\") && this.get(\"_bServiceCallsDone\")) {\n                if (this.get(\"arrLinkedRules\") !== null && this.get(\"arrComplianceContractEntityActions\") !== null) {\n                    this._setDatagridActions();\n                    this.set(\"_bPageLoading\", true);\n                    Ember.run.next(function () {\n                        if (a24Core.isEmpty(_this)) {\n                            return;\n                        }\n                        Ember.run.schedule(\"afterRender\", function () {\n                            _this.set(\"_bPageLoading\", false);\n                        });\n                    });\n                }\n            }\n        },\n        _doEntityActionCall: function _doEntityActionCall(arrRuleIds) {\n            // Sets the loading state on the actions\n            this.set(\"_objDatagridConfig.arrSingleItemSelectActions\", Ember.copy(this.get(\"_arrLoadingActions\"), true));\n\n            if (!a24Core.isEmpty(arrRuleIds)) {\n                var objQuery = {\n                    entity_id: { mValue: arrRuleIds.join(\",\") }\n                };\n\n                var objPromiseEntityActions = this.get(\"_objRestEntityAction\").getComplianceRulesEntityActions(this, \"_objEntityActionPromise\", objQuery, function () {\n                    // Handled by RSVP\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"500\", \"502\", \"503\", \"504\"], function () /*sCode, sStatus, objErrorThrown, objError*/{}));\n\n                var objPromiseList = {\n                    _objEntityActions: objPromiseEntityActions\n                };\n\n                var arrRequiredResponses = [\"_objEntityActions\"];\n\n                var objThis = this;\n\n                Ember.copy(a24RSVP).configure(this, objPromiseList, [{\n                    arrRequiredResponses: arrRequiredResponses,\n                    funcOnComplete: function funcOnComplete(objResponses) {\n                        if (!a24Core.isEmpty(objResponses._objEntityActions) && !a24Core.isEmpty(objResponses._objEntityActions.objResponse)) {\n                            objThis.set(\"_bEntityActionPending\", false);\n                            objThis.set(\"_arrEntityActions\", objResponses._objEntityActions.objResponse);\n                        }\n                        objThis._setDatagridActions();\n                    }\n                }]);\n            }\n        },\n        _isLinked: function _isLinked(arrLinkedRules, sCurrentRuleId) {\n            var objRuleLinked = null;\n            if (!a24Core.isEmpty(arrLinkedRules)) {\n                objRuleLinked = arrLinkedRules.find(function (sLinkedRuleId) {\n                    return sLinkedRuleId === sCurrentRuleId;\n                });\n            }\n\n            var bLinkedRule = false;\n            if (!a24Core.isEmpty(objRuleLinked)) {\n                bLinkedRule = true;\n            }\n            return bLinkedRule;\n        },\n        pendingEntityActions: Ember.observer(\"_arrEntityActions\", function () {\n            var _this2 = this;\n\n            if (!a24Core.isEmpty(this.get(\"_arrEntityActions\")) && !a24Core.isEmpty(this.get(\"_objQueuedPostData\"))) {\n                var arrEntityActions = this.get(\"_arrEntityActions\");\n                var objPostData = this.get(\"_objQueuedPostData\");\n                var arrEntityAction = [arrEntityActions.find(function (objItem) {\n                    return objItem.entity_id === objPostData.complianceRuleId;\n                })];\n                objPostData.pendingData = { entityActionsData: false };\n                objPostData.entityActionsData = arrEntityAction;\n                Ember.run.next(function () {\n                    if (a24Core.isEmpty(_this2)) {\n                        return;\n                    }\n                    Ember.run.schedule(\"afterRender\", function () {\n                        if (!_this2.get(\"_bEntityActionPending\") && _this2.get(\"_bShowViewComplianceRules\")) {\n                            _this2.set(\"_objReactViewPopupPostData\", {\n                                type: \"update_trigger_route\",\n                                data: {\n                                    route: \"agency/complianceRules/viewPopup\",\n                                    data: objPostData\n                                }\n                            });\n                        }\n                    });\n                });\n            }\n        }),\n        _viewComplianceRule: function _viewComplianceRule(objSelectedItem) {\n            var bDelete = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n            this.set(\"_bShowViewComplianceRules\", true);\n            var arrEntityActions = this.get(\"_arrEntityActions\");\n            var arrEntityAction = null;\n            var arrRowConditions = objSelectedItem.condition;\n            var arrRuleApplicableTypes = [];\n            for (var i = 0; i < arrRowConditions.length; i++) {\n                arrRuleApplicableTypes = arrRuleApplicableTypes.concat(arrRowConditions[i].applicable_position_types);\n            }\n            if (!a24Core.isEmpty(arrEntityActions)) {\n                arrEntityAction = [arrEntityActions.find(function (objItem) {\n                    return objItem.entity_id === objSelectedItem._id;\n                })];\n            }\n            var objPostData = {\n                complianceRuleId: objSelectedItem._id,\n                complianceRuleName: objSelectedItem.name,\n                complianceContractId: this.get(\"sContractId\"),\n                complianceContractName: this.get(\"sContractName\"),\n                ruleApplicableTypes: arrRuleApplicableTypes,\n                agencyCandidateTypes: this.get(\"_arrCandidateTypes\"),\n                complianceContractStatus: this.get(\"sContractStatus\"),\n                isLinked: this._isLinked(this.get(\"arrLinkedRules\"), objSelectedItem._id),\n                openDelete: bDelete,\n                complianceRuleData: objSelectedItem,\n                entityActionsData: [],\n                candidateTypesData: this.get(\"_arrCandidateTypes\"),\n                contractEntityActionsData: this.get(\"arrComplianceContractEntityActions\")\n            };\n\n            if (this.get(\"_bAgencyGroupContext\")) {\n                if (this.get(\"_bEntityActionPending\")) {\n                    objPostData.pendingData = { entityActionsData: true };\n                } else {\n                    objPostData.entityActionsData = arrEntityAction;\n                }\n            }\n            this.set(\"_objQueuedPostData\", Ember.copy(objPostData, true));\n\n            this.set(\"_objReactViewPopupPostData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"agency/complianceRules/viewPopup\",\n                    data: objPostData\n                }\n            });\n        },\n        _setUnsetDefaultRule: function _setUnsetDefaultRule(objSelectedItem, bIsSet) {\n            this.set(\"_bShowViewComplianceRules\", true);\n\n            var sRoute = bIsSet ? \"setAsDefaultPopup\" : \"unSetAsDefaultPopup\";\n\n            this.set(\"_objReactViewPopupPostData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"agency/complianceRules/\" + sRoute,\n                    data: {\n                        complianceRuleId: objSelectedItem._id,\n                        complianceRuleName: objSelectedItem.name\n                    }\n                }\n            });\n        },\n        _setDatagridActions: function _setDatagridActions() {\n            var _this3 = this;\n\n            var objThis = this;\n\n            var arrSingleActions = [{\n                sTitle: this.get(\"_objProfileStringsService\").getString(\"view\"),\n                sIcon: \"visibility\",\n                executeCardAction: function executeCardAction() {\n                    objThis._viewComplianceRule(objThis.get(\"_arrSelectedItems\")[0]);\n                }\n            }];\n\n            if (!a24Core.isEmpty(this.get(\"_arrEntityActions\"))) {\n                arrSingleActions.push({\n                    sTitle: this.get(\"_objStringsService\").getString(\"edit\"),\n                    sIcon: \"edit\",\n                    executeCardAction: function executeCardAction() {\n                        objThis.set(\"_bShowManageComplianceRules\", true);\n                        objThis.set(\"_objReactPopupPostData\", {\n                            type: \"trigger_route\",\n                            data: {\n                                route: \"agency/complianceRules/managePopup\",\n                                data: {\n                                    complianceRuleId: objThis.get(\"_arrSelectedItems\")[0]._id,\n                                    complianceRuleData: objThis.get(\"_arrSelectedItems\")[0]\n                                }\n                            }\n                        });\n                    },\n                    funcFilterFunc: function funcFilterFunc(arrSelectedItems) {\n                        var arrEntityActions = _this3.get(\"_arrEntityActions\");\n                        for (var i = 0; i < arrEntityActions.length; i++) {\n                            if (arrEntityActions[i].entity_id === arrSelectedItems[0]._id) {\n                                for (var l = 0; l < arrEntityActions[i].actions.length; l++) {\n                                    if (arrEntityActions[i].actions[l].action === \"update\" && arrEntityActions[i].actions[l].allowed) {\n                                        return true;\n                                    }\n                                }\n                            }\n                        }\n                        return false;\n                    }\n                });\n                arrSingleActions.push({\n                    sTitle: this.get(\"_objStringsService\").getString(\"remove\"),\n                    sIcon: \"delete\",\n                    executeCardAction: function executeCardAction() {\n                        objThis._viewComplianceRule(objThis.get(\"_arrSelectedItems\")[0], true);\n                    },\n                    funcFilterFunc: function funcFilterFunc(arrSelectedItems) {\n                        var arrEntityActions = _this3.get(\"_arrEntityActions\");\n                        for (var i = 0; i < arrEntityActions.length; i++) {\n                            if (arrEntityActions[i].entity_id === arrSelectedItems[0]._id) {\n                                for (var l = 0; l < arrEntityActions[i].actions.length; l++) {\n                                    if (arrEntityActions[i].actions[l].action === \"delete\" && (arrEntityActions[i].actions[l].allowed || arrEntityActions[i].actions[l].reason_code === \"COMPLIANCE_RULE_LINKED_TO_CONTRACT\")) {\n                                        return true;\n                                    }\n                                }\n                            }\n                        }\n                        return false;\n                    }\n                });\n                arrSingleActions.push({\n                    sTitle: this.get(\"_objProfileStringsService\").getString(\"setAsDefault\"),\n                    sIcon: \"label\",\n                    executeCardAction: function executeCardAction() {\n                        objThis._setUnsetDefaultRule(objThis.get(\"_arrSelectedItems\")[0], true);\n                    },\n                    funcFilterFunc: function funcFilterFunc(arrSelectedItems) {\n                        var arrEntityActions = _this3.get(\"_arrEntityActions\");\n                        if (!arrSelectedItems[0].is_default) {\n                            for (var i = 0; i < arrEntityActions.length; i++) {\n                                if (arrEntityActions[i].entity_id === arrSelectedItems[0]._id) {\n                                    for (var l = 0; l < arrEntityActions[i].actions.length; l++) {\n                                        if (arrEntityActions[i].actions[l].action === \"default\" && arrEntityActions[i].actions[l].allowed) {\n                                            return true;\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                        return false;\n                    }\n                });\n                arrSingleActions.push({\n                    sTitle: this.get(\"_objProfileStringsService\").getString(\"unSetAsDefault\"),\n                    sIconSvg: Ember.String.htmlSafe(this.get(\"_objEnumsStaffshiftCore\").getMaterialSvgIcon(\"label_off\")),\n                    executeCardAction: function executeCardAction() {\n                        objThis._setUnsetDefaultRule(objThis.get(\"_arrSelectedItems\")[0], false);\n                    },\n                    funcFilterFunc: function funcFilterFunc(arrSelectedItems) {\n                        var arrEntityActions = _this3.get(\"_arrEntityActions\");\n                        if (arrSelectedItems[0].is_default) {\n                            for (var i = 0; i < arrEntityActions.length; i++) {\n                                if (arrEntityActions[i].entity_id === arrSelectedItems[0]._id) {\n                                    for (var l = 0; l < arrEntityActions[i].actions.length; l++) {\n                                        if (arrEntityActions[i].actions[l].action === \"undefault\" && arrEntityActions[i].actions[l].allowed) {\n                                            return true;\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                        return false;\n                    }\n                });\n            }\n\n            if (this.get(\"bLinkedRulesView\") && !a24Core.isEmpty(this.get(\"arrComplianceContractEntityActions\"))) {\n\n                var arrExtraActions = [{\n                    \"sIcon\": \"edit\",\n                    \"sIconClass\": \"a24-grey-text-darken-1\",\n                    \"sTitle\": objThis.get(\"_objProfileStringsService\").getString(\"linkUnlinkRule\"),\n                    executeCardAction: function executeCardAction() {\n                        var objQeuryUpdate = Ember.copy(_this3.get(\"objQueryParams\"), true);\n                        objQeuryUpdate._id.sValue = \"\";\n                        _this3.set(\"objQueryParams\", objQeuryUpdate);\n                    }\n                }];\n\n                this.set(\"_arrExtraActions\", arrExtraActions);\n\n                arrSingleActions.push({\n                    sTitle: objThis.get(\"_objProfileStringsService\").getString(\"linkRule\"),\n                    sIconFa: \"fa-link\",\n                    executeCardAction: function executeCardAction() {\n                        objThis.set(\"_bShowViewComplianceRules\", true);\n                        var arrRowConditions = objThis.get(\"_arrSelectedItems\")[0].condition;\n                        var arrRuleApplicableTypes = [];\n                        for (var i = 0; i < arrRowConditions.length; i++) {\n                            arrRuleApplicableTypes = arrRuleApplicableTypes.concat(arrRowConditions[i].applicable_position_types);\n                        }\n                        objThis.set(\"_objReactViewPopupPostData\", {\n                            type: \"trigger_route\",\n                            data: {\n                                route: \"agency/complianceContracts/linkComplianceRulePopup\",\n                                data: {\n                                    ruleName: objThis.get(\"_arrSelectedItems\")[0].name,\n                                    ruleId: objThis.get(\"_arrSelectedItems\")[0]._id,\n                                    contractId: objThis.get(\"sContractId\"),\n                                    contractName: objThis.get(\"sContractName\"),\n                                    ruleApplicableTypes: arrRuleApplicableTypes,\n                                    agencyCandidateTypes: objThis.get(\"_arrCandidateTypes\"),\n                                    status: objThis.get(\"sContractStatus\")\n                                }\n                            }\n                        });\n                    },\n                    funcFilterFunc: function funcFilterFunc(arrSelectedItems) {\n                        var arrEntityActions = objThis.get(\"arrComplianceContractEntityActions\");\n                        var sRuleLinkedId = objThis.get(\"arrLinkedRules\").find(function (sLinkedRuleId) {\n                            return arrSelectedItems[0]._id === sLinkedRuleId;\n                        });\n                        if (a24Core.isEmpty(sRuleLinkedId)) {\n                            for (var l = 0; l < arrEntityActions[0].actions.length; l++) {\n                                if (arrEntityActions[0].actions[l].action === \"add_rule\" && arrEntityActions[0].actions[l].allowed) {\n                                    return true;\n                                }\n                            }\n                        }\n                        return false;\n                    }\n                });\n                arrSingleActions.push({\n                    sTitle: objThis.get(\"_objProfileStringsService\").getString(\"unlinkRule\"),\n                    sIconFa: \"fa-chain-broken\",\n                    executeCardAction: function executeCardAction() {\n                        var objItem = objThis.get(\"_arrSelectedItems\")[0];\n                        if (objItem.is_default) {\n                            objThis.set(\"_bShowUnlinkError\", true);\n                        } else {\n                            objThis.set(\"_bShowViewComplianceRules\", true);\n                            objThis.set(\"_objReactViewPopupPostData\", {\n                                type: \"trigger_route\",\n                                data: {\n                                    route: \"agency/complianceContracts/unlinkComplianceRulePopup\",\n                                    data: {\n                                        complianceRuleName: objItem.name,\n                                        complianceRuleId: objItem._id,\n                                        complianceContractId: objThis.get(\"sContractId\"),\n                                        complianceContractName: objThis.get(\"sContractName\"),\n                                        complianceContractStatus: objThis.get(\"sContractStatus\")\n                                    }\n                                }\n                            });\n                        }\n                    },\n                    funcFilterFunc: function funcFilterFunc(arrSelectedItems) {\n                        var arrEntityActions = objThis.get(\"arrComplianceContractEntityActions\");\n                        var sRuleLinkedId = objThis.get(\"arrLinkedRules\").find(function (sLinkedRuleId) {\n                            return arrSelectedItems[0]._id === sLinkedRuleId;\n                        });\n                        if (!a24Core.isEmpty(sRuleLinkedId)) {\n                            for (var l = 0; l < arrEntityActions[0].actions.length; l++) {\n                                if (arrEntityActions[0].actions[l].action === \"remove_rule\" && arrEntityActions[0].actions[l].allowed) {\n                                    return true;\n                                }\n                            }\n                        }\n                        return false;\n                    }\n                });\n            }\n\n            this.set(\"_objDatagridConfig.arrSingleItemSelectActions\", arrSingleActions);\n        },\n\n        _handleServerErrors: function _handleServerErrors() {\n            this.set(\"_bServerError\", true);\n            this.set(\"_bShowLoadFailedPopup\", true);\n        },\n\n        doServiceCalls: function doServiceCalls() {\n            var _this4 = this;\n\n            this.set(\"_bPageLoading\", true);\n\n            var objPromiseCandidateTypes = this.get(\"objRestCandidateType\").getCandidateTypes(this, \"_objCandidateTypesResponse\", this.get(\"_objUserSession\").getUserContextReference().mId, function () {\n                // Handled by RSVP\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"500\", \"502\", \"503\", \"504\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                _this4._handleServerErrors();\n            }));\n\n            var objPromiseEntityActionSection = this.get(\"_objRestEntityAction\").getComplianceRulesEntityActionSection(this, \"_objEntityActionSectionPromise\", {}, function () {\n                // Handled by RSVP\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"500\", \"502\", \"503\", \"504\"], function () /*sCode, sStatus, objErrorThrown, objError*/{}));\n\n            var objPromiseList = {\n                _objCandidateTypes: objPromiseCandidateTypes,\n                _objEntityActionSection: objPromiseEntityActionSection\n            };\n\n            var arrRequiredResponses = [\"_objCandidateTypes\", \"_objEntityActionSection\"];\n\n            var objThis = this;\n\n            Ember.copy(a24RSVP).configure(this, objPromiseList, [{\n                arrRequiredResponses: arrRequiredResponses,\n                funcOnComplete: function funcOnComplete(objResponses) {\n                    objThis.set(\"_arrCandidateTypes\", []);\n                    if (!a24Core.isEmpty(objResponses._objCandidateTypes) && !a24Core.isEmpty(objResponses._objCandidateTypes.objResponse)) {\n                        objThis.set(\"_arrCandidateTypes\", objResponses._objCandidateTypes.objResponse);\n                    }\n\n                    if (!a24Core.isEmpty(objResponses._objEntityActionSection) && !a24Core.isEmpty(objResponses._objEntityActionSection.objResponse)) {\n                        var arrSectionResponse = objResponses._objEntityActionSection.objResponse;\n                        for (var i = 0; i < arrSectionResponse.length; i++) {\n                            if (arrSectionResponse[i].entity_type === \"compliance-rule\") {\n                                for (var l = 0; l < arrSectionResponse[i].actions.length; l++) {\n                                    if (arrSectionResponse[i].actions[l].action === \"create\" && arrSectionResponse[i].actions[l].allowed) {\n\n                                        objThis.get(\"_objFabButtonService\").showFabButton(function () {\n                                            objThis.set(\"_bShowManageComplianceRules\", true);\n                                            objThis.set(\"_objReactPopupPostData\", {\n                                                type: \"trigger_route\",\n                                                data: {\n                                                    route: \"agency/complianceRules/managePopup\"\n                                                }\n                                            });\n                                        });\n                                    }\n                                }\n                            }\n                        }\n                    }\n\n                    objThis._setupPageConfig(objThis.get(\"_arrCandidateTypes\"));\n                    if (!objThis.get(\"_bServerError\")) {\n                        objThis.set(\"_bServiceCallsDone\", true);\n                    } else {\n                        objThis.set(\"_bServerError\", false);\n                    }\n                }\n            }]);\n        },\n\n        _setupPageConfig: function _setupPageConfig(arrCandidateTypes) {\n            var _this5 = this;\n\n            var arrYes = [{\n                sTitle: this.get(\"_objStringsService\").getString(\"yes\"),\n                sValue: this.get(\"_objStringsService\").getString(\"yes\")\n            }];\n\n            var arrCandidateTypesDropdown = [];\n            for (var i = 0; i < arrCandidateTypes.length; i++) {\n                arrCandidateTypesDropdown.push({\n                    sTitle: arrCandidateTypes[i].name,\n                    sValue: arrCandidateTypes[i]._id\n                });\n            }\n            this.set(\"_arrCandidateTypesDropdown\", arrCandidateTypesDropdown);\n\n            var objThis = this;\n\n            var arrSingleActions = [{\n                sTitle: this.get(\"_objProfileStringsService\").getString(\"view\"),\n                sIcon: \"visibility\",\n                executeCardAction: function executeCardAction() {\n                    objThis._viewComplianceRule(objThis.get(\"_arrSelectedItems\")[0]);\n                }\n            }];\n\n            if (this.get(\"_bAgencyGroupContext\")) {\n                arrSingleActions.push({\n                    bLoader: true\n                });\n            }\n            this.set(\"_arrLoadingActions\", arrSingleActions);\n\n            var arrHeaderConfig = [{\n                iUniqueColNum: 1,\n                sTitle: this.get(\"_objStringsService\").getString(\"name\"),\n                sProperty: \"name\",\n                sFilterType: \"text\",\n                bText: true,\n                bHideEmptyCheck: true,\n                iWidth: 20,\n                bIsClickable: true\n            }, {\n                iUniqueColNum: 2,\n                sTitle: this.get(\"_objStringsService\").getString(\"description\"),\n                sProperty: \"description\",\n                sFilterType: \"text\",\n                bText: true,\n                iWidth: this.get(\"bLinkedRulesView\") ? 30 : 40,\n                bStopColumnSort: true,\n                bStopFiltering: true\n            }, {\n                iUniqueColNum: 3,\n                sTitle: this.get(\"_objProfileStringsService\").getString(\"candidateType\"),\n                sProperty: \"position_type\",\n                sFilterType: \"dropdownMulti\",\n                bMapping: true,\n                bHideEmptyCheck: true,\n                arrMappingData: arrCandidateTypesDropdown,\n                bSilent: true,\n                iWidth: 10\n            }, {\n                bCustom: true,\n                iUniqueColNum: 4,\n                sTitle: this.get(\"_objProfileStringsService\").getString(\"candidateType\"),\n                sProperty: \"condition\",\n                sFilterType: \"text\",\n                bStopColumnSort: true,\n                bStopFiltering: true,\n                iWidth: 30,\n                funcTableCustomVal: function funcTableCustomVal(objHeader, objRowData) {\n                    var sCandidateTypes = \"\";\n                    var arrCandidateTypesRow = [];\n                    var arrCandidateTypeDisplay = [];\n                    if (!a24Core.isEmpty(objRowData.condition)) {\n                        var arrRowConditions = objRowData.condition;\n                        for (var i = 0; i < arrRowConditions.length; i++) {\n                            arrCandidateTypesRow = arrCandidateTypesRow.concat(arrRowConditions[i].applicable_position_types);\n                        }\n\n                        var arrCandidateTypesFiltered = arrCandidateTypesRow.filter(function (value, index, self) {\n                            return self.indexOf(value) === index;\n                        });\n                        var bUnsupported = false;\n                        for (var l = 0; l < arrCandidateTypesFiltered.length; l++) {\n                            var objCandidateType = arrCandidateTypes.find(function (objItem) {\n                                return objItem._id === arrCandidateTypesFiltered[l];\n                            });\n                            if (!a24Core.isEmpty(objCandidateType)) {\n                                arrCandidateTypeDisplay.push(objCandidateType.name);\n                            } else {\n                                bUnsupported = true;\n                            }\n                        }\n\n                        if (bUnsupported) {\n                            arrCandidateTypeDisplay.push(\"Others\");\n                        }\n                        sCandidateTypes = arrCandidateTypeDisplay.join(\", \");\n                    }\n                    return Ember.String.htmlSafe(\"<span title=\\\"\" + sCandidateTypes + \"\\\">\" + sCandidateTypes + \"</span>\");\n                }\n            }, {\n                iUniqueColNum: 6,\n                sTitle: \"Default\",\n                sProperty: \"is_default\",\n                sFilterType: \"bool\",\n                bHideEmptyCheck: true,\n                bStopColumnSort: true,\n                bBool: true,\n                arrMappingData: [{\n                    sValue: \"true\",\n                    sTitle: this.get(\"_objStringsService\").getString(\"yes\")\n                }, {\n                    sValue: \"false\",\n                    sTitle: this.get(\"_objStringsService\").getString(\"no\")\n                }],\n                iWidth: 10,\n                iMinWidth: 100\n            }];\n\n            if (this.get(\"bLinkedRulesView\")) {\n                arrHeaderConfig.push({\n                    bCustom: true,\n                    iUniqueColNum: 5,\n                    sTitle: \"Linked\",\n                    sProperty: \"_id\",\n                    bStopColumnSort: true,\n                    sFilterType: \"dropdown\",\n                    bMapping: true,\n                    bHideEmptyCheck: true,\n                    arrMappingData: arrYes,\n                    funcTableCustomVal: function funcTableCustomVal(objHeader, objRowData) {\n                        var objRuleLinked = _this5.get(\"arrLinkedRules\").find(function (sLinkedRuleId) {\n                            return sLinkedRuleId === objRowData._id;\n                        });\n                        if (!a24Core.isEmpty(objRuleLinked)) {\n                            return Ember.String.htmlSafe(\"<i class=\\\"material-icons\\\">check</i>\");\n                        }\n                        return Ember.String.htmlSafe(\"&nbsp;\");\n                    },\n                    funcFilterParseQueryValue: function funcFilterParseQueryValue(objQueryObjectParam) {\n                        if (objQueryObjectParam.mValue === \"Yes\") {\n                            if (!a24Core.isEmpty(_this5.get(\"arrLinkedRules\"))) {\n                                objQueryObjectParam.mValue = _this5.get(\"arrLinkedRules\").join(\"|\");\n                            } else {\n                                objQueryObjectParam.mValue = \"\";\n                            }\n                            objQueryObjectParam.bEncode = true;\n                            objQueryObjectParam.bDelimited = true;\n                            return objQueryObjectParam;\n                        }\n                    },\n                    iWidth: 10,\n                    iMinWidth: 100\n                });\n            }\n\n            this.set(\"_objDatagridConfig\", {\n                sDatagridHeader: objThis.get(\"_objProfileStringsService\").getString(\"complianceRules\"),\n                iMaxHeight: 40 * 27,\n                bSelectColumn: true,\n                bEmitSelectRowEvent: true,\n                bHasReloadButton: true,\n                bEmitDidDoServiceCall: true,\n                bEmitWillDoServiceCall: true,\n                arrSingleItemSelectActions: arrSingleActions,\n                arrMultiItemSelectActions: [],\n                objSavedSearchService: !this.get(\"bLinkedRulesView\") ? this.get(\"objSavedSearchService\") : null,\n                sSavedSearchRef: !this.get(\"bLinkedRulesView\") ? this.get(\"sSavedSearchRef\") : null,\n                sDatagridRoute: !this.get(\"bLinkedRulesView\") ? this.get(\"sDatagridRoute\") : null,\n                arrHeaderConfig: arrHeaderConfig\n            });\n\n            if (!objThis.get(\"bLinkedRulesView\")) {\n                this.set(\"_bPageLoading\", false);\n            }\n        },\n        _onItemsSelect: function _onItemsSelect(arrSelectedItems) {\n            if (!a24Core.isEmpty(arrSelectedItems) && arrSelectedItems.length === 1) {\n                this.set(\"_objSelectedItem\", arrSelectedItems[0]);\n            } else {\n                this.set(\"_objSelectedItem\", null);\n            }\n            // Set the selected items\n            this.set(\"_arrSelectedItems\", arrSelectedItems);\n        },\n\n        _triggerQueue: Ember.observer(\"_arrConvert.@each\", function () {\n            var _this6 = this;\n\n            if (this.get(\"_bDatagridReady\") && !this.get(\"_bBusy\") && !a24Core.isEmpty(this.get(\"_arrConvert\"))) {\n                this.set(\"_bBusy\", true);\n                var objConvert = this.get(\"_arrConvert\").objectAt(0);\n                this.set(\"_sSimpleTagsUrl\", null); // This is to reset the observe as the below set didnt want to fire the observer\n                if (a24Core.isEmpty(objConvert.sUrl)) {\n                    this.set(\"_bForceReset\", true);\n                }\n                Ember.run.next(function () {\n                    if (a24Core.isEmpty(_this6)) {\n                        return;\n                    }\n                    _this6.set(\"_sSimpleTagsUrl\", objConvert.sUrl);\n                });\n                this.set(\"_iRequestId\", objConvert.sRequestId);\n            }\n        }),\n\n        actions: {\n            onForceResetTriggered: function onForceResetTriggered() {\n                this.set(\"_bForceReset\", false);\n            },\n            cardDatagridTableNoneSelected: function cardDatagridTableNoneSelected() {\n                this._onItemsSelect(null);\n            },\n            cardDatagridTableOneSelected: function cardDatagridTableOneSelected(arrSelectedItems) {\n                this._onItemsSelect(arrSelectedItems);\n            },\n            cardDatagridTableMultiSelected: function cardDatagridTableMultiSelected(arrSelectedItems) {\n                this._onItemsSelect(arrSelectedItems);\n            },\n            cardDatagridTableCell: function cardDatagridTableCell(sColumnName, objRowData) {\n                if (sColumnName === \"name\") {\n                    this._viewComplianceRule(objRowData);\n                }\n            },\n            onDidDoServiceCall: function onDidDoServiceCall(arrTableData /*, jqXHR, objPOSTBody*/) {\n                var arrRuleIds = [];\n                for (var i = 0; i < arrTableData.length; i++) {\n                    arrRuleIds.push(arrTableData[i]._id);\n                }\n                if (this.get(\"_bAgencyGroupContext\")) {\n                    this._doEntityActionCall(arrRuleIds);\n                }\n            },\n            onWillDoServiceCall: function onWillDoServiceCall(arrTableData, objUrlConstantPart, objFilterParamObject, objTableParamObject, iPage, iPerPage, objSuccessCallback\n            // objFailure\n            ) {\n                this.set(\"_bEntityActionPending\", true);\n                if (this.get(\"bLinkedRulesView\")) {\n                    if (!a24Core.isEmpty(objFilterParamObject._id) && a24Core.isEmpty(this.get(\"arrLinkedRules\"))) {\n                        // We are just calling the success with empty results since it not worth quering the backend if we know\n                        // that result set to be empty. Also we are doing this since the query will be mValue=\"\" which will\n                        // remove the query from the api call so it will return everything regardless\n                        objSuccessCallback([], null, {\n                            getResponseHeader: function getResponseHeader() {\n                                return \"0\";\n                            }\n                        });\n                        return true;\n                    }\n                }\n            },\n            onRecieveDataReactPopup: function onRecieveDataReactPopup(objData) {\n                var _this7 = this;\n\n                if (objData.type === \"app_ready\") {\n                    this.set(\"_bPopupLoading\", false);\n                } else if (objData.type === \"close\") {\n                    this.set(\"_bShowManageComplianceRules\", false);\n                } else if (objData.type === \"complianceRuleConditionEdit\") {\n                    this.set(\"_sSimpleTagsUrl\", null); // This is to reset the observe as the below set didnt want to fire the observer\n                    this.set(\"_bShowConditionBuilder\", true);\n                    this.set(\"_bPostSimpleTagsOnly\", false);\n                    Ember.run.next(function () {\n                        if (a24Core.isEmpty(_this7)) {\n                            return;\n                        }\n                        if (!a24Core.isEmpty(objData.data.url)) {\n                            _this7.set(\"_sSimpleTagsUrl\", objData.data.url);\n                        } else {\n                            _this7.set(\"_sSimpleTagsUrl\", \"\");\n                        }\n                    });\n                    if (!a24Core.isEmpty(objData.data.requestId)) {\n                        this.set(\"_iRequestId\", objData.data.requestId);\n                    }\n                    if (objData.data.index > 0) {\n                        this.set(\"_sWarningMessage\", this.get(\"_objProfileStringsService\").getString(\"complianceRulesWarningMessage\"));\n                    } else {\n                        this.set(\"_sWarningMessage\", \"\");\n                    }\n                } else if (objData.type === \"function\") {\n                    if (objData.data.type === \"convertFilterUrl\") {\n                        this.set(\"_bPostSimpleTagsOnly\", true);\n                        this.get(\"_arrConvert\").pushObject({\n                            sUrl: objData.data.data,\n                            sRequestId: objData.data.requestId\n                        });\n                    }\n                } else if (objData.type === \"refresh\") {\n                    this.set(\"_bPageLoading\", true);\n                    Ember.run.next(function () {\n                        if (a24Core.isEmpty(_this7)) {\n                            return;\n                        }\n                        Ember.run.schedule(\"afterRender\", function () {\n                            _this7.set(\"_bPageLoading\", false);\n                        });\n                    });\n                }\n            },\n            onRecieveDataViewReactPopup: function onRecieveDataViewReactPopup(objData) {\n                var _this8 = this;\n\n                if (objData.type === \"app_ready\") {\n                    this.set(\"_bPopupViewLoading\", false);\n                } else if (objData.type === \"close\") {\n                    this.set(\"_bShowViewComplianceRules\", false);\n                    this.set(\"_objQueuedPostData\", null);\n                } else if (objData.type === \"complianceRuleConditionEdit\") {\n                    this.set(\"_sSimpleTagsUrl\", null); // This is to reset the observe as the below set didnt want to fire the observer\n                    this.set(\"_bShowConditionBuilder\", true);\n                    this.set(\"_bPostSimpleTagsOnly\", false);\n                    Ember.run.next(function () {\n                        if (a24Core.isEmpty(_this8)) {\n                            return;\n                        }\n                        if (!a24Core.isEmpty(objData.data.url)) {\n                            _this8.set(\"_sSimpleTagsUrl\", objData.data.url);\n                        } else {\n                            _this8.set(\"_sSimpleTagsUrl\", \"\");\n                        }\n                    });\n                    if (!a24Core.isEmpty(objData.data.requestId)) {\n                        this.set(\"_iRequestId\", objData.data.requestId);\n                    }\n                    if (objData.data.index > 0) {\n                        this.set(\"_sWarningMessage\", this.get(\"_objProfileStringsService\").getString(\"complianceRulesWarningMessage\"));\n                    } else {\n                        this.set(\"_sWarningMessage\", \"\");\n                    }\n                } else if (objData.type === \"function\") {\n                    if (objData.data.type === \"convertFilterUrl\") {\n                        this.set(\"_bPostSimpleTagsOnly\", true);\n                        this.get(\"_arrConvert\").pushObject({\n                            sUrl: objData.data.data,\n                            sRequestId: objData.data.requestId\n                        });\n                    }\n                } else if (objData.type === \"refresh\") {\n                    if (this.get(\"bLinkedRulesView\")) {\n                        // Manually calling the event here since the parent needs to justify what happens here if\n                        // we are using this on the compliance contract links page instead of the normal reload\n                        if (!a24Core.isEmpty(this.get(\"onLinkUnlinkComplianceRule\"))) {\n                            this.get(\"onLinkUnlinkComplianceRule\")();\n                        }\n                    } else {\n                        this.set(\"_bPageLoading\", true);\n                        Ember.run.next(function () {\n                            if (a24Core.isEmpty(_this8)) {\n                                return;\n                            }\n                            Ember.run.schedule(\"afterRender\", function () {\n                                _this8.set(\"_bPageLoading\", false);\n                            });\n                        });\n                    }\n                }\n            },\n            onWillDoServiceCallConditions: function onWillDoServiceCallConditions(objSuccessCallback) {\n                if (this.get(\"_bDatagridReady\")) {\n                    if (!this.get(\"_bShowConditionBuilder\")) {\n                        objSuccessCallback([], null, {\n                            getResponseHeader: function getResponseHeader() {\n                                return \"0\";\n                            }\n                        });\n                        return true;\n                    }\n                } else {\n                    this.set(\"_bDatagridReady\", true);\n                    this._triggerQueue();\n                    if (!this.get(\"_bAgencyGroupContext\")) {\n                        return true;\n                    }\n                }\n            },\n            onSimpleTagsAction: function onSimpleTagsAction(arrTags) {\n                if (this.get(\"_bPostSimpleTagsOnly\")) {\n                    var objPostbody = {\n                        type: \"functionResponse\",\n                        data: {\n                            requestId: this.get(\"_iRequestId\"),\n                            data: arrTags\n                        }\n                    };\n                    if (this.get(\"_bShowViewComplianceRules\")) {\n                        this.set(\"_objReactViewPopupPostData\", objPostbody);\n                    } else if (this.get(\"_bShowManageComplianceRules\")) {\n                        this.set(\"_objReactPopupPostData\", objPostbody);\n                    }\n\n                    this.set(\"_bBusy\", false);\n                    if (!a24Core.isEmpty(this.get(\"_arrConvert\"))) {\n                        this.get(\"_arrConvert\").removeAt(0);\n                    }\n                }\n            },\n            onPopupCloseAction: function onPopupCloseAction() {\n                var objPostbody = {\n                    type: \"complianceRuleConditionFiltersData\"\n                };\n                if (this.get(\"_bShowViewComplianceRules\")) {\n                    this.set(\"_objReactViewPopupPostData\", objPostbody);\n                } else if (this.get(\"_bShowManageComplianceRules\")) {\n                    this.set(\"_objReactPopupPostData\", objPostbody);\n                }\n\n                this.set(\"_bShowConditionBuilder\", false);\n            },\n            onPopupDoneAction: function onPopupDoneAction(arrTags, sUrl, objQuery) {\n                var objJsonQuery = JSON.parse(objQuery);\n                var objPostbody = {\n                    type: \"complianceRuleConditionFiltersData\",\n                    data: {\n                        requestId: this.get(\"_iRequestId\"),\n                        url: sUrl,\n                        data: objJsonQuery.query,\n                        tags: arrTags\n                    }\n                };\n                if (this.get(\"_bShowViewComplianceRules\")) {\n                    this.set(\"_objReactViewPopupPostData\", objPostbody);\n                } else if (this.get(\"_bShowManageComplianceRules\")) {\n                    this.set(\"_objReactPopupPostData\", objPostbody);\n                }\n\n                this.set(\"_bShowConditionBuilder\", false);\n            },\n            onQueryPageReload: function onQueryPageReload(bLoading) {\n                this.set(\"_bPageLoading\", bLoading);\n            },\n            onPageReload: function onPageReload() {\n                this.set(\"_bShowLoadFailedPopup\", false);\n                this.doServiceCalls();\n            },\n            onUnlinkErrorClose: function onUnlinkErrorClose() {\n                this.set(\"_bShowUnlinkError\", false);\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/right-panel-agency-candidate-calendar\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/right-panel-agency-candidate-calendar\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _didRenderChangesMixin, _rightPanelAgencyCandidateCalendar, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _rightPanelAgencyCandidateCalendar.default,\n        mData: null,\n        _objData: null,\n        _objBasicInfo: null,\n        _bCalendarLoaded: false,\n        _bActivitiesLoaded: false,\n        _sCandidateId: \"\",\n        _sUserId: \"\",\n        _sAvatar: \"\",\n        _bAvatarLoaded: false,\n        _bUserLoaded: false,\n        _bNumbersLoadedDone: false,\n        _bNumbersLoaded: false,\n        _bNumbersLibLoaded: false,\n        _bShowExtraNumbers: false,\n        _sCurrentStatus: \"...\",\n        _objMainNumber: null,\n        _arrNumbers: null,\n        _bNumbersError: false,\n        _objCandidateProfileEnumsService: Ember.inject.service(\"a24-enums-candidate-profile\"),\n        _objUserAvatarService: Ember.inject.service(\"rest-agency-user-avatar\"),\n        _objMetaRestService: Ember.inject.service(\"rest-agency-candidate-meta\"),\n        _objContactNumbersService: Ember.inject.service(\"rest-agency-candidate-contact-numbers\"),\n        _objActivityRestService: Ember.inject.service(\"rest-agency-candidate-activity\"),\n        _objActivityTypeRestService: Ember.inject.service(\"rest-advanced-search-activity-type\"),\n        _objRestAgencyCandidateActivityEmailComm: Ember.inject.service(\"rest-agency-activity-email-communication-message\"),\n        _objRestAgencyCandidateActivityConversation: Ember.inject.service(\"rest-agency-activity-conversation\"),\n        _objRestAgencyCandidateActivityNotification: Ember.inject.service(\"rest-agency-activity-notification\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objCandidateStatusService: Ember.inject.service(\"rest-agency-candidate-status\"),\n        _sActivityContext: null,\n        _objCandidateStatusPromise: null,\n        _objMetaGetPromise: null,\n        _objNumbersGetPromise: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"_objData\", { \"data_loading\": true });\n\n            this.set(\"_sActivityContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_LOWER_HYPHEN\").toLowerCase());\n        },\n        _onDataChange: Ember.observer(\"mData\", \"mData.sCandidateId\", \"mData.bCalendarLoaded\", \"mData.objBasicInfo\", \"mData.arrNumbers\", function () {\n            if (!a24Core.isEmpty(this.get(\"mData.sCandidateId\"))) {\n                this.set(\"_sCandidateId\", this.get(\"mData.sCandidateId\"));\n            }\n            if (!a24Core.isEmpty(this.get(\"mData.bCalendarLoaded\"))) {\n                this.set(\"_bCalendarLoaded\", this.get(\"mData.bCalendarLoaded\"));\n            }\n            if (!a24Core.isEmpty(this.get(\"mData.objBasicInfo\"))) {\n                this.set(\"_objBasicInfo\", this.get(\"mData.objBasicInfo\"));\n            }\n            if (!a24Core.isEmpty(this.get(\"mData.bNumbersLoaded\")) && this.get(\"mData.bNumbersLoaded\")) {\n                if (a24Core.isEmpty(this.get(\"mData.bNumbersError\"))) {\n                    this.set(\"_bNumbersLoaded\", true);\n                    this.set(\"_arrNumbers\", this.get(\"mData.arrNumbers\"));\n                } else {\n                    this.set(\"_bNumbersLoaded\", true);\n                    this.set(\"_arrNumbers\", []);\n                    this.set(\"_bNumbersError\", this.get(\"mData.bNumbersError\"));\n                }\n            }\n        }),\n        _onDataLoaded: Ember.observer(\"_objBasicInfo\", \"_sUserId\", \"_bUserLoaded\", \"_sAvatar\", \"_bAvatarLoaded\", \"_sCurrentStatus\", function () {\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfo\")) && (!a24Core.isEmpty(this.get(\"_sUserId\")) || this.get(\"_bUserLoaded\")) && (!a24Core.isEmpty(this.get(\"_sAvatar\")) || this.get(\"_bAvatarLoaded\")) && !a24Core.isEmpty(this.get(\"_sCurrentStatus\"))) {\n                var objData = {\n                    \"ss\": {\n                        \"user\": {\n                            \"first_name\": this.get(\"_objBasicInfo.first_name\"),\n                            \"last_name\": this.get(\"_objBasicInfo.last_name\"),\n                            \"avatar\": this.get(\"_sAvatar\")\n                        }\n                    },\n                    \"ember_candidate\": {\n                        \"current_status\": {\n                            \"status\": this.get(\"_sCurrentStatus\")\n                        }\n                    }\n                };\n\n                this.set(\"_objData\", objData);\n            }\n        }),\n        _getRestAvatar: function _getRestAvatar(funcSuccess, funcFailure) {\n            this.get(\"_objUserAvatarService\").getAvatar(this, \"_objAvatarGetPromise\", this.get(\"_sUserId\"), funcSuccess, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n            funcFailure));\n        },\n        _getAvatar: function _getAvatar() {\n            var _this = this;\n\n            var funcAvatarSuccess = function funcAvatarSuccess(objResponse) {\n                if (!a24Core.isEmpty(objResponse) && !a24Core.isEmpty(objResponse.avatar_url)) {\n                    _this.set(\"_sAvatar\", objResponse.avatar_url);\n                } else {\n                    _this.set(\"_sAvatar\", \"\");\n                }\n                _this.set(\"_bAvatarLoaded\", true);\n            };\n\n            var funcFailure = function funcFailure() /*sCode*/{\n                _this.set(\"_sAvatar\", \"\");\n                _this.set(\"_bAvatarLoaded\", true);\n            };\n\n            this._getRestAvatar(funcAvatarSuccess, funcFailure);\n        },\n\n        _setNumbers: Ember.observer(\"_arrNumbers\", \"_bNumbersLibLoaded\", function () {\n            if (this.get(\"_bNumbersError\")) {\n                this.set(\"_objMainNumber\", {\n                    sNumber: \"--- --- ---\"\n                });\n\n                this.set(\"_bNumbersLoadedDone\", true);\n            } else if (this.get(\"_bNumbersLibLoaded\") && this.get(\"_bNumbersLoaded\")) {\n                var arrNumbers = this.get(\"_arrNumbers\");\n\n                var objMobileNumber = null;\n                var objHomeNumber = null;\n                var objWorkNumber = null;\n                var objAltNumber = null;\n                var arrFormattedNumbers = [];\n                for (var i = 0; i < arrNumbers.length; i++) {\n                    var sFormattedNumber = this.get(\"objChildren.number\").formatNumberForDisplay(arrNumbers[i].number);\n                    var sLabel = a24Core.getSafeStringLink(Ember, sFormattedNumber, arrNumbers[i].number, \"phone\");\n\n                    var objItem = {\n                        sNumber: sLabel,\n                        sIcon: null,\n                        sIconFa: null,\n                        sIconSvg: null\n                    };\n\n                    var objCallTypeEnum = this.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"callTypes\", arrNumbers[i].type, null, true);\n                    if (!a24Core.isEmpty(objCallTypeEnum)) {\n                        objItem.sIcon = objCallTypeEnum.icon;\n                        objItem.sIconFa = objCallTypeEnum.icon_fa;\n                        objItem.sIconSvg = objCallTypeEnum.icon_svg;\n\n                        //override with each loop since we want the last value of each\n                        if (arrNumbers[i].type === this.get(\"_objCandidateProfileEnumsService.callTypes.MOBILE.backend\")) {\n                            objMobileNumber = objItem;\n                        } else if (arrNumbers[i].type === this.get(\"_objCandidateProfileEnumsService.callTypes.HOME.backend\")) {\n                            objHomeNumber = objItem;\n                        } else if (arrNumbers[i].type === this.get(\"_objCandidateProfileEnumsService.callTypes.WORK.backend\")) {\n                            objWorkNumber = objItem;\n                        } else if (arrNumbers[i].type === this.get(\"_objCandidateProfileEnumsService.callTypes.ADDITIONAL.backend\")) {\n                            objAltNumber = objItem;\n                        }\n\n                        arrFormattedNumbers.pushObject(objItem);\n                    }\n                }\n                if (!a24Core.isEmpty(objMobileNumber)) {\n                    this.set(\"_objMainNumber\", objMobileNumber);\n                } else if (!a24Core.isEmpty(objHomeNumber)) {\n                    this.set(\"_objMainNumber\", objHomeNumber);\n                } else if (!a24Core.isEmpty(objWorkNumber)) {\n                    this.set(\"_objMainNumber\", objWorkNumber);\n                } else if (!a24Core.isEmpty(objAltNumber)) {\n                    this.set(\"_objMainNumber\", objAltNumber);\n                } else {\n                    this.set(\"_objMainNumber\", null);\n                }\n\n                if (!a24Core.isEmpty(this.get(\"_objMainNumber\"))) {\n                    arrFormattedNumbers.removeObject(this.get(\"_objMainNumber\"));\n                }\n\n                this.set(\"_arrFormattedNumbers\", arrFormattedNumbers);\n                this.set(\"_bNumbersLoadedDone\", true);\n            }\n        }),\n\n        actions: {\n            openExtraNumberDropdown: function openExtraNumberDropdown() {\n                this.set(\"_bShowExtraNumbers\", true);\n            },\n            closeExtraNumberDropdown: function closeExtraNumberDropdown() {\n                this.set(\"_bShowExtraNumbers\", false);\n            },\n            onInputFormTelNumberInitDone: function onInputFormTelNumberInitDone() {\n                this.set(\"_bNumbersLibLoaded\", true);\n            },\n            onActivitiesLoaded: function onActivitiesLoaded() {\n                var _this2 = this;\n\n                if (!this.get(\"_bActivitiesLoaded\")) {\n                    this.set(\"_sCurrentStatus\", \"...\");\n                    var objPromiseCandidateStatusSummary = this.get(\"_objCandidateStatusService\").getCandidateStatusSummary(this, \"_objCandidateStatusPromise\", this.get(\"_sCandidateId\"), function () {}, // handled in rsvp\n                    a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode*/{\n                        _this2.set(\"_sCurrentStatus\", \"---\");\n                    }));\n\n                    var objPromiseCandidateMeta = this.get(\"_objMetaRestService\").getCandidateMeta(this, \"_objMetaGetPromise\", this.get(\"_sCandidateId\"), function () {}, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                    function () /*sCode*/{\n                        _this2.set(\"_sUserId\", \"\");\n                        _this2.set(\"_sAvatar\", \"\");\n                        _this2.set(\"_bUserLoaded\", true);\n                        _this2.set(\"_bAvatarLoaded\", true);\n                    }));\n\n                    var objServiceCalls = {\n                        _objRestCandidateStatusSummaryProperty: objPromiseCandidateStatusSummary,\n                        _objRestCandidateMetaProperty: objPromiseCandidateMeta\n                    };\n\n                    var arrRequiredResponses = [\"_objRestCandidateStatusSummaryProperty\", \"_objRestCandidateMetaProperty\"];\n\n                    Ember.copy(a24RSVP).configure(this, objServiceCalls, [{\n                        arrRequiredResponses: arrRequiredResponses,\n                        funcOnComplete: function funcOnComplete(objResponses) {\n                            if (!a24Core.isEmpty(objResponses._objRestCandidateStatusSummaryProperty) && !a24Core.isEmpty(objResponses._objRestCandidateStatusSummaryProperty.objHeaders) && objResponses._objRestCandidateStatusSummaryProperty.objHeaders.statusText === \"abort\" || !a24Core.isEmpty(objResponses._objRestCandidateMetaProperty) && !a24Core.isEmpty(objResponses._objRestCandidateMetaProperty.objHeaders) && objResponses._objRestCandidateMetaProperty.objHeaders.statusText === \"abort\") {\n                                return;\n                            }\n\n                            if (!a24Core.isEmpty(objResponses._objRestCandidateStatusSummaryProperty) && !a24Core.isEmpty(objResponses._objRestCandidateStatusSummaryProperty.objResponse)) {\n                                var objResponse = objResponses._objRestCandidateStatusSummaryProperty.objResponse;\n                                if (!a24Core.isEmpty(objResponse) && !a24Core.isEmpty(objResponse.current_status)) {\n                                    _this2.set(\"_sCurrentStatus\", objResponse.current_status.status);\n                                } else {\n                                    _this2.set(\"_sCurrentStatus\", \"---\");\n                                }\n                            }\n\n                            if (!a24Core.isEmpty(objResponses._objRestCandidateMetaProperty) && !a24Core.isEmpty(objResponses._objRestCandidateMetaProperty.objResponse)) {\n                                var _objResponse = objResponses._objRestCandidateMetaProperty.objResponse;\n                                if (!a24Core.isEmpty(_objResponse) && !a24Core.isEmpty(_objResponse.user_id)) {\n                                    _this2.set(\"_sUserId\", _objResponse.user_id);\n                                    _this2._getAvatar();\n                                } else {\n                                    _this2.set(\"_sUserId\", \"\");\n                                    _this2.set(\"_sAvatar\", \"\");\n                                    _this2.set(\"_bUserLoaded\", true);\n                                    _this2.set(\"_bAvatarLoaded\", true);\n                                }\n                            }\n                        }\n                    }]);\n                }\n                this.set(\"_bActivitiesLoaded\", true);\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/right-panel-candidate-profile\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/right-panel-candidate-profile\"], function (exports, _didRenderChangesMixin, _rightPanelCandidateProfile) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _rightPanelCandidateProfile.default,\n        classNames: [\"right-panel-candidate-profile\"],\n        mData: null, //This is send in through the objMenuService.mRightPanelComponentData service\n        _sIFrameUrl: \"\",\n        _objReactIframeData: null,\n        _objReactPopupPostData: null,\n        _bReactPopupOpen: false,\n        _bReactPopupLoading: true,\n        _objEmailActivity: null,\n        _objNotificationActivity: null,\n        _bShowEmailMessagePopup: false,\n        _bShowNotifcationsSentPopup: false,\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objRestCandidateActivityEmailComm: null,\n        _objRestCandidateActivityNotification: null,\n        _objRestAgencyCandidateActivityEmailComm: Ember.inject.service(\"rest-agency-activity-email-communication-message\"),\n        _objRestAgencyCandidateActivityNotification: Ember.inject.service(\"rest-agency-activity-notification\"),\n        _objRestAgencyGroupCandidateActivityEmailComm: Ember.inject.service(\"rest-agency-group-activity-email-communication-message\"),\n        _objRestAgencyGroupCandidateActivityNotification: Ember.inject.service(\"rest-agency-group-activity-notification\"),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            var sContext = this.get(\"_objUserSession.objAuthData.context.objReferenceId.sResource\");\n\n            if (sContext === this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY\")) {\n                this.set(\"_objRestCandidateActivityEmailComm\", this.get(\"_objRestAgencyCandidateActivityEmailComm\"));\n                this.set(\"_objRestCandidateActivityNotification\", this.get(\"_objRestAgencyCandidateActivityNotification\"));\n            } else {\n                this.set(\"_objRestCandidateActivityEmailComm\", this.get(\"_objRestAgencyGroupCandidateActivityEmailComm\"));\n                this.set(\"_objRestCandidateActivityNotification\", this.get(\"_objRestAgencyGroupCandidateActivityNotification\"));\n            }\n\n            this.observeData();\n        },\n        observeData: Ember.observer(\"mData\", function () {\n            var objData = {\n                candidateId: this.get(\"mData.sCandidateId\")\n            };\n            if (!a24Core.isEmpty(this.get(\"mData.dtShiftStart\"))) {\n                objData.availabilityStartDateString = this.get(\"mData.dtShiftStart\");\n            }\n            this.set(\"_objReactIframeData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"candidate/previouslyBooked/candidateProfileContainer\",\n                    data: objData\n                }\n            });\n        }),\n        actions: {\n            onRecieveData: function onRecieveData(objData) {\n                if (objData.type === \"trigger_route\") {\n                    this.set(\"_objReactPopupPostData\", objData);\n                    this.set(\"_bReactPopupOpen\", true);\n                } else if (objData.type === \"open_preview_popup\") {\n                    var objEventData = objData.data.data;\n                    if (objEventData.entity_type === \"EmailCommunicationMessage\") {\n                        this.set(\"_objEmailActivity\", {\n                            sSubjectId: objEventData.subject_id,\n                            sLinkedEntityId: objEventData.entity_id,\n                            sActivityId: objEventData.activity_id,\n                            sSubjectType: objEventData.subject_type\n                        });\n                        this.set(\"_bShowEmailMessagePopup\", true);\n                    } else if (objEventData.entity_type === \"ChatConversation\") {\n                        this.set(\"_bReactPopupOpen\", true);\n                        this.set(\"_objReactPopupPostData\", {\n                            type: \"trigger_route\",\n                            data: {\n                                route: \"agency/conversation/previewPopup\",\n                                data: { conversationId: objEventData.entity_id }\n                            }\n                        });\n                    } else if (objEventData.entity_type === \"CandidateNotifications\") {\n                        this.set(\"_objNotificationActivity\", {\n                            sSubjectId: objEventData.subject_id,\n                            sLinkedEntityId: objEventData.entity_id,\n                            sActivityId: objEventData.activity_id,\n                            sSubjectType: objEventData.subject_type\n                        });\n                        this.set(\"_bShowNotifcationsSentPopup\", true);\n                    }\n                }\n            },\n            onRecievePopupData: function onRecievePopupData(objData) {\n                if (objData.type === \"app_ready\" || objData.type === \"router_ready\") {\n                    this.set(\"_bReactPopupLoading\", false);\n                } else if (objData.type === \"close\") {\n                    this.set(\"_bReactPopupOpen\", false);\n                } else if (objData.type === \"popup_response\") {\n                    this.set(\"_objReactIframeData\", objData);\n                }\n            },\n            onEmailMessagePopupClose: function onEmailMessagePopupClose() {\n                this.set(\"_bShowEmailMessagePopup\", false);\n            },\n            onNotificationSentPopupClose: function onNotificationSentPopupClose() {\n                this.set(\"_bShowNotifcationsSentPopup\", false);\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-position-held\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-position-held\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidatePositionHeld) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidatePositionHeld.default,\n        _sCandidateId: null,\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bDisplayPermissionError: false,\n        _objBasicInfoGetPromise: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-profile\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            this.set(\"_objReactIframeData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"candidate/positionHeld\",\n                    data: {\n                        candidateId: this.get(\"_sCandidateId\")\n                    }\n                }\n            });\n\n            this.getBasicInfo();\n        },\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        },\n        actions: {\n            onRecieveData: function onRecieveData(objData) {\n                if (objData.type === \"app_ready\" || objData.type === \"router_ready\") {\n                    this.set(\"_bLoading\", false);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-professional-registration-react\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-professional-registration-react\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateProfessionalRegistrationReact) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidateProfessionalRegistrationReact.default,\n        _sCandidateId: \"\",\n        _sCandidateType: \"\",\n        _sCandidateTypeName: \"\",\n        _sIFrameUrl: null,\n        _objReactIframeData: null,\n        _bDisplayPermissionError: false,\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objBasicInfoGetPromise: null,\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objCandidateTypeRestService: Ember.inject.service(\"rest-agency-candidate-type\"),\n        _objCandidateProfileCandidateTypePromise: null,\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"index.agency-candidate-search-view\"];\n            var objCandidateSearchViewProfRegParams = this.get(\"_objNavigationService.objRouteParams\")[\"index.agency-candidate-search-view.professional-registrations.professional-registration\"];\n\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewProfRegParams)) {\n                this.set(\"_sCandidateType\", objCandidateSearchViewProfRegParams.candidate_type);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            this._getCandidateTypes();\n            this._getBasicInfo();\n        },\n\n        _onCurrentRouteChange: Ember.observer(\"_objNavigationService.objCurrentRouteParams\", function () {\n            if (!a24Core.isEmpty(this.get(\"_objNavigationService.objCurrentRouteParams\")[\"index.agency-candidate-search-view.professional-registrations\"])) {\n                var objCandidateSearchViewProfRegParams = this.get(\"_objNavigationService.objCurrentRouteParams\")[\"index.agency-candidate-search-view.professional-registrations.professional-registration\"];\n                if (a24Core.isEmpty(objCandidateSearchViewProfRegParams) && a24Core.isEmpty(this.get(\"_sCandidateType\")) || !a24Core.isEmpty(objCandidateSearchViewProfRegParams) && this.get(\"_sCandidateType\") === objCandidateSearchViewProfRegParams.candidate_type) {\n                    //Do nothing since they match\n                } else {\n                    this.set(\"_sCandidateType\", objCandidateSearchViewProfRegParams.candidate_type);\n                    this.set(\"_sCandidateTypeName\", \"\");\n                    this._getCandidateTypes();\n                }\n            }\n        }),\n\n        _getCandidateTypes: function _getCandidateTypes() {\n            var _this = this;\n\n            Ember.run.next(function () {\n                if (a24Core.isEmpty(_this)) {\n                    return;\n                }\n                Ember.run.schedule(\"afterRender\", function () {\n                    _this.get(\"_objCandidateTypeRestService\").getCandidateTypesCached(_this, \"_objCandidateProfileCandidateTypePromise\", _this.get(\"_objUserSession\").getUserContextReference().mId, function (arrData) {\n                        if (a24Core.isEmpty(arrData)) {\n                            arrData = [];\n                        }\n                        for (var i = 0; i < arrData.length; i++) {\n                            if (_this.get(\"_sCandidateType\") === arrData[i]._id) {\n                                _this.set(\"_sCandidateTypeName\", arrData[i].name);\n                                break;\n                            }\n                        }\n                        _this._setReactIframeData();\n                    }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () {\n                        _this._setReactIframeData();\n                    }));\n                });\n            });\n        },\n\n        _setReactIframeData: function _setReactIframeData() {\n            this.set(\"_objReactIframeData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"candidate/professionalRegistration/page\",\n                    data: {\n                        candidateId: this.get(\"_sCandidateId\"),\n                        candidateType: this.get(\"_sCandidateType\"),\n                        candidateTypeName: this.get(\"_sCandidateTypeName\")\n                    }\n                }\n            });\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        _getBasicInfo: function _getBasicInfo() {\n            var _this2 = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this2._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode) {\n                    if (sCode === \"403\") {\n                        _this2.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this2.set(\"_objStatusErrorPageService.sMessage\", _this2.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this2.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        },\n        actions: {\n            onReceiveReactData: function onReceiveReactData() {}\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-profile-calendar\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-calendar\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateProfileCalendar) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidateProfileCalendar.default,\n\n        objAgencyAvailabilityService: Ember.inject.service(\"agency-availability\"),\n        objAgencyBookedShiftService: Ember.inject.service(\"rest-agency-advanced-search-agency-shift\"),\n        objAgencyEmailRestService: Ember.inject.service(\"rest-agency-candidate-emails\"),\n\n        _funcOnBack: null,\n\n        _sCandidateId: null,\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objCandidateContactNumbersService: Ember.inject.service(\"rest-agency-candidate-contact-numbers\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _objMenuService: Ember.inject.service(\"triage-menu\"),\n        _bDisplayPermissionError: false,\n\n        _objFabButtonService: Ember.inject.service(\"fab-button\"),\n        _objBasicInfoResponse: null,\n        _objContactNumbersResponse: null,\n        _arrNumbers: null,\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-profile\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            this.set(\"_funcOnBack\", function () {\n                _this.get(\"_objNavigation\").navigateBack();\n            });\n\n            this.set(\"_objMenuService.sRightPanelComponent\", \"right-panel-agency-candidate-calendar\");\n            this.set(\"_objMenuService.mRightPanelComponentData\", {\n                \"sCandidateId\": this.get(\"_sCandidateId\"),\n                \"bCalendarLoaded\": false,\n                \"objBasicInfo\": null\n            });\n\n            this.set(\"_arrNumbers\", []);\n\n            this.getBasicInfoAndContactNumber();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfoAndContactNumber: function getBasicInfoAndContactNumber() {\n            var _this2 = this;\n\n            var objPromiseCandidateBasicInfo = this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoResponse\", this.get(\"_sCandidateId\"), function () {\n                // Handled by RSVP\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode /*, sStatus, objErrorThrown, objError*/) {\n                if (sCode === \"403\") {\n                    _this2.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                    _this2.set(\"_objStatusErrorPageService.sMessage\", _this2.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                    _this2.set(\"_bDisplayPermissionError\", true);\n                }\n            }));\n\n            var objPromiseContactNumbers = this.get(\"_objCandidateContactNumbersService\").getContactNumbers(this, \"_objContactNumbersResponse\", this.get(\"_sCandidateId\"), function () {\n                // Handled by RSVP\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                _this2.set(\"_objMenuService.mRightPanelComponentData.arrNumbers\", []);\n                _this2.set(\"_objMenuService.mRightPanelComponentData.bNumbersError\", true);\n                _this2.set(\"_objMenuService.mRightPanelComponentData.bNumbersLoaded\", true);\n            }));\n\n            var objPromiseList = {\n                _objRSVPCandidateBasicInfo: objPromiseCandidateBasicInfo,\n                _objRSVPContactNumbers: objPromiseContactNumbers\n            };\n\n            var objThis = this;\n            Ember.copy(a24RSVP).configure(this, objPromiseList, [{\n                arrRequiredResponses: [\"_objRSVPCandidateBasicInfo\", \"_objRSVPContactNumbers\"],\n                funcOnComplete: function funcOnComplete(objResponses) {\n                    if (!a24Core.isEmpty(objResponses._objRSVPCandidateBasicInfo) && !a24Core.isEmpty(objResponses._objRSVPCandidateBasicInfo.objHeaders) && objResponses._objRSVPCandidateBasicInfo.objHeaders.statusText === \"abort\" || !a24Core.isEmpty(objResponses._objRSVPContactNumbers) && !a24Core.isEmpty(objResponses._objRSVPContactNumbers.objHeaders) && objResponses._objRSVPContactNumbers.objHeaders.statusText === \"abort\") {\n                        return;\n                    }\n                    if (!a24Core.isEmpty(objResponses._objRSVPCandidateBasicInfo) && !a24Core.isEmpty(objResponses._objRSVPCandidateBasicInfo.objResponse)) {\n                        var objData = objResponses._objRSVPCandidateBasicInfo.objResponse;\n                        objThis.set(\"_objMenuService.mRightPanelComponentData.sCandidateId\", objThis.get(\"_sCandidateId\"));\n                        objThis.set(\"_objMenuService.mRightPanelComponentData.objBasicInfo\", objData);\n                        objThis._setTitleBar();\n                    }\n                    if (!a24Core.isEmpty(objResponses._objRSVPContactNumbers)) {\n                        var arrData = objResponses._objRSVPContactNumbers.objResponse;\n                        objThis.set(\"_objMenuService.mRightPanelComponentData.bNumbersLoaded\", true);\n                        if (a24Core.isEmpty(arrData)) {\n                            objThis.set(\"_objMenuService.mRightPanelComponentData.arrNumbers\", []);\n                            objThis.set(\"_arrNumbers\", []);\n                        } else {\n                            objThis.set(\"_objMenuService.mRightPanelComponentData.arrNumbers\", arrData);\n                            objThis.set(\"_arrNumbers\", arrData);\n                        }\n                    }\n                }\n            }]);\n        },\n\n        actions: {\n            onCalendarLoaded: function onCalendarLoaded() {\n                this.set(\"_objMenuService.mRightPanelComponentData.bCalendarLoaded\", true);\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-profile-compliance-exemptions\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-compliance-exemptions\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateProfileComplianceExemptions) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidateProfileComplianceExemptions.default,\n        objQueryParams: null,\n\n        _env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n        _sCandidateId: null,\n        _sCandidateName: null,\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objSettingsRestService: Ember.inject.service(\"rest-agency-candidate-settings\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bDisplayPermissionError: false,\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_env.sRestApiBaseUrl\"),\n        _sUrlBase: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            var objCandidateViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-profile\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var sAgencyId = this.get(\"_objNavigation.sContextId\");\n\n            this.set(\"_sUrlBase\", this.get(\"_sRestApiBaseUrl\") + \"/v1/agency/\" + sAgencyId + \"/advanced-search/compliance-rule-exemption\");\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            var sFirstName = this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\");\n            var sLastName = this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\");\n            this.set(\"_sCandidateName\", sFirstName + \" \" + sLastName);\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + (sFirstName + \" \" + sLastName));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-profile-compliance-passport\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-compliance-passport\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateProfileCompliancePassport) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidateProfileCompliancePassport.default,\n        _sCandidateId: null,\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bDisplayPermissionError: false,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-profile\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            var objPostMessageData = {\n                candidateId: this.get(\"_sCandidateId\")\n            };\n\n            if (!a24Core.isEmpty(this.get(\"_objNavigation.objRouteQueryParams.complianceContractId\"))) {\n                objPostMessageData.complianceContractId = this.get(\"_objNavigation.objRouteQueryParams.complianceContractId\");\n            }\n\n            if (!a24Core.isEmpty(this.get(\"_objNavigation.objRouteQueryParams.agencyId\"))) {\n                objPostMessageData.agencyId = this.get(\"_objNavigation.objRouteQueryParams.agencyId\");\n            }\n\n            this.set(\"_objReactIframeData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"general/compliancePassportPage\",\n                    data: objPostMessageData\n                }\n            });\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-profile-crb-check\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-crb-check\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateProfileCrbCheck) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidateProfileCrbCheck.default,\n        _sIFrameUrl: null,\n        _sCandidateId: null,\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bDisplayPermissionError: false,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-profile\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sEnterpriseUrl + \"/candidate/\" + this.get(\"_sCandidateId\") + \"/crb-check\");\n            }\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-profile-dismissals\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-dismissals\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateProfileDismissals) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidateProfileDismissals.default,\n        _sCandidateId: null,\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bDisplayPermissionError: false,\n        _objEmploymentDismissalsService: Ember.inject.service(\"rest-agency-candidate-employment-dismissals\"),\n        _objSettingsRestService: Ember.inject.service(\"rest-agency-candidate-settings\"),\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-profile\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-profile-documents-react\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-documents-react\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateProfileDocumentsReact) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidateProfileDocumentsReact.default,\n        _sCandidateId: null,\n        _sViewVerifiedDocs: null,\n        _sViewDocuments: null,\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bDisplayPermissionError: false,\n\n        _bReactPopupOpen: false,\n        _bReactPopupLoading: false,\n        _objReactPopupPostData: null,\n\n        _objVerifiedDocWindow: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            if (a24Core.isEmpty(this.get(\"_objVerifiedDocWindow\"))) {\n                this.set(\"_objVerifiedDocWindow\", {});\n            }\n\n            var objCandidateViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-profile\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(this.get(\"_objNavigation.objRouteQueryParams.viewVerifiedDocument\"))) {\n                this.set(\"_sViewVerifiedDocs\", this.get(\"_objNavigation.objRouteQueryParams.viewVerifiedDocument\"));\n            }\n\n            if (!a24Core.isEmpty(this.get(\"_objNavigation.objRouteQueryParams.viewDocument\"))) {\n                this.set(\"_sViewDocuments\", this.get(\"_objNavigation.objRouteQueryParams.viewDocument\"));\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            if (!a24Core.isEmpty(this.get(\"_sViewVerifiedDocs\"))) {\n                this.set(\"_bReactPopupOpen\", true);\n                this.set(\"_objReactPopupPostData\", {\n                    type: \"trigger_route\",\n                    data: {\n                        route: \"documents/agencyGroupCandidate/verfiedDocument/popup\",\n                        data: JSON.parse(atob(this.get(\"_sViewVerifiedDocs\")))\n                    }\n                });\n            } else {\n                var objViewDocuments = {};\n                if (!a24Core.isEmpty(this.get(\"_sViewDocuments\"))) {\n                    objViewDocuments = JSON.parse(atob(this.get(\"_sViewDocuments\")));\n                }\n\n                var objData = Object.assign({ candidateId: this.get(\"_sCandidateId\") }, objViewDocuments);\n\n                this.set(\"_objReactIframeData\", {\n                    type: \"trigger_route\",\n                    data: {\n                        route: \"documents/page\",\n                        data: objData\n                    }\n                });\n            }\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        },\n        actions: {\n            onReceiveReactData: function onReceiveReactData(objData) {\n                if (objData.type === \"openViewVerifiedDocument\") {\n                    var sRoute = \"agency-candidate-search-view.documents\";\n                    var objParams = {\n                        \"agency-candidate-search-view\": [this.get(\"_sCandidateId\")]\n                    };\n                    var objQueryParams = {\n                        viewVerifiedDocument: btoa(JSON.stringify(objData.data))\n                    };\n\n                    var sUrlWithinContext = this.get(\"_objNavigation\").navigateWithinContext(sRoute, objParams, objQueryParams, true, true);\n\n                    this.get(\"_objVerifiedDocWindow\")[objData.data.requestId] = window.open(sUrlWithinContext, \"_blank\");\n                } else if (objData.type === \"closeViewVerifiedDocument\") {\n                    if (!a24Core.isEmpty(this.get(\"_objVerifiedDocWindow\")[objData.data.requestId])) {\n                        this.get(\"_objVerifiedDocWindow\")[objData.data.requestId].close();\n                        delete this.get(\"_objVerifiedDocWindow\")[objData.data.requestId];\n                    }\n                }\n            },\n            onReceiveReactPopupData: function onReceiveReactPopupData(objData) {\n                if (objData.type === \"app_ready\") {\n                    this.set(\"_bReactPopupLoading\", false);\n                } else if (objData.type === \"close\") {\n                    this.set(\"_bReactPopupOpen\", false);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-profile-equality-monitoring\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-equality-monitoring\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateProfileEqualityMonitoring) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidateProfileEqualityMonitoring.default,\n        _sCandidateId: null,\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objEqualityMonitoringService: Ember.inject.service(\"rest-agency-candidate-equality\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bDisplayPermissionError: false,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-profile\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-profile-exclusions\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-exclusions\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateProfileExclusions) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidateProfileExclusions.default,\n        objQueryParams: null,\n\n        _env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n        _sCandidateId: null,\n        _sCandidateName: null,\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objSettingsRestService: Ember.inject.service(\"rest-agency-candidate-settings\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bDisplayPermissionError: false,\n        _sClientApiBaseUrl: Ember.computed.readOnly(\"_env.sClientApiBaseUrl\"),\n        _sUrlBase: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            var objCandidateViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-profile\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var sAgencyId = this.get(\"_objNavigation.sContextId\");\n\n            this.set(\"_sUrlBase\", this.get(\"_sClientApiBaseUrl\") + \"/v1/agency/\" + sAgencyId + \"/candidate/\" + this.get(\"_sCandidateId\") + \"/client-initiated-exclusion\");\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            var sFirstName = this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\");\n            var sLastName = this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\");\n            this.set(\"_sCandidateName\", sFirstName + \" \" + sLastName);\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + (sFirstName + \" \" + sLastName));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-profile-external-info\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-external-info\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateProfileExternalInfo) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidateProfileExternalInfo.default,\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objCandidateProfileEnumsService: Ember.inject.service(\"a24-enums-candidate-profile\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objCandidateMetaService: Ember.inject.service(\"rest-agency-candidate-meta\"),\n        _arrExternalData: null,\n        // Commented out for this ticket https://github.com/A24Group/react-core/issues/3410\n        // _arrExternalDocumentsData: null,\n        _arrExternalVerificationsData: null,\n        // Commented out for this ticket https://github.com/A24Group/react-core/issues/2995\n        // _arrExternalDaysToExpiryData: null,\n        _bDisplayReloadCard: false,\n        _arrReloadActions: null,\n        _bLoading: true,\n        _bDisplayPermissionError: false,\n        _sActivityContext: null,\n        _objBasicInfoGetPromise: null,\n        _objCandidateMetaPromise: null,\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-profile\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            this.set(\"_arrReloadActions\", [{\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"reload\"),\n                sIcon: \"refresh\",\n                executeCardAction: function executeCardAction() {\n                    _this.doServiceCalls();\n                }\n            }]);\n\n            this.doServiceCalls();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objCandidateProfileStringsService\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        doServiceCalls: function doServiceCalls() {\n            var _this2 = this;\n\n            var sCandidateId = this.get(\"_sCandidateId\");\n\n            var objRestBasicInfoPromise = this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", sCandidateId, function () {}, // handled in rsvp\n            a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n            function () {\n                // do nothing\n            }));\n\n            var objRestCandidateMetaPromise = this.get(\"_objCandidateMetaService\").getCandidateMeta(this, \"_objCandidateMetaPromise\", sCandidateId, function () {}, // handled in rsvp\n            a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n            function (sCode /*, sStatus, objErrorThrown, objError*/) {\n                if (sCode === \"500\" || sCode === \"502\" || sCode === \"503\" || sCode === \"504\") {\n                    _this2.set(\"_bDisplayReloadCard\", true);\n                    return;\n                }\n\n                // Clear data\n                _this2.set(\"_arrExternalData\", []);\n                // this.set(\"_arrExternalDocumentsData\", []);\n                _this2.set(\"_arrExternalVerificationsData\", []);\n                _this2.set(\"_bLoading\", false);\n            }));\n\n            var objServiceCalls = {\n                _objRestBasicInfoProperty: objRestBasicInfoPromise,\n                _objRestCandidateMetaProperty: objRestCandidateMetaPromise\n            };\n\n            var arrRequiredResponses = [\"_objRestBasicInfoProperty\", \"_objRestCandidateMetaProperty\"];\n\n            this.set(\"_bLoading\", true);\n\n            Ember.copy(a24RSVP).configure(this, objServiceCalls, [{\n                arrRequiredResponses: arrRequiredResponses,\n                funcOnComplete: function funcOnComplete(objResponses) {\n                    if (!a24Core.isEmpty(objResponses._objRestBasicInfoProperty) && !a24Core.isEmpty(objResponses._objRestBasicInfoProperty.objHeaders) && objResponses._objRestBasicInfoProperty.objHeaders.statusText === \"abort\" || !a24Core.isEmpty(objResponses._objRestCandidateMetaProperty) && !a24Core.isEmpty(objResponses._objRestCandidateMetaProperty.objHeaders) && objResponses._objRestCandidateMetaProperty.objHeaders.statusText === \"abort\") {\n                        return;\n                    }\n\n                    if (!a24Core.isEmpty(objResponses._objRestBasicInfoProperty) && !a24Core.isEmpty(objResponses._objRestBasicInfoProperty.objResponse)) {\n                        _this2._setTitleBar();\n                    }\n\n                    if (!a24Core.isEmpty(objResponses._objRestCandidateMetaProperty) && !a24Core.isEmpty(objResponses._objRestCandidateMetaProperty.objResponse)) {\n                        var _objCandidateMetaData = objResponses._objRestCandidateMetaProperty.objResponse;\n\n                        // Commented out for this ticket https://github.com/A24Group/react-core/issues/3410\n                        // var arrExternalDocuments = [];\n                        // if (!a24Core.isEmpty(_objCandidateMetaData.external_documents)) {\n                        //     arrExternalDocuments = _objCandidateMetaData.external_documents;\n                        // }\n\n                        // this.set(\"_arrExternalDocumentsData\", arrExternalDocuments);\n\n                        var arrExternalVerifications = [];\n                        if (!a24Core.isEmpty(_objCandidateMetaData.external_verifications)) {\n                            arrExternalVerifications = _objCandidateMetaData.external_verifications;\n                        }\n\n                        _this2.set(\"_arrExternalVerificationsData\", arrExternalVerifications);\n\n                        // Commented out for this ticket https://github.com/A24Group/react-core/issues/2995\n                        // var arrExternalDaysToExpiry = [];\n                        // if (!a24Core.isEmpty(_objCandidateMetaData.external_days_to_expiry)) {\n                        //     arrExternalDaysToExpiry = _objCandidateMetaData.external_days_to_expiry;\n                        // }\n\n                        // this.set(\"_arrExternalDaysToExpiryData\", arrExternalDaysToExpiry);\n\n                        _this2.set(\"_bLoading\", false);\n                    }\n                }\n            }]);\n        }\n\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-profile-general-react\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-general-react\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateProfileGeneralReact) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidateProfileGeneralReact.default,\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _bDisplayPermissionError: false,\n        _sCandidateId: null,\n        _sIFrameUrl: null,\n        _objReactIframeData: null,\n        _objReactPopupPostData: null,\n        _bReactPopupOpen: false,\n        _bReactPopupLoading: true,\n        _objEmailActivity: null,\n        _objNotificationActivity: null,\n        _bShowEmailMessagePopup: false,\n        _bShowNotifcationsSentPopup: false,\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objRestAgencyCandidateActivityEmailComm: Ember.inject.service(\"rest-agency-activity-email-communication-message\"),\n        _objRestAgencyCandidateActivityNotification: Ember.inject.service(\"rest-agency-activity-notification\"),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"index.agency-candidate-profile\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            this.set(\"_objReactIframeData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"candidate/generalInfo/agencies/page\",\n                    data: {\n                        candidateId: this.get(\"_sCandidateId\")\n                    }\n                }\n            });\n\n            this.getBasicInfo();\n        },\n\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        },\n        actions: {\n            onRecieveData: function onRecieveData(objData) {\n                if (objData.type === \"trigger_route\") {\n                    this.set(\"_objReactPopupPostData\", objData);\n                    this.set(\"_bReactPopupOpen\", true);\n                } else if (objData.type === \"open_preview_popup\") {\n                    var objEventData = objData.data.data;\n                    if (objEventData.entity_type === \"EmailCommunicationMessage\") {\n                        this.set(\"_objEmailActivity\", {\n                            sSubjectId: objEventData.subject_id,\n                            sLinkedEntityId: objEventData.entity_id,\n                            sActivityId: objEventData.activity_id,\n                            sSubjectType: objEventData.subject_type\n                        });\n                        this.set(\"_bShowEmailMessagePopup\", true);\n                    } else if (objEventData.entity_type === \"ChatConversation\") {\n                        this.set(\"_bReactPopupOpen\", true);\n                        this.set(\"_objReactPopupPostData\", {\n                            type: \"trigger_route\",\n                            data: {\n                                route: \"agency/conversation/previewPopup\",\n                                data: { conversationId: objEventData.entity_id }\n                            }\n                        });\n                    } else if (objEventData.entity_type === \"CandidateNotifications\") {\n                        this.set(\"_objNotificationActivity\", {\n                            sSubjectId: objEventData.subject_id,\n                            sLinkedEntityId: objEventData.entity_id,\n                            sActivityId: objEventData.activity_id,\n                            sSubjectType: objEventData.subject_type\n                        });\n                        this.set(\"_bShowNotifcationsSentPopup\", true);\n                    }\n                }\n            },\n\n            onRecievePopupData: function onRecievePopupData(objData) {\n                if (objData.type === \"app_ready\" || objData.type === \"router_ready\") {\n                    this.set(\"_bReactPopupLoading\", false);\n                } else if (objData.type === \"close\") {\n                    this.set(\"_bReactPopupOpen\", false);\n                } else if (objData.type === \"popup_response\") {\n                    this.set(\"_objReactIframeData\", objData);\n                }\n            },\n            onEmailMessagePopupClose: function onEmailMessagePopupClose() {\n                this.set(\"_bShowEmailMessagePopup\", false);\n            },\n            onNotificationSentPopupClose: function onNotificationSentPopupClose() {\n                this.set(\"_bShowNotifcationsSentPopup\", false);\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-profile-health-info\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-health-info\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateProfileHealthInfo) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidateProfileHealthInfo.default,\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _bDisplayPermissionError: false,\n        _bLoading: true,\n        _sCandidateId: null,\n        _sIFrameUrl: null,\n        _objReactIframeData: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"index.agency-candidate-profile\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            this.set(\"_objReactIframeData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"candidate/healthInfo\",\n                    data: {\n                        candidateId: this.get(\"_sCandidateId\"),\n                        candidateDetails: this.get(\"_objBasicInfoService.objLastCandidateDetails\")\n                    }\n                }\n            });\n\n            this.getBasicInfo();\n        },\n\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        },\n        actions: {\n            onRecieveData: function onRecieveData(objData) {\n                if (objData.type === \"app_ready\" || objData.type === \"router_ready\") {\n                    this.set(\"_bLoading\", false);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-profile-languages\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-languages\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateProfileLanguages) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidateProfileLanguages.default,\n        _sCandidateId: null,\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objLanguagesService: Ember.inject.service(\"rest-agency-candidate-languages\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bDisplayPermissionError: false,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-profile\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-profile-misc-details\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-misc-details\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateProfileMiscDetails) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidateProfileMiscDetails.default,\n        _sCandidateId: null,\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objMiscDetailsService: Ember.inject.service(\"rest-agency-candidate-misc-details\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bDisplayPermissionError: false,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-profile\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            this.getBasicInfo();\n        },\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-profile-next-of-kin\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-next-of-kin\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateProfileNextOfKin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidateProfileNextOfKin.default,\n        _sCandidateId: null,\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objNextOfKinService: Ember.inject.service(\"rest-agency-candidate-next-of-kin\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objSettingsRestService: Ember.inject.service(\"rest-agency-candidate-settings\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bDisplayPermissionError: false,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-profile\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-profile-notifications-preferences\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-notifications-preferences\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateProfileNotificationsPreferences) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        _objDomService: Ember.inject.service(\"dom-event\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        layout: _tabAgencyCandidateProfileNotificationsPreferences.default,\n        _sCandidateId: null,\n        _sIFrameUrl: null,\n        _bLoading: true,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            // We need to specifically get the service since it is lazy loaded and incompatible with observe only\n            this.get(\"_objDomService.iPageHeight\");\n\n            var objCandidateViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-profile\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            this.set(\"_objReactIframeData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"candidate/notificationPreferences\",\n                    data: {\n                        candidateId: this.get(\"_sCandidateId\")\n                    }\n                }\n            });\n\n            this.getBasicInfo();\n        },\n\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        },\n        actions: {\n            onRecieveData: function onRecieveData(objData) {\n                if (objData.type === \"app_ready\" || objData.type === \"router_ready\") {\n                    this.set(\"_bLoading\", false);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-profile-occupational-health\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-occupational-health\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateProfileOccupationalHealth) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidateProfileOccupationalHealth.default,\n        _sIFrameUrl: null,\n        _sCandidateId: null,\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bDisplayPermissionError: false,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-profile\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sEnterpriseUrl + \"/candidate/\" + this.get(\"_sCandidateId\") + \"/occupational-health\");\n            }\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-profile-other-names\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-other-names\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateProfileOtherNames) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidateProfileOtherNames.default,\n        _sCandidateId: null,\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objOtherNamesService: Ember.inject.service(\"rest-agency-candidate-other-names\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objSettingsRestService: Ember.inject.service(\"rest-agency-candidate-settings\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bDisplayPermissionError: false,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-profile\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-profile-payroll-number\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-payroll-number\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateProfilePayrollNumber) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidateProfilePayrollNumber.default,\n        _sCandidateId: null,\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bDisplayPermissionError: false,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-profile\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            this.set(\"_objReactIframeData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"candidate/payrollNumberPage\",\n                    data: {\n                        candidateId: this.get(\"_sCandidateId\")\n                    }\n                }\n            });\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-profile-references-react\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-references-react\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateProfileReferencesReact) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidateProfileReferencesReact.default,\n        objQueryParams: null,\n        _sCandidateId: null,\n        _sViewReference: null,\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _objQueryParamBuilderService: Ember.inject.service(\"query-param-object-builder\"),\n        _bDisplayPermissionError: false,\n\n        _bReactPopupOpen: false,\n        _bReactPopupLoading: false,\n        _objReactPopupPostData: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-profile\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(this.get(\"_objNavigation.objRouteQueryParams.viewReference\"))) {\n                this.set(\"_sViewReference\", this.get(\"_objNavigation.objRouteQueryParams.viewReference\"));\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            if (!a24Core.isEmpty(this.get(\"_objNavigation.objRouteQueryParams.viewReference\"))) {\n                var arrQueryParams = [\"referencepage\"];\n                var objQueryParamsUpdate = { referencepage: \"v2\" };\n                objQueryParamsUpdate = Ember.Object.create(objQueryParamsUpdate);\n\n                this.set(\"objQueryParams\", this.get(\"_objQueryParamBuilderService\").createQueryParamObject(arrQueryParams, objQueryParamsUpdate, this.get(\"objQueryParams\"), false, true));\n\n                this.set(\"_objNavigation.objRouteQueryParams.referencepage\", \"v2\");\n            }\n\n            var objReactData = {\n                candidateId: this.get(\"_sCandidateId\")\n            };\n\n            if (!a24Core.isEmpty(this.get(\"_sViewReference\"))) {\n                var objViewRef = JSON.parse(atob(this.get(\"_sViewReference\")));\n                objReactData = Object.assign(objReactData, objViewRef);\n            }\n\n            this.set(\"_objReactIframeData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"candidate/references\",\n                    data: objReactData\n                }\n            });\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        },\n        actions: {\n            onReceiveReactData: function onReceiveReactData() {}\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-profile-right-to-work\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-right-to-work\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateProfileRightToWork) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidateProfileRightToWork.default,\n        _sIFrameUrl: null,\n        _sExtraParams: null,\n        _sCandidateId: null,\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bDisplayPermissionError: false,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-profile\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sEnterpriseUrl);\n            }\n\n            if (a24Core.isEmpty(this.get(\"_sExtraParams\"))) {\n                this.set(\"_sExtraParams\", \"/candidate/\" + this.get(\"_sCandidateId\") + \"/right-to-work\");\n            }\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-profile-tags\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-tags\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateProfileTags) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidateProfileTags.default,\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _bDisplayPermissionError: false,\n        _bLoading: true,\n        _sCandidateId: null,\n        _sIFrameUrl: null,\n        _objReactIframeData: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"index.agency-candidate-profile\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            this.set(\"_objReactIframeData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"candidate/assignedTags\",\n                    data: {\n                        candidateId: this.get(\"_sCandidateId\")\n                    }\n                }\n            });\n\n            this.getBasicInfo();\n        },\n\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        },\n        actions: {\n            onRecieveData: function onRecieveData(objData) {\n                if (objData.type === \"app_ready\" || objData.type === \"router_ready\") {\n                    this.set(\"_bLoading\", false);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-qualifications\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-qualifications\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateQualifications) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidateQualifications.default,\n        _bLoading: false,\n        _bServerError: false,\n        _arrReloadActions: null,\n        _sCandidateId: \"\",\n        _sCandidateType: \"\",\n        _sCandidateTypeName: \"\",\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objCandidateTypeRestService: Ember.inject.service(\"rest-agency-candidate-type\"),\n        _objCandidateProfileCandidateTypePromise: null,\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objBasicInfoGetPromise: null,\n        _objSettingsRestService: Ember.inject.service(\"rest-agency-candidate-settings\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objCandidateQualificationsRestService: Ember.inject.service(\"rest-agency-candidate-qualifications\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _bDisplayPermissionError: false,\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"index.agency-candidate-search-view\"];\n            var objCandidateSearchViewQualParams = this.get(\"_objNavigationService.objRouteParams\")[\"index.agency-candidate-search-view.qualifications.qualification\"];\n\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewQualParams)) {\n                this.set(\"_sCandidateType\", objCandidateSearchViewQualParams.candidate_type);\n            }\n\n            this.set(\"_arrReloadActions\", [{\n                sTitle: this.get(\"_objStringsCandidateProfile\").getString(\"reload\"),\n                sIcon: \"refresh\",\n                executeCardAction: function executeCardAction() {\n                    _this.set(\"_bServerError\", false);\n                    _this._getCandidateTypes();\n                }\n            }]);\n\n            this._getCandidateTypes();\n            this._getBasicInfo();\n        },\n\n        _onCurrentRouteChange: Ember.observer(\"_objNavigationService.objCurrentRouteParams\", function () {\n            if (!a24Core.isEmpty(this.get(\"_objNavigationService.objCurrentRouteParams\")[\"index.agency-candidate-search-view.qualifications\"])) {\n                var objCandidateSearchViewQualParams = this.get(\"_objNavigationService.objCurrentRouteParams\")[\"index.agency-candidate-search-view.qualifications.qualification\"];\n                if (a24Core.isEmpty(objCandidateSearchViewQualParams) && a24Core.isEmpty(this.get(\"_sCandidateType\")) || !a24Core.isEmpty(objCandidateSearchViewQualParams) && this.get(\"_sCandidateType\") === objCandidateSearchViewQualParams.candidate_type) {\n                    //Do nothing since they match\n                } else {\n                    this.set(\"_sCandidateType\", objCandidateSearchViewQualParams.candidate_type);\n                    this.set(\"_sCandidateTypeName\", \"\");\n                    this._getCandidateTypes();\n                }\n            }\n        }),\n\n        _getCandidateTypes: function _getCandidateTypes() {\n            var _this2 = this;\n\n            this.set(\"_bLoading\", true);\n            Ember.run.next(function () {\n                if (a24Core.isEmpty(_this2)) {\n                    return;\n                }\n                Ember.run.schedule(\"afterRender\", function () {\n                    _this2.get(\"_objCandidateTypeRestService\").getCandidateTypesCached(_this2, \"_objCandidateProfileCandidateTypePromise\", _this2.get(\"_objUserSession\").getUserContextReference().mId, function (arrData) {\n                        if (a24Core.isEmpty(arrData)) {\n                            arrData = [];\n                        }\n                        for (var i = 0; i < arrData.length; i++) {\n                            if (_this2.get(\"_sCandidateType\") === arrData[i]._id) {\n                                _this2.set(\"_sCandidateTypeName\", arrData[i].name);\n                                break;\n                            }\n                        }\n                        _this2.set(\"_bLoading\", false);\n                    }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () {\n                        _this2.set(\"_bServerError\", true);\n                        _this2.set(\"_bLoading\", false);\n                    }));\n                });\n            });\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        _getBasicInfo: function _getBasicInfo() {\n            var _this3 = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this3._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this3.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this3.set(\"_objStatusErrorPageService.sMessage\", _this3.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this3.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-skills\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-skills\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateSkills) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidateSkills.default,\n        _bLoading: false,\n        _bServerError: false,\n        _arrReloadActions: null,\n        _sCandidateId: \"\",\n        _sCandidateType: \"\",\n        _sCandidateTypeName: \"\",\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objCandidateTypeRestService: Ember.inject.service(\"rest-agency-candidate-type\"),\n        _objCandidateProfileCandidateTypePromise: null,\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objBasicInfoGetPromise: null,\n        _objSettingsRestService: Ember.inject.service(\"rest-agency-candidate-settings\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objCandidateSkillsRestService: Ember.inject.service(\"rest-agency-candidate-skills\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _bDisplayPermissionError: false,\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"index.agency-candidate-search-view\"];\n            var objCandidateSearchViewSkillParams = this.get(\"_objNavigationService.objRouteParams\")[\"index.agency-candidate-search-view.skills.skill\"];\n\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewSkillParams)) {\n                this.set(\"_sCandidateType\", objCandidateSearchViewSkillParams.candidate_type);\n            }\n\n            this.set(\"_arrReloadActions\", [{\n                sTitle: this.get(\"_objStringsCandidateProfile\").getString(\"reload\"),\n                sIcon: \"refresh\",\n                executeCardAction: function executeCardAction() {\n                    _this.set(\"_bServerError\", false);\n                    _this._getCandidateTypes();\n                }\n            }]);\n\n            this._getCandidateTypes();\n            this._getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        _onCurrentRouteChange: Ember.observer(\"_objNavigationService.objCurrentRouteParams\", function () {\n            if (!a24Core.isEmpty(this.get(\"_objNavigationService.objCurrentRouteParams\")[\"index.agency-candidate-search-view.skills\"])) {\n                var objCandidateSearchViewSkillsParams = this.get(\"_objNavigationService.objCurrentRouteParams\")[\"index.agency-candidate-search-view.skills.skill\"];\n                if (a24Core.isEmpty(objCandidateSearchViewSkillsParams) && a24Core.isEmpty(this.get(\"_sCandidateType\")) || !a24Core.isEmpty(objCandidateSearchViewSkillsParams) && this.get(\"_sCandidateType\") === objCandidateSearchViewSkillsParams.candidate_type) {\n                    //Do nothing since they match\n                } else {\n                    this.set(\"_sCandidateType\", objCandidateSearchViewSkillsParams.candidate_type);\n                    this.set(\"_sCandidateTypeName\", \"\");\n                    this._getCandidateTypes();\n                }\n            }\n        }),\n\n        _getCandidateTypes: function _getCandidateTypes() {\n            var _this2 = this;\n\n            this.set(\"_bLoading\", true);\n            Ember.run.next(function () {\n                if (a24Core.isEmpty(_this2)) {\n                    return;\n                }\n                Ember.run.schedule(\"afterRender\", function () {\n                    _this2.get(\"_objCandidateTypeRestService\").getCandidateTypesCached(_this2, \"_objCandidateProfileCandidateTypePromise\", _this2.get(\"_objUserSession\").getUserContextReference().mId, function (arrData) {\n                        if (a24Core.isEmpty(arrData)) {\n                            arrData = [];\n                        }\n                        for (var i = 0; i < arrData.length; i++) {\n                            if (_this2.get(\"_sCandidateType\") === arrData[i]._id) {\n                                _this2.set(\"_sCandidateTypeName\", arrData[i].name);\n                                break;\n                            }\n                        }\n                        _this2.set(\"_bLoading\", false);\n                    }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () {\n                        _this2.set(\"_bServerError\", true);\n                        _this2.set(\"_bLoading\", false);\n                    }));\n                });\n            });\n        },\n\n        _getBasicInfo: function _getBasicInfo() {\n            var _this3 = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this3._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this3.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this3.set(\"_objStatusErrorPageService.sMessage\", _this3.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this3.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-social-links-react\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-social-links-react\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateSocialLinksReact) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidateSocialLinksReact.default,\n        _sCandidateId: null,\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bDisplayPermissionError: false,\n        _sIFrameUrl: null,\n        _objReactIframeData: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            this.set(\"_objReactIframeData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"candidate/socialLinks/agencies/page\",\n                    data: {\n                        candidateId: this.get(\"_sCandidateId\")\n                    }\n                }\n            });\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        },\n        actions: {\n            onReceiveReactData: function onReceiveReactData() {}\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-candidate-work-history-react\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-work-history-react\"], function (exports, _didRenderChangesMixin, _tabAgencyCandidateWorkHistoryReact) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyCandidateWorkHistoryReact.default,\n        _sCandidateId: null,\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bDisplayPermissionError: false,\n        _sIFrameUrl: null,\n        _objReactIframeData: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-profile\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            this.set(\"_objReactIframeData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"candidate/workHistory\",\n                    data: {\n                        candidateId: this.get(\"_sCandidateId\")\n                    }\n                }\n            });\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        },\n        actions: {\n            onReceiveReactData: function onReceiveReactData() {}\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-position-held\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-position-held\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidatePositionHeld) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidatePositionHeld.default,\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bDisplayPermissionError: false,\n        _objBasicInfoGetPromise: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-view\"];\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            this.set(\"_objReactIframeData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"candidate/positionHeld\",\n                    data: {\n                        candidateId: this.get(\"_sCandidateId\")\n                    }\n                }\n            });\n\n            this.getBasicInfo();\n        },\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        },\n        actions: {\n            onRecieveData: function onRecieveData(objData) {\n                if (objData.type === \"app_ready\" || objData.type === \"router_ready\") {\n                    this.set(\"_bLoading\", false);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-professional-registration-react\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-professional-registration-react\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateProfessionalRegistrationReact) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidateProfessionalRegistrationReact.default,\n        classNames: [\"tab-agency-group-candidate-professional-registration-react\"],\n        _sCandidateId: \"\",\n        _sCandidateType: \"\",\n        _sCandidateTypeName: \"\",\n        _sIFrameUrl: null,\n        _objReactIframeData: null,\n        _bDisplayPermissionError: false,\n        _bReactPopupOpen: false,\n        _bReactPopupLoading: true,\n        _objReactPopupPostData: null,\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objBasicInfoGetPromise: null,\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objCandidateTypeRestService: Ember.inject.service(\"rest-agency-group-candidate-type\"),\n        _objCandidateProfileCandidateTypePromise: null,\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view\"];\n            var objCandidateSearchViewProfRegParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view.professional-registrations.professional-registration\"];\n\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewProfRegParams)) {\n                this.set(\"_sCandidateType\", objCandidateSearchViewProfRegParams.candidate_type);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            this._getCandidateTypes();\n            this._getBasicInfo();\n        },\n\n        _onCurrentRouteChange: Ember.observer(\"_objNavigationService.objCurrentRouteParams\", function () {\n            if (!a24Core.isEmpty(this.get(\"_objNavigationService.objCurrentRouteParams\")[\"agency-group.candidate-search-view.professional-registrations\"])) {\n                var objCandidateSearchViewProfRegParams = this.get(\"_objNavigationService.objCurrentRouteParams\")[\"agency-group.candidate-search-view.professional-registrations.professional-registration\"];\n                if (a24Core.isEmpty(objCandidateSearchViewProfRegParams) && a24Core.isEmpty(this.get(\"_sCandidateType\")) || !a24Core.isEmpty(objCandidateSearchViewProfRegParams) && this.get(\"_sCandidateType\") === objCandidateSearchViewProfRegParams.candidate_type) {\n                    //Do nothing since they match\n                } else {\n                    this.set(\"_sCandidateType\", objCandidateSearchViewProfRegParams.candidate_type);\n                    this.set(\"_sCandidateTypeName\", \"\");\n                    this._getCandidateTypes();\n                }\n            }\n        }),\n\n        _getCandidateTypes: function _getCandidateTypes() {\n            var _this = this;\n\n            Ember.run.next(function () {\n                if (a24Core.isEmpty(_this)) {\n                    return;\n                }\n                Ember.run.schedule(\"afterRender\", function () {\n                    _this.get(\"_objCandidateTypeRestService\").getCandidateTypesCached(_this, \"_objCandidateProfileCandidateTypePromise\", _this.get(\"_objUserSession\").getUserContextReference().mId, function (arrData) {\n                        if (a24Core.isEmpty(arrData)) {\n                            arrData = [];\n                        }\n                        for (var i = 0; i < arrData.length; i++) {\n                            if (_this.get(\"_sCandidateType\") === arrData[i]._id) {\n                                _this.set(\"_sCandidateTypeName\", arrData[i].name);\n                                break;\n                            }\n                        }\n                        _this._setReactIframeData();\n                    }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () {\n                        _this._setReactIframeData();\n                    }));\n                });\n            });\n        },\n\n        _setReactIframeData: function _setReactIframeData() {\n            this.set(\"_objReactIframeData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"candidate/professionalRegistration/page\",\n                    data: {\n                        candidateId: this.get(\"_sCandidateId\"),\n                        candidateType: this.get(\"_sCandidateType\"),\n                        candidateTypeName: this.get(\"_sCandidateTypeName\")\n                    }\n                }\n            });\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        _upsertTitleBarAction: function _upsertTitleBarAction(objActionData) {\n            var _this2 = this;\n\n            var objRightComponentData = this.get(\"_objTitleBarService.objRightComponentData\");\n\n            if (a24Core.isEmpty(objRightComponentData) || a24Core.isEmpty(objRightComponentData.arrActionItems)) {\n                return;\n            }\n\n            var sActionKey = objActionData.actionKey;\n            var objNewAction = {\n                sActionKey: sActionKey,\n                sTitle: objActionData.title,\n                sIcon: objActionData.icon,\n                executeCardAction: function executeCardAction() {\n                    _this2._openIframeActionPopup(objActionData.popupRoute, objActionData.popupData);\n                }\n            };\n\n            var arrCurrent = objRightComponentData.arrActionItems;\n            var arrNew = [];\n            var bReplaced = false;\n            for (var i = 0; i < arrCurrent.length; i++) {\n                if (arrCurrent[i].sActionKey === sActionKey) {\n                    arrNew.push(objNewAction);\n                    bReplaced = true;\n                } else {\n                    arrNew.push(arrCurrent[i]);\n                }\n            }\n            if (!bReplaced) {\n                arrNew.push(objNewAction);\n            }\n\n            var objNewRightComponentData = Object.assign({}, objRightComponentData, {\n                arrActionItems: arrNew\n            });\n\n            // card-actions-component reads objData.arrActionItems only in init and does\n            // not observe later mutations or new references. Bounce sRightComponent so\n            // the component is destroyed and re-instantiated with the new arrActionItems.\n            // Use `next` (separate runloop) so the null→card-actions-component flip is\n            // not coalesced — `schedule(\"afterRender\")` would run in the same runloop and\n            // the property would never appear to change.\n            var objService = this.get(\"_objTitleBarService\");\n            objService.setTitleBarPartially(null, null, null, \"CLEAR_VALUE\", null);\n            Ember.run.next(function () {\n                objService.setTitleBarPartially(null, null, null, \"card-actions-component\", objNewRightComponentData);\n            });\n        },\n\n        _openIframeActionPopup: function _openIframeActionPopup(sPopupRoute, objExtraPopupData) {\n            var sFirstName = this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") || \"\";\n            var sLastName = this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\") || \"\";\n            var sCandidateName = (sFirstName + \" \" + sLastName).trim();\n\n            var objPopupData = Object.assign({}, objExtraPopupData || {}, {\n                candidateId: this.get(\"_sCandidateId\"),\n                candidateName: sCandidateName\n            });\n\n            this.set(\"_objReactPopupPostData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: sPopupRoute,\n                    data: objPopupData\n                }\n            });\n\n            this.set(\"_bReactPopupOpen\", true);\n        },\n\n        _getBasicInfo: function _getBasicInfo() {\n            var _this3 = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this3._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode) {\n                    if (sCode === \"403\") {\n                        _this3.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this3.set(\"_objStatusErrorPageService.sMessage\", _this3.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this3.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        },\n        actions: {\n            onReceiveReactData: function onReceiveReactData(objData) {\n                if (!a24Core.isEmpty(objData) && objData.type === \"update_title_bar_actions\") {\n                    this._upsertTitleBarAction(objData.data);\n                }\n            },\n            onRecievePopupData: function onRecievePopupData(objData) {\n                if (objData.type === \"app_ready\" || objData.type === \"router_ready\") {\n                    this.set(\"_bReactPopupLoading\", false);\n                } else if (objData.type === \"close\") {\n                    this.set(\"_bReactPopupOpen\", false);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-compliance-exemptions\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-compliance-exemptions\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateProfileComplianceExemptions) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidateProfileComplianceExemptions.default,\n        objQueryParams: null,\n\n        _env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n        _sCandidateId: null,\n        _sCandidateName: null,\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objSettingsRestService: Ember.inject.service(\"rest-agency-group-candidate-settings\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bDisplayPermissionError: false,\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_env.sRestApiBaseUrl\"),\n        _sUrlBase: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            var objCandidateViewParams = this.get(\"_objNavigation.objRouteParams\")[\"agency-group.candidate-view\"];\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"agency-group.candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var sAgencyGroupId = this.get(\"_objNavigation.sContextId\");\n\n            this.set(\"_sUrlBase\", this.get(\"_sRestApiBaseUrl\") + \"/v1/agency-group/\" + sAgencyGroupId + \"/advanced-search/compliance-rule-exemption\");\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            var sFirstName = this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\");\n            var sLastName = this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\");\n            this.set(\"_sCandidateName\", sFirstName + \" \" + sLastName);\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + (sFirstName + \" \" + sLastName));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-compliance-passport\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-compliance-passport\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateProfileCompliancePassport) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidateProfileCompliancePassport.default,\n        _sCandidateId: null,\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bDisplayPermissionError: false,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigation.objRouteParams\")[\"agency-group.candidate-view\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"agency-group.candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            var objPostMessageData = {\n                candidateId: this.get(\"_sCandidateId\")\n            };\n\n            if (!a24Core.isEmpty(this.get(\"_objNavigation.objRouteQueryParams.complianceContractId\"))) {\n                objPostMessageData.complianceContractId = this.get(\"_objNavigation.objRouteQueryParams.complianceContractId\");\n            }\n\n            if (!a24Core.isEmpty(this.get(\"_objNavigation.objRouteQueryParams.agencyId\"))) {\n                objPostMessageData.agencyId = this.get(\"_objNavigation.objRouteQueryParams.agencyId\");\n            }\n\n            this.set(\"_objReactIframeData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"general/compliancePassportPage\",\n                    data: objPostMessageData\n                }\n            });\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-crb-check\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-crb-check\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateProfileCrbCheck) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidateProfileCrbCheck.default,\n        _sIFrameUrl: null,\n        _sCandidateId: null,\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bDisplayPermissionError: false,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigation.objRouteParams\")[\"agency-group.candidate-view\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"agency-group.candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sEnterpriseUrl + \"/candidate/\" + this.get(\"_sCandidateId\") + \"/crb-check\");\n            }\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-dismissals\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-dismissals\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateProfileDismissals) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidateProfileDismissals.default,\n        _sCandidateId: \"\",\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objBasicInfoGetPromise: null,\n        _objSettingsRestService: Ember.inject.service(\"rest-agency-group-candidate-settings\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objEmploymentDismissalsService: Ember.inject.service(\"rest-agency-group-candidate-employment-dismissals\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _bDisplayPermissionError: false,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-view\"];\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-documents-react\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-documents-react\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateProfileDocumentsReact) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidateProfileDocumentsReact.default,\n        _sCandidateId: null,\n        _sViewVerifiedDocs: null,\n        _sViewDocuments: null,\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _bDisplayPermissionError: false,\n        _sIFrameUrl: null,\n        _objReactIframeData: null,\n\n        _bReactPopupOpen: false,\n        _bReactPopupLoading: false,\n        _objReactPopupPostData: null,\n\n        _objVerifiedDocWindow: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            if (a24Core.isEmpty(this.get(\"_objVerifiedDocWindow\"))) {\n                this.set(\"_objVerifiedDocWindow\", {});\n            }\n\n            var objCandidateViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-view\"];\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(this.get(\"_objNavigationService.objRouteQueryParams.viewVerifiedDocument\"))) {\n                this.set(\"_sViewVerifiedDocs\", this.get(\"_objNavigationService.objRouteQueryParams.viewVerifiedDocument\"));\n            }\n\n            if (!a24Core.isEmpty(this.get(\"_objNavigationService.objRouteQueryParams.viewDocument\"))) {\n                this.set(\"_sViewDocuments\", this.get(\"_objNavigationService.objRouteQueryParams.viewDocument\"));\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            if (!a24Core.isEmpty(this.get(\"_sViewVerifiedDocs\"))) {\n                this.set(\"_bReactPopupOpen\", true);\n                this.set(\"_objReactPopupPostData\", {\n                    type: \"trigger_route\",\n                    data: {\n                        route: \"documents/agencyGroupCandidate/verfiedDocument/popup\",\n                        data: JSON.parse(atob(this.get(\"_sViewVerifiedDocs\")))\n                    }\n                });\n            } else {\n                var objViewDocuments = {};\n                if (!a24Core.isEmpty(this.get(\"_sViewDocuments\"))) {\n                    objViewDocuments = JSON.parse(atob(this.get(\"_sViewDocuments\")));\n                }\n\n                var objData = Object.assign({ candidateId: this.get(\"_sCandidateId\") }, objViewDocuments);\n\n                this.set(\"_objReactIframeData\", {\n                    type: \"trigger_route\",\n                    data: {\n                        route: \"documents/page\",\n                        data: objData\n                    }\n                });\n            }\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        },\n        actions: {\n            onReceiveReactData: function onReceiveReactData(objData) {\n                if (objData.type === \"openViewVerifiedDocument\") {\n                    var sRoute = \"candidate-search-view.documents\";\n                    var objParams = {\n                        \"candidate-search-view\": [this.get(\"_sCandidateId\")]\n                    };\n                    var objQueryParams = {\n                        viewVerifiedDocument: btoa(JSON.stringify(objData.data))\n                    };\n\n                    var sUrlWithinContext = this.get(\"_objNavigationService\").navigateWithinContext(sRoute, objParams, objQueryParams, true, true);\n\n                    this.get(\"_objVerifiedDocWindow\")[objData.data.requestId] = window.open(sUrlWithinContext, \"_blank\");\n                } else if (objData.type === \"closeViewVerifiedDocument\") {\n                    if (!a24Core.isEmpty(this.get(\"_objVerifiedDocWindow\")[objData.data.requestId])) {\n                        this.get(\"_objVerifiedDocWindow\")[objData.data.requestId].close();\n                        delete this.get(\"_objVerifiedDocWindow\")[objData.data.requestId];\n                    }\n                }\n            },\n            onReceiveReactPopupData: function onReceiveReactPopupData(objData) {\n                if (objData.type === \"app_ready\") {\n                    this.set(\"_bReactPopupLoading\", false);\n                } else if (objData.type === \"close\") {\n                    this.set(\"_bReactPopupOpen\", false);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-equality\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-equality\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateProfileEquality) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidateProfileEquality.default,\n        _sCandidateId: null,\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objEqualityMonitoringService: Ember.inject.service(\"rest-agency-group-equality-monitoring\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _bDisplayPermissionError: false,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-view\"];\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-external-info\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-external-info\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateProfileExternalInfo) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidateProfileExternalInfo.default,\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objCandidateProfileEnumsService: Ember.inject.service(\"a24-enums-candidate-profile\"),\n        _objCandidateAdvancedSearchRestService: Ember.inject.service(\"rest-agency-group-candidate-advanced-search\"),\n        _arrExternalData: null,\n        // Commented out for this ticket https://github.com/A24Group/react-core/issues/3410\n        // _arrExternalDocumentsData: null,\n        _arrExternalVerificationsData: null,\n        // Commented out for this ticket https://github.com/A24Group/react-core/issues/2995\n        // _arrExternalDaysToExpiryData: null,\n        _bDisplayReloadCard: false,\n        _arrReloadActions: null,\n        _bLoading: true,\n        _bDisplayPermissionError: false,\n        _sActivityContext: null,\n        _objCandidateSearchPostPromise: null,\n        _objLastCandidateDetails: null,\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-view\"];\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            this.set(\"_arrReloadActions\", [{\n                sTitle: this.get(\"_objCandidateProfileStringsService\").getString(\"reload\"),\n                sIcon: \"refresh\",\n                executeCardAction: function executeCardAction() {\n                    _this.doServiceCalls();\n                }\n            }]);\n\n            this.doServiceCalls();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objCandidateProfileStringsService\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objLastCandidateDetails.last_name\"));\n        },\n\n        doServiceCalls: function doServiceCalls() {\n            var _this2 = this;\n\n            var sCandidateId = this.get(\"_sCandidateId\");\n\n            this.get(\"_objCandidateAdvancedSearchRestService\").searchCandidate(this, \"_objCandidateSearchPostPromise\", sCandidateId, function (arrCandidateData) {\n                var objData = arrCandidateData[0];\n                _this2.set(\"_objLastCandidateDetails\", objData);\n                _this2._setTitleBar();\n\n                var arrExternalGeneral = [];\n                var sDbsStatus = \"\";\n                if (!a24Core.isEmpty(objData.dbs_status)) {\n                    sDbsStatus = _this2.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"dbsStatuses\", objData.dbs_status);\n                }\n\n                var sDbsWorkforce = \"\";\n                if (!a24Core.isEmpty(objData.external_workforce)) {\n                    sDbsWorkforce = _this2.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"dbsWorforce\", objData.external_workforce);\n                }\n\n                var sLastContacted = \"\";\n                if (!a24Core.isEmpty(objData.last_contacted_at)) {\n                    var objLastContactedyDateTime = a24DateManager.createDate(_this2.get(\"_objUserSession\").get(\"objContextDetails.sTimezone\"));\n                    objLastContactedyDateTime.setDateFromRest(objData.last_contacted_at);\n                    sLastContacted = objLastContactedyDateTime.getDateFormat();\n                }\n\n                arrExternalGeneral = [];\n\n                if (_this2.get(\"_objUserSession.objContextDetails.sCountryId\") === \"826\") {\n                    arrExternalGeneral.push({\n                        sLabel: _this2.get(\"_objCandidateProfileStringsService\").getString(\"dbsStatus\"),\n                        sValue: sDbsStatus,\n                        bText: true\n                    });\n                }\n                arrExternalGeneral.push({\n                    sLabel: _this2.get(\"_objCandidateProfileStringsService\").getString(\"lastContacted\"),\n                    sValue: sLastContacted,\n                    bText: true\n                });\n                if (_this2.get(\"_objUserSession.objContextDetails.sCountryId\") === \"826\") {\n                    arrExternalGeneral.push({\n                        sLabel: _this2.get(\"_objCandidateProfileStringsService\").getString(\"externalWorkforce\"),\n                        sValue: sDbsWorkforce,\n                        bText: true\n                    });\n                }\n\n                _this2.set(\"_arrExternalData\", arrExternalGeneral);\n\n                // Commented out for this ticket https://github.com/A24Group/react-core/issues/3410\n                // var arrExternalDocuments = [];\n                // if (!a24Core.isEmpty(objData.external_documents)) {\n                //     arrExternalDocuments = objData.external_documents;\n                // }\n\n                // this.set(\"_arrExternalDocumentsData\", arrExternalDocuments);\n\n                var arrExternalVerifications = [];\n                if (!a24Core.isEmpty(objData.external_verifications)) {\n                    arrExternalVerifications = objData.external_verifications;\n                }\n\n                _this2.set(\"_arrExternalVerificationsData\", arrExternalVerifications);\n\n                // Commented out for this ticket https://github.com/A24Group/react-core/issues/2995\n                // var arrExternalDaysToExpiry = [];\n                // if (!a24Core.isEmpty(objData.external_days_to_expiry)) {\n                //     arrExternalDaysToExpiry = objData.external_days_to_expiry;\n                // }\n\n                // this.set(\"_arrExternalDaysToExpiryData\", arrExternalDaysToExpiry);\n\n                _this2.set(\"_bLoading\", false);\n            }, // handled in rsvp\n            a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode /*, sStatus, objErrorThrown, objError*/) {\n                if (sCode === \"500\" || sCode === \"502\" || sCode === \"503\" || sCode === \"504\") {\n                    _this2.set(\"_bDisplayReloadCard\", true);\n                    return;\n                }\n\n                // Clear data\n                _this2.set(\"_arrExternalData\", []);\n                // this.set(\"_arrExternalDocumentsData\", []);\n                _this2.set(\"_arrExternalVerificationsData\", []);\n                _this2.set(\"_bLoading\", false);\n            }));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-general-react\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-general-react\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateProfileGeneralReact) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidateProfileGeneralReact.default,\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _bDisplayPermissionError: false,\n        _sCandidateId: null,\n        _sIFrameUrl: null,\n        _objReactIframeData: null,\n        _objReactPopupPostData: null,\n        _bReactPopupOpen: false,\n        _bReactPopupLoading: true,\n        _objEmailActivity: null,\n        _objNotificationActivity: null,\n        _bShowEmailMessagePopup: false,\n        _bShowNotifcationsSentPopup: false,\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objRestAgencyGroupCandidateActivityEmailComm: Ember.inject.service(\"rest-agency-group-activity-email-communication-message\"),\n        _objRestAgencyGroupCandidateActivityNotification: Ember.inject.service(\"rest-agency-group-activity-notification\"),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-view\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            this.set(\"_objReactIframeData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"candidate/generalInfo/agencies/page\",\n                    data: {\n                        candidateId: this.get(\"_sCandidateId\")\n                    }\n                }\n            });\n\n            this.getBasicInfo();\n        },\n\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        },\n        actions: {\n            onRecieveData: function onRecieveData(objData) {\n                if (objData.type === \"trigger_route\") {\n                    this.set(\"_objReactPopupPostData\", objData);\n                    this.set(\"_bReactPopupOpen\", true);\n                } else if (objData.type === \"open_preview_popup\") {\n                    var objEventData = objData.data.data;\n                    if (objEventData.entity_type === \"EmailCommunicationMessage\") {\n                        this.set(\"_objEmailActivity\", {\n                            sSubjectId: objEventData.subject_id,\n                            sLinkedEntityId: objEventData.entity_id,\n                            sActivityId: objEventData.activity_id,\n                            sSubjectType: objEventData.subject_type\n                        });\n                        this.set(\"_bShowEmailMessagePopup\", true);\n                    } else if (objEventData.entity_type === \"ChatConversation\") {\n                        this.set(\"_bReactPopupOpen\", true);\n                        this.set(\"_objReactPopupPostData\", {\n                            type: \"trigger_route\",\n                            data: {\n                                route: \"agency/conversation/previewPopup\",\n                                data: { conversationId: objEventData.entity_id }\n                            }\n                        });\n                    } else if (objEventData.entity_type === \"CandidateNotifications\") {\n                        this.set(\"_objNotificationActivity\", {\n                            sSubjectId: objEventData.subject_id,\n                            sLinkedEntityId: objEventData.entity_id,\n                            sActivityId: objEventData.activity_id,\n                            sSubjectType: objEventData.subject_type\n                        });\n                        this.set(\"_bShowNotifcationsSentPopup\", true);\n                    }\n                }\n            },\n\n            onRecievePopupData: function onRecievePopupData(objData) {\n                if (objData.type === \"app_ready\" || objData.type === \"router_ready\") {\n                    this.set(\"_bReactPopupLoading\", false);\n                } else if (objData.type === \"close\") {\n                    this.set(\"_bReactPopupOpen\", false);\n                } else if (objData.type === \"popup_response\") {\n                    this.set(\"_objReactIframeData\", objData);\n                }\n            },\n            onEmailMessagePopupClose: function onEmailMessagePopupClose() {\n                this.set(\"_bShowEmailMessagePopup\", false);\n            },\n            onNotificationSentPopupClose: function onNotificationSentPopupClose() {\n                this.set(\"_bShowNotifcationsSentPopup\", false);\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-health-info\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-health-info\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateProfileHealthInfo) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidateProfileHealthInfo.default,\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _bDisplayPermissionError: false,\n        _bLoading: true,\n        _sCandidateId: null,\n        _sIFrameUrl: null,\n        _objReactIframeData: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-view\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            this.set(\"_objReactIframeData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"candidate/healthInfo\",\n                    data: {\n                        candidateId: this.get(\"_sCandidateId\"),\n                        candidateDetails: this.get(\"_objBasicInfoService.objLastCandidateDetails\")\n                    }\n                }\n            });\n\n            this.getBasicInfo();\n        },\n\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        },\n        actions: {\n            onRecieveData: function onRecieveData(objData) {\n                if (objData.type === \"app_ready\" || objData.type === \"router_ready\") {\n                    this.set(\"_bLoading\", false);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-languages\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-languages\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateProfileLanguages) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidateProfileLanguages.default,\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objLanguagesService: Ember.inject.service(\"rest-agency-group-candidate-languages\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _bDisplayPermissionError: false,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-view\"];\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-misc-details\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-misc-details\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateProfileMiscDetails) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidateProfileMiscDetails.default,\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objMiscDetailsService: Ember.inject.service(\"rest-agency-group-candidate-misc-details\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _objSettingsRestService: Ember.inject.service(\"rest-agency-group-candidate-settings\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _bDisplayPermissionError: false,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-view\"];\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-next-of-kin\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-next-of-kin\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateProfileNextOfKin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidateProfileNextOfKin.default,\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objNextOfKinService: Ember.inject.service(\"rest-agency-group-candidate-next-of-kin\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _bDisplayPermissionError: false,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-view\"];\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-notifications-preferences\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-notifications-preferences\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateProfileNotificationsPreferences) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        _objDomService: Ember.inject.service(\"dom-event\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        layout: _tabAgencyGroupCandidateProfileNotificationsPreferences.default,\n        _bLoading: true,\n        _sCandidateId: null,\n        _sIFrameUrl: null,\n        _objReactIframeData: null,\n        _objBasicInfoGetPromise: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-view\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            this.set(\"_objReactIframeData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"candidate/notificationPreferences\",\n                    data: {\n                        candidateId: this.get(\"_sCandidateId\")\n                    }\n                }\n            });\n\n            this.getBasicInfo();\n        },\n\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        },\n        actions: {\n            onRecieveData: function onRecieveData(objData) {\n                if (objData.type === \"app_ready\" || objData.type === \"router_ready\") {\n                    this.set(\"_bLoading\", false);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-occupational-health\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-occupational-health\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateProfileOccupationalHealth) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidateProfileOccupationalHealth.default,\n        _sIFrameUrl: null,\n        _sCandidateId: null,\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bDisplayPermissionError: false,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigation.objRouteParams\")[\"agency-group.candidate-view\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"agency-group.candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sEnterpriseUrl + \"/candidate/\" + this.get(\"_sCandidateId\") + \"/occupational-health\");\n            }\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-other-names\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-other-names\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateProfileOtherNames) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidateProfileOtherNames.default,\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objOtherNamesService: Ember.inject.service(\"rest-agency-group-candidate-other-names\"),\n        _objSettingsRestService: Ember.inject.service(\"rest-agency-group-candidate-settings\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _bDisplayPermissionError: false,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-view\"];\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function (objData) {\n                var sCandidateProfile = _this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\");\n                var sCandidateName = objData.first_name + \" \" + objData.last_name;\n\n                _this.set(\"_objTitleBarService.sTitle\", sCandidateProfile + \" - \" + sCandidateName);\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n            function (sCode) {\n                if (sCode === \"403\") {\n                    _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                    _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                    _this.set(\"_bDisplayPermissionError\", true);\n                }\n            }));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-payroll-number\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-payroll-number\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateProfilePayrollNumber) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidateProfilePayrollNumber.default,\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _bDisplayPermissionError: false,\n        _sIFrameUrl: null,\n        _objReactIframeData: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-view\"];\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            this.set(\"_objReactIframeData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"candidate/payrollNumberPage\",\n                    data: {\n                        candidateId: this.get(\"_sCandidateId\")\n                    }\n                }\n            });\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-plugins\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-plugins\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateProfilePlugins) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidateProfilePlugins.default,\n        _sCandidateId: null,\n        _bDisplayPermissionError: false,\n        _bDisplayReloadCard: false,\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objPluginService: Ember.inject.service(\"rest-agency-group-candidate-plugin\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _objBasicInfoGetPromise: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-view\"];\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-policy\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-policy\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateProfilePolicy) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidateProfilePolicy.default,\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objCandidatePolicyGroupService: Ember.inject.service(\"rest-agency-group-candidate-policy-group\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _bDisplayPermissionError: false,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-view\"];\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-references-react\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-references-react\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateProfileReferencesReact) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidateProfileReferencesReact.default,\n        objQueryParams: null,\n        _sCandidateId: null,\n        _sViewReference: null,\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objQueryParamBuilderService: Ember.inject.service(\"query-param-object-builder\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _bDisplayPermissionError: false,\n        _sIFrameUrl: null,\n        _objReactIframeData: null,\n\n        _bReactPopupOpen: false,\n        _bReactPopupLoading: false,\n        _objReactPopupPostData: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-view\"];\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(this.get(\"_objNavigationService.objRouteQueryParams.viewReference\"))) {\n                this.set(\"_sViewReference\", this.get(\"_objNavigationService.objRouteQueryParams.viewReference\"));\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            if (!a24Core.isEmpty(this.get(\"_objNavigationService.objRouteQueryParams.viewReference\"))) {\n                var arrQueryParams = [\"referencepage\"];\n                var objQueryParamsUpdate = { referencepage: \"v2\" };\n                objQueryParamsUpdate = Ember.Object.create(objQueryParamsUpdate);\n\n                this.set(\"objQueryParams\", this.get(\"_objQueryParamBuilderService\").createQueryParamObject(arrQueryParams, objQueryParamsUpdate, this.get(\"objQueryParams\"), false, true));\n\n                this.set(\"_objNavigationService.objRouteQueryParams.referencepage\", \"v2\");\n            }\n\n            var objReactData = {\n                candidateId: this.get(\"_sCandidateId\")\n            };\n\n            if (!a24Core.isEmpty(this.get(\"_sViewReference\"))) {\n                var objViewRef = JSON.parse(atob(this.get(\"_sViewReference\")));\n                objReactData = Object.assign(objReactData, objViewRef);\n            }\n\n            this.set(\"_objReactIframeData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"candidate/references\",\n                    data: objReactData\n                }\n            });\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        },\n        actions: {\n            onReceiveReactData: function onReceiveReactData() {}\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-right-to-work\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-right-to-work\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateProfileRightToWork) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidateProfileRightToWork.default,\n        _sIFrameUrl: null,\n        _sExtraParams: null,\n        _sCandidateId: null,\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bDisplayPermissionError: false,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigation.objRouteParams\")[\"agency-group.candidate-view\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"agency-group.candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sEnterpriseUrl);\n            }\n\n            if (a24Core.isEmpty(this.get(\"_sExtraParams\"))) {\n                this.set(\"_sExtraParams\", \"/candidate/\" + this.get(\"_sCandidateId\") + \"/right-to-work\");\n            }\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-profile-tags\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-tags\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateProfileTags) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidateProfileTags.default,\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _bDisplayPermissionError: false,\n        _bLoading: true,\n        _sCandidateId: null,\n        _sIFrameUrl: null,\n        _objReactIframeData: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-view\"];\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            this.set(\"_objReactIframeData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"candidate/assignedTags\",\n                    data: {\n                        candidateId: this.get(\"_sCandidateId\")\n                    }\n                }\n            });\n\n            this.getBasicInfo();\n        },\n\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        },\n        actions: {\n            onRecieveData: function onRecieveData(objData) {\n                if (objData.type === \"app_ready\" || objData.type === \"router_ready\") {\n                    this.set(\"_bLoading\", false);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-qualifications\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-qualifications\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateQualifications) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidateQualifications.default,\n        _bLoading: false,\n        _bServerError: false,\n        _arrReloadActions: null,\n        _sCandidateId: \"\",\n        _sCandidateType: \"\",\n        _sCandidateTypeName: \"\",\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objBasicInfoGetPromise: null,\n        _objSettingsRestService: Ember.inject.service(\"rest-agency-group-candidate-settings\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objCandidateQualificationsRestService: Ember.inject.service(\"rest-agency-group-candidate-qualifications\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objCandidateTypeRestService: Ember.inject.service(\"rest-agency-group-candidate-type\"),\n        _objCandidateProfileCandidateTypePromise: null,\n        _bDisplayPermissionError: false,\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view\"];\n            var objCandidateSearchViewQualParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view.qualifications.qualification\"];\n\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewQualParams)) {\n                this.set(\"_sCandidateType\", objCandidateSearchViewQualParams.candidate_type);\n            }\n\n            this.set(\"_arrReloadActions\", [{\n                sTitle: this.get(\"_objStringsCandidateProfile\").getString(\"reload\"),\n                sIcon: \"refresh\",\n                executeCardAction: function executeCardAction() {\n                    _this.set(\"_bServerError\", false);\n                    _this._getCandidateTypes();\n                }\n            }]);\n\n            this._getCandidateTypes();\n            this._getBasicInfo();\n        },\n\n        _onCurrentRouteChange: Ember.observer(\"_objNavigationService.objCurrentRouteParams\", function () {\n            if (!a24Core.isEmpty(this.get(\"_objNavigationService.objCurrentRouteParams\")[\"index.agency-candidate-search-view.qualifications\"])) {\n                var objCandidateSearchViewQualParams = this.get(\"_objNavigationService.objCurrentRouteParams\")[\"index.agency-candidate-search-view.qualifications.qualification\"];\n                if (a24Core.isEmpty(objCandidateSearchViewQualParams) && a24Core.isEmpty(this.get(\"_sCandidateType\")) || !a24Core.isEmpty(objCandidateSearchViewQualParams) && this.get(\"_sCandidateType\") === objCandidateSearchViewQualParams.candidate_type) {\n                    //Do nothing since they match\n                } else {\n                    this.set(\"_sCandidateType\", objCandidateSearchViewQualParams.candidate_type);\n                    this.set(\"_sCandidateTypeName\", \"\");\n                    this._getCandidateTypes();\n                }\n            }\n        }),\n\n        _getCandidateTypes: function _getCandidateTypes() {\n            var _this2 = this;\n\n            this.set(\"_bLoading\", true);\n            Ember.run.next(function () {\n                if (a24Core.isEmpty(_this2)) {\n                    return;\n                }\n                Ember.run.schedule(\"afterRender\", function () {\n                    _this2.get(\"_objCandidateTypeRestService\").getCandidateTypesCached(_this2, \"_objCandidateProfileCandidateTypePromise\", _this2.get(\"_objUserSession\").getUserContextReference().mId, function (arrData) {\n                        if (a24Core.isEmpty(arrData)) {\n                            arrData = [];\n                        }\n                        for (var i = 0; i < arrData.length; i++) {\n                            if (_this2.get(\"_sCandidateType\") === arrData[i]._id) {\n                                _this2.set(\"_sCandidateTypeName\", arrData[i].name);\n                                break;\n                            }\n                        }\n                        _this2.set(\"_bLoading\", false);\n                    }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () {\n                        _this2.set(\"_bServerError\", true);\n                        _this2.set(\"_bLoading\", false);\n                    }));\n                });\n            });\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        _getBasicInfo: function _getBasicInfo() {\n            var _this3 = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this3._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this3.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this3.set(\"_objStatusErrorPageService.sMessage\", _this3.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this3.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-skills\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-skills\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateSkills) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidateSkills.default,\n        _bLoading: false,\n        _bServerError: false,\n        _arrReloadActions: null,\n        _sCandidateId: \"\",\n        _sCandidateType: \"\",\n        _sCandidateTypeName: \"\",\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objBasicInfoGetPromise: null,\n        _objSettingsRestService: Ember.inject.service(\"rest-agency-group-candidate-settings\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objCandidateSkillsRestService: Ember.inject.service(\"rest-agency-group-candidate-skills\"),\n        _objCandidateStatedSkillsRestService: Ember.inject.service(\"rest-agency-group-candidate-stated-skills\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objCandidateTypeRestService: Ember.inject.service(\"rest-agency-group-candidate-type\"),\n        _objCandidateProfileCandidateTypePromise: null,\n        _bDisplayPermissionError: false,\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view\"];\n            var objCandidateSearchViewSkillParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view.skills.skill\"];\n\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewSkillParams)) {\n                this.set(\"_sCandidateType\", objCandidateSearchViewSkillParams.candidate_type);\n            }\n\n            this.set(\"_arrReloadActions\", [{\n                sTitle: this.get(\"_objStringsCandidateProfile\").getString(\"reload\"),\n                sIcon: \"refresh\",\n                executeCardAction: function executeCardAction() {\n                    _this.set(\"_bServerError\", false);\n                    _this._getCandidateTypes();\n                }\n            }]);\n\n            this._getCandidateTypes();\n            this._getBasicInfo();\n        },\n\n        _onCurrentRouteChange: Ember.observer(\"_objNavigationService.objCurrentRouteParams\", function () {\n            if (!a24Core.isEmpty(this.get(\"_objNavigationService.objCurrentRouteParams\")[\"index.agency-candidate-search-view.qualifications\"])) {\n                var objCandidateSearchViewQualParams = this.get(\"_objNavigationService.objCurrentRouteParams\")[\"index.agency-candidate-search-view.qualifications.qualification\"];\n                if (a24Core.isEmpty(objCandidateSearchViewQualParams) && a24Core.isEmpty(this.get(\"_sCandidateType\")) || !a24Core.isEmpty(objCandidateSearchViewQualParams) && this.get(\"_sCandidateType\") === objCandidateSearchViewQualParams.candidate_type) {\n                    //Do nothing since they match\n                } else {\n                    this.set(\"_sCandidateType\", objCandidateSearchViewQualParams.candidate_type);\n                    this.set(\"_sCandidateTypeName\", \"\");\n                    this._getCandidateTypes();\n                }\n            }\n        }),\n\n        _getCandidateTypes: function _getCandidateTypes() {\n            var _this2 = this;\n\n            this.set(\"_bLoading\", true);\n            Ember.run.next(function () {\n                if (a24Core.isEmpty(_this2)) {\n                    return;\n                }\n                Ember.run.schedule(\"afterRender\", function () {\n                    _this2.get(\"_objCandidateTypeRestService\").getCandidateTypesCached(_this2, \"_objCandidateProfileCandidateTypePromise\", _this2.get(\"_objUserSession\").getUserContextReference().mId, function (arrData) {\n                        if (a24Core.isEmpty(arrData)) {\n                            arrData = [];\n                        }\n                        for (var i = 0; i < arrData.length; i++) {\n                            if (_this2.get(\"_sCandidateType\") === arrData[i]._id) {\n                                _this2.set(\"_sCandidateTypeName\", arrData[i].name);\n                                break;\n                            }\n                        }\n                        _this2.set(\"_bLoading\", false);\n                    }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () {\n                        _this2.set(\"_bServerError\", true);\n                        _this2.set(\"_bLoading\", false);\n                    }));\n                });\n            });\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n\n        _getBasicInfo: function _getBasicInfo() {\n            var _this3 = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this3._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this3.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this3.set(\"_objStatusErrorPageService.sMessage\", _this3.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this3.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-social-links-react\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-social-links-react\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateSocialLinksReact) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidateSocialLinksReact.default,\n        _sCandidateId: null,\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bDisplayPermissionError: false,\n        _sIFrameUrl: null,\n        _objReactIframeData: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            this.set(\"_objReactIframeData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"candidate/socialLinks/agencies/page\",\n                    data: {\n                        candidateId: this.get(\"_sCandidateId\")\n                    }\n                }\n            });\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        },\n        actions: {\n            onReceiveReactData: function onReceiveReactData() {}\n        }\n    });\n});","define(\"a24-ember-candidate-profile/components/tab-agency-group-candidate-work-history-react\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-work-history-react\"], function (exports, _didRenderChangesMixin, _tabAgencyGroupCandidateWorkHistoryReact) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tabAgencyGroupCandidateWorkHistoryReact.default,\n        _sCandidateId: null,\n        _objBasicInfoService: Ember.inject.service(\"rest-agency-group-candidate-basic-info\"),\n        _objStringsCandidateProfile: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bDisplayPermissionError: false,\n        _sIFrameUrl: null,\n        _objReactIframeData: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objCandidateViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-view\"];\n            var objCandidateSearchViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"agency-group.candidate-search-view\"];\n\n            if (!a24Core.isEmpty(objCandidateViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateViewParams.candidate_id);\n            }\n            if (!a24Core.isEmpty(objCandidateSearchViewParams)) {\n                this.set(\"_sCandidateId\", objCandidateSearchViewParams.candidate_id);\n            }\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            this.set(\"_objReactIframeData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"candidate/workHistory\",\n                    data: {\n                        candidateId: this.get(\"_sCandidateId\")\n                    }\n                }\n            });\n\n            this.getBasicInfo();\n        },\n\n        _setTitleBar: function _setTitleBar() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(this.get(\"_objStringsCandidateProfile\").getString(\"candidateProfile\") + \" - \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.first_name\") + \" \" + this.get(\"_objBasicInfoService.objLastCandidateDetails.last_name\"));\n        },\n        getBasicInfo: function getBasicInfo() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objBasicInfoService.objLastCandidateDetails\"))) {\n                this._setTitleBar();\n            } else {\n                this.get(\"_objBasicInfoService\").getBasicInfo(this, \"_objBasicInfoGetPromise\", this.get(\"_sCandidateId\"), function () {\n                    _this._setTitleBar();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], // Handle all errors currently\n                function (sCode) {\n                    if (sCode === \"403\") {\n                        _this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n                        _this.set(\"_objStatusErrorPageService.sMessage\", _this.get(\"_objStringsCandidateProfile\").getString(\"permissionsError\"));\n                        _this.set(\"_bDisplayPermissionError\", true);\n                    }\n                }));\n            }\n        },\n        actions: {\n            onReceiveReactData: function onReceiveReactData() {}\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/a24-constants-candidate-profile\", [\"exports\", \"a24-ember-lookup/services/a24-constants-base\"], function (exports, _a24ConstantsBase) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _a24ConstantsBase.default.extend({\n    CONVERT_MILES_TO_METERS: 1609.344,\n    CONVERT_KILOMETERS_TO_METERS: 1000\n  });\n});","define(\"a24-ember-candidate-profile/services/a24-enums-candidate-profile\", [\"exports\", \"a24-ember-lookup/services/a24-enums-base\"], function (exports, _a24EnumsBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _a24EnumsBase.default.extend({\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objSSCoreStringsService: Ember.inject.service(\"a24-strings-staffshift-core\"),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objStrings = this.get(\"_objStringsService\");\n            var objCandidateProfileStrings = this.get(\"_objCandidateProfileStringsService\");\n            var objSSCoreStringsService = this.get(\"_objSSCoreStringsService\");\n\n            this.set(\"userStatuses\", {\n                \"SETUP_COMPLETE\": {\n                    \"backend\": \"Setup Complete\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"setupComplete\")\n                },\n                \"EMAIL_NOT_VERIFIED\": {\n                    \"backend\": \"Email not Verified\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"emailNotVerified\")\n                },\n                \"INVITE_SENT\": {\n                    \"backend\": \"Invite Sent\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"inviteSent\")\n                },\n                \"USER_REG_NOT_INITIATED\": {\n                    \"backend\": \"User Reg not Initiated\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"userRegNotInitiated\")\n                }\n            });\n\n            this.set(\"distanceUnitOptions\", {\n                \"KM\": {\n                    \"backend\": objCandidateProfileStrings.getString(\"km\"),\n                    \"frontend\": objCandidateProfileStrings.getString(\"kilometers\")\n                },\n                \"MILES\": {\n                    \"backend\": objCandidateProfileStrings.getString(\"mi\"),\n                    \"frontend\": objCandidateProfileStrings.getString(\"miles\")\n                }\n            });\n\n            this.set(\"positionHeldStatus\", {\n                \"VERIFIED\": {\n                    \"backend\": \"verified\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"verified\")\n                },\n                \"UNVERIFIED\": {\n                    \"backend\": \"unverified\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"unverified\")\n                }\n            });\n\n            this.set(\"positionHeldWorkSuggestStatus\", {\n                \"ACTIVE\": {\n                    \"backend\": \"active\",\n                    \"frontend\": objStrings.getString(\"active\")\n                },\n                \"INACTIVE\": {\n                    \"backend\": \"inactive\",\n                    \"frontend\": objStrings.getString(\"inactive\")\n                }\n            });\n\n            this.set(\"playedKeywords\", {\n                \"PLAYED\": {\n                    \"backend\": \"played\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"played\")\n                },\n                \"PAUSED\": {\n                    \"backend\": \"paused\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"paused\")\n                }\n            });\n\n            this.set(\"genderBinary\", {\n                \"MALE\": {\n                    \"backend\": \"male\",\n                    \"frontend\": objStrings.getString(\"male\")\n                },\n                \"FEMALE\": {\n                    \"backend\": \"female\",\n                    \"frontend\": objStrings.getString(\"female\")\n                }\n            });\n\n            this.set(\"systemSkillStatus\", {\n                \"ACTIVE\": {\n                    \"backend\": \"active\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"active\")\n                }\n            });\n\n            this.set(\"systemQualificationStatus\", {\n                \"ACTIVE\": {\n                    \"backend\": \"active\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"active\")\n                }\n            });\n\n            this.set(\"documentStatuses\", {\n                \"SUCCESS\": {\n                    \"backend\": \"success\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"unverified\")\n                },\n                \"VERIFIED\": {\n                    \"backend\": \"verified\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"verified\")\n                }\n            });\n\n            this.set(\"experienceDuration\", {\n                \"ANY_AMOUNT_OF\": {\n                    \"backend\": \"anyAmountOf\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"anyAmountOf\")\n                },\n                \"AT_LEAST\": {\n                    \"backend\": \"atLeast\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"atLeast\")\n                },\n                \"LAST\": {\n                    \"backend\": \"last\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"last\")\n                }\n            });\n\n            this.set(\"expiringIn\", {\n                \"NEVER\": {\n                    \"backend\": \"never\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"never\")\n                },\n                \"LESS_THAN_AND_EXPIRED\": {\n                    \"backend\": \"lessThanAndExpired\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"lessThanAndExpired\")\n                },\n                \"LESS_THAN_NOT_EXPIRED\": {\n                    \"backend\": \"lessThanNotExpired\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"lessThanNotExpired\")\n                },\n                \"MORE_THAN\": {\n                    \"backend\": \"moreThan\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"moreThan\")\n                    // Commenting this out for now. As backend does not support a exact date search. So we cant do this.\n                    // NOTE: test cases for this is commented out for now aswel for when we add this in the future\n                    // \"EXACTLY\": {\n                    //     \"backend\": \"exactly\",\n                    //     \"frontend\": objCandidateProfileStrings.getString(\"exactly\")\n                    // }\n                } });\n\n            this.set(\"callTypes\", {\n                \"MOBILE\": {\n                    \"backend\": \"mobile\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"mobile\"),\n                    \"icon\": \"phone_android\"\n                },\n                \"HOME\": {\n                    \"backend\": \"home\",\n                    \"frontend\": objStrings.getString(\"home\"),\n                    \"icon\": \"home\"\n                },\n                \"WORK\": {\n                    \"backend\": \"work\",\n                    \"frontend\": objStrings.getString(\"work\"),\n                    \"icon\": \"work\"\n                },\n                \"ADDITIONAL\": {\n                    \"backend\": \"additional\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"additional\"),\n                    \"icon\": \"phone\"\n                }\n            });\n\n            this.set(\"religion\", {\n                \"BAHAI\": {\n                    \"backend\": \"bahai\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"bahai\")\n                },\n                \"BUDDHIST\": {\n                    \"backend\": \"buddhist\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"buddhist\")\n                },\n                \"CHRISTIAN\": {\n                    \"backend\": \"christian\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"christian\")\n                },\n                \"HINDU\": {\n                    \"backend\": \"hindu\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"hindu\")\n                },\n                \"JAIN\": {\n                    \"backend\": \"jain\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"jain\")\n                },\n                \"JEWISH\": {\n                    \"backend\": \"jewish\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"jewish\")\n                },\n                \"MUSLIM\": {\n                    \"backend\": \"muslim\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"muslim\")\n                },\n                \"NO_RELIGION\": {\n                    \"backend\": \"no_religion\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"noReligion\")\n                },\n                \"SIKH\": {\n                    \"backend\": \"sikh\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"sikh\")\n                },\n                \"PROTESTANT\": {\n                    \"backend\": \"protestant\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"protestant\")\n                },\n                \"ROMAN_CATHOLIC\": {\n                    \"backend\": \"roman_catholic\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"romanCatholic\")\n                },\n                \"OTHER\": {\n                    \"backend\": \"other\",\n                    \"frontend\": objStrings.getString(\"other\")\n                },\n                \"PREFER_NOT_TO_SAY\": {\n                    \"backend\": \"prefer_not_to_say\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"preferNotToSay\")\n                }\n            });\n\n            this.set(\"addressType\", {\n                \"ALTERNATIVE_ADDRESS\": {\n                    \"backend\": \"alternative_address\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"alternativeAddress\")\n                },\n                \"PHYSICAL_ADDRESS\": {\n                    \"backend\": \"physical_address\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"homeAddress\")\n                },\n                \"POSTAL_ADDRESS\": {\n                    \"backend\": \"postal_address\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"postalAddress\")\n                }\n            });\n\n            this.set(\"skillsStatus\", {\n                \"VERIFIED\": {\n                    \"backend\": \"verified\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"verified\")\n                },\n                \"UNVERIFIED\": {\n                    \"backend\": \"unverified\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"unverified\")\n                },\n                \"PARTIALLY_VERIFIED\": {\n                    \"backend\": \"partially_verified\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"partiallyVerified\")\n                }\n            });\n\n            this.set(\"skillsStatusSearch\", {\n                \"VERIFIED\": {\n                    \"backend\": \"verified\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"verified\")\n                },\n                \"UNVERIFIED\": {\n                    \"backend\": \"unverified\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"unverified\")\n                }\n            });\n\n            this.set(\"qualificationsStatus\", {\n                \"VERIFIED\": {\n                    \"backend\": \"verified\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"verified\")\n                },\n                \"UNVERIFIED\": {\n                    \"backend\": \"unverified\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"unverified\")\n                }\n            });\n\n            this.set(\"ethnicOrigin\", {\n                \"WHITE_BRITISH\": {\n                    \"backend\": \"white_british\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"whiteBritish\")\n                },\n                \"WHITE_IRISH\": {\n                    \"backend\": \"white_irish\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"whiteIrish\")\n                },\n                \"WHITE_OTHER\": {\n                    \"backend\": \"white_other\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"whiteOther\")\n                },\n                \"MIXED_WHITE_AND_BLACK_CARIBBEAN\": {\n                    \"backend\": \"mixed_white_and_black_caribbean\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"mixedWhiteAndBlackCaribbean\")\n                },\n                \"MIXED_WHITE_AND_BLACK_AFRICAN\": {\n                    \"backend\": \"mixed_white_and_black_african\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"mixedWhiteAndBlackAfrican\")\n                },\n                \"MIXED_WHITE_AND_ASIAN\": {\n                    \"backend\": \"mixed_white_and_asian\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"mixedWhiteAndAsian\")\n                },\n                \"MIXED_OTHER\": {\n                    \"backend\": \"mixed_other\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"mixedOther\")\n                },\n                \"ASIAN_BRITISH\": {\n                    \"backend\": \"asian_british\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"asianBritish\")\n                },\n                \"ASIAN_INDIAN\": {\n                    \"backend\": \"asian_indian\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"asianIndian\")\n                },\n                \"ASIAN_PAKISTANI\": {\n                    \"backend\": \"asian_pakistani\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"asianPakistani\")\n                },\n                \"ASIAN_BANGLADESHI\": {\n                    \"backend\": \"asian_bangladeshi\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"asianBangladeshi\")\n                },\n                \"TAMIL\": {\n                    \"backend\": \"tamil\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"tamil\")\n                },\n                \"ASIAN_OTHER\": {\n                    \"backend\": \"asian_other\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"asianOther\")\n                },\n                \"BLACK_BRITISH\": {\n                    \"backend\": \"black_british\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"blackBritish\")\n                },\n                \"BLACK_CARIBBEAN\": {\n                    \"backend\": \"black_caribbean\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"blackCaribbean\")\n                },\n                \"BLACK_AFRICAN\": {\n                    \"backend\": \"black_african\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"blackAfrican\")\n                },\n                \"BLACK_OTHER\": {\n                    \"backend\": \"black_other\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"blackOther\")\n                },\n                \"CHINESE\": {\n                    \"backend\": \"chinese\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"chinese\")\n                },\n                \"BLACK_EUROPEAN\": {\n                    \"backend\": \"black_european\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"blackEuropean\")\n                },\n                \"OTHER\": {\n                    \"backend\": \"other\",\n                    \"frontend\": objStrings.getString(\"other\")\n                },\n                \"PREFER_NOT_TO_SAY\": {\n                    \"backend\": \"prefer_not_to_say\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"preferNotToSay\")\n                }\n            });\n\n            this.set(\"sexualOrientation\", {\n                \"BISEXUAL\": {\n                    \"backend\": \"bisexual\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"bisexual\")\n                },\n                \"GAY_MAN\": {\n                    \"backend\": \"gay_man\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"gayMan\")\n                },\n                \"GAY_WOMEN\": {\n                    \"backend\": \"gay_women\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"gayWomen\")\n                },\n                \"STRAIGHT\": {\n                    \"backend\": \"straight\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"straight\")\n                },\n                \"PREFER_NOT_TO_SAY\": {\n                    \"backend\": \"prefer_not_to_say\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"preferNotToSay\")\n                }\n            });\n\n            this.set(\"genderIdentity\", {\n                \"MALE\": {\n                    \"backend\": \"male\",\n                    \"frontend\": objStrings.getString(\"male\")\n                },\n                \"FEMALE\": {\n                    \"backend\": \"female\",\n                    \"frontend\": objStrings.getString(\"female\")\n                },\n                \"INTERSEX\": {\n                    \"backend\": \"intersex\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"intersex\")\n                },\n                \"TRANSGENDER\": {\n                    \"backend\": \"transgender\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"transgender\")\n                },\n                \"TRANSSEXUAL\": {\n                    \"backend\": \"transsexual\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"transsexual\")\n                },\n                \"PREFER_NOT_TO_SAY\": {\n                    \"backend\": \"prefer_not_to_say\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"preferNotToSay\")\n                }\n            });\n\n            this.set(\"languageProficiency\", {\n                \"LIMITED\": {\n                    \"backend\": \"limited\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"limited\")\n                },\n                \"NATIVE\": {\n                    \"backend\": \"native\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"native\")\n                },\n                \"READ_WRITE_SPEAK\": {\n                    \"backend\": \"read_write_speak\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"readWriteSpeak\")\n                }\n            });\n\n            this.set(\"transportType\", {\n                \"OWN\": {\n                    \"backend\": \"own\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"own\")\n                },\n                \"PUBLIC\": {\n                    \"backend\": \"public\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"public\")\n                }\n            });\n\n            this.set(\"title\", {\n                \"MR\": {\n                    \"backend\": \"mr\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"mr\")\n                },\n                \"MRS\": {\n                    \"backend\": \"mrs\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"mrs\")\n                },\n                \"MS\": {\n                    \"backend\": \"ms\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"ms\")\n                },\n                \"MISS\": {\n                    \"backend\": \"miss\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"miss\")\n                },\n                \"DR\": {\n                    \"backend\": \"dr\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"dr\")\n                },\n                \"PROFESSOR\": {\n                    \"backend\": \"professor\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"professor\")\n                },\n                \"BARON\": {\n                    \"backend\": \"baron\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"baron\")\n                },\n                \"BARONESS\": {\n                    \"backend\": \"baroness\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"baroness\")\n                },\n                \"BRIGADIER\": {\n                    \"backend\": \"brigadier\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"brigadier\")\n                },\n                \"CANON\": {\n                    \"backend\": \"canon\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"canon\")\n                },\n                \"CAPTAIN\": {\n                    \"backend\": \"captain\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"captain\")\n                },\n                \"DUCHESS\": {\n                    \"backend\": \"duchess\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"duchess\")\n                },\n                \"DUKE\": {\n                    \"backend\": \"duke\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"duke\")\n                },\n                \"ESQ\": {\n                    \"backend\": \"esq\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"esq\")\n                },\n                \"FATHER\": {\n                    \"backend\": \"father\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"father\")\n                },\n                \"HON\": {\n                    \"backend\": \"hon\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"hon\")\n                },\n                \"INSPECTOR\": {\n                    \"backend\": \"inspector\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"inspector\")\n                },\n                \"LADY\": {\n                    \"backend\": \"lady\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"lady\")\n                },\n                \"LORD\": {\n                    \"backend\": \"lord\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"lord\")\n                },\n                \"LT_COL\": {\n                    \"backend\": \"lt_col\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"ltCol\")\n                },\n                \"MAJOR\": {\n                    \"backend\": \"major\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"major\")\n                },\n                \"MOST_REVER\": {\n                    \"backend\": \"most_rever\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"mostRever\")\n                },\n                \"PASTOR\": {\n                    \"backend\": \"pastor\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"pastor\")\n                },\n                \"RABBI\": {\n                    \"backend\": \"rabbi\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"rabbi\")\n                },\n                \"REV_DR\": {\n                    \"backend\": \"rev_dr\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"revDr\")\n                },\n                \"REVEREND\": {\n                    \"backend\": \"reverend\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"reverend\")\n                },\n                \"RT_REVEREN\": {\n                    \"backend\": \"rt_reveren\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"rtReveren\")\n                },\n                \"SIR\": {\n                    \"backend\": \"sir\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"sir\")\n                },\n                \"SISTER\": {\n                    \"backend\": \"sister\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"sister\")\n                },\n                \"SQUADRON_L\": {\n                    \"backend\": \"squadron_l\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"squadronL\")\n                },\n                \"WG_CDR\": {\n                    \"backend\": \"wg_cdr\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"wgCdr\")\n                }\n            });\n\n            this.set(\"language\", {\n                \"AAR\": {\n                    \"backend\": \"aar\",\n                    \"frontend\": \"Afar\"\n                },\n                \"ABK\": {\n                    \"backend\": \"abk\",\n                    \"frontend\": \"Abkhazian\"\n                },\n                \"AFR\": {\n                    \"backend\": \"afr\",\n                    \"frontend\": \"Afrikaans\"\n                },\n                \"AKA\": {\n                    \"backend\": \"aka\",\n                    \"frontend\": \"Akan\"\n                },\n                \"ALB\": {\n                    \"backend\": \"alb\",\n                    \"frontend\": \"Albanian\"\n                },\n                \"AMH\": {\n                    \"backend\": \"amh\",\n                    \"frontend\": \"Amharic\"\n                },\n                \"ARA\": {\n                    \"backend\": \"ara\",\n                    \"frontend\": \"Arabic\"\n                },\n                \"ARG\": {\n                    \"backend\": \"arg\",\n                    \"frontend\": \"Aragonese\"\n                },\n                \"ARM\": {\n                    \"backend\": \"arm\",\n                    \"frontend\": \"Armenian\"\n                },\n                \"ASM\": {\n                    \"backend\": \"asm\",\n                    \"frontend\": \"Assamese\"\n                },\n                \"AVA\": {\n                    \"backend\": \"ava\",\n                    \"frontend\": \"Avaric\"\n                },\n                \"AVE\": {\n                    \"backend\": \"ave\",\n                    \"frontend\": \"Avestan\"\n                },\n                \"AYM\": {\n                    \"backend\": \"aym\",\n                    \"frontend\": \"Aymara\"\n                },\n                \"AZE\": {\n                    \"backend\": \"aze\",\n                    \"frontend\": \"Azerbaijani\"\n                },\n                \"BAK\": {\n                    \"backend\": \"bak\",\n                    \"frontend\": \"Bashkir\"\n                },\n                \"BAM\": {\n                    \"backend\": \"bam\",\n                    \"frontend\": \"Bambara\"\n                },\n                \"BAQ\": {\n                    \"backend\": \"baq\",\n                    \"frontend\": \"Basque\"\n                },\n                \"BEL\": {\n                    \"backend\": \"bel\",\n                    \"frontend\": \"Belarusian\"\n                },\n                \"BEN\": {\n                    \"backend\": \"ben\",\n                    \"frontend\": \"Bengali\"\n                },\n                \"BIH\": {\n                    \"backend\": \"bih\",\n                    \"frontend\": \"Bihari languages\"\n                },\n                \"BIS\": {\n                    \"backend\": \"bis\",\n                    \"frontend\": \"Bislama\"\n                },\n                \"BOS\": {\n                    \"backend\": \"bos\",\n                    \"frontend\": \"Bosnian\"\n                },\n                \"BRE\": {\n                    \"backend\": \"bre\",\n                    \"frontend\": \"Breton\"\n                },\n                \"BUL\": {\n                    \"backend\": \"bul\",\n                    \"frontend\": \"Bulgarian\"\n                },\n                \"BUR\": {\n                    \"backend\": \"bur\",\n                    \"frontend\": \"Burmese\"\n                },\n                \"CAT\": {\n                    \"backend\": \"cat\",\n                    \"frontend\": \"Catalan; Valencian\"\n                },\n                \"CHA\": {\n                    \"backend\": \"cha\",\n                    \"frontend\": \"Chamorro\"\n                },\n                \"CHE\": {\n                    \"backend\": \"che\",\n                    \"frontend\": \"Chechen\"\n                },\n                \"CHI\": {\n                    \"backend\": \"chi\",\n                    \"frontend\": \"Chinese\"\n                },\n                \"CHU\": {\n                    \"backend\": \"chu\",\n                    \"frontend\": \"Church Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic\"\n                },\n                \"CHV\": {\n                    \"backend\": \"chv\",\n                    \"frontend\": \"Chuvash\"\n                },\n                \"COR\": {\n                    \"backend\": \"cor\",\n                    \"frontend\": \"Cornish\"\n                },\n                \"COS\": {\n                    \"backend\": \"cos\",\n                    \"frontend\": \"Corsican\"\n                },\n                \"CRE\": {\n                    \"backend\": \"cre\",\n                    \"frontend\": \"Cree\"\n                },\n                \"CZE\": {\n                    \"backend\": \"cze\",\n                    \"frontend\": \"Czech\"\n                },\n                \"DAN\": {\n                    \"backend\": \"dan\",\n                    \"frontend\": \"Danish\"\n                },\n                \"DIV\": {\n                    \"backend\": \"div\",\n                    \"frontend\": \"Divehi; Dhivehi; Maldivian\"\n                },\n                \"DUT\": {\n                    \"backend\": \"dut\",\n                    \"frontend\": \"Dutch; Flemish\"\n                },\n                \"DZO\": {\n                    \"backend\": \"dzo\",\n                    \"frontend\": \"Dzongkha\"\n                },\n                \"ENG\": {\n                    \"backend\": \"eng\",\n                    \"frontend\": \"English\"\n                },\n                \"EPO\": {\n                    \"backend\": \"epo\",\n                    \"frontend\": \"Esperanto\"\n                },\n                \"EST\": {\n                    \"backend\": \"est\",\n                    \"frontend\": \"Estonian\"\n                },\n                \"EWE\": {\n                    \"backend\": \"ewe\",\n                    \"frontend\": \"Ewe\"\n                },\n                \"FAO\": {\n                    \"backend\": \"fao\",\n                    \"frontend\": \"Faroese\"\n                },\n                \"FIJ\": {\n                    \"backend\": \"fij\",\n                    \"frontend\": \"Fijian\"\n                },\n                \"FIN\": {\n                    \"backend\": \"fin\",\n                    \"frontend\": \"Finnish\"\n                },\n                \"FRE\": {\n                    \"backend\": \"fre\",\n                    \"frontend\": \"French\"\n                },\n                \"FRY\": {\n                    \"backend\": \"fry\",\n                    \"frontend\": \"Western Frisian\"\n                },\n                \"FUL\": {\n                    \"backend\": \"ful\",\n                    \"frontend\": \"Fulah\"\n                },\n                \"GEO\": {\n                    \"backend\": \"geo\",\n                    \"frontend\": \"Georgian\"\n                },\n                \"GER\": {\n                    \"backend\": \"ger\",\n                    \"frontend\": \"German\"\n                },\n                \"GLA\": {\n                    \"backend\": \"gla\",\n                    \"frontend\": \"Gaelic; Scottish Gaelic\"\n                },\n                \"GLE\": {\n                    \"backend\": \"gle\",\n                    \"frontend\": \"Irish\"\n                },\n                \"GLG\": {\n                    \"backend\": \"glg\",\n                    \"frontend\": \"Galician\"\n                },\n                \"GLV\": {\n                    \"backend\": \"glv\",\n                    \"frontend\": \"Manx\"\n                },\n                \"GRE\": {\n                    \"backend\": \"gre\",\n                    \"frontend\": \"Greek, Modern (1453-)\"\n                },\n                \"GRN\": {\n                    \"backend\": \"grn\",\n                    \"frontend\": \"Guarani\"\n                },\n                \"GUJ\": {\n                    \"backend\": \"guj\",\n                    \"frontend\": \"Gujarati\"\n                },\n                \"HAT\": {\n                    \"backend\": \"hat\",\n                    \"frontend\": \"Haitian; Haitian Creole\"\n                },\n                \"HAU\": {\n                    \"backend\": \"hau\",\n                    \"frontend\": \"Hausa\"\n                },\n                \"HEB\": {\n                    \"backend\": \"heb\",\n                    \"frontend\": \"Hebrew\"\n                },\n                \"HER\": {\n                    \"backend\": \"her\",\n                    \"frontend\": \"Herero\"\n                },\n                \"HIN\": {\n                    \"backend\": \"hin\",\n                    \"frontend\": \"Hindi\"\n                },\n                \"HMO\": {\n                    \"backend\": \"hmo\",\n                    \"frontend\": \"Hiri Motu\"\n                },\n                \"HRV\": {\n                    \"backend\": \"hrv\",\n                    \"frontend\": \"Croatian\"\n                },\n                \"HUN\": {\n                    \"backend\": \"hun\",\n                    \"frontend\": \"Hungarian\"\n                },\n                \"IBO\": {\n                    \"backend\": \"ibo\",\n                    \"frontend\": \"Igbo\"\n                },\n                \"ICE\": {\n                    \"backend\": \"ice\",\n                    \"frontend\": \"Icelandic\"\n                },\n                \"IDO\": {\n                    \"backend\": \"ido\",\n                    \"frontend\": \"Ido\"\n                },\n                \"III\": {\n                    \"backend\": \"iii\",\n                    \"frontend\": \"Sichuan Yi; Nuosu\"\n                },\n                \"IKU\": {\n                    \"backend\": \"iku\",\n                    \"frontend\": \"Inuktitut\"\n                },\n                \"ILE\": {\n                    \"backend\": \"ile\",\n                    \"frontend\": \"Interlingue; Occidental\"\n                },\n                \"INA\": {\n                    \"backend\": \"ina\",\n                    \"frontend\": \"Interlingua (International Auxiliary Language Association)\"\n                },\n                \"IND\": {\n                    \"backend\": \"ind\",\n                    \"frontend\": \"Indonesian\"\n                },\n                \"IPK\": {\n                    \"backend\": \"ipk\",\n                    \"frontend\": \"Inupiaq\"\n                },\n                \"ITA\": {\n                    \"backend\": \"ita\",\n                    \"frontend\": \"Italian\"\n                },\n                \"JAV\": {\n                    \"backend\": \"jav\",\n                    \"frontend\": \"Javanese\"\n                },\n                \"JPN\": {\n                    \"backend\": \"jpn\",\n                    \"frontend\": \"Japanese\"\n                },\n                \"KAL\": {\n                    \"backend\": \"kal\",\n                    \"frontend\": \"Kalaallisut; Greenlandic\"\n                },\n                \"KAN\": {\n                    \"backend\": \"kan\",\n                    \"frontend\": \"Kannada\"\n                },\n                \"KAS\": {\n                    \"backend\": \"kas\",\n                    \"frontend\": \"Kashmiri\"\n                },\n                \"KAU\": {\n                    \"backend\": \"kau\",\n                    \"frontend\": \"Kanuri\"\n                },\n                \"KAZ\": {\n                    \"backend\": \"kaz\",\n                    \"frontend\": \"Kazakh\"\n                },\n                \"KHM\": {\n                    \"backend\": \"khm\",\n                    \"frontend\": \"Central Khmer\"\n                },\n                \"KIK\": {\n                    \"backend\": \"kik\",\n                    \"frontend\": \"Kikuyu; Gikuyu\"\n                },\n                \"KIN\": {\n                    \"backend\": \"kin\",\n                    \"frontend\": \"Kinyarwanda\"\n                },\n                \"KIR\": {\n                    \"backend\": \"kir\",\n                    \"frontend\": \"Kirghiz; Kyrgyz\"\n                },\n                \"KOM\": {\n                    \"backend\": \"kom\",\n                    \"frontend\": \"Komi\"\n                },\n                \"KON\": {\n                    \"backend\": \"kon\",\n                    \"frontend\": \"Kongo\"\n                },\n                \"KOR\": {\n                    \"backend\": \"kor\",\n                    \"frontend\": \"Korean\"\n                },\n                \"KUA\": {\n                    \"backend\": \"kua\",\n                    \"frontend\": \"Kuanyama; Kwanyama\"\n                },\n                \"KUR\": {\n                    \"backend\": \"kur\",\n                    \"frontend\": \"Kurdish\"\n                },\n                \"LAO\": {\n                    \"backend\": \"lao\",\n                    \"frontend\": \"Lao\"\n                },\n                \"LAT\": {\n                    \"backend\": \"lat\",\n                    \"frontend\": \"Latin\"\n                },\n                \"LAV\": {\n                    \"backend\": \"lav\",\n                    \"frontend\": \"Latvian\"\n                },\n                \"LIM\": {\n                    \"backend\": \"lim\",\n                    \"frontend\": \"Limburgan; Limburger; Limburgish\"\n                },\n                \"LIN\": {\n                    \"backend\": \"lin\",\n                    \"frontend\": \"Lingala\"\n                },\n                \"LIT\": {\n                    \"backend\": \"lit\",\n                    \"frontend\": \"Lithuanian\"\n                },\n                \"LTZ\": {\n                    \"backend\": \"ltz\",\n                    \"frontend\": \"Luxembourgish; Letzeburgesch\"\n                },\n                \"LUB\": {\n                    \"backend\": \"lub\",\n                    \"frontend\": \"Luba-Katanga\"\n                },\n                \"LUG\": {\n                    \"backend\": \"lug\",\n                    \"frontend\": \"Ganda\"\n                },\n                \"MAC\": {\n                    \"backend\": \"mac\",\n                    \"frontend\": \"Macedonian\"\n                },\n                \"MAH\": {\n                    \"backend\": \"mah\",\n                    \"frontend\": \"Marshallese\"\n                },\n                \"MAL\": {\n                    \"backend\": \"mal\",\n                    \"frontend\": \"Malayalam\"\n                },\n                \"MAO\": {\n                    \"backend\": \"mao\",\n                    \"frontend\": \"Maori\"\n                },\n                \"MAR\": {\n                    \"backend\": \"mar\",\n                    \"frontend\": \"Marathi\"\n                },\n                \"MAY\": {\n                    \"backend\": \"may\",\n                    \"frontend\": \"Malay\"\n                },\n                \"MLG\": {\n                    \"backend\": \"mlg\",\n                    \"frontend\": \"Malagasy\"\n                },\n                \"MLT\": {\n                    \"backend\": \"mlt\",\n                    \"frontend\": \"Maltese\"\n                },\n                \"MON\": {\n                    \"backend\": \"mon\",\n                    \"frontend\": \"Mongolian\"\n                },\n                \"NAU\": {\n                    \"backend\": \"nau\",\n                    \"frontend\": \"Nauru\"\n                },\n                \"NAV\": {\n                    \"backend\": \"nav\",\n                    \"frontend\": \"Navajo; Navaho\"\n                },\n                \"NBL\": {\n                    \"backend\": \"nbl\",\n                    \"frontend\": \"Ndebele, South; South Ndebele\"\n                },\n                \"NDE\": {\n                    \"backend\": \"nde\",\n                    \"frontend\": \"Ndebele, North; North Ndebele\"\n                },\n                \"NDO\": {\n                    \"backend\": \"ndo\",\n                    \"frontend\": \"Ndonga\"\n                },\n                \"NEP\": {\n                    \"backend\": \"nep\",\n                    \"frontend\": \"Nepali\"\n                },\n                \"NNO\": {\n                    \"backend\": \"nno\",\n                    \"frontend\": \"Norwegian Nynorsk; Nynorsk, Norwegian\"\n                },\n                \"NOB\": {\n                    \"backend\": \"nob\",\n                    \"frontend\": \"Bokmål, Norwegian; Norwegian Bokmål\"\n                },\n                \"NOR\": {\n                    \"backend\": \"nor\",\n                    \"frontend\": \"Norwegian\"\n                },\n                \"NYA\": {\n                    \"backend\": \"nya\",\n                    \"frontend\": \"Chichewa; Chewa; Nyanja\"\n                },\n                \"OCI\": {\n                    \"backend\": \"oci\",\n                    \"frontend\": \"Occitan (post 1500); Provençal\"\n                },\n                \"OJI\": {\n                    \"backend\": \"oji\",\n                    \"frontend\": \"Ojibwa\"\n                },\n                \"ORI\": {\n                    \"backend\": \"ori\",\n                    \"frontend\": \"Oriya\"\n                },\n                \"ORM\": {\n                    \"backend\": \"orm\",\n                    \"frontend\": \"Oromo\"\n                },\n                \"OSS\": {\n                    \"backend\": \"oss\",\n                    \"frontend\": \"Ossetian; Ossetic\"\n                },\n                \"PAN\": {\n                    \"backend\": \"pan\",\n                    \"frontend\": \"Panjabi; Punjabi\"\n                },\n                \"PER\": {\n                    \"backend\": \"per\",\n                    \"frontend\": \"Persian\"\n                },\n                \"PLI\": {\n                    \"backend\": \"pli\",\n                    \"frontend\": \"Pali\"\n                },\n                \"POL\": {\n                    \"backend\": \"pol\",\n                    \"frontend\": \"Polish\"\n                },\n                \"POR\": {\n                    \"backend\": \"por\",\n                    \"frontend\": \"Portuguese\"\n                },\n                \"PUS\": {\n                    \"backend\": \"pus\",\n                    \"frontend\": \"Pushto; Pashto\"\n                },\n                \"QUE\": {\n                    \"backend\": \"que\",\n                    \"frontend\": \"Quechua\"\n                },\n                \"ROH\": {\n                    \"backend\": \"roh\",\n                    \"frontend\": \"Romansh\"\n                },\n                \"RUM\": {\n                    \"backend\": \"rum\",\n                    \"frontend\": \"Romanian; Moldavian; Moldovan\"\n                },\n                \"RUN\": {\n                    \"backend\": \"run\",\n                    \"frontend\": \"Rundi\"\n                },\n                \"RUS\": {\n                    \"backend\": \"rus\",\n                    \"frontend\": \"Russian\"\n                },\n                \"SAG\": {\n                    \"backend\": \"sag\",\n                    \"frontend\": \"Sango\"\n                },\n                \"SAN\": {\n                    \"backend\": \"san\",\n                    \"frontend\": \"Sanskrit\"\n                },\n                \"SGN\": {\n                    \"backend\": \"sgn\",\n                    \"frontend\": \"Sign Languages\"\n                },\n                \"SIN\": {\n                    \"backend\": \"sin\",\n                    \"frontend\": \"Sinhala; Sinhalese\"\n                },\n                \"SLO\": {\n                    \"backend\": \"slo\",\n                    \"frontend\": \"Slovak\"\n                },\n                \"SLV\": {\n                    \"backend\": \"slv\",\n                    \"frontend\": \"Slovenian\"\n                },\n                \"SME\": {\n                    \"backend\": \"sme\",\n                    \"frontend\": \"Northern Sami\"\n                },\n                \"SMO\": {\n                    \"backend\": \"smo\",\n                    \"frontend\": \"Samoan\"\n                },\n                \"SNA\": {\n                    \"backend\": \"sna\",\n                    \"frontend\": \"Shona\"\n                },\n                \"SND\": {\n                    \"backend\": \"snd\",\n                    \"frontend\": \"Sindhi\"\n                },\n                \"SOM\": {\n                    \"backend\": \"som\",\n                    \"frontend\": \"Somali\"\n                },\n                \"SOT\": {\n                    \"backend\": \"sot\",\n                    \"frontend\": \"Sotho, Southern\"\n                },\n                \"SPA\": {\n                    \"backend\": \"spa\",\n                    \"frontend\": \"Spanish; Castilian\"\n                },\n                \"SRD\": {\n                    \"backend\": \"srd\",\n                    \"frontend\": \"Sardinian\"\n                },\n                \"SRP\": {\n                    \"backend\": \"srp\",\n                    \"frontend\": \"Serbian\"\n                },\n                \"SSW\": {\n                    \"backend\": \"ssw\",\n                    \"frontend\": \"Swati\"\n                },\n                \"SUN\": {\n                    \"backend\": \"sun\",\n                    \"frontend\": \"Sundanese\"\n                },\n                \"SWA\": {\n                    \"backend\": \"swa\",\n                    \"frontend\": \"Swahili\"\n                },\n                \"SWE\": {\n                    \"backend\": \"swe\",\n                    \"frontend\": \"Swedish\"\n                },\n                \"TAH\": {\n                    \"backend\": \"tah\",\n                    \"frontend\": \"Tahitian\"\n                },\n                \"TAM\": {\n                    \"backend\": \"tam\",\n                    \"frontend\": \"Tamil\"\n                },\n                \"TAT\": {\n                    \"backend\": \"tat\",\n                    \"frontend\": \"Tatar\"\n                },\n                \"TEL\": {\n                    \"backend\": \"tel\",\n                    \"frontend\": \"Telugu\"\n                },\n                \"TGK\": {\n                    \"backend\": \"tgk\",\n                    \"frontend\": \"Tajik\"\n                },\n                \"TGL\": {\n                    \"backend\": \"tgl\",\n                    \"frontend\": \"Tagalog\"\n                },\n                \"THA\": {\n                    \"backend\": \"tha\",\n                    \"frontend\": \"Thai\"\n                },\n                \"TIB\": {\n                    \"backend\": \"tib\",\n                    \"frontend\": \"Tibetan\"\n                },\n                \"TIR\": {\n                    \"backend\": \"tir\",\n                    \"frontend\": \"Tigrinya\"\n                },\n                \"TON\": {\n                    \"backend\": \"ton\",\n                    \"frontend\": \"Tonga (Tonga Islands)\"\n                },\n                \"TSN\": {\n                    \"backend\": \"tsn\",\n                    \"frontend\": \"Tswana\"\n                },\n                \"TSO\": {\n                    \"backend\": \"tso\",\n                    \"frontend\": \"Tsonga\"\n                },\n                \"TUK\": {\n                    \"backend\": \"tuk\",\n                    \"frontend\": \"Turkmen\"\n                },\n                \"TUR\": {\n                    \"backend\": \"tur\",\n                    \"frontend\": \"Turkish\"\n                },\n                \"TWI\": {\n                    \"backend\": \"twi\",\n                    \"frontend\": \"Twi\"\n                },\n                \"UIG\": {\n                    \"backend\": \"uig\",\n                    \"frontend\": \"Uighur; Uyghur\"\n                },\n                \"UKR\": {\n                    \"backend\": \"ukr\",\n                    \"frontend\": \"Ukrainian\"\n                },\n                \"URD\": {\n                    \"backend\": \"urd\",\n                    \"frontend\": \"Urdu\"\n                },\n                \"UZB\": {\n                    \"backend\": \"uzb\",\n                    \"frontend\": \"Uzbek\"\n                },\n                \"VEN\": {\n                    \"backend\": \"ven\",\n                    \"frontend\": \"Venda\"\n                },\n                \"VIE\": {\n                    \"backend\": \"vie\",\n                    \"frontend\": \"Vietnamese\"\n                },\n                \"VOL\": {\n                    \"backend\": \"vol\",\n                    \"frontend\": \"Volapük\"\n                },\n                \"WEL\": {\n                    \"backend\": \"wel\",\n                    \"frontend\": \"Welsh\"\n                },\n                \"WLN\": {\n                    \"backend\": \"wln\",\n                    \"frontend\": \"Walloon\"\n                },\n                \"WOL\": {\n                    \"backend\": \"wol\",\n                    \"frontend\": \"Wolof\"\n                },\n                \"XHO\": {\n                    \"backend\": \"xho\",\n                    \"frontend\": \"Xhosa\"\n                },\n                \"YID\": {\n                    \"backend\": \"yid\",\n                    \"frontend\": \"Yiddish\"\n                },\n                \"YOR\": {\n                    \"backend\": \"yor\",\n                    \"frontend\": \"Yoruba\"\n                },\n                \"ZHA\": {\n                    \"backend\": \"zha\",\n                    \"frontend\": \"Zhuang; Chuang\"\n                },\n                \"ZUL\": {\n                    \"backend\": \"zul\",\n                    \"frontend\": \"Zulu\"\n                }\n            });\n\n            this.set(\"dbsStatuses\", {\n                \"COMPLETINGFORM\": {\n                    \"backend\": \"completingForm\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"completingForm\")\n                },\n                \"REQUIRESPAYMENT\": {\n                    \"backend\": \"requiresPayment\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"requiresPayment\")\n                },\n                \"REQUIRESCOUNTERSIGNERACTION\": {\n                    \"backend\": \"requiresCountersignerAction\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"requiresCountersignerAction\")\n                },\n                \"UNORDERED\": {\n                    \"backend\": \"unordered\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"unordered\")\n                },\n                \"ORDERED\": {\n                    \"backend\": \"ordered\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"ordered\")\n                },\n                \"RECEIPTED\": {\n                    \"backend\": \"receipted\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"receipted\")\n                },\n                \"INVALID\": {\n                    \"backend\": \"invalid\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"invalid\")\n                },\n                \"PASSED\": {\n                    \"backend\": \"passed\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"passed\")\n                },\n                \"MISSINGDOCUMENTS\": {\n                    \"backend\": \"missingDocuments\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"missingDocuments\")\n                },\n                \"REQUIRESCANDIDATEACTION\": {\n                    \"backend\": \"requiresCandidateAction\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"requiresCandidateAction\")\n                },\n                \"CANDIDATEACTIONED\": {\n                    \"backend\": \"candidateActioned\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"candidateActioned\")\n                },\n                \"NOCRB\": {\n                    \"backend\": \"noCrb\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"noCrb\")\n                },\n                \"EXPIRING\": {\n                    \"backend\": \"expiring\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"expiring\")\n                },\n                \"EXPIRED\": {\n                    \"backend\": \"expired\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"expired\")\n                },\n                \"COUNTERSIGNED\": {\n                    \"backend\": \"counterSigned\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"counterSigned\")\n                },\n                \"NOTREQUIRED\": {\n                    \"backend\": \"notRequired\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"notRequired\")\n                },\n                \"NEWAPPLICATION\": {\n                    \"backend\": \"newApplication\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"newApplication\")\n                },\n                \"NODISCLAIMER\": {\n                    \"backend\": \"noDisclaimer\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"noDisclaimer\")\n                },\n                \"NOLANGUAGE\": {\n                    \"backend\": \"noLanguage\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"noLanguage\")\n                },\n                \"MANUALAPPLICATION\": {\n                    \"backend\": \"manualApplication\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"manualApplication\")\n                },\n                \"A24REJECTED\": {\n                    \"backend\": \"a24Rejected\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"a24Rejected\")\n                },\n                \"A24REJECTEDNOTREVERSED\": {\n                    \"backend\": \"a24RejectedNotReversed\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"a24RejectedNotReversed\")\n                },\n                \"VALIDATEDFORM\": {\n                    \"backend\": \"validatedForm\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"validatedForm\")\n                }\n            });\n\n            this.set(\"workTypes\", {\n                \"AGENCY\": {\n                    \"backend\": \"agency\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"agencyWork\")\n                },\n                \"CONTRACT\": {\n                    \"backend\": \"contract\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"contract\")\n                },\n                \"PART_TIME\": {\n                    \"backend\": \"part_time\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"partTime\")\n                },\n                \"PERMANENT\": {\n                    \"backend\": \"permanent\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"permanent\")\n                },\n                \"SELF_EMPLOYED\": {\n                    \"backend\": \"self_employed\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"selfEmployed\")\n                },\n                \"STUDENT_FULL_TIME\": {\n                    \"backend\": \"student_full_time\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"studentFullTime\")\n                },\n                \"STUDENT_PLACEMENT\": {\n                    \"backend\": \"student_placement\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"studentPlacement\")\n                },\n                \"UNKNOWN\": {\n                    \"backend\": \"unknown\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"unknown\")\n                },\n                \"UNEMPLOYED\": {\n                    \"backend\": \"not_employed\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"unemployed\")\n                }\n            });\n\n            this.set(\"saProvinces\", {\n                \"EASTERN_CAPE\": {\n                    \"backend\": \"Eastern Cape\",\n                    \"frontend\": \"Eastern Cape\"\n                },\n                \"FREE_STATE\": {\n                    \"backend\": \"Free State\",\n                    \"frontend\": \"Free State\"\n                },\n                \"GAUTENG\": {\n                    \"backend\": \"Gauteng\",\n                    \"frontend\": \"Gauteng\"\n                },\n                \"KWAZULU_NATAL\": {\n                    \"backend\": \"Kwazulu-Natal\",\n                    \"frontend\": \"Kwazulu-Natal\"\n                },\n                \"LIMPOPO\": {\n                    \"backend\": \"Limpopo\",\n                    \"frontend\": \"Limpopo\"\n                },\n                \"MPUMALANGA\": {\n                    \"backend\": \"Mpumalanga\",\n                    \"frontend\": \"Mpumalanga\"\n                },\n                \"NORTH_WEST_PROVINCE\": {\n                    \"backend\": \"North West Province\",\n                    \"frontend\": \"North West Province\"\n                },\n                \"NORTHERN_CAPE\": {\n                    \"backend\": \"Northern Cape\",\n                    \"frontend\": \"Northern Cape\"\n                },\n                \"WESTERN_CAPE\": {\n                    \"backend\": \"Western Cape\",\n                    \"frontend\": \"Western Cape\"\n                }\n            });\n\n            this.set(\"ukProvinces\", {\n                \"ABERDEENSHIRE\": {\n                    \"backend\": \"Aberdeenshire\",\n                    \"frontend\": \"Aberdeenshire\"\n                },\n                \"ANGLESEY_SIR_FON\": {\n                    \"backend\": \"Anglesey/Sir Fon\",\n                    \"frontend\": \"Anglesey/Sir Fon\"\n                },\n                \"ANGUS_FORFARSHIRE\": {\n                    \"backend\": \"Angus/Forfarshire\",\n                    \"frontend\": \"Angus/Forfarshire\"\n                },\n                \"ARGYLLSHIRE\": {\n                    \"backend\": \"Argyllshire\",\n                    \"frontend\": \"Argyllshire\"\n                },\n                \"AYRSHIRE\": {\n                    \"backend\": \"Ayrshire\",\n                    \"frontend\": \"Ayrshire\"\n                },\n                \"BALLYMENA\": {\n                    \"backend\": \"Ballymena\",\n                    \"frontend\": \"Ballymena\"\n                },\n                \"BANFFSHIRE\": {\n                    \"backend\": \"Banffshire\",\n                    \"frontend\": \"Banffshire\"\n                },\n                \"BEDFORDSHIRE\": {\n                    \"backend\": \"Bedfordshire\",\n                    \"frontend\": \"Bedfordshire\"\n                },\n                \"BELFAST\": {\n                    \"backend\": \"Belfast\",\n                    \"frontend\": \"Belfast\"\n                },\n                \"BERKSHIRE\": {\n                    \"backend\": \"Berkshire\",\n                    \"frontend\": \"Berkshire\"\n                },\n                \"BERWICKSHIRE\": {\n                    \"backend\": \"Berwickshire\",\n                    \"frontend\": \"Berwickshire\"\n                },\n                \"BRECKNOCKSHIRE_SIR_FRYCHEINIOG\": {\n                    \"backend\": \"Brecknockshire/Sir Frycheiniog\",\n                    \"frontend\": \"Brecknockshire/Sir Frycheiniog\"\n                },\n                \"BRISTOL\": {\n                    \"backend\": \"Bristol\",\n                    \"frontend\": \"Bristol\"\n                },\n                \"BUCKINGHAMSHIRE\": {\n                    \"backend\": \"Buckinghamshire\",\n                    \"frontend\": \"Buckinghamshire\"\n                },\n                \"BUTESHIRE\": {\n                    \"backend\": \"Buteshire\",\n                    \"frontend\": \"Buteshire\"\n                },\n                \"CAERNARFONSHIRE_SIR_GAERNARFON\": {\n                    \"backend\": \"Caernarfonshire/Sir Gaernarfon\",\n                    \"frontend\": \"Caernarfonshire/Sir Gaernarfon\"\n                },\n                \"CAITHNESS\": {\n                    \"backend\": \"Caithness\",\n                    \"frontend\": \"Caithness\"\n                },\n                \"CAMBRIDGESHIRE\": {\n                    \"backend\": \"Cambridgeshire\",\n                    \"frontend\": \"Cambridgeshire\"\n                },\n                \"CARDIGANSHIRE_CEREDIGION\": {\n                    \"backend\": \"Cardiganshire/Ceredigion\",\n                    \"frontend\": \"Cardiganshire/Ceredigion\"\n                },\n                \"CARMARTHENSHIRE\": {\n                    \"backend\": \"Carmarthenshire\",\n                    \"frontend\": \"Carmarthenshire\"\n                },\n                \"CHANNEL_ISLANDS\": {\n                    \"backend\": \"Channel Islands\",\n                    \"frontend\": \"Channel Islands\"\n                },\n                \"CHESHIRE\": {\n                    \"backend\": \"Cheshire\",\n                    \"frontend\": \"Cheshire\"\n                },\n                \"CLACKMANNANSHIRE\": {\n                    \"backend\": \"Clackmannanshire\",\n                    \"frontend\": \"Clackmannanshire\"\n                },\n                \"COLERAINE\": {\n                    \"backend\": \"Coleraine\",\n                    \"frontend\": \"Coleraine\"\n                },\n                \"COOKSTOWN\": {\n                    \"backend\": \"Cookstown\",\n                    \"frontend\": \"Cookstown\"\n                },\n                \"CORNWALL\": {\n                    \"backend\": \"Cornwall\",\n                    \"frontend\": \"Cornwall\"\n                },\n                \"COUNTY_ANTRIM\": {\n                    \"backend\": \"County Antrim\",\n                    \"frontend\": \"County Antrim\"\n                },\n                \"COUNTY_ARMAGH\": {\n                    \"backend\": \"County Armagh\",\n                    \"frontend\": \"County Armagh\"\n                },\n                \"COUNTY_DOWN\": {\n                    \"backend\": \"County Down\",\n                    \"frontend\": \"County Down\"\n                },\n                \"COUNTY_FERMANAGH\": {\n                    \"backend\": \"County Fermanagh\",\n                    \"frontend\": \"County Fermanagh\"\n                },\n                \"COUNTY_LONDONDERRY\": {\n                    \"backend\": \"County Londonderry\",\n                    \"frontend\": \"County Londonderry\"\n                },\n                \"COUNTY_TYRONE\": {\n                    \"backend\": \"County Tyrone\",\n                    \"frontend\": \"County Tyrone\"\n                },\n                \"CRAIGAVON\": {\n                    \"backend\": \"Craigavon\",\n                    \"frontend\": \"Craigavon\"\n                },\n                \"CROMARTYSHIRE\": {\n                    \"backend\": \"Cromartyshire\",\n                    \"frontend\": \"Cromartyshire\"\n                },\n                \"CUMBRIA\": {\n                    \"backend\": \"Cumbria\",\n                    \"frontend\": \"Cumbria\"\n                },\n                \"DENBIGHSHIRE_SIR_DDINBYCH\": {\n                    \"backend\": \"Denbighshire/Sir Ddinbych\",\n                    \"frontend\": \"Denbighshire/Sir Ddinbych\"\n                },\n                \"DERBYSHIRE\": {\n                    \"backend\": \"Derbyshire\",\n                    \"frontend\": \"Derbyshire\"\n                },\n                \"DERRY_CITY_AND_SURROUNDS\": {\n                    \"backend\": \"Derry City and Surrounds\",\n                    \"frontend\": \"Derry City and Surrounds\"\n                },\n                \"DEVON\": {\n                    \"backend\": \"Devon\",\n                    \"frontend\": \"Devon\"\n                },\n                \"DORSET\": {\n                    \"backend\": \"Dorset\",\n                    \"frontend\": \"Dorset\"\n                },\n                \"DOWN\": {\n                    \"backend\": \"Down\",\n                    \"frontend\": \"Down\"\n                },\n                \"DUMFRIESSHIRE\": {\n                    \"backend\": \"Dumfriesshire\",\n                    \"frontend\": \"Dumfriesshire\"\n                },\n                \"DUNBARTONSHIRE_DUMBARTONSHIRE\": {\n                    \"backend\": \"Dunbartonshire/Dumbartonshire\",\n                    \"frontend\": \"Dunbartonshire/Dumbartonshire\"\n                },\n                \"DUNDEE\": {\n                    \"backend\": \"Dundee\",\n                    \"frontend\": \"Dundee\"\n                },\n                \"DUNGANNON_AND_SOUTH_TYRONE\": {\n                    \"backend\": \"Dungannon and South Tyrone\",\n                    \"frontend\": \"Dungannon and South Tyrone\"\n                },\n                \"DURHAM\": {\n                    \"backend\": \"Durham\",\n                    \"frontend\": \"Durham\"\n                },\n                \"EAST_LOTHIAN_HADDINGTONSHIRE\": {\n                    \"backend\": \"East Lothian/Haddingtonshire\",\n                    \"frontend\": \"East Lothian/Haddingtonshire\"\n                },\n                \"EAST_RIDING_OF_YORKSHIRE\": {\n                    \"backend\": \"East Riding of Yorkshire\",\n                    \"frontend\": \"East Riding of Yorkshire\"\n                },\n                \"EAST_SUSSEX\": {\n                    \"backend\": \"East Sussex\",\n                    \"frontend\": \"East Sussex\"\n                },\n                \"EDINBURGH\": {\n                    \"backend\": \"Edinburgh\",\n                    \"frontend\": \"Edinburgh\"\n                },\n                \"ESSEX\": {\n                    \"backend\": \"Essex\",\n                    \"frontend\": \"Essex\"\n                },\n                \"FALKIRK\": {\n                    \"backend\": \"Falkirk\",\n                    \"frontend\": \"Falkirk\"\n                },\n                \"FERMANAGH\": {\n                    \"backend\": \"Fermanagh\",\n                    \"frontend\": \"Fermanagh\"\n                },\n                \"FIFE\": {\n                    \"backend\": \"Fife\",\n                    \"frontend\": \"Fife\"\n                },\n                \"FLINTSHIRE_SIR_FFLINT\": {\n                    \"backend\": \"Flintshire/Sir Fflint\",\n                    \"frontend\": \"Flintshire/Sir Fflint\"\n                },\n                \"GLAMORGAN_MORGANNWG\": {\n                    \"backend\": \"Glamorgan/Morgannwg\",\n                    \"frontend\": \"Glamorgan/Morgannwg\"\n                },\n                \"GLASGOW\": {\n                    \"backend\": \"Glasgow\",\n                    \"frontend\": \"Glasgow\"\n                },\n                \"GLOUCESTERSHIRE\": {\n                    \"backend\": \"Gloucestershire\",\n                    \"frontend\": \"Gloucestershire\"\n                },\n                \"GREATER_LONDON\": {\n                    \"backend\": \"Greater London\",\n                    \"frontend\": \"Greater London\"\n                },\n                \"GREATER_MANCHESTER\": {\n                    \"backend\": \"Greater Manchester\",\n                    \"frontend\": \"Greater Manchester\"\n                },\n                \"GWENT\": {\n                    \"backend\": \"Gwent\",\n                    \"frontend\": \"Gwent\"\n                },\n                \"HAMPSHIRE\": {\n                    \"backend\": \"Hampshire\",\n                    \"frontend\": \"Hampshire\"\n                },\n                \"HEREFORDSHIRE\": {\n                    \"backend\": \"Herefordshire\",\n                    \"frontend\": \"Herefordshire\"\n                },\n                \"HERTFORDSHIRE\": {\n                    \"backend\": \"Hertfordshire\",\n                    \"frontend\": \"Hertfordshire\"\n                },\n                \"HUNTINGDONSHIRE\": {\n                    \"backend\": \"Huntingdonshire\",\n                    \"frontend\": \"Huntingdonshire\"\n                },\n                \"INVERNES_SSHIRE\": {\n                    \"backend\": \"Inverness-shire\",\n                    \"frontend\": \"Inverness-shire\"\n                },\n                \"ISLE_OF_WIGHT\": {\n                    \"backend\": \"Isle of Wight\",\n                    \"frontend\": \"Isle of Wight\"\n                },\n                \"KENT\": {\n                    \"backend\": \"Kent\",\n                    \"frontend\": \"Kent\"\n                },\n                \"KINCARDINESHIRE\": {\n                    \"backend\": \"Kincardineshire\",\n                    \"frontend\": \"Kincardineshire\"\n                },\n                \"KINROSS_SHIRE\": {\n                    \"backend\": \"Kinross-shire\",\n                    \"frontend\": \"Kinross-shire\"\n                },\n                \"KIRKCUDBRIGHTSHIRE\": {\n                    \"backend\": \"Kirkcudbrightshire\",\n                    \"frontend\": \"Kirkcudbrightshire\"\n                },\n                \"KIRKWALL\": {\n                    \"backend\": \"Kirkwall\",\n                    \"frontend\": \"Kirkwall\"\n                },\n                \"LANARKSHIRE\": {\n                    \"backend\": \"Lanarkshire\",\n                    \"frontend\": \"Lanarkshire\"\n                },\n                \"LANCASHIRE\": {\n                    \"backend\": \"Lancashire\",\n                    \"frontend\": \"Lancashire\"\n                },\n                \"LARNE\": {\n                    \"backend\": \"Larne\",\n                    \"frontend\": \"Larne\"\n                },\n                \"LEICESTERSHIRE\": {\n                    \"backend\": \"Leicestershire\",\n                    \"frontend\": \"Leicestershire\"\n                },\n                \"LINCOLNSHIRE\": {\n                    \"backend\": \"Lincolnshire\",\n                    \"frontend\": \"Lincolnshire\"\n                },\n                \"MERIONETH_MEIRIONNYDD\": {\n                    \"backend\": \"Merioneth/Meirionnydd\",\n                    \"frontend\": \"Merioneth/Meirionnydd\"\n                },\n                \"MERSEYSIDE\": {\n                    \"backend\": \"Merseyside\",\n                    \"frontend\": \"Merseyside\"\n                },\n                \"MIDDLESEX\": {\n                    \"backend\": \"Middlesex\",\n                    \"frontend\": \"Middlesex\"\n                },\n                \"MIDLOTHIAN_EDINBURGHSHIRE\": {\n                    \"backend\": \"Midlothian/Edinburghshire\",\n                    \"frontend\": \"Midlothian/Edinburghshire\"\n                },\n                \"MONMOUTHSHIRE_SIR_FYNWY\": {\n                    \"backend\": \"Monmouthshire/Sir Fynwy\",\n                    \"frontend\": \"Monmouthshire/Sir Fynwy\"\n                },\n                \"MONTGOMERYSHIRE_SIR_DREFALDWYN\": {\n                    \"backend\": \"Montgomeryshire/Sir Drefaldwyn\",\n                    \"frontend\": \"Montgomeryshire/Sir Drefaldwyn\"\n                },\n                \"MORAYSHIRE\": {\n                    \"backend\": \"Morayshire\",\n                    \"frontend\": \"Morayshire\"\n                },\n                \"MOTHERWELL\": {\n                    \"backend\": \"Motherwell\",\n                    \"frontend\": \"Motherwell\"\n                },\n                \"NAIRNSHIRE\": {\n                    \"backend\": \"Nairnshire\",\n                    \"frontend\": \"Nairnshire\"\n                },\n                \"NEWRY_AND_MOURNE\": {\n                    \"backend\": \"Newry and Mourne\",\n                    \"frontend\": \"Newry and Mourne\"\n                },\n                \"NORFOLK\": {\n                    \"backend\": \"Norfolk\",\n                    \"frontend\": \"Norfolk\"\n                },\n                \"NORTH_DOWN_AND_ARDS\": {\n                    \"backend\": \"North Down and Ards\",\n                    \"frontend\": \"North Down and Ards\"\n                },\n                \"NORTH_YORKSHIRE\": {\n                    \"backend\": \"North Yorkshire\",\n                    \"frontend\": \"North Yorkshire\"\n                },\n                \"NORTHAMPTONSHIRE\": {\n                    \"backend\": \"Northamptonshire\",\n                    \"frontend\": \"Northamptonshire\"\n                },\n                \"NORTHUMBERLAND\": {\n                    \"backend\": \"Northumberland\",\n                    \"frontend\": \"Northumberland\"\n                },\n                \"NOTTINGHAMSHIRE\": {\n                    \"backend\": \"Nottinghamshire\",\n                    \"frontend\": \"Nottinghamshire\"\n                },\n                \"OMAGH\": {\n                    \"backend\": \"Omagh\",\n                    \"frontend\": \"Omagh\"\n                },\n                \"ORKNEY\": {\n                    \"backend\": \"Orkney\",\n                    \"frontend\": \"Orkney\"\n                },\n                \"OXFORDSHIRE\": {\n                    \"backend\": \"Oxfordshire\",\n                    \"frontend\": \"Oxfordshire\"\n                },\n                \"PAISLEY\": {\n                    \"backend\": \"Paisley\",\n                    \"frontend\": \"Paisley\"\n                },\n                \"PEEBLESSHIRE\": {\n                    \"backend\": \"Peeblesshire\",\n                    \"frontend\": \"Peeblesshire\"\n                },\n                \"PERTHSHIRE\": {\n                    \"backend\": \"Perthshire\",\n                    \"frontend\": \"Perthshire\"\n                },\n                \"RADNORSHIRE_SIR_FAESYFED\": {\n                    \"backend\": \"Radnorshire/Sir Faesyfed\",\n                    \"frontend\": \"Radnorshire/Sir Faesyfed\"\n                },\n                \"RENFREWSHIRE\": {\n                    \"backend\": \"Renfrewshire\",\n                    \"frontend\": \"Renfrewshire\"\n                },\n                \"ROSSSHIRE\": {\n                    \"backend\": \"Ross-shire\",\n                    \"frontend\": \"Ross-shire\"\n                },\n                \"ROXBURGHSHIRE\": {\n                    \"backend\": \"Roxburghshire\",\n                    \"frontend\": \"Roxburghshire\"\n                },\n                \"RUTLAND\": {\n                    \"backend\": \"Rutland\",\n                    \"frontend\": \"Rutland\"\n                },\n                \"SELKIRKSHIRE\": {\n                    \"backend\": \"Selkirkshire\",\n                    \"frontend\": \"Selkirkshire\"\n                },\n                \"SHETLAND\": {\n                    \"backend\": \"Shetland\",\n                    \"frontend\": \"Shetland\"\n                },\n                \"SHROPSHIRE\": {\n                    \"backend\": \"Shropshire\",\n                    \"frontend\": \"Shropshire\"\n                },\n                \"SOMERSET\": {\n                    \"backend\": \"Somerset\",\n                    \"frontend\": \"Somerset\"\n                },\n                \"SOUTH_YORKSHIRE\": {\n                    \"backend\": \"South Yorkshire\",\n                    \"frontend\": \"South Yorkshire\"\n                },\n                \"STAFFORDSHIRE\": {\n                    \"backend\": \"Staffordshire\",\n                    \"frontend\": \"Staffordshire\"\n                },\n                \"STIRLINGSHIRE\": {\n                    \"backend\": \"Stirlingshire\",\n                    \"frontend\": \"Stirlingshire\"\n                },\n                \"SUFFOLK\": {\n                    \"backend\": \"Suffolk\",\n                    \"frontend\": \"Suffolk\"\n                },\n                \"SURREY\": {\n                    \"backend\": \"Surrey\",\n                    \"frontend\": \"Surrey\"\n                },\n                \"SUTHERLAND\": {\n                    \"backend\": \"Sutherland\",\n                    \"frontend\": \"Sutherland\"\n                },\n                \"TYNE_AND_WEAR\": {\n                    \"backend\": \"Tyne and Wear\",\n                    \"frontend\": \"Tyne and Wear\"\n                },\n                \"UNKNOWNCOUNTY\": {\n                    \"backend\": \"UnknownCounty\",\n                    \"frontend\": \"UnknownCounty\"\n                },\n                \"WARWICKSHIRE\": {\n                    \"backend\": \"Warwickshire\",\n                    \"frontend\": \"Warwickshire\"\n                },\n                \"WEST_LOTHIAN_LINLITHGOWSHIRE\": {\n                    \"backend\": \"West Lothian/Linlithgowshire\",\n                    \"frontend\": \"West Lothian/Linlithgowshire\"\n                },\n                \"WEST_MIDLANDS\": {\n                    \"backend\": \"West Midlands\",\n                    \"frontend\": \"West Midlands\"\n                },\n                \"WEST_SUSSEX\": {\n                    \"backend\": \"West Sussex\",\n                    \"frontend\": \"West Sussex\"\n                },\n                \"WEST_YORKSHIRE\": {\n                    \"backend\": \"West Yorkshire\",\n                    \"frontend\": \"West Yorkshire\"\n                },\n                \"WESTMORLAND\": {\n                    \"backend\": \"Westmorland\",\n                    \"frontend\": \"Westmorland\"\n                },\n                \"WIGTOWNSHIRE\": {\n                    \"backend\": \"Wigtownshire\",\n                    \"frontend\": \"Wigtownshire\"\n                },\n                \"WILTSHIRE\": {\n                    \"backend\": \"Wiltshire\",\n                    \"frontend\": \"Wiltshire\"\n                },\n                \"WORCESTERSHIRE\": {\n                    \"backend\": \"Worcestershire\",\n                    \"frontend\": \"Worcestershire\"\n                }\n            });\n\n            this.set(\"usProvinces\", {\n                \"ALABAMA\": {\n                    \"backend\": \"Alabama\",\n                    \"frontend\": \"Alabama\"\n                },\n                \"ALASKA\": {\n                    \"backend\": \"Alaska\",\n                    \"frontend\": \"Alaska\"\n                },\n                \"AMERICAN_SAMOA\": {\n                    \"backend\": \"American Samoa\",\n                    \"frontend\": \"American Samoa\"\n                },\n                \"ARIZONA\": {\n                    \"backend\": \"Arizona\",\n                    \"frontend\": \"Arizona\"\n                },\n                \"ARKANSAS\": {\n                    \"backend\": \"Arkansas\",\n                    \"frontend\": \"Arkansas\"\n                },\n                \"CALIFORNIA\": {\n                    \"backend\": \"California\",\n                    \"frontend\": \"California\"\n                },\n                \"COLORADO\": {\n                    \"backend\": \"Colorado\",\n                    \"frontend\": \"Colorado\"\n                },\n                \"CONNECTICUT\": {\n                    \"backend\": \"Connecticut\",\n                    \"frontend\": \"Connecticut\"\n                },\n                \"DELAWARE\": {\n                    \"backend\": \"Delaware\",\n                    \"frontend\": \"Delaware\"\n                },\n                \"DISTRICT_OF_COLUMBIA\": {\n                    \"backend\": \"District of Columbia\",\n                    \"frontend\": \"District of Columbia\"\n                },\n                \"FLORIDA\": {\n                    \"backend\": \"Florida\",\n                    \"frontend\": \"Florida\"\n                },\n                \"GEORGIA\": {\n                    \"backend\": \"Georgia\",\n                    \"frontend\": \"Georgia\"\n                },\n                \"GUAM\": {\n                    \"backend\": \"Guam\",\n                    \"frontend\": \"Guam\"\n                },\n                \"HAWAII\": {\n                    \"backend\": \"Hawaii\",\n                    \"frontend\": \"Hawaii\"\n                },\n                \"IDAHO\": {\n                    \"backend\": \"Idaho\",\n                    \"frontend\": \"Idaho\"\n                },\n                \"ILLINOIS\": {\n                    \"backend\": \"Illinois\",\n                    \"frontend\": \"Illinois\"\n                },\n                \"INDIANA\": {\n                    \"backend\": \"Indiana\",\n                    \"frontend\": \"Indiana\"\n                },\n                \"IOWA\": {\n                    \"backend\": \"Iowa\",\n                    \"frontend\": \"Iowa\"\n                },\n                \"KANSAS\": {\n                    \"backend\": \"Kansas\",\n                    \"frontend\": \"Kansas\"\n                },\n                \"KENTUCKY\": {\n                    \"backend\": \"Kentucky\",\n                    \"frontend\": \"Kentucky\"\n                },\n                \"LOUISIANA\": {\n                    \"backend\": \"Louisiana\",\n                    \"frontend\": \"Louisiana\"\n                },\n                \"MAINE\": {\n                    \"backend\": \"Maine\",\n                    \"frontend\": \"Maine\"\n                },\n                \"MARYLAND\": {\n                    \"backend\": \"Maryland\",\n                    \"frontend\": \"Maryland\"\n                },\n                \"MASSACHUSETTS\": {\n                    \"backend\": \"Massachusetts\",\n                    \"frontend\": \"Massachusetts\"\n                },\n                \"MICHIGAN\": {\n                    \"backend\": \"Michigan\",\n                    \"frontend\": \"Michigan\"\n                },\n                \"MINNESOTA\": {\n                    \"backend\": \"Minnesota\",\n                    \"frontend\": \"Minnesota\"\n                },\n                \"MISSISSIPPI\": {\n                    \"backend\": \"Mississippi\",\n                    \"frontend\": \"Mississippi\"\n                },\n                \"MISSOURI\": {\n                    \"backend\": \"Missouri\",\n                    \"frontend\": \"Missouri\"\n                },\n                \"MONTANA\": {\n                    \"backend\": \"Montana\",\n                    \"frontend\": \"Montana\"\n                },\n                \"NEBRASKA\": {\n                    \"backend\": \"Nebraska\",\n                    \"frontend\": \"Nebraska\"\n                },\n                \"NEVADA\": {\n                    \"backend\": \"Nevada\",\n                    \"frontend\": \"Nevada\"\n                },\n                \"NEW_HAMPSHIRE\": {\n                    \"backend\": \"New Hampshire\",\n                    \"frontend\": \"New Hampshire\"\n                },\n                \"NEW_JERSEY\": {\n                    \"backend\": \"New Jersey\",\n                    \"frontend\": \"New Jersey\"\n                },\n                \"NEW_MEXICO\": {\n                    \"backend\": \"New Mexico\",\n                    \"frontend\": \"New Mexico\"\n                },\n                \"NEW_YORK\": {\n                    \"backend\": \"New York\",\n                    \"frontend\": \"New York\"\n                },\n                \"NORTH_CAROLINA\": {\n                    \"backend\": \"North Carolina\",\n                    \"frontend\": \"North Carolina\"\n                },\n                \"NORTH_DAKOTA\": {\n                    \"backend\": \"North Dakota\",\n                    \"frontend\": \"North Dakota\"\n                },\n                \"NORTHERN_MARIANA_ISLANDS\": {\n                    \"backend\": \"Northern Mariana Islands\",\n                    \"frontend\": \"Northern Mariana Islands\"\n                },\n                \"OHIO\": {\n                    \"backend\": \"Ohio\",\n                    \"frontend\": \"Ohio\"\n                },\n                \"OKLAHOMA\": {\n                    \"backend\": \"Oklahoma\",\n                    \"frontend\": \"Oklahoma\"\n                },\n                \"OREGON\": {\n                    \"backend\": \"Oregon\",\n                    \"frontend\": \"Oregon\"\n                },\n                \"PENNSYLVANIA\": {\n                    \"backend\": \"Pennsylvania\",\n                    \"frontend\": \"Pennsylvania\"\n                },\n                \"PUERTO_RICO\": {\n                    \"backend\": \"Puerto Rico\",\n                    \"frontend\": \"Puerto Rico\"\n                },\n                \"RHODE_ISLAND\": {\n                    \"backend\": \"Rhode Island\",\n                    \"frontend\": \"Rhode Island\"\n                },\n                \"SOUTH_CAROLINA\": {\n                    \"backend\": \"South Carolina\",\n                    \"frontend\": \"South Carolina\"\n                },\n                \"SOUTH_DAKOTA\": {\n                    \"backend\": \"South Dakota\",\n                    \"frontend\": \"South Dakota\"\n                },\n                \"TENNESSEE\": {\n                    \"backend\": \"Tennessee\",\n                    \"frontend\": \"Tennessee\"\n                },\n                \"TEXAS\": {\n                    \"backend\": \"Texas\",\n                    \"frontend\": \"Texas\"\n                },\n                \"U_S_Virgin_Islands\": {\n                    \"backend\": \"U.S. Virgin Islands\",\n                    \"frontend\": \"U.S. Virgin Islands\"\n                },\n                \"UTAH\": {\n                    \"backend\": \"Utah\",\n                    \"frontend\": \"Utah\"\n                },\n                \"VERMONT\": {\n                    \"backend\": \"Vermont\",\n                    \"frontend\": \"Vermont\"\n                },\n                \"VIRGINIA\": {\n                    \"backend\": \"Virginia\",\n                    \"frontend\": \"Virginia\"\n                },\n                \"WASHINGTON\": {\n                    \"backend\": \"Washington\",\n                    \"frontend\": \"Washington\"\n                },\n                \"WEST_VIRGINIA\": {\n                    \"backend\": \"West Virginia\",\n                    \"frontend\": \"West Virginia\"\n                },\n                \"WISCONSIN\": {\n                    \"backend\": \"Wisconsin\",\n                    \"frontend\": \"Wisconsin\"\n                },\n                \"WYOMING\": {\n                    \"backend\": \"Wyoming\",\n                    \"frontend\": \"Wyoming\"\n                }\n            });\n\n            this.set(\"auProvinces\", {\n                \"NEW_SOUTH_WALES\": {\n                    \"backend\": \"New South Wales\",\n                    \"frontend\": \"New South Wales\"\n                },\n                \"VICTORIA\": {\n                    \"backend\": \"Victoria\",\n                    \"frontend\": \"Victoria\"\n                },\n                \"QUEENSLAND\": {\n                    \"backend\": \"Queensland\",\n                    \"frontend\": \"Queensland\"\n                },\n                \"SOUTH_AUSTRALIA\": {\n                    \"backend\": \"South Australia\",\n                    \"frontend\": \"South Australia\"\n                },\n                \"WESTERN_AUSTRALIA\": {\n                    \"backend\": \"Western Australia\",\n                    \"frontend\": \"Western Australia\"\n                },\n                \"TASMANIA\": {\n                    \"backend\": \"Tasmania\",\n                    \"frontend\": \"Tasmania\"\n                },\n                \"AUSTRALIAN_CAPITAL_TERRITORY\": {\n                    \"backend\": \"Australian Capital Territory\",\n                    \"frontend\": \"Australian Capital Territory\"\n                },\n                \"NORTHERN_TERRITORY\": {\n                    \"backend\": \"Northern Territory\",\n                    \"frontend\": \"Northern Territory\"\n                }\n            });\n\n            this.set(\"mediumTypeDnc\", {\n                \"EMAIL\": {\n                    \"backend\": \"email_dnc\",\n                    \"frontend\": objStrings.getString(\"email\")\n                },\n                \"SMS\": {\n                    \"backend\": \"sms_dnc\",\n                    \"frontend\": objSSCoreStringsService.getString(\"sms\")\n                },\n                \"WHATSAPP\": {\n                    \"backend\": \"whatsapp_dnc\",\n                    \"frontend\": objSSCoreStringsService.getString(\"whatsapp\")\n                },\n                \"CALL\": {\n                    \"backend\": \"call_dnc\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"phoneCall\")\n                },\n                \"PUSH_NOTIFICATION\": {\n                    \"backend\": \"push_notification_dnc\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"pushNotification\")\n                }\n            });\n\n            this.set(\"dbsWorforce\", {\n                \"ADULT\": {\n                    \"backend\": \"workforce_adult\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"workforceAdult\")\n                },\n                \"CHILD\": {\n                    \"backend\": \"workforce_child\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"workforceChild\")\n                },\n                \"ADULT_AND_CHILD\": {\n                    \"backend\": \"workforce_child_adult\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"workforceChildAndAdult\")\n                },\n                \"OTHER\": {\n                    \"backend\": \"workforce_other\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"workforceOther\")\n                },\n                \"NONE\": {\n                    \"backend\": \"workforce_none\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"workforceNone\")\n                }\n            });\n\n            this.set(\"severity\", {\n                \"MINOR\": {\n                    \"backend\": \"minor\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"minor\")\n                },\n                \"SERIOUS\": {\n                    \"backend\": \"serious\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"serious\")\n                },\n                \"critical\": {\n                    \"backend\": \"critical\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"critical\")\n                }\n            });\n\n            this.set(\"clientType\", {\n                \"ORGANISATION\": {\n                    \"backend\": \"organisation\",\n                    \"frontend\": objStrings.getString(\"organisation\")\n                },\n                \"SITE\": {\n                    \"backend\": \"site\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"site\")\n                },\n                \"WARD\": {\n                    \"backend\": \"ward\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"ward\")\n                }\n            });\n\n            this.set(\"appliesTo\", {\n                \"ORGANISATIONSTRUCTURE\": {\n                    \"backend\": \"OrganisationStructure\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"organisationStructure\")\n                },\n                \"SITESTRUCTURE\": {\n                    \"backend\": \"SiteStructure\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"siteStructure\")\n                },\n                \"SITESPECIFIC\": {\n                    \"backend\": \"SiteSpecific\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"siteSpecific\")\n                },\n                \"WARDSPECIFIC\": {\n                    \"backend\": \"WardSpecific\",\n                    \"frontend\": objCandidateProfileStrings.getString(\"wardSpecific\")\n                }\n            });\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/a24-strings-candidate-profile\", [\"exports\", \"a24-ember-lookup/services/a24-strings-base\"], function (exports, _a24StringsBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _a24StringsBase.default.extend({\n        _objStrings: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            this.set(\"_objStrings\", {\n                //===== STRINGS START =====\n\n                distance: \"Distance\",\n                distanceIsEmpty: \"Distance is empty\",\n                isWithin: \"Is within\",\n                km: \"km\",\n                mi: \"mi\",\n                kilometers: \"Kilometers\",\n                miles: \"Miles\",\n                client: \"Client\",\n                enterClientName: \"Enter Client name...\",\n                enterCandidateName: \"Enter Candidate name...\",\n                enterAddress: \"Enter address...\",\n                customLocation: \"Custom Location\",\n                replyWith: \"Reply With\",\n                campaignName: \"Campaign Name\",\n                replyBackWith: \"Reply Back With\",\n                content: \"Content\",\n\n                complianceRules: \"Compliance Rules\",\n                complianceRulesWarningMessage: \"Please Note: The second filter condition added onto a rule will be an OR condition\",\n                unlinkRule: \"Unlink Rule\",\n                linkRule: \"Link Rule\",\n                linkUnlinkRule: \"Link/Unlink Rules\",\n                setAsDefault: \"Set as Default\",\n                unSetAsDefault: \"Unset as Default\",\n                unlinkRuleDefaultNotAllowed: \"Unable to unlink a rule that is set as default\",\n                willLapse: \"Will Lapse\",\n                willStillBeCompliant: \"Will still be Compliant by\",\n                viewComplianceRule: \"View Compliance Rule\",\n\n                city: \"City\",\n                province: \"Province\",\n                postCode: \"Post Code\",\n                status: \"Status\",\n                responsibleConsultant: \"Responsible Consultant\",\n                userStatus: \"User Status\",\n                lastContactedAt: \"Last Contacted At\",\n                buildQuery: \"Build query\",\n                buildComplianceRuleCondition: \"Build Compliance Rule Condition\",\n                acknowledgedPolicies: \"Acknowledged Policies\",\n                firstTimeToStatus: \"First Time To Status\",\n                lastTimeToStatus: \"Last Time To Status\",\n                externalDocs: \"External Docs\",\n                version: \"Version\",\n                withinDateRange: \"Within date range\",\n                uploadedWithin: \"Uploaded within\",\n                expiryWithin: \"Expiry within\",\n                setupComplete: \"Setup Complete\",\n                emailNotVerified: \"Email not Verified\",\n                inviteSent: \"Invite Sent\",\n                userRegNotInitiated: \"User Reg not Initiated\",\n                enabled: \"Enabled\",\n                view: \"View\",\n\n                defaultCompliance: \"Default Compliance\",\n                compliant: \"Compliant\",\n                notCompliant: \"Not Compliant\",\n                notApplicable: \"Not Applicable\",\n\n                tagManagement: \"Tag Management\",\n                tags: \"Tags\",\n                type: \"Type\",\n\n                cannotDoQueryForAddress: \"Could not query distance for this address since the address does not have coordinates. Please enter the coordinates manually below.\",\n                addressSuggestInputLoadError: \"The custom location suggest functionality is currently unavailable. Please try again later or manually supply the coordinates below.\",\n                longitudeInputError: \"Longitude should be a number between 180 and -180\",\n                latitudeInputError: \"Latitude should be a number between 90 and -90\",\n\n                expiresIn: \"Expires in\",\n                profilePicture: \"Profile Picture\",\n                uploadingProfilePic: \"Uploading Profile Picture...\",\n                uploadProfilePicFailure: \"Failed to upload profile picture. Please try again in a few minutes\",\n                uploadProfilePicSuccess: \"Successfully uploaded profile picture\",\n                imagePreparing: \"Preparing Image...\",\n                changeProfilePic: \"Change profile picture\",\n                avatarFailedToRetrieve: \"Failed to retrieve profile picture. Retry again in a few minutes\",\n                removingProfilePic: \"Removing profile picture...\",\n                removeProfilePicSuccess: \"Successfully removed profile picture\",\n                removeProfilePicFailure: \"Failed to remove profile picture\",\n                removeAvatar: \"Remove profile picture\",\n                removeCandidateAvatarConfirmation: \"Are you sure you want to remove this profile picture?\",\n                removePermissionError: \"You do not have permission to remove the profile picture of the candidate\",\n                reloadImage: \"Retrieve profile picture\",\n\n                totalYearsOfExperience: \"Total years of experience\",\n                positionHeld: \"Position Held\",\n                lessThanAMonth: \"Less than a month\",\n\n                openOrderInNewTab: \"Open Order in new tab\",\n\n                played: \"Played\",\n                paused: \"Paused\",\n                keyword: \"Keyword\",\n\n                for: \"For\",\n                inThe: \"In the\",\n                thatIs: \"That is\",\n\n                fax: \"Fax\",\n                character: \"Character\",\n                professional: \"Professional\",\n                knownFrom: \"Known From\",\n                knownTo: \"Known To\",\n                profession: \"Profession\",\n                phone: \"Phone\",\n                employerDetails: \"Employer Details\",\n                refreeDetails: \"Referee Details\",\n                employerNameCompany: \"Employer Name (Company)\",\n                characterReference: \"Character Reference\",\n                profesionalReference: \"Professional Reference\",\n\n                references: \"References\",\n\n                entry: \"Entry\",\n                entryStatus: \"Entry Status\",\n                obtainedAt: \"Obtained At\",\n                expiresOn: \"Expires On\",\n                validFrom: \"Valid From\",\n                professionalRegistration: \"Professional Registration\",\n                registrationEntries: \"Registration Entries\",\n                profRegEntries: \"Prof Reg Entry\",\n                registrationNumber: \"Registration Number\",\n                registrationBody: \"Registration Body\",\n                reference: \"Reference\",\n\n                unknown: \"Unknown\",\n                externalPortfolio: \"External Portfolio\",\n                employer: \"Employer\",\n                jobFamily: \"Job Family\",\n                jobTitle: \"Job Title\",\n\n                document: \"Document\",\n                uploaded: \"Uploaded\",\n                rejected: \"Rejected\",\n                expiry: \"Expiry\",\n\n                as: \"As\",\n                wasFor: \"Was for\",\n                last: \"Last\",\n                month: \"Month\",\n                months: \"Months\",\n                year: \"Year\",\n                years: \"Years\",\n                atLeast: \"At least\",\n                anyAmountOf: \"Any amount of\",\n                withExperienceWithin: \"With experience within\",\n\n                oops: \"Oops...\",\n\n                activityType: \"Activity Type\",\n                selectActivity: \"Select an activity\",\n                activity: \"Activity\",\n                activities: \"Activities\",\n                activityDate: \"Activity Date\",\n\n                mobile: \"Mobile\",\n                additional: \"Additional\",\n\n                married: \"Married\",\n                separated: \"Separated\",\n                single: \"Single\",\n\n                bahai: \"Bahai\",\n                buddhist: \"Buddhist\",\n                christian: \"Christian\",\n                hindu: \"Hindu\",\n                jain: \"Jain\",\n                jewish: \"Jewish\",\n                muslim: \"Muslim\",\n                noReligion: \"No Religion\",\n                sikh: \"Sikh\",\n                protestant: \"Protestant\",\n                romanCatholic: \"Roman Catholic\",\n                preferNotToSay: \"Prefer not to say\",\n\n                postalAddress: \"Postal Address\",\n                homeAddress: \"Home Address\",\n                alternativeAddress: \"Alternative Address\",\n\n                verified: \"Verified\",\n                unverified: \"Unverified\",\n                partiallyVerified: \"Partially Verified\",\n                active: \"Active\",\n                workSuggest: \"Work Suggest\",\n\n                whiteBritish: \"White British\",\n                whiteIrish: \"White Irish\",\n                whiteOther: \"White Other\",\n                mixedWhiteAndBlackCaribbean: \"Mixed White and Black Caribbean\",\n                mixedWhiteAndBlackAfrican: \"Mixed White and Black African\",\n                mixedWhiteAndAsian: \"Mixed White and Asian\",\n                mixedOther: \"Mixed Other\",\n                asianBritish: \"Asian British\",\n                asianIndian: \"Asian Indian\",\n                asianPakistani: \"Asian Pakistani\",\n                asianBangladeshi: \"Asian Bangladeshi\",\n                tamil: \"Tamil\",\n                asianOther: \"Asian Other\",\n                blackBritish: \"Black British\",\n                blackCaribbean: \"Black Caribbean\",\n                blackAfrican: \"Black African\",\n                blackOther: \"Black Other\",\n                chinese: \"Chinese\",\n                blackEuropean: \"Black European\",\n\n                mr: \"Mr\",\n                mrs: \"Mrs\",\n                ms: \"Ms\",\n                miss: \"Miss\",\n                dr: \"Dr\",\n                professor: \"Professor\",\n                baron: \"Baron\",\n                baroness: \"Baroness\",\n                brigadier: \"Brigadier\",\n                canon: \"Canon\",\n                captain: \"Captain\",\n                duchess: \"Duchess\",\n                duke: \"Duke\",\n                esq: \"Esq\",\n                father: \"Father\",\n                hon: \"Hon\",\n                inspector: \"Inspector\",\n                lady: \"Lady\",\n                lord: \"Lord\",\n                ltCol: \"Lt col\",\n                major: \"Major\",\n                mostRever: \"Most rever\",\n                pastor: \"Pastor\",\n                rabbi: \"Rabbi\",\n                revDr: \"Rev dr\",\n                reverend: \"Reverend\",\n                rtReveren: \"Rt reveren\",\n                sir: \"Sir\",\n                sister: \"Sister\",\n                squadronL: \"Squadron l\",\n                wgCdr: \"Wg cdr\",\n\n                bisexual: \"Bisexual\",\n                gayMan: \"Gay Man\",\n                gayWomen: \"Gay Woman/Lesbian\",\n                straight: \"Heterosexual/Straight\",\n\n                intersex: \"Intersex\",\n                transgender: \"Transgender\",\n                transsexual: \"Transsexual\",\n\n                limited: \"Limited\",\n                native: \"Native\",\n                readWriteSpeak: \"Read Write & Speak\",\n\n                own: \"Own\",\n                public: \"Public\",\n\n                permanent: \"Permanent\",\n                contract: \"Contract\",\n                agencyWork: \"Agency Work\",\n                selfEmployed: \"Self Employed\",\n                partTime: \"Part Time\",\n                studentFullTime: \"Student - Full Time\",\n                studentPlacement: \"Student - Placement\",\n                workType: \"Work Type\",\n                institute: \"Institute\",\n\n                currentStatus: \"Current Status\",\n                currentStatusSince: \"Current Status Since\",\n                firstStatus: \"First Status\",\n                firstStatusSince: \"First Status Since\",\n                linkedToGroupSince: \"Linked To Group Since\",\n                linkedToAgencySince: \"Linked To Agency Since\",\n\n                idNumber: \"Id Number\",\n                contactNumber: \"Contact Number\",\n                noNumber: \"No number\",\n                viewCandidate: \"View Candidate\",\n                personalInfo: \"Personal Info\",\n                profileNote: \"Profile Note\",\n                note: \"Note\",\n                miscDetails: \"Miscellaneous Details\",\n                equalityMonitoring: \"Equality Monitoring\",\n                religion: \"Religion\",\n                ethnicOrigin: \"Ethnic Origin\",\n                sexualOrientation: \"Sexual Orientation\",\n                genderIdentity: \"Gender Identity\",\n\n                payrollNumber: \"Payroll Number\",\n                currentPayrollNumber: \"Current Payroll Number\",\n                historicalPayrollNumber: \"Historical Payroll Number\",\n                linkedInfo: \"Linked Info\",\n                emailOptOut: \"Email Opt Out\",\n                employmentReferenceNumber: \"Employment Reference Number\",\n\n                hi: \"Hi\",\n                greeting: \"Greeting\",\n                updateEntity: \"Update entity\",\n                updateReason: \"Update reason\",\n                regards: \"Regards\",\n                area: \"Area\",\n                yourAvailability: \"Your availability\",\n                iHaveTempWorkAvail: \"I have temp work available\",\n                pleaseReplyWith: \"Please reply with\",\n\n                relationship: \"Relationship\",\n                addressType: \"Address Type\",\n                number: \"Number\",\n\n                reason: \"Reason\",\n\n                consultant: \"Consultant\",\n                consultants: \"Consultants\",\n                assignedUser: \"Assigned User\",\n                consultantRole: \"Consultant Role\",\n                consultantType: \"Consultant Type\",\n\n                transportType: \"Transport Type\",\n\n                languages: \"Languages\",\n                knownAs: \"Known As\",\n                middleName: \"Middle Name\",\n                maidenName: \"Maiden Name\",\n\n                candidateProfile: \"Candidate Profile\",\n\n                updatingEqualityDetails: \"Updating Equality details...\",\n                equalityDetailsUpdateSuccess: \"Equality details updated successfully\",\n                equalityDetailsUpdateFailure: \"Unexpected error! Failed to update\",\n\n                nextOfKin: \"Next of Kin\",\n                addNextofKin: \"Add Next of Kin\",\n                editNextofKin: \"Edit Next of Kin\",\n                failAddNextOfKin: \"Failed to create next of kin\",\n                failUpdateNextOfKin: \"Failed to update next of kin\",\n                failRemoveNextOfKin: \"Failed to delete next of kin\",\n                creatingNextOfKin: \"Creating next of kin...\",\n                updatingNextOfKin: \"Updating next of kin...\",\n                removingNextOfKin: \"Deleting next of kin...\",\n                successUpdateNextOfKin: \"Successfully updated next of kin\",\n                successAddNextOfKin: \"Successfully created next of kin\",\n                successRemoveNextOfKin: \"Successfully deleted next of kin\",\n\n                typeHereToSearhBelow: \"Type here to search the items below...\",\n\n                position: \"Position\",\n                startDate: \"Start Date\",\n                endDate: \"End Date\",\n                responsibilities: \"Responsibilities\",\n                current: \"Current\",\n\n                otherNames: \"Other Names\",\n                contactDetails: \"Contact Details\",\n\n                failAddLang: \"Failed to create language\",\n                failUpdateLang: \"Failed to update language\",\n                failRemoveLang: \"Failed to delete language\",\n                creatingLang: \"Creating language...\",\n                updatingLang: \"Updating language...\",\n                removingLang: \"Deleting language...\",\n                successUpdateLang: \"Successfully updated language\",\n                successAddLang: \"Successfully created language\",\n                successRemoveLang: \"Successfully deleted language\",\n                addLanguage: \"Add Language\",\n                editLanguage: \"Edit Language\",\n                languageName: \"Language Name\",\n                languageProficiency: \"Language Proficiency\",\n\n                coordinates: \"Coordinates\",\n                county: \"County\",\n\n                addFailedRefreshPage: \"Failed to add item.\\nThe data might have changed. Please refresh the page and try again\",\n\n                employerName: \"Employer Name\",\n                titleHeld: \"Title Held\",\n                duration: \"Duration\",\n                mainResponsibilities: \"Main Responsibilities\",\n                reasonForLeaving: \"Reason For Leaving\",\n                workHistory: \"Work History\",\n                generateCandidateInterviewDocument: \"Generate Candidate Interview Document\",\n                preparingGeneration: \"Preparing generation...\",\n                generateReport: \"Generating report...\",\n                failGenerateReport: \"Failed to generate report\",\n                dateGenerated: \"Date Generated\",\n\n                completingForm: \"Completing Form\",\n                requiresPayment: \"Requires Payment\",\n                requiresCountersignerAction: \"Requires Countersigner Action\",\n                unordered: \"Bulky Unordered\",\n                ordered: \"Bulky Ordered\",\n                receipted: \"Bulky Receipted\",\n                invalid: \"Bulky Invalid\",\n                passed: \"Bulky Passed\",\n                failed: \"Bulky Failed\",\n                missingDocuments: \"Missing Documents\",\n                requiresCandidateAction: \"Requires Candidate Action\",\n                candidateActioned: \"Candidate Actioned\",\n                noCrb: \"No CRB\",\n                expiring: \"Expiring\",\n                expired: \"Expired\",\n                counterSigned: \"Counter Signed\",\n                notRequired: \"Not Required \",\n                newApplication: \"New Application\",\n                noDisclaimer: \"No Disclaimer\",\n                noLanguage: \"No Language   \",\n                manualApplication: \"Manual Application\",\n                a24Rejected: \"A24 Rejected\",\n                a24RejectedNotReversed: \"A24 Rejected Not Reversed\",\n                validatedForm: \"Validated Form\",\n                reload: \"Reload\",\n                candidate: \"Candidate\",\n                candidateLink: \"Candidate Link\",\n                candidateType: \"Candidate Type\",\n                linkCandidate: \"Link Existing Candidate\",\n                finish: \"Finish\",\n                unverifiedCandidateEmail: \"The email you are trying to add already exists but is unverified and can therefore not be linked to the Agency Group at this time, please try again later\",\n\n                resendInviteEmail: \"Resend invite/verification\",\n                resendInviteEmailConfirmation: \"Are you sure you want to resend the invitation/verification email?\",\n                resendInviteEmailSuccess: \"Successfully resent invitation email to candidate\",\n                resendInviteEmailFailure: \"Error! Could not resend the invitation/verification email\",\n\n                sendInviteEmailSuccess: \"Successfully sent invitation email to candidate\",\n                sendVerificationEmailSuccess: \"Successfully sent verification email to candidate\",\n                noInviteVerificationEmailSent: \"No email was sent to the candidate. The current status of the candidate does not allow an invite/verification email to be sent\",\n                noNotificationForType: \"No notification found for notification type\",\n                notificationSendUnexpectedError: \"Something unexpected happened, please try again.\",\n\n                loadDataRetry: \"Could not load all the required data for this page, please click the refresh button to try again\",\n                refresh: \"Refresh\",\n                general: \"General\",\n                policies: \"Policies\",\n                plugins: \"Plugins\",\n                permissionsError: \"You do not have the required permissions to view the requested information\",\n                emailPreview: \"Email Preview\",\n                sendNotification: \"Send Notification\",\n                selectNotificationType: \"Select Notification Type\",\n                send: \"Send\",\n                from: \"From\",\n                to: \"To\",\n                numberOfOccurrences: \"Number of occurrences\",\n                lastOccurredAt: \"Last occurred at\",\n\n                complianceRule: \"Compliance Rule\",\n                complianceContract: \"Compliance Contract\",\n\n                done: \"Done\",\n                skills: \"Skills\",\n                skill: \"Skill\",\n                verify: \"Verify\",\n                existingSkills: \"Existing Skills\",\n                availableSkills: \"Available Skills\",\n                experience: \"Experience\",\n                employmentExp: \"Employment Experience\",\n                statedExp: \"Stated Experience\",\n                failedAddingSkillMin: \"Duration should be more than one\",\n                validationYearsOrMonthsRequired: \"Either years or months is required\",\n                validationMonthSmallerThan12: \"Months is not allowed to be more than 11\",\n                getSystemSkillsError: \"Failed to retrieve available skills. Please try again later\",\n                verifyConfirmation: \"Are you sure you want to verify this item?\",\n                getSystemQualificationsError: \"Failed to retrieve available qualifications. Please try again later\",\n\n                qualification: \"Qualification\",\n                qualifications: \"Qualifications\",\n                existingQualifications: \"Existing Qualifications\",\n                availableQualifications: \"Available Qualifications\",\n                dateObtained: \"Date Obtained\",\n                expiryDate: \"Expiry Date\",\n                institution: \"Institution\",\n                skillName: \"Skill name\",\n                stated: \"Stated\",\n                employment: \"Employment\",\n                total: \"Total\",\n                obtained: \"Obtained\",\n                expire: \"Expire\",\n\n                experience4PlusYears: \"4+ Years Experience\",\n                experience2To4Years: \"2 - 4 Years Experience\",\n                experience6MonthsTo2Years: \"6 Months - 2 Years Experience\",\n                experience0To6Months: \"0-6 Months Experience\",\n\n                yearsOfExperience: \"Years Of Experience\",\n                externalVerification: \"External Verification\",\n                unemploymentReason: \"Unemployment Reason\",\n                unemployed: \"Unemployed\",\n                lastUploadedDate: \"Last Uploaded Date\",\n                externalDocuments: \"External Documents\",\n                externalGeneral: \"External General\",\n                dbsStatus: \"DBS Status\",\n                lastContacted: \"Last Contacted\",\n                dismissal: \"Dismissal\",\n                haveYouEverBeenDismissed: \"Have you ever been dismissed from any of your previous employers?\",\n                externalInfo: \"External Info\",\n                thesePagesListData: \"This page lists data from external sources. These external sources will push the data to Staffshift. The data you are viewing may be out of date as updates could be delayed.\",\n                lastUploaded: \"Last Uploaded\",\n                info: \"Info\",\n\n                never: \"Never\",\n                lessThanAndExpired: \"Less than or Expired\",\n                lessThanNotExpired: \"Less than and Not Expired\",\n                lessThan: \"Less than\",\n                andNotExpired: \"and Not Expired\",\n                orExpired: \"or Expired\",\n                moreThan: \"More than\",\n                exactly: \"Exactly\",\n                days: \"Days\",\n                expiringIn: \"Expiring In\",\n                externalDaysTagEmpty: \"External Days to Expiry is empty\",\n                externalDaysToExpiry: \"External Days to Expiry\",\n\n                updateGeoLocation: \"Update Geo Location\",\n                doNotContact: \"Do Not Contact\",\n                notificationPreference: \"Notification Preference\",\n                phoneCall: \"Phone Call\",\n                pushNotification: \"Push Notification\",\n\n                primaryDelivery: \"Primary Delivery\",\n                firstFallback: \"1st Fallback\",\n                secondFallback: \"2nd Fallback\",\n                thirdFallback: \"3rd Fallback\",\n                noNotificationTemplatesConfigured: \"No notification templates configured\",\n                notificationPriority: \"Notification Priority\",\n                th: \"th\",\n                fallback: \"Fallback\",\n                transport: \"Transport\",\n\n                positionHeldDescription: \"By default each postion held will be marked as active to receive notifications. If the candidate does not wish to be notified for certain positions then toggle can be clicked and the position marked as inactive for certain positions.\",\n                andConsultantIs: \"And Consultant Is\",\n\n                none: \"None\",\n\n                workforceAdult: \"Adult\",\n                workforceChild: \"Child\",\n                workforceChildAndAdult: \"Child And Adult\",\n                workforceOther: \"Other\",\n                workforceNone: \"None\",\n                externalWorkforce: \"External Workforce\",\n                aMemberOf: \"A member of\",\n                candidateInstructions: \"Candidate Instructions\",\n                timesheetNumber: \"Timesheet Number\",\n                date: \"Date\",\n                hours: \"Hours\",\n\n                site: \"Site\",\n                ward: \"Ward\",\n                appliesTo: \"Applies To\",\n                severity: \"Severity\",\n                dateExcluded: \"Date Excluded\",\n                lifted: \"Lifted\",\n                minor: \"Minor\",\n                serious: \"Serious\",\n                critical: \"Critical\",\n                exclusions: \"Exclusions\",\n                viewExclusion: \"View Exclusion\",\n\n                effectiveFrom: \"Effective From\",\n                effectiveTo: \"Effective To\",\n                complianceExemptions: \"Compliance Exemptions\",\n                wardName: \"Ward Name\",\n                organisationStructure: \"Organisation Structure\",\n                siteStructure: \"Site Structure\",\n                siteSpecific: \"Site Specific\",\n                wardSpecific: \"Ward Specific\",\n                viewExemption: \"View Exemption\",\n\n                verifiedDocuments: \"Verified Documents\",\n                documentsWaitingForVerification: \"Documents Waiting for Verification\",\n                verifiedAt: \"Verified At\",\n                issuedAt: \"Issued At\",\n                expireAt: \"Expired At\",\n\n                referenceCompliance: \"Reference Compliance\",\n                isCompliant: \"is Compliant\",\n\n                hasNextOfKin: \"Has Next of Kin\",\n\n                //===== STRINGS END   =====\n\n                //===== TOKEN STRINGS START =====\n                externalDaysTag: \"External Days to Expiry is {0}\",\n\n                externalPortfolioTagEmpty: \"Portfolio is empty\",\n\n                externalPortfolioTag: \"Portfolio is {0}\",\n                externalPortfolioTagNoTitle: \"Is {0}\",\n\n                professionalRegistrationTag: \"Professional Registration is {0}\",\n                professionalRegistrationTagNoTitle: \"Is {0}\",\n                professionalRegistrationEntryTag: \"Prof Reg Entry is {0}\",\n                professionalRegistrationEntryTagNoTitle: \"Is {0}\",\n\n                positionHeldTag: \"Position held was for {0} as {1} {2}\",\n                positionHeldTagNoTitle: \"Was for {0} as {1} {2}\",\n\n                validationOnlyNumbes: \"{0} is only allowed to be numbers.\",\n\n                headerManageSkills: \"Manage Skills - {0}\",\n\n                headerManageQualifications: \"Manage Qualifications - {0}\",\n                verifyingItem: \"Verifying {0}...\",\n\n                successVerifyItem: \"Successfully verified {0}\",\n\n                failVerifyItem: \"Failed to verify {0}\",\n                lastSeenInApp: \"Last Seen In App\",\n\n                distanceTag: \"Distance is within {0} of {1}\",\n                distanceTagNoTitle: \"Is within {0} of {1}\",\n                distanceTagCoords: \"Distance is within {0} of coordinates {1}\",\n                distanceTagCoordsNoTitle: \"Is within {0} of coordinates {1}\",\n                positionHeldSetToActiveMessage: \"Are you sure you want to start '{0}' as an active position. <br><br>Started positions will by default include candidates in 'Possible Candidate' searches were we take Position Held into account. This will also impact the compliance health displayed to candidates.\",\n                positionHeldSetToInactiveMessage: \"Are you sure you want to pause '{0}' as an active position.<br><br>Paused positions will by default exclude candidates from 'Possible Candidate' searches were we take Position Held into account. This will also impact the compliance health displayed to candidates.\",\n\n                consultantRoleTag: \"Consultant Role {0} {1}\",\n                consultantRoleTagNoTitle: \"{0} {1}\",\n                consultantTag: \" and Consultant is {0}\",\n                selectedActivityTypes: \"Activity Type Description: {0}\",\n\n                invalidNameError: \"{0} can only contain letters, spaces, hyphens, or apostrophes.\",\n\n                //===== TOKEN STRINGS END =====\n\n                //===== SAFE STRINGS START =====\n\n                cannotDoQueryForClient: \"Could not query distance for this client since the address is not properly configured in Staffshift. Please email info@staffshift.com with the client name for this to be rectified or enter the coordinates manually below.\",\n                cannotDoQueryForCandidate: \"Could not query distance for this candidate, since the address coordinates are not properly configured in Staffshift. You can update the address coordinates from the candidate's profile page, or enter the coordinates manually below.\",\n                cannotDoQueryForCandidateFailed: \"Failed to retrieve candidate's address details, please try again.\",\n                cannotDoQueryForCandidateNoAddress: \"Could not query distance, since the candidate has no addresses configured.\",\n\n                skillsHeader: \"Skills - {0}\",\n                editSkillsHeader: \"Edit Skill - {0}</br>{1}\",\n                headerManageEditSkill: \"Manage Skill - {0}</br>{1}\",\n                addSkillsHeader: \"Add Skill - {0}</br>{1}\",\n\n                qualificationsHeader: \"Qualifications - {0}\",\n                editQualificationsHeader: \"Edit Qualification - {0}</br>{1}\",\n                addQualificationsHeader: \"Add Qualification - {0}</br>{1}\",\n                viewQualificationsHeader: \"Qualification - {0}</br>{1}\",\n                verifyFailedRefreshPage: \"Failed to verify item.\\nThe data might have changed. Please refresh the page and try again\",\n\n                candidateUnavailablePleaseReloadCandidateContext: \"<i class='a24-material-text-icons material-icons warning-color-text'>warning</i> Seems our system is still busy preparing your data.<br/>Please give it a few minutes and then click the reload icon at the top right of this card to try again.\",\n\n                apiUnavailablePleaseReload: \"<i class='a24-material-text-icons material-icons warning-color-text'>warning</i> Failed to retrieve data from server.<br/>Please click the reload icon at the top right of this card to try again.\",\n\n                candidateEditableComingSoon: \"This functionality will be available soon.<br/>At the moment if you are a newly registered candidate you are still required to capture this information via the separate application form.<br/>If you have already provided this information, then this will be displayed here soon.\",\n\n                unlinkedCandidate: \"You are trying to add a candidate with an email address that is already in use on the system.<br/><br/>Do you want to link candidate \\\"{0}\\\" with email address {1} to this Agency Group\",\n                linkedCandidate: \"You are trying to add a candidate with an email address that is already in use on the system.<br/><br/>Candidate \\\"{0}\\\" with email address {1} is already linked to this Agency Group\",\n\n                unlinkedCandidateNoName: \"You are trying to add a candidate with an email address that is already in use on the system.<br/><br/>Do you want to link candidate with email address {0} to this Agency Group\",\n                linkedCandidateNoName: \"You are trying to add a candidate with an email address that is already in use on the system.<br/><br/>Candidate with email address {0} is already linked to this Agency Group\",\n\n                itemUpdateDelay: \"Please note that updates might take a while to reflect here.</br>Click the refresh button on the card to try again\",\n\n                linkedCandidateAgency: \"You are trying to add a candidate with an email address that is already in use on the system.<br/><br/>Candidate \\\"{0}\\\" with email address {1} is already linked to this Agency\",\n                linkedCandidateNoNameAgency: \"You are trying to add a candidate with an email address that is already in use on the system.<br/><br/>Candidate with email address {0} is already linked to this Agency\",\n                noExistingSkills: \"No existing skills. </br>Click on one of the Availible Skills items below to get started.\",\n                noExistingQualifications: \"No existing qualifications. </br>Click on one of the Availible Qualifications items below to get started.\",\n                noSkillsData: \"Please provide us with your skills linked to you work experience.<br/>Remember that you will be held professionally accountable for the data provided.<br/>Click on the plus sign at the bottom right of your screen to get started.\",\n                noQualificationsData: \"Please provide us with your qualifications linked to you work experience.<br/>Remember that you will be held professionally accountable for the data provided.<br/>Click on the plus sign at the bottom right of your screen to get started.\"\n                //===== SAFE STRINGS END =====\n            });\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/candidate-document-generation-service\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n\n        _objCandidateProfileEnumsService: Ember.inject.service(\"a24-enums-candidate-profile\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _sGeneratedDate: null,\n\n        arrTypes: null,\n\n        //Public function that can be used by other to sort work history items.\n        sortWorkHistoryItems: function sortWorkHistoryItems(arrWorkHIstoryItems) {\n            //Sort based on start_date, if start dates are the same then we order based on end_date aswell.\n            //Al current items go to the top and get ordered based on start_date\n            var objDateOne = a24DateManager.createDate(this.get(\"_objUserSession\").get(\"objContextDetails.sTimezone\"));\n            var objDateTwo = a24DateManager.createDate(this.get(\"_objUserSession\").get(\"objContextDetails.sTimezone\"));\n            arrWorkHIstoryItems.sort(function (objOne, objTwo) {\n                objDateOne.setDateFromRest(objOne.start_date);\n                objDateTwo.setDateFromRest(objTwo.start_date);\n\n                if ((objOne.current || a24Core.isEmpty(objOne.end_date)) && (objTwo.current || a24Core.isEmpty(objTwo.end_date))) {\n                    return objDateOne.isAfter(objDateTwo) ? -1 : 1;\n                } else if (objOne.current || a24Core.isEmpty(objOne.end_date)) {\n                    return -1;\n                } else if (objTwo.current || a24Core.isEmpty(objTwo.end_date)) {\n                    return 1;\n                } else {\n                    if (objDateOne.getDateFormat() === objDateTwo.getDateFormat()) {\n                        objDateOne.setDateFromRest(objOne.end_date);\n                        objDateTwo.setDateFromRest(objTwo.end_date);\n                    }\n                    return objDateOne.isAfter(objDateTwo) ? -1 : 1;\n                }\n            });\n        },\n        generateInterviewCandidateProfile: function generateInterviewCandidateProfile(objData) {\n\n            return this._generateHTMLPageWrapper(this._generateHTMLHead(objData), this._generateHTMLBody(objData));\n        },\n        _generateHTMLPageWrapper: function _generateHTMLPageWrapper(sHTMLHead, sHTMLBody) {\n            return \"<!DOCTYPE html><html><head>\" + sHTMLHead + \"</head><body>\" + sHTMLBody + \"</body></html>\";\n        },\n        _generateHTMLHead: function _generateHTMLHead() /*objData*/{\n\n            var sStylesheet = this._getStylesheet();\n\n            //For now we load all the style shets from the parent, this will gives us al the fonts. If we move this\n            //to backend then they will need to include the font links/styles. The can also add custom styling on the\n            //objData which we can the hookup here.\n            var sParentStyles = \"\";\n            $(\"link\").each(function (iIndex, objHTMLElement) {\n                if (objHTMLElement.outerHTML.indexOf(\"stylesheet\") !== -1) {\n                    sParentStyles += objHTMLElement.outerHTML;\n                }\n            });\n\n            return \"\\n            \" + sParentStyles + \"\\n            <style>\\n                \" + sStylesheet + \"\\n            </style>\\n        \";\n        },\n        _generateHTMLBody: function _generateHTMLBody(objData) {\n            // Generated at\n            var objGeneratedDate = a24DateManager.createDate(this.get(\"_objUserSession\").get(\"objContextDetails.sTimezone\"));\n            objGeneratedDate.setDateFromRest(objData.created_at);\n            var sGeneratedDate = objGeneratedDate.getDateTimeFormat();\n            this.set(\"_sGeneratedDate\", sGeneratedDate);\n\n            return \"<div class=\\\"print-page\\\">\" + this._generateInterviewPageHeading(objData) + this._generateInterviewPersonalInfo(objData) + this._generateInterviewContactDetails(objData) + this._generateInterviewWorkHistory(objData) + this._generateInterviewSkills(objData) + this._generateInterviewQualifications(objData) + this._generateInterviewProfessionalRegistration(objData) + this._generateInterviewReferences(objData) + \"<div class=\\\"cv-date-generated\\\">\" + this.get(\"_objCandidateProfileStringsService\").getString(\"dateGenerated\") + (\": \" + sGeneratedDate + \"</div>\") + \"</div>\" + \"<div class=\\\"print-button-container\\\">\" + \"<div class=\\\"print-button\\\" onclick=\\\"window.print();\\\">\" + \"<i class=\\\"material-icons\\\">print</i>\" + \"</div>\" + \"</div>\";\n        },\n        _generateInterviewPageHeading: function _generateInterviewPageHeading(objData) {\n            var sTitle = objData.title;\n            var sGeneratedDate = this.get(\"_sGeneratedDate\");\n\n            return \"\\n            <div class=\\\"cv-heading\\\">\\n                <img class=\\\"cv-heading-logo\\\" src=\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPYAAABZCAYAAAANWNnzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAACpZJREFUeNrsne1x2zgQhjc39z+8CsIOwlQQuoLIFYSuIEoFoStQXIHsCuRUIF0FUiqQUoF0FeTECzjSaYjFLgCClPM+M5icz7IIgnixH/ggEQAAAAAAAAAAAAAAAAAAAAAAADAeXqEJvMhNKc3Pr4+lOPv94Vi+m//emJ9XaDYAxifk6bEsjmV/LD89y/pYZscyQZMCMAyZEfM6QMhcaQaI+ZnVBwD0bJ3nPYnZVrbHUqHpAXgZgu4SONx0ACJRB8bOscvSDDQAePG7Z8ULY6ULz79vM967Y/lx8bv35l/fGLr53vtj+YpuCoCcysNKr41114o1N9ebe1yzycRneFwAuJkp4946sms8MYLVDCgFHhsAduY0nkx1rqjPHuIGwF/UjYCmA8T6S4gbvFQKE7+el5SiHjobPYW4wUshI366aW9+H5JAksTU9YgGt61A3EiogVFbaGmWeO3ZmSuBSKqRtUtG7qWsa3QfcO2iPneVY15jzG5tI25X5nyGbgS6GGqBSh5ggW9IvgWSmyY6mO/adPyuK77fmOseEot76Rh8NO0BQK+E7JiaC69RO76n6hDRTOBFzClugo2rp8Qt36I7gTFQU/h2R4lHwAm07ojDtWFBLahHaSmZQtg+9wNA8rg6xiYJV1w8V8TpM+rPe7CJcaoUdsOEkCUHI2UZSdgTh7XmBHDuRk8j1GXmcb+1h7AbFrDaYGxUFG9bY+1presevIefZF9IE1vYGfHz/bDa4D/+SHSdjNJMzWSMNd9dCMpVn2f6tW2yKRvHZ78kascmI//A3HuFLg1SEhLHauazOa+gElpr29x25Uhg5QkststqI0MOri5hJhH2mmSZdE5MXGKuZP5uqkiehQg7pP4ArnhUa52CnOnUjxc/v2U+x7ndq47vsn1nxcS8q8B7fWR+9xHdGvQt7AmlO16Xu85DhzvbxZPgOt+YgUUqsE3gve5MDkDbDuA34c8evztVwqzlPSOiXcTrSJaUlozANhRnWeo36k4UFqbtNddot8tmHXVdUbxltNmFV+XyXFovrOgY2FaRn2sqMtPWRUe/WkUY9Hunpn5P8bzEttWxa3CxTYlVwtDCtViFm3KrFO3k6vQ+8/znHawm9xbRtr1DPAHbixdsVCRb87Am+UxA6KYi23OStov0ntqjuEY5dZmTfonmNkDYmbKTV+S3W4rLSE8Fguuaa/YVNjeY1QKh7T0HVE2Hc+0t7+o3PouYJGfCDSXswvOe9jTCM+bn5Hf6p6+wS+azmUWg7WAyNw2YCQYrbjNGLhBqrfRsfNt5EfHZ+G51lWzL1X7eVaqRCbuKcE/zsYi6JL+VWyHCrki/YSRXuFBrRX22pFsZFiLsWtlhY73pZO9oP6nHFlPULnGnFnYVMfQcxb57rdux9IjJl4EdXBp/7oWdPDvroNplsCHCnigGtNiLhNYRvAJXeBPTo0gp7ILiv1lG5ZbHnu6qPJIsdyMLIypjdb8I3PP2sIY2a/yR+Vwfb/Q4MAPTpRfFnbzaZJc/m3tpy1dHNrywWMfc4RI/HsutuUY74HDtvDKf/4t+HQxyQ/w8furZGFuClbunZ9Pv27a+ddxTO1gOklDLlAmwSxejD4utecAF6Q6A6ErYrD2SWSEWuxT+7ZL8NtRkDuu7tSTmpFbHlWisAmL4ciCLXTruqQzog9MhhF2T3mXKehZ2Lay7Nh7qGj25zHwxoLDzCB1lobi3uSIJNAt0PTlxLwYS9iIw6cgZSPFegFiueNN5Pin/ZkX/P0f8zYBu01xR5xvjRh06OpmNIRcdVMy9SMODO8Yt/yhMSj5ZcgQ2d/1ZUK+mXe+Z/MMQ2K77WdgPDkx4mlPic+9Tv1c6VvJMYqn3RvyuBp32fM+1p8Vekv9iHIl1XQrd/lLh4Wg6L5d8KxNb7ILi7brbhiTRYljsgq5zH3DusNQHM8r+Zf7dOb7vzUjvs2ASOBqka+RD67Uj3VLRA2MJUyebYm76eVa2W3Rhj2GO7eDR6b44XLx3pMtkD7FdshS4/pmyzbThRGzXcOfxN3+P6Jl08cPjb/4JuWDoJpCUu7didjrutJHLKawx8zqSaEMGz9+tHa6CUIs9ljdR7JRWjRvJP19RhyiUFmxM1uwQsV4Sz+XaeBsyWIVY7JqGfTPlpbAPFrez6IhxOC9j5VkH306UM+24cgxepWCg21jEMhm443Nxcal4DrkjXveJiTVeQV+x+iCDVexlgDG2bS4Vn63Jf+44Nr514c4ZP+/othkL13rvLkIWw5SBz8yGbd54K6y7tA22gvsqKc7R0DPyf1lGkCs+o/HtF/3GuGnSul6T6/aBcdU2Are8fenfkM/xiXlmkrUFFdmnf56FnpgknJwKvaoYTMm+cOi5z4fhczhhTfbX3ZRnDzLEYnP1qi4+67PdcWwW2+YxzRWfbS1bJRRPbIvt8vxsA09G7k0teYdgNCsJJX+36BiQOItdMgPEhNwbqMT5B58YW5sw25D8PVehMdvO0nDNqrjHi7jMNmj57Ah7Ivci/phUTEfs8lzumeeWm449M9bnu/n/b+i0T/2+J2txcNRtYkrTtj866mXjviO+br7DtrGnMv3v2Xg4B/PzB4eYHpT3+8V877lXlQkF+9inRzkhv73WoZZLGoPNhPWI9aqhGK/X8bHYW48YbBnh/mJbbFecHHs7aczVgQuLceLaz/cZbLUhkzbG1lrrR0r77uYHx2jpkw0dGxPG4+Cs6u2Icwh3kerWfMcN8/uvkTyrDaXbbnwwz+7Ql7Cnyixq62alZMcMJOWZ1bjmQ/VnDheUex43iQdaTV+5CXT3VyRbWHQXKO4NpVvA1K6AVA96UmFnpH8/1QMNczws17kH26weMdGWMx17JxTQncezyRKI+5b4nWS2v/usFNsd+S1Euk8k6tYovvPVkDR5VipHDZ8TQ3YKa+J6W8fKEtPlZoCKbbV2gX8rqU/jZXzyHNC6QqRH49a/p9PZ3dlFvTYmmfRMssUw3LM5KOtWmeQVN531zfzrI7SvZ23AXae5nydznVBD9UCnxFzW0T6rwHt68ZQUJ6E3JriTNVKcZGmbIlwmuHZ2Fkplia6TR+x3NTNY411rkTqi5jSLa7mXvOfr5zSy43quzKDUaJq4oy+3+GF9JfF27fA+pgnaUXKeOoCwk+Gadx+7uCvym8+P2VG5AyoX6GIQ9lDMrlTcLku9D6h3bQQ7o9Oe+rZMzP+XnDgLaw1hD8qa/A6ZHyqEkKybL3scNCQFsTWEPQqxrK+gs0rPNq969gau5n1SEDbISbaHfDmQiykVW5XwWrDUEPZV4Hqtq3QrX0wqRZ2qxIPI5YCHOVcI++rd8nOBFz3UQSPomKJumAjbYNvT/UPYPfPqNxb3TCmWdmnhivx2ImV0WsKpuW67vnvTUztcLidt9wrvaJi1/gDCDmZKfiettp2/PXZoZYnpm/KW+AP3OJrvVW/ZAwCcTk35OaKyJySpAIiCNubtq8wJCz8AiB5z1gMJHIIGIJEF79tFl77JEwAQmdzEu7FEfr5GG4BeeIUmUFPSr4TbGzplusuOz+3o9Oqh5kjfDZ2mkQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFT8K8AAEuV0K3SFGDIAAAAASUVORK5CYII=\\\" alt=\\\"logo\\\" />\\n                <div class=\\\"cv-heading-text\\\">\\n                    \" + sTitle + \"\\n                </div>\\n                <div class=\\\"cv-date-generated\\\">\" + this.get(\"_objCandidateProfileStringsService\").getString(\"dateGenerated\") + (\": \" + sGeneratedDate + \"</div>\\n            </div>\\n            <div class=\\\"cv-split-item\\\"></div>\");\n        },\n        _generateInterviewPersonalInfo: function _generateInterviewPersonalInfo(objData) {\n\n            // Title\n            var sTitle = this.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"title\", objData.data.title);\n\n            // First Name\n            var sFirstName = objData.data.first_name;\n\n            // Last Name\n            var sLastName = objData.data.last_name;\n\n            // Date of Birth\n            var objDateOfBirth = a24DateManager.createDate(this.get(\"_objUserSession\").get(\"objContextDetails.sTimezone\"));\n            objDateOfBirth.setDateFromRest(objData.data.date_of_birth, true);\n            var sDateOfBirth = objDateOfBirth.getDateFormat();\n\n            // Candidate Type\n            var sCandidateType = null;\n            if (!a24Core.isEmpty(objData.data.candidate_type)) {\n                var arrMatchedStatus = this.get(\"arrTypes\").filter(function (objItem) {\n                    return objItem._id === objData.data.candidate_type;\n                });\n\n                if (!a24Core.isEmpty(arrMatchedStatus)) {\n                    sCandidateType = arrMatchedStatus[0].name;\n                }\n            }\n\n            // GENERATE HTML\n            var sHTML = \"\\n            <div class=\\\"cv-section\\\">\\n                <div class=\\\"cv-section-heading\\\">\\n                    <i class=\\\"material-icons cv-section-heading-icon\\\">person</i>\\n                    <div class=\\\"cv-section-heading-text\\\">\" + this.get(\"_objCandidateProfileStringsService\").getString(\"personalInfo\") + \"</div>\\n                </div>\\n                <div class=\\\"cv-section-content\\\">\\n                    <table>\";\n            sHTML += this._generateSingleSectionWithLabel(this.get(\"_objStringsService\").getString(\"title\"), sTitle, \"-\", true);\n            sHTML += this._generateSingleSectionWithLabel(this.get(\"_objStringsService\").getString(\"firstName\"), sFirstName, \"-\", true);\n            sHTML += this._generateSingleSectionWithLabel(this.get(\"_objStringsService\").getString(\"lastName\"), sLastName, \"-\", true);\n            sHTML += this._generateSingleSectionWithLabel(this.get(\"_objStringsService\").getString(\"dateOfBirth\"), sDateOfBirth, \"-\", true);\n            sHTML += this._generateSingleSectionWithLabel(this.get(\"_objCandidateProfileStringsService\").getString(\"candidateType\"), sCandidateType, \"-\", true);\n            sHTML += \"\\n                    </table>\\n                </div>\\n            </div>\\n            <div class=\\\"cv-split-item\\\"></div>\";\n\n            return sHTML;\n        },\n        _generateInterviewContactDetails: function _generateInterviewContactDetails(objData) {\n\n            // Email\n            var sEmail = null;\n            if (!a24Core.isEmpty(objData.data.emails) && !a24Core.isEmpty(objData.data.emails[0]) && !a24Core.isEmpty(objData.data.emails[0].email)) {\n                sEmail = objData.data.emails[0].email;\n            }\n\n            // Mobile\n            var sMobile = null;\n            if (!a24Core.isEmpty(objData.data.contact_numbers) && !a24Core.isEmpty(objData.data.contact_numbers[0]) && !a24Core.isEmpty(objData.data.contact_numbers[0].number)) {\n                sMobile = objData.data.contact_numbers[0].number;\n            }\n\n            // Address\n            var sAddress = null;\n            if (!a24Core.isEmpty(objData.data.addresses) && !a24Core.isEmpty(objData.data.addresses[0]) && !a24Core.isEmpty(objData.data.addresses[0].address_line1)) {\n                var objAddress = objData.data.addresses[0];\n\n                // Address line 1\n                sAddress = objAddress.address_line1;\n\n                // Address line 2\n                if (!a24Core.isEmpty(objAddress.address_line2)) {\n                    sAddress += \"<br>\" + objAddress.address_line2;\n                }\n\n                // City\n                if (!a24Core.isEmpty(objAddress.city)) {\n                    sAddress += \"<br>\" + objAddress.city;\n                }\n\n                // Province\n                if (!a24Core.isEmpty(objAddress.province)) {\n                    sAddress += \"<br>\" + objAddress.province;\n                }\n\n                // Country Code\n                if (!a24Core.isEmpty(objAddress.country_code)) {\n                    sAddress += \"<br>\" + objAddress.country_code;\n                }\n\n                // Post Code\n                if (!a24Core.isEmpty(objAddress.post_code)) {\n                    sAddress += \"<br>\" + objAddress.post_code;\n                }\n            }\n\n            // GENERATE HTML\n            var sHTML = \"\\n            <div class=\\\"cv-section\\\">\\n                <div class=\\\"cv-section-heading\\\">\\n                    <i class=\\\"material-icons cv-section-heading-icon\\\">assignment_turned_in</i>\\n                    <div class=\\\"cv-section-heading-text\\\">\" + this.get(\"_objCandidateProfileStringsService\").getString(\"contactDetails\") + \"</div>\\n                </div>\\n                <div class=\\\"cv-section-content\\\">\\n                    <table>\";\n\n            sHTML += this._generateSingleSectionWithIcon(\"email\", sEmail, \"-\", true);\n            sHTML += this._generateSingleSectionWithIcon(\"phone\", sMobile, \"-\", true);\n            sHTML += this._generateSingleSectionWithIcon(\"place\", sAddress, \"-\", true);\n            sHTML += \"\\n                    </table>\\n                </div>\\n            </div>\\n            <div class=\\\"cv-split-item page-break\\\"></div>\";\n\n            return sHTML;\n        },\n        _generateInterviewWorkHistory: function _generateInterviewWorkHistory(objData) {\n            // Work experience export\n            var sWorkExp = \"\";\n            if (!a24Core.isEmpty(objData.data.employment_details) && objData.data.employment_details.length > 0) {\n                this.sortWorkHistoryItems(objData.data.employment_details);\n\n                for (var i = 0; i < objData.data.employment_details.length; i++) {\n                    var objEmploymentDetails = objData.data.employment_details[i];\n\n                    if (!a24Core.isEmpty(objEmploymentDetails)) {\n                        // Employer Name\n                        var sEmployerName = null;\n                        if (!a24Core.isEmpty(objEmploymentDetails.employer_name)) {\n                            sEmployerName = objEmploymentDetails.employer_name;\n                        }\n\n                        // Title Held\n                        var sTitleHeld = null;\n                        if (!a24Core.isEmpty(objEmploymentDetails.position)) {\n                            sTitleHeld = objEmploymentDetails.position;\n                        } else if (!a24Core.isEmpty(objEmploymentDetails.job_title_name)) {\n                            sTitleHeld = objEmploymentDetails.job_title_name;\n                        }\n\n                        // Duration\n                        var sDuration = null;\n                        if (!a24Core.isEmpty(objEmploymentDetails.start_date)) {\n\n                            // Start Date\n                            var objStartDate = a24DateManager.createDate(this.get(\"_objUserSession\").get(\"objContextDetails.sTimezone\"));\n                            objStartDate.setDateFromRest(objEmploymentDetails.start_date);\n                            var sStartDate = objStartDate.getDateFormat();\n                            sDuration = sStartDate;\n\n                            // End Date\n                            if (objEmploymentDetails.current || a24Core.isEmpty(objEmploymentDetails.end_date)) {\n                                sDuration += \" - \" + this.get(\"_objCandidateProfileStringsService\").getString(\"current\");\n                            } else {\n                                var _objStartDate = a24DateManager.createDate(this.get(\"_objUserSession\").get(\"objContextDetails.sTimezone\"));\n                                _objStartDate.setDateFromRest(objEmploymentDetails.end_date);\n                                var sEndDate = _objStartDate.getDateFormat();\n                                sDuration += \" - \" + sEndDate;\n                            }\n                        }\n\n                        // Main Responsibilities\n                        var sMainResponsibilities = null;\n                        if (!a24Core.isEmpty(objEmploymentDetails.responsibilities)) {\n                            sMainResponsibilities = objEmploymentDetails.responsibilities;\n                        }\n\n                        // Reason for leaving\n                        var sReasonForLeaving = null;\n                        if (!a24Core.isEmpty(objEmploymentDetails.leaving_reason) && objEmploymentDetails.work_type !== this.get(\"_objCandidateProfileEnumsService.workTypes.UNEMPLOYED.backend\")) {\n                            sReasonForLeaving = objEmploymentDetails.leaving_reason;\n                        }\n\n                        // GENERATE HTML\n                        sWorkExp += \"<div class=\\\"cv-section-content\\\">\\n                            <table>\";\n\n                        sWorkExp += this._generateSingleSectionWithLabel(this.get(\"_objCandidateProfileStringsService\").getString(\"workType\"), this.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"workTypes\", objEmploymentDetails.work_type), '-', true);\n                        if (objEmploymentDetails.work_type === this.get(\"_objCandidateProfileEnumsService.workTypes.STUDENT_FULL_TIME.backend\")) {\n                            sWorkExp += this._generateSingleSectionWithLabel(this.get(\"_objCandidateProfileStringsService\").getString(\"institute\"), objEmploymentDetails.institute_name, '-', true);\n                            sWorkExp += this._generateSingleSectionWithLabel(this.get(\"_objCandidateProfileStringsService\").getString(\"duration\"), sDuration, '-', true);\n                        } else {\n                            if (objEmploymentDetails.work_type !== this.get(\"_objCandidateProfileEnumsService.workTypes.UNEMPLOYED.backend\")) {\n                                sWorkExp += this._generateSingleSectionWithLabel(this.get(\"_objCandidateProfileStringsService\").getString(\"employerName\"), sEmployerName, '-', true);\n                                sWorkExp += this._generateSingleSectionWithLabel(this.get(\"_objCandidateProfileStringsService\").getString(\"titleHeld\"), sTitleHeld, '-', true);\n                            }\n                            sWorkExp += this._generateSingleSectionWithLabel(this.get(\"_objCandidateProfileStringsService\").getString(\"duration\"), sDuration, '-', true);\n\n                            var sResponsibilitiesReason = this.get(\"_objCandidateProfileStringsService\").getString(\"mainResponsibilities\");\n                            if (objEmploymentDetails.work_type === this.get(\"_objCandidateProfileEnumsService.workTypes.UNEMPLOYED.backend\")) {\n                                sResponsibilitiesReason = this.get(\"_objCandidateProfileStringsService\").getString(\"unemploymentReason\");\n                            }\n\n                            sWorkExp += this._generateSingleSectionWithLabel(sResponsibilitiesReason, sMainResponsibilities, '-', true);\n\n                            if (!a24Core.isEmpty(objEmploymentDetails.end_date) && objEmploymentDetails.work_type !== this.get(\"_objCandidateProfileEnumsService.workTypes.UNEMPLOYED.backend\")) {\n                                sWorkExp += this._generateSingleSectionWithLabel(this.get(\"_objCandidateProfileStringsService\").getString(\"reasonForLeaving\"), sReasonForLeaving, '-', true);\n                            }\n                        }\n                        sWorkExp += \"\\n                            </table>\\n                        </div>\\n                        <div class=\\\"cv-split-item\\\"></div>\";\n                    }\n                }\n            } else {\n                sWorkExp += \"<div class=\\\"cv-no-data\\\">\" + this.get(\"_objStringsService\").getString(\"noData\") + \"</div><div class=\\\"cv-split-item\\\"></div>\";\n            }\n\n            // GENERATE FINAL HTML\n            return \"\\n            <div class=\\\"cv-section\\\">\\n                <div class=\\\"cv-section-heading\\\">\\n                    <i class=\\\"material-icons cv-section-heading-icon\\\">work</i>\\n                    <div class=\\\"cv-section-heading-text\\\">\" + this.get(\"_objCandidateProfileStringsService\").getString(\"workHistory\") + (\"</div>\\n                </div>\\n                \" + sWorkExp + \"\\n            </div>\");\n        },\n        _generateInterviewSkills: function _generateInterviewSkills(objData) {\n            // Skills export\n            if (objData.data.hasOwnProperty(\"skill_details\")) {\n                var sSkills = \"\";\n                if (!a24Core.isEmpty(objData.data.skill_details) && objData.data.skill_details.length > 0) {\n                    objData.data.skill_details.sort(function (objA, objB) {\n                        if (objA.skill_name.toLowerCase() < objB.skill_name.toLowerCase()) {\n                            return -1;\n                        }\n                        if (objA.skill_name.toLowerCase() > objB.skill_name.toLowerCase()) {\n                            return 1;\n                        }\n                        return 0;\n                    });\n\n                    // GENERATE HTML\n\n                    // sSkills += `<div class=\"cv-section-content\">\n                    //         <table class=\"cv-section-content-table\">\n                    //             <tr>\n                    //                 <th></th>\n                    //                 <td colspan=\"3\" class=\"cv-section-skill-exp-header\">` + this.get(\"_objCandidateProfileStringsService\").getString(\"experience\") + `:</td>\n                    //             </tr>\n                    //             <tr>\n                    //                 <th class=\"cv-section-item-name\">` + this.get(\"_objCandidateProfileStringsService\").getString(\"skillName\") + `</th>\n                    //                 <th class=\"cv-section-item\">` + this.get(\"_objCandidateProfileStringsService\").getString(\"stated\") + `</th>\n                    //                 <th class=\"cv-section-item\">` + this.get(\"_objCandidateProfileStringsService\").getString(\"employment\") + `</th>\n                    //                 <th class=\"cv-section-item\">` + this.get(\"_objCandidateProfileStringsService\").getString(\"total\") + `</th>\n                    //             </tr>`;\n                    // TODO once employment is done just uncomment above and remove below\n                    sSkills += \"<div class=\\\"cv-section-content\\\">\\n                        <table class=\\\"cv-section-content-table\\\">\\n                            <tr>\\n                                <th class=\\\"cv-section-item-name\\\">\" + this.get(\"_objCandidateProfileStringsService\").getString(\"skillName\") + \"</th>\\n                                <th class=\\\"cv-section-item\\\">\" + this.get(\"_objCandidateProfileStringsService\").getString(\"experience\") + \"</th>\\n                            </tr>\\n                            <tr>\\n                                <td colspan=\\\"2\\\"><hr/></td>\\n                            </tr>\";\n                    // STOP HERE\n\n                    for (var i = 0; i < objData.data.skill_details.length; i++) {\n                        var objSkillDetails = objData.data.skill_details[i];\n\n                        if (!a24Core.isEmpty(objSkillDetails)) {\n                            sSkills += \"\\n                            <tr>\";\n                            var sSkillName = \"\";\n                            if (!a24Core.isEmpty(objSkillDetails.skill_name)) {\n                                sSkillName = objSkillDetails.skill_name;\n                            }\n\n                            // let sStatedDuration = \"\";\n                            // let sEmploymentDuration = \"\";\n                            var sTotalDuration = \"\";\n\n                            for (var l = 0; l < objSkillDetails.experience.length; l++) {\n                                var sDuration = parseInt(objSkillDetails.experience[l].duration / 12) + \" y \" + parseInt(objSkillDetails.experience[l].duration % 12) + \"m\";\n\n                                if (objSkillDetails.experience[l].type === \"computed\") {\n                                    sTotalDuration = sDuration;\n                                    // TODO Uncoment below once employment is used\n                                    // } else if (objSkillDetails.experience[l].type === \"stated\") {\n                                    //     sStatedDuration = sDuration\n                                    // } else if (objSkillDetails.experience[l].type === \"employment\") {\n                                    //     sEmploymentDuration = sDuration;\n                                }\n                            }\n\n                            // TODO we are only showing the computed as it will be exactly the same as stated. For now\n                            sSkills += \"<td class=\\\"cv-section-item-name\\\">\" + sSkillName + \"</td>\";\n                            // sSkills += `<td class=\"cv-section-item\">` + sStatedDuration + `</td>`\n                            // sSkills += `<td class=\"cv-section-item\">` + sEmploymentDuration + `</td>`\n                            sSkills += \"<td class=\\\"cv-section-item\\\">\" + sTotalDuration + \"</td>\";\n                            sSkills += \"\\n                            </tr>\";\n                        }\n                    }\n\n                    sSkills += \"\\n                        </table>\\n                    </div>\\n                    <div class=\\\"cv-split-item\\\"></div>\";\n                } else {\n                    sSkills += \"<div class=\\\"cv-no-data\\\">\" + this.get(\"_objStringsService\").getString(\"noData\") + \"</div><div class=\\\"cv-split-item\\\"></div>\";\n                }\n\n                // GENERATE FINAL HTML\n                return \"\\n                <div class=\\\"cv-section page-break-avoid\\\">\\n                    <div class=\\\"cv-section-heading\\\">\\n                        <i class=\\\"material-icons cv-section-heading-icon\\\">local_library</i>\\n                        <div class=\\\"cv-section-heading-text\\\">\" + this.get(\"_objCandidateProfileStringsService\").getString(\"skills\") + (\"</div>\\n                    </div>\\n                    \" + sSkills + \"\\n                </div>\");\n            }\n            return \"\";\n        },\n        _generateInterviewQualifications: function _generateInterviewQualifications(objData) {\n            // Qualifications export\n            if (objData.data.hasOwnProperty(\"qualification_details\")) {\n                var sQualifications = \"\";\n                if (!a24Core.isEmpty(objData.data.qualification_details) && objData.data.qualification_details.length > 0) {\n                    objData.data.qualification_details.sort(function (objA, objB) {\n                        if (objA.qualification_name.toLowerCase() < objB.qualification_name.toLowerCase()) {\n                            return -1;\n                        }\n                        if (objA.qualification_name.toLowerCase() > objB.qualification_name.toLowerCase()) {\n                            return 1;\n                        }\n                        return 0;\n                    });\n\n                    // GENERATE HTML\n                    sQualifications += \"<div class=\\\"cv-section-content\\\">\\n                        <table class=\\\"cv-section-content-table\\\">\\n                            <tr>\\n                                <th class=\\\"cv-section-item-name\\\" style=\\\"width: 50%;\\\">\" + this.get(\"_objStringsService\").getString(\"name\") + \"</th>\\n                                <th class=\\\"cv-section-item\\\" style=\\\"width: 50%;\\\">\" + this.get(\"_objCandidateProfileStringsService\").getString(\"institution\") + \"</th>\\n                                <th class=\\\"cv-section-item\\\">\" + this.get(\"_objCandidateProfileStringsService\").getString(\"obtained\") + \"</th>\\n                                <th class=\\\"cv-section-item\\\">\" + this.get(\"_objCandidateProfileStringsService\").getString(\"expire\") + \"</th>\\n                            </tr>\\n                            <tr>\\n                                <td colspan=\\\"4\\\"><hr/></td>\\n                            </tr>\";\n\n                    for (var i = 0; i < objData.data.qualification_details.length; i++) {\n                        var objQualificationDetails = objData.data.qualification_details[i];\n\n                        if (!a24Core.isEmpty(objQualificationDetails)) {\n                            sQualifications += \"\\n                            <tr>\";\n                            var sQualificationName = \"\";\n                            if (!a24Core.isEmpty(objQualificationDetails.qualification_name)) {\n                                sQualificationName = objQualificationDetails.qualification_name;\n                            }\n\n                            var sInstitution = \"\";\n                            if (!a24Core.isEmpty(objQualificationDetails.institution)) {\n                                sInstitution = objQualificationDetails.institution;\n                            }\n\n                            var sObtained = \"\";\n                            if (!a24Core.isEmpty(objQualificationDetails.obtained_at)) {\n                                var objDateObtained = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                                objDateObtained.setDateFromRest(objQualificationDetails.obtained_at, true);\n                                sObtained = objDateObtained.getDateFormat();\n                            }\n\n                            var sExpire = \"\";\n                            if (!a24Core.isEmpty(objQualificationDetails.expires_at)) {\n                                var objDateExpire = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                                objDateExpire.setDateFromRest(objQualificationDetails.expires_at, true);\n                                sExpire = objDateExpire.getDateFormat();\n                            }\n\n                            sQualifications += \"<td class=\\\"cv-section-item-name text-pre-wrap\\\">\" + sQualificationName + \"</td>\";\n                            sQualifications += \"<td class=\\\"cv-section-item text-pre-wrap\\\">\" + sInstitution + \"</td>\";\n                            sQualifications += \"<td class=\\\"cv-section-item\\\">\" + sObtained + \"</td>\";\n                            sQualifications += \"<td class=\\\"cv-section-item\\\">\" + sExpire + \"</td>\";\n                            sQualifications += \"\\n                            </tr>\";\n                        }\n                    }\n\n                    sQualifications += \"\\n                        </table>\\n                    </div>\\n                    <div class=\\\"cv-split-item\\\"></div>\";\n                } else {\n                    sQualifications += \"<div class=\\\"cv-no-data\\\">\" + this.get(\"_objStringsService\").getString(\"noData\") + \"</div><div class=\\\"cv-split-item\\\"></div>\";\n                }\n\n                // GENERATE FINAL HTML\n                return \"\\n                <div class=\\\"cv-section page-break-avoid\\\">\\n                    <div class=\\\"cv-section-heading\\\">\\n                        <i class=\\\"material-icons cv-section-heading-icon\\\">school</i>\\n                        <div class=\\\"cv-section-heading-text\\\">\" + this.get(\"_objCandidateProfileStringsService\").getString(\"qualifications\") + (\"</div>\\n                    </div>\\n                    \" + sQualifications + \"\\n                </div>\");\n            }\n            return \"\";\n        },\n        _generateInterviewProfessionalRegistrationBodyEntries: function _generateInterviewProfessionalRegistrationBodyEntries(arrData) {\n            var arrRegistrationBodyEntries = arrData.filter(function (objData) {\n                return !a24Core.isEmpty(objData.registration_body_entry_name) && !a24Core.isEmpty(objData.registration_body_entry_status_name);\n            });\n\n            var sRegistrationBodyEntries = \"\";\n\n            if (!a24Core.isEmpty(arrRegistrationBodyEntries)) {\n                // GENERATE HTML\n                sRegistrationBodyEntries += \"\\n                <div class=\\\"cv-section-content\\\">\\n                    <table class=\\\"cv-section-content-table\\\">\\n                        <tr>\\n                            <th class=\\\"cv-section-item-name\\\" style=\\\"width: 50%;\\\">\\n                                \" + this.get(\"_objStringsService\").getString(\"name\") + \"\\n                            </th>\\n                            <th class=\\\"cv-section-item-name\\\" style=\\\"width: 50%;\\\">\\n                                \" + this.get(\"_objStringsService\").getString(\"status\") + \"\\n                            </th>\\n                            <th class=\\\"cv-section-item\\\">\\n                                \" + this.get(\"_objCandidateProfileStringsService\").getString(\"obtainedAt\") + \"\\n                            </th>\\n                            <th class=\\\"cv-section-item\\\">\\n                                \" + this.get(\"_objCandidateProfileStringsService\").getString(\"validFrom\") + \"\\n                            </th>\\n                            <th class=\\\"cv-section-item\\\">\\n                                \" + this.get(\"_objCandidateProfileStringsService\").getString(\"expiresOn\") + \"\\n                            </th>\\n                        </tr>\\n                        <tr>\\n                            <td colspan=\\\"5\\\"><hr/></td>\\n                        </tr>\\n            \";\n\n                for (var i = 0; i < arrRegistrationBodyEntries.length; i++) {\n                    var objRegistrationBodyEntry = arrRegistrationBodyEntries[i];\n\n                    sRegistrationBodyEntries += \"<tr>\";\n\n                    var sRegistrationBodyEntryName = \"\";\n                    if (!a24Core.isEmpty(objRegistrationBodyEntry.registration_body_entry_name) && !a24Core.isEmpty(objRegistrationBodyEntry.registration_body_entry_short_name)) {\n                        sRegistrationBodyEntryName = objRegistrationBodyEntry.registration_body_entry_short_name + \" - \" + objRegistrationBodyEntry.registration_body_entry_name;\n                    }\n\n                    var sRegistrationBodyEntryStatusName = \"\";\n                    if (!a24Core.isEmpty(objRegistrationBodyEntry.registration_body_entry_status_name)) {\n                        sRegistrationBodyEntryStatusName = objRegistrationBodyEntry.registration_body_entry_status_name;\n                    }\n\n                    var sObtainedAt = \"\";\n                    if (!a24Core.isEmpty(objRegistrationBodyEntry.obtained_at)) {\n                        var objDateObtained = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                        objDateObtained.setDateFromRest(objRegistrationBodyEntry.obtained_at, true);\n                        sObtainedAt = objDateObtained.getDateFormat();\n                    }\n\n                    var sValidAt = \"\";\n                    if (!a24Core.isEmpty(objRegistrationBodyEntry.valid_at)) {\n                        var objDateValid = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                        objDateValid.setDateFromRest(objRegistrationBodyEntry.valid_at, true);\n                        sValidAt = objDateValid.getDateFormat();\n                    }\n\n                    var sExpireAt = \"\";\n                    if (!a24Core.isEmpty(objRegistrationBodyEntry.expires_at)) {\n                        var objDateExpire = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                        objDateExpire.setDateFromRest(objRegistrationBodyEntry.expires_at, true);\n                        sExpireAt = objDateExpire.getDateFormat();\n                    }\n\n                    sRegistrationBodyEntries += \"<td class=\\\"cv-section-item-name text-pre-wrap\\\">\" + sRegistrationBodyEntryName + \"</td>\";\n                    sRegistrationBodyEntries += \"<td class=\\\"cv-section-item-name text-pre-wrap\\\">\" + sRegistrationBodyEntryStatusName + \"</td>\";\n                    sRegistrationBodyEntries += \"<td class=\\\"cv-section-item\\\">\" + sObtainedAt + \"</td>\";\n                    sRegistrationBodyEntries += \"<td class=\\\"cv-section-item\\\">\" + sValidAt + \"</td>\";\n                    sRegistrationBodyEntries += \"<td class=\\\"cv-section-item\\\">\" + sExpireAt + \"</td>\";\n                    sRegistrationBodyEntries += \"\\n                    </tr>\";\n                }\n\n                sRegistrationBodyEntries += \"</table></div>\";\n            } else {\n                sRegistrationBodyEntries += \"\\n                <div>\\n                    \" + this.get(\"_objStringsService\").getString(\"noData\") + \"\\n                </div>\";\n            }\n\n            var sRegistrationBody = \"<div class=\\\"cv-section-content page-break-avoid\\\">\\n                <div class=\\\"cv-section-sub-heading\\\">\\n                    <div class=\\\"cv-section-sub-heading-text\\\">\\n                        \" + arrData[0].registration_body_short_name + \" - \" + arrData[0].registration_body_name + \"\\n                    </div>\\n                </div>\\n                <table class=\\\"cv-section-content-table\\\">\\n                    <tr>\\n                        <td class=\\\"cv-section-item\\\">\\n                            \" + this.get(\"_objCandidateProfileStringsService\").getString(\"registrationNumber\") + \"\\n                        </td>\\n                        <td class=\\\"cv-section-item\\\">\\n                            \" + arrData[0].reference + \"\\n                        </td>\\n                    </tr>\\n                    <tr>\\n                        <td class=\\\"cv-section-item\\\">\\n                            \" + this.get(\"_objStringsService\").getString(\"status\") + \"\\n                        </td>\\n                        <td class=\\\"cv-section-item\\\">\\n                            \" + arrData[0].status_name + \"\\n                        </td>\\n                    </tr>\\n                    <tr>\\n                        <td colspan=\\\"2\\\"><hr/></td>\\n                    </tr>\\n                </table>\\n                <div class=\\\"padding-left-double page-break-avoid\\\">\\n                    <div class=\\\"cv-section-sub-heading\\\">\\n                        <div class=\\\"cv-section-sub-heading-text\\\">\\n                            \" + this.get(\"_objCandidateProfileStringsService\").getString(\"registrationEntries\") + \"\\n                        </div>\\n                    </div>\" + sRegistrationBodyEntries + \"\\n                </div>\\n            </div>\\n            <div class=\\\"cv-split-item\\\"></div>\";\n\n            return sRegistrationBody;\n        },\n        _generateInterviewProfessionalRegistration: function _generateInterviewProfessionalRegistration(objData) {\n            var _this = this;\n\n            // ProfessionalRegistration export\n            if (objData.data.hasOwnProperty(\"registration_body_details\")) {\n                var sProfessionalRegistration = \"\";\n                if (!a24Core.isEmpty(objData.data.registration_body_details) && objData.data.registration_body_details.length > 0) {\n                    var objRegistrationBodies = {};\n\n                    objData.data.registration_body_details.sortBy(\"candidate_registration_body_id\");\n\n                    objData.data.registration_body_details.forEach(function (objItem) {\n                        if (a24Core.isEmpty(objRegistrationBodies[objItem.candidate_registration_body_id])) {\n                            objRegistrationBodies[objItem.candidate_registration_body_id] = [objItem];\n                        } else {\n                            objRegistrationBodies[objItem.candidate_registration_body_id].push(objItem);\n                        }\n                    });\n\n                    Object.keys(objRegistrationBodies).forEach(function (sKey) {\n                        sProfessionalRegistration += _this._generateInterviewProfessionalRegistrationBodyEntries(objRegistrationBodies[sKey]);\n                    });\n                } else {\n                    sProfessionalRegistration += \"<div class=\\\"cv-no-data\\\">\" + this.get(\"_objStringsService\").getString(\"noData\") + \"</div><div class=\\\"cv-split-item\\\"></div>\";\n                }\n\n                // GENERATE FINAL HTML\n                return \"\\n                <div class=\\\"cv-section page-break-avoid\\\">\\n                    <div class=\\\"cv-section-heading\\\">\\n                        <i class=\\\"material-icons cv-section-heading-icon\\\">assignment_turned_in</i>\\n                        <div class=\\\"cv-section-heading-text\\\">\" + this.get(\"_objCandidateProfileStringsService\").getString(\"professionalRegistration\") + (\"</div>\\n                    </div>\" + sProfessionalRegistration + \"\\n                </div>\");\n            }\n            return \"\";\n        },\n        _generateInterviewReferences: function _generateInterviewReferences(objData) {\n            // professional references export\n            if (objData.data.hasOwnProperty(\"referee_details\")) {\n                var sProfRef = \"\";\n                if (!a24Core.isEmpty(objData.data.referee_details) && objData.data.referee_details.length > 0) {\n                    var arrProfRef = [];\n                    var arrProfChar = [];\n                    for (var i = 0; i < objData.data.referee_details.length; i++) {\n                        var objRefDetails = objData.data.referee_details[i];\n                        if (!a24Core.isEmpty(objRefDetails)) {\n                            if (objRefDetails.type === \"professional\") {\n                                arrProfRef.push(objRefDetails);\n                            }\n                            if (objRefDetails.type === \"character\") {\n                                arrProfChar.push(objRefDetails);\n                            }\n                        }\n                    }\n\n                    arrProfRef.sort(function (objOne, objTwo) {\n                        if (objOne.name.toLowerCase() < objTwo.name.toLowerCase()) {\n                            return -1;\n                        }\n                        if (objOne.name.toLowerCase() > objTwo.name.toLowerCase()) {\n                            return 1;\n                        }\n                        return 0;\n                    });\n                    arrProfChar.sort(function (objOne, objTwo) {\n                        if (objOne.name.toLowerCase() < objTwo.name.toLowerCase()) {\n                            return -1;\n                        }\n                        if (objOne.name.toLowerCase() > objTwo.name.toLowerCase()) {\n                            return 1;\n                        }\n                        return 0;\n                    });\n\n                    sProfRef += this._generateProfRefDetailsView(arrProfRef);\n                    sProfRef += this._generateCharRefDetailsView(arrProfChar);\n                } else {\n                    sProfRef += \"<div class=\\\"cv-no-data\\\">\" + this.get(\"_objStringsService\").getString(\"noData\") + \"</div><div class=\\\"cv-split-item\\\"></div>\";\n                }\n\n                // GENERATE FINAL HTML\n                return \"\\n                <div class=\\\"cv-section\\\">\\n                    <div class=\\\"cv-section-heading\\\">\\n                        <i class=\\\"material-icons cv-section-heading-icon\\\">business_center</i>\\n                        <div class=\\\"cv-section-heading-text\\\">\" + this.get(\"_objCandidateProfileStringsService\").getString(\"references\") + (\"</div>\\n                    </div>\" + sProfRef + \"\\n                </div>\");\n            }\n            return \"\";\n        },\n        _generateCharRefDetailsView: function _generateCharRefDetailsView(arrRefData) {\n            var sRefDetails = \"\";\n            for (var i = 0; i < arrRefData.length; i++) {\n                var objRefDetails = arrRefData[i];\n                var sProfSubHeader = this.get(\"_objCandidateProfileStringsService\").getString(\"characterReference\");\n                var sProfSubSubHeader = this.get(\"_objCandidateProfileStringsService\").getString(\"refreeDetails\");\n\n                var sStartDate = null;\n                if (!a24Core.isEmpty(objRefDetails.start_at)) {\n\n                    // Start Date\n                    var objStartDate = a24DateManager.createDate(this.get(\"_objUserSession\").get(\"objContextDetails.sTimezone\"));\n                    objStartDate.setDateFromRest(objRefDetails.start_at, true);\n                    sStartDate = objStartDate.getDateFormat();\n                }\n\n                var sEndDate = null;\n                if (objRefDetails.current || a24Core.isEmpty(objRefDetails.end_at)) {\n                    sEndDate = this.get(\"_objCandidateProfileStringsService\").getString(\"current\");\n                } else {\n                    var objEndDate = a24DateManager.createDate(this.get(\"_objUserSession\").get(\"objContextDetails.sTimezone\"));\n                    objEndDate.setDateFromRest(objRefDetails.end_at, true);\n                    sEndDate = objEndDate.getDateFormat();\n                }\n\n                var sRefName = void 0;\n                if (!a24Core.isEmpty(objRefDetails.name)) {\n                    sRefName = objRefDetails.name;\n                }\n\n                var sRelationship = void 0;\n                if (!a24Core.isEmpty(objRefDetails.relationship)) {\n                    sRelationship = objRefDetails.relationship;\n                }\n\n                var sPosition = void 0;\n                if (!a24Core.isEmpty(objRefDetails.position)) {\n                    sPosition = objRefDetails.position;\n                }\n\n                var sEmail = void 0;\n                if (!a24Core.isEmpty(objRefDetails.email_address)) {\n                    sEmail = objRefDetails.email_address;\n                }\n\n                var sRefPhone = void 0;\n                if (!a24Core.isEmpty(objRefDetails.work_contact_number)) {\n                    sRefPhone = objRefDetails.work_contact_number;\n                }\n\n                var sMobile = void 0;\n                if (!a24Core.isEmpty(objRefDetails.mobile_contact_number)) {\n                    sMobile = objRefDetails.mobile_contact_number;\n                }\n\n                var sFax = void 0;\n                if (!a24Core.isEmpty(objRefDetails.fax_number)) {\n                    sFax = objRefDetails.fax_number;\n                }\n\n                sRefDetails += \"<div class=\\\"cv-section-content\\\">\\n                <div class=\\\"page-break-avoid\\\">\\n                    <div class=\\\"cv-section-sub-heading\\\">\\n                        <div class=\\\"cv-section-sub-heading-text\\\">\\n                            \" + sProfSubHeader + \"\\n                        </div>\\n                    </div>\\n                    <div class=\\\"cv-section-sub-heading-text\\\">\\n                        \" + sProfSubSubHeader + \"\\n                    </div>\\n                    <table>\";\n\n                sRefDetails += this._generateSingleSectionWithLabel(this.get(\"_objStringsService\").getString(\"name\"), sRefName, '-', true);\n                sRefDetails += this._generateSingleSectionWithLabel(this.get(\"_objCandidateProfileStringsService\").getString(\"relationship\"), sRelationship, '-', true);\n                sRefDetails += this._generateSingleSectionWithLabel(this.get(\"_objCandidateProfileStringsService\").getString(\"profession\"), sPosition, '-', true);\n                sRefDetails += this._generateSingleSectionWithLabel(this.get(\"_objCandidateProfileStringsService\").getString(\"knownFrom\"), sStartDate, '-', true);\n                sRefDetails += this._generateSingleSectionWithLabel(this.get(\"_objCandidateProfileStringsService\").getString(\"knownTo\"), sEndDate, '-', true);\n                sRefDetails += this._generateSingleSectionWithLabel(this.get(\"_objStringsService\").getString(\"email\"), sEmail, '-', true);\n                sRefDetails += this._generateSingleSectionWithLabel(this.get(\"_objCandidateProfileStringsService\").getString(\"phone\"), sRefPhone, '-', true);\n                sRefDetails += this._generateSingleSectionWithLabel(this.get(\"_objCandidateProfileStringsService\").getString(\"mobile\"), sMobile, '-', true);\n                sRefDetails += this._generateSingleSectionWithLabel(this.get(\"_objCandidateProfileStringsService\").getString(\"fax\"), sFax, '-', true);\n\n                sRefDetails += \"\\n                        </table>\\n                    </div>\\n                </div>\\n                <div class=\\\"cv-split-item\\\"></div>\";\n            }\n\n            return sRefDetails;\n        },\n        _generateProfRefDetailsView: function _generateProfRefDetailsView(arrRefData) {\n            var sRefDetails = \"\";\n            for (var i = 0; i < arrRefData.length; i++) {\n                var objRefDetails = arrRefData[i];\n\n                if (!a24Core.isEmpty(objRefDetails)) {\n                    var sProfSubHeader = this.get(\"_objCandidateProfileStringsService\").getString(\"profesionalReference\");\n                    var sProfSubSubHeader = this.get(\"_objCandidateProfileStringsService\").getString(\"employerDetails\");\n                    var sRefSubHeader = this.get(\"_objCandidateProfileStringsService\").getString(\"refreeDetails\");\n\n                    var sEmployerName = null;\n                    if (!a24Core.isEmpty(objRefDetails.employer.name)) {\n                        sEmployerName = objRefDetails.employer.name;\n                    }\n\n                    var sAddressLine1 = null;\n                    var sAddressLine2 = null;\n                    var sCityTown = null;\n                    var sPostCode = null;\n                    var sProvince = null;\n                    var sCountry = null;\n                    var sPhone = null;\n\n                    if (!a24Core.isEmpty(objRefDetails.employer.address.address_line1)) {\n                        sAddressLine1 = objRefDetails.employer.address.address_line1;\n                    }\n                    if (!a24Core.isEmpty(objRefDetails.employer.address.address_line2)) {\n                        sAddressLine2 = objRefDetails.employer.address.address_line2;\n                    }\n                    if (!a24Core.isEmpty(objRefDetails.employer.address.city)) {\n                        sCityTown = objRefDetails.employer.address.city;\n                    }\n                    if (!a24Core.isEmpty(objRefDetails.employer.address.province)) {\n                        sProvince = objRefDetails.employer.address.province;\n                    }\n                    if (!a24Core.isEmpty(objRefDetails.employer.address.country_code)) {\n                        sCountry = objRefDetails.employer.address.country_code;\n                    }\n                    if (!a24Core.isEmpty(objRefDetails.employer.address.post_code)) {\n                        sPostCode = objRefDetails.employer.address.post_code;\n                    }\n                    if (!a24Core.isEmpty(objRefDetails.employer.contact_number)) {\n                        sPhone = objRefDetails.employer.contact_number;\n                    }\n\n                    var sStartDate = null;\n                    if (!a24Core.isEmpty(objRefDetails.start_at)) {\n\n                        // Start Date\n                        var objStartDate = a24DateManager.createDate(this.get(\"_objUserSession\").get(\"objContextDetails.sTimezone\"));\n                        objStartDate.setDateFromRest(objRefDetails.start_at, true);\n                        sStartDate = objStartDate.getDateFormat();\n                    }\n\n                    var sEndDate = null;\n                    if (objRefDetails.current || a24Core.isEmpty(objRefDetails.end_at)) {\n                        sEndDate = this.get(\"_objCandidateProfileStringsService\").getString(\"current\");\n                    } else {\n                        var objEndDate = a24DateManager.createDate(this.get(\"_objUserSession\").get(\"objContextDetails.sTimezone\"));\n                        objEndDate.setDateFromRest(objRefDetails.end_at, true);\n                        sEndDate = objEndDate.getDateFormat();\n                    }\n\n                    var sRefName = void 0;\n                    if (!a24Core.isEmpty(objRefDetails.name)) {\n                        sRefName = objRefDetails.name;\n                    }\n\n                    var sPosition = void 0;\n                    if (!a24Core.isEmpty(objRefDetails.position)) {\n                        sPosition = objRefDetails.position;\n                    }\n\n                    var sEmail = void 0;\n                    if (!a24Core.isEmpty(objRefDetails.email_address)) {\n                        sEmail = objRefDetails.email_address;\n                    }\n\n                    var sRefPhone = void 0;\n                    if (!a24Core.isEmpty(objRefDetails.work_contact_number)) {\n                        sRefPhone = objRefDetails.work_contact_number;\n                    }\n\n                    var sMobile = void 0;\n                    if (!a24Core.isEmpty(objRefDetails.mobile_contact_number)) {\n                        sMobile = objRefDetails.mobile_contact_number;\n                    }\n\n                    var sFax = void 0;\n                    if (!a24Core.isEmpty(objRefDetails.fax_number)) {\n                        sFax = objRefDetails.fax_number;\n                    }\n\n                    sRefDetails += \"\\n                    <div class=\\\"cv-section-content\\\">\\n                        <div class=\\\"page-break-avoid\\\">\\n                            <div class=\\\"cv-section-sub-heading\\\">\\n                                <div class=\\\"cv-section-sub-heading-text\\\">\\n                                    \" + sProfSubHeader + \"\\n                                </div>\\n                            </div>\\n                            <div class=\\\"cv-section-sub-heading-text\\\">\\n                                \" + sProfSubSubHeader + \"\\n                            </div>\\n                            <table>\";\n\n                    sRefDetails += this._generateSingleSectionWithLabel(this.get(\"_objCandidateProfileStringsService\").getString(\"employerNameCompany\"), sEmployerName, '-', true);\n                    sRefDetails += this._generateSingleSectionWithLabel(this.get(\"_objStringsService\").getString(\"address\"), sAddressLine1, '-', true);\n                    sRefDetails += this._generateSingleSectionWithLabel(\"\", sAddressLine2);\n                    sRefDetails += this._generateSingleSectionWithLabel(\"\", sCityTown);\n                    sRefDetails += this._generateSingleSectionWithLabel(\"\", sPostCode);\n                    sRefDetails += this._generateSingleSectionWithLabel(\"\", sProvince);\n                    sRefDetails += this._generateSingleSectionWithLabel(\"\", sCountry);\n                    sRefDetails += this._generateSingleSectionWithLabel(this.get(\"_objCandidateProfileStringsService\").getString(\"phone\"), sPhone, '-', true);\n                    sRefDetails += this._generateSingleSectionWithLabel(this.get(\"_objCandidateProfileStringsService\").getString(\"startDate\"), sStartDate, '-', true);\n                    sRefDetails += this._generateSingleSectionWithLabel(this.get(\"_objCandidateProfileStringsService\").getString(\"endDate\"), sEndDate, '-', true);\n\n                    sRefDetails += \"\\n                        </table>\\n                    </div>\\n                    <div class=\\\"page-break-avoid\\\">\\n                        <div class=\\\"cv-section-sub-heading\\\">\\n                            <div class=\\\"cv-section-sub-heading-text\\\">\\n                                \" + sRefSubHeader + \"\\n                            </div>\\n                        </div>\\n                        <table>\";\n\n                    sRefDetails += this._generateSingleSectionWithLabel(this.get(\"_objStringsService\").getString(\"name\"), sRefName, '-', true);\n                    sRefDetails += this._generateSingleSectionWithLabel(this.get(\"_objCandidateProfileStringsService\").getString(\"position\"), sPosition, '-', true);\n                    sRefDetails += this._generateSingleSectionWithLabel(this.get(\"_objStringsService\").getString(\"email\"), sEmail, '-', true);\n                    sRefDetails += this._generateSingleSectionWithLabel(this.get(\"_objCandidateProfileStringsService\").getString(\"phone\"), sRefPhone, '-', true);\n                    sRefDetails += this._generateSingleSectionWithLabel(this.get(\"_objCandidateProfileStringsService\").getString(\"mobile\"), sMobile, '-', true);\n                    sRefDetails += this._generateSingleSectionWithLabel(this.get(\"_objCandidateProfileStringsService\").getString(\"fax\"), sFax, '-', true);\n\n                    sRefDetails += \"\\n                            </table>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"cv-split-item\\\"></div>\";\n                }\n            }\n\n            return sRefDetails;\n        },\n        _generateSingleSectionWithLabel: function _generateSingleSectionWithLabel(sHeading, sValue, sEmptyValue, bShowEmpty) {\n            var bHasValue = !!sValue;\n            if (!bHasValue && !bShowEmpty) {\n                return \"\";\n            }\n            if (!bHasValue) {\n                sValue = sEmptyValue;\n            }\n            return \"\\n                        <tr class=\\\"cv-section-content-row\\\">\\n                            <td class=\\\"cv-section-content-label\\\">\" + sHeading + \"</td>\\n                            <td class=\\\"cv-section-content-value\\\">\" + sValue + \"</td>\\n                        </tr>\";\n        },\n        _generateSingleSectionWithIcon: function _generateSingleSectionWithIcon(sIcon, sValue, sEmptyValue, bShowEmpty) {\n            var bHasValue = !!sValue;\n            if (!bHasValue && !bShowEmpty) {\n                return \"\";\n            }\n            if (!bHasValue) {\n                sValue = sEmptyValue;\n            }\n            return \"\\n                        <tr class=\\\"cv-section-content-row\\\">\\n                            <td class=\\\"cv-section-content-icon-label\\\">\\n                                <i class=\\\"material-icons\\\">\" + sIcon + \"</i>\\n                            </td>\\n                            <td class=\\\"cv-section-content-value\\\">\" + sValue + \"</td>\\n                        </tr>\";\n        },\n        _getStylesheet: function _getStylesheet() {\n            return \"\\n            html, body {\\n                padding: 0px;\\n                margin: 0px;\\n                background: #eee;\\n                font-family: \\\"Roboto\\\" !important;\\n            }\\n\\n            .print-page {\\n                margin: 0 auto;\\n                padding: 20px;\\n                background: white;\\n                width: 700px;\\n            }\\n            .print-button-container {\\n                position: fixed;\\n                bottom: 20px;\\n                right: 20px;\\n                width: 60px;\\n                height: 60px;\\n            }\\n            .print-button {\\n                width: 60px;\\n                height: 60px;\\n                border-radius: 50%;\\n                color: white;\\n                background-color: #ffab00;\\n                box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15);\\n                display: flex;\\n                justify-content: center;\\n                align-items: center;\\n                cursor: pointer;\\n                cursor: hand;\\n            }\\n\\n            @media print {\\n                .print-button {\\n                    display: none !important;\\n                }\\n\\n                .print-page {\\n                    padding: 0 !important;\\n                }\\n\\n                .page-break {\\n                    page-break-after: always;\\n                }\\n\\n                .page-break-avoid {\\n                    page-break-inside: avoid;\\n                }\\n\\n                table {\\n                    page-break-inside: avoid;\\n                }\\n            }\\n\\n            @page {\\n                size: A4 portrait;\\n                margin: 10%;\\n            }\\n\\n            .cv-heading {\\n                text-align: center;\\n            }\\n            .cv-heading-logo {\\n                width: 300px;\\n            }\\n            .cv-heading-text {\\n                font-size: 36px;\\n                color: #424242;\\n            }\\n            .cv-date-generated {\\n                font-size: 12px;\\n                color: #727272;\\n            }\\n            .cv-heading .cv-date-generated {\\n                font-size: 14px;\\n            }\\n\\n            .cv-section {\\n            }\\n            .cv-section-heading {\\n                text-align: left;\\n                padding-top: 10px;\\n                padding-bottom: 10px;\\n                color: #424242;\\n            }\\n            .cv-section-heading-icon {\\n                display: inline-block;\\n                vertical-align: middle;\\n                padding-right: 5px;\\n                font-size: 26px;\\n            }\\n            .cv-section-heading-text {\\n                display: inline-block;\\n                font-size: 26px;\\n                vertical-align: middle;\\n            }\\n\\n            .cv-section-sub-heading {\\n                text-align: left;\\n                padding-top: 10px;\\n                padding-bottom: 10px;\\n                color: #727272;\\n            }\\n            .cv-section-sub-heading-text {\\n                display: inline-block;\\n                font-size: 22px;\\n                vertical-align: middle;\\n            }\\n\\n            .cv-section-content {\\n                text-align: left;\\n                font-size: 16px;\\n                color: #727272;\\n            }\\n            .cv-section-content-table {\\n                width: 100%;\\n            }\\n            .cv-section-skill-exp-header {\\n                font-weight: bold;\\n                text-align: center;\\n            }\\n            .cv-section-item-name {\\n                text-align: left;\\n            }\\n            .cv-section-item {\\n                width: 1px;\\n                text-align: left;\\n                padding-right: 5px;\\n                white-space: nowrap;\\n            }\\n            .cv-section-content-label {\\n                min-width: 250px;\\n                vertical-align: top;\\n            }\\n            .cv-section-content-icon-label {\\n                min-width: 50px;\\n                vertical-align: top;\\n                font-size: 16px;\\n            }\\n            .cv-section-content-value {\\n                white-space: pre-line;\\n                line-height: 24px;\\n                font-size: 16px;\\n            }\\n\\n            .cv-split-item {\\n                border-bottom: 1px solid black;\\n                margin-top: 15px;\\n                margin-bottom: 15px;\\n            }\\n\\n            .cv-no-data {\\n                text-transform: uppercase;\\n                text-align: center;\\n                font-weight: bold;\\n            }\\n        \";\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/card-datagrid-custom-filter-candidate-distance\", [\"exports\", \"a24-ember-lib/services/card-datagrid-filter-custom-base\"], function (exports, _cardDatagridFilterCustomBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _cardDatagridFilterCustomBase.default.extend({\n        _objCandidateProfileEnumsService: Ember.inject.service(\"a24-enums-candidate-profile\"),\n        _objCandidateProfileConstants: Ember.inject.service(\"a24-constants-candidate-profile\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n\n        funcFilterCustomPrimaryQuery: function funcFilterCustomPrimaryQuery(objHeaderItem /* , objHeaderSecondaries */) {\n            var iMax = null;\n\n            if (!objHeaderItem._bEmptyEntriesOnly) {\n                if (objHeaderItem._objDistanceUnit.sValue === this.get(\"_objCandidateProfileStringsService\").getString(\"km\").toLowerCase()) {\n                    iMax = objHeaderItem._iWithinDistance * this.get(\"_objCandidateProfileConstants\").CONVERT_KILOMETERS_TO_METERS;\n                }\n\n                if (objHeaderItem._objDistanceUnit.sValue === this.get(\"_objCandidateProfileEnumsService.distanceUnitOptions.MILES.backend\")) {\n                    iMax = objHeaderItem._iWithinDistance * this.get(\"_objCandidateProfileConstants\").CONVERT_MILES_TO_METERS;\n                }\n\n                var sLocName = \"\";\n                var sLat = \"\";\n                var sLong = \"\";\n                var sSite = \"\";\n                var sOrg = \"\";\n                var sCan = \"\";\n\n                if (!a24Core.isEmpty(objHeaderItem._objLocationOption) && objHeaderItem._objLocationOption.sValue === \"custom_location\" && !a24Core.isEmpty(objHeaderItem._objAddressSuggest) && !a24Core.isEmpty(objHeaderItem._objAddressSuggest.sLatitude) && !a24Core.isEmpty(objHeaderItem._objAddressSuggest.sLongitude) && objHeaderItem._objAddressSuggest.sLatitude === objHeaderItem._sLatitude && objHeaderItem._objAddressSuggest.sLongitude === objHeaderItem._sLongitude) {\n                    sLocName = objHeaderItem._objAddressSuggest.sAddressString;\n                } else if (a24Core.isEmpty(objHeaderItem._objLocationOption) && !a24Core.isEmpty(objHeaderItem._objLinkedClient) && !a24Core.isEmpty(objHeaderItem._objLinkedClient.objSiteGeoLocation) && objHeaderItem._objLinkedClient.objSiteGeoLocation.fLatitude === objHeaderItem._sLatitude && objHeaderItem._objLinkedClient.objSiteGeoLocation.fLongitude === objHeaderItem._sLongitude) {\n                    sOrg = objHeaderItem._objLinkedClient.sOrganisationName;\n                    sSite = objHeaderItem._objLinkedClient.sSiteName;\n                } else if (a24Core.isEmpty(objHeaderItem._objLocationOption) && !a24Core.isEmpty(objHeaderItem._objSelectedCandidate) && !a24Core.isEmpty(objHeaderItem._objSelectedCandidate.objAddressGeoLocation) && objHeaderItem._objSelectedCandidate.objAddressGeoLocation.fLatitude === objHeaderItem._sLatitude && objHeaderItem._objSelectedCandidate.objAddressGeoLocation.fLongitude === objHeaderItem._sLongitude) {\n                    sCan = objHeaderItem._objSelectedCandidate.sDisplayName;\n                }\n                sLat = objHeaderItem._sLatitude;\n                sLong = objHeaderItem._sLongitude;\n\n                var objQuery = {\n                    bWithin: true,\n                    sUnit: objHeaderItem._objDistanceUnit.sValue,\n                    sLocNme: sLocName,\n                    fLong: sLong,\n                    fLat: sLat,\n                    iMax: Math.round(iMax),\n                    sSite: sSite,\n                    sOrg: sOrg,\n                    sCan: sCan\n                };\n\n                return objQuery;\n            }\n\n            return { mValue: \"null\" };\n        },\n\n        funcFilterCustomTag: function funcFilterCustomTag(objHeaderItem, objQuery, objHeadersSecondaries, bSkipTitle) {\n            var sStrDistanceTagKey = \"distanceTag\";\n            var sStrDistanceCoordsTagKey = \"distanceTagCoords\";\n\n            if (objQuery.mValue === \"null\") {\n                return {\n                    sTag: this.get(\"_objCandidateProfileStringsService\").getString(\"distanceIsEmpty\")\n                };\n            }\n\n            if (bSkipTitle) {\n                sStrDistanceTagKey = \"distanceTagNoTitle\";\n                sStrDistanceCoordsTagKey = \"distanceTagCoordsNoTitle\";\n            }\n\n            var sDistance = \"\";\n\n            if (objQuery.sUnit === this.get(\"_objCandidateProfileStringsService\").getString(\"km\").toLowerCase()) {\n                var iKMValue = objQuery.iMax / this.get(\"_objCandidateProfileConstants\").CONVERT_KILOMETERS_TO_METERS;\n                sDistance = Math.round(iKMValue) + this.get(\"_objCandidateProfileStringsService\").getString(\"km\");\n            }\n\n            if (objQuery.sUnit === this.get(\"_objCandidateProfileEnumsService.distanceUnitOptions.MILES.backend\")) {\n                var iMilesValue = objQuery.iMax / this.get(\"_objCandidateProfileConstants\").CONVERT_MILES_TO_METERS;\n                sDistance = Math.round(iMilesValue) + this.get(\"_objCandidateProfileEnumsService.distanceUnitOptions.MILES.backend\");\n            }\n\n            if (a24Core.isEmpty(objQuery.sLocNme)) {\n                if (!a24Core.isEmpty(objQuery.sSite) && !a24Core.isEmpty(objQuery.sOrg)) {\n                    return {\n                        sTag: this.get(\"_objCandidateProfileStringsService\").getTokenString(sStrDistanceTagKey, sDistance, objQuery.sOrg + \": \" + objQuery.sSite)\n                    };\n                }\n                if (!a24Core.isEmpty(objQuery.sCan)) {\n                    return {\n                        sTag: this.get(\"_objCandidateProfileStringsService\").getTokenString(sStrDistanceTagKey, sDistance, objQuery.sCan)\n                    };\n                }\n                return {\n                    sTag: this.get(\"_objCandidateProfileStringsService\").getTokenString(sStrDistanceCoordsTagKey, sDistance, objQuery.fLat + \", \" + objQuery.fLong)\n                };\n            } else {\n                return {\n                    sTag: this.get(\"_objCandidateProfileStringsService\").getTokenString(sStrDistanceTagKey, sDistance, objQuery.sLocNme)\n                };\n            }\n        },\n\n        funcFilterCustomPrimaryReset: function funcFilterCustomPrimaryReset(objHeaderItem) {\n            //Reset the state of the custom filter input\n            Ember.set(objHeaderItem, \"_objDistanceUnit\", null);\n            Ember.set(objHeaderItem, \"_objLinkedClient\", null);\n            Ember.set(objHeaderItem, \"_objSelectedCandidate\", null);\n            Ember.set(objHeaderItem, \"_iWithinDistance\", null);\n            Ember.set(objHeaderItem, \"_objAddressSuggest\", null);\n            Ember.set(objHeaderItem, \"_sLatitude\", null);\n            Ember.set(objHeaderItem, \"_sLongitude\", null);\n            Ember.set(objHeaderItem, \"_objLocationOption\", null);\n            Ember.set(objHeaderItem, \"_bEmptyEntriesOnly\", false);\n        },\n\n        funcFilterCustomFixupQuery: function funcFilterCustomFixupQuery() /*objHeader, objHeaderSecondaries */{},\n\n        funcFilterCustomSetEditState: function funcFilterCustomSetEditState(objHeaderItem, iIndex) {\n            var objHeaderTag = objHeaderItem.mFilterValue[iIndex];\n\n            if (objHeaderTag.mValue === \"null\") {\n                Ember.set(objHeaderItem, \"_bEmptyEntriesOnly\", true);\n            } else {\n                if (objHeaderTag.sUnit === this.get(\"_objCandidateProfileStringsService\").getString(\"km\").toLowerCase()) {\n                    Ember.set(objHeaderItem, \"_objDistanceUnit\", {\n                        sValue: objHeaderTag.sUnit\n                    });\n                    var iKMValue = objHeaderTag.iMax / this.get(\"_objCandidateProfileConstants\").CONVERT_KILOMETERS_TO_METERS;\n                    Ember.set(objHeaderItem, \"_iWithinDistance\", Math.round(iKMValue));\n                } else if (objHeaderTag.sUnit === this.get(\"_objCandidateProfileEnumsService.distanceUnitOptions.MILES.backend\")) {\n                    Ember.set(objHeaderItem, \"_objDistanceUnit\", {\n                        sValue: objHeaderTag.sUnit\n                    });\n\n                    var iMilesValue = objHeaderTag.iMax / this.get(\"_objCandidateProfileConstants\").CONVERT_MILES_TO_METERS;\n                    Ember.set(objHeaderItem, \"_iWithinDistance\", Math.round(iMilesValue));\n                }\n\n                if (!a24Core.isEmpty(objHeaderTag.sSite) && !a24Core.isEmpty(objHeaderTag.sOrg)) {\n                    Ember.set(objHeaderItem, \"_objLocationOption\", null);\n\n                    Ember.set(objHeaderItem, \"_objLinkedClient\", {\n                        sSiteName: objHeaderTag.sSite,\n                        sOrganisationName: objHeaderTag.sOrg,\n                        sDisplayName: objHeaderTag.sOrg + \": \" + objHeaderTag.sSite,\n                        objSiteGeoLocation: {\n                            fLatitude: objHeaderTag.fLat,\n                            fLongitude: objHeaderTag.fLong\n                        }\n                    });\n                } else if (!a24Core.isEmpty(objHeaderTag.sCan)) {\n                    Ember.set(objHeaderItem, \"_objLocationOption\", null);\n\n                    Ember.set(objHeaderItem, \"_objSelectedCandidate\", {\n                        sDisplayName: objHeaderTag.sCan,\n                        objAddressGeoLocation: {\n                            fLatitude: objHeaderTag.fLat,\n                            fLongitude: objHeaderTag.fLong\n                        }\n                    });\n                } else {\n                    Ember.set(objHeaderItem, \"_objLocationOption\", {\n                        sValue: \"custom_location\"\n                    });\n\n                    Ember.set(objHeaderItem, \"_objAddressSuggest\", {\n                        sLatitude: objHeaderTag.fLat,\n                        sLongitude: objHeaderTag.fLong,\n                        sAddressString: objHeaderTag.sLocNme\n                    });\n                }\n\n                Ember.set(objHeaderItem, \"_sLatitude\", objHeaderTag.fLat);\n                Ember.set(objHeaderItem, \"_sLongitude\", objHeaderTag.fLong);\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/card-datagrid-custom-filter-candidate-external-days-to-expiry\", [\"exports\", \"a24-ember-lib/services/card-datagrid-filter-custom-base\"], function (exports, _cardDatagridFilterCustomBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _cardDatagridFilterCustomBase.default.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objCandidateProfileEnumsService: Ember.inject.service(\"a24-enums-candidate-profile\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objDatagridFitlerService: Ember.inject.service(\"card-datagrid-filter\"),\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objEnumEmberLibService: Ember.inject.service(\"a24-enums-ember-lib\"),\n\n        funcFilterCustomPrimaryQuery: function funcFilterCustomPrimaryQuery(objHeaderItem /* , objHeaderSecondaries */) {\n            var objQuery = null;\n\n            if (objHeaderItem._bEmptyEntriesOnly) {\n                objQuery = {\n                    bEncode: true,\n                    sFilterValue: \"empty\",\n                    mValue: \"null\"\n                };\n            } else {\n                objQuery = {\n                    bEncode: true,\n                    bAny: a24Core.isEmpty(objHeaderItem._objExternalDaysType),\n                    arSec: []\n                };\n\n                if (!a24Core.isEmpty(objHeaderItem._objExternalDaysType)) {\n                    objQuery.sFilterValue = objHeaderItem._objExternalDaysType.name;\n                    objQuery.mValue = objHeaderItem._objExternalDaysType._id;\n                }\n\n                if (!a24Core.isEmpty(objHeaderItem._objExpiringIn)) {\n                    if (objHeaderItem._objExpiringIn.sValue === this.get(\"_objCandidateProfileEnumsService.expiringIn.NEVER.backend\")) {\n                        objQuery.arSec.push({\n                            \"sProp\": \"value\",\n                            \"sFilterValue\": null,\n                            \"bEncode\": true,\n                            \"mValue\": null\n                        });\n                    } else {\n                        if (!a24Core.isEmpty(objHeaderItem._iNumberOfDays)) {\n\n                            var objDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                            var objCurrentDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n\n                            objDate.addTimeToDate(a24Constants.MOMENT_TIME_DAYS, objHeaderItem._iNumberOfDays);\n\n                            var sDate = objDate.getDateStringForRest(true);\n                            var sCurrentDate = objCurrentDate.getDateStringForRest(true);\n                            if (objHeaderItem._objExpiringIn.sValue === this.get(\"_objCandidateProfileEnumsService.expiringIn.LESS_THAN_AND_EXPIRED.backend\")) {\n                                objQuery.arSec.push({\n                                    \"sProp\": \"value\",\n                                    \"sFilterValue\": objHeaderItem._iNumberOfDays,\n                                    \"bEncode\": true,\n                                    \"mValue\": sDate,\n                                    \"bTo\": true\n                                });\n                            } else if (objHeaderItem._objExpiringIn.sValue === this.get(\"_objCandidateProfileEnumsService.expiringIn.LESS_THAN_NOT_EXPIRED.backend\")) {\n                                objQuery.arSec.push({\n                                    \"sProp\": \"value\",\n                                    \"sFilterValue\": objHeaderItem._iNumberOfDays,\n                                    \"bEncode\": true,\n                                    \"bFromAndTo\": true,\n                                    \"mValue\": {\n                                        \"sFrom\": sCurrentDate,\n                                        \"sTo\": sDate\n                                    }\n                                });\n                            } else if (objHeaderItem._objExpiringIn.sValue === this.get(\"_objCandidateProfileEnumsService.expiringIn.MORE_THAN.backend\")) {\n                                objQuery.arSec.push({\n                                    \"sProp\": \"value\",\n                                    \"sFilterValue\": objHeaderItem._iNumberOfDays,\n                                    \"bEncode\": true,\n                                    \"mValue\": sDate,\n                                    \"bFrom\": true\n                                });\n                            } else if (objHeaderItem._objExpiringIn.sValue === this.get(\"_objCandidateProfileEnumsService.expiringIn.EXACTLY.backend\")) {\n                                objQuery.arSec.push({\n                                    \"sProp\": \"value\",\n                                    \"sFilterValue\": objHeaderItem._iNumberOfDays,\n                                    \"bEncode\": true,\n                                    \"mValue\": sDate\n                                });\n                            }\n                        }\n                    }\n                }\n            }\n            return objQuery;\n        },\n\n        funcFilterCustomTag: function funcFilterCustomTag(objHeaderItem, objQuery, objHeadersSecondaries, bSkipTitle) {\n            // Doing this since the existing filter still is an ember filter and needs to run through that\n            if (objQuery.sFilterValue === \"empty\") {\n                if (bSkipTitle) {\n                    return {\n                        sTag: this.get(\"_objStringsService\").getString(\"isEmpty\")\n                    };\n                } else {\n                    return {\n                        sTag: this.get(\"_objCandidateProfileStringsService\").getString(\"externalDaysTagEmpty\")\n                    };\n                }\n            } else {\n                var sExternalDaysTagKey = bSkipTitle ? \"externalPortfolioTagNoTitle\" : \"externalDaysTag\";\n                var sExternalTypeFilter = objQuery.sFilterValue;\n\n                if (!a24Core.isEmpty(objHeaderItem) && !a24Core.isEmpty(objHeaderItem.sReactFilterRoute)) {\n                    var sTag = \"\";\n\n                    var objValue = objQuery.arSec.findBy(\"sProp\", \"value\");\n                    // value\n                    var arrHeaderSecondary = Ember.get(objHeadersSecondaries, \"arrFilterSecondary_\" + objHeaderItem.sProperty);\n                    var objValueHeader = {};\n\n                    for (var i = 0; i < arrHeaderSecondary.length; i++) {\n                        if (arrHeaderSecondary[i].sProperty === \"value\") {\n                            objValueHeader = arrHeaderSecondary[i];\n                        }\n                    }\n\n                    var objFromDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                    var objToDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n\n                    if (!a24Core.isEmpty(objValue)) {\n                        var sExpiresFrom = \"\";\n                        var sExpiresTo = \"\";\n                        if (objValue.bFrom || objValue.bAfter) {\n                            objFromDate.setDateFromRest(objValue.mValue, true);\n                            sExpiresFrom = objFromDate.getDateStringForRest();\n                        } else if (objValue.bTo) {\n                            objToDate.setDateFromRest(objValue.mValue, true);\n                            sExpiresTo = objToDate.getDateStringForRest();\n                        } else if (objValue.bFromAndTo || objValue.bNotWithinNext || objValue.bNotWithinLast) {\n                            objFromDate.setDateFromRest(objValue.mValue.sFrom, true);\n                            sExpiresFrom = objFromDate.getDateStringForRest();\n                            objToDate.setDateFromRest(objValue.mValue.sTo, true);\n                            sExpiresTo = objToDate.getDateStringForRest();\n                        }\n                        var objValueTag = this.get(\"_objDatagridFitlerService\").createDateQueryAndTag(objValue.sFilterValue, sExpiresFrom, sExpiresTo, objValueHeader, true);\n                        if (objValueHeader.bTemporal) {\n                            if (objValue.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED.backend\") || objValue.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_AFTER.backend\")) {\n                                objValueTag.sTag = objValueTag.sTag.substring(objValueHeader.sTitle.length, objValueTag.sTag.length);\n                            }\n                            sTag += \", \" + objValueTag.sTag;\n                        } else {\n                            sTag += \", \" + objValueTag.sTag;\n                        }\n                    }\n                    sExternalTypeFilter += sTag;\n                } else {\n                    var objDaysQuery = objQuery.arSec.findBy(\"sProp\", \"value\");\n\n                    if (!a24Core.isEmpty(objDaysQuery)) {\n                        var sDays = \" expiring in \" + this.get(\"_objCandidateProfileStringsService\").getString(\"exactly\") + \" \" + objDaysQuery.sFilterValue + \" days\";\n                        if (objDaysQuery.bFrom) {\n                            sDays = \" expiring in \" + this.get(\"_objCandidateProfileStringsService\").getString(\"moreThan\") + \" \" + objDaysQuery.sFilterValue + \" days\";\n                        } else if (objDaysQuery.bTo) {\n                            sDays = \" expiring in \" + this.get(\"_objCandidateProfileStringsService\").getString(\"lessThan\") + \" \" + objDaysQuery.sFilterValue + \" days \" + this.get(\"_objCandidateProfileStringsService\").getString(\"orExpired\");\n                        } else if (objDaysQuery.bFromAndTo) {\n                            sDays = \" expiring in \" + this.get(\"_objCandidateProfileStringsService\").getString(\"lessThan\") + \" \" + objDaysQuery.sFilterValue + \" days \" + this.get(\"_objCandidateProfileStringsService\").getString(\"andNotExpired\");\n                        } else if (a24Core.isEmpty(objDaysQuery.sFilterValue)) {\n                            sDays = \" expiring \" + this.get(\"_objCandidateProfileStringsService\").getString(\"never\");\n                        }\n\n                        sExternalTypeFilter += sDays;\n                    }\n                }\n\n                return {\n                    sTag: this.get(\"_objCandidateProfileStringsService\").getTokenString(sExternalDaysTagKey, sExternalTypeFilter)\n                };\n            }\n        },\n\n        funcFilterCustomPrimaryReset: function funcFilterCustomPrimaryReset(objHeaderItem) {\n            //Reset the state of the custom filter input\n            Ember.set(objHeaderItem, \"_bEmptyEntriesOnly\", false);\n            Ember.set(objHeaderItem, \"_objExternalDaysType\", null);\n            Ember.set(objHeaderItem, \"_objExpiringIn\", null);\n            Ember.set(objHeaderItem, \"_iNumberOfDays\", null);\n        },\n\n        funcFilterCustomFixupQuery: function funcFilterCustomFixupQuery(objHeader, objHeaderSecondaries) {\n            if (a24Core.isEmpty(objHeader.mFilterValue)) {\n                return;\n            }\n            for (var i = 0; i < objHeader.mFilterValue.length; i++) {\n                var arrSeconderies = objHeader.mFilterValue[i].arSec;\n                if (!a24Core.isEmpty(arrSeconderies)) {\n                    for (var j = 0; j < arrSeconderies.length; j++) {\n                        if (!a24Core.isEmpty(objHeaderSecondaries)) {\n                            var objSecondaryHeader = null;\n                            var arrHeaderSecondary = Ember.get(objHeaderSecondaries, \"arrFilterSecondary_\" + objHeader.sProperty);\n                            if (!a24Core.isEmpty(arrHeaderSecondary)) {\n                                for (var k = 0; k < arrHeaderSecondary.length; k++) {\n                                    if (arrHeaderSecondary[k].sProperty === arrSeconderies[j].sProp) {\n                                        objSecondaryHeader = arrHeaderSecondary[k];\n                                        break;\n                                    }\n                                }\n                            }\n                            if (arrSeconderies[j].sProp === \"value\") {\n                                if (!a24Core.isEmpty(arrSeconderies[j].sFilterValue) && !a24Core.isEmpty(objSecondaryHeader) && objSecondaryHeader.bTemporal) {\n                                    if (arrSeconderies[j].sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED.backend\")) {\n                                        var _objCurrentDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n\n                                        this.get(\"_objDatagridFitlerService\").createDateQueryAndTag(arrSeconderies[j].sFilterValue, _objCurrentDate.getDateFormat(), \"\", objHeader, false);\n                                    } else if (arrSeconderies[j].sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_AFTER.backend\")) {\n                                        this.get(\"_objDatagridFitlerService\").createDateQueryAndTag(arrSeconderies[j].sFilterValue, arrSeconderies[j].mValue, \"\", objHeader, true);\n                                    } else if (!a24Core.isEmpty(arrSeconderies[j].sFilterValue) && arrSeconderies[j].sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED_GRACE.backend\"), 0) === 0) {\n                                        var _objCurrentDate2 = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                                        _objCurrentDate2.setTimeToStartOfDay();\n                                        var sUnit = arrSeconderies[j].sFilterValue.split(\"_\")[1];\n                                        _objCurrentDate2.subtractTimeFromDate(sUnit, arrSeconderies[j].iDays);\n\n                                        this.get(\"_objDatagridFitlerService\").createDateQueryAndTag(arrSeconderies[j].sFilterValue, _objCurrentDate2.getDateFormat(), \"\", objHeader, false);\n                                    } else if (!a24Core.isEmpty(arrSeconderies[j].sFilterValue) && arrSeconderies[j].sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_WILL_NOT_EXPIRE.backend\"), 0) === 0) {\n                                        var _objCurrentDate3 = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                                        _objCurrentDate3.setTimeToStartOfDay();\n                                        var _sUnit = arrSeconderies[j].sFilterValue.split(\"_\")[1];\n                                        _objCurrentDate3.addTimeToDate(_sUnit, arrSeconderies[j].iDays);\n\n                                        this.get(\"_objDatagridFitlerService\").createDateQueryAndTag(arrSeconderies[j].sFilterValue, _objCurrentDate3.getDateFormat(), \"\", objHeader, false);\n                                    } else if (!a24Core.isEmpty(arrSeconderies[j].sFilterValue) && arrSeconderies[j].sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_WITHIN_LAST.backend\"), 0) === 0) {\n                                        var _objCurrentDate4 = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                                        var _sUnit2 = arrSeconderies[j].sFilterValue.split(\"_\")[1];\n                                        _objCurrentDate4.setTimeToEndOfDay();\n                                        var sToDate = _objCurrentDate4.getDateFormat();\n                                        _objCurrentDate4.setTimeToStartOfDay();\n                                        _objCurrentDate4.subtractTimeFromDate(_sUnit2, arrSeconderies[j].iDays);\n                                        var sFromDate = _objCurrentDate4.getDateFormat();\n\n                                        this.get(\"_objDatagridFitlerService\").createDateQueryAndTag(arrSeconderies[j].sFilterValue, sFromDate, sToDate, objHeader, false);\n                                    } else if (!a24Core.isEmpty(arrSeconderies[j].sFilterValue) && arrSeconderies[j].sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_AT_LEAST.backend\"), 0) === 0) {\n                                        var _objCurrentDate5 = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                                        _objCurrentDate5.setTimeToEndOfDay();\n                                        var _sUnit3 = arrSeconderies[j].sFilterValue.split(\"_\")[1];\n                                        _objCurrentDate5.subtractTimeFromDate(_sUnit3, arrSeconderies[j].iDays);\n\n                                        this.get(\"_objDatagridFitlerService\").createDateQueryAndTag(arrSeconderies[j].sFilterValue, \"\", _objCurrentDate5.getDateFormat(), objHeader, false);\n                                    }\n                                } else {\n                                    if (!a24Core.isEmpty(arrSeconderies[j].sFilterValue)) {\n                                        var objDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                                        var objCurrentDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n\n                                        objDate.addTimeToDate(a24Constants.MOMENT_TIME_DAYS, arrSeconderies[j].sFilterValue);\n\n                                        var sDate = objDate.getDateStringForRest(true);\n                                        var sCurrentDate = objCurrentDate.getDateStringForRest(true);\n\n                                        if (arrSeconderies[j].bFromAndTo) {\n                                            Ember.set(objHeader, \"mFilterValue.\" + i + \".arSec.\" + j + \".mValue\", {\n                                                \"sFrom\": sCurrentDate,\n                                                \"sTo\": sDate\n                                            });\n                                        } else {\n                                            Ember.set(objHeader, \"mFilterValue.\" + i + \".arSec.\" + j + \".mValue\", sDate);\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        },\n\n        funcFilterCustomSetEditState: function funcFilterCustomSetEditState(objHeaderItem, iIndex) {\n            var objTag = objHeaderItem.mFilterValue[iIndex];\n            Ember.set(objHeaderItem, \"_bEmptyEntriesOnly\", objTag.sFilterValue === \"empty\");\n\n            if (objTag.sFilterValue !== \"empty\") {\n                if (!a24Core.isEmpty(objTag.mValue) && !a24Core.isEmpty(objTag.sFilterValue)) {\n                    var objExternalType = {\n                        _id: objTag.mValue,\n                        name: objTag.sFilterValue\n                    };\n                    Ember.set(objHeaderItem, \"_objExternalDaysType\", objExternalType);\n                }\n\n                if (!a24Core.isEmpty(objTag.arSec)) {\n                    for (var i = 0; i < objTag.arSec.length; i++) {\n                        var objSecondary = objTag.arSec[i];\n\n                        if (objSecondary.sProp === \"value\") {\n                            if (objSecondary.bTo) {\n                                Ember.set(objHeaderItem, \"_iNumberOfDays\", objSecondary.sFilterValue);\n                                Ember.set(objHeaderItem, \"_objExpiringIn\", {\n                                    sLabel: this.get(\"_objCandidateProfileStringsService\").getString(\"lessThanAndExpired\"),\n                                    sValue: this.get(\"_objCandidateProfileEnumsService.expiringIn.LESS_THAN_AND_EXPIRED.backend\")\n                                });\n                            } else if (objSecondary.bFromAndTo) {\n                                Ember.set(objHeaderItem, \"_iNumberOfDays\", objSecondary.sFilterValue);\n                                Ember.set(objHeaderItem, \"_objExpiringIn\", {\n                                    sLabel: this.get(\"_objCandidateProfileStringsService\").getString(\"lessThanNotExpired\"),\n                                    sValue: this.get(\"_objCandidateProfileEnumsService.expiringIn.LESS_THAN_NOT_EXPIRED.backend\")\n                                });\n                            } else if (objSecondary.bFrom) {\n                                Ember.set(objHeaderItem, \"_iNumberOfDays\", objSecondary.sFilterValue);\n                                Ember.set(objHeaderItem, \"_objExpiringIn\", {\n                                    sLabel: this.get(\"_objCandidateProfileStringsService\").getString(\"moreThan\"),\n                                    sValue: this.get(\"_objCandidateProfileEnumsService.expiringIn.MORE_THAN.backend\")\n                                });\n                            } else if (a24Core.isEmpty(objSecondary.sFilterValue)) {\n                                Ember.set(objHeaderItem, \"_objExpiringIn\", {\n                                    sLabel: this.get(\"_objCandidateProfileStringsService\").getString(\"never\"),\n                                    sValue: this.get(\"_objCandidateProfileEnumsService.expiringIn.NEVER.backend\")\n                                });\n                            } else {\n                                Ember.set(objHeaderItem, \"_iNumberOfDays\", objSecondary.sFilterValue);\n                                Ember.set(objHeaderItem, \"_objExpiringIn\", {\n                                    sLabel: this.get(\"_objCandidateProfileStringsService\").getString(\"exactly\"),\n                                    sValue: this.get(\"_objCandidateProfileEnumsService.expiringIn.EXACTLY.backend\")\n                                });\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/card-datagrid-custom-filter-candidate-external-portfolios\", [\"exports\", \"a24-ember-lib/services/card-datagrid-filter-custom-base\"], function (exports, _cardDatagridFilterCustomBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _cardDatagridFilterCustomBase.default.extend({\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objCandidateProfileEnumsService: Ember.inject.service(\"a24-enums-candidate-profile\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objLookupService: null,\n\n        funcFilterCustomPrimaryQuery: function funcFilterCustomPrimaryQuery(objHeaderItem /* , objHeaderSecondaries */) {\n            var objQuery = null;\n\n            if (objHeaderItem._bEmptyEntriesOnly) {\n                objQuery = {\n                    bEncode: true,\n                    sFilterValue: \"empty\",\n                    mValue: \"null\"\n                };\n            } else {\n                objQuery = {\n                    bEncode: true,\n                    bAny: a24Core.isEmpty(objHeaderItem._objPortfolio),\n                    arSec: []\n                };\n\n                if (!a24Core.isEmpty(objHeaderItem._objPortfolio)) {\n                    objQuery.sFilterValue = objHeaderItem._objPortfolio.name;\n                    objQuery.mValue = objHeaderItem._objPortfolio._id;\n                }\n                if (!a24Core.isEmpty(objHeaderItem._objConsultantType)) {\n\n                    objQuery.arSec.push({\n                        \"sProp\": \"consultant_type_id\",\n                        \"sFilterValue\": objHeaderItem._objConsultantType.name,\n                        \"bEncode\": true,\n                        \"mValue\": objHeaderItem._objConsultantType._id\n                    });\n                }\n\n                if (!a24Core.isEmpty(objHeaderItem._objConsultant)) {\n                    objQuery.arSec.push({\n                        \"sProp\": \"consultant_id\",\n                        \"sFilterValue\": objHeaderItem._objConsultant.name,\n                        \"bEncode\": true,\n                        \"mValue\": objHeaderItem._objConsultant._id\n                    });\n                }\n\n                if (!a24Core.isEmpty(objHeaderItem._objPlayedKeyword)) {\n                    objQuery.arSec.push({\n                        \"sProp\": \"played_keywords\",\n                        \"sFilterValue\": objHeaderItem._objPlayedKeyword.sLabel,\n                        \"bEncode\": true,\n                        \"mValue\": objHeaderItem._objPlayedKeyword.sValue === this.get(\"_objCandidateProfileEnumsService.playedKeywords.PLAYED.backend\")\n                    });\n                }\n            }\n\n            return objQuery;\n        },\n\n        funcFilterCustomTag: function funcFilterCustomTag(objHeaderItem, objQuery, objHeadersSecondaries, bSkipTitle) {\n            if (objQuery.sFilterValue === \"empty\") {\n                if (bSkipTitle) {\n                    return {\n                        sTag: this.get(\"_objStringsService\").getString(\"isEmpty\")\n                    };\n                } else {\n                    return {\n                        sTag: this.get(\"_objCandidateProfileStringsService\").getString(\"externalPortfolioTagEmpty\")\n                    };\n                }\n            } else {\n                var sExternalPortfolioTagKey = bSkipTitle ? \"externalPortfolioTagNoTitle\" : \"externalPortfolioTag\";\n                var sPortfolioName = null;\n                var sIs = this.get(\"_objStringsService\").getString(\"is\").toLowerCase();\n\n                if (!a24Core.isEmpty(objQuery.sFilterValue)) {\n                    sPortfolioName = objQuery.sFilterValue;\n                } else {\n                    sPortfolioName = this.get(\"_objStringsService\").getString(\"any\");\n                }\n\n                var objConsultantTypeQuery = objQuery.arSec.findBy(\"sProp\", \"consultant_type_id\");\n\n                if (!a24Core.isEmpty(objConsultantTypeQuery)) {\n                    var sConsultantType = this.get(\"_objCandidateProfileStringsService\").getString(\"consultantType\");\n                    sPortfolioName = sPortfolioName + \", \" + sConsultantType + \" \" + sIs + \" \" + objConsultantTypeQuery.sFilterValue;\n                }\n\n                var objConsultantQuery = objQuery.arSec.findBy(\"sProp\", \"consultant_id\");\n\n                if (!a24Core.isEmpty(objConsultantQuery)) {\n                    var sConsultant = this.get(\"_objCandidateProfileStringsService\").getString(\"consultant\");\n                    sPortfolioName = sPortfolioName + \", \" + sConsultant + \" \" + sIs + \" \" + objConsultantQuery.sFilterValue;\n                }\n\n                var objPlayedKeywordQuery = objQuery.arSec.findBy(\"sProp\", \"played_keywords\");\n\n                if (!a24Core.isEmpty(objPlayedKeywordQuery)) {\n                    var sPlayedKeyword = this.get(\"_objCandidateProfileStringsService\").getString(\"keyword\");\n                    sPortfolioName = sPortfolioName + \", \" + sPlayedKeyword + \" \" + sIs + \" \" + objPlayedKeywordQuery.sFilterValue;\n                }\n\n                return {\n                    sTag: this.get(\"_objCandidateProfileStringsService\").getTokenString(sExternalPortfolioTagKey, sPortfolioName)\n                };\n            }\n        },\n\n        funcFilterCustomPrimaryReset: function funcFilterCustomPrimaryReset(objHeaderItem) {\n            //Reset the state of the custom filter input\n            Ember.set(objHeaderItem, \"_bEmptyEntriesOnly\", false);\n            Ember.set(objHeaderItem, \"_objPortfolio\", null);\n            Ember.set(objHeaderItem, \"_objConsultantType\", null);\n            Ember.set(objHeaderItem, \"_objConsultant\", null);\n            Ember.set(objHeaderItem, \"_objPlayedKeyword\", null);\n        },\n\n        funcFilterCustomFixupQuery: function funcFilterCustomFixupQuery() /* objHeader, objHeaderSecondaries */{},\n        funcFilterCustomSetEditState: function funcFilterCustomSetEditState(objHeaderItem, iIndex) {\n            var objTag = objHeaderItem.mFilterValue[iIndex];\n\n            Ember.set(objHeaderItem, \"_bEmptyEntriesOnly\", objTag.sFilterValue === \"empty\");\n\n            if (objTag.sFilterValue !== \"empty\") {\n                if (!a24Core.isEmpty(objTag.mValue) && !a24Core.isEmpty(objTag.sFilterValue)) {\n                    var objPortfolio = {\n                        name: objTag.sFilterValue,\n                        _id: objTag.mValue\n                    };\n\n                    Ember.set(objHeaderItem, \"_objPortfolio\", objPortfolio);\n                }\n\n                if (!a24Core.isEmpty(objTag.arSec)) {\n                    for (var i = 0; i < objTag.arSec.length; i++) {\n                        var objSecondary = objTag.arSec[i];\n\n                        if (objSecondary.sProp === \"consultant_type_id\") {\n                            var objConsultantType = {\n                                name: objSecondary.sFilterValue,\n                                _id: objSecondary.mValue\n                            };\n\n                            Ember.set(objHeaderItem, \"_objConsultantType\", objConsultantType);\n                        } else if (objSecondary.sProp === \"consultant_id\") {\n                            var objConsultant = {\n                                name: objSecondary.sFilterValue,\n                                _id: objSecondary.mValue\n                            };\n\n                            Ember.set(objHeaderItem, \"_objConsultant\", objConsultant);\n                        } else if (objSecondary.sProp === \"played_keywords\") {\n                            var objPlayedKeyword = {\n                                sLabel: objSecondary.sFilterValue\n                            };\n\n                            if (objSecondary.mValue === true) {\n                                objPlayedKeyword.sValue = this.get(\"_objCandidateProfileEnumsService.playedKeywords.PLAYED.backend\");\n                            } else {\n                                objPlayedKeyword.sValue = this.get(\"_objCandidateProfileEnumsService.playedKeywords.PAUSED.backend\");\n                            }\n\n                            Ember.set(objHeaderItem, \"_objPlayedKeyword\", objPlayedKeyword);\n                        }\n                    }\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/card-datagrid-custom-filter-candidate-position-held\", [\"exports\", \"a24-ember-lib/services/card-datagrid-filter-custom-base\"], function (exports, _cardDatagridFilterCustomBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _cardDatagridFilterCustomBase.default.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objCandidateProfileEnumsService: Ember.inject.service(\"a24-enums-candidate-profile\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n\n        _objJobTitleService: null,\n        funcFilterCustomPrimaryQuery: function funcFilterCustomPrimaryQuery(objHeaderItem /* , objHeaderSecondaries */) {\n            var objQuery = {\n                bEncode: true,\n                sFilterValue: objHeaderItem._objJobTitle.sJobFamilyName,\n                mValue: objHeaderItem._objJobTitle.sJobFamilyId,\n                arSec: [{\n                    \"sProp\": \"job_title_id\",\n                    \"sFilterValue\": objHeaderItem._objJobTitle.sTitleName,\n                    \"bEncode\": true,\n                    \"mValue\": objHeaderItem._objJobTitle.id\n                }]\n            };\n\n            if (!a24Core.isEmpty(objHeaderItem._objStatus) && !a24Core.isEmpty(objHeaderItem._objStatus.sValue)) {\n                objQuery.arSec.push({\n                    \"sProp\": \"work_suggestion_status\",\n                    \"bEncode\": true,\n                    \"mValue\": objHeaderItem._objStatus.sValue\n                });\n            }\n\n            if (!a24Core.isEmpty(objHeaderItem._objVerifiedStatus) && !a24Core.isEmpty(objHeaderItem._objVerifiedStatus.sValue)) {\n                objQuery.arSec.push({\n                    \"sProp\": \"status_name\",\n                    \"bEncode\": true,\n                    \"mValue\": objHeaderItem._objVerifiedStatus.sValue\n                });\n            }\n\n            if (objHeaderItem._objExperienceDuration.sValue === this.get(\"_objCandidateProfileEnumsService.experienceDuration.AT_LEAST.backend\")) {\n                if (!a24Core.isEmpty(objHeaderItem._objVerifiedStatus) && !a24Core.isEmpty(objHeaderItem._objVerifiedStatus.sValue)) {\n                    objQuery.arSec.push({\n                        \"sProp\": \"status_total_time\",\n                        \"bEncode\": true,\n                        \"bFrom\": true,\n                        \"mValue\": objHeaderItem._iNumberOfMonths * (30 * 86400),\n                        \"iNumberOfMonths\": objHeaderItem._iNumberOfMonths\n                    });\n                } else {\n                    objQuery.arSec.push({\n                        \"sProp\": \"overall_duration\",\n                        \"bEncode\": true,\n                        \"bFrom\": true,\n                        \"mValue\": objHeaderItem._iNumberOfMonths * (30 * 86400),\n                        \"iNumberOfMonths\": objHeaderItem._iNumberOfMonths\n                    });\n                }\n            } else if (objHeaderItem._objExperienceDuration.sValue === this.get(\"_objCandidateProfileEnumsService.experienceDuration.LAST.backend\")) {\n                var objDate = this.getDateForPastNumberOfMonths(objHeaderItem._iNumberOfMonths);\n\n                objQuery.arSec.push({\n                    \"sProp\": \"status_last_end_date\",\n                    \"bEncode\": true,\n                    \"bFrom\": true,\n                    \"mValue\": objDate.getDateStringForRest(),\n                    \"iNumberOfMonths\": objHeaderItem._iNumberOfMonths\n                });\n            }\n\n            return objQuery;\n        },\n\n        getDateForPastNumberOfMonths: function getDateForPastNumberOfMonths(iNumberOfMonths) {\n            var objDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n\n            objDate.subtractTimeFromDate(this.get(\"_objLibConstants.MOMENT_TIME_MONTHS\"), iNumberOfMonths);\n\n            objDate.setTimeToStartOfDay();\n\n            return objDate;\n        },\n\n        funcFilterCustomTag: function funcFilterCustomTag(objHeaderItem, objQuery, objHeadersSecondaries, bSkipTitle) {\n            var sPositionHeldTagKey = bSkipTitle ? \"positionHeldTagNoTitle\" : \"positionHeldTag\";\n\n            var sJobFamily = objQuery.sFilterValue;\n            var sJobTitle = objQuery.arSec[0].sFilterValue;\n            var sPeriod = \"\";\n            var sStatus = \"\";\n            var sVerifiedStatus = \"\";\n            var iNumberOfMonths = null;\n            var sMonth = this.get(\"_objCandidateProfileStringsService\").getString(\"months\");\n            var objExperienceDuration = this.get(\"_objCandidateProfileEnumsService.experienceDuration\");\n            var arrSeconderies = objQuery.arSec;\n            for (var i = 0; i < arrSeconderies.length; i++) {\n                iNumberOfMonths = arrSeconderies[i].iNumberOfMonths;\n                if (arrSeconderies[i].sProp === \"overall_duration\" || arrSeconderies[i].sProp === \"status_total_time\") {\n                    sPeriod = this.get(\"_objCandidateProfileStringsService\").getString(\"for\").toLowerCase() + \" \" + objExperienceDuration.AT_LEAST.frontend + \" \" + iNumberOfMonths;\n                } else if (arrSeconderies[i].sProp === \"status_last_end_date\") {\n                    sPeriod = this.get(\"_objCandidateProfileStringsService\").getString(\"inThe\").toLowerCase() + \" \" + objExperienceDuration.LAST.frontend + \" \" + iNumberOfMonths;\n                } else if (arrSeconderies[i].sProp === \"status_name\") {\n                    sVerifiedStatus = this.get(\"_objCandidateProfileStringsService\").getString(\"thatIs\").toLowerCase() + \" \" + this.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"positionHeldStatus\", arrSeconderies[i].mValue) + \" \";\n                } else if (arrSeconderies[i].sProp === \"work_suggestion_status\") {\n                    sStatus = \" \" + this.get(\"_objStringsService\").getString(\"and\").toLowerCase() + \" \" + this.get(\"_objCandidateProfileStringsService\").getString(\"workSuggest\") + \" \" + this.get(\"_objStringsService\").getString(\"is\").toLowerCase() + \" \" + this.get(\"_objCandidateProfileEnumsService\").getFrontendValue(\"positionHeldWorkSuggestStatus\", arrSeconderies[i].mValue);\n                } else {\n                    sPeriod = this.get(\"_objCandidateProfileStringsService\").getString(\"for\").toLowerCase() + \" \" + objExperienceDuration.ANY_AMOUNT_OF.frontend;\n                }\n\n                if (!a24Core.isEmpty(iNumberOfMonths) && iNumberOfMonths === 1) {\n                    sMonth = this.get(\"_objCandidateProfileStringsService\").getString(\"month\");\n                }\n            }\n\n            var sDuration = sVerifiedStatus + sPeriod.toLowerCase() + \" \" + sMonth.toLowerCase() + sStatus;\n\n            return {\n                sTag: this.get(\"_objCandidateProfileStringsService\").getTokenString(sPositionHeldTagKey, sJobFamily, sJobTitle, sDuration)\n            };\n        },\n\n        funcFilterCustomPrimaryReset: function funcFilterCustomPrimaryReset(objHeaderItem) {\n            //Reset the state of the custom filter input\n            Ember.set(objHeaderItem, \"_objJobTitle\", null);\n            Ember.set(objHeaderItem, \"_objExperienceDuration\", null);\n            Ember.set(objHeaderItem, \"_objVerifiedStatus\", null);\n            Ember.set(objHeaderItem, \"_iNumberOfMonths\", null);\n            Ember.set(objHeaderItem, \"_objStatus\", null);\n        },\n\n        funcFilterCustomFixupQuery: function funcFilterCustomFixupQuery(objHeader /*, objHeaderSecondaries */) {\n            if (a24Core.isEmpty(objHeader.mFilterValue)) {\n                return;\n            }\n            for (var i = 0; i < objHeader.mFilterValue.length; i++) {\n                var arrSeconderies = objHeader.mFilterValue[i].arSec;\n                for (var j = 0; j < arrSeconderies.length; j++) {\n                    if (arrSeconderies[j].sProp === \"status_last_end_date\") {\n                        Ember.set(objHeader, \"mFilterValue.\" + i + \".arSec.\" + j + \".mValue\", this.getDateForPastNumberOfMonths(arrSeconderies[j].iNumberOfMonths).getDateStringForRest());\n                    }\n                }\n            }\n        },\n        funcFilterCustomSetEditState: function funcFilterCustomSetEditState(objHeaderItem, iIndex) {\n            var objTag = objHeaderItem.mFilterValue[iIndex];\n\n            var objJobTitle = {\n                sJobFamilyId: objTag.mValue,\n                sJobFamilyName: objTag.sFilterValue\n            };\n\n            for (var i = 0; i < objTag.arSec.length; i++) {\n                var objSecondary = objTag.arSec[i];\n                if (objSecondary.sProp === \"job_title_id\") {\n                    objJobTitle.id = objSecondary.mValue;\n                    objJobTitle.sTitleName = objSecondary.sFilterValue;\n\n                    Ember.set(objHeaderItem, \"_objJobTitle\", objJobTitle);\n                } else if (objSecondary.sProp === \"overall_duration\") {\n                    Ember.set(objHeaderItem, \"_iNumberOfMonths\", objSecondary.iNumberOfMonths);\n                    Ember.set(objHeaderItem, \"_objExperienceDuration\", {\n                        sValue: this.get(\"_objCandidateProfileEnumsService.experienceDuration.AT_LEAST.backend\")\n                    });\n                } else if (objSecondary.sProp === \"status_total_time\") {\n                    Ember.set(objHeaderItem, \"_iNumberOfMonths\", objSecondary.iNumberOfMonths);\n                    Ember.set(objHeaderItem, \"_objExperienceDuration\", {\n                        sValue: this.get(\"_objCandidateProfileEnumsService.experienceDuration.AT_LEAST.backend\")\n                    });\n                } else if (objSecondary.sProp === \"status_last_end_date\") {\n                    Ember.set(objHeaderItem, \"_iNumberOfMonths\", objSecondary.iNumberOfMonths);\n                    Ember.set(objHeaderItem, \"_objExperienceDuration\", {\n                        sValue: this.get(\"_objCandidateProfileEnumsService.experienceDuration.LAST.backend\")\n                    });\n                } else if (objSecondary.sProp === \"status_name\") {\n                    Ember.set(objHeaderItem, \"_objVerifiedStatus\", {\n                        sValue: objSecondary.mValue\n                    });\n                } else if (objSecondary.sProp === \"work_suggestion_status\") {\n                    Ember.set(objHeaderItem, \"_objStatus\", {\n                        sValue: objSecondary.mValue\n                    });\n                }\n            }\n\n            if (a24Core.isEmpty(objHeaderItem._objExperienceDuration)) {\n                Ember.set(objHeaderItem, \"_objExperienceDuration\", {\n                    sValue: this.get(\"_objCandidateProfileEnumsService.experienceDuration.ANY_AMOUNT_OF.backend\")\n                });\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/card-datagrid-custom-filter-candidate-professional-registration\", [\"exports\", \"a24-ember-lib/services/card-datagrid-filter-custom-base\"], function (exports, _cardDatagridFilterCustomBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _cardDatagridFilterCustomBase.default.extend({\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objEnumEmberLibService: Ember.inject.service(\"a24-enums-ember-lib\"),\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objDatagridFitlerService: Ember.inject.service(\"card-datagrid-filter\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _arrRegistrationBodies: null,\n\n        funcFilterCustomPrimaryQuery: function funcFilterCustomPrimaryQuery() /*objHeaderItem , objHeaderSecondaries*/{\n            //Not being used due to filter being react now\n\n            // var objQuery = {\n            //     bEncode: true,\n            //     sFilterValue: objHeaderItem._objRegistrationBody.name,\n            //     mValue: objHeaderItem._objRegistrationBody._id,\n            //     arSec: []\n            // };\n            //\n            // if (!a24Core.isEmpty(objHeaderItem._objRegistrationBodyStatus)) {\n            //     objQuery.arSec.push({\n            //         \"sProp\": \"status_id\",\n            //         \"bEncode\": true,\n            //         \"mValue\": objHeaderItem._objRegistrationBodyStatus._id,\n            //         \"sFilterValue\": objHeaderItem._objRegistrationBodyStatus.name\n            //     });\n            // }\n            // if (!a24Core.isEmpty(objHeaderItem._objRegistrationBodyEntry)) {\n            //     objQuery.arSec.push({\n            //         \"sProp\": \"registration_body_entry_id\",\n            //         \"bEncode\": true,\n            //         \"mValue\": objHeaderItem._objRegistrationBodyEntry._id,\n            //         \"sFilterValue\": objHeaderItem._objRegistrationBodyEntry.name\n            //     });\n            // }\n            // if (!a24Core.isEmpty(objHeaderItem._objRegistrationBodyEntryStatus)) {\n            //     objQuery.arSec.push({\n            //         \"sProp\": \"registration_body_entry_status_id\",\n            //         \"bEncode\": true,\n            //         \"mValue\": objHeaderItem._objRegistrationBodyEntryStatus._id,\n            //         \"sFilterValue\": objHeaderItem._objRegistrationBodyEntryStatus.name\n            //     });\n            // }\n            //\n            // return objQuery;\n        },\n\n        funcFilterCustomTag: function funcFilterCustomTag(objHeaderItem, objQuery, objHeadersSecondaries, bSkipTitle) {\n            var sProfessionalRegistrationTagKey = \"\";\n\n            if (objHeaderItem.sProperty === \"registration_body_details___registration_body_id\") {\n                sProfessionalRegistrationTagKey = bSkipTitle ? \"professionalRegistrationTagNoTitle\" : \"professionalRegistrationTag\";\n            } else {\n                sProfessionalRegistrationTagKey = bSkipTitle ? \"professionalRegistrationEntryTagNoTitle\" : \"professionalRegistrationEntryTag\";\n            }\n\n            if (a24Core.isEmpty(objQuery.arSec)) {\n                objQuery.arSec = [];\n            }\n\n            var objRegistrationBodyStatus = objQuery.arSec.findBy(\"sProp\", \"status_id\");\n            var objRegistrationBodyEntry = objQuery.arSec.findBy(\"sProp\", \"registration_body_entry_id\");\n            var objRegistrationBodyEntryStatus = objQuery.arSec.findBy(\"sProp\", \"registration_body_entry_status_id\");\n            var objObtainedAt = objQuery.arSec.findBy(\"sProp\", \"obtained_at\");\n            var objExpiresAt = objQuery.arSec.findBy(\"sProp\", \"expires_at\");\n            var objValidAt = objQuery.arSec.findBy(\"sProp\", \"valid_at\");\n            var objStrings = this.get(\"_objStringsService\");\n            var objCandidateProfileStrings = this.get(\"_objCandidateProfileStringsService\");\n            var sIs = objStrings.getString(\"is\").toLowerCase();\n            var sTag = this.get(\"_objCandidateProfileStringsService\").getTokenString(sProfessionalRegistrationTagKey, objQuery.sFilterValue);\n            var sTagSimple = this.get(\"_objCandidateProfileStringsService\").getTokenString(sProfessionalRegistrationTagKey, objQuery.sFilterValue);\n            var bTagSimple = false;\n\n            if (!a24Core.isEmpty(objRegistrationBodyStatus)) {\n                var sDropMultiTagValue = null;\n\n                var arrFilterItems = objRegistrationBodyStatus.mValue.split(\"|\");\n                if (arrFilterItems.length === 1) {\n                    sDropMultiTagValue = objRegistrationBodyStatus.sFilterValue;\n                } else {\n                    sDropMultiTagValue = this.get(\"_objStringsService\").getString(\"multiple\");\n\n                    bTagSimple = true;\n                    //The if is just for backwards compatability with react, once react returns sFilterValueClean we should\n                    //only use that for the sTagSimple\n                    if (a24Core.isEmpty(objRegistrationBodyStatus.sFilterValueClean)) {\n                        sTagSimple += \", \" + objStrings.getString(\"status\") + \" \" + sIs + \" \" + sDropMultiTagValue;\n                    } else {\n                        sTagSimple += \", \" + objStrings.getString(\"status\") + \" \" + sIs + \" (\" + objRegistrationBodyStatus.sFilterValueClean + \")\";\n                    }\n                }\n                sTag += \", \" + objStrings.getString(\"status\") + \" \" + sIs + \" \" + sDropMultiTagValue;\n            }\n\n            if (!a24Core.isEmpty(objRegistrationBodyEntry)) {\n                sTag += \", \" + objCandidateProfileStrings.getString(\"entry\") + \" \" + objRegistrationBodyEntry.sFilterValue;\n                sTagSimple += \", \" + objCandidateProfileStrings.getString(\"entry\") + \" \" + objRegistrationBodyEntry.sFilterValue;\n            }\n\n            if (!a24Core.isEmpty(objRegistrationBodyEntryStatus)) {\n                sTag += \", \" + objCandidateProfileStrings.getString(\"entryStatus\") + \" \" + sIs + \" \" + objRegistrationBodyEntryStatus.sFilterValue;\n                sTagSimple += \", \" + objCandidateProfileStrings.getString(\"entryStatus\") + \" \" + sIs + \" \" + objRegistrationBodyEntryStatus.sFilterValue;\n            }\n\n            var arrHeaderSecondary = Ember.get(objHeadersSecondaries, \"arrFilterSecondary_\" + objHeaderItem.sProperty);\n\n            var objObtainedHeader = {};\n            var objValidHeader = {};\n            var objExpiresHeader = {};\n\n            for (var i = 0; i < arrHeaderSecondary.length; i++) {\n                if (arrHeaderSecondary[i].sProperty === \"obtained_at\") {\n                    objObtainedHeader = arrHeaderSecondary[i];\n                } else if (arrHeaderSecondary[i].sProperty === \"valid_at\") {\n                    objValidHeader = arrHeaderSecondary[i];\n                } else if (arrHeaderSecondary[i].sProperty === \"expires_at\") {\n                    objExpiresHeader = arrHeaderSecondary[i];\n                }\n            }\n            var objFromDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n            var objToDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n\n            if (!a24Core.isEmpty(objObtainedAt)) {\n                var sObtainFrom = \"\";\n                var sObtainTo = \"\";\n                if (objObtainedAt.bFrom || objObtainedAt.bAfter) {\n                    objFromDate.setDateFromRest(objObtainedAt.mValue, true);\n                    sObtainFrom = objFromDate.getDateStringForRest();\n                } else if (objObtainedAt.bTo) {\n                    objToDate.setDateFromRest(objObtainedAt.mValue, true);\n                    sObtainTo = objToDate.getDateStringForRest();\n                } else if (objObtainedAt.bFromAndTo || objObtainedAt.bNotWithinNext || objObtainedAt.bNotWithinLast) {\n                    objFromDate.setDateFromRest(objObtainedAt.mValue.sFrom, true);\n                    sObtainFrom = objFromDate.getDateStringForRest();\n                    objToDate.setDateFromRest(objObtainedAt.mValue.sTo, true);\n                    sObtainTo = objToDate.getDateStringForRest();\n                }\n                var objObtainedAtTag = this.get(\"_objDatagridFitlerService\").createDateQueryAndTag(objObtainedAt.sFilterValue, sObtainFrom, sObtainTo, objObtainedHeader, true);\n                sTag += \", \" + objObtainedAtTag.sTag;\n                sTagSimple += \", \" + objObtainedAtTag.sTag;\n            }\n            if (!a24Core.isEmpty(objValidAt)) {\n                var sValidFrom = \"\";\n                var sValidTo = \"\";\n                if (objValidAt.bFrom || objValidAt.bAfter) {\n                    objFromDate.setDateFromRest(objValidAt.mValue, true);\n                    sValidFrom = objFromDate.getDateStringForRest();\n                } else if (objValidAt.bTo) {\n                    objToDate.setDateFromRest(objValidAt.mValue, true);\n                    sValidTo = objToDate.getDateStringForRest();\n                } else if (objValidAt.bFromAndTo || objValidAt.bNotWithinNext || objValidAt.bNotWithinLast) {\n                    objFromDate.setDateFromRest(objValidAt.mValue.sFrom, true);\n                    sValidFrom = objFromDate.getDateStringForRest();\n                    objToDate.setDateFromRest(objValidAt.mValue.sTo, true);\n                    sValidTo = objToDate.getDateStringForRest();\n                }\n                var objValidAtTag = this.get(\"_objDatagridFitlerService\").createDateQueryAndTag(objValidAt.sFilterValue, sValidFrom, sValidTo, objValidHeader, true);\n                sTag += \", \" + objValidAtTag.sTag;\n                sTagSimple += \", \" + objValidAtTag.sTag;\n            }\n            if (!a24Core.isEmpty(objExpiresAt)) {\n                var sExpiresFrom = \"\";\n                var sExpiresTo = \"\";\n                if (objExpiresAt.bFrom || objExpiresAt.bAfter) {\n                    objFromDate.setDateFromRest(objExpiresAt.mValue, true);\n                    sExpiresFrom = objFromDate.getDateStringForRest();\n                } else if (objExpiresAt.bTo) {\n                    objToDate.setDateFromRest(objExpiresAt.mValue, true);\n                    sExpiresTo = objToDate.getDateStringForRest();\n                } else if (objExpiresAt.bFromAndTo || objExpiresAt.bNotWithinNext || objExpiresAt.bNotWithinLast) {\n                    objFromDate.setDateFromRest(objExpiresAt.mValue.sFrom, true);\n                    sExpiresFrom = objFromDate.getDateStringForRest();\n                    objToDate.setDateFromRest(objExpiresAt.mValue.sTo, true);\n                    sExpiresTo = objToDate.getDateStringForRest();\n                }\n                var objExpiresAtTag = this.get(\"_objDatagridFitlerService\").createDateQueryAndTag(objExpiresAt.sFilterValue, sExpiresFrom, sExpiresTo, objExpiresHeader, true);\n                if (objExpiresHeader.bTemporal) {\n\n                    if (objExpiresAt.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED.backend\") || objExpiresAt.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_AFTER.backend\")) {\n                        objExpiresAtTag.sTag = objExpiresAtTag.sTag.substring(objExpiresHeader.sTitle.length, objExpiresAtTag.sTag.length);\n                    }\n                    sTag += \", \" + objExpiresAtTag.sTag;\n                    sTagSimple += \", \" + objExpiresAtTag.sTag;\n                } else {\n                    sTag += \", \" + objExpiresAtTag.sTag;\n                    sTagSimple += \", \" + objExpiresAtTag.sTag;\n                }\n            }\n\n            var objReturn = {\n                sTag: sTag\n            };\n            if (bTagSimple) {\n                objReturn.sTagSimple = sTagSimple;\n            }\n\n            return objReturn;\n        },\n\n        funcFilterCustomPrimaryReset: function funcFilterCustomPrimaryReset() /*objHeaderItem*/{\n            //Not being used due to filter being react now\n\n            // //Reset the state of the custom filter input\n            // set(objHeaderItem, \"_objRegistrationBody\", null);\n            // set(objHeaderItem, \"_objRegistrationBodyStatus\", null);\n            // set(objHeaderItem, \"_objRegistrationBodyEntry\", null);\n            // set(objHeaderItem, \"_objRegistrationBodyEntryStatus\", null);\n        },\n\n        funcFilterCustomFixupQuery: function funcFilterCustomFixupQuery(objHeader, objHeaderSecondaries) {\n\n            for (var i = 0; i < objHeader.mFilterValue.length; i++) {\n                var arrSeconderies = objHeader.mFilterValue[i].arSec;\n                //Loop in reverse so that we can remove items from the array without index out of bounds\n                for (var j = arrSeconderies.length - 1; j >= 0; j--) {\n                    var objSecondaryHeader = null;\n                    var arrHeaderSecondary = Ember.get(objHeaderSecondaries, \"arrFilterSecondary_\" + objHeader.sProperty);\n                    for (var k = 0; k < arrHeaderSecondary.length; k++) {\n                        if (arrHeaderSecondary[k].sProperty === arrSeconderies[j].sProp) {\n                            objSecondaryHeader = arrHeaderSecondary[k];\n                            break;\n                        }\n                    }\n                    if (a24Core.isEmpty(objSecondaryHeader)) {\n                        Ember.get(objHeader, \"mFilterValue.\" + i + \".arSec\").removeAt(j);\n                    } else {\n                        if (arrSeconderies[j].sProp === \"expires_at\" || arrSeconderies[j].sProp === \"obtained_at\" || arrSeconderies[j].sProp === \"valid_at\") {\n                            if (!a24Core.isEmpty(arrSeconderies[j].sFilterValue) && arrSeconderies[j].sFilterValue !== this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_CUSTOM_RANGE.backend\")) {\n                                var objFromDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                                var objToDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n\n                                var sFrom = \"\";\n                                var sTo = \"\";\n\n                                if (objSecondaryHeader.bTemporal) {\n                                    if (arrSeconderies[j].bFromAndTo) {\n                                        objFromDate.setDateFromRest(arrSeconderies[j].mValue.sFrom, true);\n                                        objToDate.setDateFromRest(arrSeconderies[j].mValue.sTo, true);\n                                        sFrom = objFromDate.getDateStringForRest();\n                                        sTo = objToDate.getDateStringForRest();\n                                    } else if (arrSeconderies[j].bFrom || arrSeconderies[j].bAfter) {\n                                        objFromDate.setDateFromRest(arrSeconderies[j].mValue, true);\n                                        sFrom = objFromDate.getDateStringForRest();\n                                    } else if (arrSeconderies[j].bTo) {\n                                        objToDate.setDateFromRest(arrSeconderies[j].mValue, true);\n                                        sTo = objToDate.getDateStringForRest();\n                                    }\n                                } else {\n                                    objFromDate.setDateFromRest(arrSeconderies[j].mValue.sFrom, true);\n                                    objToDate.setDateFromRest(arrSeconderies[j].mValue.sTo, true);\n                                    sFrom = objFromDate.getDateStringForRest();\n                                    sTo = objToDate.getDateStringForRest();\n                                }\n\n                                var objQueryAndTag = this.get(\"_objDatagridFitlerService\").createDateQueryAndTag(arrSeconderies[j].sFilterValue, sFrom, sTo, objSecondaryHeader, true);\n\n                                if (a24Core.isEmpty(objQueryAndTag.objQuery)) {\n                                    Ember.get(objHeader, \"mFilterValue.\" + i + \".arSec\").removeAt(j);\n                                } else {\n                                    if (objQueryAndTag.objQuery.bFrom || objQueryAndTag.objQuery.bAfter) {\n                                        objFromDate.setDateFromBrowser(objQueryAndTag.objQuery.mValue, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                                        objQueryAndTag.objQuery.mValue = objFromDate.getDateStringForRest(true);\n                                    } else if (objQueryAndTag.objQuery.bTo) {\n                                        objFromDate.setDateFromBrowser(objQueryAndTag.objQuery.mValue, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                                        objQueryAndTag.objQuery.mValue = objToDate.getDateStringForRest(true);\n                                    } else if (objQueryAndTag.objQuery.bFromAndTo || objQueryAndTag.objQuery.bNotWithinNext || objQueryAndTag.objQuery.bNotWithinLast) {\n                                        objFromDate.setDateFromBrowser(objQueryAndTag.objQuery.mValue.sFrom, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                                        objToDate.setDateFromBrowser(objQueryAndTag.objQuery.mValue.sTo, this.get(\"_objLibConstants.DATE_FORMAT\"));\n\n                                        objQueryAndTag.objQuery.mValue = {\n                                            sFrom: objFromDate.getDateStringForRest(true),\n                                            sTo: objToDate.getDateStringForRest(true)\n                                        };\n                                    }\n                                    Ember.set(objHeader, \"mFilterValue.\" + i + \".arSec.\" + j + \".mValue\", objQueryAndTag.objQuery.mValue);\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        },\n\n        funcFilterCustomSetEditState: function funcFilterCustomSetEditState() /*objHeaderItem, iIndex*/{\n            //Not being used due to filter being react now\n\n            // var objTag = objHeaderItem.mFilterValue[iIndex];\n            //\n            // set(objHeaderItem, \"_objRegistrationBody\", {\n            //     _id: objTag.mValue,\n            //     name: objTag.sFilterValue\n            // });\n            //\n            // for (var i = 0; i < objTag.arSec.length; i++) {\n            //     var objSecondary = objTag.arSec[i];\n            //\n            //     if (objSecondary.sProp === \"status_id\") {\n            //         set(objHeaderItem, \"_objRegistrationBodyStatus\", {\n            //             _id: objSecondary.mValue,\n            //             name: objSecondary.sFilterValue\n            //         });\n            //     } else if (objSecondary.sProp === \"registration_body_entry_id\") {\n            //         set(objHeaderItem, \"_objRegistrationBodyEntry\", {\n            //             _id: objSecondary.mValue,\n            //             name: objSecondary.sFilterValue\n            //         });\n            //     } else if (objSecondary.sProp === \"registration_body_entry_status_id\") {\n            //         set(objHeaderItem, \"_objRegistrationBodyEntryStatus\", {\n            //             _id: objSecondary.mValue,\n            //             name: objSecondary.sFilterValue\n            //         });\n            //     }\n            // }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/card-datagrid-custom-filter-consultant-role\", [\"exports\", \"a24-ember-lib/services/card-datagrid-filter-custom-base\"], function (exports, _cardDatagridFilterCustomBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _cardDatagridFilterCustomBase.default.extend({\n\n        _objCandidateProfileStringsService: Ember.inject.service(\"a24-strings-candidate-profile\"),\n        _objEmberLibStringService: Ember.inject.service(\"a24-strings-ember-lib\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n\n        funcFilterCustomPrimaryQuery: function funcFilterCustomPrimaryQuery(objHeaderItem /*, objHeaderSecondaries*/) {\n            var objQuery = {};\n            if (a24Core.isEmpty(objHeaderItem._objSelectedQueryType)) {\n                objQuery = {\n                    bEncode: true,\n                    sFilterValue: objHeaderItem._objConsultantRole.sTitle,\n                    mValue: objHeaderItem._objConsultantRole.sValue\n                };\n                if (!a24Core.isEmpty(objHeaderItem._objConsultant)) {\n                    var sSecondaryProperty = \"user_name\";\n                    var sSecondaryValueProperty = \"name\";\n                    if (!a24Core.isEmpty(objHeaderItem.sSecondaryProperty)) {\n                        sSecondaryProperty = objHeaderItem.sSecondaryProperty;\n                    }\n                    if (!a24Core.isEmpty(objHeaderItem.sSecondaryValueProperty)) {\n                        sSecondaryValueProperty = objHeaderItem.sSecondaryValueProperty;\n                    }\n\n                    objQuery.arSec = [{\n                        sProp: sSecondaryProperty,\n                        sFilterValue: objHeaderItem._objConsultant.name,\n                        bEncode: true,\n                        mValue: objHeaderItem._objConsultant[sSecondaryValueProperty]\n                    }];\n                }\n            } else {\n                objQuery = {\n                    bEncode: true,\n                    sFilterValue: objHeaderItem._objConsultantRole.sTitle,\n                    mValue: objHeaderItem._objConsultantRole.sValue,\n                    bDelimitedNot: true\n                };\n            }\n\n            if (objHeaderItem._objConsultantRole.sValue === \"*\") {\n                objQuery.bAny = true;\n            }\n\n            return objQuery;\n        },\n        funcFilterCustomTag: function funcFilterCustomTag(objHeaderItem, objQuery, objHeadersSecondaries, bSkipTitle) {\n            var sConsultantRoleTagKey = \"consultantRoleTag\";\n            var sTag = \"\";\n            var bIs = true;\n\n            if (bSkipTitle) {\n                sConsultantRoleTagKey = \"consultantRoleTagNoTitle\";\n            }\n\n            if (!a24Core.isEmpty(objQuery.bDelimitedNot)) {\n                bIs = false;\n            }\n\n            sTag += this.get(\"_objCandidateProfileStringsService\").getTokenString(sConsultantRoleTagKey, bIs ? this.get(\"_objStringsService\").getString(\"is\") : this.get(\"_objStringsService\").getString(\"isNot\"), objQuery.sFilterValue);\n            if (!a24Core.isEmpty(objQuery.arSec)) {\n                sTag += this.get(\"_objCandidateProfileStringsService\").getTokenString(\"consultantTag\", objQuery.arSec[0].sFilterValue);\n            }\n            return {\n                sTag: sTag\n            };\n        },\n        funcFilterCustomPrimaryReset: function funcFilterCustomPrimaryReset(objHeaderItem) {\n            Ember.set(objHeaderItem, \"_objConsultant\", null);\n            Ember.set(objHeaderItem, \"_objConsultantRole\", null);\n        },\n\n        funcFilterCustomFixupQuery: function funcFilterCustomFixupQuery() /*objHeader, objHeaderSecondaries*/{},\n\n        funcFilterCustomSetEditState: function funcFilterCustomSetEditState(objHeaderItem, iIndex) {\n            var objHeaderTag = objHeaderItem.mFilterValue[iIndex];\n\n            Ember.set(objHeaderItem, \"_objConsultantRole\", {\n                sValue: objHeaderTag.mValue,\n                sTitle: objHeaderTag.sFilterValue\n            });\n\n            if (!a24Core.isEmpty(objHeaderTag.arSec)) {\n                var objConsultant = {\n                    name: objHeaderTag.arSec[0].sFilterValue\n                };\n\n                if (!a24Core.isEmpty(objHeaderItem.sSecondaryValueProperty)) {\n                    var sSecondaryValueProperty = objHeaderItem.sSecondaryValueProperty;\n                    objConsultant[sSecondaryValueProperty] = objHeaderTag.arSec[0].mValue;\n                }\n                Ember.set(objHeaderItem, \"_objConsultant\", objConsultant);\n            }\n\n            if (objHeaderTag.bDelimitedNot) {\n                Ember.set(objHeaderItem, \"_objSelectedQueryType\", {\n                    sValue: \"is_not\"\n                });\n            } else {\n                Ember.set(objHeaderItem, \"_objSelectedQueryType\", null);\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-advanced-search-activity-type\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n        },\n\n        /**\n         * Performs a single candidate activities ajax call\n         *\n         * @param objContext - The the caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objQueryParams - Any extra query params for the get list\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  15 April 2019\n         */\n        getActivityTypes: function getActivityTypes(objContext, sProperty, funcSuccess, objFailure, objQueryParams) {\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/advanced-search/activity-type\");\n\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", Ember.get(this, \"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-activity-conversation\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Route for agency group candidate activity conversation\n         *\n         * @param objContext - The object on which the property must exist\n         * @param sProperty - The Property name to get the promise object\n         * @param sSubjectId - The id of the subject\n         * @param sSubjectType - The type of the subject\n         * @param sActivityId - The activity id\n         * @param sConversationId - The conversation id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  13 January 2020\n         */\n        getActivityConversation: function getActivityConversation(objContext, sProperty, sSubjectId, sSubjectType, sActivityId, sConversationId, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/\" + sSubjectType + \"/\" + sSubjectId + \"/activity/\" + sActivityId + \"/conversation/\" + sConversationId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-activity-email-communication-message\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Route for agency group candidate activity email message\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sSubjectId - The id of the subject\n         * @param sSubjectType - The type of the subject\n         * @param sActivityId - The activity id\n         * @param sEmailCommMessageId - The email communication message id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  17 April 2019\n         */\n        getEmailCommMessage: function getEmailCommMessage(objContext, sProperty, sSubjectId, sSubjectType, sActivityId, sEmailCommMessageId, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/\" + sSubjectType + \"/\" + sSubjectId + \"/activity/\" + sActivityId + \"/email-communication-message/\" + sEmailCommMessageId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-activity-notification\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Route for agency candidate activity notification\n         *\n         * @param objContext - The object on which the property must exist\n         * @param sProperty - The Property name to get the promise object\n         * @param sSubjectId - The id of the subject\n         * @param sSubjectType - The type of the subject\n         * @param sActivityId - The activity id\n         * @param sNotificationId - The notification id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  29 May 2020\n         */\n        getActivityNotification: function getActivityNotification(objContext, sProperty, sSubjectId, sSubjectType, sActivityId, sNotificationId, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/\" + sSubjectType + \"/\" + sSubjectId + \"/activity/\" + sActivityId + \"/candidate-notification/\" + sNotificationId);\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Route for agency candidate activity notification\n         *\n         * @param objContext - The object on which the property must exist\n         * @param sProperty - The Property name to get the promise object\n         * @param sSubjectId - The candidate id\n         * @param sSubjectType - The candidate id\n         * @param sActivityId - The activity id\n         * @param sNotificationId - The notification id\n         * @param sMedium - The medium\n         * @param sNotificationSentId - The notification sent id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  29 May 2020\n         */\n        getActivityNotificationFromMedium: function getActivityNotificationFromMedium(objContext, sProperty, sSubjectId, sSubjectType, sActivityId, sNotificationId, sMedium, sNotificationSentId, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/\" + sSubjectType + \"/\" + sSubjectId + \"/activity/\" + sActivityId + \"/candidate-notification/\" + sNotificationId + \"/\" + sMedium + \"/\" + sNotificationSentId);\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-autocomplete\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Returns a list for autocomplete for agency\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param objQuery - The query params object\n         * @param sField - The autocomplete field\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  9 August 2021\n         */\n        _getAutocomplete: function _getAutocomplete(objContext, sProperty, objQuery, sField, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency/\" + sAgencyId + \"/autocomplete/\" + sField);\n\n            a24RestUrlConstruct.addQueryParamObject(objQuery);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Returns a list of counties for agency\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param objQuery - The query params object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  9 August 2021\n         */\n        getCounties: function getCounties(objContext, sProperty, objQuery, funcSuccess, objFailure) {\n            return this._getAutocomplete(objContext, sProperty, objQuery, \"county\", funcSuccess, objFailure);\n        },\n\n        /**\n         * Returns a list of cities for agency\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param objQuery - The query params object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  9 August 2021\n         */\n        getCities: function getCities(objContext, sProperty, objQuery, funcSuccess, objFailure) {\n            return this._getAutocomplete(objContext, sProperty, objQuery, \"city\", funcSuccess, objFailure);\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-candidate-activity\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        /*\n          Services\n        */\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY\"));\n        },\n\n        /*\n          Functions\n        */\n\n        /**\n         * Performs a single candidate activities ajax call\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch activities data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objQueryParams - Any extra query params for the get list\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  17 April 2019\n         */\n        getActivities: function getActivities(objContext, sProperty, sCandidateId, funcSuccess, objFailure, objQueryParams) {\n            var sAgency = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgency + \"/candidate/\" + sCandidateId + \"/activity\");\n\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", Ember.get(this, \"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Create a new activity for a candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param objData - The activity data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  17 April 2019\n         */\n        createActivity: function createActivity(objContext, sProperty, sCandidateId, objData, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/activity\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-candidate-address-details\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        sContext: null,\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY\"));\n        },\n\n        /**\n         * Retrieves all address details entries for the candidate\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  27 April 2018\n         */\n        getAddressDetails: function getAddressDetails(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/address-details\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Creates an address details entry for the candidate\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param objData - The candidate address details data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  27 April 2018\n         */\n        createAddressDetails: function createAddressDetails(objContext, sProperty, sCandidateId, objData, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/address-details\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Updates an address details entry for the candidate\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param sAddressDetailsId - The address details id\n         * @param objData - The candidate address details data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  27 April 2018\n         */\n        updateAddressDetails: function updateAddressDetails(objContext, sProperty, sCandidateId, sAddressDetailsId, objData, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/address-details/\" + sAddressDetailsId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Updates an geo location of an address details entry for the candidate\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param sAddressDetailsId - The address details id\n         * @param objData - The candidate address details data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johaannes.vanwyk@a24group.com>\n         * @since  03 August 2020\n         */\n        updateGeoLocation: function updateGeoLocation(objContext, sProperty, sCandidateId, sAddressDetailsId, objData, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/address-details/\" + sAddressDetailsId + \"/location\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Deletes an address details entry for the candidate\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param sAddressDetailsId - The address details id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  27 April 2018\n         */\n        deleteAddressDetails: function deleteAddressDetails(objContext, sProperty, sCandidateId, sAddressDetailsId, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/address-details/\" + sAddressDetailsId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"DELETE\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-candidate-basic-info\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        sContext: null,\n\n        // Stores the last retrieved candidates details.\n        // This is cleared each time a new candidate profile page is loaded(page-agency-candidate-view.js)\n        objLastCandidateDetails: null,\n\n        /*\n          Services\n        */\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY\"));\n        },\n\n        /*\n          Functions\n        */\n        /**\n         * Performs a single agency basic info ajax call\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch basic info data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  09 March 2018\n         */\n        getBasicInfo: function getBasicInfo(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n            var objThis = this;\n            var funcSuccessWrapper = function funcSuccessWrapper(objData) {\n                objThis.set(\"objLastCandidateDetails\", objData);\n                funcSuccess.apply(undefined, arguments);\n            };\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/basic-info\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", Ember.get(this, \"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccessWrapper, objFailure));\n        },\n\n        /**\n         * Update contact number for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param objData - The contact number data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  15 May 2018\n         */\n        updateBasicInfo: function updateBasicInfo(objContext, sProperty, sCandidateId, objData, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/basic-info\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-candidate-contact-numbers\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Retrieves all contact number entries for the candidate\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  04 April 2018\n         */\n        getContactNumbers: function getContactNumbers(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/contact-numbers\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Creates a contact number entry for the candidate\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param objData - The candidate contact number data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  04 April 2018\n         */\n        createContactNumber: function createContactNumber(objContext, sProperty, sCandidateId, objData, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/contact-numbers\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Update contact number for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param sContantNumberId - The contact number id\n         * @param objData - The contact number data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  11 May 2018\n         */\n        updateContactNumber: function updateContactNumber(objContext, sProperty, sCandidateId, sContantNumberId, objData, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/contact-numbers/\" + sContantNumberId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Deletes a contact number entry for the candidate\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param sContactNumberId - The contact number id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  04 April 2018\n         */\n        deleteContactNumber: function deleteContactNumber(objContext, sProperty, sCandidateId, sContactNumberId, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/contact-numbers/\" + sContactNumberId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"DELETE\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-candidate-emails\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n        sContext: null,\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY\"));\n        },\n\n        /**\n         * Retrieves all email entries for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch basic info data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  31 July 2018\n         */\n        getEmails: function getEmails(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/email\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Creates a email entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param objData - The candidate email data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  31 July 2018\n         */\n        createEmail: function createEmail(objContext, sProperty, sCandidateId, objData, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/email\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Takes action on a email entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param sEmailId - The email id\n         * @param sAction - The action to perform\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  31 July 2018\n         */\n        actionEmail: function actionEmail(objContext, sProperty, sCandidateId, sEmailId, sAction, funcSuccess, objFailure) {\n\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            var objData = {\n                \"action\": sAction\n            };\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/email/\" + sEmailId + \"/action\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Deletes a email entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch basic info data for\n         * @param sEmailId - The email id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  31 July 2018\n         */\n        deleteEmail: function deleteEmail(objContext, sProperty, sCandidateId, sEmailId, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/email/\" + sEmailId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"DELETE\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-candidate-employment-dismissals\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY\"));\n        },\n\n        /**\n         * Retrieves all employment dismissal entries for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  9 August 2019\n         */\n        getEmploymentDismissals: function getEmploymentDismissals(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/employment-dismissals\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-candidate-equality\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Retrieves all equality entries for the agency candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  09 March 2018\n         */\n        getEquality: function getEquality(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/equality\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Creates a equality entry for the agency candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch basic info data for\n         * @param objData - The agency candidate equality data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  09 March 2018\n         */\n        updateEquality: function updateEquality(objContext, sProperty, sCandidateId, objData, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/equality\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-candidate-languages\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Retrieves all language entries for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  22 March 2018\n         */\n        getLanguages: function getLanguages(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/languages\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Creates a languages entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param objData - The candidate languages data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  02 March 2018\n         */\n        createLanguage: function createLanguage(objContext, sProperty, sCandidateId, objData, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/languages\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Edit a language entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param sLanguageId - The language id\n         * @param objData - The candidate language data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ruan Naude <runa.naude@a24group.com>\n         * @since  05 April 2018\n         */\n        editLanguage: function editLanguage(objContext, sProperty, sCandidateId, sLanguageId, objData, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/languages/\" + sLanguageId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Deletes a languages entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param sLanguageId - The languages id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  22 March 2018\n         */\n        deleteLanguage: function deleteLanguage(objContext, sProperty, sCandidateId, sLanguageId, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/languages/\" + sLanguageId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"DELETE\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-candidate-meta\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Performs a single candidate meta info ajax call\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch meta info data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  31 October 2019\n         */\n        getCandidateMeta: function getCandidateMeta(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/meta\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", Ember.get(this, \"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-candidate-misc-details\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        /*\n         * Services\n         */\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /*\n         * Functions\n         */\n        /**\n         * Performs a single agency candidate misc details GET ajax call\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch misc details data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  03 May 2018\n         */\n        getMiscDetails: function getMiscDetails(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/misc\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n        /**\n         * Performs a single agency candidate misc details PUT ajax call\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to update misc details for\n         * @param objPayload - The payload for the misc details\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  03 May 2018\n         */\n        updateMiscDetails: function updateMiscDetails(objContext, sProperty, sCandidateId, objPayload, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/misc\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objPayload));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-candidate-next-of-kin\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Retrieves all next of kin entries for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  22 March 2018\n         */\n        getNextOfKins: function getNextOfKins(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/next-of-kin\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Creates a next of kin entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param objData - The candidate next of kin data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  22 March 2018\n         */\n        createNextOfKin: function createNextOfKin(objContext, sProperty, sCandidateId, objData, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/next-of-kin\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Deletes a next of kin entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param sNextOfKinId - The next of kin id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  22 March 2018\n         */\n        deleteNextOfKin: function deleteNextOfKin(objContext, sProperty, sCandidateId, sNextOfKinId, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/next-of-kin/\" + sNextOfKinId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"DELETE\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Updates a next of kin entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch basic info data for\n         * @param sNextOfKinId - The next of kin id\n         * @param objData - The candidate next of kin data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  05 April 2018\n         */\n        updateNextOfKin: function updateNextOfKin(objContext, sProperty, sCandidateId, sNextOfKinId, objData, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/next-of-kin/\" + sNextOfKinId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-candidate-notifications\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n        sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        /**\n         * Route for sending an agency notification to a candidate\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The property name to get the promise object\n         * @param sCandidateId - The candidate id of candidate to send to\n         * @param objData - The data for the notification\n         * @param funcSuccess - The success function\n         * @param objFailure - The object that will deal with failed service calls\n          * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  04 September 2020\n         */\n        sendNotification: function sendNotification(objContext, sProperty, sCandidateId, objData, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/notifications\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-candidate-other-names\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Retrieves other names for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  22 March 2018\n         */\n        getOtherNames: function getOtherNames(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/other-names\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Update other names for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param objData - The candidate other names data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  22 March 2018\n         */\n        updateOtherNames: function updateOtherNames(objContext, sProperty, sCandidateId, objData, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/other-names\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-candidate-qualifications\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n        sContext: null,\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY\"));\n        },\n\n        /**\n         * Retrieves all qualifications for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch qualifications data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objQueryParams (Optional) - The query params to filter on for qualifications\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  29 May 2019\n         */\n        getQualifications: function getQualifications(objContext, sProperty, sCandidateId, funcSuccess, objFailure, objQueryParams) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/qualifications\");\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, null, null, true));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-candidate-settings\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        objSettings: null,\n\n        /*\n          Services\n        */\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /*\n          Functions\n        */\n        /**\n         * Performs a single agency settings ajax call\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  26 November 2018\n         */\n        getSettings: function getSettings(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/settings\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", Ember.get(this, \"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-candidate-skills\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n        sContext: null,\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY\"));\n        },\n\n        /**\n         * Retrieves all skills for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch skills data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objQueryParams (Optional) - The query params to filter on for skills\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  14 May 2019\n         */\n        getSkills: function getSkills(objContext, sProperty, sCandidateId, funcSuccess, objFailure, objQueryParams) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/skills\");\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, null, null, true));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-candidate-status\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        sContext: null,\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY\"));\n        },\n\n        /**\n         * Retrieves the agency candidate status list\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The Candidate Id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objQueryParams (Optional) - The candidate status \n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  17 August 2018\n         */\n        getCandidateStatus: function getCandidateStatus(objContext, sProperty, sCandidateId, funcSuccess, objFailure, objQueryParams) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/status\");\n\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Retrieves the current agency candidate status\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The Candidate Id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  17 August 2018\n         */\n        getCandidateCurrentStatus: function getCandidateCurrentStatus(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/status/current\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Retrieves the current agency candidate status summary\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The Candidate Id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  01 November 2018\n         */\n        getCandidateStatusSummary: function getCandidateStatusSummary(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/status/summary\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-candidate-type\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objAgencyCandidateTypesResponse: null,\n        _sLastAgencyId: null,\n        sContext: null,\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY\"));\n        },\n\n        /**\n         * Retrieves the agency group candidate type list\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sAgencyId - The agency id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  23 Oct 2018\n         */\n        getCandidateTypes: function getCandidateTypes(objCaller, sProperty, sAgencyId, funcSuccess, objFailure) {\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate-type\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                name: {\n                    bSortBy: true,\n                    mValue: \"asc\"\n                }\n            });\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n            var objThis = this;\n            var funcSuccessWrapper = function funcSuccessWrapper(objData) {\n                objThis.set(\"_objAgencyCandidateTypesResponse\", objData);\n                funcSuccess.apply(undefined, arguments);\n            };\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccessWrapper, objFailure));\n        },\n\n        /**\n         * Retrieves the agency group candidate type list with page cache\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sAgencyId - The agency id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ruan Naude <ruan.naude@a24group.com>\n         * @since  06 Sep 2021\n         */\n        getCandidateTypesCached: function getCandidateTypesCached(objCaller, sProperty, sAgencyId, funcSuccess, objFailure) {\n            var _this = this;\n\n            if (this.get(\"_sLastAgencyId\") === sAgencyId && !a24Core.isEmpty(this.get(\"_objAgencyCandidateTypesResponse\"))) {\n                return new Ember.RSVP.Promise(function (funcResolve) {\n                    funcSuccess(Ember.copy(_this.get(\"_objAgencyCandidateTypesResponse\"), true));\n                    funcResolve(Ember.copy(_this.get(\"_objAgencyCandidateTypesResponse\"), true));\n                });\n            } else {\n                this.set(\"_sLastAgencyId\", sAgencyId);\n                return this.getCandidateTypes(objCaller, sProperty, sAgencyId, funcSuccess, objFailure);\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-consultant-role\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        sContext: null,\n        sRestClientApiBaseUrl: Ember.computed.readOnly(\"env.sClientApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY\"));\n        },\n\n        /**\n         * Retrieves the agency consultant roles\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  14 October 2021\n         */\n        getConsultantRoles: function getConsultantRoles(objContext, sProperty, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/consultant-roles\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                },\n                sortBy: {\n                    mValue: \"name\"\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestClientApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-global-search\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Makes a service call to do a global search using the query object provided\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param objData - The query object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objQueryParams (Optional) - The query params to filter on \n         *\n         * @author Deon De Wet<deon.dewet@a24group.com>\n         * @since  14 Jan 2022\n         */\n        search: function search(objContext, sProperty, objData, funcSuccess, objFailure, objQueryParams) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency/\" + sAgencyId + \"/global-search-suggestions\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 10\n                }\n            });\n\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-activity-conversation\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Route for agency group candidate activity conversation\n         *\n         * @param objContext - The object on which the property must exist\n         * @param sProperty - The Property name to get the promise object\n         * @param sSubjectId - The id of the subject\n         * @param sSubjectType - The type of the subject\n         * @param sActivityId - The activity id\n         * @param sConversationId - The conversation id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  13 January 2020\n         */\n        getActivityConversation: function getActivityConversation(objContext, sProperty, sSubjectId, sSubjectType, sActivityId, sConversationId, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/\" + sSubjectType + \"/\" + sSubjectId + \"/activity/\" + sActivityId + \"/conversation/\" + sConversationId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-activity-email-communication-message\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Route for agency group candidate activity email message\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sSubjectId - The id of the subject\n         * @param sSubjectType - The type of the subject\n         * @param sActivityId - The activity id\n         * @param sEmailCommMessageId - The email communication message id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  25 Febuary 2019\n         */\n        getEmailCommMessage: function getEmailCommMessage(objContext, sProperty, sSubjectId, sSubjectType, sActivityId, sEmailCommMessageId, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/\" + sSubjectType + \"/\" + sSubjectId + \"/activity/\" + sActivityId + \"/email-communication-message/\" + sEmailCommMessageId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-activity-notification\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Route for agency candidate activity notification\n         *\n         * @param objContext - The object on which the property must exist\n         * @param sProperty - The Property name to get the promise object\n         * @param sSubjectId - The id of the subject\n         * @param sSubjectType - The type of the subject\n         * @param sActivityId - The activity id\n         * @param sNotificationId - The notification id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  29 May 2020\n         */\n        getActivityNotification: function getActivityNotification(objContext, sProperty, sSubjectId, sSubjectType, sActivityId, sNotificationId, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/\" + sSubjectType + \"/\" + sSubjectId + \"/activity/\" + sActivityId + \"/candidate-notification/\" + sNotificationId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Route for agency candidate activity notification\n         *\n         * @param objContext - The object on which the property must exist\n         * @param sProperty - The Property name to get the promise object\n         * @param sSubjectId - The id of the subject\n         * @param sSubjectType - The type of the subject\n         * @param sActivityId - The activity id\n         * @param sNotificationId - The notification id\n         * @param sMedium - The medium\n         * @param sNotificationSentId - The notification sent id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  29 May 2020\n         */\n        getActivityNotificationFromMedium: function getActivityNotificationFromMedium(objContext, sProperty, sSubjectId, sSubjectType, sActivityId, sNotificationId, sMedium, sNotificationSentId, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/\" + sSubjectType + \"/\" + sSubjectId + \"/activity/\" + sActivityId + \"/candidate-notification/\" + sNotificationId + \"/\" + sMedium + \"/\" + sNotificationSentId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-autocomplete\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Returns a list for autocomplete for agency group\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param objQuery - The query params object\n         * @param sField - The autocomplete field\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  9 August 2021\n         */\n        _getAutocomplete: function _getAutocomplete(objContext, sProperty, objQuery, sField, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency-group/\" + sAgencyGroupId + \"/autocomplete/\" + sField);\n\n            a24RestUrlConstruct.addQueryParamObject(objQuery);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Returns a list of counties for agency group\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param objQuery - The query params object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  9 August 2021\n         */\n        getCounties: function getCounties(objContext, sProperty, objQuery, funcSuccess, objFailure) {\n            return this._getAutocomplete(objContext, sProperty, objQuery, \"county\", funcSuccess, objFailure);\n        },\n\n        /**\n         * Returns a list of cities for agency group\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param objQuery - The query params object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  9 August 2021\n         */\n        getCities: function getCities(objContext, sProperty, objQuery, funcSuccess, objFailure) {\n            return this._getAutocomplete(objContext, sProperty, objQuery, \"city\", funcSuccess, objFailure);\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-candidate-activity\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        /*\n          Services\n        */\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\"));\n        },\n\n        /*\n          Functions\n        */\n\n        /**\n         * Performs a single candidate activities ajax call\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch activities data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objQueryParams - Any extra query params for the get list\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  05 September 2018\n         */\n        getActivities: function getActivities(objContext, sProperty, sCandidateId, funcSuccess, objFailure, objQueryParams) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/activity\");\n\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", Ember.get(this, \"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Create a new activity for a candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param objData - The activity data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  05 September 2018\n         */\n        createActivity: function createActivity(objContext, sProperty, sCandidateId, objData, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/activity\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-candidate-advanced-search\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n        },\n\n        /**\n         * Performs a the advanced search for a candidate\n         *\n         * @param objContext - The the caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - candidate id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  22 August 2019\n         */\n        searchCandidate: function searchCandidate(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            var objQuery = {\n                \"page\": 1,\n                \"items_per_page\": 1,\n                \"project\": {\n                    \"candidate_id\": 1,\n                    \"agency_group_id\": 1,\n                    \"full_name\": 1,\n                    \"first_name\": 1,\n                    \"last_name\": 1,\n                    \"dbs_status\": 1,\n                    \"last_contacted_at\": 1,\n                    \"external_verifications\": 1,\n                    \"external_workforce\": 1\n                },\n                \"query\": {\n                    \"and\": [{\n                        \"candidate_id\": {\n                            \"equal\": sCandidateId\n                        }\n                    }]\n                }\n            };\n\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/advanced-search-v2/candidate\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", Ember.get(this, \"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objQuery));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-candidate-basic-info\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        sContext: null,\n\n        // Stores the last retrieved candidates details.\n        // This is cleared each time a new candidate profile page is loaded(page-agency-group-candidate-view.js)\n        objLastCandidateDetails: null,\n\n        /*\n          Services\n        */\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\"));\n        },\n\n        /*\n          Functions\n        */\n        /**\n         * Performs a single candidate basic info ajax call\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch basic info data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  26 October 2017\n         */\n        getBasicInfo: function getBasicInfo(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n            var objThis = this;\n            var funcSuccessWrapper = function funcSuccessWrapper(objData) {\n                objThis.set(\"objLastCandidateDetails\", objData);\n                funcSuccess.apply(undefined, arguments);\n            };\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/basic-info\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", Ember.get(this, \"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccessWrapper, objFailure));\n        },\n\n        /**\n         * Update contact number for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param objData - The contact number data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  15 May 2018\n         */\n        updateBasicInfo: function updateBasicInfo(objContext, sProperty, sCandidateId, objData, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/basic-info\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-candidate-consultant\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        sContext: null,\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\"));\n        },\n\n        /**\n         * Retrieves the agency group candidate consultants\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sAgencyGroupId - The agency group id\n         * @param sCandidateId - The candidate id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  28 August 2018\n         */\n        getCandidateConsultantList: function getCandidateConsultantList(objContext, sProperty, sAgencyGroupId, sCandidateId, funcSuccess, objFailure) {\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/consultant\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Creates a new agency group candidate consultant\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param objData - The candidate consultant data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  28 August 2018\n         */\n        createCandidateConsultant: function createCandidateConsultant(objContext, sProperty, sCandidateId, objData, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/consultant\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Updates a specific agency group candidate consultants\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param sConsultantId - The consultant id\n         * @param objData - The candidate consultant data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  28 August 2018\n         */\n        updateCandidateConsultant: function updateCandidateConsultant(objContext, sProperty, sCandidateId, sConsultantId, objData, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/consultant/\" + sConsultantId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Deletes a specific agency group candidate consultants\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param sConsultantId - The consultant id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  28 August 2018\n         */\n        deleteCandidateConsultant: function deleteCandidateConsultant(objContext, sProperty, sCandidateId, sConsultantId, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/consultant/\" + sConsultantId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"DELETE\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Route for agency group candidate consultant, used for assigning consultants to candidate profiles\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param objData - The payload containing the candidate ids, consultant role, and user id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet<deon.dewet@a24group.com>\n         * @since  11 Oct 2018\n         */\n        assignConsultantToCandidates: function assignConsultantToCandidates(objContext, sProperty, objData, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/consultant\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        }\n\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-candidate-employment-dismissals\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\"));\n        },\n\n        /**\n         * Retrieves all employment dismissal entries for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  9 August 2019\n         */\n        getEmploymentDismissals: function getEmploymentDismissals(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/employment-dismissals\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Creates an employment dismissal entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param objData - The candidate employment dismissals data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  9 August 2019\n         */\n        createEmploymentDismissal: function createEmploymentDismissal(objContext, sProperty, sCandidateId, objData, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/employment-dismissals\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Edit an employment dismissal entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param sEmploymentDismissalId - The employment dismissals id\n         * @param objData - The candidate language data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  9 August 2019\n         */\n        updateEmploymentDismissal: function updateEmploymentDismissal(objContext, sProperty, sCandidateId, sEmploymentDismissalId, objData, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/employment-dismissals/\" + sEmploymentDismissalId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Deletes an employment dismissal entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param sEmploymentDismissalId - The employment dismissals id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  9 August 2019\n         */\n        deleteEmploymentDismissal: function deleteEmploymentDismissal(objContext, sProperty, sCandidateId, sEmploymentDismissalId, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/employment-dismissals/\" + sEmploymentDismissalId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"DELETE\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-candidate-languages\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Retrieves all language entries for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  02 March 2018\n         */\n        getLanguages: function getLanguages(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/languages\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Creates a languages entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param objData - The candidate languages data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  02 March 2018\n         */\n        createLanguage: function createLanguage(objContext, sProperty, sCandidateId, objData, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/languages\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Edit a language entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param sLanguageId - The language id\n         * @param objData - The candidate language data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  14 March 2018\n         */\n        editLanguage: function editLanguage(objContext, sProperty, sCandidateId, sLanguageId, objData, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/languages/\" + sLanguageId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Deletes a languages entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param sLanguageId - The languages id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  02 March 2018\n         */\n        deleteLanguage: function deleteLanguage(objContext, sProperty, sCandidateId, sLanguageId, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/languages/\" + sLanguageId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"DELETE\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-candidate-misc-details\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        /*\n         * Services\n         */\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /*\n         * Functions\n         */\n        /**\n         * Performs a single agency candidate misc details GET ajax call\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch misc details data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  03 May 2018\n         */\n        getMiscDetails: function getMiscDetails(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/misc\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n        /**\n         * Performs a single agency candidate misc details PUT ajax call\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to update misc details for\n         * @param objPayload - The payload for the misc details\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  03 May 2018\n         */\n        updateMiscDetails: function updateMiscDetails(objContext, sProperty, sCandidateId, objPayload, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/misc\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objPayload));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-candidate-next-of-kin\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Retrieves all next of kin entries for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  23 Feb 2018\n         */\n        getNextOfKins: function getNextOfKins(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/next-of-kin\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Creates a next of kin entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param objData - The candidate next of kin data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  23 Feb 2018\n         */\n        createNextOfKin: function createNextOfKin(objContext, sProperty, sCandidateId, objData, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/next-of-kin\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Deletes a next of kin entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param sNextOfKinId - The next of kin id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  23 Feb 2018\n         */\n        deleteNextOfKin: function deleteNextOfKin(objContext, sProperty, sCandidateId, sNextOfKinId, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/next-of-kin/\" + sNextOfKinId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"DELETE\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Updates a next of kin entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch basic info data for\n         * @param sNextOfKinId - The next of kin id\n         * @param objData - The candidate next of kin data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  21 March 2018\n         */\n        updateNextOfKin: function updateNextOfKin(objContext, sProperty, sCandidateId, sNextOfKinId, objData, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/next-of-kin/\" + sNextOfKinId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-candidate-notification\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n        sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        /**\n         * Route for previewing an agency group notification of a candidate\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch preview for\n         * @param sNotificationId - The notification id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  7 March 2019\n         */\n        previewNotification: function previewNotification(objContext, sProperty, sCandidateId, sNotificationId, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/notification/\" + sNotificationId + \"/preview\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Route for sending an agency group notification to a candidate\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The property name to get the promise object\n         * @param sCandidateId - The candidate id of candidate to send to\n         * @param objData - The data for the notification\n         * @param funcSuccess - The success function\n         * @param objFailure - The object that will deal with failed service calls\n          * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  7 March 2019\n         */\n        sendNotification: function sendNotification(objContext, sProperty, sCandidateId, objData, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/notifications\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-candidate-other-names\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Retrieves other names for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  06 March 2018\n         */\n        getOtherNames: function getOtherNames(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/other-names\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Update other names for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param objData - The candidate other names data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  06 March 2018\n         */\n        updateOtherNames: function updateOtherNames(objContext, sProperty, sCandidateId, objData, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/other-names\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-candidate-plugin\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n\n        sContext: null,\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\"));\n        },\n\n        /**\n         * This service method will be used to retrieve the plugins for a candidate\n         *\n         * @param objContext - The ember object on which the property must exist, component / controller\n         * @param sProperty - The property name on which to get and set the promise. Can be send in as null for service calls\n         *                  that specifically do no need to be canceled when making the same call again\n         * @param sCandidateId - The candidate id the plugin needs to be returned for\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The object containing the callback function to execute when the service call is not\n         *                     successful including the array of error codes that you want to handle\n         * @param objQueryParams - The object containing the optional query params\n         *\n         * @author Junior van Wyk\n         * @since  20 December 2017\n         */\n        getPlugins: function getPlugins(objContext, sProperty, sCandidateId, funcSuccess, objFailure, objQueryParams) {\n            var sAgencyGroupId = Ember.get(this, \"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/plugin\");\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", Ember.get(this, \"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n\n        /**\n         * This service method will be used to retrieve a specific plugin for a candidate\n         *\n         * @param objContext - The ember object on which the property must exist, component / controller\n         * @param sProperty The property name on which to get and set the promise. Can be send in as null for service calls\n         *                  that specifically do no need to be canceled when making the same call again\n         * @param sCandidateId - The candidate id the plugin needs to be returned for\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The object containing the callback function to execute when the service call is not\n         *                     successful including the array of error codes that you want to handle\n         * @param sPluginId - The id of the plugin to load\n         *\n         * @author Junior van Wyk\n         * @since  20 December 2017\n         */\n        getPlugin: function getPlugin(objContext, sProperty, sCandidateId, sPluginId, funcSuccess, objFailure) {\n            var sAgencyGroupId = Ember.get(this, \"_objUserSession\").getUserContextReference().mId;\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", Ember.get(this, \"sRestApiBaseUrl\") + \"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/plugin/\" + sPluginId, funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-candidate-position-held\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Retrieves all position-held for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch position-held data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objQueryParams (Optional) - The query params to filter on for position-held\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  13 Sep 2019\n         */\n        getPositionsHeld: function getPositionsHeld(objContext, sProperty, sCandidateId, funcSuccess, objFailure, objQueryParams) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/position-held\");\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Update position-held status for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch position held data for\n         * @param sJobFamilyId - The job family id of position held\n         * @param sJobTitleId - The job title id of position held\n         * @param objPayload - The payload of position held\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  28 Sep 2021\n         */\n        updatePositionsHeld: function updatePositionsHeld(objContext, sProperty, sCandidateId, sJobFamilyId, sJobTitleId, objPayload, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/position-held/job-family/\" + sJobFamilyId + \"/job-title/\" + sJobTitleId + \"/status-changes\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objPayload));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-candidate-qualifications\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n        sContext: null,\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\"));\n        },\n\n        /**\n         * Retrieves all qualifications for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch qualifications data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objQueryParams (Optional) - The query params to filter on for qualifications\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  29 May 2019\n         */\n        getQualifications: function getQualifications(objContext, sProperty, sCandidateId, funcSuccess, objFailure, objQueryParams) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/qualifications\");\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, null, null, true));\n        },\n\n        /**\n         * Add a qualification to the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to add qualifications for\n         * @param objPayload - The qualification payload\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  30 May 2019\n         */\n        addQualification: function addQualification(objContext, sProperty, sCandidateId, objPayload, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/qualifications\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objPayload));\n        },\n\n        /**\n         * Update a qualification for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to update qualifications for\n         * @param sQualificationsId - The qualification id to update\n         * @param objPayload - The qualification payload\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  30 May 2019\n         */\n        updateQualification: function updateQualification(objContext, sProperty, sCandidateId, sQualificationsId, objPayload, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/qualifications/\" + sQualificationsId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objPayload));\n        },\n\n        /**\n         * verify a qualification for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to update qualifications for\n         * @param sQualificationsId - The qualification id to update\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  30 May 2019\n         */\n        verifyQualification: function verifyQualification(objContext, sProperty, sCandidateId, sQualificationsId, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            // This is hard coded since there is only one action to take\n            var objPayload = {\n                action: \"verified\"\n            };\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/qualifications/\" + sQualificationsId + \"/action\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objPayload));\n        },\n\n        /**\n         * Delete a qualification for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to delete qualifications for\n         * @param sQualificationsId - The qualification id to delete\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  30 May 2019\n         */\n        deleteQualification: function deleteQualification(objContext, sProperty, sCandidateId, sQualificationsId, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/qualifications/\" + sQualificationsId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"DELETE\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-candidate-report-interview-profile\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Retrieves the agency group candidate interview document details\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sAgencyGroupId - The agency group\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * \n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  25 March 2019\n         */\n        getCandidateReportInterviewProfile: function getCandidateReportInterviewProfile(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/report/interview-profile\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-candidate-settings\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        objSettings: null,\n\n        /*\n          Services\n        */\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /*\n          Functions\n        */\n        /**\n         * Performs a single agency group candidate settings ajax call\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  26 November 2018\n         */\n        getSettings: function getSettings(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/settings\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", Ember.get(this, \"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-candidate-skills\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n        sContext: null,\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\"));\n        },\n\n        /**\n         * Retrieves all skills for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch skills data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objQueryParams (Optional) - The query params to filter on for skills\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  14 May 2019\n         */\n        getSkills: function getSkills(objContext, sProperty, sCandidateId, funcSuccess, objFailure, objQueryParams) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/skills\");\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, null, null, true));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-candidate-stated-skills\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n        sContext: null,\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\"));\n        },\n\n        /**\n         * Add a stated skill to the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to add skills for\n         * @param sSkillsId - The skill id to add\n         * @param objPayload - The skill payload\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  14 May 2019\n         */\n        addStatedSkills: function addStatedSkills(objContext, sProperty, sCandidateId, sSkillsId, objPayload, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/stated-skills/\" + sSkillsId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objPayload));\n        },\n\n        /**\n         * Update a stated skill for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to update skills for\n         * @param sSkillsId - The skill id to update\n         * @param objPayload - The skill payload\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  14 May 2019\n         */\n        updateStatedSkills: function updateStatedSkills(objContext, sProperty, sCandidateId, sSkillsId, objPayload, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/stated-skills/\" + sSkillsId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objPayload));\n        },\n\n        /**\n         * verify a stated skill for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to update skills for\n         * @param sSkillsId - The skill id to update\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  14 May 2019\n         */\n        verifyStatedSkills: function verifyStatedSkills(objContext, sProperty, sCandidateId, sSkillsId, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            // This is hard coded since there is only one action to take\n            var objPayload = {\n                action: \"verified\"\n            };\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/stated-skills/\" + sSkillsId + \"/action\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objPayload));\n        },\n\n        /**\n         * Delete a stated skill for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to delete skills for\n         * @param sSkillsId - The skill id to delete\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  14 May 2019\n         */\n        deleteStatedSkills: function deleteStatedSkills(objContext, sProperty, sCandidateId, sSkillsId, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/stated-skills/\" + sSkillsId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"DELETE\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-candidate-type\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n        _objAgencyGroupCandidateTypesResponse: null,\n        _sLastAgencyGroupId: null,\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n        },\n\n        /**\n         * Retrieves the agency group candidate type list\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sAgencyGroupId - The agency group\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         */\n        getCandidateTypes: function getCandidateTypes(objCaller, sProperty, sAgencyGroupId, funcSuccess, objFailure) {\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate-type\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                name: {\n                    bSortBy: true,\n                    mValue: \"asc\"\n                }\n            });\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            var objThis = this;\n            var funcSuccessWrapper = function funcSuccessWrapper(objData) {\n                objThis.set(\"_objAgencyGroupCandidateTypesResponse\", objData);\n                funcSuccess.apply(undefined, arguments);\n            };\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, null, //This is a public route\n            this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccessWrapper, objFailure, null, null, false, false, true));\n        },\n\n        /**\n         * Retrieves the agency group candidate type list with page cache\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sAgencyGroupId - The agency group id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  10 January 2022\n         */\n        getCandidateTypesCached: function getCandidateTypesCached(objContext, sProperty, sAgencyGroupId, funcSuccess, objFailure) {\n            var _this = this;\n\n            if (this.get(\"_sLastAgencyGroupId\") === sAgencyGroupId && !a24Core.isEmpty(this.get(\"_objAgencyGroupCandidateTypesResponse\"))) {\n                return new Ember.RSVP.Promise(function (funcResolve) {\n                    funcSuccess(Ember.copy(_this.get(\"_objAgencyGroupCandidateTypesResponse\"), true));\n                    funcResolve(Ember.copy(_this.get(\"_objAgencyGroupCandidateTypesResponse\"), true));\n                });\n            } else {\n                this.set(\"_sLastAgencyGroupId\", sAgencyGroupId);\n                return this.getCandidateTypes(objContext, sProperty, sAgencyGroupId, funcSuccess, objFailure);\n            }\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-consultant-role\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        sContext: null,\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\"));\n        },\n\n        /**\n         * Retrieves the agency group consultant roles\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  28 August 2018\n         */\n        getConsultantRoles: function getConsultantRoles(objContext, sProperty, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/consultant_role\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                },\n                sortBy: {\n                    mValue: \"name\"\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-equality-monitoring\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * This service method will be used to retrieve the the candidates equality monitoring\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The id of the candidate\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Tarun Arora <tananrules@gmail.com>\n         * @since  08 Nov 2017\n         */\n        getEquality: function getEquality(objCaller, sProperty, sCandidateId, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/equality\");\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", Ember.get(this, \"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n        updateEquality: function updateEquality(objCaller, sProperty, sCandidateId, objData, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/equality\");\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", Ember.get(this, \"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-job-title\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Returns a list of job titles for agency group\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param objQuery - The query params object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  31 January 2019\n         */\n        getJobTitles: function getJobTitles(objContext, sProperty, objQuery, funcSuccess, objFailure) {\n\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency-group/\" + sAgencyGroupId + \"/job-title\");\n\n            a24RestUrlConstruct.addQueryParamObject(objQuery);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-lookup\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Returns a list of external documents\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure - The object that will deal with failed service calls\n         * @param objQuery - The query params object\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  19 February 2019\n         */\n        getExternalDocuments: function getExternalDocuments(objContext, sProperty, funcSuccess, objFailure, objQuery) {\n\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency-group/\" + sAgencyGroupId + \"/lookup/external-document\");\n\n            a24RestUrlConstruct.addQueryParamObject(objQuery);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Returns a list of portfolios\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure - The object that will deal with failed service calls\n         * @param objQuery - The query params object\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  06 May 2019\n         */\n        getPortfolios: function getPortfolios(objContext, sProperty, funcSuccess, objFailure, objQuery) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency-group/\" + sAgencyGroupId + \"/lookup/portfolio\");\n\n            a24RestUrlConstruct.addQueryParamObject(objQuery);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Returns a list of portfolio consultants\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure - The object that will deal with failed service calls\n         * @param objQuery - The query params object\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  06 May 2019\n         */\n        getPortfolioConsultants: function getPortfolioConsultants(objContext, sProperty, funcSuccess, objFailure, objQuery) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency-group/\" + sAgencyGroupId + \"/lookup/portfolio-consultant\");\n\n            a24RestUrlConstruct.addQueryParamObject(objQuery);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Returns a list of portfolio consultant types\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure - The object that will deal with failed service calls\n         * @param objQuery - The query params object\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  06 May 2019\n         */\n        getPortfolioConsultantTypes: function getPortfolioConsultantTypes(objContext, sProperty, funcSuccess, objFailure, objQuery) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency-group/\" + sAgencyGroupId + \"/lookup/portfolio-consultant-type\");\n\n            a24RestUrlConstruct.addQueryParamObject(objQuery);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Returns a list of verification types\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure - The object that will deal with failed service calls\n         * @param objQuery - The query params object\n         *\n         * @author Langton Mudyiwa<langtonfavor@gmail.com>\n         * @since  17 June 2019\n         */\n        getExternalVerification: function getExternalVerification(objContext, sProperty, funcSuccess, objFailure, objQuery) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency-group/\" + sAgencyGroupId + \"/lookup/external-verification\");\n\n            a24RestUrlConstruct.addQueryParamObject(objQuery);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Returns a list of mail templates\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure - The object that will deal with failed service calls\n         * @param objQuery - The query params object\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  15 August 2019\n         */\n        getMailTemplates: function getMailTemplates(objContext, sProperty, funcSuccess, objFailure, objQuery) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency-group/\" + sAgencyGroupId + \"/lookup/mail-template\");\n\n            a24RestUrlConstruct.addQueryParamObject(objQuery);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Returns a list of external days to expiry items\n         *\n         * @param objContext - The context of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure - The object that will deal with failed service calls\n         * @param objQuery - The query params object\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  28 August 2019\n         */\n        getExternalDaysToExpiry: function getExternalDaysToExpiry(objContext, sProperty, funcSuccess, objFailure, objQuery) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency-group/\" + sAgencyGroupId + \"/lookup/external-days-to-expiry\");\n\n            a24RestUrlConstruct.addQueryParamObject(objQuery);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-notification-type-templates\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n        sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        /**\n         * Route for agency group notification type templates get list\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objQueryParams (Optional) - An object containing query params\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  24 August 2020\n         */\n        getNotificationTypeTemplates: function getNotificationTypeTemplates(objContext, sProperty, funcSuccess, objFailure, objQueryParams) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/notification-types-templates\");\n            if (!a24Core.isEmpty(objQueryParams)) {\n                a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n            }\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                },\n                context_notification_type: {\n                    bSortBy: true,\n                    mValue: \"asc\"\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-notification-types\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n        sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        /**\n         * Route for agency group notification types get list\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objQueryParams (Optional) - An object containing query params\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  7 March 2019\n         */\n        getNotificationTypes: function getNotificationTypes(objContext, sProperty, funcSuccess, objFailure, objQueryParams) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/lookup/candidate-profile-notifications\");\n\n            if (!a24Core.isEmpty(objQueryParams)) {\n                a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n            }\n\n            a24RestUrlConstruct.addQueryParamObject({\n                name: {\n                    bSortBy: true,\n                    mValue: \"asc\"\n                }\n            });\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-status-details\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        sContext: null,\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\"));\n        },\n\n        /**\n         * Route for agency group status get list\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  13 Aug 2018\n         */\n        getStatusList: function getStatusList(objContext, sProperty, funcSuccess, objFailure) {\n\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/status\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                order: {\n                    bSortBy: true,\n                    mValue: \"asc\"\n                }\n            });\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, null, null, true // Retrieve all entries\n            ));\n        },\n\n        /**\n         * Retrieves all statuses for the agency group\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  17 August 2018\n         */\n        getStatusSettings: function getStatusSettings(objContext, sProperty, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/settings/status\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Route for agency group status get\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sStatusId - The status id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  23 Aug 2018\n         */\n        getStatus: function getStatus(objContext, sProperty, sStatusId, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/status/\" + sStatusId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Route to create a candidate status on agency group context\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param objData - The data to create candidate\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dwewet@a24group.com>\n         * @since  24 Aug 2018\n         */\n        createCandidateStatus: function createCandidateStatus(objContext, sProperty, objData, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/status\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Route to update a candidate status on agency group context\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param objData - The data to create candidate\n         * @param sCandidateStatusId - The candidate status id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dwewet@a24group.com>\n         * @since  24 Aug 2018\n         */\n        updateCandidateStatus: function updateCandidateStatus(objContext, sProperty, objData, sCandidateStatusId, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/status/\" + sCandidateStatusId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-group-status-reason\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        sContext: null,\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\"));\n        },\n\n        /**\n         * Retrieves all status reasons for the agency group\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sStatusId - The status id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  17 August 2018\n         */\n        getStatusReasons: function getStatusReasons(objContext, sProperty, sStatusId, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/status/\" + sStatusId + \"/reason\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                name: {\n                    bSortBy: true,\n                    mValue: \"asc\"\n                }\n            });\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Create a new reason for a status\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sStatusId - The status id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objPayload (Optional) - The payload used to create the status\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  28 August 2018\n         */\n        createStatusReasons: function createStatusReasons(objContext, sProperty, sStatusId, funcSuccess, objFailure, objPayload) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/status/\" + sStatusId + \"/reason\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objPayload));\n        },\n\n        /**\n         * Update new reason for a status\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sStatusId - The status id\n         * @param sReasonId - The reason id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objPayload (Optional) - The payload used to create the status\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  28 August 2018\n         */\n        updateStatusReasons: function updateStatusReasons(objContext, sProperty, sStatusId, sReasonId, funcSuccess, objFailure, objPayload) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/status/\" + sStatusId + \"/reason/\" + sReasonId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objPayload));\n        }\n\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-job-title\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Returns a list of job titles for agency\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param objQuery - The query params object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  31 January 2019\n         */\n        getJobTitles: function getJobTitles(objContext, sProperty, objQuery, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency/\" + sAgencyId + \"/job-title\");\n\n            a24RestUrlConstruct.addQueryParamObject(objQuery);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-lookup\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Returns a list of the specified lookup type\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sLookupType - The lookup type to get\n         * @param funcSuccess - The success function\n         * @param objFailure - The object that will deal with failed service calls\n         * @param objQuery - The query params object\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  5 May 2021\n         */\n        lookup: function lookup(objContext, sProperty, sLookupType, funcSuccess, objFailure, objQuery) {\n\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency/\" + sAgencyId + \"/lookup/\" + sLookupType);\n\n            a24RestUrlConstruct.addQueryParamObject(objQuery);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Returns a list of the specified lookup types, supports a comma separated list\n         * of lookup types\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sLookupTypes - The lookup types to get\n         * @param funcSuccess - The success function\n         * @param objFailure - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  17 Nov 2021\n         */\n        allInOneLookup: function allInOneLookup(objContext, sProperty, sLookupTypes, funcSuccess, objFailure) {\n\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency/\" + sAgencyId + \"/lookup\");\n\n            a24RestUrlConstruct.addQueryParam('lookup_type', sLookupTypes);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Returns a list of external documents\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure - The object that will deal with failed service calls\n         * @param objQuery - The query params object\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  5 May 2021\n         */\n        getExternalDocuments: function getExternalDocuments(objContext, sProperty, funcSuccess, objFailure, objQuery) {\n            return this.lookup(objContext, sProperty, \"external-document\", funcSuccess, objFailure, objQuery);\n        },\n\n        /**\n         * Returns a list of portfolios\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure - The object that will deal with failed service calls\n         * @param objQuery - The query params object\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  5 May 2021\n         */\n        getPortfolios: function getPortfolios(objContext, sProperty, funcSuccess, objFailure, objQuery) {\n            return this.lookup(objContext, sProperty, \"portfolio\", funcSuccess, objFailure, objQuery);\n        },\n\n        /**\n         * Returns a list of portfolio consultants\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure - The object that will deal with failed service calls\n         * @param objQuery - The query params object\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  5 May 2021\n         */\n        getPortfolioConsultants: function getPortfolioConsultants(objContext, sProperty, funcSuccess, objFailure, objQuery) {\n            return this.lookup(objContext, sProperty, \"portfolio-consultant\", funcSuccess, objFailure, objQuery);\n        },\n\n        /**\n         * Returns a list of portfolio consultant types\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure - The object that will deal with failed service calls\n         * @param objQuery - The query params object\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  5 May 2021\n         */\n        getPortfolioConsultantTypes: function getPortfolioConsultantTypes(objContext, sProperty, funcSuccess, objFailure, objQuery) {\n            return this.lookup(objContext, sProperty, \"portfolio-consultant-type\", funcSuccess, objFailure, objQuery);\n        },\n\n        /**\n         * Returns a list of verification types\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure - The object that will deal with failed service calls\n         * @param objQuery - The query params object\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  5 May 2021\n         */\n        getExternalVerification: function getExternalVerification(objContext, sProperty, funcSuccess, objFailure, objQuery) {\n            return this.lookup(objContext, sProperty, \"external-verification\", funcSuccess, objFailure, objQuery);\n        },\n\n        /**\n         * Returns a list of external days to expiry items\n         *\n         * @param objContext - The context of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure - The object that will deal with failed service calls\n         * @param objQuery - The query params object\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  5 May 2021\n         */\n        getExternalDaysToExpiry: function getExternalDaysToExpiry(objContext, sProperty, funcSuccess, objFailure, objQuery) {\n            return this.lookup(objContext, sProperty, \"external-days-to-expiry\", funcSuccess, objFailure, objQuery);\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-notification-type-templates\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n        sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        /**\n         * Route for agency notification type templates get list\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objQueryParams (Optional) - An object containing query params\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  24 August 2020\n         */\n        getNotificationTypeTemplates: function getNotificationTypeTemplates(objContext, sProperty, funcSuccess, objFailure, objQueryParams) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/notification-types-templates\");\n            if (!a24Core.isEmpty(objQueryParams)) {\n                a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n            }\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                },\n                context_notification_type: {\n                    bSortBy: true,\n                    mValue: \"asc\"\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-notification-types\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n        sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        /**\n         * Route for agency notification types get list\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objQueryParams (Optional) - An object containing query params\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  1 Sept 2020\n         */\n        getNotificationTypes: function getNotificationTypes(objContext, sProperty, funcSuccess, objFailure, objQueryParams) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/lookup/candidate-profile-notifications\");\n\n            if (!a24Core.isEmpty(objQueryParams)) {\n                a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n            }\n\n            a24RestUrlConstruct.addQueryParamObject({\n                name: {\n                    bSortBy: true,\n                    mValue: \"asc\"\n                }\n            });\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-status-details\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        sContext: null,\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY\"));\n        },\n\n        /**\n         * Route for agency status get list\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  11 December 2018\n         */\n        getStatusList: function getStatusList(objContext, sProperty, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/status\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                order: {\n                    bSortBy: true,\n                    mValue: \"asc\"\n                }\n            });\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, null, null, true // Retrieve all entries\n            ));\n        },\n\n        /**\n         * Retrieves all statuses for the agency group\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  17 August 2018\n         */\n        getStatusSettings: function getStatusSettings(objContext, sProperty, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/settings/status\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-agency-user-avatar\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Get avatar for the user\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sUserId - The user id to fetch avatar data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  30 October 2019\n         */\n        getAvatar: function getAvatar(objContext, sProperty, sUserId, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/user/\" + sUserId + \"/avatar\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", Ember.get(this, \"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Delete avatar for the user\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sUserId - The user id to fetch avatar data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  11 November 2019\n         */\n        deleteAvatar: function deleteAvatar(objContext, sProperty, sUserId, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/user/\" + sUserId + \"/avatar\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"DELETE\", Ember.get(this, \"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-candidate-basic-info\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        sContext: null,\n\n        /*\n          Services\n        */\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_CANDIDATE\"));\n        },\n\n        /*\n          Functions\n        */\n        /**\n         * Get basic info for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch basic info data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  15 March 2018\n         */\n        getBasicInfo: function getBasicInfo(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/basic-info\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", Ember.get(this, \"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Update basic info for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param objData - The contact number data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  15 May 2018\n         */\n        updateBasicInfo: function updateBasicInfo(objContext, sProperty, sCandidateId, objData, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/basic-info\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-candidate-employment-dismissals\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_CANDIDATE\"));\n        },\n\n        /**\n         * Retrieves all employment dismissal entries for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  9 August 2019\n         */\n        getEmploymentDismissals: function getEmploymentDismissals(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/employment-dismissals\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Creates an employment dismissals entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param objData - The candidate employment dismissal data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  9 August 2019\n         */\n        createEmploymentDismissal: function createEmploymentDismissal(objContext, sProperty, sCandidateId, objData, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/employment-dismissals\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Edit an employment dismissal entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param sEmploymentDismissalId - The employment dismissal id\n         * @param objData - The candidate language data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  9 August 2019\n         */\n        updateEmploymentDismissal: function updateEmploymentDismissal(objContext, sProperty, sCandidateId, sEmploymentDismissalId, objData, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/employment-dismissals/\" + sEmploymentDismissalId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Deletes an employment dismissal entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param sEmploymentDismissalId - The employment dismissal id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  9 August 2019\n         */\n        deleteEmploymentDismissal: function deleteEmploymentDismissal(objContext, sProperty, sCandidateId, sEmploymentDismissalId, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/employment-dismissals/\" + sEmploymentDismissalId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"DELETE\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-candidate-languages\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Retrieves all language entries for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch basic info data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  02 March 2018\n         */\n        getLanguages: function getLanguages(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/languages\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Creates a language entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param objData - The candidate language data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  02 March 2018\n         */\n        createLanguage: function createLanguage(objContext, sProperty, sCandidateId, objData, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/languages\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Edit a language entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param sLanguageId - The language id\n         * @param objData - The candidate language data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  14 March 2018\n         */\n        editLanguage: function editLanguage(objContext, sProperty, sCandidateId, sLanguageId, objData, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/languages/\" + sLanguageId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Deletes a language entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch basic info data for\n         * @param sLanguageId - The language id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  02 March 2018\n         */\n        deleteLanguage: function deleteLanguage(objContext, sProperty, sCandidateId, sLanguageId, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/languages/\" + sLanguageId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"DELETE\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-candidate-misc-details\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        /*\n         * Services\n         */\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /*\n         * Functions\n         */\n        /**\n         * Performs a single agency candidate misc details GET ajax call\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch misc details data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  03 May 2018\n         */\n        getMiscDetails: function getMiscDetails(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/misc\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n        /**\n         * Performs a single agency candidate misc details PUT ajax call\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to update misc details for\n         * @param objPayload - The payload for the misc details\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  03 May 2018\n         */\n        updateMiscDetails: function updateMiscDetails(objContext, sProperty, sCandidateId, objPayload, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/misc\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objPayload));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-candidate-next-of-kin\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Retrieves all next of kin entries for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch basic info data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  23 Feb 2018\n         */\n        getNextOfKins: function getNextOfKins(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/next-of-kin\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Creates a next of kin entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch basic info data for\n         * @param objData - The candidate next of kin data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  23 Feb 2018\n         */\n        createNextOfKin: function createNextOfKin(objContext, sProperty, sCandidateId, objData, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/next-of-kin\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Updates a next of kin entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch basic info data for\n         * @param sNextOfKinId - The next of kin id\n         * @param objData - The candidate next of kin data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  14 March 2018\n         */\n        updateNextOfKin: function updateNextOfKin(objContext, sProperty, sCandidateId, sNextOfKinId, objData, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/next-of-kin/\" + sNextOfKinId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Deletes a next of kin entry for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch basic info data for\n         * @param sNextOfKinId - The next of kin id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  23 Feb 2018\n         */\n        deleteNextOfKin: function deleteNextOfKin(objContext, sProperty, sCandidateId, sNextOfKinId, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/next-of-kin/\" + sNextOfKinId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"DELETE\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-candidate-other-names\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Retrieves other names for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  06 March 2018\n         */\n        getOtherNames: function getOtherNames(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/other-names\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Update other names for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param objData - The candidate other names data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  06 March 2018\n         */\n        updateOtherNames: function updateOtherNames(objContext, sProperty, sCandidateId, objData, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/other-names\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-candidate-plugin\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n\n        sContext: null,\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_CANDIDATE\"));\n        },\n\n        /**\n         * This service method will be used to retrieve the plugins for a candidate\n         *\n         * @param objContext - The ember object on which the property must exist, component / controller\n         * @param sProperty The property name on which to get and set the promise. Can be send in as null for service calls\n         *                  that specifically do no need to be canceled when making the same call again\n         * @param sCandidateId - The candidate id the plugin needs to be returned for\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The object containing the callback function to execute when the service call is not\n         *                     successful including the array of error codes that you want to handle\n         * @param objQueryParams - The object containing the optional query params\n         *\n         * @author Jacques Slabber\n         * @since  23 September 2016\n         */\n        getPlugins: function getPlugins(objContext, sProperty, sCandidateId, funcSuccess, objFailure, objQueryParams) {\n            a24RestUrlConstruct.setBaseUrl(\"/v1/candidate/\" + sCandidateId + \"/plugin\");\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", Ember.get(this, \"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n\n        /**\n         * This service method will be used to retrieve a specific plugin for a candidate\n         *\n         * @param objContext - The ember object on which the property must exist, component / controller\n         * @param sProperty The property name on which to get and set the promise. Can be send in as null for service calls\n         *                  that specifically do no need to be canceled when making the same call again\n         * @param sCandidateId - The candidate id the plugin needs to be returned for\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The object containing the callback function to execute when the service call is not\n         *                     successful including the array of error codes that you want to handle\n         * @param sPluginId - The id of the plugin to load\n         *\n         * @author Deon de Wet\n         * @since  17 October 2016\n         */\n        getPlugin: function getPlugin(objContext, sProperty, sCandidateId, funcSuccess, objFailure, sPluginId) {\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", Ember.get(this, \"sRestApiBaseUrl\") + \"/v1/candidate/\" + sCandidateId + \"/plugin/\" + sPluginId, funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-candidate-profile-equality\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * This service method will be used to retrieve the the candidates equality monitoring\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The id of the candidate\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Tarun Arora <tarunarora0807@gmail.com>\n         * @since  13 Nov 2017\n         */\n        getEquality: function getEquality(objCaller, sProperty, sCandidateId, funcSuccess, objFailure) {\n            var sUrl = Ember.get(this, \"sRestApiBaseUrl\") + \"/v1/candidate/\" + sCandidateId + \"/equality\";\n\n            a24RestUrlConstruct.setBaseUrlSwagger(sUrl);\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n        updateEquality: function updateEquality(objCaller, sProperty, sCandidateId, objData, funcSuccess, objFailure) {\n            var sUrl = Ember.get(this, \"sRestApiBaseUrl\") + \"/v1/candidate/\" + sCandidateId + \"/equality\";\n\n            a24RestUrlConstruct.setBaseUrlSwagger(sUrl);\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-candidate-qualifications\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n        sContext: null,\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_CANDIDATE\"));\n        },\n\n        /**\n         * Retrieves all qualifications for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch qualifications data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objQueryParams (Optional) - The extra query params object\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  15 May 2019\n         */\n        getQualifications: function getQualifications(objContext, sProperty, sCandidateId, funcSuccess, objFailure, objQueryParams) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/qualifications\");\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, null, null, true));\n        },\n\n        /**\n         * Add a qualification to the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to add qualifications for\n         * @param objPayload - The qualification payload\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  15 May 2019\n         */\n        addQualification: function addQualification(objContext, sProperty, sCandidateId, objPayload, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/qualifications\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objPayload));\n        },\n\n        /**\n         * Update a qualification for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to update qualifications for\n         * @param sQualificationId - The qualification id to update\n         * @param objPayload - The qualification payload\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  15 May 2019\n         */\n        updateQualification: function updateQualification(objContext, sProperty, sCandidateId, sQualificationId, objPayload, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/qualifications/\" + sQualificationId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objPayload));\n        },\n\n        /**\n         * Delete a qualification for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to delete qualifications for\n         * @param sQualificationId - The qualification id to delete\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  15 May 2019\n         */\n        deleteQualification: function deleteQualification(objContext, sProperty, sCandidateId, sQualificationId, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/qualifications/\" + sQualificationId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"DELETE\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-candidate-settings\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        objSettings: null,\n\n        /*\n          Services\n        */\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /*\n          Functions\n        */\n        /**\n         * Performs a single candidate settings ajax call\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  26 November 2018\n         */\n        getSettings: function getSettings(objContext, sProperty, sCandidateId, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/settings\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", Ember.get(this, \"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-candidate-skills\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n        sContext: null,\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_CANDIDATE\"));\n        },\n\n        /**\n         * Retrieves all skills for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch skills data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  01 May 2019\n         */\n        getSkills: function getSkills(objContext, sProperty, sCandidateId, funcSuccess, objFailure, objQueryParams) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/skills\");\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, null, null, true));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-candidate-stated-skills\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n        sContext: null,\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_CANDIDATE\"));\n        },\n\n        /**\n         * Add a stated skill to the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to add skills for\n         * @param sSkillsId - The skill id to add\n         * @param objPayload - The skill payload\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  01 May 2019\n         */\n        addStatedSkills: function addStatedSkills(objContext, sProperty, sCandidateId, sSkillsId, objPayload, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/stated-skills/\" + sSkillsId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objPayload));\n        },\n\n        /**\n         * Update a stated skill for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to update skills for\n         * @param sSkillsId - The skill id to update\n         * @param objPayload - The skill payload\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  01 May 2019\n         */\n        updateStatedSkills: function updateStatedSkills(objContext, sProperty, sCandidateId, sSkillsId, objPayload, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/stated-skills/\" + sSkillsId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objPayload));\n        },\n\n        /**\n         * Delete a stated skill for the candidate\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to delete skills for\n         * @param sSkillsId - The skill id to delete\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  01 May 2019\n         */\n        deleteStatedSkills: function deleteStatedSkills(objContext, sProperty, sCandidateId, sSkillsId, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/candidate/\" + sCandidateId + \"/stated-skills/\" + sSkillsId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"DELETE\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-entity-action-compliance-rule\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        /*\n         * Services\n         */\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        _sEntityActionApiBaseUrl: Ember.computed.readOnly(\"env.sEntityActionApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Get compliance rules entity action section\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param objQuery - The query params object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  18 January 2021\n         */\n        getComplianceRulesEntityActionSection: function getComplianceRulesEntityActionSection(objContext, sProperty, objQuery, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/entity-action-section/compliance-rule\");\n\n            a24RestUrlConstruct.addQueryParamObject(objQuery);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sEntityActionApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n        /**\n         * Get compliance rules entity action section\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param objQuery - The query params object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  18 January 2021\n         */\n        getComplianceRulesEntityActions: function getComplianceRulesEntityActions(objContext, sProperty, objQuery, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/entity-action/compliance-rule\");\n\n            a24RestUrlConstruct.addQueryParamObject(objQuery);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sEntityActionApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-entity-action-section\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        _sEntityActionApiBaseUrl: Ember.computed.readOnly(\"env.sEntityActionApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Get entity actions for section\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The property name to get the promise object\n         * @param sSection - The section name\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  12 Feb 2021\n         */\n        getEntityActionsForSection: function getEntityActionsForSection(objContext, sProperty, sSection, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/entity-action-section/\" + sSection);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sEntityActionApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-entity-action\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        /*\n         * Services\n         */\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        _sEntityActionApiBaseUrl: Ember.computed.readOnly(\"env.sEntityActionApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Get entity actions\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sSection - The name of the section\n         * @param objQuery - The query params object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  15 March 2021\n         */\n        getEntityActions: function getEntityActions(objContext, sProperty, sSection, objQuery, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/entity-action/\" + sSection);\n\n            a24RestUrlConstruct.addQueryParamObject(objQuery);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sEntityActionApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-invitation-verification\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Route for invitation verification\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sAgencyGroupId - The id of the agency group\n         * @param sCandidateId - The id of the candidate\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  1 Febuary 2019\n         */\n        resendCandidateInvite: function resendCandidateInvite(objContext, sProperty, sAgencyGroupId, sCandidateId, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/candidate/\" + sCandidateId + \"/invitation-verification\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", Ember.get(this, \"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, {\n                resend: true\n            }));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/services/rest-user-avatar\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Get avatar for the user\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sUserId - The user id to fetch avatar data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  30 October 2019\n         */\n        getAvatar: function getAvatar(objContext, sProperty, sUserId, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/user/\" + sUserId + \"/avatar\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", Ember.get(this, \"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Update avatar for the user\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The user id\n         * @param objData - The contact number data\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  30 October 2019\n         */\n        updateAvatar: function updateAvatar(objContext, sProperty, sUserId, objData, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/user/\" + sUserId + \"/avatar\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Delete avatar for the user\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sUserId - The user id to fetch avatar data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  30 October 2019\n         */\n        deleteAvatar: function deleteAvatar(objContext, sProperty, sUserId, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/user/\" + sUserId + \"/avatar\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"DELETE\", Ember.get(this, \"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-candidate-profile/templates/components/candidate-activities\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"jzx8fkZu\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objParentScroller\\\",\\\"objActivity\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bServerError\\\"]]],null,{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"activities\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false,[22,[\\\"_arrReloadActions\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 text-center padding-normal\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"apiUnavailablePleaseReload\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"card-style-component\\\",null,[[\\\"bApplyDefaultPadding\\\"],[false]],{\\\"statements\\\":[[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"filter-header\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"card-datagrid-filter\\\",null,[[\\\"class\\\",\\\"arrHeaderConfig\\\",\\\"sDatagridHeader\\\",\\\"cardDatagridFilterChangeEvent\\\",\\\"customActionClicked\\\",\\\"arrCustomActions\\\"],[\\\"card-datagrid-filter\\\",[26,\\\"if\\\",[[22,[\\\"_bLoading\\\"]],false,[22,[\\\"_arrFilterConfig\\\"]]],null],[26,\\\"lookup-string\\\",[\\\"activities\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridFilterChangeEvent\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"customActionClicked\\\"],null],[26,\\\"unless\\\",[[22,[\\\"_bLoading\\\"]],[26,\\\"if\\\",[[22,[\\\"sCandidateName\\\"]],[22,[\\\"_arrHeaderActions\\\"]]],null]],null]]]],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"iMaxHeight\\\"],[500]],{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative showActionsOnCollapseHover\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\"],[[22,[\\\"_bLoading\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"_arrActivities\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[20,\\\"horizontal-line-component\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"accordion-item-component\\\",null,[[\\\"sHeader\\\",\\\"sExtraInfo\\\",\\\"sHeaderClass\\\",\\\"sIconName\\\",\\\"arrActionItems\\\",\\\"sIconClass\\\"],[[21,3,[\\\"sLabel\\\"]],[21,3,[\\\"sDate\\\"]],\\\"a24-grey-text-darken-3\\\",[21,3,[\\\"sIcon\\\"]],[21,3,[\\\"arrActions\\\"]],\\\"grey-text\\\"]],{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-left-normal padding-right-normal padding-bottom-normal\\\"],[8],[0,\\\"\\\\n                            \\\"],[1,[26,\\\"view-edit-section-content\\\",null,[[\\\"arrData\\\"],[[21,3,[\\\"arrData\\\"]]]]],false],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[3]},{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"no-data padding-bottom-normal\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"noData\\\"],null],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-small\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"card-datagrid-pager\\\",null,[[\\\"iResultCount\\\",\\\"iPage\\\",\\\"iPerPage\\\",\\\"cardDatagridPagerEvent\\\"],[[22,[\\\"_iResultCount\\\"]],[22,[\\\"_iPage\\\"]],[22,[\\\"_iPerPage\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridPagerEvent\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"onPopupResponsiveDismiss\\\",\\\"bDismissible\\\"],[[22,[\\\"_bShowAddPopup\\\"]],[22,[\\\"_bPopupLoading\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupConfirmationCancel\\\"],null],false]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"bHasIcon\\\",\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[false,[22,[\\\"_sPopupHeader\\\"]],\\\"padding-double popup-header-gray\\\",false,[21,1,[]],[22,[\\\"_objSpecialAddPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"_bShowAddPopup\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-double\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"sOptionsPrompt\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"bMultiSelect\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"activityType\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"activity_type\\\",[26,\\\"lookup-string\\\",[\\\"selectActivity\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],[22,[\\\"_arrActivityTypeAddEditDropdown\\\"]],\\\"sValue\\\",\\\"sTitle\\\",1,true,false,[22,[\\\"_objActivityTypeField\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12 padding-top-small padding-bottom-normal\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[20,\\\"_sActivityTypeSelected\\\"],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text-area\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"bStaticHeader\\\",\\\"sValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"description\\\"],null],\\\"description\\\",2,false,true,[22,[\\\"_sDescription\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text-area\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"bStaticHeader\\\",\\\"sValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"comment\\\"],null],\\\"comment\\\",3,false,true,[22,[\\\"_sComment\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal padding-left-normal font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"a24RequiredFieldsMarked\\\"],null],false],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupConfirmationCancel\\\"]],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupConfirmationConfirm\\\"]],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string\\\",[\\\"save\\\"],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowUnsavedData\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupUnsavedConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"unsavedData\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[1,[26,\\\"email-preview-popup\\\",null,[[\\\"bShowPopup\\\",\\\"onPopupCloseAction\\\",\\\"objActivityData\\\",\\\"objRestActivityEmailComm\\\"],[[22,[\\\"_bShowEmailMessagePopup\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onEmailMessagePopupClose\\\"],null],[22,[\\\"_objEmailActivity\\\"]],[22,[\\\"objRestCandidateActivityEmailComm\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[1,[26,\\\"notification-sent-popup\\\",null,[[\\\"bShowPopup\\\",\\\"objActivityData\\\",\\\"onPopupCloseAction\\\",\\\"objRestActivityNotification\\\"],[[22,[\\\"_bShowNotifcationsSentPopup\\\"]],[22,[\\\"_objNotificationActivity\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onNotificationSentPopupClose\\\"],null],[22,[\\\"objRestCandidateActivityNotification\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[1,[26,\\\"react-popup\\\",null,[[\\\"bShow\\\",\\\"sIFrameUrl\\\",\\\"bLoading\\\",\\\"objData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_bShowReactPopup\\\"]],[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_bReactPopupLoading\\\"]],[22,[\\\"_objReactPopupPostData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecievePopupData\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/candidate-activities.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/candidate-compliance-exemptions\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"BeLJZrkR\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bServerError\\\"]]],null,{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"profileNote\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false,[22,[\\\"_arrReloadActions\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 text-center padding-normal\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"apiUnavailablePleaseReload\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"card-style-component\\\",null,[[\\\"bApplyDefaultPadding\\\",\\\"bHideOverFlow\\\"],[false,false]],{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bPageLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[20,\\\"loading-component\\\"],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            \\\"],[1,[26,\\\"card-datagrid-container\\\",null,[[\\\"_bDatagridLoading\\\",\\\"objQueryParams\\\",\\\"objDatagridConfig\\\",\\\"sUrlBase\\\",\\\"bShareableLink\\\",\\\"bAllowHiddenColumns\\\",\\\"bPostTypeDatagridV2\\\",\\\"cardDatagridTableCell\\\",\\\"cardDatagridTableNoneSelected\\\",\\\"cardDatagridTableOneSelected\\\",\\\"cardDatagridTableMultiSelected\\\",\\\"onWillDoServiceCall\\\"],[[22,[\\\"bDatagridLoading\\\"]],[22,[\\\"objQueryParams\\\"]],[22,[\\\"_objDatagridConfig\\\"]],[22,[\\\"sUrlBase\\\"]],true,true,true,[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableCell\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableNoneSelected\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableOneSelected\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableMultiSelected\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onWillDoServiceCall\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[1,[26,\\\"react-popup\\\",null,[[\\\"bShow\\\",\\\"sIFrameUrl\\\",\\\"bLoading\\\",\\\"objData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_bReactPopupOpen\\\"]],[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_bReactPopupLoading\\\"]],[22,[\\\"_objReactPopupPostData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecieveReactData\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/candidate-compliance-exemptions.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/candidate-dismissals\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"/EcBHb84\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objParentScroller\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bServerError\\\"]]],null,{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"dismissal\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false,[22,[\\\"_arrReloadActions\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 text-center padding-normal\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"apiUnavailablePleaseReload\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bAllowEdit\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[20,\\\"loading-component\\\"],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"dismissal\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],[22,[\\\"_bLoading\\\"]],[26,\\\"unless\\\",[[22,[\\\"_bLoading\\\"]],[22,[\\\"_arrActionItems\\\"]]],null]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[26,\\\"view-edit-section-content\\\",null,[[\\\"arrData\\\",\\\"class\\\"],[[22,[\\\"_arrEmploymentDismissalsDataView\\\"]],\\\"view-edit-section-content-extra-padding\\\"]]],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bReason\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-sm a24-grey-text-darken-1 padding-top-double\\\"],[8],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"reason\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-sm a24-grey-text-darken-1 text-preserve-white-space padding-top-normal\\\"],[8],[0,\\\"\\\\n                        \\\"],[1,[20,\\\"_sReason\\\"],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\"],[[26,\\\"lookup-string\\\",[\\\"comingSoon\\\"],null],false]],{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 padding-top-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"candidateEditableComingSoon\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"sModalSize\\\",\\\"onPopupResponsiveDismiss\\\",\\\"bDismissible\\\"],[[22,[\\\"_bShowEditPopup\\\"]],[22,[\\\"_bPopupLoading\\\"]],false,\\\"modal-lg\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onPopupClose\\\"],null],false]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[[22,[\\\"_sPopupHeader\\\"]],\\\"padding-double popup-header-gray\\\",false,[21,1,[]],[22,[\\\"_objSpecialEditPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"_bShowEditPopup\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-double\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-radio-group\\\",null,[[\\\"bRequired\\\",\\\"sFieldName\\\",\\\"arrRadioButtonItems\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"objSelectedItem\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[true,[26,\\\"lookup-string\\\",[\\\"haveYouEverBeenDismissed\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],[22,[\\\"_arrYesNoRadioButtonItems\\\"]],\\\"bDismissal\\\",1,[22,[\\\"_objDismissalSelected\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"col-md-12\\\",[26,\\\"if\\\",[[22,[\\\"_bShowTextArea\\\"]],\\\"\\\",\\\" display-none\\\"],null]]]],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text-area\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"reason\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"reason\\\",2,true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal padding-left-normal font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"a24RequiredFieldsMarked\\\"],null],false],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupClose\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupEditConfirm\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"save\\\"],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowUnsavedData\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupUnsavedConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"unsavedData\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/candidate-dismissals.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/candidate-equality-monitoring-section-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"eURhCR18\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objParentScroller\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bServerError\\\"]]],null,{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"equalityMonitoring\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false,[22,[\\\"_arrReloadActions\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 text-center padding-normal\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"apiUnavailablePleaseReload\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"equalityMonitoring\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],[22,[\\\"bLoading\\\"]],[22,[\\\"arrActionItems\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"view-edit-section-content\\\",null,[[\\\"arrData\\\"],[[22,[\\\"arrCandidateData\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"onPopupResponsiveDismiss\\\",\\\"bDismissible\\\"],[[22,[\\\"bShowEditPopup\\\"]],[22,[\\\"_bPopupLoading\\\"]],false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupClose\\\"],null],false]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[\\\"Edit Details\\\",\\\"padding-double popup-header-gray\\\",false,[21,1,[]],[22,[\\\"_objSpecialEditPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"bShowEditPopup\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-double\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"arrOptions\\\",\\\"bRequired\\\",\\\"iOrder\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"religion\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"religion\\\",[22,[\\\"_arrReligionDropdown\\\"]],true,1,[22,[\\\"objSelectedReligion\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"arrOptions\\\",\\\"bRequired\\\",\\\"iOrder\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"ethnicOrigin\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"ethnic_origin\\\",[22,[\\\"_arrEthnicOriginDropdown\\\"]],true,2,[22,[\\\"objSelectedEthnicOrigin\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"arrOptions\\\",\\\"bRequired\\\",\\\"iOrder\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"sexualOrientation\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"sexual_orientation\\\",[22,[\\\"_arrSexualOrientationDropdown\\\"]],true,3,[22,[\\\"objSelectedSexualOrientation\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"arrOptions\\\",\\\"bRequired\\\",\\\"iOrder\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"genderIdentity\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"gender_identity\\\",[22,[\\\"_arrGenderIdentityDropdown\\\"]],true,4,[22,[\\\"objSelectedGenderIdentity\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"arrOptions\\\",\\\"bRequired\\\",\\\"iOrder\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"disabled\\\"],null],\\\"disabled\\\",[22,[\\\"_arrDisabledDropdown\\\"]],false,5,[22,[\\\"objSelectedDisabled\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal padding-left-normal font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"a24RequiredFieldsMarked\\\"],null],false],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupClose\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupEditConfirm\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"save\\\"],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"bShowUnsavedData\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupUnsavedConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"unsavedData\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/candidate-equality-monitoring-section-component.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/candidate-exclusions\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"qv4o+irn\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bServerError\\\"]]],null,{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"profileNote\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false,[22,[\\\"_arrReloadActions\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 text-center padding-normal\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"apiUnavailablePleaseReload\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"card-style-component\\\",null,[[\\\"bApplyDefaultPadding\\\",\\\"bHideOverFlow\\\"],[false,false]],{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bPageLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[20,\\\"loading-component\\\"],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            \\\"],[1,[26,\\\"card-datagrid-container\\\",null,[[\\\"_bDatagridLoading\\\",\\\"objQueryParams\\\",\\\"objDatagridConfig\\\",\\\"sUrlBase\\\",\\\"bShareableLink\\\",\\\"bAllowHiddenColumns\\\",\\\"bPostTypeDatagrid\\\",\\\"cardDatagridTableCell\\\",\\\"cardDatagridTableNoneSelected\\\",\\\"cardDatagridTableOneSelected\\\",\\\"cardDatagridTableMultiSelected\\\",\\\"onDidDoServiceCall\\\",\\\"onWillDoServiceCall\\\"],[[22,[\\\"bDatagridLoading\\\"]],[22,[\\\"objQueryParams\\\"]],[22,[\\\"_objDatagridConfig\\\"]],[22,[\\\"sUrlBase\\\"]],true,true,false,[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableCell\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableNoneSelected\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableOneSelected\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableMultiSelected\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onDidDoServiceCall\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onWillDoServiceCall\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[1,[26,\\\"react-popup\\\",null,[[\\\"bShow\\\",\\\"sIFrameUrl\\\",\\\"bLoading\\\",\\\"objData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_bReactPopupOpen\\\"]],[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_bReactPopupLoading\\\"]],[22,[\\\"_objReactPopupPostData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecieveReactData\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/candidate-exclusions.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/candidate-external-days-to-expiry\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"XUKnildM\", \"block\": \"{\\\"symbols\\\":[\\\"objItem\\\"],\\\"statements\\\":[[4,\\\"card-style-component\\\",null,[[\\\"bApplyDefaultPadding\\\"],[false]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"filter-header\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"cardDatagridFiltersContainer\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"cardDatagridFilterHeader\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"lookup-string\\\",[\\\"externalDaysToExpiry\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"iMaxHeight\\\"],[500]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative showActionsOnCollapseHover\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\"],[[22,[\\\"bLoading\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"_arrExternalDaysToExpiryDataView\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[1,[20,\\\"horizontal-line-component\\\"],false],[0,\\\"\\\\n                \\\"],[1,[26,\\\"accordion-item-component\\\",null,[[\\\"sHeader\\\",\\\"sExtraInfo\\\",\\\"sHeaderClass\\\",\\\"sIconName\\\",\\\"sIconClass\\\"],[[21,1,[\\\"sLabel\\\"]],[21,1,[\\\"sExtra\\\"]],\\\"a24-grey-text-darken-3\\\",[21,1,[\\\"sIcon\\\"]],\\\"grey-text\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"no-data padding-bottom-normal\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"noData\\\"],null],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/candidate-external-days-to-expiry.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/candidate-external-documents\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"MUJelwud\", \"block\": \"{\\\"symbols\\\":[\\\"objDocument\\\"],\\\"statements\\\":[[4,\\\"card-style-component\\\",null,[[\\\"bApplyDefaultPadding\\\"],[false]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"filter-header\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"card-datagrid-filter\\\",null,[[\\\"class\\\",\\\"arrHeaderConfig\\\",\\\"sDatagridHeader\\\",\\\"cardDatagridFilterChangeEvent\\\"],[\\\"card-datagrid-filter\\\",[26,\\\"if\\\",[[22,[\\\"_bLoading\\\"]],false,[22,[\\\"_arrFilterConfig\\\"]]],null],[26,\\\"lookup-string\\\",[\\\"externalDocuments\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridFilterChangeEvent\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"iMaxHeight\\\"],[500]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative showActionsOnCollapseHover\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\"],[[22,[\\\"bLoading\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"_arrExternalDocumentsDataView\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[1,[20,\\\"horizontal-line-component\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"accordion-item-component\\\",null,[[\\\"sHeader\\\",\\\"sExtraInfo\\\",\\\"sHeaderClass\\\",\\\"sIconName\\\",\\\"sIconClass\\\"],[[21,1,[\\\"sLabel\\\"]],[21,1,[\\\"sExtra\\\"]],\\\"a24-grey-text-darken-3\\\",[21,1,[\\\"sIcon\\\"]],\\\"grey-text\\\"]],{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-left-normal padding-right-normal padding-bottom-normal\\\"],[8],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"view-edit-section-content\\\",null,[[\\\"arrData\\\"],[[21,1,[\\\"arrItems\\\"]]]]],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"no-data padding-bottom-normal\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"noData\\\"],null],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/candidate-external-documents.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/candidate-external-general\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"wuJnt4Wf\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\"],[[26,\\\"lookup-string\\\",[\\\"externalGeneral\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],[22,[\\\"bLoading\\\"]]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"view-edit-section-content\\\",null,[[\\\"arrData\\\"],[[22,[\\\"_arrExternalDataView\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/candidate-external-general.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/candidate-external-verification\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"RiekDZeb\", \"block\": \"{\\\"symbols\\\":[\\\"objItem\\\"],\\\"statements\\\":[[4,\\\"card-style-component\\\",null,[[\\\"bApplyDefaultPadding\\\"],[false]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"filter-header\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"cardDatagridFiltersContainer\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"cardDatagridFilterHeader\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"lookup-string\\\",[\\\"externalVerification\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"iMaxHeight\\\"],[500]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative showActionsOnCollapseHover\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\"],[[22,[\\\"bLoading\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"_arrExternalVerificationDataView\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[1,[20,\\\"horizontal-line-component\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"accordion-item-component\\\",null,[[\\\"sHeader\\\",\\\"sExtraInfo\\\",\\\"sHeaderClass\\\",\\\"sIconName\\\",\\\"sIconClass\\\"],[[21,1,[\\\"sLabel\\\"]],[21,1,[\\\"sExtra\\\"]],\\\"a24-grey-text-darken-3\\\",[21,1,[\\\"sIcon\\\"]],\\\"grey-text\\\"]],{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-left-normal padding-right-normal padding-bottom-normal\\\"],[8],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"view-edit-section-content\\\",null,[[\\\"arrData\\\"],[[21,1,[\\\"arrItems\\\"]]]]],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1]},{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"no-data padding-bottom-normal\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"noData\\\"],null],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/candidate-external-verification.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/candidate-info-section-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"Y4Kti1vs\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objParentScroller\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bServerError\\\"]]],null,{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"personalInfo\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false,[22,[\\\"_arrReloadActions\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 text-center padding-normal\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"apiUnavailablePleaseReload\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"personalInfo\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],[22,[\\\"_bLoading\\\"]],[22,[\\\"_arrHeaderActions\\\"]]]],{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"bShowAvatar\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"candidate-profile-picture padding-bottom-normal\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bAddAvatarUploading\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[26,\\\"progress-loader-component\\\",null,[[\\\"iProgress\\\",\\\"sLoaderText\\\"],[[22,[\\\"_iUploadProgress\\\"]],[22,[\\\"_sLoaderText\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[[26,\\\"if\\\",[[22,[\\\"_sAvatar\\\"]],\\\"padding-bottom-normal\\\",[26,\\\"if\\\",[[22,[\\\"_bIsCandidateContext\\\"]],\\\"padding-bottom-normal\\\",\\\"padding-bottom-double\\\"],null]],null]]]],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sRoundButtonSize\\\",\\\"sIconSizeClass\\\",\\\"sIcon\\\",\\\"sImageUrl\\\",\\\"sBackgroundClass\\\",\\\"sIconClass\\\",\\\"onRoundIconClick\\\",\\\"bClickable\\\"],[[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_SIZE_JUMBO\\\",[22,[\\\"_objLibConstants\\\"]]],null],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_CONTENT_SIZE_JUMBO\\\",[22,[\\\"_objLibConstants\\\"]]],null],[22,[\\\"_sProfileIcon\\\"]],[22,[\\\"_sAvatar\\\"]],\\\"grey lighten-2\\\",\\\"a24-grey-text-darken-1\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onProfilePicPopupToggle\\\",true],null],[22,[\\\"_bIsCandidateContext\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bIsCandidateContext\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-bottom-double cursor-clickable a24-primary-color-text-hue-3\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onProfilePicPopupToggle\\\",true]],[8],[0,\\\"\\\\n                        \\\"],[1,[20,\\\"_sChangeImage\\\"],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_sAvatar\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-bottom-double cursor-clickable a24-primary-color-text-hue-3\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onDeleteTextClicked\\\"]],[8],[0,\\\"\\\\n                            \\\"],[1,[26,\\\"lookup-string\\\",[\\\"removeAvatar\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[1,[26,\\\"view-edit-section-content\\\",null,[[\\\"arrData\\\"],[[22,[\\\"arrCandidateData\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"onPopupResponsiveDismiss\\\",\\\"bDismissible\\\"],[[22,[\\\"_bShowEditPopup\\\"]],[22,[\\\"_bPopupLoading\\\"]],false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupClose\\\"],null],false]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[[22,[\\\"_sPopupHeader\\\"]],\\\"padding-double popup-header-gray\\\",false,[21,1,[]],[22,[\\\"_objSpecialAddEditPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"_bShowEditPopup\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-double\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"arrOptions\\\",\\\"bRequired\\\",\\\"iOrder\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"title\\\"],null],\\\"title\\\",[22,[\\\"_arrTitleDropdown\\\"]],false,0,[22,[\\\"_objSelectedTitle\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"firstName\\\"],null],\\\"first_name\\\",1,true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"lastName\\\"],null],\\\"last_name\\\",2,true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"arrOptions\\\",\\\"bRequired\\\",\\\"iOrder\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"gender\\\"],null],\\\"gender\\\",[22,[\\\"_arrGenderDropdown\\\"]],false,3,[22,[\\\"_objSelectedGender\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-date-picker\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"objMinDate\\\",\\\"objMaxDate\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"dateOfBirth\\\"],null],\\\"date_of_birth\\\",4,false,[22,[\\\"_objMinDate\\\"]],[22,[\\\"_objMaxDate\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bAllowEditIdNumber\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"idNumber\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"id_number\\\",5,false,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"_bAllowEditCandidateType\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"arrOptions\\\",\\\"bRequired\\\",\\\"iOrder\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"candidateType\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"candidate_type_id\\\",[22,[\\\"_arrCandidateTypeDropdown\\\"]],true,6,[22,[\\\"_objSelectedCandidateType\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal padding-left-normal font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"a24RequiredFieldsMarked\\\"],null],false],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupClose\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupEditConfirm\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"save\\\"],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowUnsavedData\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupUnsavedConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"unsavedData\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[1,[26,\\\"image-cropper-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"sHeader\\\",\\\"sAvatar\\\",\\\"_bScriptLoaded\\\",\\\"_objCropper\\\",\\\"_funcCreateObjectUrl\\\",\\\"onUploadImage\\\",\\\"onDeleteImage\\\",\\\"onPopupToggle\\\"],[[22,[\\\"_bOpenProfilePic\\\"]],[22,[\\\"_bProfilePicLoading\\\"]],[22,[\\\"_sProfilePicHeader\\\"]],[22,[\\\"_sAvatar\\\"]],[22,[\\\"_bScriptLoaded\\\"]],[22,[\\\"_objCropper\\\"]],[22,[\\\"_funcCreateObjectUrl\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onUploadImage\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onDeleteImage\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onProfilePicPopupToggle\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"bLoading\\\",\\\"onPopupConfirmationCancel\\\",\\\"onPopupBackdropClick\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowDeleteConfirm\\\"]],false,[22,[\\\"_bDeletePopupLoading\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupDeletePopupClose\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupDeletePopupClose\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupDeleteConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"removeCandidateAvatarConfirmation\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/candidate-info-section-component.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/candidate-languages\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"QN2kPw4V\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objParentScroller\\\",\\\"objLanguage\\\",\\\"iIndex\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bServerError\\\"]]],null,{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"languages\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false,[22,[\\\"_arrReloadActions\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 text-center padding-normal\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"apiUnavailablePleaseReload\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"card-style-component\\\",null,[[\\\"bApplyDefaultPadding\\\"],[false]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"sHeaderSizeClass\\\",\\\"arrActionItems\\\",\\\"class\\\"],[[26,\\\"lookup-string\\\",[\\\"languages\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_HEADER_SIZE_LARGE\\\",[22,[\\\"_objLibConstants\\\"]]],null],[26,\\\"unless\\\",[[22,[\\\"_bLoading\\\"]],[22,[\\\"_arrHeaderActions\\\"]]],null],\\\"padding-left-normal padding-right-small padding-top-double padding-bottom-normal\\\"]]],false],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative showActionsOnCollapseHover\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\"],[[22,[\\\"_bLoading\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"_arrLanguages\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[1,[20,\\\"horizontal-line-component\\\"],false],[0,\\\"\\\\n                \\\"],[1,[26,\\\"accordion-item-component\\\",null,[[\\\"sHeader\\\",\\\"sExtraInfo\\\",\\\"sHeaderClass\\\",\\\"sIconName\\\",\\\"sIconClass\\\",\\\"arrActionItems\\\",\\\"bExpanded\\\"],[[21,3,[\\\"sValue\\\"]],[21,3,[\\\"sLabel\\\"]],\\\"a24-grey-text-darken-3\\\",[21,3,[\\\"sIcon\\\"]],\\\"grey-text\\\",[21,3,[\\\"arrActions\\\"]],[26,\\\"if\\\",[[21,4,[]],false,true],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3,4]},{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"no-data padding-bottom-normal\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"noData\\\"],null],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"onPopupResponsiveDismiss\\\",\\\"bDismissible\\\"],[[22,[\\\"_bShowLanguagePopup\\\"]],[22,[\\\"_bPopupLoading\\\"]],false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupAddEditCancel\\\"],null],false]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[[22,[\\\"_sHeaderPopup\\\"]],\\\"padding-double popup-header-gray\\\",false,[21,1,[]],[22,[\\\"_objSpecialAddEditPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"bShowEmailEditPopup\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-double\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"arrOptions\\\",\\\"objValue\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"languageName\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"code\\\",1,[22,[\\\"_arrLanguageOptions\\\"]],[22,[\\\"objSelectedLanguage\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onErrorMessageSetAction\\\"],null]]]],false],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"arrOptions\\\",\\\"objValue\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"languageProficiency\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"proficiency\\\",2,[22,[\\\"_arrProficiencyOptions\\\"]],[22,[\\\"objSelectedProficiency\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onErrorMessageSetAction\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal padding-left-normal font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"a24RequiredFieldsMarked\\\"],null],false],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupAddEditCancel\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupAddEditConfirm\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"save\\\"],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowUnsavedData\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupUnsavedConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"unsavedData\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\",\\\"onPopupConfirmationCancel\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowConfirmRemoveData\\\"]],[22,[\\\"_bLoadingRemovePopup\\\"]],false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupRemoveConfirm\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupRemoveCancel\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"removeConfirmation\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/candidate-languages.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/candidate-misc-details\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"lynTzwvx\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objParentScroller\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bServerError\\\"]]],null,{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"miscDetails\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false,[22,[\\\"_arrReloadActions\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 text-center padding-normal\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"apiUnavailablePleaseReload\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"miscDetails\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],[22,[\\\"_bLoading\\\"]],[26,\\\"unless\\\",[[22,[\\\"_bLoading\\\"]],[22,[\\\"_arrActionItems\\\"]]],null]]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"view-edit-section-content\\\",null,[[\\\"arrData\\\"],[[22,[\\\"_arrMiscData\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"onPopupResponsiveDismiss\\\",\\\"bDismissible\\\"],[[22,[\\\"_bShowEditPopup\\\"]],[22,[\\\"_bPopupLoading\\\"]],false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupClose\\\"],null],false]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[[22,[\\\"_sPopupHeader\\\"]],\\\"padding-double popup-header-gray\\\",false,[21,1,[]],[22,[\\\"_objSpecialEditPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"_bShowEditPopup\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-double\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"arrOptions\\\",\\\"bRequired\\\",\\\"iOrder\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"transportType\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"transport_type\\\",[22,[\\\"_arrTransportTypeDropdownItems\\\"]],false,1,[22,[\\\"_objSelectedTransportType\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal padding-left-normal font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"a24RequiredFieldsMarked\\\"],null],false],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupClose\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupEditConfirm\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"save\\\"],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowUnsavedData\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupUnsavedConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"unsavedData\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/candidate-misc-details.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/candidate-next-of-kin\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"FZLVdrq9\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objParentScroller\\\",\\\"objCandidateData\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bServerError\\\"]]],null,{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"nextOfKin\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false,[22,[\\\"_arrReloadActions\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 text-center padding-normal\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"apiUnavailablePleaseReload\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"card-style-component\\\",null,[[\\\"bApplyDefaultPadding\\\"],[false]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"sHeaderSizeClass\\\",\\\"arrActionItems\\\",\\\"class\\\"],[[26,\\\"lookup-string\\\",[\\\"nextOfKin\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_HEADER_SIZE_LARGE\\\",[22,[\\\"_objLibConstants\\\"]]],null],[22,[\\\"_arrHeaderActions\\\"]],\\\"padding-left-normal padding-right-small padding-top-double padding-bottom-normal\\\"]]],false],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative showActionsOnCollapseHover\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\"],[[22,[\\\"_bLoading\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"_arrCandidateData\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[1,[20,\\\"horizontal-line-component\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"accordion-item-component\\\",null,[[\\\"sIconName\\\",\\\"sIconClass\\\",\\\"sHeader\\\",\\\"sExtraInfo\\\",\\\"arrActionItems\\\",\\\"sHeaderClass\\\"],[[21,3,[\\\"sIcon\\\"]],\\\"grey-text\\\",[21,3,[\\\"sName\\\"]],[21,3,[\\\"sExtra\\\"]],[21,3,[\\\"arrActions\\\"]],\\\"a24-grey-text-darken-3\\\"]],{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-left-normal padding-right-normal padding-bottom-normal\\\"],[8],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"view-edit-section-content\\\",null,[[\\\"arrData\\\"],[[21,3,[\\\"arrItems\\\"]]]]],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[3]},{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"no-data padding-bottom-normal\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"noData\\\"],null],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"onPopupResponsiveDismiss\\\",\\\"bDismissible\\\"],[[22,[\\\"_bShowAddEditPopup\\\"]],[22,[\\\"_bPopupLoading\\\"]],false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupAddEditCancel\\\"],null],false]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[[22,[\\\"_sHeaderPopup\\\"]],\\\"padding-double popup-header-gray\\\",false,[21,1,[]],[22,[\\\"_objSpecialAddEditPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"_bShowAddEditPopup\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-double\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"name\\\"],null],\\\"name\\\",0,true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"relationship\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"relationship\\\",1,true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"contactNumber\\\"],null],\\\"contact_number\\\",2,true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"comment\\\"],null],\\\"comment\\\",3,false,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"arrOptions\\\",\\\"objValue\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"addressType\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"address.type\\\",4,[22,[\\\"_arrAddressTypeDropdown\\\"]],[22,[\\\"_objSelectedAddressType\\\"]],[22,[\\\"_bAddressFieldsRequired\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"addressLine1\\\"],null],\\\"address.address_line1\\\",5,[22,[\\\"_bAddressFieldsRequired\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"addressLine2\\\"],null],\\\"address.address_line2\\\",6,false,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"cityTown\\\"],null],\\\"address.city\\\",7,false,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-localised-string\\\",[\\\"postCode\\\",[22,[\\\"_sSelectedCountryCode\\\"]]],null],\\\"address.post_code\\\",8,[22,[\\\"_bAddressFieldsRequired\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"col-md-12\\\",[26,\\\"if\\\",[[22,[\\\"_bIsUkSaCountry\\\"]],\\\"\\\",\\\" display-none\\\"],null]]]],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-suggest\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"bRequired\\\",\\\"sOptionsLabelKey\\\",\\\"iOrder\\\",\\\"iSuggestAt\\\",\\\"iSuggestDelay\\\",\\\"bShowLoaderDuringSuggest\\\",\\\"bAlwaysShowOnFocus\\\",\\\"funcGetSuggestions\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-localised-string\\\",[\\\"province\\\",[22,[\\\"_sSelectedCountryCode\\\"]]],null],\\\"province_uksa\\\",[22,[\\\"_bAddressFieldsRequired\\\"]],\\\"sLabel\\\",9,0,0,false,true,[22,[\\\"_funcGetCountiesSuggestions\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"col-md-12\\\",[26,\\\"unless\\\",[[22,[\\\"_bIsUkSaCountry\\\"]],\\\"\\\",\\\" display-none\\\"],null]]]],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-localised-string\\\",[\\\"province\\\",[22,[\\\"_sSelectedCountryCode\\\"]]],null],\\\"province_other\\\",9,[22,[\\\"_bAddressFieldsRequired\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"arrOptions\\\",\\\"objValue\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"country\\\"],null],\\\"address.country_code\\\",10,[22,[\\\"_arrCountryDropdown\\\"]],[22,[\\\"_objSelectedCountry\\\"]],[22,[\\\"_bAddressFieldsRequired\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal padding-left-normal font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"a24RequiredFieldsMarked\\\"],null],false],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupAddEditCancel\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupAddEditConfirm\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"save\\\"],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowUnsavedData\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupUnsavedConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"unsavedData\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"bLoading\\\",\\\"onPopupConfirmationCancel\\\",\\\"onPopupBackdropClick\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowDeleteConfirm\\\"]],false,[22,[\\\"_bPopupLoading\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupClose\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupClose\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupDeleteConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"removeConfirmation\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/candidate-next-of-kin.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/candidate-other-names\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"WTUyPuNT\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objParentScroller\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bServerError\\\"]]],null,{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"otherNames\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false,[22,[\\\"_arrReloadActions\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 text-center padding-normal\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"apiUnavailablePleaseReload\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"otherNames\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],[22,[\\\"_bLoading\\\"]],[26,\\\"unless\\\",[[22,[\\\"_bLoading\\\"]],[22,[\\\"_arrHeaderActions\\\"]]],null]]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"view-edit-section-content\\\",null,[[\\\"arrData\\\"],[[22,[\\\"_arrCandidateData\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"onPopupResponsiveDismiss\\\",\\\"bDismissible\\\"],[[22,[\\\"_bShowEditPopup\\\"]],[22,[\\\"_bPopupLoading\\\"]],false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupEditCancel\\\"],null],false]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[[22,[\\\"_sHeaderPopup\\\"]],\\\"padding-double popup-header-gray\\\",false,[21,1,[]],[22,[\\\"_objSpecialEditPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"_bShowEditPopup\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-double\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"knownAs\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"known_as\\\",1,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"middleName\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"middle_name\\\",2,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"maidenName\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"maiden_name\\\",3,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal padding-left-normal font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"a24RequiredFieldsMarked\\\"],null],false],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupEditCancel\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupEditConfirm\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"save\\\"],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowUnsavedData\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupUnsavedConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"unsavedData\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/candidate-other-names.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/candidate-plugins-overview\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"9PPYAeF2\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objParentScroller\\\",\\\"objPlugin\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bPluginLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[20,\\\"loading-component\\\"],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"each\\\",[[22,[\\\"_arrPluginData\\\"]]],null,{\\\"statements\\\":[[4,\\\"card-style-component\\\",null,null,{\\\"statements\\\":[[4,\\\"iframe-component\\\",null,[[\\\"sHeading\\\",\\\"sIFrameUrl\\\"],[[21,3,[\\\"sHeader\\\"]],[21,3,[\\\"sIFrameUrl\\\"]]]],{\\\"statements\\\":[[4,\\\"if\\\",[[21,3,[\\\"sPluginUrl\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bIsCandidateContext\\\"]]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[11,\\\"href\\\",[27,[[21,3,[\\\"sPluginUrl\\\"]]]]],[8],[0,\\\"\\\\n                                \\\"],[1,[26,\\\"lookup-string\\\",[\\\"manage\\\"],null],false],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onAgencyGroupManageClick\\\",[21,3,[\\\"sPluginUrl\\\"]],[21,3,[\\\"sHeader\\\"]]]],[8],[0,\\\"\\\\n                                \\\"],[1,[26,\\\"lookup-string\\\",[\\\"manage\\\"],null],false],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[3]},null]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"onPopupResponsiveDismiss\\\",\\\"bDismissible\\\",\\\"sModalSize\\\"],[[22,[\\\"_bShowManagePopup\\\"]],[22,[\\\"_bPluginLoading\\\"]],false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupClose\\\"],null],false,\\\"popup-responsive-full\\\"]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[[22,[\\\"_sIFrameHeader\\\"]],\\\"padding-double popup-header-gray\\\",false,[21,1,[]],[22,[\\\"_objSpecialEditPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"bShowEditPopup\\\"]]]],{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bShowManagePopup\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[26,\\\"iframe-component\\\",null,[[\\\"bFullscreen\\\",\\\"bLoading\\\",\\\"sIFrameUrl\\\"],[true,[22,[\\\"_bPluginLoading\\\"]],[22,[\\\"_sIFrameUrl\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/candidate-plugins-overview.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/candidate-position-held\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"znEgCO6F\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objPositionHeld\\\",\\\"iIndex\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bServerError\\\"]]],null,{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"positionHeld\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false,[22,[\\\"_arrReloadActions\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 text-center padding-normal\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"apiUnavailablePleaseReload\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"card-style-component\\\",null,[[\\\"bApplyDefaultPadding\\\"],[false]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"sHeaderSizeClass\\\",\\\"arrActionItems\\\",\\\"class\\\"],[[26,\\\"lookup-string\\\",[\\\"positionHeld\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_HEADER_SIZE_LARGE\\\",[22,[\\\"_objLibConstants\\\"]]],null],[22,[\\\"_arrHeaderActions\\\"]],\\\"padding-left-normal padding-right-small padding-top-double padding-bottom-normal\\\"]]],false],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative showActionsOnCollapseHover\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\"],[[22,[\\\"_bLoading\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_arrPositionHeld\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-left-normal padding-right-normal padding-bottom-double a24-grey-text-darken-1 full-width\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"lookup-string\\\",[\\\"positionHeldDescription\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"full-width chart-padding padding-right-double\\\"],[8],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"chart-component\\\",null,[[\\\"sType\\\",\\\"objData\\\",\\\"objOptions\\\"],[\\\"horizontalBar\\\",[22,[\\\"_objChartData\\\"]],[22,[\\\"_objChartOptions\\\"]]]]],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"checkbox-container\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"checkbox-inner-container\\\"],[8],[0,\\\"\\\\n                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-strings-html-black-text workSuggestHeading\\\"],[8],[0,\\\"\\\\n                                \\\"],[1,[26,\\\"lookup-string\\\",[\\\"workSuggest\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"spacer-div1\\\"],[8],[9],[0,\\\"\\\\n                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"checkbox-list\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"_arrPositionHeld\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                    \\\"],[6,\\\"div\\\"],[8],[0,\\\"\\\\n                                        \\\"],[1,[26,\\\"input-form-checkbox\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bValue\\\",\\\"mCheckboxValue\\\",\\\"bDisabled\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[\\\"\\\",[21,2,[\\\"sProperty\\\"]],[21,3,[]],[21,2,[\\\"bActive\\\"]],[21,2,[]],[22,[\\\"_bNoUpdatePermission\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n                                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2,3]},null],[0,\\\"                            \\\"],[9],[0,\\\"\\\\n                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"spacer-div2\\\"],[8],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"no-data padding-bottom-normal\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"noData\\\"],null],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"onPopupResponsiveDismiss\\\",\\\"bDismissible\\\"],[[22,[\\\"_bShowConfirmation\\\"]],[22,[\\\"_bPopupLoading\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupCancel\\\"],null],false]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-double\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[20,\\\"_sPopupMessage\\\"],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal padding-left-double padding-right-double\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupCancel\\\"]],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button-blue waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupConfirm\\\"]],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/candidate-position-held.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/candidate-qualifications\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"jYcZuldC\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"bMobileView\\\",\\\"bMobileView\\\",\\\"objParentScroller\\\",\\\"objItem\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bServerError\\\"]]],null,{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[22,[\\\"_sCardHeader\\\"]],[22,[\\\"_bLoading\\\"]],[22,[\\\"_arrReloadActions\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 text-center padding-normal\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"apiUnavailablePleaseReload\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bAllowEdit\\\"]]],null,{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[22,[\\\"_sCardHeader\\\"]],[22,[\\\"_bLoading\\\"]],[26,\\\"unless\\\",[[22,[\\\"_bLoading\\\"]],[22,[\\\"_arrHeaderActions\\\"]]],null]]],{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bNoData\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal padding-bottom-normal\\\"],[8],[1,[26,\\\"if\\\",[[22,[\\\"_bIsAgency\\\"]],[26,\\\"lookup-string\\\",[\\\"noData\\\"],null],[26,\\\"lookup-string-html\\\",[\\\"noQualificationsData\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null]],null],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                \\\"],[1,[26,\\\"input-form-search\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"bUpdateValueOnType\\\",\\\"iOrder\\\",\\\"bGhostProperty\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"class\\\"],[[26,\\\"lookup-string\\\",[\\\"typeHereToSearhBelow\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"sSearchCurrentQualifications\\\",true,1,true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],\\\"padding-bottom-normal\\\"]]],false],[0,\\\"\\\\n                \\\"],[1,[26,\\\"component-sort\\\",null,[[\\\"arrComponents\\\",\\\"sFilterProperty\\\",\\\"sFilterValue\\\",\\\"sSortProperty\\\",\\\"sInnerSortProperty\\\",\\\"sGroupTitleStyle\\\"],[[22,[\\\"_arrSortComponents\\\"]],\\\"objData.sTitle\\\",[22,[\\\"_sFilterCurrentQualificationsValue\\\"]],\\\"objData.sTitle\\\",\\\"objData.sTitle\\\",\\\"font-lg a24-grey-text-darken-3\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\"],[[26,\\\"lookup-string\\\",[\\\"comingSoon\\\"],null],false]],{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 padding-top-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"candidateEditableComingSoon\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"bDismissible\\\",\\\"sModalSize\\\",\\\"onPopupResponsiveDismiss\\\"],[[22,[\\\"_bShowManagePopup\\\"]],[22,[\\\"_bPopupLoading\\\"]],false,false,\\\"modal-lg\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onPopupManageCancel\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"class\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"bEllipseHeader\\\",\\\"objSpecialAction\\\"],[[22,[\\\"_sManagePopupHeader\\\"]],\\\"padding-double grey lighten-3\\\",false,[21,3,[]],false,[22,[\\\"_objSpecialPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"bShowPopup\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"container padding-left-double padding-right-double padding-top-normal\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row padding-bottom-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"lookup-string\\\",[\\\"existingQualifications\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row padding-bottom-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"_arrCandidateQualificationsSortComponent\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[1,[26,\\\"component\\\",[[21,5,[\\\"sComponent\\\"]]],[[\\\"objData\\\",\\\"objActions\\\"],[[21,5,[\\\"objData\\\"]],[21,5,[\\\"objActions\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"grey-text\\\"],[8],[0,\\\"\\\\n                            \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"noExistingQualifications\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row padding-bottom-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[20,\\\"horizontal-line-component\\\"],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row padding-bottom-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"lookup-string\\\",[\\\"availableQualifications\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12 padding-bottom-normal\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-search\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"bUpdateValueOnType\\\",\\\"iOrder\\\",\\\"bGhostProperty\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"typeHereToSearhBelow\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"sSearchQualifications\\\",true,2,true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12 padding-bottom-normal\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"candidate-system-skills-list-wrapper\\\"],[8],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"component-sort\\\",null,[[\\\"arrComponents\\\",\\\"sFilterProperty\\\",\\\"sFilterValue\\\",\\\"sSortProperty\\\",\\\"sInnerSortProperty\\\",\\\"sGroupTitleStyle\\\"],[[22,[\\\"_arrQualificationsSortComponents\\\"]],\\\"objData.sTitle\\\",[22,[\\\"_sFilterQualificationsValue\\\"]],\\\"objData.sTitle\\\",\\\"objData.sTitle\\\",\\\"candidate-system-skills-list\\\"]]],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal display-inline-block float-right\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupManageCancel\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"done\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"bDismissible\\\",\\\"sModalSize\\\",\\\"onPopupResponsiveDismiss\\\"],[[22,[\\\"_bShowQualificationView\\\"]],false,false,\\\"modal-lg\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onPopupQualificationViewCancel\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"class\\\",\\\"bHasBlock\\\",\\\"bEllipseHeader\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\",\\\"arrActionItems\\\"],[[22,[\\\"_sViewQualificationHeader\\\"]],\\\"padding-double grey lighten-3\\\",false,false,[21,2,[]],[22,[\\\"_objSpecialViewQualificationPopupAction\\\"]],[22,[\\\"_arrViewQualificationHeaderActions\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-double\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"view-edit-section-content\\\",null,[[\\\"arrData\\\"],[[22,[\\\"_arrViewQualificationData\\\"]]]]],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal display-inline-block float-right\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupQualificationViewDone\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"done\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"bDismissible\\\",\\\"sModalSize\\\",\\\"onPopupResponsiveDismiss\\\"],[[22,[\\\"_bShowQualificationEdit\\\"]],[22,[\\\"_bPopupQualificationLoading\\\"]],false,false,\\\"modal-lg\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onPopupQualificationAddEditCancel\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"class\\\",\\\"bHasBlock\\\",\\\"bEllipseHeader\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[[22,[\\\"_sAddEditQualificationHeader\\\"]],\\\"padding-double grey lighten-3\\\",false,false,[21,1,[]],[22,[\\\"_objSpecialAddEditQualificationPopupAction\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-double\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"input-form-date-picker\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"objMaxDate\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"dateObtained\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"obtained_at\\\",3,[22,[\\\"_objStartDateMaxDate\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"input-form-date-picker\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"objMaxDate\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"expiryDate\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"expires_at\\\",4,[22,[\\\"_objStartDateMaxDate\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"institution\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"institution\\\",5,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal display-inline-block float-right\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupQualificationAddEditCancel\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupQualificationAddEditSave\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"save\\\"],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"bLoading\\\",\\\"onPopupConfirmationCancel\\\",\\\"onPopupBackdropClick\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowDeleteConfirm\\\"]],false,[22,[\\\"_bPopupDeleteLoading\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupDeleteClose\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupDeleteClose\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupDeleteConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"removeConfirmation\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowUnsavedData\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupUnsavedConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"unsavedData\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"bLoading\\\",\\\"onPopupConfirmationCancel\\\",\\\"onPopupBackdropClick\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowVerifyConfirm\\\"]],false,[22,[\\\"_bPopupVerifyLoading\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupVerifyClose\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupVerifyClose\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupVerifyConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"verifyConfirmation\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/candidate-qualifications.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/candidate-skills\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"JNQOLtoo\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"bMobileView\\\",\\\"objParentScroller\\\",\\\"objItem\\\",\\\"bMobileView\\\",\\\"objParentScroller\\\",\\\"objItem\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bServerError\\\"]]],null,{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[22,[\\\"_sCardHeader\\\"]],[22,[\\\"_bLoading\\\"]],[22,[\\\"_arrReloadActions\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 text-center padding-normal\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"apiUnavailablePleaseReload\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bAllowEdit\\\"]]],null,{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[22,[\\\"_sCardHeader\\\"]],[22,[\\\"_bLoading\\\"]],[26,\\\"unless\\\",[[22,[\\\"_bLoading\\\"]],[22,[\\\"_arrHeaderActions\\\"]]],null]]],{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bNoData\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal padding-bottom-normal\\\"],[8],[1,[26,\\\"if\\\",[[22,[\\\"_bIsAgency\\\"]],[26,\\\"lookup-string\\\",[\\\"noData\\\"],null],[26,\\\"lookup-string-html\\\",[\\\"noSkillsData\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null]],null],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                \\\"],[1,[26,\\\"input-form-search\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"bUpdateValueOnType\\\",\\\"iOrder\\\",\\\"bGhostProperty\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"class\\\"],[[26,\\\"lookup-string\\\",[\\\"typeHereToSearhBelow\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"sSearchCurrentSkills\\\",true,1,true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],\\\"padding-bottom-normal\\\"]]],false],[0,\\\"\\\\n                \\\"],[1,[26,\\\"component-sort\\\",null,[[\\\"arrComponents\\\",\\\"arrGroupings\\\",\\\"sFilterProperty\\\",\\\"sFilterValue\\\",\\\"sInnerSortProperty\\\",\\\"sGroupTitleStyle\\\"],[[22,[\\\"_arrSortComponents\\\"]],[22,[\\\"_arrGroupings\\\"]],\\\"objData.sTitle\\\",[22,[\\\"_sFilterCurrentSkillsValue\\\"]],\\\"objData.sTitle\\\",\\\"font-lg a24-grey-text-darken-3\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\"],[[26,\\\"lookup-string\\\",[\\\"comingSoon\\\"],null],false]],{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 padding-top-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"candidateEditableComingSoon\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"bDismissible\\\",\\\"sModalSize\\\",\\\"onPopupResponsiveDismiss\\\"],[[22,[\\\"_bShowManagePopup\\\"]],[22,[\\\"_bPopupLoading\\\"]],false,false,\\\"modal-lg\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onPopupManageCancel\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"class\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"bEllipseHeader\\\",\\\"objSpecialAction\\\"],[[22,[\\\"_sManagePopupHeader\\\"]],\\\"padding-double grey lighten-3\\\",false,[21,5,[]],false,[22,[\\\"_objSpecialPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"bShowPopup\\\"]]]],{\\\"statements\\\":[[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"container padding-left-double padding-right-double padding-top-normal\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row padding-bottom-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"lookup-string\\\",[\\\"existingSkills\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row padding-bottom-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"_arrCandidateSkillsSortComponent\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[1,[26,\\\"component\\\",[[21,7,[\\\"sComponent\\\"]]],[[\\\"objData\\\",\\\"objActions\\\"],[[21,7,[\\\"objData\\\"]],[21,7,[\\\"objActions\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[7]},{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"grey-text\\\"],[8],[0,\\\"\\\\n                            \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"noExistingSkills\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row padding-bottom-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[20,\\\"horizontal-line-component\\\"],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row padding-bottom-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"lookup-string\\\",[\\\"availableSkills\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12 padding-bottom-normal\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-search\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"bUpdateValueOnType\\\",\\\"iOrder\\\",\\\"bGhostProperty\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"typeHereToSearhBelow\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"sSearchSkills\\\",true,2,true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12 padding-bottom-normal\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"candidate-system-skills-list-wrapper\\\"],[8],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"component-sort\\\",null,[[\\\"arrComponents\\\",\\\"sFilterProperty\\\",\\\"sFilterValue\\\",\\\"sSortProperty\\\",\\\"sInnerSortProperty\\\",\\\"sGroupTitleStyle\\\"],[[22,[\\\"_arrSkillsSortComponents\\\"]],\\\"objData.sTitle\\\",[22,[\\\"_sFilterSkillsValue\\\"]],\\\"objData.sTitle\\\",\\\"objData.sTitle\\\",\\\"candidate-system-skills-list\\\"]]],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},null],[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal display-inline-block float-right\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupManageCancel\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"done\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"bDismissible\\\",\\\"sModalSize\\\",\\\"onPopupResponsiveDismiss\\\"],[[22,[\\\"_bShowSkillManagePopup\\\"]],[22,[\\\"_bPopupSkillManageLoading\\\"]],false,false,\\\"modal-lg\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onPopupManageSkillCancel\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"class\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"bEllipseHeader\\\",\\\"objSpecialAction\\\"],[[22,[\\\"_sManageSkillPopupHeader\\\"]],\\\"padding-double grey lighten-3\\\",false,[21,2,[]],false,[22,[\\\"_objSpecialManageSkillPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"bShowPopup\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"container padding-top-normal\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_arrEmploymentSkills\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-left-normal padding-right-normal padding-top-normal font-xs\\\"],[8],[0,\\\"\\\\n                            \\\"],[1,[26,\\\"lookup-string\\\",[\\\"employmentExp\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row padding-bottom-normal\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"_arrEmploymentSkills\\\"]]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-left-normal padding-right-normal padding-top-small\\\"],[8],[0,\\\"\\\\n                                \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"sHeaderSizeClass\\\",\\\"sHeaderClass\\\"],[[21,4,[\\\"sLabel\\\"]],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_HEADER_SIZE_SMALL\\\",[22,[\\\"_objConstantsEmberLibService\\\"]]],null],\\\"a24-grey-text-darken-3\\\"]]],false],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null],[0,\\\"                    \\\"],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"_objStatedSkill\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-left-normal padding-right-normal padding-top-normal font-xs\\\"],[8],[0,\\\"\\\\n                            \\\"],[1,[26,\\\"lookup-string\\\",[\\\"statedExp\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row padding-bottom-normal\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-left-normal padding-right-normal padding-top-small\\\"],[8],[0,\\\"\\\\n                            \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"sHeaderSizeClass\\\",\\\"sHeaderClass\\\",\\\"arrActionItems\\\"],[[22,[\\\"_objStatedSkill\\\",\\\"sLabel\\\"]],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_HEADER_SIZE_SMALL\\\",[22,[\\\"_objConstantsEmberLibService\\\"]]],null],\\\"a24-grey-text-darken-3\\\",[22,[\\\"_objStatedSkill\\\",\\\"arrActions\\\"]]]]],false],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal display-inline-block float-right\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupManageSkillCancel\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"done\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"bDismissible\\\",\\\"sModalSize\\\",\\\"onPopupResponsiveDismiss\\\"],[[22,[\\\"_bShowSkillEdit\\\"]],[22,[\\\"_bPopupSkillLoading\\\"]],false,false,\\\"modal-lg\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onPopupSkillAddEditCancel\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"class\\\",\\\"bHasBlock\\\",\\\"bEllipseHeader\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[[22,[\\\"_sAddEditSkillHeader\\\"]],\\\"padding-double grey lighten-3\\\",false,false,[21,1,[]],[22,[\\\"_objSpecialAddEditSkillPopupAction\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"container padding-double\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"lookup-string\\\",[\\\"experience\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-3\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"years\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"years\\\",3,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-3\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"months\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"months\\\",4,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal display-inline-block float-right\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupSkillAddEditCancel\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupSkillAddEditSave\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"save\\\"],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"bLoading\\\",\\\"onPopupConfirmationCancel\\\",\\\"onPopupBackdropClick\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowDeleteConfirm\\\"]],false,[22,[\\\"_bPopupDeleteLoading\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupDeleteClose\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupDeleteClose\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupDeleteConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"removeConfirmation\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"bLoading\\\",\\\"onPopupConfirmationCancel\\\",\\\"onPopupBackdropClick\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowVerifyConfirm\\\"]],false,[22,[\\\"_bPopupVerifyLoading\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupVerifyClose\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupVerifyClose\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupVerifyConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"verifyConfirmation\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowUnsavedData\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupUnsavedConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"unsavedData\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/candidate-skills.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/card-datagrid-custom-filter-candidate-distance\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"ehpaQ8eh\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal padding-bottom-normal-minus\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"input-checkbox\\\",null,[[\\\"sFieldName\\\",\\\"bValue\\\"],[[26,\\\"lookup-string\\\",[\\\"emptyEntries\\\"],null],[22,[\\\"objHeaderItem\\\",\\\"_bEmptyEntriesOnly\\\"]]]]],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[26,\\\"if\\\",[[22,[\\\"objHeaderItem\\\",\\\"_bEmptyEntriesOnly\\\"]],\\\"display-none\\\",\\\"\\\"],null],null],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"input-number\\\",null,[[\\\"sFieldName\\\",\\\"iValue\\\"],[[26,\\\"lookup-string\\\",[\\\"isWithin\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],[22,[\\\"objHeaderItem\\\",\\\"_iWithinDistance\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bShowDistanceUnitField\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"input-dropdown\\\",null,[[\\\"sOptionsPrompt\\\",\\\"arrOptions\\\",\\\"objValue\\\",\\\"class\\\"],[[22,[\\\"_sUnitPrompt\\\"]],[22,[\\\"_arrDistanceUnitOptions\\\"]],[22,[\\\"objHeaderItem\\\",\\\"_objDistanceUnit\\\"]],\\\"cardDatagridFilterSaveSpaceTop\\\"]]],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bHasLocationDropDown\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[26,\\\"input-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sOptionsPrompt\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"objValue\\\"],[[26,\\\"lookup-string\\\",[\\\"of\\\"],null],[22,[\\\"_sLocationPrompt\\\"]],[22,[\\\"_arrLocationsOptions\\\"]],\\\"sValue\\\",\\\"sLabel\\\",[22,[\\\"objHeaderItem\\\",\\\"_objLocationOption\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-sm\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"lookup-string\\\",[\\\"of\\\"],null],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[26,\\\"if\\\",[[22,[\\\"_bShowCandidateField\\\"]],\\\"\\\",\\\"display-none\\\"],null],null],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"input-form-suggest\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"sOptionsLabelKey\\\",\\\"iMaxSuggestHeight\\\",\\\"iOrder\\\",\\\"funcGetSuggestions\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"enterCandidateName\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"objSelectedCandidate\\\",\\\"sDisplayName\\\",500,1,[22,[\\\"_funcGetSuggestions\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[26,\\\"if\\\",[[22,[\\\"_bShowLinkedClientField\\\"]],\\\"\\\",\\\"display-none\\\"],null],null],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"input-form-suggest\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"sOptionsLabelKey\\\",\\\"sOptionsLabelInputKey\\\",\\\"iMaxSuggestHeight\\\",\\\"iOrder\\\",\\\"funcGetSuggestions\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"enterClientName\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"objLinkedClient\\\",\\\"sDisplayName\\\",\\\"sSiteName\\\",500,1,[22,[\\\"_funcGetSuggestions\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[26,\\\"if\\\",[[22,[\\\"_bShowCustomLocationField\\\"]],\\\"\\\",\\\"display-none\\\"],null],null],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"input-form-address-suggest\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"bLoading\\\",\\\"arrLimitByCountryCodes\\\",\\\"onInputFormAddressSuggestInitDone\\\",\\\"onInputFormAddressSuggestError\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"enterAddress\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"objAddressSuggest\\\",[22,[\\\"_bLoading\\\"]],[22,[\\\"_arrLimitByCountryCodes\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputFormAddressSuggestInitDone\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputFormAddressSuggestError\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[26,\\\"if\\\",[[22,[\\\"_bShowGeoInputs\\\"]],\\\"\\\",\\\"display-none\\\"],null],null],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\"],[[22,[\\\"_bCoordinatesLoading\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[26,\\\"unless\\\",[[22,[\\\"_bCoordinatesLoading\\\"]],\\\"\\\",\\\"display-none\\\"],null],null],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"bUpdateValueOnType\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"latitude\\\"],null],\\\"sLatitude\\\",true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"bUpdateValueOnType\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"longitude\\\"],null],\\\"sLongitude\\\",true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/card-datagrid-custom-filter-candidate-distance.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/card-datagrid-custom-filter-candidate-external-days-to-expiry\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"zhgmF5JK\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[26,\\\"input-form-checkbox\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"emptyEntries\\\"],null],\\\"_bEmptyEntriesOnly\\\",1,[22,[\\\"objHeaderItem\\\",\\\"_bEmptyEntriesOnly\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[[26,\\\"if\\\",[[22,[\\\"objHeaderItem\\\",\\\"_bEmptyEntriesOnly\\\"]],\\\"display-none\\\"],null]]]],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"iOrder\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"is\\\"],null],\\\"_objExternalDaysType\\\",[22,[\\\"objHeaderItem\\\",\\\"arrExternalDaysTypes\\\"]],\\\"_id\\\",\\\"name\\\",2,[22,[\\\"objHeaderItem\\\",\\\"_objExternalDaysType\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n\\\\n    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"iOrder\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"expiringIn\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"_objExpiringIn\\\",[22,[\\\"_arrExpiringIn\\\"]],\\\"sValue\\\",\\\"sLabel\\\",3,[22,[\\\"objHeaderItem\\\",\\\"_objExpiringIn\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bShowExpiryDaysNumberInput\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"input-number\\\",null,[[\\\"class\\\",\\\"iValue\\\",\\\"bAllowNegative\\\"],[\\\"cardDatagridFilterSaveSpaceTop cardDatagridFilterSaveSpaceBottom\\\",[22,[\\\"objHeaderItem\\\",\\\"_iNumberOfDays\\\"]],true]]],false],[0,\\\"\\\\n\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-sm\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string\\\",[\\\"days\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/card-datagrid-custom-filter-candidate-external-days-to-expiry.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/card-datagrid-custom-filter-candidate-external-portfolios\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"BKt09+uH\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[26,\\\"input-form-checkbox\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"emptyEntries\\\"],null],\\\"_bEmptyEntriesOnly\\\",0,[22,[\\\"objHeaderItem\\\",\\\"_bEmptyEntriesOnly\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[[26,\\\"if\\\",[[22,[\\\"objHeaderItem\\\",\\\"_bEmptyEntriesOnly\\\"]],\\\"display-none\\\"],null]]]],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"input-form-suggest\\\",null,[[\\\"sFieldName\\\",\\\"sPlaceHolder\\\",\\\"sProperty\\\",\\\"sOptionsLabelKey\\\",\\\"iMaxSuggestHeight\\\",\\\"iOrder\\\",\\\"funcGetSuggestions\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"is\\\"],null],[26,\\\"lookup-string\\\",[\\\"any\\\"],null],\\\"_objPortfolio\\\",\\\"name\\\",500,1,[22,[\\\"_funcGetPortfolioSuggestions\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n\\\\n    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sOptionsPrompt\\\",\\\"sProperty\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"iOrder\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"consultantType\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],[26,\\\"lookup-string\\\",[\\\"any\\\"],null],\\\"_objConsultantType\\\",[22,[\\\"objHeaderItem\\\",\\\"arrConsultantTypes\\\"]],\\\"_id\\\",\\\"name\\\",2,[22,[\\\"objHeaderItem\\\",\\\"_objConsultantType\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n\\\\n    \\\"],[1,[26,\\\"input-form-suggest\\\",null,[[\\\"sFieldName\\\",\\\"sPlaceHolder\\\",\\\"sProperty\\\",\\\"sOptionsLabelKey\\\",\\\"iMaxSuggestHeight\\\",\\\"iOrder\\\",\\\"funcGetSuggestions\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"consultant\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],[26,\\\"lookup-string\\\",[\\\"any\\\"],null],\\\"_objConsultant\\\",\\\"name\\\",500,3,[22,[\\\"_funcGetPortfolioConsultantSuggestions\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n\\\\n    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sOptionsPrompt\\\",\\\"sProperty\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"iOrder\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"keyword\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],[26,\\\"lookup-string\\\",[\\\"any\\\"],null],\\\"_objPlayedKeyword\\\",[22,[\\\"_arrPlayedKeywords\\\"]],\\\"sValue\\\",\\\"sLabel\\\",4,[22,[\\\"objHeaderItem\\\",\\\"_objPlayedKeyword\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/card-datagrid-custom-filter-candidate-external-portfolios.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/card-datagrid-custom-filter-candidate-position-held\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"y7Oms/Ke\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[26,\\\"input-form-suggest\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"sOptionsLabelKey\\\",\\\"sOptionsLabelInputKey\\\",\\\"iMaxSuggestHeight\\\",\\\"iOrder\\\",\\\"funcGetSuggestions\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"wasFor\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"_objJobTitle\\\",\\\"sDisplayName\\\",\\\"sTitleName\\\",500,1,[22,[\\\"_funcGetSuggestions\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bShowExperienceDurationField\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sOptionsPrompt\\\",\\\"sProperty\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"iOrder\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"status\\\"],null],[26,\\\"lookup-string\\\",[\\\"any\\\"],null],\\\"_objVerifiedStatus\\\",[22,[\\\"_arrVerifiedStatuses\\\"]],\\\"sValue\\\",\\\"sLabel\\\",2,[22,[\\\"objHeaderItem\\\",\\\"_objVerifiedStatus\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n\\\\n    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"class\\\",\\\"sFieldName\\\",\\\"sProperty\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"iOrder\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[\\\"cardDatagridFilterSaveSpaceBottom\\\",[26,\\\"lookup-string\\\",[\\\"withExperienceWithin\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"_objExperienceDuration\\\",[22,[\\\"_arrExperienceDuration\\\"]],\\\"sValue\\\",\\\"sLabel\\\",3,[22,[\\\"objHeaderItem\\\",\\\"_objExperienceDuration\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bShowExperienceDurationFieldNumberInput\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"input-number\\\",null,[[\\\"class\\\",\\\"iValue\\\"],[\\\"cardDatagridFilterSaveSpaceTop cardDatagridFilterSaveSpaceBottom\\\",[22,[\\\"objHeaderItem\\\",\\\"_iNumberOfMonths\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-sm\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"months\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\\n    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sOptionsPrompt\\\",\\\"sProperty\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"iOrder\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"workSuggest\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],[26,\\\"lookup-string\\\",[\\\"any\\\"],null],\\\"_objStatus\\\",[22,[\\\"_arrStatuses\\\"]],\\\"sValue\\\",\\\"sLabel\\\",3,[22,[\\\"objHeaderItem\\\",\\\"_objStatus\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/card-datagrid-custom-filter-candidate-position-held.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/card-datagrid-custom-filter-candidate-professional-registration\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"+quwNYqM\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"iOrder\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"registrationBody\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"_objRegistrationBody\\\",[22,[\\\"_arrRegistrationBodies\\\"]],\\\"_id\\\",\\\"name\\\",1,[22,[\\\"_objRegistrationBody\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bShowRegistrationBodyStatusField\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sOptionsPrompt\\\",\\\"sProperty\\\",\\\"arrOptions\\\",\\\"bLoading\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"iOrder\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"status\\\"],null],[26,\\\"lookup-string\\\",[\\\"any\\\"],null],\\\"_objRegistrationBodyStatus\\\",[22,[\\\"_arrRegistrationBodyStatuses\\\"]],[22,[\\\"_bLoadingRegistrationBodyStatuses\\\"]],\\\"_id\\\",\\\"name\\\",2,[22,[\\\"objHeaderItem\\\",\\\"_objRegistrationBodyStatus\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bShowRegistrationBodyEntryField\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sOptionsPrompt\\\",\\\"sProperty\\\",\\\"arrOptions\\\",\\\"bLoading\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"iOrder\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"entry\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],[26,\\\"lookup-string\\\",[\\\"any\\\"],null],\\\"_objRegistrationBodyEntry\\\",[22,[\\\"_arrRegistrationBodyEntries\\\"]],[22,[\\\"_bLoadingRegistrationBodyEntries\\\"]],\\\"_id\\\",\\\"name\\\",3,[22,[\\\"objHeaderItem\\\",\\\"_objRegistrationBodyEntry\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bShowRegistrationBodyEntryStatusField\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sOptionsPrompt\\\",\\\"sProperty\\\",\\\"arrOptions\\\",\\\"bLoading\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"iOrder\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"entryStatus\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],[26,\\\"lookup-string\\\",[\\\"any\\\"],null],\\\"_objRegistrationBodyEntryStatus\\\",[22,[\\\"_arrRegistrationBodyEntryStatuses\\\"]],[22,[\\\"_bLoadingRegistrationBodyEntryStatuses\\\"]],\\\"_id\\\",\\\"name\\\",4,[22,[\\\"objHeaderItem\\\",\\\"_objRegistrationBodyEntryStatus\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/card-datagrid-custom-filter-candidate-professional-registration.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/card-datagrid-custom-filter-consultant-role\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"gQwh0AWz\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[26,\\\"input-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sOptionsPrompt\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"objValue\\\",\\\"class\\\"],[\\\"\\\",[22,[\\\"_sQueryTypeOptionPrompt\\\"]],[22,[\\\"_arrQueryType\\\"]],\\\"sValue\\\",\\\"sTitle\\\",[22,[\\\"objHeaderItem\\\",\\\"_objSelectedQueryType\\\"]],\\\"cardDatagridFilterSaveSpaceTop cardDatagridFilterSaveSpaceBottom\\\"]]],false],[0,\\\"\\\\n\\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"iOrder\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"consultantRole\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"objConsultantRole\\\",[26,\\\"if\\\",[[22,[\\\"_bAnyIncluded\\\"]],[22,[\\\"_arrConsultantRoles\\\"]],[22,[\\\"_arrConsultantRolesAnyRemoved\\\"]]],null],\\\"sValue\\\",\\\"sTitle\\\",1,[22,[\\\"objHeaderItem\\\",\\\"_objConsultantRole\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[26,\\\"if\\\",[[22,[\\\"_bShowConsultantField\\\"]],\\\"\\\",\\\"display-none\\\"],null],null],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"input-form-suggest\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"sOptionsLabelKey\\\",\\\"sOptionsLabelInputKey\\\",\\\"iMaxSuggestHeight\\\",\\\"iOrder\\\",\\\"funcGetSuggestions\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"andConsultantIs\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"objConsultant\\\",\\\"name\\\",\\\"name\\\",500,2,[22,[\\\"_funcGetSuggestions\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/card-datagrid-custom-filter-consultant-role.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/compliance-rules-condition-query-builder\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"NTduYphV\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objParentScroller\\\"],\\\"statements\\\":[[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"onPopupResponsiveDismiss\\\",\\\"bDismissible\\\",\\\"sModalSize\\\"],[[22,[\\\"bShow\\\"]],false,false,[26,\\\"action\\\",[[21,0,[]],\\\"onQueryBuilderPopupCancel\\\"],null],false,\\\"popup-responsive-full\\\"]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[[26,\\\"lookup-string\\\",[\\\"buildComplianceRuleCondition\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],\\\"padding-double popup-header-gray\\\",false,[21,1,[]],[22,[\\\"_objSpecialQueryBuilderPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"bShow\\\"]]]],{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"sWarningMessage\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md padding-top-double padding-left-normal warning-color-text\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"i\\\"],[10,\\\"class\\\",\\\"a24-material-text-icons material-icons warning-color-text\\\"],[8],[0,\\\"warning\\\"],[9],[0,\\\"\\\\n                \\\"],[1,[20,\\\"sWarningMessage\\\"],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"_bLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[20,\\\"loading-component\\\"],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            \\\"],[1,[26,\\\"card-datagrid-container\\\",null,[[\\\"objQueryParams\\\",\\\"objDatagridConfig\\\",\\\"sUrlBase\\\",\\\"bShareableLink\\\",\\\"bAllowHiddenColumnsProjection\\\",\\\"bPostTypeDatagridV2\\\",\\\"cardDatagridTableCell\\\",\\\"cardDatagridTableNoneSelected\\\",\\\"cardDatagridTableOneSelected\\\",\\\"cardDatagridTableMultiSelected\\\",\\\"onDidDoServiceCall\\\",\\\"onWillDoServiceCall\\\"],[[22,[\\\"_objQueryParams\\\"]],[22,[\\\"_objDatagridConfig\\\"]],[22,[\\\"sSearchUrl\\\"]],false,true,true,[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableCell\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableNoneSelected\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableOneSelected\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableMultiSelected\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onDidDoServiceCall\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onWillDoServiceCall\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onQueryBuilderPopupCancel\\\"]],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[11,\\\"class\\\",[27,[\\\"a24-flat-button-blue waves-effect waves-dark\\\",[26,\\\"if\\\",[[22,[\\\"_bDoneDisabled\\\"]],\\\" a24-disabled\\\"],null]]]],[3,\\\"action\\\",[[21,0,[]],\\\"onQueryBuilderPopupConfirm\\\"]],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string\\\",[\\\"done\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sCancelButtonText\\\",\\\"sConfirmButtonText\\\",\\\"bShowPopup\\\",\\\"bDismissible\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[\\\"\\\",[26,\\\"lookup-string\\\",[\\\"refresh\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],[22,[\\\"_bShowLoadFailedPopup\\\"]],false,false,[26,\\\"action\\\",[[21,0,[]],\\\"onPageReload\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"loadDataRetry\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/compliance-rules-condition-query-builder.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/email-preview\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"h8xHsfnL\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_sPreviewString\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[20,\\\"_sPreviewString\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/email-preview.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/page-agency-group-candidate-view\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"LXgLBbB0\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"bMobileView\\\",\\\"objParentScroller\\\",\\\"&default\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bServerError\\\"]]],null,{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"skills\\\",[22,[\\\"_objStringsCandidateProfile\\\"]]],null],false,[22,[\\\"_arrReloadActions\\\"]]]],{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 text-center padding-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"apiUnavailablePleaseReload\\\",[22,[\\\"_objStringsCandidateProfile\\\"]]],null],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-normal\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[20,\\\"loading-component\\\"],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"        \\\"],[13,4],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"bDismissible\\\",\\\"onPopupConfirmationConfirm\\\",\\\"onPopupConfirmationCancel\\\"],[[26,\\\"lookup-string\\\",[\\\"yes\\\"],null],[26,\\\"lookup-string\\\",[\\\"no\\\"],null],[22,[\\\"_bShowResendInvitePopup\\\"]],[22,[\\\"_bInvitePopupLoading\\\"]],false,false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupResendConfirm\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupResendCancel\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"resendInviteEmailConfirmation\\\",[22,[\\\"_objStringsCandidateProfile\\\"]]],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"popup-modal\\\",null,[[\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"bDismissible\\\",\\\"onPopupConfirmationConfirm\\\"],[\\\"\\\",[22,[\\\"_bShowResendInviteSuccessPopup\\\"]],false,false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupResendSuccessCancel\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[20,\\\"_sResendInviteSuccessMessage\\\"],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"onPopupResponsiveDismiss\\\",\\\"bDismissible\\\"],[[22,[\\\"_bShowSendNotificationPopup\\\"]],[22,[\\\"_bSendNotificationPopupLoading\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupSendNotificationCancel\\\"],null],false]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"bHasIcon\\\",\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[false,[26,\\\"lookup-string\\\",[\\\"sendNotification\\\",[22,[\\\"_objStringsCandidateProfile\\\"]]],null],\\\"padding-double popup-header-gray\\\",false,[21,2,[]],[22,[\\\"_objSpecialNotificationPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"_bSendNotificationPopupLoading\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-double\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"sOptionsPrompt\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"bMultiSelect\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"notificationType\\\",[22,[\\\"_objStringsSSCore\\\"]]],null],\\\"_objNotificationType\\\",[26,\\\"lookup-string\\\",[\\\"selectNotificationType\\\",[22,[\\\"_objStringsCandidateProfile\\\"]]],null],[22,[\\\"_arrNotificationTypeDropdown\\\"]],\\\"sValue\\\",\\\"sTitle\\\",1,true,false,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bShowNotificationTypes\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bNotificationTypeLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-normal text-center\\\"],[8],[0,\\\"\\\\n                                \\\"],[1,[20,\\\"loading-component\\\"],false],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bShowCampaignNameInput\\\"]]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                                \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"campaignName\\\",[22,[\\\"_objStringsCandidateProfile\\\"]]],null],\\\"campaign_name\\\",2,true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"_bShowContentInput\\\"]]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                                \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"iMaxCharacters\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"content\\\",[22,[\\\"_objStringsCandidateProfile\\\"]]],null],\\\"content\\\",3,true,200,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"_bShowReplyBackWithInput\\\"]]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                                \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"replyBackWith\\\",[22,[\\\"_objStringsCandidateProfile\\\"]]],null],\\\"reply_back_with\\\",4,true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"_bShowReplyWithInputContact\\\"]]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                                \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"replyWith\\\",[22,[\\\"_objStringsCandidateProfile\\\"]]],null],\\\"reply_with_contact\\\",5,true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"_bShowReplyWithInput\\\"]]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                                \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"iMaxCharacters\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"replyWith\\\",[22,[\\\"_objStringsCandidateProfile\\\"]]],null],\\\"reply_with\\\",6,true,50,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"_bShowRegards\\\"]]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                                \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"iMaxCharacters\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"regards\\\",[22,[\\\"_objStringsCandidateProfile\\\"]]],null],\\\"regards\\\",7,true,100,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"_arrNotificationTypeComponents\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bShowNotificationInputs\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_sPreviewLabel\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"preview-label\\\"],[8],[0,\\\"\\\\n                                            \\\"],[1,[20,\\\"_sPreviewLabel\\\"],false],[0,\\\"\\\\n                                        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                                        \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"col-md-12 \\\",[26,\\\"if\\\",[[22,[\\\"_bShowField1\\\"]],\\\"\\\",\\\" display-none\\\"],null]]]],[8],[0,\\\"\\\\n                                            \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[22,[\\\"_sLabelField1\\\"]],\\\"field1\\\",1,[22,[\\\"_bRequiredField1\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,3,[]]]]]]]],false],[0,\\\"\\\\n                                        \\\"],[9],[0,\\\"\\\\n                                        \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"col-md-12 \\\",[26,\\\"if\\\",[[22,[\\\"_bShowField2\\\"]],\\\"\\\",\\\" display-none\\\"],null]]]],[8],[0,\\\"\\\\n                                            \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[22,[\\\"_sLabelField2\\\"]],\\\"field2\\\",2,[22,[\\\"_bRequiredField2\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,3,[]]]]]]]],false],[0,\\\"\\\\n                                        \\\"],[9],[0,\\\"\\\\n                                        \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"col-md-12 \\\",[26,\\\"if\\\",[[22,[\\\"_bShowField3\\\"]],\\\"\\\",\\\" display-none\\\"],null]]]],[8],[0,\\\"\\\\n                                            \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[22,[\\\"_sLabelField3\\\"]],\\\"field3\\\",3,[22,[\\\"_bRequiredField3\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,3,[]]]]]]]],false],[0,\\\"\\\\n                                        \\\"],[9],[0,\\\"\\\\n                                        \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"col-md-12 \\\",[26,\\\"if\\\",[[22,[\\\"_bShowField4\\\"]],\\\"\\\",\\\" display-none\\\"],null]]]],[8],[0,\\\"\\\\n                                            \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[22,[\\\"_sLabelField4\\\"]],\\\"field4\\\",4,[22,[\\\"_bRequiredField4\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,3,[]]]]]]]],false],[0,\\\"\\\\n                                        \\\"],[9],[0,\\\"\\\\n                                        \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"col-md-12 \\\",[26,\\\"if\\\",[[22,[\\\"_bShowField5\\\"]],\\\"\\\",\\\" display-none\\\"],null]]]],[8],[0,\\\"\\\\n                                            \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[22,[\\\"_sLabelField5\\\"]],\\\"field5\\\",5,[22,[\\\"_bRequiredField5\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,3,[]]]]]]]],false],[0,\\\"\\\\n                                        \\\"],[9],[0,\\\"\\\\n                                    \\\"],[9],[0,\\\"\\\\n                                \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12 padding-top-normal\\\"],[8],[0,\\\"\\\\n                                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"notification-priority-label\\\"],[8],[0,\\\"\\\\n                                    \\\"],[1,[26,\\\"lookup-string\\\",[\\\"notificationPriority\\\",[22,[\\\"_objStringsCandidateProfile\\\"]]],null],false],[0,\\\"\\\\n                                \\\"],[9],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                                \\\"],[1,[26,\\\"component-sort\\\",null,[[\\\"arrComponents\\\",\\\"arrGroupings\\\",\\\"sSortProperty\\\",\\\"sInnerSortProperty\\\",\\\"sGroupTitleStyle\\\"],[[22,[\\\"_arrNotificationTypeComponents\\\",\\\"arrComponents\\\"]],[22,[\\\"_arrNotificationTypeComponents\\\",\\\"arrGroupings\\\"]],\\\"objData.priority\\\",\\\"objData.priority\\\",\\\"group-priority-list\\\"]]],false],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"no-data padding-bottom-normal\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"noNotificationTemplatesConfigured\\\",[22,[\\\"_objStringsCandidateProfile\\\"]]],null],false],[9],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null],[0,\\\"            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal padding-left-normal font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"a24RequiredFieldsMarked\\\"],null],false],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupSendNotificationCancel\\\"]],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bDisplayPreviewSend\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupSendNotificationPreviewSend\\\"]],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"lookup-string\\\",[\\\"send\\\",[22,[\\\"_objStringsCandidateProfile\\\"]]],null],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"classNames\\\",\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"bDismissible\\\",\\\"onPopupResponsiveDismiss\\\"],[\\\"conversation-preview-dialog\\\",[22,[\\\"_bShowNotificationPreviewPopup\\\"]],false,false,false,[26,\\\"action\\\",[[21,0,[]],\\\"onNotificationPreviewPopupClose\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"notificationPreview\\\",[22,[\\\"_objStringsSSCore\\\"]]],null],\\\"padding-double popup-header-gray\\\",false,[21,1,[]],[22,[\\\"_objSpecialNotificationTypePreviewPopupAction\\\"]],[22,[\\\"_arrNotificationPreviewPopupActions\\\"]]]]],false],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[26,\\\"unless\\\",[[22,[\\\"_bShowNotificationPreviewPopup\\\"]],\\\"display-none\\\",\\\"full-height stop-scrolling\\\"],null],null],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[26,\\\"if\\\",[[22,[\\\"_bNotificationPreviewPopupLoading\\\"]],\\\"display-none\\\",\\\"full-height\\\"],null],null],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bIsEmail\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[1,[26,\\\"email-preview\\\",null,[[\\\"objEmail\\\"],[[22,[\\\"_objNotificationPreview\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                \\\"],[1,[26,\\\"notification-preview\\\",null,[[\\\"objNotification\\\"],[[22,[\\\"_objNotificationPreview\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[4,\\\"popup-modal\\\",null,[[\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[\\\"\\\",[22,[\\\"_bShowSentMessagePopup\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onSentMessagePopupCancel\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"notificationSendMessage\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/page-agency-group-candidate-view.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/page-compliance-rule-view\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"TSxLg3Dh\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactViewPostData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecieveDataViewReact\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[1,[26,\\\"compliance-rules-condition-query-builder\\\",null,[[\\\"bShow\\\",\\\"sSimpleTagsUrl\\\",\\\"sSearchUrl\\\",\\\"bForceReset\\\",\\\"sContext\\\",\\\"sWarningMessage\\\",\\\"class\\\",\\\"onWillDoServiceCall\\\",\\\"onSimpleTagsAction\\\",\\\"onPopupCloseAction\\\",\\\"onPopupDoneAction\\\",\\\"onForceResetTriggered\\\"],[[22,[\\\"_bShowConditionBuilder\\\"]],[22,[\\\"_sSimpleTagsUrl\\\"]],[22,[\\\"_sSearchUrl\\\"]],[22,[\\\"_bForceReset\\\"]],[22,[\\\"sContext\\\"]],[22,[\\\"_sWarningMessage\\\"]],\\\"query-builder\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onWillDoServiceCallConditions\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onSimpleTagsAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupCloseAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupDoneAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onForceResetTriggered\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/page-compliance-rule-view.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/page-compliance-rules\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"ShxIRN8V\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,[[\\\"iMaxWidth\\\"],[8000]],{\\\"statements\\\":[[4,\\\"card-style-component\\\",null,[[\\\"bApplyDefaultPadding\\\",\\\"bHideOverFlow\\\"],[false,false]],{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bPageLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[20,\\\"loading-component\\\"],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\",\\\"sBlackOutClass\\\"],[[22,[\\\"bRuleLoading\\\"]],\\\"a24-compliance-rule-loader\\\"]]],false],[0,\\\"\\\\n\\\\n                \\\"],[1,[26,\\\"card-datagrid-container\\\",null,[[\\\"objQueryParams\\\",\\\"objDatagridConfig\\\",\\\"sUrlBase\\\",\\\"bShareableLink\\\",\\\"bAllowHiddenColumns\\\",\\\"iVisibleActions\\\",\\\"arrExtraActions\\\",\\\"cardDatagridTableNoneSelected\\\",\\\"cardDatagridTableOneSelected\\\",\\\"cardDatagridTableMultiSelected\\\",\\\"cardDatagridTableCell\\\",\\\"onDidDoServiceCall\\\",\\\"onWillDoServiceCall\\\"],[[22,[\\\"objQueryParams\\\"]],[22,[\\\"_objDatagridConfig\\\"]],[22,[\\\"sUrlBase\\\"]],[26,\\\"if\\\",[[22,[\\\"bLinkedRulesView\\\"]],false,true],null],true,[22,[\\\"iVisibleActions\\\"]],[22,[\\\"_arrExtraActions\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableNoneSelected\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableOneSelected\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableMultiSelected\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableCell\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onDidDoServiceCall\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onWillDoServiceCall\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sCancelButtonText\\\",\\\"sConfirmButtonText\\\",\\\"bShowPopup\\\",\\\"bDismissible\\\",\\\"onPopupConfirmationConfirm\\\"],[\\\"\\\",[26,\\\"lookup-string\\\",[\\\"refresh\\\",[22,[\\\"_objProfileStringsService\\\"]]],null],[22,[\\\"_bShowLoadFailedPopup\\\"]],false,[26,\\\"action\\\",[[21,0,[]],\\\"onPageReload\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"loadDataRetry\\\",[22,[\\\"_objProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sCancelButtonText\\\",\\\"sConfirmButtonText\\\",\\\"bShowPopup\\\",\\\"bDismissible\\\",\\\"onPopupConfirmationConfirm\\\"],[\\\"\\\",[26,\\\"lookup-string\\\",[\\\"close\\\"],null],[22,[\\\"_bShowUnlinkError\\\"]],false,[26,\\\"action\\\",[[21,0,[]],\\\"onUnlinkErrorClose\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"unlinkRuleDefaultNotAllowed\\\",[22,[\\\"_objProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[1,[26,\\\"react-popup\\\",null,[[\\\"bShow\\\",\\\"sIFrameUrl\\\",\\\"bLoading\\\",\\\"objData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_bShowManageComplianceRules\\\"]],[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_bPopupLoading\\\"]],[22,[\\\"_objReactPopupPostData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecieveDataReactPopup\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[1,[26,\\\"react-popup\\\",null,[[\\\"bShow\\\",\\\"sIFrameUrl\\\",\\\"bLoading\\\",\\\"objData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_bShowViewComplianceRules\\\"]],[22,[\\\"_sIFrameViewUrl\\\"]],[22,[\\\"_bPopupViewLoading\\\"]],[22,[\\\"_objReactViewPopupPostData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecieveDataViewReactPopup\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[1,[26,\\\"compliance-rules-condition-query-builder\\\",null,[[\\\"bShow\\\",\\\"sSimpleTagsUrl\\\",\\\"sSearchUrl\\\",\\\"bForceReset\\\",\\\"sContext\\\",\\\"sWarningMessage\\\",\\\"onWillDoServiceCall\\\",\\\"onSimpleTagsAction\\\",\\\"onPopupCloseAction\\\",\\\"onPopupDoneAction\\\",\\\"onForceResetTriggered\\\",\\\"onQueryPageReload\\\"],[[22,[\\\"_bShowConditionBuilder\\\"]],[22,[\\\"_sSimpleTagsUrl\\\"]],[22,[\\\"_sSearchUrl\\\"]],[22,[\\\"_bForceReset\\\"]],[22,[\\\"sContext\\\"]],[22,[\\\"_sWarningMessage\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onWillDoServiceCallConditions\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onSimpleTagsAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupCloseAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupDoneAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onForceResetTriggered\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onQueryPageReload\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/page-compliance-rules.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/right-panel-agency-candidate-calendar\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"gbZrrwcD\", \"block\": \"{\\\"symbols\\\":[\\\"objContactNumber\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-small padding-bottom-double\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bNumbersLoadedDone\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-center padding-bottom-small\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"display-inline-block text-center position-relative\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sIcon\\\",\\\"bClickable\\\"],[[26,\\\"if\\\",[[22,[\\\"_objMainNumber\\\",\\\"sIcon\\\"]],[22,[\\\"_objMainNumber\\\",\\\"sIcon\\\"]],\\\"phone_android\\\"],null],false]]],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_objMainNumber\\\",\\\"sNumber\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[22,[\\\"_objMainNumber\\\",\\\"sNumber\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[26,\\\"lookup-string\\\",[\\\"noNumber\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[4,\\\"if\\\",[[22,[\\\"_arrFormattedNumbers\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sIcon\\\",\\\"bClickable\\\",\\\"onRoundIconClick\\\"],[\\\"arrow_drop_down\\\",true,[26,\\\"action\\\",[[21,0,[]],\\\"openExtraNumberDropdown\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"dropdown-content\\\",null,[[\\\"bShow\\\",\\\"bAutoShow\\\",\\\"sAlign\\\",\\\"sDropdownClass\\\",\\\"a24DropdownBlockerClicked\\\"],[[22,[\\\"_bShowExtraNumbers\\\"]],false,\\\"right\\\",\\\"full-width\\\",[26,\\\"action\\\",[[21,0,[]],\\\"closeExtraNumberDropdown\\\"],null]]],{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-small padding-bottom-small padding-right-normal\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"_arrFormattedNumbers\\\"]]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"div\\\"],[8],[0,\\\"\\\\n                                \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sIcon\\\",\\\"sIconFa\\\",\\\"sIconSvg\\\",\\\"bClickable\\\"],[[21,1,[\\\"sIcon\\\"]],[21,1,[\\\"sIconFa\\\"]],[21,1,[\\\"sIconSvg\\\"]],false]]],false],[0,\\\"\\\\n                                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"display-inline-block\\\"],[8],[0,\\\"\\\\n                                    \\\"],[1,[21,1,[\\\"sNumber\\\"]],false],[0,\\\"\\\\n                                \\\"],[9],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"        \\\"],[1,[20,\\\"loading-component\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[1,[26,\\\"chatter-right-header\\\",null,[[\\\"objData\\\"],[[22,[\\\"_objData\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bCalendarLoaded\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"candidate-activities\\\",null,[[\\\"class\\\",\\\"sCandidateId\\\",\\\"sCandidateName\\\",\\\"onDoneLoading\\\",\\\"sActivityContext\\\",\\\"objActivityRestService\\\",\\\"objActivityTypeRestService\\\",\\\"objRestCandidateActivityEmailComm\\\",\\\"objRestCandidateActivityConversation\\\",\\\"objRestCandidateActivityNotification\\\"],[\\\"force-accordions-to-mobile\\\",[22,[\\\"_sCandidateId\\\"]],[26,\\\"if\\\",[[22,[\\\"_objData\\\",\\\"ss\\\",\\\"user\\\",\\\"first_name\\\"]],[26,\\\"concat\\\",[[22,[\\\"_objData\\\",\\\"ss\\\",\\\"user\\\",\\\"first_name\\\"]],\\\" \\\",[22,[\\\"_objData\\\",\\\"ss\\\",\\\"user\\\",\\\"last_name\\\"]]],null]],null],[26,\\\"action\\\",[[21,0,[]],\\\"onActivitiesLoaded\\\"],null],[22,[\\\"_sActivityContext\\\"]],[22,[\\\"_objActivityRestService\\\"]],[22,[\\\"_objActivityTypeRestService\\\"]],[22,[\\\"_objRestAgencyCandidateActivityEmailComm\\\"]],[22,[\\\"_objRestAgencyCandidateActivityConversation\\\"]],[22,[\\\"_objRestAgencyCandidateActivityNotification\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"card-heading-and-content-component\\\",null,[[\\\"bLoading\\\",\\\"sHeading\\\"],[true,[26,\\\"lookup-string\\\",[\\\"activities\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[9],[0,\\\"\\\\n\\\"],[1,[26,\\\"input-form-tel-number\\\",null,[[\\\"sProperty\\\",\\\"class\\\",\\\"onInputFormTelNumberInitDone\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[\\\"number\\\",\\\"display-none-force\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onInputFormTelNumberInitDone\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/right-panel-agency-candidate-calendar.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/right-panel-candidate-profile\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"xbPuXdUU\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecieveData\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[1,[26,\\\"react-popup\\\",null,[[\\\"class\\\",\\\"bShow\\\",\\\"sIFrameUrl\\\",\\\"bLoading\\\",\\\"objData\\\",\\\"onRecieveData\\\"],[\\\"right-panel-react-popup\\\",[22,[\\\"_bReactPopupOpen\\\"]],[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_bReactPopupLoading\\\"]],[22,[\\\"_objReactPopupPostData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecievePopupData\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[1,[26,\\\"email-preview-popup\\\",null,[[\\\"bShowPopup\\\",\\\"onPopupCloseAction\\\",\\\"objActivityData\\\",\\\"objRestActivityEmailComm\\\"],[[22,[\\\"_bShowEmailMessagePopup\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onEmailMessagePopupClose\\\"],null],[22,[\\\"_objEmailActivity\\\"]],[22,[\\\"_objRestCandidateActivityEmailComm\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[1,[26,\\\"notification-sent-popup\\\",null,[[\\\"bShowPopup\\\",\\\"objActivityData\\\",\\\"onPopupCloseAction\\\",\\\"objRestActivityNotification\\\"],[[22,[\\\"_bShowNotifcationsSentPopup\\\"]],[22,[\\\"_objNotificationActivity\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onNotificationSentPopupClose\\\"],null],[22,[\\\"_objRestCandidateActivityNotification\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/right-panel-candidate-profile.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-position-held\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"gh5C7otM\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecieveData\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-position-held.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-professional-registration-react\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"UCJhMdby\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onReceiveReactData\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-professional-registration-react.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-calendar\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"tKQByIi9\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"main-availability-page\\\",null,[[\\\"objAvailabilityService\\\",\\\"objBookedShiftsService\\\",\\\"objEmailRestService\\\",\\\"arrNumbers\\\",\\\"funcOnBack\\\",\\\"onCalendarLoaded\\\"],[[22,[\\\"objAgencyAvailabilityService\\\"]],[22,[\\\"objAgencyBookedShiftService\\\"]],[22,[\\\"objAgencyEmailRestService\\\"]],[22,[\\\"_arrNumbers\\\"]],[22,[\\\"_funcOnBack\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onCalendarLoaded\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-calendar.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-compliance-exemptions\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"ow4fox/1\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,[[\\\"iMaxWidth\\\"],[8000]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"candidate-compliance-exemptions\\\",null,[[\\\"sUrlBase\\\",\\\"sCandidateId\\\",\\\"sCandidateName\\\",\\\"sContext\\\",\\\"objQueryParams\\\"],[[22,[\\\"_sUrlBase\\\"]],[22,[\\\"_sCandidateId\\\"]],[22,[\\\"_sCandidateName\\\"]],\\\"agency\\\",[22,[\\\"objQueryParams\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-compliance-exemptions.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-compliance-passport\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"EGdKtxkK\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-compliance-passport.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-crb-check\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"6t3g6CDz\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\"],[[22,[\\\"_sIFrameUrl\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-crb-check.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-dismissals\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"ksupYrbC\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"candidate-dismissals\\\",null,[[\\\"sCandidateId\\\",\\\"objSettingsRestService\\\",\\\"objEmploymentDismissalsRestService\\\"],[[22,[\\\"_sCandidateId\\\"]],[22,[\\\"_objSettingsRestService\\\"]],[22,[\\\"_objEmploymentDismissalsService\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-dismissals.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-documents-react\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"YKyOGPEl\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onReceiveReactData\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[1,[26,\\\"react-popup\\\",null,[[\\\"bShow\\\",\\\"sIFrameUrl\\\",\\\"bLoading\\\",\\\"objData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_bReactPopupOpen\\\"]],[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_bReactPopupLoading\\\"]],[22,[\\\"_objReactPopupPostData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onReceiveReactPopupData\\\"],null]]]],false]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-documents-react.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-equality-monitoring\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"E6YkNqYp\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"candidate-equality-monitoring-section-component\\\",null,[[\\\"sCandidateId\\\",\\\"objEqualityMonitoringRestService\\\"],[[22,[\\\"_sCandidateId\\\"]],[22,[\\\"_objEqualityMonitoringService\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-equality-monitoring.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-exclusions\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"mMGt+oAj\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,[[\\\"iMaxWidth\\\"],[8000]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"candidate-exclusions\\\",null,[[\\\"sUrlBase\\\",\\\"sCandidateId\\\",\\\"sCandidateName\\\",\\\"objQueryParams\\\"],[[22,[\\\"_sUrlBase\\\"]],[22,[\\\"_sCandidateId\\\"]],[22,[\\\"_sCandidateName\\\"]],[22,[\\\"objQueryParams\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-exclusions.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-external-info\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"adKv3HLm\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayReloadCard\\\"]]],null,{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"oops\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false,[22,[\\\"_arrReloadActions\\\"]]]],{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 text-center padding-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"candidateUnavailablePleaseReloadCandidateContext\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\"],[[26,\\\"lookup-string\\\",[\\\"externalInfo\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],[22,[\\\"bLoading\\\"]]]],{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 text-center padding-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"thesePagesListData\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[0,\\\"        \\\"],[1,[26,\\\"candidate-external-verification\\\",null,[[\\\"bLoading\\\",\\\"arrExternalVerificationData\\\"],[[22,[\\\"_bLoading\\\"]],[22,[\\\"_arrExternalVerificationsData\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-external-info.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-general-react\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"+Yd0HmIg\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecieveData\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[1,[26,\\\"react-popup\\\",null,[[\\\"bShow\\\",\\\"sIFrameUrl\\\",\\\"bLoading\\\",\\\"objData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_bReactPopupOpen\\\"]],[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_bReactPopupLoading\\\"]],[22,[\\\"_objReactPopupPostData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecievePopupData\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[1,[26,\\\"email-preview-popup\\\",null,[[\\\"bShowPopup\\\",\\\"onPopupCloseAction\\\",\\\"objActivityData\\\",\\\"objRestActivityEmailComm\\\"],[[22,[\\\"_bShowEmailMessagePopup\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onEmailMessagePopupClose\\\"],null],[22,[\\\"_objEmailActivity\\\"]],[22,[\\\"_objRestAgencyCandidateActivityEmailComm\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[1,[26,\\\"notification-sent-popup\\\",null,[[\\\"bShowPopup\\\",\\\"objActivityData\\\",\\\"onPopupCloseAction\\\",\\\"objRestActivityNotification\\\"],[[22,[\\\"_bShowNotifcationsSentPopup\\\"]],[22,[\\\"_objNotificationActivity\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onNotificationSentPopupClose\\\"],null],[22,[\\\"_objRestAgencyCandidateActivityNotification\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-general-react.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-health-info\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"lhOo1kOA\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecieveData\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-health-info.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-languages\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"nSWuQWm6\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"candidate-languages\\\",null,[[\\\"sCandidateId\\\",\\\"objLanguagesRestService\\\"],[[22,[\\\"_sCandidateId\\\"]],[22,[\\\"_objLanguagesService\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-languages.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-misc-details\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"FAxUM0b7\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"candidate-misc-details\\\",null,[[\\\"sCandidateId\\\",\\\"objSettingsRestService\\\",\\\"objMiscDetailsRestService\\\"],[[22,[\\\"_sCandidateId\\\"]],[22,[\\\"_objSettingsRestService\\\"]],[22,[\\\"_objMiscDetailsService\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-misc-details.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-next-of-kin\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"TMXnvwE0\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"candidate-next-of-kin\\\",null,[[\\\"sCandidateId\\\",\\\"objNextOfKinRestService\\\"],[[22,[\\\"_sCandidateId\\\"]],[22,[\\\"_objNextOfKinService\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-next-of-kin.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-notifications-preferences\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"o+iMqSKu\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\",\\\"class\\\"],[[22,[\\\"_bLoading\\\"]],\\\"loader-blackout\\\"]]],false],[0,\\\"\\\\n    \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecieveData\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-notifications-preferences.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-occupational-health\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"svnuwdNd\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\"],[[22,[\\\"_sIFrameUrl\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-occupational-health.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-other-names\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"hbOEVe0q\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"candidate-other-names\\\",null,[[\\\"sCandidateId\\\",\\\"objSettingsRestService\\\",\\\"objOtherNamesRestService\\\"],[[22,[\\\"_sCandidateId\\\"]],[22,[\\\"_objSettingsRestService\\\"]],[22,[\\\"_objOtherNamesService\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-other-names.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-payroll-number\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"SzQL8veH\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-payroll-number.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-references-react\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"Tp7uJXSt\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onReceiveReactData\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-references-react.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-right-to-work\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"IRXxIZdE\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"sExtraParams\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_sExtraParams\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-right-to-work.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-tags\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"jFsqN7yE\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecieveData\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-profile-tags.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-qualifications\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"bdV+ssOv\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[20,\\\"loading-component\\\"],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bServerError\\\"]]],null,{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[22,[\\\"_sCardHeader\\\"]],false,[22,[\\\"_arrReloadActions\\\"]]]],{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 text-center padding-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"apiUnavailablePleaseReload\\\",[22,[\\\"_objStringsCandidateProfile\\\"]]],null],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"candidate-qualifications\\\",null,[[\\\"sCandidateId\\\",\\\"sCandidateType\\\",\\\"sCandidateTypeName\\\",\\\"objSettingsRestService\\\",\\\"objCandidateQualificationsRestService\\\"],[[22,[\\\"_sCandidateId\\\"]],[22,[\\\"_sCandidateType\\\"]],[22,[\\\"_sCandidateTypeName\\\"]],[22,[\\\"_objSettingsRestService\\\"]],[22,[\\\"_objCandidateQualificationsRestService\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-qualifications.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-skills\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"qDb+9LOZ\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[20,\\\"loading-component\\\"],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bServerError\\\"]]],null,{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[22,[\\\"_sCardHeader\\\"]],false,[22,[\\\"_arrReloadActions\\\"]]]],{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 text-center padding-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"apiUnavailablePleaseReload\\\",[22,[\\\"_objStringsCandidateProfile\\\"]]],null],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"candidate-skills\\\",null,[[\\\"sCandidateId\\\",\\\"sCandidateType\\\",\\\"sCandidateTypeName\\\",\\\"objSettingsRestService\\\",\\\"objCandidateSkillsRestService\\\"],[[22,[\\\"_sCandidateId\\\"]],[22,[\\\"_sCandidateType\\\"]],[22,[\\\"_sCandidateTypeName\\\"]],[22,[\\\"_objSettingsRestService\\\"]],[22,[\\\"_objCandidateSkillsRestService\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-skills.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-social-links-react\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"1SMr+h/2\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onReceiveReactData\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-social-links-react.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-candidate-work-history-react\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"xFlPtD40\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onReceiveReactData\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-candidate-work-history-react.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-position-held\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"oFHy3WY/\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecieveData\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-position-held.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-professional-registration-react\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"G7AukH9s\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onReceiveReactData\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[1,[26,\\\"react-popup\\\",null,[[\\\"class\\\",\\\"bShow\\\",\\\"sIFrameUrl\\\",\\\"bLoading\\\",\\\"objData\\\",\\\"onRecieveData\\\"],[\\\"prof-reg-react-popup\\\",[22,[\\\"_bReactPopupOpen\\\"]],[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_bReactPopupLoading\\\"]],[22,[\\\"_objReactPopupPostData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecievePopupData\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-professional-registration-react.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-compliance-exemptions\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"a74qkaxX\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,[[\\\"iMaxWidth\\\"],[8000]],{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"candidate-compliance-exemptions\\\",null,[[\\\"sUrlBase\\\",\\\"sCandidateId\\\",\\\"sCandidateName\\\",\\\"sContext\\\",\\\"objQueryParams\\\"],[[22,[\\\"_sUrlBase\\\"]],[22,[\\\"_sCandidateId\\\"]],[22,[\\\"_sCandidateName\\\"]],\\\"agency-group\\\",[22,[\\\"objQueryParams\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-compliance-exemptions.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-compliance-passport\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"j0T5bMZM\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-compliance-passport.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-crb-check\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"0o8WVK8K\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-crb-check.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-dismissals\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"yf/xosVF\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"candidate-dismissals\\\",null,[[\\\"sCandidateId\\\",\\\"objSettingsRestService\\\",\\\"objEmploymentDismissalsRestService\\\"],[[22,[\\\"_sCandidateId\\\"]],[22,[\\\"_objSettingsRestService\\\"]],[22,[\\\"_objEmploymentDismissalsService\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-dismissals.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-documents-react\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"mVz+gOdC\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onReceiveReactData\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[1,[26,\\\"react-popup\\\",null,[[\\\"bShow\\\",\\\"sIFrameUrl\\\",\\\"bLoading\\\",\\\"objData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_bReactPopupOpen\\\"]],[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_bReactPopupLoading\\\"]],[22,[\\\"_objReactPopupPostData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onReceiveReactPopupData\\\"],null]]]],false]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-documents-react.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-equality\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"svQkn+ES\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"candidate-equality-monitoring-section-component\\\",null,[[\\\"sCandidateId\\\",\\\"objEqualityMonitoringRestService\\\"],[[22,[\\\"_sCandidateId\\\"]],[22,[\\\"_objEqualityMonitoringService\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-equality.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-external-info\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"MDRBrMuV\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayReloadCard\\\"]]],null,{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"oops\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false,[22,[\\\"_arrReloadActions\\\"]]]],{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 text-center padding-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"candidateUnavailablePleaseReloadCandidateContext\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\"],[[26,\\\"lookup-string\\\",[\\\"externalInfo\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],[22,[\\\"bLoading\\\"]]]],{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 text-center padding-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"thesePagesListData\\\",[22,[\\\"_objCandidateProfileStringsService\\\"]]],null],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[1,[26,\\\"candidate-external-general\\\",null,[[\\\"bLoading\\\",\\\"arrExternalData\\\"],[[22,[\\\"_bLoading\\\"]],[22,[\\\"_arrExternalData\\\"]]]]],false],[0,\\\"\\\\n\\\"],[0,\\\"        \\\"],[1,[26,\\\"candidate-external-verification\\\",null,[[\\\"bLoading\\\",\\\"arrExternalVerificationData\\\"],[[22,[\\\"_bLoading\\\"]],[22,[\\\"_arrExternalVerificationsData\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-external-info.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-general-react\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"TSiGio4P\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecieveData\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[1,[26,\\\"react-popup\\\",null,[[\\\"bShow\\\",\\\"sIFrameUrl\\\",\\\"bLoading\\\",\\\"objData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_bReactPopupOpen\\\"]],[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_bReactPopupLoading\\\"]],[22,[\\\"_objReactPopupPostData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecievePopupData\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[1,[26,\\\"email-preview-popup\\\",null,[[\\\"bShowPopup\\\",\\\"onPopupCloseAction\\\",\\\"objActivityData\\\",\\\"objRestActivityEmailComm\\\"],[[22,[\\\"_bShowEmailMessagePopup\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onEmailMessagePopupClose\\\"],null],[22,[\\\"_objEmailActivity\\\"]],[22,[\\\"_objRestAgencyGroupCandidateActivityEmailComm\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[1,[26,\\\"notification-sent-popup\\\",null,[[\\\"bShowPopup\\\",\\\"objActivityData\\\",\\\"onPopupCloseAction\\\",\\\"objRestActivityNotification\\\"],[[22,[\\\"_bShowNotifcationsSentPopup\\\"]],[22,[\\\"_objNotificationActivity\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onNotificationSentPopupClose\\\"],null],[22,[\\\"_objRestAgencyGroupCandidateActivityNotification\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-general-react.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-health-info\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"h9i2ubtf\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecieveData\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-health-info.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-languages\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"qJV551zd\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"candidate-languages\\\",null,[[\\\"sCandidateId\\\",\\\"objLanguagesRestService\\\"],[[22,[\\\"_sCandidateId\\\"]],[22,[\\\"_objLanguagesService\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-languages.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-misc-details\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"HKgsj3DF\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"candidate-misc-details\\\",null,[[\\\"sCandidateId\\\",\\\"objSettingsRestService\\\",\\\"objMiscDetailsRestService\\\"],[[22,[\\\"_sCandidateId\\\"]],[22,[\\\"_objSettingsRestService\\\"]],[22,[\\\"_objMiscDetailsService\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-misc-details.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-next-of-kin\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"WQN2D+PU\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"candidate-next-of-kin\\\",null,[[\\\"sCandidateId\\\",\\\"objNextOfKinRestService\\\"],[[22,[\\\"_sCandidateId\\\"]],[22,[\\\"_objNextOfKinService\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-next-of-kin.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-notifications-preferences\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"1zIK912g\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\",\\\"class\\\"],[[22,[\\\"_bLoading\\\"]],\\\"loader-blackout\\\"]]],false],[0,\\\"\\\\n    \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecieveData\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-notifications-preferences.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-occupational-health\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"vOeggAco\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\"],[[22,[\\\"_sIFrameUrl\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-occupational-health.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-other-names\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"kcsiOxfS\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"candidate-other-names\\\",null,[[\\\"sCandidateId\\\",\\\"objSettingsRestService\\\",\\\"objOtherNamesRestService\\\"],[[22,[\\\"_sCandidateId\\\"]],[22,[\\\"_objSettingsRestService\\\"]],[22,[\\\"_objOtherNamesService\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-other-names.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-payroll-number\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"iZ1tQUcf\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-payroll-number.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-plugins\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"z6Z7akQ+\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"candidate-plugins-overview\\\",null,[[\\\"sCandidateId\\\",\\\"objPluginRestService\\\"],[[22,[\\\"_sCandidateId\\\"]],[22,[\\\"_objPluginService\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-plugins.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-policy\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"o+xn+9c3\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"candidate-policy\\\",null,[[\\\"sCandidateId\\\",\\\"objPolicyGroupService\\\"],[[22,[\\\"_sCandidateId\\\"]],[22,[\\\"_objCandidatePolicyGroupService\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-policy.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-references-react\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"X1tsHF5a\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onReceiveReactData\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-references-react.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-right-to-work\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"NFFfjwKV\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"sExtraParams\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_sExtraParams\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-right-to-work.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-tags\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"u0kDsmqR\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecieveData\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-profile-tags.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-qualifications\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"IjB85EAE\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[20,\\\"loading-component\\\"],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bServerError\\\"]]],null,{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[22,[\\\"_sCardHeader\\\"]],false,[22,[\\\"_arrReloadActions\\\"]]]],{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 text-center padding-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"apiUnavailablePleaseReload\\\",[22,[\\\"_objStringsCandidateProfile\\\"]]],null],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"candidate-qualifications\\\",null,[[\\\"sCandidateId\\\",\\\"sCandidateType\\\",\\\"sCandidateTypeName\\\",\\\"objSettingsRestService\\\",\\\"objCandidateQualificationsRestService\\\"],[[22,[\\\"_sCandidateId\\\"]],[22,[\\\"_sCandidateType\\\"]],[22,[\\\"_sCandidateTypeName\\\"]],[22,[\\\"_objSettingsRestService\\\"]],[22,[\\\"_objCandidateQualificationsRestService\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-qualifications.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-skills\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"XkKmMhLz\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[20,\\\"loading-component\\\"],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bServerError\\\"]]],null,{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[22,[\\\"_sCardHeader\\\"]],false,[22,[\\\"_arrReloadActions\\\"]]]],{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 text-center padding-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"apiUnavailablePleaseReload\\\",[22,[\\\"_objStringsCandidateProfile\\\"]]],null],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"candidate-skills\\\",null,[[\\\"sCandidateId\\\",\\\"sCandidateType\\\",\\\"sCandidateTypeName\\\",\\\"objSettingsRestService\\\",\\\"objCandidateSkillsRestService\\\",\\\"objCandidateStatedSkillsRestService\\\"],[[22,[\\\"_sCandidateId\\\"]],[22,[\\\"_sCandidateType\\\"]],[22,[\\\"_sCandidateTypeName\\\"]],[22,[\\\"_objSettingsRestService\\\"]],[22,[\\\"_objCandidateSkillsRestService\\\"]],[22,[\\\"_objCandidateStatedSkillsRestService\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-skills.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-social-links-react\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"IyVe5vm8\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onReceiveReactData\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-social-links-react.hbs\" } });\n});","define(\"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-work-history-react\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"EDPJ37vg\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDisplayPermissionError\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onReceiveReactData\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-candidate-profile/templates/components/tab-agency-group-candidate-work-history-react.hbs\" } });\n});","define(\"a24-ember-form-inputs/components/input-form-address-suggest\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-form-inputs/templates/components/input-form-address-suggest\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _didRenderChangesMixin, _inputFormAddressSuggest, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _inputFormAddressSuggest.default,\n        classNames: [\"input-form-address-suggest\", \"a24ErrorInputParent\", \"md-form\"],\n        classNameBindings: [\"_bInputLoading:loading\"],\n        mValue: null,\n        sInputType: \"address-suggest\",\n        bLoading: false, // This is so the parent can justify if input should load or not\n\n        arrLimitByCountryCodes: null,\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        _bLoading: true, // This is the internal flag that the input will justify if input is loading\n        _bInputLoading: true, // This will input loading state\n        _bInitDone: false,\n        _objInputAddressService: Ember.inject.service(\"input-form-address-suggest-service\"),\n        _objAddressSuggestion: null,\n        // This is a empty function so that the empty check would pass\n        _funcScriptMock: function _funcScriptMock() {},\n\n        willDestroy: function willDestroy() {\n            this._super.apply(this, arguments);\n\n            if (!a24Core.isEmpty(window.google) && !a24Core.isEmpty(window.google.maps) && !a24Core.isEmpty(window.google.maps.event)) {\n                window.google.maps.event.clearInstanceListeners(this.get(\"_objAddressSuggestion\"));\n            }\n        },\n\n        _getPlaceGoogle: function _getPlaceGoogle() {\n            return this.get(\"_objAddressSuggestion\").getPlace();\n        },\n\n        _initGoogleAutocomplete: function _initGoogleAutocomplete(objInput, objOptions, funcPopulateValues) {\n            if (!a24Core.isEmpty(window.google) && !a24Core.isEmpty(window.google.maps) && !a24Core.isEmpty(window.google.maps.places)) {\n                this.set(\"_objAddressSuggestion\", new window.google.maps.places.Autocomplete(objInput, objOptions));\n\n                this.get(\"_objAddressSuggestion\").addListener(\"place_changed\", funcPopulateValues);\n            }\n        },\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objThis = this;\n\n            var funcPopulateValues = function funcPopulateValues() {\n                var objPlace = objThis._getPlaceGoogle();\n                var sLongitude = \"\";\n                var sLatitude = \"\";\n                var sAddress = \"\";\n\n                if (!a24Core.isEmpty(objPlace.geometry)) {\n                    sLongitude = objPlace.geometry.location.lng();\n                    sLatitude = objPlace.geometry.location.lat();\n                }\n                if (!a24Core.isEmpty(objPlace.formatted_address)) {\n                    sAddress = objPlace.formatted_address;\n                }\n\n                var mValue = {\n                    sLongitude: sLongitude,\n                    sLatitude: sLatitude,\n                    sAddressString: sAddress\n                };\n                objThis.set(\"mValue\", mValue);\n            };\n\n            var funcSuccessCallback = function funcSuccessCallback() {\n                if (a24Core.isEmpty(objThis)) {\n                    return;\n                }\n                Ember.run(function () {\n\n                    var objHtmlInput = $(\"#\" + objThis.get(\"_sInputId\"))[0];\n\n                    var objOptions = {\n                        types: [\"geocode\"],\n                        fields: [\"geometry\", \"formatted_address\"] //Have to limit what response gives back else we get billed more\n                        //All Basic details are free, they are:\n                        //address_component, adr_address, alt_id, formatted_address, geometry, icon, id, name,\n                        //permanently_closed, photo, place_id, scope, type, url, utc_offset, vicinity\n\n                        //NOTE!!! some responses from google can have address_components and geometry as empty so need to cater for that\n                    };\n\n                    var arrLimitByCountryCodes = objThis.get(\"arrLimitByCountryCodes\");\n                    if (!a24Core.isEmpty(arrLimitByCountryCodes)) {\n                        objOptions.componentRestrictions = { country: arrLimitByCountryCodes };\n                    }\n\n                    objThis._initGoogleAutocomplete(objHtmlInput, objOptions, funcPopulateValues);\n\n                    objThis.set(\"_bInitDone\", true);\n                    objThis.set(\"_bLoading\", false);\n                    if (!a24Core.isEmpty(objThis.get(\"onInputFormAddressSuggestInitDone\"))) {\n                        // Send the current input instance on\n                        objThis.get(\"onInputFormAddressSuggestInitDone\")(objThis);\n                    }\n                });\n            };\n            var funcFailCallback = function funcFailCallback() {\n                if (a24Core.isEmpty(objThis)) {\n                    return;\n                }\n                Ember.run(function () {\n                    //eslint-disable-next-line no-console\n                    console.warn(\"Failed to load script needed for the input form address suggest\");\n                    objThis.get(\"onInputFormAddressSuggestError\")();\n                    objThis.set(\"_bLoading\", false);\n                });\n            };\n\n            if (!a24Core.isEmpty(this.get(\"_funcScriptMock\"))) {\n                this.set(\"_funcScriptMock\", function () {\n                    Ember.run.later(function () {\n                        funcSuccessCallback();\n                    }, 100);\n                });\n            }\n\n            if (a24Core.isEmpty(this.get(\"onInputFormAddressSuggestInitDone\"))) {\n                //eslint-disable-next-line no-console\n                console.error(\"You have to handle and wait for the onInputFormAddressSuggestInitDone to fire before interacting with \" + \"this input\");\n            }\n\n            var objTextInput = null;\n            Ember.run.scheduleOnce(\"afterRender\", this, function () {\n                var _this = this;\n\n                objTextInput = $(\"#\" + objThis.get(\"_sInputId\"));\n\n                if (this.get(\"_objEnv\").environment === \"test\" && !a24Core.isEmpty(this.get(\"_funcScriptMock\"))) {\n                    // This is test setup\n                    // We are doing this since we do not want to pass on properties from on component to the next the\n                    // whole time just to mock the ajax call. so we default it to return this to set the mValue of the input\n                    this.set(\"_getPlaceGoogle\", function () {\n                        return {\n                            geometry: {\n                                location: {\n                                    lng: function lng() {\n                                        return 123;\n                                    },\n                                    lat: function lat() {\n                                        return 321;\n                                    }\n                                }\n                            },\n                            formatted_address: \"some Address\"\n                        };\n                    });\n                    this.set(\"_initGoogleAutocomplete\", function (objInput, objSettings, funcListenerCallback) {\n                        objTextInput.on(\"onSetAddressSuggestForTest\", function (objEvent, objAddress) {\n                            _this.set(\"_getPlaceGoogle\", function () {\n                                return objAddress;\n                            });\n                            funcListenerCallback();\n                        });\n                    });\n\n                    this.get(\"_funcScriptMock\")();\n                } else {\n                    this.get(\"_objInputAddressService\").loadScript(funcSuccessCallback, funcFailCallback);\n                }\n\n                this.$(\"label\").addClass(\"active\");\n\n                if (!a24Core.isEmpty(objThis.get(\"mValue\"))) {\n\n                    // Set the mvalue first\n                    this.setMValueWithInternalFlag(this.get(\"mValue\"), true);\n\n                    // firing a change here will cause the mvalue to update to\n                    // the same value, hence not causing a duplicate event to be fired\n                    objTextInput.val(this.get(\"mValue.sAddressString\"));\n                    objTextInput.change();\n                }\n\n                objTextInput.on(\"keyup\", function (objEvent) {\n                    if (objEvent.which === 27) {\n                        // Escape key\n                        objTextInput.change();\n                        objTextInput.blur();\n                    }\n                });\n                1;\n                objTextInput.on(\"blur\", function () {\n                    if (!objThis.get(\"_bInputLoading\")) {\n                        objThis.resetFloatingLabel(objTextInput);\n                    }\n                });\n            });\n        },\n        clear: function clear() {\n            this.setValueFromOutside(\"\");\n        },\n        setValueFromOutside: function setValueFromOutside(mValue) {\n            if (!this.get(\"_bInitDone\")) {\n                //eslint-disable-next-line no-console\n                console.error(\"You have to wait for the onInputFormAddressSuggestInitDone to fire before interacting with this input\");\n            }\n\n            this.setMValueWithInternalFlag(mValue, false);\n\n            //Set the new value onto the input since it does not bind anymore\n            var objTextInput = $(\"#\" + this.get(\"_sInputId\"));\n            objTextInput.val(mValue.sAddressString);\n            objTextInput.change();\n\n            this.resetFloatingLabel(objTextInput);\n        },\n        observeValueChange: Ember.observer(\"mValue\", function () {\n            this.setValueFromOutside(this.get(\"mValue\"));\n        }),\n        loadingObserver: Ember.observer(\"bLoading\", \"_bLoading\", function () {\n            if (!this.get(\"bLoading\") && !this.get(\"_bLoading\")) {\n                this.resetFloatingLabel($(\"#\" + this.get(\"_sInputId\")));\n                this.set(\"_bInputLoading\", false);\n            } else {\n                this.$(\"label\").addClass(\"active\");\n                this.set(\"_bInputLoading\", true);\n            }\n        }),\n        resetFloatingLabel: function resetFloatingLabel(objTextInput) {\n            //If the input field has no value then the label should NOT have the active class and\n            //float at placeholder position\n            if (!a24Core.isEmpty(objTextInput) && a24Core.isEmpty(objTextInput.val())) {\n                this.$(\"label\").removeClass(\"active\");\n            }\n        }\n    });\n});","define(\"a24-ember-form-inputs/components/input-form-email\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-form-inputs/templates/components/input-form-email\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _didRenderChangesMixin, _inputFormEmail, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _inputFormEmail.default,\n        classNames: [\"a24ErrorInputParent\", \"md-form\"],\n        sValue: null,\n        sInputType: \"email\",\n        arrDelayedValidation: null, //public so that you can add to this in the form setup aswell\n\n        objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        _bInitDone: false,\n        _objAjax: $.ajax,\n        _objFormInputsStringsService: Ember.inject.service(\"a24-strings-form-inputs\"),\n        _objFormInputsConstants: Ember.inject.service(\"a24-constants-form-inputs\"),\n        _iTimeout: 25,\n        _bAbortCall: false,\n\n        // This is a empty function so that the empty check would pass\n        _funcScriptMock: function _funcScriptMock() {},\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            if (!a24Core.isEmpty(this.get(\"_funcScriptMock\"))) {\n                this.set(\"_funcScriptMock\", function () {\n                    Ember.run.later(function () {\n                        _this.get(\"onInputFormEmailInitDone\")(_this);\n                    }, 100);\n                });\n            }\n\n            if (a24Core.isEmpty(this.get(\"onInputFormEmailInitDone\"))) {\n                //eslint-disable-next-line no-console\n                console.error(\"You have to handle and wait for the onInputFormEmailInitDone to fire before interacting with \" + \"this input\");\n            }\n\n            var objThis = this;\n            var objTextInput = null;\n            Ember.run.scheduleOnce(\"afterRender\", this, function () {\n\n                objTextInput = $(\"#\" + objThis.get(\"_sInputId\"));\n\n                if (!a24Core.isEmpty(objThis.get(\"sValue\"))) {\n\n                    // Set the mvalue first\n                    this.setMValueWithInternalFlag(this.get(\"sValue\"), true);\n\n                    // firing a change here will cause the mvalue to update to\n                    // the same value, hence not causing a duplicate event to be fired\n                    objTextInput.val(this.get(\"sValue\"));\n                    objTextInput.change();\n                }\n\n                objTextInput.on(\"keyup\", function (objEvent) {\n                    if (objEvent.which === 27) {\n                        // Escape key\n                        objTextInput.change();\n                        objTextInput.blur();\n                    }\n                });\n\n                if (!a24Core.isEmpty(objThis.get(\"iMaxCharacters\"))) {\n                    objTextInput.attr(\"length\", objThis.get(\"iMaxCharacters\"));\n                    objTextInput.characterCounter();\n                }\n\n                this.resetFloatingLabel(objTextInput);\n\n                objTextInput.on(\"blur\", function () {\n                    objThis.resetFloatingLabel(objTextInput);\n                });\n            });\n\n            if (a24Core.isEmpty(this.get(\"arrDelayedValidation\"))) {\n                this.set(\"arrDelayedValidation\", []);\n            }\n\n            //We are taking a shortcut to only support Delayed Validation on this input for now. The idea would be to\n            //update the `input-form-element.js` to also do the arrDelayedValidation when we call `doValidation(true)`\n            //The `doFullValidation` and the `doValidation` would be updated to take in a callback function.\n            //Then from the parent side instead of doing just `if (!this.doFullValidation()){...}` you would do\n            // this.doFullValidation((bHasErrors) => {\n            //     if (!bHasErrors) {\n            //         ...\n            //     }\n            // })\n            //The arrDelayedValidation would work the same as the arrValidation where each function just returns a string\n            //if there was an error of nothing when validation passed, only difference is the arrDelayedValidation will do\n            //that with a callback instead of instantly returning. The `doValidation` would take care of keeping track\n            //of all the callbacks and also setting the error message on the input\n\n            //So the shotcut for this input is that we setup the arrDelayedValidation correctly to work with the approach\n            //above, but for now the parent component will need to manually execute the arrDelayedValidation and set error\n            //message e.g\n            // if (!this.doFullValidation()) { //all normal validation passes\n            //     this.get(\"objChildren.sEmailFieldProp.arrDelayedValidation.0\")((sErrorMessage) => {\n            //         //NOTE this is sErrorMessage because we call it directly on the input, if it went through\n            //         //doFullValidation with a callback it whould have been bHasErrors\n            //         if (sErrorMessage) {\n            //             this.setResponseError([\"sEmailFieldProp\"]], sErrorMessage, true, true);\n            //         } else {\n            //             //do save service call\n            //         }\n            //     });\n            // }\n\n            this.get(\"arrDelayedValidation\").pushObject(function (objCallback) {\n                //If scripts failed to load we treat this as a PASS, because we do not want to block the user progress\n                //when neverbounce is having issues\n\n                if (a24Core.isEmpty(window._nb)) {\n                    objCallback();\n                    return;\n                }\n                // This is here since neverbounce does not return us a promise that we can tie into to check if they giving\n                // 500 errors on their widget\n                objThis.set(\"_bAbortCall\", false);\n                var objRunLater = Ember.run.later(function () {\n                    objThis.set(\"_bAbortCall\", true);\n                    objCallback();\n                },\n                // This is hardcoded to 25 seconds since this is the same as the neverbounce default timeout\n                // NOTE: if we increase timeout for neverbounce we need to increase this\n                objThis.get(\"_iTimeout\") * 1000);\n\n                window._nb.api.getValidatePublic(_this.get(\"mValue\"), function (objResult) {\n                    // If the timeout is up then we will not execute the callback.\n                    if (objThis.get(\"_bAbortCall\")) {\n                        return;\n                    }\n                    // We need to cancel the run later else it will trigger even if neverbounce succeeds/fails\n                    Ember.run.cancel(objRunLater);\n                    if (a24Core.isEmpty(objThis)) {\n                        return;\n                    }\n                    Ember.run(function () {\n                        if (!a24Core.isEmpty(objResult) && !a24Core.isEmpty(objResult.response) && !a24Core.isEmpty(objResult.response.allow_entry)) {\n                            if (objResult.response.allow_entry) {\n                                // Success\n                                objCallback();\n                            } else {\n                                //Set error message on input saying email is not valid/allowed\n                                objCallback(objThis.get(\"_objFormInputsStringsService\").getString(\"invalidEmail\"));\n                            }\n                        } else {\n                            //For now this will count as validation PASS, because we do not want to block the user progress\n                            //when neverbounce does not return anything\n                            objCallback();\n                        }\n                    });\n                }, function () {\n                    // If the timeout is up then we will not execute the callback.\n                    if (objThis.get(\"_bAbortCall\")) {\n                        return;\n                    }\n                    // We need to cancel the run later else it will trigger even if neverbounce succeeds/fails\n                    Ember.run.cancel(objRunLater);\n                    if (a24Core.isEmpty(objThis)) {\n                        return;\n                    }\n                    Ember.run(function () {\n                        //For now this will count as validation PASS, because we do not want to block the user progress\n                        //when neverbounce is having issues\n                        objCallback();\n                    });\n                });\n            });\n\n            objThis.get(\"arrValidation\").pushObject(function () {\n                if (!a24Core.isEmpty(objTextInput.val())) {\n                    // This is our regex we used before for our emails\n                    var sEmailRegex = objThis.get(\"_objFormInputsConstants.EMAIL_REGEX\");\n                    // This is the regex for emails from neverbounce that they suggest we do before calling the api. But its very strict\n                    // /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/\n                    var objRegEmail = new RegExp(sEmailRegex);\n\n                    if (!objRegEmail.test(objTextInput.val().trim())) {\n                        return objThis.get(\"_objFormInputsStringsService\").getTokenString(\"validationEmail\", objThis.get(\"sFieldName\"));\n                    }\n                }\n            });\n\n            if (!a24Core.isEmpty(this.get(\"objEnv\").sNeverBounceApiKey)) {\n                window._NBSettings = {\n                    apiKey: this.get(\"objEnv\").sNeverBounceApiKey,\n                    // This is their default timeout. Only added this for when we want to decrease/increase the timeout\n                    // Also we can change other stuff aswell. Check here https://developers.neverbounce.com/docs/widget-getting-started\n                    timeout: this.get(\"_iTimeout\")\n                };\n            }\n\n            if (objThis.get(\"objEnv\").environment === \"test\" && !a24Core.isEmpty(objThis.get(\"_funcScriptMock\"))) {\n                // Test setup\n                objThis.get(\"_funcScriptMock\")();\n            } else {\n                objThis.get(\"_objAjax\")({\n                    // This has to be https to work since their js will only be retrieved with it\n                    url: \"https://cdn.neverbounce.com/widget/dist/NeverBounce.js\",\n                    dataType: \"script\",\n                    cache: true\n                }).done(function () {\n                    if (a24Core.isEmpty(objThis)) {\n                        return;\n                    }\n                    Ember.run(function () {\n                        if (!a24Core.isEmpty(objThis.get(\"onInputFormEmailInitDone\"))) {\n                            // Send the current input instance on\n                            objThis.get(\"onInputFormEmailInitDone\")(objThis);\n                        }\n                    });\n                }).fail(function () {\n                    if (a24Core.isEmpty(objThis)) {\n                        return;\n                    }\n                    Ember.run(function () {\n                        //eslint-disable-next-line no-console\n                        console.warn(\"Failed to load script needed for the input form email input\");\n                        objThis.get(\"onInputFormEmailInitDone\")(objThis);\n                    });\n                }).always(function () {\n                    if (a24Core.isEmpty(objThis)) {\n                        return;\n                    }\n                    Ember.run(function () {\n                        objThis.set(\"_bInitDone\", true);\n                    });\n                });\n            }\n        },\n        clear: function clear() {\n            this.setValueFromOutside(\"\");\n        },\n        setValueFromOutside: function setValueFromOutside(sValue) {\n            if (!this.get(\"_bInitDone\")) {\n                //eslint-disable-next-line no-console\n                console.error(\"You have to wait for the onInputFormEmailInitDone to fire before interacting with this input\");\n            }\n\n            this.setMValueWithInternalFlag(sValue, false);\n\n            //Set the new value onto the input since it does not bind anymore\n            var objTextInput = $(\"#\" + this.get(\"_sInputId\"));\n            objTextInput.val(sValue);\n            objTextInput.change();\n\n            this.resetFloatingLabel(objTextInput);\n        },\n        observeValueChange: Ember.observer(\"sValue\", function () {\n            this.setValueFromOutside(this.get(\"sValue\"));\n        }),\n        resetFloatingLabel: function resetFloatingLabel(objTextInput) {\n            //If the input field has no value then the label should NOT have the active class and\n            //float at placeholder position\n            if (a24Core.isEmpty(objTextInput.val())) {\n                this.$(\"label\").removeClass(\"active\");\n            }\n        },\n        actions: {\n            onInputChange: function onInputChange(sValue) {\n                // any internal changes that fire this function will have updated\n                // mvalue already, meaning the duplicate update will not fire any\n                // additional events\n                this.setMValueWithInternalFlag(sValue, false);\n            }\n        }\n    });\n});","define(\"a24-ember-form-inputs/components/input-form-number\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-form-inputs/templates/components/input-form-number\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _didRenderChangesMixin, _inputFormNumber, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _inputFormNumber.default,\n        classNames: [\"input-form-number\", \"md-form\", \"a24ErrorInputParent\"],\n        classNameBindings: [\"bIsOutline:a24-form-outlined\", \"bDisabled:is-disabled\"],\n        sInputType: \"number\",\n        iStepValue: 1,\n        iMinValue: null,\n        iMaxValue: null,\n        bForceStep: false,\n        bSpinValue: false,\n        bDisabled: false,\n        bIsOutline: false,\n        bFormatOnFocusout: false,\n        bDisplayDefault: false,\n        bAllowFloat: false,\n        bAllowNegative: false,\n        iFloatPlaces: 1,\n        iLeadingZero: null,\n        _sValue: \"\",\n        _sInputId: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n            this.set(\"_sInputId\", Ember.guidFor({}));\n\n            Ember.run.scheduleOnce(\"afterRender\", this, function () {\n                var _this = this;\n\n                var objTextInput = $(\"#\" + this.get(\"_sInputId\"));\n\n                objTextInput.on(\"blur\", function () {\n                    _this.resetFloatingLabel();\n\n                    if (!_this.get(\"_bInternalChange\") && _this.get(\"bFormatOnFocusout\")) {\n                        _this._setValueFromInputChange(_this.get(\"_sValue\"));\n                    }\n                });\n\n                objTextInput.on(\"keyup\", function (objEvent) {\n                    if (objEvent.keyCode === 27) {\n                        // Escape key\n                        objTextInput.change();\n                        objTextInput.blur();\n                    }\n                });\n\n                objTextInput.on(\"keydown\", function (objEvent) {\n                    if (objEvent.keyCode === 38) {\n                        _this._incrementValue();\n                    } else if (objEvent.keyCode === 40) {\n                        _this._decrementValue();\n                    }\n                });\n\n                objTextInput.on(\"wheel\", function (objEvent) {\n                    if (objTextInput.is(\":focus\")) {\n                        objEvent.preventDefault();\n                        objEvent.stopPropagation();\n                        Ember.run.once(_this, _this._handleWheelEvent, objEvent);\n                    }\n                });\n\n                this._setValueFromInputChange(null);\n            });\n        },\n        _handleWheelEvent: function _handleWheelEvent(objEvent) {\n            if (!a24Core.isEmpty(objEvent.originalEvent) && !a24Core.isEmpty(objEvent.originalEvent.deltaY)) {\n                if (objEvent.originalEvent.deltaY < 0) {\n                    this._incrementValue();\n                } else if (objEvent.originalEvent.deltaY > 0) {\n                    this._decrementValue();\n                }\n            }\n        },\n        _focus: function _focus() {\n            var _this2 = this;\n\n            Ember.run(function () {\n                _this2.$(\"input\").eq(0).focus();\n            });\n        },\n        _observeMaxValue: Ember.observer(\"iMaxValue\", function () {\n            if (!this.get(\"_bInternalChange\")) {\n                if (!a24Core.isEmpty(this.get(\"mValue\")) && !a24Core.isEmpty(this.get(\"iMaxValue\"))) {\n                    if (this.get(\"mValue\") > this.get(\"iMaxValue\")) {\n                        this._setValueFromInputChange(this.get(\"iMaxValue\") + \"\");\n                    }\n                }\n            }\n        }),\n        _observeMinValue: Ember.observer(\"iMinValue\", function () {\n            if (!this.get(\"_bInternalChange\")) {\n                if (!a24Core.isEmpty(this.get(\"mValue\")) && !a24Core.isEmpty(this.get(\"iMinValue\"))) {\n                    if (this.get(\"mValue\") < this.get(\"iMinValue\")) {\n                        this._setValueFromInputChange(this.get(\"iMinValue\") + \"\");\n                    }\n                }\n            }\n        }),\n        _observeSValue: Ember.observer(\"_sValue\", function () {\n            if (!this.get(\"_bInternalChange\") && !this.get(\"bFormatOnFocusout\")) {\n                this._setValueFromInputChange(this.get(\"_sValue\"));\n            }\n        }),\n        clear: function clear() {\n            this.setValueFromOutside(\"\");\n        },\n        _roundToNearestStep: function _roundToNearestStep(iValue) {\n            return Math.round(iValue / this.get(\"iStepValue\")) * this.get(\"iStepValue\");\n        },\n        _getDefaultDisplayValue: function _getDefaultDisplayValue() {\n            var sValue = \"0\";\n\n            if (!a24Core.isEmpty(this.get(\"iMinValue\")) && this.get(\"iMinValue\") > 0) {\n                sValue = \"\" + this.get(\"iMinValue\");\n            } else if (!a24Core.isEmpty(this.get(\"iMaxValue\")) && this.get(\"iMaxValue\") < 0) {\n                sValue = \"\" + this.get(\"iMaxValue\");\n            }\n\n            if (!a24Core.isEmpty(this.get(\"iLeadingZero\"))) {\n                sValue = this._addLeadingZerosToNumber(this._parseToNumber(sValue));\n            }\n\n            return sValue;\n        },\n        _setValueFromInputChange: function _setValueFromInputChange(sValue) {\n            this.set(\"_bInternalChange\", true);\n            var sNewValue = \"\";\n\n            if (!a24Core.isEmpty(sValue)) {\n                var objParsed = this._parseToString(sValue);\n                var iInputValue = null;\n\n                if (objParsed.sValue === \"-\") {\n                    sNewValue = objParsed.sValue;\n                } else if (a24Core.isEmpty(objParsed.sValue) && objParsed.bTrailingDot) {\n                    sNewValue = \".\";\n                } else if (!a24Core.isEmpty(objParsed.sValue)) {\n                    iInputValue = this._parseToNumber(objParsed.sValue);\n                }\n\n                if (!a24Core.isEmpty(iInputValue)) {\n                    if (!a24Core.isEmpty(this.get(\"iMaxValue\")) && iInputValue > this.get(\"iMaxValue\")) {\n                        iInputValue = this.get(\"iMaxValue\");\n                    }\n                    if (!a24Core.isEmpty(this.get(\"iMinValue\")) && iInputValue < this.get(\"iMinValue\")) {\n                        iInputValue = this.get(\"iMinValue\");\n                    }\n                    if (this.get(\"bForceStep\") && !this.get(\"bAllowFloat\")) {\n                        iInputValue = this._roundToNearestStep(iInputValue);\n                    }\n                    if (!a24Core.isEmpty(this.get(\"iLeadingZero\"))) {\n                        sNewValue = this._addLeadingZerosToNumber(iInputValue);\n                        if (objParsed.bTrailingDot) {\n                            sNewValue = sNewValue + \".\";\n                        }\n                    } else if (objParsed.bTrailingDot) {\n                        sNewValue = \"\" + iInputValue + \".\";\n                    } else {\n                        sNewValue = \"\" + iInputValue;\n                    }\n                } else if (this.get(\"bDisplayDefault\")) {\n                    sNewValue = this._getDefaultDisplayValue();\n                }\n            } else if (this.get(\"bDisplayDefault\")) {\n                sNewValue = this._getDefaultDisplayValue();\n            }\n\n            this._setInputValue(sNewValue);\n            this.set(\"_bInternalChange\", false);\n        },\n        _setInputValue: function _setInputValue(sValue) {\n            this.set(\"_sValue\", sValue);\n            var objTextInput = $(\"#\" + this.get(\"_sInputId\"));\n            objTextInput.val(sValue);\n            objTextInput.change();\n            this.resetFloatingLabel();\n\n            var iValue = null;\n            if (sValue !== \"-\" && sValue !== \".\") {\n                iValue = this._parseToNumber(sValue);\n            }\n            this.setMValueWithInternalFlag(iValue, false);\n        },\n        _parseToString: function _parseToString(sInputValue) {\n            if (a24Core.isEmpty(sInputValue)) {\n                return {\n                    sValue: null,\n                    bTrailingDot: false\n                };\n            }\n\n            var sParsedNumber = \"\";\n            var arrValids = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"];\n\n            if (this.get(\"bAllowFloat\")) {\n                arrValids.push(\".\");\n            }\n\n            if (this.get(\"bAllowNegative\")) {\n                arrValids.push(\"-\");\n            }\n\n            for (var i = 0; i < sInputValue.length; i++) {\n                if (arrValids.indexOf(sInputValue.charAt(i)) !== -1) {\n                    sParsedNumber += sInputValue.charAt(i);\n                }\n            }\n\n            //Make sure that there is only one \".\" in the string, we keep the first one and just remove the rest.\n            var arrSplit = sParsedNumber.split(\".\");\n            if (arrSplit.length !== 1) {\n                sParsedNumber = arrSplit[0] + \".\" + arrSplit[1];\n                for (var j = 2; j < arrSplit.length; j++) {\n                    sParsedNumber += arrSplit[j];\n                }\n            }\n\n            if (sParsedNumber.charAt(0) === \".\" && !this.get(\"bAllowFloat\")) {\n                sParsedNumber = \"\";\n            }\n\n            if (a24Core.isEmpty(sParsedNumber)) {\n                return {\n                    sValue: null,\n                    bTrailingDot: false\n                };\n            } else if (sParsedNumber === \".\") {\n                return {\n                    sValue: null,\n                    bTrailingDot: true\n                };\n            } else if (this.get(\"bAllowFloat\")) {\n                //Trim the string to the allowed float places.\n                var iIndexOfDot = sParsedNumber.indexOf(\".\");\n                if (iIndexOfDot !== -1) {\n                    sParsedNumber = sParsedNumber.substring(0, iIndexOfDot + 1 + this.get(\"iFloatPlaces\"));\n                }\n\n                return {\n                    sValue: sParsedNumber,\n                    bTrailingDot: sParsedNumber[sParsedNumber.length - 1] === \".\"\n                };\n            } else if (this.get(\"bAllowNegative\")) {\n                var iIndexOfNeg = sParsedNumber.indexOf(\"-\");\n                var iIndexOfOtherNeg = sParsedNumber.indexOf(\"-\", 1);\n                var sBeforeNeg = null;\n                var sAfterNeg = null;\n                if (iIndexOfNeg === 0) {\n                    if (iIndexOfOtherNeg !== -1) {\n                        sBeforeNeg = sParsedNumber.substring(0, iIndexOfOtherNeg);\n                        sAfterNeg = sParsedNumber.substring(iIndexOfOtherNeg + 1, sParsedNumber.length);\n                        sParsedNumber = sBeforeNeg + sAfterNeg;\n                    }\n                    if (sParsedNumber.length > 1) {\n                        return {\n                            sValue: sParsedNumber,\n                            bTrailingDot: false\n                        };\n                    }\n                    return {\n                        sValue: sParsedNumber,\n                        bTrailingDot: false\n                    };\n                } else if (iIndexOfNeg > 0) {\n                    sBeforeNeg = sParsedNumber.substring(0, iIndexOfNeg);\n                    sAfterNeg = sParsedNumber.substring(iIndexOfNeg + 1, sParsedNumber.length);\n                    sParsedNumber = sBeforeNeg + sAfterNeg;\n                }\n                return {\n                    sValue: sParsedNumber,\n                    bTrailingDot: false\n                };\n            } else {\n                return {\n                    sValue: sParsedNumber,\n                    bTrailingDot: false\n                };\n            }\n        },\n        _parseToNumber: function _parseToNumber(sValue) {\n            if (a24Core.isEmpty(sValue)) {\n                return null;\n            } else if (sValue === \"-\") {\n                return sValue;\n            } else if (this.get(\"bAllowFloat\")) {\n                return parseFloat(sValue);\n            } else {\n                return parseInt(sValue);\n            }\n        },\n        resetFloatingLabel: function resetFloatingLabel() {\n            //If the input field has no value then the label should NOT have the active class and\n            //float at placeholder position\n            if (a24Core.isEmpty(this.get(\"_sValue\"))) {\n                this.$(\"label\").removeClass(\"active\");\n            }\n        },\n        setValueFromOutside: function setValueFromOutside(iValue) {\n            this._setValueFromInputChange(iValue + \"\");\n        },\n\n        _addLeadingZerosToNumber: function _addLeadingZerosToNumber(iValue) {\n            var sValue = iValue < 0 ? \"-\" : \"\";\n            var sAbsValue = Math.abs(iValue) + \"\";\n            var iValueLength = sAbsValue.split(\".\")[0].length;\n            var iLength = this.get(\"iLeadingZero\") - iValueLength;\n\n            if (this.get(\"iLeadingZero\") > iValueLength) {\n                for (var i = 0; i < iLength; i++) {\n                    sValue += \"0\";\n                }\n            } else {\n                sAbsValue = sAbsValue.substring(iValueLength - this.get(\"iLeadingZero\"));\n            }\n\n            return sValue + sAbsValue;\n        },\n        _addFloatingZerosToNumber: function _addFloatingZerosToNumber(sValue) {\n            if (!a24Core.isEmpty(sValue.split(\".\")[1])) {\n                return sValue;\n            }\n            var sReturn = sValue;\n            if (sReturn.indexOf(\".\") === -1) {\n                sReturn += \".\";\n            }\n            for (var i = 0; i < this.get(\"iFloatPlaces\"); i++) {\n                sReturn += \"0\";\n            }\n            return sReturn;\n        },\n        _incrementValue: function _incrementValue() {\n            if (this.get(\"bDisabled\")) {\n                return;\n            }\n\n            this.set(\"_bInternalChange\", true);\n            var sValue = this.get(\"_sValue\");\n\n            if (a24Core.isEmpty(sValue) && !a24Core.isEmpty(this.get(\"iMinValue\"))) {\n                sValue = this.get(\"iMinValue\") + \"\";\n            } else if (a24Core.isEmpty(sValue)) {\n                sValue = \"0\";\n            }\n\n            var objParsed = this._parseToString(sValue);\n            var iInputValue = this._parseToNumber(objParsed.sValue);\n            if (this.get(\"bAllowFloat\")) {\n                iInputValue = this._parseToNumber(iInputValue.toFixed(this.get(\"iFloatPlaces\")));\n            }\n            if (!a24Core.isEmpty(iInputValue)) {\n                if (!a24Core.isEmpty(this.get(\"iMaxValue\")) && iInputValue >= this.get(\"iMaxValue\")) {\n                    if (this.get(\"bSpinValue\") === true && !a24Core.isEmpty(this.get(\"iMinValue\"))) {\n                        var iValue = this._roundToNearestStep(this.get(\"iMinValue\"));\n                        if (iValue < this.get(\"iMinValue\")) {\n                            iValue = iValue + this.get(\"iStepValue\");\n                        }\n                        if (!a24Core.isEmpty(this.get(\"iLeadingZero\"))) {\n                            sValue = this._addLeadingZerosToNumber(iValue);\n                        } else {\n                            sValue = \"\" + iValue;\n                        }\n                        if (!a24Core.isEmpty(this.get(\"onSpinMin\"))) {\n                            this.get(\"onSpinMin\")(iValue);\n                        }\n                    }\n                } else if (!a24Core.isEmpty(this.get(\"iMinValue\")) && iInputValue < this.get(\"iMinValue\")) {\n                    if (!a24Core.isEmpty(this.get(\"iLeadingZero\"))) {\n                        sValue = this._addLeadingZerosToNumber(this.get(\"iMinValue\"));\n                    } else {\n                        sValue = \"\" + this.get(\"iMinValue\");\n                    }\n                } else {\n                    if (!this.get(\"bAllowFloat\")) {\n                        iInputValue = Math.floor(iInputValue / this.get(\"iStepValue\")) * this.get(\"iStepValue\");\n                    }\n                    var iNewValue = iInputValue + this.get(\"iStepValue\");\n                    if (this.get(\"bAllowFloat\")) {\n                        iNewValue = this._parseToNumber(iNewValue.toFixed(this.get(\"iFloatPlaces\")));\n                    }\n                    if (!a24Core.isEmpty(this.get(\"iMaxValue\")) && iNewValue > this.get(\"iMaxValue\")) {\n                        if (this.get(\"bSpinValue\") && !a24Core.isEmpty(this.get(\"iMinValue\"))) {\n                            var iRounded = this._roundToNearestStep(this.get(\"iMinValue\"));\n                            var sNewValue = iNewValue + \"\";\n\n                            if (sNewValue.indexOf(\".\") !== -1 && !a24Core.isEmpty(sNewValue.split(\".\")[1])) {\n                                sNewValue = iRounded + \"\" + \".\" + sNewValue.split(\".\")[1];\n                                iNewValue = this._parseToNumber(sNewValue);\n                            } else {\n                                iNewValue = iRounded;\n                            }\n\n                            if (iNewValue < this.get(\"iMinValue\")) {\n                                iNewValue = this._parseToNumber((iNewValue + this.get(\"iStepValue\")).toFixed(this.get(\"iFloatPlaces\")));\n                            }\n\n                            if (!a24Core.isEmpty(this.get(\"onSpinMin\"))) {\n                                this.get(\"onSpinMin\")(iNewValue);\n                            }\n                        } else {\n                            iNewValue = iInputValue;\n                        }\n                    }\n                    if (objParsed.bTrailingDot) {\n                        sValue = \"\" + iNewValue + \".\";\n                    } else {\n                        sValue = \"\" + iNewValue;\n                    }\n\n                    if (!a24Core.isEmpty(this.get(\"iLeadingZero\"))) {\n                        sValue = this._addLeadingZerosToNumber(iNewValue);\n                    }\n                }\n            }\n            this._setInputValue(sValue);\n\n            this._focus();\n\n            this.set(\"_bInternalChange\", false);\n        },\n        _decrementValue: function _decrementValue() {\n            if (this.get(\"bDisabled\")) {\n                return;\n            }\n\n            this.set(\"_bInternalChange\", true);\n            var sValue = this.get(\"_sValue\");\n\n            if (a24Core.isEmpty(sValue) && !a24Core.isEmpty(this.get(\"iMinValue\"))) {\n                sValue = this.get(\"iMinValue\") + \"\";\n            } else if (a24Core.isEmpty(sValue)) {\n                sValue = \"0\";\n            }\n\n            var objParsed = this._parseToString(sValue);\n            var iInputValue = this._parseToNumber(objParsed.sValue);\n\n            if (!a24Core.isEmpty(iInputValue)) {\n                if (!a24Core.isEmpty(this.get(\"iMinValue\")) && iInputValue <= this.get(\"iMinValue\")) {\n                    if (this.get(\"bSpinValue\") === true && !a24Core.isEmpty(this.get(\"iMaxValue\"))) {\n                        var iValue = this._roundToNearestStep(this.get(\"iMaxValue\"));\n                        if (iValue > this.get(\"iMaxValue\")) {\n                            iValue = iValue - this.get(\"iStepValue\");\n                        }\n                        if (!a24Core.isEmpty(this.get(\"iLeadingZero\"))) {\n                            sValue = this._addLeadingZerosToNumber(iValue);\n                        } else {\n                            sValue = \"\" + iValue;\n                        }\n                        if (!a24Core.isEmpty(this.get(\"onSpinMax\"))) {\n                            this.get(\"onSpinMax\")(iValue);\n                        }\n                    }\n                } else {\n                    if (!this.get(\"bAllowFloat\")) {\n                        iInputValue = Math.ceil(iInputValue / this.get(\"iStepValue\")) * this.get(\"iStepValue\");\n                    }\n                    var iNewValue = iInputValue - this.get(\"iStepValue\");\n                    if (this.get(\"bAllowFloat\")) {\n                        iNewValue = this._parseToNumber(iNewValue.toFixed(this.get(\"iFloatPlaces\")));\n                    }\n\n                    if (!a24Core.isEmpty(this.get(\"iMinValue\")) && iNewValue < this.get(\"iMinValue\")) {\n                        if (this.get(\"bSpinValue\") && !a24Core.isEmpty(this.get(\"iMaxValue\"))) {\n                            var iRounded = this._roundToNearestStep(this.get(\"iMaxValue\"));\n                            var sNewValue = iNewValue + \"\";\n\n                            if (sNewValue.indexOf(\".\") !== -1 && !a24Core.isEmpty(sNewValue.split(\".\")[1])) {\n                                sNewValue = iRounded + \"\" + \".\" + sNewValue.split(\".\")[1];\n                                iNewValue = this._parseToNumber(sNewValue);\n                            } else {\n                                iNewValue = iRounded;\n                            }\n\n                            if (iNewValue > this.get(\"iMaxValue\")) {\n                                iNewValue = this._parseToNumber((iNewValue - this.get(\"iStepValue\")).toFixed(this.get(\"iFloatPlaces\")));\n                            }\n\n                            if (!a24Core.isEmpty(this.get(\"onSpinMax\"))) {\n                                this.get(\"onSpinMax\")(iNewValue);\n                            }\n                        } else {\n                            iNewValue = iInputValue;\n                        }\n                    } else if (!this.get(\"bAllowNegative\") && a24Core.isEmpty(this.get(\"iMinValue\")) && iNewValue < 0) {\n                        iNewValue = 0;\n                    }\n\n                    if (objParsed.bTrailingDot) {\n                        sValue = \"\" + iNewValue + \".\";\n                    } else {\n                        sValue = \"\" + iNewValue;\n                    }\n\n                    if (!a24Core.isEmpty(this.get(\"iLeadingZero\"))) {\n                        sValue = this._addLeadingZerosToNumber(iNewValue);\n                    }\n                }\n            }\n            this._setInputValue(sValue);\n\n            this._focus();\n\n            this.set(\"_bInternalChange\", false);\n        },\n        actions: {\n            incrementValue: function incrementValue() {\n                this._incrementValue();\n            },\n            decrementValue: function decrementValue() {\n                this._decrementValue();\n            }\n        }\n    });\n});","define(\"a24-ember-form-inputs/components/input-form-shift\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-form-inputs/templates/components/input-form-shift\"], function (exports, _didRenderChangesMixin, _inputFormElement, _inputFormShift) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _inputFormShift.default,\n        classNames: [\"input-form-shift\", \"md-form\", \"a24ErrorInputParent\"],\n        sInputType: \"shift\",\n        bIsOutline: false,\n        bDisabled: false,\n        bForceMinuteStep: false,\n        bDefaultDateToCurrentDate: true,\n        bDefaultTimeToCurrentTime: true,\n        iHourStepValue: 1,\n        iMinuteStepValue: 15,\n\n        _sTotal: null,\n        _objMaxDate: null,\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objFormInputsStringsService: Ember.inject.service(\"a24-strings-form-inputs\"),\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            // Set max date\n            var objMaxDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n\n            objMaxDate.addTimeToDate(this.get(\"_objLibConstants.MOMENT_TIME_YEARS\"), 1);\n            objMaxDate.endOf(this.get(\"_objLibConstants.MOMENT_UNIT_YEAR\"));\n\n            this.set(\"_objMaxDate\", objMaxDate);\n\n            Ember.run.next(function () {\n                Ember.run.schedule(\"afterRender\", function () {\n                    // Set start and end date\n                    _this._setDefaultDateAndTime();\n                });\n            });\n\n            var objValidationConfig = {};\n\n            objValidationConfig[\"objChildren.startDate\"] = function (objMixin) {\n                objMixin.get(\"arrValidation\").pushObject(function () {\n                    if (_this.get(\"bRequired\") && a24Core.isEmpty(_this.get(\"mValue.sStartDate\"))) {\n                        return _this.get(\"_objStringsService\").getTokenString(\"validationRequired\", _this.get(\"_objFormInputsStringsService\").getString(\"startDate\"));\n                    }\n                });\n            };\n\n            this.set(\"objChildConfig\", objValidationConfig);\n        },\n\n        clear: function clear() {\n            this.get(\"objChildren.startDate\").clear();\n            this.get(\"objChildren.startTime\").clear();\n            this.get(\"objChildren.endDate\").clear();\n            this.get(\"objChildren.endTime\").clear();\n            this._setDefaultDateAndTime();\n        },\n\n        _setDefaultDateAndTime: function _setDefaultDateAndTime() {\n            var objCurrentDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n\n            if (this.get(\"bDefaultDateToCurrentDate\")) {\n                this.get(\"objChildren.startDate\").setValueFromOutside(objCurrentDate.getDateFormat());\n            }\n\n            if (this.get(\"bDefaultTimeToCurrentTime\")) {\n                var iMinute = objCurrentDate.getTimeOnDate(this.get(\"_objLibConstants.MOMENT_TIME_MINUTES\"));\n                iMinute = Math.floor(iMinute / this.get(\"iMinuteStepValue\")) * this.get(\"iMinuteStepValue\");\n\n                objCurrentDate.setTimeOnDate(this.get(\"_objLibConstants.MOMENT_TIME_MINUTES\"), iMinute);\n\n                this.get(\"objChildren.startTime\").setValueFromOutside({\n                    iHour: objCurrentDate.getTimeOnDate(this.get(\"_objLibConstants.MOMENT_TIME_HOURS\")),\n                    iMinute: objCurrentDate.getTimeOnDate(this.get(\"_objLibConstants.MOMENT_TIME_MINUTES\"))\n                });\n\n                objCurrentDate.addTimeToDate(this.get(\"_objLibConstants.MOMENT_TIME_MINUTES\"), this.get(\"iMinuteStepValue\"));\n\n                this.get(\"objChildren.endTime\").setValueFromOutside({\n                    iHour: objCurrentDate.getTimeOnDate(this.get(\"_objLibConstants.MOMENT_TIME_HOURS\")),\n                    iMinute: objCurrentDate.getTimeOnDate(this.get(\"_objLibConstants.MOMENT_TIME_MINUTES\"))\n                });\n            }\n        },\n\n        getPlainFormValueObject: function getPlainFormValueObject() {\n            return {\n                startDate: this.get(\"objChildren.startDate.mValue\"),\n                startTime: this.get(\"objChildren.startTime.mValue\"),\n                endDate: this.get(\"objChildren.endDate.mValue\"),\n                endTime: this.get(\"objChildren.endTime.mValue\")\n            };\n        },\n\n        onInputValueChanged: function onInputValueChanged(arrChildRef) {\n            if (a24Core.isEmpty(arrChildRef)) {\n                return;\n            }\n\n            // Get the reference of the field that changed\n            var sLookup = arrChildRef.join(\".\");\n\n            if (sLookup === \"objChildren.startDate\" && !a24Core.isEmpty(this.get(\"objChildren.startDate.mValue\"))) {\n                this.get(\"objChildren.endDate\").setValueFromOutside(this.get(\"objChildren.startDate.mValue\"));\n            }\n\n            if (sLookup === \"objChildren.startTime\" || sLookup === \"objChildren.startDate\" || sLookup === \"objChildren.endTime\") {\n                var objValue = this._formatPlainFormValueObject(this.getPlainFormValueObject());\n\n                if (!a24Core.isEmpty(objValue.sStartDate) && !a24Core.isEmpty(objValue.sEndDate)) {\n                    var objStartDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                    var objEndDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                    objStartDate.setDateFromBrowser(objValue.sStartDate, this.get(\"_objLibConstants.DATE_TIME_FORMAT\"));\n                    objEndDate.setDateFromBrowser(objValue.sEndDate, this.get(\"_objLibConstants.DATE_TIME_FORMAT\"));\n\n                    var iStartHour = objStartDate.getTimeOnDate(this.get(\"_objLibConstants.MOMENT_TIME_HOURS\"));\n                    var iStartMinute = objStartDate.getTimeOnDate(this.get(\"_objLibConstants.MOMENT_TIME_MINUTES\"));\n                    var iEndHour = objEndDate.getTimeOnDate(this.get(\"_objLibConstants.MOMENT_TIME_HOURS\"));\n                    var iEndMinute = objEndDate.getTimeOnDate(this.get(\"_objLibConstants.MOMENT_TIME_MINUTES\"));\n\n                    // If end date is less than or equal to start date by minutes\n                    if (objEndDate.difference(objStartDate, this.get(\"_objLibConstants.MOMENT_TIME_MINUTES\")) <= 0) {\n                        objEndDate.addTimeToDate(this.get(\"_objLibConstants.MOMENT_TIME_DAYS\"), 1);\n                        this.get(\"objChildren.endDate\").setValueFromOutside(objEndDate.getDateFormat());\n                    } else if (objEndDate.difference(objStartDate, this.get(\"_objLibConstants.MOMENT_TIME_DAYS\")) > 0 && (iEndHour > iStartHour || iEndMinute > iStartMinute)) {\n                        this.get(\"objChildren.endDate\").setValueFromOutside(objStartDate.getDateFormat());\n                    }\n                }\n            }\n\n            Ember.run.once(this, this._setMValue);\n            Ember.run.once(this, this._updateTotal);\n        },\n\n        _setMValue: function _setMValue() {\n            this.setMValueWithInternalFlag(this._formatPlainFormValueObject(this.getPlainFormValueObject()), false);\n        },\n\n        setValueFromOutside: function setValueFromOutside(objValue) {\n            if (!a24Core.isEmpty(objValue.sStartDate)) {\n                var objStartDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n\n                objStartDate.setDateFromBrowser(objValue.sStartDate, this.get(\"_objLibConstants.DATE_TIME_FORMAT\"));\n\n                this.get(\"objChildren.startDate\").setValueFromOutside(objStartDate.getDateFormat());\n                this.get(\"objChildren.startTime\").setValueFromOutside({\n                    iHour: objStartDate.getTimeOnDate(this.get(\"_objLibConstants.MOMENT_TIME_HOURS\")),\n                    iMinute: objStartDate.getTimeOnDate(this.get(\"_objLibConstants.MOMENT_TIME_MINUTES\"))\n                });\n            }\n\n            if (!a24Core.isEmpty(objValue.sEndDate)) {\n                var objEndDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n\n                objEndDate.setDateFromBrowser(objValue.sEndDate, this.get(\"_objLibConstants.DATE_TIME_FORMAT\"));\n\n                this.get(\"objChildren.endDate\").setValueFromOutside(objEndDate.getDateFormat());\n                this.get(\"objChildren.endTime\").setValueFromOutside({\n                    iHour: objEndDate.getTimeOnDate(this.get(\"_objLibConstants.MOMENT_TIME_HOURS\")),\n                    iMinute: objEndDate.getTimeOnDate(this.get(\"_objLibConstants.MOMENT_TIME_MINUTES\"))\n                });\n            }\n        },\n\n\n        checkExtraTypes: function checkExtraTypes() {\n            return {\n                bHandled: true,\n                mReturned: this.get(\"mValue\")\n            };\n        },\n\n        _formatPlainFormValueObject: function _formatPlainFormValueObject(objData) {\n            var objReturn = {};\n\n            if (!a24Core.isEmpty(objData.startDate)) {\n                objReturn.sStartDate = \"\" + objData.startDate;\n\n                if (!a24Core.isEmpty(objData.startTime) && !a24Core.isEmpty(objData.startTime.iHour) && !a24Core.isEmpty(objData.startTime.iMinute)) {\n                    var sStartHour = this._formatTimeUnit(objData.startTime.iHour);\n                    var sStartMinute = this._formatTimeUnit(objData.startTime.iMinute);\n                    objReturn.sStartDate += \" \" + sStartHour + \":\" + sStartMinute;\n                }\n            }\n\n            if (!a24Core.isEmpty(objData.endDate)) {\n                objReturn.sEndDate = \"\" + objData.endDate;\n\n                if (!a24Core.isEmpty(objData.endTime) && !a24Core.isEmpty(objData.endTime.iHour) && !a24Core.isEmpty(objData.endTime.iMinute)) {\n                    var sEndHour = this._formatTimeUnit(objData.endTime.iHour);\n                    var sEndMinute = this._formatTimeUnit(objData.endTime.iMinute);\n                    objReturn.sEndDate += \" \" + sEndHour + \":\" + sEndMinute;\n                }\n            }\n\n            return objReturn;\n        },\n\n        _formatTimeUnit: function _formatTimeUnit(iUnit) {\n            return iUnit < 10 ? \"0\" + iUnit : \"\" + iUnit;\n        },\n\n        _updateTotal: function _updateTotal() {\n            var objValue = this.get(\"mValue\");\n            var sTotal = \"\";\n\n            if (!a24Core.isEmpty(objValue.sStartDate) && !a24Core.isEmpty(objValue.sEndDate)) {\n                var iDiff = momentHelper.stringDiffInUnits(objValue.sEndDate, this.get(\"_objLibConstants.DATE_TIME_FORMAT\"), objValue.sStartDate, this.get(\"_objLibConstants.DATE_TIME_FORMAT\"), this.get(\"_objLibConstants.MOMENT_TIME_HOURS\"), true);\n\n                var iHour = parseInt(iDiff);\n                var iMinute = Math.round(60 * (iDiff - iHour));\n\n                if (iHour > 0) {\n                    sTotal += iHour + \"H\";\n                }\n                if (iMinute > 0) {\n                    if (!a24Core.isEmpty(sTotal)) {\n                        sTotal += \" \";\n                    }\n                    sTotal += iMinute + \"Min\";\n                }\n            }\n\n            if (a24Core.isEmpty(sTotal)) {\n                sTotal = this.get(\"_objFormInputsStringsService\").getString(\"total\");\n            }\n\n            this._setTotal(sTotal);\n        },\n\n        _setTotal: function _setTotal(sTotal) {\n            this.set(\"_sTotal\", sTotal);\n        }\n    });\n});","define(\"a24-ember-form-inputs/components/input-form-tel-number\", [\"exports\", \"a24-ember-form-inputs/templates/components/input-form-tel-number\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _inputFormTelNumber, _inputFormElement, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _inputFormTelNumber.default,\n        classNames: [\"a24TelInput\", \"a24ErrorInputParent\", \"md-form\"],\n        sValue: null,\n        sInputType: \"tel\",\n        sCountryCode: \"\",\n        // You have to handle the onInputFormTelNumberInitDone in the parent app\n        onInputFormTelNumberInitDone: null,\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        //Remember to also update the scss vars when updating this to new version\n        _sDefaultCountry: \"gb\",\n        _bInitDone: false,\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objInputFormStringsService: Ember.inject.service(\"a24-strings-form-inputs\"),\n        _objInputTelInputService: Ember.inject.service(\"input-form-tel-input-service\"),\n        _objAjax: $.ajax,\n        // this property exists so that we can init the component for formating purposes\n        _objIntlTelConfig: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n            if (a24Core.isEmpty(this.get(\"onInputFormTelNumberInitDone\"))) {\n                //eslint-disable-next-line no-console\n                console.error(\"You have to handle and wait for the onInputFormTelNumberInitDone to fire before interacting with \" + \"this input\");\n            }\n\n            var objThis = this;\n            Ember.run.scheduleOnce(\"afterRender\", this, function () {\n\n                var objTextInput = $(\"#\" + objThis.get(\"_sInputId\"));\n\n                if (a24Core.isEmpty(objThis.get(\"sCountryCode\"))) {\n                    if (objThis.get(\"env\").environment === \"test\") {\n                        objThis.set(\"sCountryCode\", objThis.get(\"_sDefaultCountry\"));\n                        objThis.loadScripts(objThis);\n                    } else {\n                        // only do geo lookup on candidate context and on registration page\n                        // the context will be null if on registration page\n                        if (a24Core.isEmpty(objThis.get(\"_objNavigation.sContext\")) || objThis.get(\"_objNavigation.sContext\") === \"candidate\") {\n                            var funcCallback = function funcCallback(sCountryCode) {\n                                Ember.run(function () {\n                                    objThis.set(\"sCountryCode\", sCountryCode);\n                                    objThis.loadScripts(objThis);\n                                });\n                            };\n                            this.get(\"_objInputTelInputService\").getCountryCodeFromIp(funcCallback);\n                        } else {\n                            var sCountryId = this.get(\"_objUserSession.objContextDetails.sCountryId\");\n                            objThis.set(\"sCountryCode\", sCountryId === \"710\" ? \"za\" : sCountryId === \"840\" ? \"us\" : \"gb\");\n                            objThis.loadScripts(objThis);\n                        }\n                    }\n                } else {\n                    objThis.loadScripts(objThis);\n                }\n\n                if (objThis.get(\"env\").environment === \"test\") {\n                    objTextInput.on(\"onSetCountryCodeForTest\", function (objEvent, sCountryCode) {\n                        objThis.setCountryCode(sCountryCode);\n                    });\n                }\n            });\n        },\n        loadScripts: function loadScripts(objThis) {\n            var objTextInput = $(\"#\" + objThis.get(\"_sInputId\"));\n            //Load the needed libs and styles for the intl tel number input\n\n            var funcSuccessCallback = function funcSuccessCallback() {\n                var _this = this;\n\n                if (a24Core.isEmpty(objThis)) {\n                    return;\n                }\n\n                Ember.run(function () {\n                    var objIntlTelConfig = {\n                        // allowDropdown: false,\n                        // autoHideDialCode: false,\n                        // autoPlaceholder: \"off\",\n                        // dropdownContainer: objThis.$(),\n                        // excludeCountries: [\"us\"],\n                        // formatOnDisplay: false,\n                        // geoIpLookup: function(funcCallback) {\n                        //     funcCallback(sCountryCode);\n                        // },\n                        // hiddenInput: \"full_number\",\n                        initialCountry: objThis.get(\"sCountryCode\"),\n                        // nationalMode: false,\n                        // onlyCountries: [\"us\", \"gb\", \"ch\", \"ca\", \"do\", \"za\"],\n                        // placeholderNumberType: \"MOBILE\",\n                        preferredCountries: [\"gb\", \"za\"]\n                        // separateDialCode: true,\n                        // utilsScript: \"/a24-ember-lib/assets/intl-tel-js/utils.js\"\n                    };\n                    // This is just so that when we are running tests that the list of countries is not that long\n                    if (objThis.get(\"env\").environment === \"test\") {\n                        objIntlTelConfig.onlyCountries = [\"us\", \"gb\", \"ch\", \"ca\", \"do\", \"za\"];\n                    }\n\n                    objThis.set(\"_objIntlTelConfig\", objIntlTelConfig);\n\n                    var iti = window.intlTelInput(objTextInput.get(0), objIntlTelConfig);\n\n                    objTextInput.on(\"countrychange\", function () /*event, countryData*/{\n                        objThis.send(\"onInputChange\", iti.getNumber());\n                    });\n\n                    objTextInput.on(\"keyup\", function (objEvent) {\n                        if (objEvent.which === 27) {\n                            // Escape key\n                            objTextInput.change();\n                            objTextInput.blur();\n                        }\n                    });\n\n                    objTextInput.on(\"blur\", function () {\n                        objThis.resetFloatingLabel(objTextInput);\n                    });\n\n                    //Done setting up the input as a intl tel input.\n                    objThis.set(\"_bInitDone\", true);\n\n                    //Manually add the character counter since the intlTelInput moves the input that makes that the\n                    //automatic way of adding it does not work\n                    if (!a24Core.isEmpty(objThis.get(\"iMaxCharacters\"))) {\n                        objTextInput.attr(\"length\", objThis.get(\"iMaxCharacters\"));\n                        objTextInput.characterCounter();\n                    }\n\n                    if (!a24Core.isEmpty(objThis.get(\"sValue\"))) {\n\n                        // Set the mvalue first\n                        objThis.setMValueWithInternalFlag(objThis.get(\"sValue\"), true);\n\n                        // firing a change here will cause the mvalue to update to\n                        // the same value, hence not causing a duplicate event to be fired\n                        objTextInput.val(objThis.get(\"sValue\"));\n                        objTextInput.change();\n                    }\n\n                    objThis.resetFloatingLabel(objTextInput);\n\n                    //Add permanent validation. Will only execute if field is not empty\n                    objThis.get(\"arrValidation\").pushObject(function () {\n                        if (!a24Core.isEmpty(objTextInput.val())) {\n                            if (!iti.isValidNumber()) {\n                                return objThis.get(\"_objInputFormStringsService\").getString(\"telNumberInputCountryError\");\n                            }\n                        }\n                    });\n\n                    if (!a24Core.isEmpty(objThis.get(\"onInputFormTelNumberInitDone\"))) {\n                        // Send the current input instance on\n                        objThis.get(\"onInputFormTelNumberInitDone\")(_this);\n                    }\n                });\n            };\n\n            var funcFailCallback = function funcFailCallback() {\n                if (a24Core.isEmpty(objThis)) {\n                    return;\n                }\n                Ember.run(function () {\n                    //eslint-disable-next-line no-console\n                    console.warn(\"Failed to load all scripts and styles needed for the input form tel number input\");\n                    objThis.sendAction(\"onInputFormTelNumberError\");\n                });\n            };\n\n            this.get(\"_objInputTelInputService\").loadScript(funcSuccessCallback, funcFailCallback);\n        },\n        // This function is used for returning a human readable number for displaying it on screen.\n        formatNumberForDisplay: function formatNumberForDisplay(sNumber) {\n\n            if (!this.get(\"_bInitDone\")) {\n                //eslint-disable-next-line no-console\n                console.error(\"You have to wait for the onInputFormTelNumberInitDone to fire before interacting with this input\");\n            }\n\n            var sFormatedNumber = \"\";\n            // If the we do not send in the number to format it will pull the current formatted value of the input.\n            if (a24Core.isEmpty(sNumber)) {\n                var objTextInput = $(\"#\" + this.get(\"_sInputId\"));\n                sFormatedNumber = objTextInput.val();\n            } else {\n\n                var sInputId = Ember.guidFor({});\n\n                // We are adding a hidden input in the dom so that the google utlis script can initialize so that we can format\n                // the number for display purpose.\n                // The google utils is embedded into the input itself and not accessible globally thus we are forced to\n                // do it this way.\n                var sInput = \"<div class=\\\"display-none\\\"><input hidden placeholder=\\\"\\\" type=\\\"text\\\" autocomplete=\\\"off\\\" id= \" + sInputId + \" \" + \"class=\\\"input-tel-number-placeholder form-control\\\"/></div>\";\n\n                // Append the input tag so we can initialize the lib on it.\n                var objHiddenTextInput = $(sInput).appendTo(this.$()).find(\"input\");\n\n                // Initialize the intl tel input onto the input we appended\n                // var objHiddenTextInput = $(\"#\" + sInputId);\n                var iti = window.intlTelInput(objHiddenTextInput.get(0), this.get(\"_objIntlTelConfig\"));\n\n                // Set the number on the hidden input\n                iti.setNumber(sNumber);\n                objHiddenTextInput.change();\n\n                // Pull the formatted value from the hidden input\n                sFormatedNumber = objHiddenTextInput.val();\n\n                // Destroys the intlTelInput stuff off the input\n                iti.destroy();\n                // We are removing the parent of the input as we wrapped the input in our own div to make it hidden\n                objHiddenTextInput.parent().remove();\n            }\n\n            // Return the formatted number\n            return sFormatedNumber;\n        },\n        clear: function clear() {\n            this.setValueFromOutside(\"\");\n            this.setCountryCode(this.get(\"sCountryCode\"));\n        },\n        setValueFromOutside: function setValueFromOutside(sValue) {\n            if (!this.get(\"_bInitDone\")) {\n                //eslint-disable-next-line no-console\n                console.error(\"You have to wait for the onInputFormTelNumberInitDone to fire before interacting with this input\");\n            }\n\n            this.setMValueWithInternalFlag(sValue, false);\n\n            //Set the new value onto the input since it does not bind anymore\n            var objTextInput = $(\"#\" + this.get(\"_sInputId\"));\n            var iti = window.intlTelInputGlobals.getInstance(objTextInput.get(0));\n            iti.setNumber(sValue);\n            objTextInput.change();\n\n            this.resetFloatingLabel(objTextInput);\n        },\n        observeValueChange: Ember.observer(\"sValue\", function () {\n            this.setValueFromOutside(this.get(\"sValue\"));\n        }),\n        setCountryCode: function setCountryCode(sCountryCode) {\n            this.set(\"sCountryCode\", sCountryCode);\n            var objTextInput = $(\"#\" + this.get(\"_sInputId\"));\n            var iti = window.intlTelInputGlobals.getInstance(objTextInput.get(0));\n            iti.setCountry(sCountryCode);\n        },\n        resetFloatingLabel: function resetFloatingLabel(objTextInput) {\n            //If the input field has no value then the label should NOT have the active class and\n            //float at placeholder position\n            if (a24Core.isEmpty(objTextInput.val())) {\n                this.$(\"label\").removeClass(\"active\");\n            }\n        },\n        actions: {\n            onInputChange: function onInputChange(sValue) {\n                // any internal changes that fire this function will have updated\n                // mvalue already, meaning the duplicate update will not fire any\n                // additional events\n\n                var objTextInput = $(\"#\" + this.get(\"_sInputId\"));\n                var iti = window.intlTelInputGlobals.getInstance(objTextInput.get(0));\n                iti.setNumber(sValue);\n\n                // The get number gets the number correctly formatted\n                this.setMValueWithInternalFlag(iti.getNumber(), false);\n            }\n        }\n    });\n});","define(\"a24-ember-form-inputs/components/input-form-time-slot\", [\"exports\", \"a24-ember-form-inputs/templates/components/input-form-time-slot\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _inputFormTimeSlot, _didRenderChangesMixin, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _inputFormTimeSlot.default,\n        classNames: [\"input-form-time-slot\", \"md-form\", \"a24ErrorInputParent\"],\n        sInputType: \"timeslot\",\n        bIsOutline: false,\n        bDisabled: false,\n        bSpinHourValue: true,\n        bSpinMinuteValue: true,\n        bMinuteUpdatesHour: false,\n        bForceMinuteStep: false,\n        iHourMinValue: 0,\n        iHourMaxValue: 23,\n        iMinuteMinValue: 0,\n        iMinuteMaxValue: 59,\n        iHourStepValue: 1,\n        iMinuteStepValue: 15,\n\n        _iMinuteMinValue: null,\n        _iMinuteMaxValue: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            this.set(\"_iMinuteMinValue\", this.get(\"iMinuteMinValue\"));\n            this.set(\"_iMinuteMaxValue\", this.get(\"iMinuteMaxValue\"));\n        },\n        onInputValueChanged: function onInputValueChanged(arrChildRef) {\n            if (a24Core.isEmpty(arrChildRef)) {\n                return;\n            }\n            if (arrChildRef.join(\".\") === \"objChildren.iHour\") {\n                Ember.run.once(this, this._setMinMaxMinute);\n            }\n            Ember.run.once(this, this._setMValue);\n        },\n        _setMValue: function _setMValue() {\n            this.setMValueWithInternalFlag({\n                iHour: this.get(\"objChildren.iHour.mValue\"),\n                iMinute: this.get(\"objChildren.iMinute.mValue\")\n            }, false);\n        },\n        _setMinMaxMinute: function _setMinMaxMinute() {\n            var iHour = this.get(\"objChildren.iHour.mValue\");\n            if (!a24Core.isEmpty(iHour) && iHour > this.get(\"iHourMinValue\")) {\n                this.set(\"_iMinuteMinValue\", 0);\n            } else {\n                this.set(\"_iMinuteMinValue\", this.get(\"iMinuteMinValue\"));\n            }\n\n            if (!a24Core.isEmpty(iHour) && iHour < this.get(\"iHourMaxValue\")) {\n                this.set(\"_iMinuteMaxValue\", 59);\n            } else {\n                this.set(\"_iMinuteMaxValue\", this.get(\"iMinuteMaxValue\"));\n            }\n        },\n        clear: function clear() {\n            this.get(\"objChildren.iHour\").clear();\n            this.get(\"objChildren.iMinute\").clear();\n        },\n        setValueFromOutside: function setValueFromOutside(objValue) {\n            if (!a24Core.isEmpty(objValue.iHour)) {\n                this.get(\"objChildren.iHour\").setValueFromOutside(objValue.iHour);\n            }\n            if (!a24Core.isEmpty(objValue.iMinute)) {\n                this.get(\"objChildren.iMinute\").setValueFromOutside(objValue.iMinute);\n            }\n        },\n        checkExtraTypes: function functionName() {\n            return {\n                bHandled: true,\n                mReturned: this.get(\"mValue\")\n            };\n        },\n        // This is here to prevent the default implementation which\n        // appends a div to both number inputs when there is an error\n        showErrorMessage: function showErrorMessage() {},\n        actions: {\n            onSpinMaxMinute: function onSpinMaxMinute() {\n                if (this.get(\"bMinuteUpdatesHour\")) {\n                    var iHourStep = this.get(\"iHourStepValue\");\n                    var iHour = this.get(\"objChildren.iHour.mValue\");\n\n                    if (iHour > this.get(\"iHourMinValue\")) {\n                        this.get(\"objChildren.iHour\").setValueFromOutside(iHour - iHourStep);\n                    } else {\n                        this.get(\"objChildren.iHour\").setValueFromOutside(this.get(\"iHourMaxValue\"));\n                    }\n                }\n            },\n\n            onSpinMinMinute: function onSpinMinMinute() {\n                if (this.get(\"bMinuteUpdatesHour\")) {\n                    var iHour = this.get(\"objChildren.iHour.mValue\");\n                    var iHourStep = this.get(\"iHourStepValue\");\n\n                    if (iHour < this.get(\"iHourMaxValue\")) {\n                        this.get(\"objChildren.iHour\").setValueFromOutside(iHour + iHourStep);\n                    } else {\n                        this.get(\"objChildren.iHour\").setValueFromOutside(this.get(\"iHourMinValue\"));\n                    }\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-form-inputs/services/a24-constants-form-inputs\", [\"exports\", \"a24-ember-lookup/services/a24-constants-base\"], function (exports, _a24ConstantsBase) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _a24ConstantsBase.default.extend({\n    EMAIL_REGEX: \"^[_A-Za-z0-9-]+(\\\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\\\.[A-Za-z0-9]+)*(\\\\.[A-Za-z]{2,})$\"\n  });\n});","define(\"a24-ember-form-inputs/services/a24-strings-form-inputs\", [\"exports\", \"a24-ember-lookup/services/a24-strings-base\"], function (exports, _a24StringsBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _a24StringsBase.default.extend({\n        _objStrings: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n            Ember.set(this, \"_objStrings\", {\n                total: \"Total\",\n                startDate: \"Start Date\",\n                endDate: \"End Date\",\n                startTime: \"Start Time\",\n                endTime: \"End Time\",\n\n                telNumberInputCountryError: \"The number you have entered is not valid for the selected country\",\n\n                validationEmail: \"{0} is not a valid email address\",\n                invalidEmail: \"Email is not valid/allowed\"\n            });\n        }\n    });\n});","define(\"a24-ember-form-inputs/services/input-form-address-suggest-service\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n\n        _sGoogleMapsApiKey: Ember.computed.readOnly(\"_objEnv.sGoogleMapsApiKey\"),\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        _objAjax: $.ajax,\n        _objRun: null,\n        _bScriptBusy: false,\n        _bScriptLoaded: false,\n        _arrSuccessCallbacks: null,\n        _arrFailCallbacks: null,\n\n        loadScript: function loadScript(funcSuccessCallback, funcFailCallback) {\n            var objThis = this;\n            objThis.setAddressSuggestCallbacks(funcSuccessCallback, funcFailCallback);\n\n            if (!this.get(\"_bScriptBusy\") && !this.get(\"_bScriptLoaded\")) {\n                this.set(\"_bScriptBusy\", true);\n                this.set(\"_objPromise\", objThis.get(\"_objAjax\")({\n                    // This has to be https to work since their js will only be retrieved with it\n                    url: \"//maps.googleapis.com/maps/api/js?key=\" + this.get(\"_sGoogleMapsApiKey\") + \"&libraries=places\",\n                    dataType: \"script\",\n                    cache: true\n                    // We can not use this since the call does not abort when timeout is called.\n                    // Since it might load twice while waiting for the timeout\n                    //timeout: objThis.get(\"_iTimeout\") * 1000\n                }).done(function () {\n                    objThis.executeSuccessCallbacks();\n                    objThis.set(\"_bScriptBusy\", false);\n                    objThis.set(\"_bScriptLoaded\", true);\n                }).fail(function () {\n                    objThis.executeFailCallbacks();\n                    objThis.set(\"_bScriptBusy\", false);\n                    objThis.set(\"_bScriptLoaded\", false);\n                }));\n            } else if (objThis.get(\"_bScriptLoaded\")) {\n                Ember.run.next(function () {\n                    objThis.executeSuccessCallbacks();\n                });\n            }\n        },\n        setAddressSuggestCallbacks: function setAddressSuggestCallbacks(funcSuccessCallback, funcFailCallback) {\n            var arrSuccessCallbacks = [];\n            if (!a24Core.isEmpty(this.get(\"_arrSuccessCallbacks\"))) {\n                arrSuccessCallbacks = this.get(\"_arrSuccessCallbacks\");\n            }\n            arrSuccessCallbacks.push(funcSuccessCallback);\n\n            var arrFailCallbacks = [];\n            if (!a24Core.isEmpty(this.get(\"_arrFailCallbacks\"))) {\n                arrFailCallbacks = this.get(\"_arrFailCallbacks\");\n            }\n            arrFailCallbacks.push(funcFailCallback);\n\n            this.set(\"_arrSuccessCallbacks\", arrSuccessCallbacks);\n            this.set(\"_arrFailCallbacks\", arrFailCallbacks);\n        },\n        executeSuccessCallbacks: function executeSuccessCallbacks() {\n            var arrSuccessCallbacks = this.get(\"_arrSuccessCallbacks\");\n            for (var i = 0; i < arrSuccessCallbacks.length; i++) {\n                arrSuccessCallbacks[i]();\n            }\n            this.set(\"_arrSuccessCallbacks\", []);\n            this.set(\"_arrFailCallbacks\", []);\n        },\n        executeFailCallbacks: function executeFailCallbacks() {\n            var arrFailCallbacks = this.get(\"_arrFailCallbacks\");\n            for (var i = 0; i < arrFailCallbacks.length; i++) {\n                arrFailCallbacks[i]();\n            }\n            this.set(\"_arrFailCallbacks\", []);\n            this.set(\"_arrSuccessCallbacks\", []);\n        }\n    });\n});","define(\"a24-ember-form-inputs/services/input-form-tel-input-service\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n\n        sCountryCode: null,\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        _sDefaultCountry: \"gb\",\n        _bIsBusy: false,\n        _arrCountryCallbacks: null,\n\n        _objAjax: $.ajax,\n        _objWhen: $.when,\n        _objRun: null,\n        _bScriptBusy: false,\n        _bScriptLoaded: false,\n        _sCss: null,\n        _arrSuccessCallbacks: null,\n        _arrFailCallbacks: null,\n\n        _sResourceLocation: \"/a24-ember-form-inputs/intl-tel-v2\",\n\n        loadScript: function loadScript(funcSuccessCallback, funcFailCallback) {\n            var objThis = this;\n            var sResourceBase = objThis.get(\"_sResourceLocation\");\n            objThis.setCallbacks(funcSuccessCallback, funcFailCallback);\n\n            if (!this.get(\"_bScriptBusy\") && !this.get(\"_bScriptLoaded\")) {\n                this.set(\"_bScriptBusy\", true);\n                this.get(\"_objWhen\")(objThis.get(\"_objAjax\")({\n                    url: sResourceBase + \"/js/utils.js\",\n                    dataType: \"script\",\n                    cache: true\n                }), objThis.get(\"_objAjax\")({\n                    url: sResourceBase + \"/js/intlTelInput.min.js\",\n                    dataType: \"script\",\n                    cache: true\n                }), objThis.get(\"_objAjax\")({\n                    url: sResourceBase + \"/css/intlTelInput.min.css\",\n                    cache: true\n                }).done(function (sCss) {\n                    $(\"<style type='text/css'></style>\").html(sCss).appendTo(\"head\");\n                })).then(function () {\n                    objThis.executeSuccessCallbacks();\n                    objThis.set(\"_bScriptBusy\", false);\n                    objThis.set(\"_bScriptLoaded\", true);\n                }, function () {\n                    objThis.executeFailCallbacks();\n                    objThis.set(\"_bScriptBusy\", false);\n                    objThis.set(\"_bScriptLoaded\", false);\n                });\n            } else if (objThis.get(\"_bScriptLoaded\")) {\n                Ember.run.next(function () {\n                    objThis.executeSuccessCallbacks();\n                });\n            }\n        },\n        setCallbacks: function setCallbacks(funcSuccessCallback, funcFailCallback) {\n            var arrSuccessCallbacks = [];\n            if (!a24Core.isEmpty(this.get(\"_arrSuccessCallbacks\"))) {\n                arrSuccessCallbacks = this.get(\"_arrSuccessCallbacks\");\n            }\n            arrSuccessCallbacks.push(funcSuccessCallback);\n\n            var arrFailCallbacks = [];\n            if (!a24Core.isEmpty(this.get(\"_arrFailCallbacks\"))) {\n                arrFailCallbacks = this.get(\"_arrFailCallbacks\");\n            }\n            arrFailCallbacks.push(funcFailCallback);\n\n            this.set(\"_arrSuccessCallbacks\", arrSuccessCallbacks);\n            this.set(\"_arrFailCallbacks\", arrFailCallbacks);\n        },\n        executeSuccessCallbacks: function executeSuccessCallbacks() {\n            var arrSuccessCallbacks = this.get(\"_arrSuccessCallbacks\");\n            for (var i = 0; i < arrSuccessCallbacks.length; i++) {\n                arrSuccessCallbacks[i]();\n            }\n            this.set(\"_arrSuccessCallbacks\", []);\n            this.set(\"_arrFailCallbacks\", []);\n        },\n        executeFailCallbacks: function executeFailCallbacks() {\n            var arrFailCallbacks = this.get(\"_arrFailCallbacks\");\n            for (var i = 0; i < arrFailCallbacks.length; i++) {\n                arrFailCallbacks[i]();\n            }\n            this.set(\"_arrFailCallbacks\", []);\n            this.set(\"_arrSuccessCallbacks\", []);\n        },\n        getCountryCodeFromIp: function getCountryCodeFromIp(funcCallback) {\n            var objThis = this;\n            this.setCountryCallbacks(funcCallback);\n            if (a24Core.isEmpty(this.get(\"sCountryCode\"))) {\n                if (!this.get(\"_bIsBusy\")) {\n                    this.set(\"_bIsBusy\", true);\n                    objThis.get(\"_objAjax\")({\n                        url: \"https://json.geoiplookup.io/\",\n                        dataType: \"jsonp\",\n                        timeout: 10000\n                    }).always(function (objResponse, sStatus) {\n                        if (!a24Core.isEmpty(objThis)) {\n                            Ember.run(function () {\n                                if (sStatus === \"error\" || sStatus === \"timeout\") {\n                                    //geo ip lookup call failed for what ever reason\n                                    objThis.set(\"sCountryCode\", objThis.get(\"_sDefaultCountry\"));\n                                } else if (!a24Core.isEmpty(objResponse) && !a24Core.isEmpty(objResponse.country_code)) {\n                                    objThis.set(\"sCountryCode\", objResponse.country_code);\n                                } else {\n                                    //Could not determine country so just default to gb\n                                    objThis.set(\"sCountryCode\", objThis.get(\"_sDefaultCountry\"));\n                                }\n                                objThis.set(\"_bIsBusy\", false);\n                                objThis.executeCountryCodeCallbacks();\n                            });\n                        }\n                    });\n                }\n            } else {\n                this.executeCountryCodeCallbacks();\n            }\n        },\n        setCountryCallbacks: function setCountryCallbacks(funcCallback) {\n            var arrCallbacks = [];\n            if (!a24Core.isEmpty(this.get(\"_arrCountryCallbacks\"))) {\n                arrCallbacks = this.get(\"_arrCountryCallbacks\");\n            }\n            arrCallbacks.push(funcCallback);\n\n            this.set(\"_arrCountryCallbacks\", arrCallbacks);\n        },\n        executeCountryCodeCallbacks: function executeCountryCodeCallbacks() {\n            var arrCallbacks = this.get(\"_arrCountryCallbacks\");\n            for (var i = 0; i < arrCallbacks.length; i++) {\n                arrCallbacks[i](this.get(\"sCountryCode\"));\n            }\n            this.set(\"_arrCountryCallbacks\", []);\n        }\n    });\n});","define(\"a24-ember-form-inputs/templates/components/input-form-address-suggest\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"G4TIUI5q\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"funcFloatRightIconClickCallback\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"float-right-icon\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onFloatRightIconClicked\\\"]],[8],[0,\\\"\\\\n        \\\"],[6,\\\"i\\\"],[11,\\\"class\\\",[27,[\\\"material-icons \\\",[20,\\\"sFloatRightIconColor\\\"]]]],[8],[1,[20,\\\"sFloatRightIconName\\\"],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[6,\\\"input\\\"],[10,\\\"placeholder\\\",\\\"\\\"],[11,\\\"name\\\",[27,[[20,\\\"sName\\\"]]]],[11,\\\"id\\\",[20,\\\"_sInputId\\\"],null],[11,\\\"class\\\",[27,[\\\"form-control\\\",[26,\\\"if\\\",[[22,[\\\"sErrorMessage\\\"]],\\\" invalid\\\"],null]]]],[11,\\\"disabled\\\",[20,\\\"_bInputLoading\\\"],null],[10,\\\"type\\\",\\\"text\\\"],[8],[9],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"label\\\"],[11,\\\"for\\\",[27,[[20,\\\"_sInputId\\\"]]]],[8],[0,\\\"\\\\n    \\\"],[1,[20,\\\"sFieldName\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bRequired\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bInputLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"loader-container\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"d-flex justify-content-center loader-inner-container\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"progress a24-primary-color-accent-force progress-bar\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"indeterminate\\\"],[8],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-form-inputs/templates/components/input-form-address-suggest.hbs\" } });\n});","define(\"a24-ember-form-inputs/templates/components/input-form-email\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"BQX4JI8U\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"funcFloatRightIconClickCallback\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"float-right-icon\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onFloatRightIconClicked\\\"]],[8],[0,\\\"\\\\n        \\\"],[6,\\\"i\\\"],[11,\\\"class\\\",[27,[\\\"material-icons \\\",[20,\\\"sFloatRightIconColor\\\"]]]],[8],[1,[20,\\\"sFloatRightIconName\\\"],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[6,\\\"input\\\"],[10,\\\"placeholder\\\",\\\"\\\"],[11,\\\"name\\\",[27,[[20,\\\"sName\\\"]]]],[11,\\\"id\\\",[20,\\\"_sInputId\\\"],null],[11,\\\"class\\\",[27,[\\\"form-control\\\",[26,\\\"if\\\",[[22,[\\\"sErrorMessage\\\"]],\\\" invalid\\\"],null]]]],[11,\\\"onchange\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onInputChange\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]],null],[10,\\\"type\\\",\\\"text\\\"],[8],[9],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"label\\\"],[11,\\\"for\\\",[27,[[20,\\\"_sInputId\\\"]]]],[8],[0,\\\"\\\\n    \\\"],[1,[20,\\\"sFieldName\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bRequired\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-form-inputs/templates/components/input-form-email.hbs\" } });\n});","define(\"a24-ember-form-inputs/templates/components/input-form-number\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"9vtJP3L2\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[26,\\\"input\\\",null,[[\\\"placeholder\\\",\\\"type\\\",\\\"id\\\",\\\"disabled\\\",\\\"class\\\",\\\"value\\\"],[\\\"\\\",\\\"text\\\",[22,[\\\"_sInputId\\\"]],[22,[\\\"bDisabled\\\"]],[26,\\\"if\\\",[[22,[\\\"sErrorMessage\\\"]],\\\"form-control invalid\\\",\\\"form-control\\\"],null],[22,[\\\"_sValue\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[22,[\\\"bDisabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"input-form-number-controls\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"i\\\"],[10,\\\"class\\\",\\\"material-icons arrow-up\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"incrementValue\\\"]],[8],[0,\\\"arrow_drop_up\\\"],[9],[0,\\\"\\\\n        \\\"],[6,\\\"i\\\"],[10,\\\"class\\\",\\\"material-icons arrow-down\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"decrementValue\\\"]],[8],[0,\\\"arrow_drop_down\\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[6,\\\"label\\\"],[11,\\\"for\\\",[27,[[20,\\\"_sInputId\\\"]]]],[8],[0,\\\"\\\\n    \\\"],[1,[20,\\\"sFieldName\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bRequired\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-form-inputs/templates/components/input-form-number.hbs\" } });\n});","define(\"a24-ember-form-inputs/templates/components/input-form-shift\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"4K5xSWsw\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"input-form-shift-wrapper\\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-6 start-date\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"label\\\"],[10,\\\"class\\\",\\\"start-date-label\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"lookup-string\\\",[\\\"startDate\\\",[22,[\\\"_objFormInputsStringsService\\\"]]],null],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bRequired\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"            \\\"],[9],[0,\\\"\\\\n            \\\"],[1,[26,\\\"input-form-date-picker\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bDisabled\\\",\\\"bIsOutline\\\",\\\"bRequired\\\",\\\"objMaxDate\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[\\\"\\\",\\\"startDate\\\",1,[22,[\\\"bDisabled\\\"]],[22,[\\\"bIsOutline\\\"]],false,[22,[\\\"_objMaxDate\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\\n        \\\"],[1,[26,\\\"input-form-time-slot\\\",null,[[\\\"class\\\",\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bDisabled\\\",\\\"bIsOutline\\\",\\\"bRequired\\\",\\\"bMinuteUpdatesHour\\\",\\\"bForceMinuteStep\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[\\\"col-6 start-time\\\",[26,\\\"lookup-string\\\",[\\\"startTime\\\",[22,[\\\"_objFormInputsStringsService\\\"]]],null],\\\"startTime\\\",2,[22,[\\\"bDisabled\\\"]],[22,[\\\"bIsOutline\\\"]],false,true,[22,[\\\"bForceMinuteStep\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row \\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-6 end-date\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"label\\\"],[10,\\\"class\\\",\\\"end-date-label\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"lookup-string\\\",[\\\"endDate\\\",[22,[\\\"_objFormInputsStringsService\\\"]]],null],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[1,[26,\\\"input-form-date-picker\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bDisabled\\\",\\\"bIsOutline\\\",\\\"bRequired\\\",\\\"objMaxDate\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[\\\"\\\",\\\"endDate\\\",3,true,[22,[\\\"bIsOutline\\\"]],false,[22,[\\\"_objMaxDate\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\\n        \\\"],[1,[26,\\\"input-form-time-slot\\\",null,[[\\\"class\\\",\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bDisabled\\\",\\\"bIsOutline\\\",\\\"bRequired\\\",\\\"bMinuteUpdatesHour\\\",\\\"bForceMinuteStep\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[\\\"col-6 end-time\\\",[26,\\\"lookup-string\\\",[\\\"endTime\\\",[22,[\\\"_objFormInputsStringsService\\\"]]],null],\\\"endTime\\\",4,[22,[\\\"bDisabled\\\"]],[22,[\\\"bIsOutline\\\"]],false,true,[22,[\\\"bForceMinuteStep\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"total-wrapper\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"total\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"line1\\\"],[8],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"line2\\\"],[8],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"line3\\\"],[8],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"line4\\\"],[8],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"total-time\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[20,\\\"_sTotal\\\"],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[9]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-form-inputs/templates/components/input-form-shift.hbs\" } });\n});","define(\"a24-ember-form-inputs/templates/components/input-form-tel-number\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"xmsN3mIu\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24InputHeader a24InputHeaderStatic\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[20,\\\"sFieldName\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bRequired\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"funcFloatRightIconClickCallback\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"float-right-icon\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onFloatRightIconClicked\\\"]],[8],[0,\\\"\\\\n        \\\"],[6,\\\"i\\\"],[11,\\\"class\\\",[27,[\\\"material-icons \\\",[20,\\\"sFloatRightIconColor\\\"]]]],[8],[1,[20,\\\"sFloatRightIconName\\\"],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[6,\\\"input\\\"],[10,\\\"placeholder\\\",\\\"\\\"],[10,\\\"autocomplete\\\",\\\"off\\\"],[11,\\\"id\\\",[20,\\\"_sInputId\\\"],null],[11,\\\"class\\\",[27,[\\\"input-tel-number-placeholder form-control\\\",[26,\\\"if\\\",[[22,[\\\"sErrorMessage\\\"]],\\\" invalid\\\"],null]]]],[11,\\\"onchange\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onInputChange\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]],null],[10,\\\"type\\\",\\\"text\\\"],[8],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-form-inputs/templates/components/input-form-tel-number.hbs\" } });\n});","define(\"a24-ember-form-inputs/templates/components/input-form-time-slot\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"lsIqvsw7\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"label\\\"],[10,\\\"class\\\",\\\"input-form-time-slot-label\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[20,\\\"sFieldName\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bRequired\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9],[0,\\\"\\\\n\\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"input-form-number-wrapper\\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"input-form-number-hour\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"input-form-number\\\",null,[[\\\"sProperty\\\",\\\"iOrder\\\",\\\"sErrorMessage\\\",\\\"bDisabled\\\",\\\"bIsOutline\\\",\\\"bDisplayDefault\\\",\\\"bFormatOnFocusout\\\",\\\"bSpinValue\\\",\\\"iMinValue\\\",\\\"iMaxValue\\\",\\\"iStepValue\\\",\\\"iLeadingZero\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[\\\"iHour\\\",1,[26,\\\"if\\\",[[22,[\\\"sErrorMessage\\\"]],\\\"&nbsp\\\"],null],[22,[\\\"bDisabled\\\"]],[22,[\\\"bIsOutline\\\"]],true,true,[22,[\\\"bSpinHourValue\\\"]],[22,[\\\"iHourMinValue\\\"]],[22,[\\\"iHourMaxValue\\\"]],[22,[\\\"iHourStepValue\\\"]],2,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"input-form-number-divider\\\"],[8],[0,\\\"\\\\n        :\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"input-form-number-minute\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"input-form-number\\\",null,[[\\\"sProperty\\\",\\\"iOrder\\\",\\\"sErrorMessage\\\",\\\"bDisabled\\\",\\\"bIsOutline\\\",\\\"bDisplayDefault\\\",\\\"bFormatOnFocusout\\\",\\\"bForceStep\\\",\\\"bSpinValue\\\",\\\"iMinValue\\\",\\\"iMaxValue\\\",\\\"iStepValue\\\",\\\"iLeadingZero\\\",\\\"onSpinMin\\\",\\\"onSpinMax\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[\\\"iMinute\\\",2,[26,\\\"if\\\",[[22,[\\\"sErrorMessage\\\"]],\\\"&nbsp\\\"],null],[22,[\\\"bDisabled\\\"]],[22,[\\\"bIsOutline\\\"]],true,true,[22,[\\\"bForceMinuteStep\\\"]],[22,[\\\"bSpinMinuteValue\\\"]],[22,[\\\"_iMinuteMinValue\\\"]],[22,[\\\"_iMinuteMaxValue\\\"]],[22,[\\\"iMinuteStepValue\\\"]],2,[26,\\\"action\\\",[[21,0,[]],\\\"onSpinMinMinute\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onSpinMaxMinute\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"sErrorMessage\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"input-form-time-slot-error\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[20,\\\"sErrorMessage\\\"],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-form-inputs/templates/components/input-form-time-slot.hbs\" } });\n});","define(\"a24-ember-lib/components/accordion-item-component\", [\"exports\", \"a24-ember-lib/templates/components/accordion-item-component\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-window/mixins/a24responsive\"], function (exports, _accordionItemComponent, _didRenderChangesMixin, _a24responsive) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _a24responsive.default, {\n        layout: _accordionItemComponent.default,\n        _sItemId: null,\n        // id of the parent component, this is used to group components so they\n        // work together ( currently only 1 group per page is supported, mdbootstrap\n        // needs to be updated to support more )\n        sParentComponentId: null,\n        classNames: [\"accordion-item-component\"],\n        // header for the round icon header component\n        sHeader: null,\n        sHeaderClass: \"text-bold a24-grey-text-darken-3\",\n        // subheader for the round icon header component\n        sSubHeader: null,\n        sSubHeaderClass: \"text-bold a24-grey-text-darken-3\",\n        // Icon flag\n        bHasIcon: true,\n        // Icon details\n        sRoundButtonSize: null,\n        sLetter: null,\n        sIconName: null,\n        sIconSvg: null,\n        sIconFa: null,\n        sImageUrl: null,\n        sIconColor: null,\n        sIconClass: \"text-white\",\n\n        // whether the component is initially expanded or collapsed\n        bExpanded: false,\n        // array of action items\n        arrActionItems: null,\n        objSpecialAction: null,\n        // function to be called when collapse trigger item is clicked\n        funcOnItemClicked: null,\n        // This will keep a state of the opened state to be used with the dropdown\n        _bAccordionOpened: false,\n        // Used to override the open dropdown back to false\n        bOverrideDropdown: false,\n        sExtraInfo: null,\n        // Used to display the action items in the header of the accordion. Else will display on the extra info header\n        _bHeaderActionItems: false,\n        // This is just a copy of the action items array\n        _arrExtraInfoActions: null,\n        _objExtraInfoSpecialAction: null,\n        _objWindowConstants: Ember.inject.service(\"a24-constants-window\"),\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        init: function init() {\n            this._super.apply(this, arguments);\n            // this is done so that the _sItemId can passed in during testing and\n            // we can test that it is set correct\n            if (a24Core.isEmpty(this.get(\"_sItemId\"))) {\n                this.set(\"_sItemId\", Ember.guidFor({}));\n            }\n            // If the default state is expanded, set the open state\n            if (this.get(\"bExpanded\")) {\n                this.set(\"_bAccordionOpened\", true);\n            }\n\n            this.set(\"_arrExtraInfoActions\", Ember.copy(this.get(\"arrActionItems\"), true));\n            this.set(\"_objExtraInfoSpecialAction\", Ember.copy(this.get(\"objSpecialAction\"), true));\n        },\n        didInsertElement: function didInsertElement() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n            Ember.run.next(function () {\n                _this.onScreenChange();\n                // if the parent component id is set then we also need the panel\n                // class for the accordion to work in a group\n                if (!a24Core.isEmpty(_this.get(\"sParentComponentId\"))) {\n                    _this.$().addClass(\"panel\");\n                }\n            });\n        },\n        onScreenChange: Ember.observer(\"sScreenSize\", function () {\n            var bHeaderActionItems = false;\n            if (!a24Core.isEmpty(this.get(\"sExtraInfo\"))) {\n                if (this.get(\"sScreenSize\") === this.get(\"_objWindowConstants.MEDIA_SIZE_MOBILE\") || this.get(\"sScreenSize\") === this.get(\"_objWindowConstants.MEDIA_SIZE_TINY\")) {\n                    bHeaderActionItems = true;\n                }\n            } else {\n                bHeaderActionItems = true;\n            }\n\n            this.set(\"_bHeaderActionItems\", bHeaderActionItems);\n        }),\n        actions: {\n            onCollapseExpandStart: function onCollapseExpandStart(sCollapseId) {\n                if (!a24Core.isEmpty(this.get(\"onCollapseExpandStart\"))) {\n                    return this.get(\"onCollapseExpandStart\")(sCollapseId);\n                }\n            },\n            onCollapseExpandEnd: function onCollapseExpandEnd(sCollapseId) {\n                this.set(\"_bAccordionOpened\", true);\n                if (!a24Core.isEmpty(this.get(\"onCollapseExpandEnd\"))) {\n                    return this.get(\"onCollapseExpandEnd\")(sCollapseId);\n                }\n            },\n            onCollapseCollapseStart: function onCollapseCollapseStart(sCollapseId) {\n                if (!a24Core.isEmpty(this.get(\"onCollapseCollapseStart\"))) {\n                    return this.get(\"onCollapseCollapseStart\")(sCollapseId);\n                }\n            },\n            onCollapseCollapseEnd: function onCollapseCollapseEnd(sCollapseId) {\n                this.set(\"_bAccordionOpened\", false);\n                if (!a24Core.isEmpty(this.get(\"onCollapseCollapseEnd\"))) {\n                    return this.get(\"onCollapseCollapseEnd\")(sCollapseId);\n                }\n            },\n            onAccordionMouseLeave: function onAccordionMouseLeave() {\n                // If the accordion is not expanded\n                if (!this.get(\"_bAccordionOpened\")) {\n                    // Force dropdown to be closed\n                    this.set(\"bOverrideDropdown\", false);\n                }\n            },\n            onAccordionMouseClick: function onAccordionMouseClick() {\n                if (!a24Core.isEmpty(this.get(\"funcOnItemClicked\"))) {\n                    return this.get(\"funcOnItemClicked\")();\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/alert-component\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/templates/components/alert-component\"], function (exports, _didRenderChangesMixin, _alertComponent) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _alertComponent.default,\n\n        classNames: [\"alert-component\"],\n\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n\n        sText: null,\n        sSeverity: null, // success, warning, danger, info\n        bHasClear: false,\n\n        iShowAlertTrigger: null,\n\n        _bShowAlert: false,\n        _sIcon: null,\n        _sIconColor: null,\n        _sClearStyle: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"_sIconColor\", this.get(\"sSeverity\") + \"-alert-icon\");\n\n            switch (this.get(\"sSeverity\")) {\n                case \"success\":\n                    this.set(\"_sIcon\", \"task_alt\");\n                    break;\n                case \"warning\":\n                    this.set(\"_sIcon\", \"warning_amber\");\n                    break;\n                case \"danger\":\n                    this.set(\"_sIcon\", \"error_outline\");\n                    break;\n                case \"info\":\n                    this.set(\"_sIcon\", \"info_outline\");\n                    break;\n                default:\n                    this.set(\"_sIcon\", \"info_outline\");\n                    break;\n            }\n\n            if (a24Core.isEmpty(this.get(\"sSeverity\"))) {\n                this.set(\"sSeverity\", \"info\");\n            }\n\n            if (!a24Core.isEmpty(this.get(\"sText\"))) {\n                this.set(\"_bShowAlert\", true);\n            }\n        },\n\n        onShowAlert: Ember.observer(\"iShowAlertTrigger\", function () {\n            this.set(\"_bShowAlert\", true);\n        }),\n\n        actions: {\n            triggerHideAlertButtonAction: function triggerHideAlertButtonAction() {\n                this.set(\"_bShowAlert\", false);\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/bread-crumb-bar-component\", [\"exports\", \"a24-ember-lib/templates/components/bread-crumb-bar-component\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _breadCrumbBarComponent, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _breadCrumbBarComponent.default,\n        _arrDisplayItems: null, // The items that will display on screen\n        _arrDisplayItemsOriginal: null, // The original value of the items that will display on screen\n        _bShowBreadCrumbEllipsis: true, // Whether to show the ellipsis\n\n        // Services\n        _objBreadCrumbService: Ember.inject.service(\"bread-crumb\"), // Breadcrumb service\n        _objDomEventService: Ember.inject.service(\"dom-event\"), // Dom event service\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            if (this.get(\"_arrDisplayItems\") === null) {\n                this.set(\"_arrDisplayItems\", []);\n            }\n\n            if (this.get(\"_arrDisplayItemsOriginal\") === null) {\n                this.set(\"_arrDisplayItemsOriginal\", []);\n            }\n\n            /* Get the service so that it will be initialised\n             * This needs to be done since we do not use the actual value on the service\n             * and thus it will not init unless directly referenced\n             *\n             * Done on https://github.com/A24Group/Triage/issues/9458\n             */\n            this.get(\"_objDomEventService\");\n            this.get(\"_objBreadCrumbService\");\n\n            this._onBreadCrumbItemsChange();\n            this._onWindowResize();\n        },\n        // This will set the data back to the original state so that calculations can start fresh\n        resetDisplayState: function resetDisplayState() {\n            this.set(\"_bShowBreadCrumbEllipsis\", true); // Show the ellipsis\n            this.set(\"_arrDisplayItems\", this.get(\"_arrDisplayItemsOriginal\")); // Reset display items\n        },\n        // Fires when the bread crumb items that comes from the service changes\n        _onBreadCrumbItemsChange: Ember.observer(\"_objBreadCrumbService.arrBreadCrumbItems.@each\", function () {\n            var _this = this;\n\n            Ember.run.scheduleOnce(\"afterRender\", function () {\n                // Set the new data to the original storage variable\n                _this.set(\"_arrDisplayItemsOriginal\", _this.get(\"_objBreadCrumbService.arrBreadCrumbItems\"));\n                Ember.run.once(_this, \"resetBreadCrumbAndRecalc\");\n            });\n        }),\n        // If the window width changes\n        _onWindowResize: Ember.observer(\"_objDomEventService.iPageWidth\", function () {\n            Ember.run.once(this, \"resetBreadCrumbAndRecalc\");\n        }),\n        resetBreadCrumbAndRecalc: function resetBreadCrumbAndRecalc() {\n            var _this2 = this;\n\n            this.resetDisplayState();\n            Ember.run.next(function () {\n                Ember.run.scheduleOnce(\"afterRender\", function () {\n                    _this2._trimItemsToViewport();\n                });\n            });\n        },\n        // Trim the breadcrumb items so that if there are too many items, it will be trimmed\n        _trimItemsToViewport: function _trimItemsToViewport() {\n            // Get the width of the container that the items will render in\n            var iContainerWidth = this.$(\".bread-crumb-bar\").eq(0).width();\n\n            // Get the width of the ellipsis item that will possibly need to display\n            var iEllipsisWidth = this.$(\".bread-crumb-ellipsis\").eq(0).outerWidth(true);\n\n            // Get a list of bread crumb items that are in the dom\n            var arrBreadCrumbItems = this.$(\".bread-crumb-item\");\n\n            // Create a counter to keep track of all the breadcrumb items width\n            var iTotalWidth = 0;\n            // Create an array that will store the final items that should be rendered\n            var arrFinalBreadcrumbItems = [];\n\n            /**\n             * Loop over the breadcrumb items that were pulled from the dom\n             *\n             * This will itterate backwards through the array so that we can show only the latest\n             * items in the array\n             */\n            for (var i = arrBreadCrumbItems.length - 1; i >= 0; i--) {\n                // \"i\" will be the correct index for iterating backwards\n\n                // Get the width of the item including it's margin\n                var iBreadcrumbItemWidth = arrBreadCrumbItems.eq(i).outerWidth(true);\n\n                if (iTotalWidth + iBreadcrumbItemWidth < iContainerWidth - iEllipsisWidth) {\n                    /**\n                     * If this item can fit in to the remaining space of the header\n                     *\n                     * This takes in to account all the previous items as well as the ellipsis\n                     * that will be shown when some items are chopped off\n                     */\n\n                    // Update the total width with this item\n                    iTotalWidth += iBreadcrumbItemWidth;\n                    /**\n                     * Add the current item to the beginning of the arrFinalBreadcrumbItems\n                     */\n                    arrFinalBreadcrumbItems.unshift(this.get(\"_arrDisplayItems\")[i]);\n\n                    // If this is the last item\n                    if (i === 0) {\n                        // We do not need an ellipsis if all the items can display\n                        this.set(\"_bShowBreadCrumbEllipsis\", false);\n                    }\n                } else if (i === 0 && iTotalWidth + iBreadcrumbItemWidth < iContainerWidth) {\n                    /**\n                     * If the last item can fit in to the remaining space of the header\n                     *\n                     * This takes in to account all the previous items only, since the ellipsis\n                     * is not needed for the last item\n                     */\n\n                    /**\n                     * Add the current item to the beginning of the arrFinalBreadcrumbItems\n                     */\n                    arrFinalBreadcrumbItems.unshift(this.get(\"_arrDisplayItems\")[i]);\n                    // We do not need an ellipsis if all the items can display\n                    this.set(\"_bShowBreadCrumbEllipsis\", false);\n                } else {\n                    /**\n                     * Break out of the loop if more items can not be shown\n                     */\n                    break;\n                }\n            }\n\n            // Set the correct items back on the display array\n            this.set(\"_arrDisplayItems\", arrFinalBreadcrumbItems);\n        }\n    });\n});","define(\"a24-ember-lib/components/card-actions-component\", [\"exports\", \"a24-ember-lib/templates/components/card-actions-component\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _cardActionsComponent, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _cardActionsComponent.default,\n        classNames: [\"card-actions-component\"],\n        classNameBindings: [\"bMobileView:card-actions-component-mobile\"],\n        bMobileView: false,\n        objSpecialAction: null,\n        arrActionItems: null,\n        arrVisibleItems: null,\n        arrMoreItems: null,\n        bShowDropdown: false,\n        iVisibleActions: 4,\n        _objEmberLibString: Ember.inject.service(\"a24-strings-ember-lib\"),\n        _sItemId: null,\n        _sCardActionDropdownContentId: null,\n        // the tooltip position for the drop down menu\n        _sDropDownToolTipPosition: null,\n        sIconClass: \"a24-grey-text-darken-1\",\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"_sCardActionDropdownContentId\", Ember.guidFor({}));\n\n            if (this.get(\"arrActionItems\") === null) {\n                this.set(\"arrActionItems\", []);\n                if (!a24Core.isEmpty(this.get(\"objData\"))) {\n                    this.set(\"arrActionItems\", this.get(\"objData.arrActionItems\"));\n                }\n            }\n\n            this.setItems();\n        },\n        setItems: Ember.observer(\"arrActionItems\", function () {\n            var _this = this;\n\n            var iVisibleActions = this.get(\"iVisibleActions\");\n            var iCount = 0;\n            var arrVisibleItems = [];\n            var arrMoreItems = [];\n            if (!a24Core.isEmpty(this.get(\"objSpecialAction\"))) {\n                iVisibleActions = iVisibleActions - 1;\n                // this will be the last item, so set the tooltip position to left\n                this.set(\"objSpecialAction.sToolTipPosition\", \"left\");\n            }\n\n            if (!a24Core.isEmpty(this.get(\"arrActionItems\"))) {\n                this.get(\"arrActionItems\").forEach(function (objDataItem) {\n                    if (a24Core.isEmpty(objDataItem.sIconClass)) {\n                        Ember.set(objDataItem, \"sIconClass\", _this.get(\"sIconClass\"));\n                    }\n                    if (!a24Core.isEmpty(objDataItem.sTitle)) {\n                        Ember.set(objDataItem, \"sToolTipPosition\", \"bottom\");\n                    }\n                    if (a24Core.isEmpty(objDataItem.bLightWaves)) {\n                        Ember.set(objDataItem, \"bLightWaves\", false);\n                    }\n\n                    if (iCount < iVisibleActions) {\n                        arrVisibleItems.push(objDataItem);\n                    } else {\n                        //If we have reached the max visible items we need to remove the last\n                        //item to make space for the 3 dots overflow item\n                        if (iCount === iVisibleActions && arrVisibleItems.length > 1) {\n                            var objLast = arrVisibleItems[arrVisibleItems.length - 1];\n                            arrVisibleItems.removeObject(objLast);\n                            arrMoreItems.push(objLast);\n                        }\n\n                        arrMoreItems.push(objDataItem);\n                    }\n                    iCount++;\n                });\n                // set the tooltip position for the drop down\n                if (arrMoreItems.length > 0) {\n                    if (a24Core.isEmpty(this.get(\"objSpecialAction\"))) {\n                        // the drop down is the last item\n                        this.set(\"_sDropDownToolTipPosition\", \"left\");\n                    } else {\n                        // objSpecialAction is the last item\n                        this.set(\"_sDropDownToolTipPosition\", \"bottom\");\n                    }\n                }\n\n                // set the tooltip position of the last item\n                if (a24Core.isEmpty(this.get(\"objSpecialAction\")) && arrVisibleItems.length > 0) {\n                    var iLastIndex = arrVisibleItems.length - 1;\n                    var objItem = arrVisibleItems[iLastIndex];\n                    if (a24Core.isEmpty(Ember.get(arrVisibleItems[iLastIndex], \"sToolTipPosition\")) && !a24Core.isEmpty(objItem.sTitle)) {\n                        if (arrMoreItems.length > 0) {\n                            // will have menu so not the last item\n                            Ember.set(arrVisibleItems[iLastIndex], \"sToolTipPosition\", \"bottom\");\n                        } else {\n                            // this is the last item\n                            Ember.set(arrVisibleItems[iLastIndex], \"sToolTipPosition\", \"left\");\n                        }\n                    }\n                }\n            }\n\n            this.set(\"arrVisibleItems\", arrVisibleItems);\n            this.set(\"arrMoreItems\", arrMoreItems);\n        }),\n        actions: {\n            executeCardAction: function executeCardAction(objSelect, objEvent) {\n                objSelect.executeCardAction();\n                // Prevent action from being trigger on other elements\n                objEvent.preventDefault();\n                objEvent.stopPropagation();\n            },\n            executeCardDropdownAction: function executeCardDropdownAction(objSelect, objEvent) {\n\n                // Prevent action from being trigger on other elements\n                objEvent.preventDefault();\n                objEvent.stopPropagation();\n\n                if (!objSelect.bLoader) {\n                    objSelect.executeCardAction();\n                    this.set(\"bShowDropdown\", false);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/card-datagrid-column-toggle\", [\"exports\", \"a24-ember-lib/templates/components/card-datagrid-column-toggle\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _cardDatagridColumnToggle, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n    var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n        return typeof obj;\n    } : function (obj) {\n        return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _cardDatagridColumnToggle.default,\n        classNames: [\"display-inline-block position-relative\"],\n        arrAllowedHeaders: null,\n        _sColumnSelected: \"\",\n        _bShowColumnsDropdown: false,\n        _objOnlyDisplayedHeader: null,\n        _arrHeaders: null,\n        _arrSelectedHeaders: null,\n        _sColumnOptionsDropdownId: \"\",\n        _objUtilsService: Ember.inject.service(\"ss-utils\"),\n        _funcSortFilterOptions: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            var objThis = this;\n\n            this.set(\"_funcSortFilterOptions\", function (arrData) {\n                if ((typeof arrData === \"undefined\" ? \"undefined\" : _typeof(arrData)) === \"object\") {\n                    return objThis.get(\"_objUtilsService\").sortObjectArrayOnText(arrData, \"sTitle\", true);\n                } else {\n                    return arrData;\n                }\n            });\n\n            this.set(\"_sColumnSelected\", Ember.guidFor({}));\n            this.set(\"_sColumnOptionsDropdownId\", Ember.guidFor({}));\n\n            this._configureColumns();\n\n            this.addObserver(\"arrAllowedHeaders\", this, this.get(\"_configureColumns\"));\n            this.addObserver(\"_arrHeaders.@each.bShowHeader\", this, this.get(\"_funcColumnChangeCallbackObserver\"));\n        },\n        _configureColumns: function _configureColumns() {\n            var _this = this;\n\n            if (!a24Core.isEmpty(this.get(\"arrAllowedHeaders\"))) {\n                var arrHeaders = this.get(\"arrAllowedHeaders\").filter(function (objItem) {\n                    return !Ember.get(objItem, \"bSilent\");\n                });\n\n                var arrSelectedHeaders = arrHeaders.filter(function (objItem) {\n                    return Ember.get(objItem, \"bShowHeader\");\n                });\n\n                if (arrSelectedHeaders.length === 1) {\n                    Ember.run.next(function () {\n                        Ember.run.schedule(\"afterRender\", function () {\n                            var objActives = _this.$(\".multiple-select-dropdown li.active\");\n                            objActives.addClass(\"disabled\");\n                            objActives.find(\"input\").attr(\"disabled\", \"disabled\");\n                        });\n                    });\n                }\n\n                this.set(\"_arrHeaders\", arrHeaders);\n                this.set(\"_arrSelectedHeaders\", arrSelectedHeaders);\n            } else {\n                this.set(\"_arrHeaders\", []);\n                this.set(\"_arrSelectedHeaders\", []);\n            }\n        },\n        _funcColumnChangeCallbackObserver: function _funcColumnChangeCallbackObserver() {\n            Ember.run.once(this, \"_funcColumnChangeCallback\");\n        },\n        _funcColumnChangeCallback: function _funcColumnChangeCallback() {\n            var arrSelectedHeaders = this.get(\"_arrHeaders\").filter(function (objItem) {\n                return Ember.get(objItem, \"bShowHeader\");\n            });\n\n            this.set(\"_arrSelectedHeaders\", arrSelectedHeaders);\n\n            this.setToggleStateForColumns(arrSelectedHeaders);\n        },\n        toggleDatagridColumnChange: function toggleDatagridColumnChange() {\n            if (!a24Core.isEmpty(this.get(\"cardDatagridColumnToggleChangeEvent\"))) {\n                return this.get(\"cardDatagridColumnToggleChangeEvent\")();\n            }\n        },\n        setToggleStateForColumns: function setToggleStateForColumns(arrColumns) {\n            var _this2 = this;\n\n            Ember.run.next(function () {\n                Ember.run.schedule(\"afterRender\", function () {\n                    if (arrColumns.length === 1) {\n                        var objActives = _this2.$(\".multiple-select-dropdown li.active\");\n                        objActives.addClass(\"disabled\");\n                        objActives.find(\"input\").attr(\"disabled\", \"disabled\");\n                    } else {\n                        var objActivesDisabled = _this2.$(\".multiple-select-dropdown li.active.disabled\");\n                        objActivesDisabled.removeClass(\"disabled\");\n                        objActivesDisabled.find(\"input\").removeAttr(\"disabled\");\n                    }\n                });\n            });\n        },\n        actions: {\n            toggleColumns: function toggleColumns(arrSelectedColumns) {\n                this.removeObserver(\"_arrHeaders.@each.bShowHeader\", this, this.get(\"_funcColumnChangeCallbackObserver\"));\n\n                var arrHeaders = this.get(\"_arrHeaders\");\n\n                for (var i = 0; i < arrHeaders.length; i++) {\n                    var objHeader = arrHeaders[i];\n\n                    if (!a24Core.isEmpty(arrSelectedColumns.findBy(\"sProperty\", objHeader.sProperty))) {\n                        Ember.set(objHeader, \"bShowHeader\", true);\n                    } else {\n                        Ember.set(objHeader, \"bShowHeader\", false);\n                    }\n                }\n\n                this.setToggleStateForColumns(arrSelectedColumns);\n\n                this.addObserver(\"_arrHeaders.@each.bShowHeader\", this, this.get(\"_funcColumnChangeCallbackObserver\"));\n\n                Ember.run.scheduleOnce(\"afterRender\", this, \"toggleDatagridColumnChange\");\n            },\n\n            columnToggleOptionClicked: function columnToggleOptionClicked() {\n                this.set(\"_bShowColumnsDropdown\", true);\n\n                var objCurrentController = this;\n\n                //Here we do a next since we first need the DOM to draw the filter options popup before we can access\n                //the first dropdown to focus it(seems it can only be focused in a ember next, might have to do with how\n                //mdb inits the dropdown) and also override the click on the popup so that it does not close the\n                //popup when click happens on itself.\n                Ember.run.next(function () {\n                    Ember.run.schedule(\"afterRender\", function () {\n                        var objOptionsDropdown = objCurrentController.$(\"#\" + objCurrentController.get(\"_sColumnOptionsDropdownId\") + \" input\");\n                        if (!a24Core.isEmpty(objOptionsDropdown)) {\n                            objOptionsDropdown.first().focus();\n                        }\n                    });\n                });\n            },\n            closeFilterDropdown: function closeFilterDropdown() {\n                this.set(\"_bShowColumnsDropdown\", false);\n\n                Ember.run.scheduleOnce(\"afterRender\", this, \"toggleDatagridColumnChange\");\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/card-datagrid-container\", [\"exports\", \"a24-ember-lib/templates/components/card-datagrid-container\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _cardDatagridContainer, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _cardDatagridContainer.default,\n        sUrlBase: \"\",\n        bDisableFilterKeyboardShortcuts: false,\n        bDisableTableKeyboardShortcuts: false,\n        objUrlConstantPart: null,\n        objDatagridConfig: null,\n        objQueryParams: null,\n        bShowShareButton: false,\n        bShareableLink: false,\n        bSwaggerServiceCalls: true,\n        bShowSaveAction: true,\n        bPostTypeDatagrid: false,\n        bPostTypeDatagridV2: false,\n        bAllowHiddenColumns: false,\n        bAllowHiddenColumnsProjection: false,\n        arrAllowedHeaders: null,\n        arrExtraActions: null,\n        iVisibleActions: 0,\n        sSavedSearchKey: null,\n        _arrSelectedItems: null,\n        _arrActionItems: null,\n        _bDatagridLoading: false,\n        _arrTableData: null,\n        _objFilterParamObject: null,\n        _objTableParamObject: null,\n        _objPageParamObject: null,\n        _objUrlCall: null,\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objFilterService: Ember.inject.service(\"card-datagrid-filter\"),\n        _objEnumEmberLibService: Ember.inject.service(\"a24-enums-ember-lib\"),\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objEmberLibStringService: Ember.inject.service(\"a24-strings-ember-lib\"),\n        _bDidInsertElement: false,\n        _bPagerLoading: false,\n        _sPageParam: \"\",\n        _sSortParam: \"\",\n        _bManyLabelClicked: false,\n        _bResultCountReturned: false,\n\n        _sAlertText: null,\n        _sAlertSeverity: null,\n        _bShowAlert: false,\n\n        _objProjectionQuery: null,\n        _funcQueryParamsObserverCallback: function _funcQueryParamsObserverCallback() {\n            var objThis = this;\n            // We do this purely because we need certain variables to bind back to the parent for testing\n            Ember.run.schedule(\"actions\", function () {\n                objThis.getQueryParams();\n            });\n        },\n        _funcPageParamChangeCallback: function _funcPageParamChangeCallback() {\n            this.doServiceCall(false);\n        },\n        _funcSortParamChangeCallback: function _funcSortParamChangeCallback() {\n            this.doServiceCall(true);\n        },\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n            var objThis = this;\n            var arrHeaders = this.get(\"objDatagridConfig.arrHeaderConfig\");\n            //Since paging is not something we want to control from outside it is highly likely that these values will\n            //not be set, so we set them here to default on the objDatagridConfig so that they also go into the gwt history\n            if (a24Core.isEmpty(this.get(\"objDatagridConfig.iPerPage\"))) {\n                this.set(\"objDatagridConfig.iPerPage\", 25);\n            }\n            if (a24Core.isEmpty(this.get(\"objDatagridConfig.iResultCount\"))) {\n                this.set(\"objDatagridConfig.iResultCount\", 0);\n            }\n            if (a24Core.isEmpty(this.get(\"objDatagridConfig.iPage\"))) {\n                this.set(\"objDatagridConfig.iPage\", 1);\n            }\n            if (a24Core.isEmpty(this.get(\"objDatagridConfig.bHasReloadButton\"))) {\n                this.set(\"objDatagridConfig.bHasReloadButton\", false);\n            }\n            if (a24Core.isEmpty(this.get(\"_arrTableData\"))) {\n                this.set(\"_arrTableData\", []);\n            }\n            if (a24Core.isEmpty(this.get(\"_objProjectionQuery\"))) {\n                this.set(\"_objProjectionQuery\", {});\n            }\n            if (!a24Core.isEmpty(this.get(\"objDatagridConfig.funcResultCountManyClicked\")) && !a24Core.isEmpty(this.get(\"objDatagridConfig.iResultCountLimit\"))) {\n                this.set(\"objDatagridConfig.funcTriggerResultCountManyClick\", function () {\n                    if (!_this.get(\"_bResultCountReturned\") && _this.get(\"objDatagridConfig.iResultCount\") === _this.get(\"objDatagridConfig.iResultCountLimit\")) {\n                        if (!_this.get(\"_bManyLabelClicked\")) {\n                            // check that service is not already running\n                            _this.set(\"_bManyLabelClicked\", true);\n                            _this.doServiceCall(false, true);\n                        }\n                    } else {\n                        _this.get(\"objDatagridConfig.funcResultCountManyClicked\")().funcSuccess(_this.get(\"objDatagridConfig.iResultCount\"));\n                    }\n                });\n            }\n\n            this.set(\"_bManyLabelClicked\", false);\n            this.set(\"_bResultCountReturned\", false);\n\n            //Add query params observer if we have any\n            if (!a24Core.isEmpty(this.get(\"objQueryParams\"))) {\n                this.set(\"_sPageParam\", this.get(\"objDatagridConfig.iPage\").toString());\n                this.addObserver(\"objQueryParams\", this, this.get(\"_funcQueryParamsObserverCallback\"));\n                this.addObserver(\"_sPageParam\", this, this.get(\"_funcPageParamChangeCallback\"));\n\n                for (var i = 0; i < arrHeaders.length; i++) {\n                    //Set the sort if the column has it applied\n                    if (!a24Core.isEmpty(arrHeaders[i].sAsc)) {\n                        this.set(\"_sSortParam\", arrHeaders[i].sProperty + \"::\" + arrHeaders[i].sAsc);\n                        break;\n                    }\n                }\n                this.addObserver(\"_sSortParam\", this, this.get(\"_funcSortParamChangeCallback\"));\n\n                this.getQueryParams();\n            } else {\n                $.each(arrHeaders, function (sKey, objItem) {\n                    Ember.set(objItem, \"bShowHeader\", !objItem.bInitialyHidden);\n                });\n            }\n\n            this.set(\"arrAllowedHeaders\", arrHeaders);\n\n            Ember.run.scheduleOnce(\"afterRender\", this, function () {\n                objThis.set(\"_bDidInsertElement\", true);\n                //We call the service call here to give the child components the chance to initialize and set the initial\n                //query objects.\n                objThis.doServiceCall(false);\n            });\n        },\n        getQueryParams: function getQueryParams() {\n            var _this2 = this;\n\n            //This function will get the query params that are in the url and apply them to the datagrid\n            var objQueryParams = this.get(\"objQueryParams\");\n            var arrHeaders = this.get(\"objDatagridConfig.arrHeaderConfig\");\n            var objProjectionQuery = {};\n\n            var arrVisibleColumns = [];\n            if (!a24Core.isEmpty(objQueryParams.vis_cols.sValue)) {\n                arrVisibleColumns = objQueryParams.vis_cols.sValue.split(\",\");\n            }\n\n            if (!a24Core.isEmpty(objQueryParams.savedSearchKey.sValue)) {\n                this.set(\"sSavedSearchKey\", objQueryParams.savedSearchKey.sValue);\n            }\n\n            var arrSortDetails = null;\n            if (!a24Core.isEmpty(objQueryParams.sortBy)) {\n                if (!a24Core.isEmpty(objQueryParams.sortBy.sValue)) {\n                    arrSortDetails = objQueryParams.sortBy.sValue.split(\"::\");\n                }\n            }\n            var bFoundSortColumn = false;\n            var sSortColumn = null;\n            var sSortOrder = null;\n            if (!a24Core.isEmpty(arrSortDetails)) {\n                sSortColumn = arrSortDetails[0];\n                sSortOrder = arrSortDetails[1];\n            }\n\n            var objFirstVisCol = null;\n            var bFoundVisCol = false;\n\n            for (var i = 0; i < arrHeaders.length; i++) {\n\n                var objHeader = arrHeaders[i];\n                var sProperty = objHeader.sProperty;\n                var sUniqueColNum = objHeader.iUniqueColNum + \"\";\n\n                if (a24Core.isEmpty(sUniqueColNum)) {\n                    console.error( //eslint-disable-line no-console\n                    \"Column with property \" + sProperty + \" does not have a iUniqueColNum defined.\\n\" + \"Each column on the datagrid should have a iUniqueColNum defined when using query params.\\n\" + \"The iUniqueColNum should be different for each column and never unpdated in the future since it \" + \"will break users saved bookmarks or links created with the iUniqueColNum in it.\");\n                    return;\n                }\n\n                Ember.set(objHeader, \"bShowHeader\", false);\n\n                if (arrVisibleColumns.includes(sUniqueColNum) && !objHeader.bSilent) {\n                    bFoundVisCol = true;\n                    Ember.set(objHeader, \"bShowHeader\", true);\n                    objProjectionQuery[this._getBaseProprty(objHeader.sProperty)] = {\n                        bProject: true,\n                        mValue: 1\n                    };\n                }\n\n                if (a24Core.isEmpty(objFirstVisCol) && !objHeader.bSilent) {\n                    objFirstVisCol = objHeader;\n                }\n\n                if (objHeader.bFilterSecondary || objHeader.bFilterAnd || objHeader.bFilterOr || objHeader.sFilterType === \"custom\") {\n                    // if (objHeader.bFilterSecondary) { <-- use this when below commented out code is used\n                    //NOTE: Note the below we use \"m\" fitler value and not the \"s\" filter value\n                    if (a24Core.isEmpty(objQueryParams[sProperty].sValue)) {\n                        Ember.set(objHeader, \"sTagValue\", null);\n                        Ember.set(objHeader, \"sTagValueSimple\", null);\n                        Ember.set(objHeader, \"arrTagValue\", null);\n                        Ember.set(objHeader, \"mFilterValue\", null);\n                    } else {\n                        //base64 decode, then JSON decode\n                        try {\n                            Ember.set(objHeader, \"mFilterValue\", JSON.parse(atob(objQueryParams[sProperty].sValue)));\n                        } catch (objError) {\n                            //JSON stringify or btoa fail.\n\n                            Ember.set(objHeader, \"sTagValue\", null);\n                            Ember.set(objHeader, \"sTagValueSimple\", null);\n                            Ember.set(objHeader, \"arrTagValue\", null);\n                            Ember.set(objHeader, \"mFilterValue\", null);\n\n                            //eslint-disable-next-line no-console\n                            console.warn(\"Could not parse the datagrid advance filter mFilterValue \\n\", objError);\n                        }\n                    }\n\n                    // We can add this in the future to try and save space in the url, for now im leaving this out because of\n                    // the following scenario(assume we use || for or condition):\n                    // Search for \"tom\" and \"bob\" will be sName=tom||bob = seach on 2 items\n                    // Search for \"tom||nom\" and \"bob\" will be sName=tom||nom||bob = search on 3 items instead of only 2\n                    // } else if (objHeader.bFilterAnd || objHeader.bFilterOr) {\n                    //     // Parsing bFilterAnd and bFilterOr different to save space in the url e.g\n                    //     // policies___type_id=Bloep&&noep&&snoep||nomnom&&sneegle, since we can split on that and\n                    //     // still be able to build the correct query. It is only when secondary properties come into play\n                    //     // where we cant assign all values on one property without base64\n                    //\n                    //     //NOTE: Note the below we use \"m\" fitler value and not the \"s\" filter value\n                    //\n                    //     if (a24Core.isEmpty(objQueryParams[sProperty].sValue)) {\n                    //         set(objHeader, \"sTagValue\", null);\n                    //         set(objHeader, \"sTagValueSimple\", null);\n                    //         set(objHeader, \"mFilterValue\", null);\n                    //     } else {\n                    //         set(objHeader, \"mFilterValue\", objQueryParams[sProperty].sValue);\n                    //     }\n                } else if (\"date\" === objHeader.sFilterType) {\n                    var iDays = null;\n                    var iDaysTo = null;\n                    var bFixDates = false;\n                    if (!a24Core.isEmpty(objQueryParams[sProperty].sValue) && (objQueryParams[sProperty].sValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_WILL_NOT_EXPIRE.backend\"), 0) === 0 || objQueryParams[sProperty].sValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_AT_LEAST.backend\"), 0) === 0)) {\n                        var sUnit = objQueryParams[sProperty].sValue.split(\"_\")[1];\n                        if (!a24Core.isEmpty(objQueryParams[sProperty + \"From\"].sValue) && !a24Core.isEmpty(objQueryParams[sProperty + \"To\"].sValue)) {\n                            var objFromDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                            var objToDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n\n                            objFromDate.setDateFromBrowser(objQueryParams[sProperty + \"From\"].sValue, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                            objToDate.setDateFromBrowser(objQueryParams[sProperty + \"To\"].sValue, this.get(\"_objLibConstants.DATE_FORMAT\"));\n\n                            objFromDate.setTimeToStartOfDay();\n                            objToDate.setTimeToStartOfDay();\n                            iDays = Math.round(objFromDate.difference(objToDate, sUnit, true));\n                            bFixDates = true;\n                        }\n                    } else if (!a24Core.isEmpty(objQueryParams[sProperty].sValue) && (objQueryParams[sProperty].sValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED_GRACE.backend\"), 0) === 0 || objQueryParams[sProperty].sValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_WITHIN_LAST.backend\"), 0) === 0)) {\n                        var _sUnit = objQueryParams[sProperty].sValue.split(\"_\")[1];\n                        if (!a24Core.isEmpty(objQueryParams[sProperty + \"From\"].sValue) && !a24Core.isEmpty(objQueryParams[sProperty + \"To\"].sValue)) {\n                            var _objFromDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                            var _objToDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n\n                            _objFromDate.setDateFromBrowser(objQueryParams[sProperty + \"From\"].sValue, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                            _objToDate.setDateFromBrowser(objQueryParams[sProperty + \"To\"].sValue, this.get(\"_objLibConstants.DATE_FORMAT\"));\n\n                            _objFromDate.setTimeToStartOfDay();\n                            _objToDate.setTimeToStartOfDay();\n                            iDays = Math.round(_objToDate.difference(_objFromDate, _sUnit, true));\n                            bFixDates = true;\n                        }\n                    } else if ((objQueryParams[sProperty].sValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_WITHIN_THE_LAST.backend\") || objQueryParams[sProperty].sValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_WITHIN_THE_NEXT.backend\") || objQueryParams[sProperty].sValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_WITHIN_THE_NEXT.backend\") || objQueryParams[sProperty].sValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_LAST.backend\") || objQueryParams[sProperty].sValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_NEXT.backend\")) && !a24Core.isEmpty(objQueryParams[sProperty + \"From\"].sValue) && !a24Core.isEmpty(objQueryParams[sProperty + \"To\"].sValue)) {\n                        var _objFromDate2 = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                        var _objToDate2 = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n\n                        _objFromDate2.setDateFromBrowser(objQueryParams[sProperty + \"From\"].sValue, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                        _objToDate2.setDateFromBrowser(objQueryParams[sProperty + \"To\"].sValue, this.get(\"_objLibConstants.DATE_FORMAT\"));\n\n                        _objFromDate2.setTimeToStartOfDay();\n                        _objToDate2.setTimeToStartOfDay();\n                        iDays = Math.round(_objToDate2.difference(_objFromDate2, a24Constants.MOMENT_TIME_DAYS, true));\n                        bFixDates = true;\n                    } else if (objQueryParams[sProperty].sValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED.backend\")) {\n                        bFixDates = true;\n                    } else if (!a24Core.isEmpty(objQueryParams[sProperty].sValue) && objQueryParams[sProperty].sValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsBetween.DATE_FILTER_BETWEEN.backend\"), 0) === 0) {\n                        var arrExtraOptions = objQueryParams[sProperty].sValue.split(\"_\");\n                        iDays = arrExtraOptions[2];\n                        iDaysTo = arrExtraOptions[3];\n                        bFixDates = true;\n                    }\n\n                    var objFilterToAndFrom = this.get(\"_objFilterService\").getDateFromAndToValues(objQueryParams[sProperty].sValue, iDays, iDaysTo);\n                    var bInvalidValue = a24Core.isEmpty(objQueryParams[sProperty].sValue) || objFilterToAndFrom.bNotInset;\n\n                    //TODO might need to add extra check here for new types and then set the to and from here so that the\n                    //url updates with the new dates. Not that it is a real problem since the dates only gets used to calc\n                    //the amount of days inbetween them. Just if user does look at the url it might appear wrong even tho\n                    //it will actually query with the correct expected dates.\n\n                    if (a24Core.isEmpty(objQueryParams[sProperty + \"From\"].sValue) && a24Core.isEmpty(objQueryParams[sProperty + \"To\"].sValue) && bInvalidValue) {\n                        Ember.set(objHeader, \"sFilterFromValue\", null);\n                        Ember.set(objHeader, \"sFilterToValue\", null);\n                        Ember.set(objHeader, \"sTagValue\", null);\n                        Ember.set(objHeader, \"sTagValueSimple\", null);\n                        Ember.set(objHeader, \"sFilterValue\", null);\n                    } else {\n                        if (bFixDates) {\n                            Ember.set(objHeader, \"sFilterFromValue\", objFilterToAndFrom.sFromDate);\n                            Ember.set(objHeader, \"sFilterToValue\", objFilterToAndFrom.sToDate);\n                        } else {\n                            Ember.set(objHeader, \"sFilterFromValue\", objQueryParams[sProperty + \"From\"].sValue);\n                            Ember.set(objHeader, \"sFilterToValue\", objQueryParams[sProperty + \"To\"].sValue);\n                        }\n\n                        if (bInvalidValue) {\n                            if (objQueryParams[sProperty].sValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_CUSTOM.backend\")) {\n                                Ember.set(objHeader, \"sFilterValue\", this.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_CUSTOM.backend\"));\n                            } else {\n                                Ember.set(objHeader, \"sFilterValue\", this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_CUSTOM_RANGE.backend\"));\n                            }\n                        } else {\n                            Ember.set(objHeader, \"sFilterValue\", objQueryParams[sProperty].sValue);\n                        }\n                    }\n                } else {\n                    if (a24Core.isEmpty(objQueryParams[sProperty].sValue) || objHeader.bStopFiltering) {\n                        Ember.set(objHeader, \"sTagValue\", null);\n                        Ember.set(objHeader, \"sTagValueSimple\", null);\n                        Ember.set(objHeader, \"sFilterValue\", null);\n                    } else {\n                        Ember.set(objHeader, \"sFilterValue\", objQueryParams[sProperty].sValue);\n                    }\n                }\n\n                if (sProperty === sSortColumn) {\n                    bFoundSortColumn = true;\n                    Ember.set(objHeader, \"sAsc\", sSortOrder);\n                } else {\n                    Ember.set(objHeader, \"sAsc\", null);\n                }\n            }\n\n            //We cant hide all the columns, so when the vis_col param is empty we display the first availible column\n            if (a24Core.isEmpty(arrVisibleColumns) || !bFoundVisCol) {\n                Ember.set(objFirstVisCol, \"bShowHeader\", true);\n                objProjectionQuery[this._getBaseProprty(objFirstVisCol.sProperty)] = {\n                    bProject: true,\n                    mValue: 1\n                };\n            }\n\n            if (JSON.stringify(this.get(\"_objProjectionQuery\")) !== JSON.stringify(objProjectionQuery)) {\n                this.set(\"_objProjectionQuery\", objProjectionQuery);\n            }\n            //Add the special cases that are not in the arrHeaderConfig\n            if (!a24Core.isEmpty(objQueryParams.page)) {\n                this.set(\"objDatagridConfig.iPage\", parseInt(objQueryParams.page.sValue));\n                this.set(\"_sPageParam\", objQueryParams.page.sValue);\n            }\n\n            if (!bFoundSortColumn || a24Core.isEmpty(arrSortDetails)) {\n                this.set(\"_objTableParamObject\", null);\n            } else {\n                var objSortQuery = {};\n                var objQueryItem = {};\n                objQueryItem.mValue = sSortOrder;\n                objQueryItem.bSortBy = true;\n                objSortQuery[sSortColumn] = objQueryItem;\n                this.set(\"_objTableParamObject\", objSortQuery);\n            }\n\n            if (!a24Core.isEmpty(objQueryParams.sortBy)) {\n                this.set(\"_sSortParam\", objQueryParams.sortBy.sValue);\n            }\n\n            // This component and the card datagrid filter component both seem to change the header configurations\n            // We add this next here so that we can ensure that all the changes have completed before updating the url\n            // to avoid a race condition between the two components\n            Ember.run.next(function () {\n                // Call this so that we can ensure the url matches what was updated in the headers\n                _this2.setQueryParams();\n            });\n        },\n        setQueryParams: function setQueryParams() {\n            //This function will get the new query param values from the datagrid and then set them back onto the url\n            //If we do not have any query params setup then do not run this function\n            if (a24Core.isEmpty(this.get(\"objQueryParams\"))) {\n                return;\n            }\n\n            //Remove objQueryParams since we are doing an internal change and do not want the getQueryParams firing\n            this.removeObserver(\"objQueryParams\", this, this.get(\"_funcQueryParamsObserverCallback\"));\n\n            //Update the objQueryParams so that the values for them in the url can update\n            var objNewQueryParams = JSON.parse(JSON.stringify(this.get(\"objQueryParams\")));\n            var arrHeaders = this.get(\"objDatagridConfig.arrHeaderConfig\");\n            var sSortBy = null;\n\n            var arrVisibleHeaders = [];\n\n            for (var i = 0; i < arrHeaders.length; i++) {\n\n                var objHeader = arrHeaders[i];\n                var sProperty = objHeader.sProperty;\n\n                // adds the property to the visible columns array if show header is true and silent is\n                if (objHeader.bShowHeader && !objHeader.bSilent) {\n                    arrVisibleHeaders.push(objHeader.iUniqueColNum);\n                }\n\n                if (objHeader.bFilterSecondary || objHeader.bFilterAnd || objHeader.bFilterOr || objHeader.sFilterType === \"custom\") {\n                    // if (objHeader.bFilterSecondary) { <-- use this when below commented out code is used\n\n                    //NOTE: Note the below we use \"m\" fitler value and not the \"s\" filter value\n                    if (a24Core.isEmpty(objHeader.mFilterValue)) {\n                        objNewQueryParams[sProperty].sValue = \"\";\n                    } else {\n                        //JSON encode then base64 encode\n                        var sFilterValue = \"\";\n                        try {\n                            sFilterValue = btoa(JSON.stringify(objHeader.mFilterValue));\n                        } catch (objError) {\n                            //JSON stringify or btoa fail.\n                            //eslint-disable-next-line no-console\n                            console.warn(\"Could not encode the datagrid advance filter mFilterValue \\n\", objError);\n                        }\n\n                        objNewQueryParams[sProperty].sValue = sFilterValue;\n                    }\n\n                    // We can add this in the future to try and save space in the url, for now im leaving this out because of\n                    // the following scenario(assume we use || for or condition):\n                    // Search for \"tom\" and \"bob\" will be sName=tom||bob = seach on 2 items\n                    // Search for \"tom||nom\" and \"bob\" will be sName=tom||nom||bob = search on 3 items instead of only 2\n                    // } else if (objHeader.bFilterAnd || objHeader.bFilterOr) {\n                    //     // Parsing bFilterAnd and bFilterOr different to save space in the url e.g\n                    //     // policies___type_id=Bloep&&noep&&snoep||nomnom&&sneegle, since we can split on that and\n                    //     // still be able to build the correct query. It is only when secondary properties come into play\n                    //     // where we cant assign all values on one property without base64\n                    //\n                    //     //NOTE: Note the below we use \"m\" fitler value and not the \"s\" filter value\n                    //\n                    //     if (a24Core.isEmpty(objHeader.mFilterValue)) {\n                    //         objNewQueryParams[sProperty].sValue = \"\";\n                    //     } else {\n                    //         objNewQueryParams[sProperty].sValue = objHeader.mFilterValue;\n                    //     }\n                } else if (\"date\" === objHeader.sFilterType) {\n                    if (a24Core.isEmpty(objHeader.sFilterValue)) {\n                        objNewQueryParams[sProperty].sValue = \"\";\n                    } else {\n                        objNewQueryParams[sProperty].sValue = objHeader.sFilterValue;\n                    }\n\n                    objNewQueryParams[sProperty + \"From\"].sValue = \"\";\n                    objNewQueryParams[sProperty + \"To\"].sValue = \"\";\n                    if (!a24Core.isEmpty(objHeader.sFilterValue)) {\n                        if (objHeader.sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED_GRACE.backend\"), 0) === 0) {\n                            var sUnit = objHeader.sFilterValue.split(\"_\")[1];\n                            var objFromDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                            var objCurrentDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n\n                            objFromDate.setDateFromBrowser(objHeader.sFilterFromValue, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                            var iDays = Math.round(objCurrentDate.difference(objFromDate, sUnit, true));\n\n                            objNewQueryParams[sProperty + \"To\"].sValue = objCurrentDate.getDateFormat();\n                            objCurrentDate.subtractTimeFromDate(sUnit, iDays);\n                            objNewQueryParams[sProperty + \"From\"].sValue = objCurrentDate.getDateFormat();\n                        } else if (objHeader.sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_WILL_NOT_EXPIRE.backend\"), 0) === 0) {\n                            var _sUnit2 = objHeader.sFilterValue.split(\"_\")[1];\n                            var _objFromDate3 = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                            var _objCurrentDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n\n                            _objFromDate3.setDateFromBrowser(objHeader.sFilterFromValue, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                            var _iDays = Math.round(_objFromDate3.difference(_objCurrentDate, _sUnit2, true));\n\n                            objNewQueryParams[sProperty + \"To\"].sValue = _objCurrentDate.getDateFormat();\n                            _objCurrentDate.addTimeToDate(_sUnit2, _iDays);\n                            objNewQueryParams[sProperty + \"From\"].sValue = _objCurrentDate.getDateFormat();\n                        } else if (objHeader.sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_WITHIN_LAST.backend\"), 0) === 0) {\n                            var _sUnit3 = objHeader.sFilterValue.split(\"_\")[1];\n                            var _objFromDate4 = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                            var objToDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                            var _objCurrentDate2 = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n\n                            _objFromDate4.setDateFromBrowser(objHeader.sFilterFromValue, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                            objToDate.setDateFromBrowser(objHeader.sFilterToValue, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                            objToDate.setTimeToStartOfDay();\n                            _objFromDate4.setTimeToStartOfDay();\n                            var _iDays2 = Math.round(objToDate.difference(_objFromDate4, _sUnit3, true));\n\n                            objNewQueryParams[sProperty + \"To\"].sValue = _objCurrentDate2.getDateFormat();\n                            _objCurrentDate2.subtractTimeFromDate(_sUnit3, _iDays2);\n                            objNewQueryParams[sProperty + \"From\"].sValue = _objCurrentDate2.getDateFormat();\n                        } else if (objHeader.sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_AT_LEAST.backend\"), 0) === 0) {\n                            var _sUnit4 = objHeader.sFilterValue.split(\"_\")[1];\n                            var _objToDate3 = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                            var _objCurrentDate3 = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                            _objToDate3.setDateFromBrowser(objHeader.sFilterToValue, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                            _objCurrentDate3.setTimeToStartOfDay();\n                            _objToDate3.setTimeToStartOfDay();\n                            var _iDays3 = Math.round(_objCurrentDate3.difference(_objToDate3, _sUnit4, true));\n\n                            objNewQueryParams[sProperty + \"From\"].sValue = _objCurrentDate3.getDateFormat();\n                            _objCurrentDate3.subtractTimeFromDate(_sUnit4, _iDays3);\n                            objNewQueryParams[sProperty + \"To\"].sValue = _objCurrentDate3.getDateFormat();\n                        } else if (objHeader.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED.backend\") || objHeader.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_AFTER.backend\") || objHeader.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_CUSTOM_RANGE.backend\") || objHeader.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_CUSTOM.backend\") || objHeader.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_WITHIN_THE_LAST.backend\") || objHeader.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_WITHIN_THE_NEXT.backend\") || objHeader.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_WITHIN_THE_NEXT.backend\") || objHeader.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_LAST.backend\") || objHeader.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_NEXT.backend\") || objHeader.sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsBetween.DATE_FILTER_BETWEEN.backend\"), 0) === 0) {\n                            if (!a24Core.isEmpty(objHeader.sFilterFromValue)) {\n                                objNewQueryParams[sProperty + \"From\"].sValue = objHeader.sFilterFromValue;\n                            }\n                            if (!a24Core.isEmpty(objHeader.sFilterToValue)) {\n                                objNewQueryParams[sProperty + \"To\"].sValue = objHeader.sFilterToValue;\n                            }\n                        }\n                    }\n                } else {\n                    if (a24Core.isEmpty(objHeader.sFilterValue)) {\n                        objNewQueryParams[sProperty].sValue = \"\";\n                    } else {\n                        objNewQueryParams[sProperty].sValue = objHeader.sFilterValue;\n                    }\n                }\n\n                //Set the sort if the column has it applied\n                if (!a24Core.isEmpty(objHeader.sAsc) && !a24Core.isEmpty(objNewQueryParams.sortBy)) {\n                    sSortBy = sProperty + \"::\" + objHeader.sAsc;\n                    objNewQueryParams.sortBy.sValue = sSortBy;\n                }\n            }\n\n            //This is internal change so remove observer from the _sSortParam while changing it\n            this.removeObserver(\"_sSortParam\", this, this.get(\"_funcSortParamChangeCallback\"));\n            if (a24Core.isEmpty(sSortBy)) {\n                this.set(\"_sSortParam\", \"\");\n            } else {\n                this.set(\"_sSortParam\", sSortBy);\n            }\n            this.addObserver(\"_sSortParam\", this, this.get(\"_funcSortParamChangeCallback\"));\n\n            // Sets the visiable columns query param\n            objNewQueryParams.vis_cols.sValue = arrVisibleHeaders.join(\",\");\n\n            if (!a24Core.isEmpty(objNewQueryParams.page)) {\n                objNewQueryParams.page.sValue = this.get(\"objDatagridConfig.iPage\").toString();\n            }\n\n            this.set(\"objQueryParams\", objNewQueryParams);\n\n            this.addObserver(\"objQueryParams\", this, this.get(\"_funcQueryParamsObserverCallback\"));\n        },\n        doServiceCall: function doServiceCall(bFirstPage, bSkipResultCountLimit) {\n            var _this3 = this;\n\n            if (!this.get(\"_bDidInsertElement\")) {\n                return;\n            }\n            this.set(\"_bDatagridLoading\", true);\n\n            //Always go back to page 1 unless service call event came from the pager.\n            if (bFirstPage) {\n                this.set(\"objDatagridConfig.iPage\", 1);\n            } else {\n                this.updatePageParamFilter();\n            }\n\n            if (!bSkipResultCountLimit) {\n                // called with result count limit, this invalidates the many click\n                this.set(\"_bResultCountReturned\", false);\n            }\n\n            var objController = this;\n            var objPOSTBody = null;\n\n            var objSuccessCallback = function objSuccessCallback(objResponse, sStatus, jqXHR) {\n\n                objController.set(\"objDatagridConfig.iResultCount\", a24RestCallHelper.getXResultCount(jqXHR));\n                objController.set(\"_arrTableData\", a24Core.isEmpty(objResponse) ? [] : objResponse);\n                objController.set(\"objDatagridConfig.iResultsReturned\", !a24Core.isEmpty(objResponse) ? objResponse.length : 0);\n\n                if (objController.get(\"_bManyLabelClicked\")) {\n                    objController.set(\"_bManyLabelClicked\", false);\n                }\n\n                if (bSkipResultCountLimit) {\n                    objController.set(\"_bResultCountReturned\", true);\n                }\n\n                var bDidDoServiceCallHandled = false;\n                //This now allows you to either just alter the _arrTableData OR if you want to sort or replace the array\n                //with a new one(even from new service call) you can return true and then call the callback to set data\n                //later, thus datagrid will stay in loading till then. This technically adds support to datagrid to do more\n                //than one call and moesh it all into one response, you would fire the other service calls from the\n                //bEmitWillDoServiceCall tho and just wait for them here.\n                if (objController.get(\"objDatagridConfig.bEmitDidDoServiceCall\")) {\n                    bDidDoServiceCallHandled = objController.sendAction(\"onDidDoServiceCall\", objController.get(\"_arrTableData\"), jqXHR, Ember.copy(objPOSTBody, true), objController.get(\"objDatagridConfig.objPermanentQuery\") ? objController.get(\"objDatagridConfig.objPermanentQuery\") : objController.get(\"objUrlConstantPart\"), objController.get(\"_objFilterParamObject\"), objController.get(\"_objTableParamObject\"), objController.get(\"objDatagridConfig.iPage\"), objController.get(\"objDatagridConfig.iPerPage\"), function (arrData) {\n                        objController.set(\"_arrTableData\", arrData);\n                        objController.set(\"_bDatagridLoading\", false);\n                    }, bSkipResultCountLimit);\n                }\n                if (!bDidDoServiceCallHandled) {\n                    objController.set(\"_bDatagridLoading\", false);\n                }\n\n                if (!a24Core.isEmpty(objController.get(\"objDatagridConfig.funcResultCountManyClicked\")) && objController.get(\"_bResultCountReturned\")) {\n                    objController.get(\"objDatagridConfig.funcResultCountManyClicked\")().funcSuccess(objController.get(\"objDatagridConfig.iResultCount\"));\n                }\n\n                if (!bFirstPage && a24Core.isEmpty(objResponse) && objController.get(\"objDatagridConfig.iResultCount\") > 0) {\n                    objController.set(\"_bResultCountReturned\", true);\n                    // display snackbar message\n                    objController.get(\"_objSnackbarService\").showSnackbarMessage(objController.get(\"_objEmberLibStringService\").getString(\"endOfResults\"));\n                }\n\n                objController.set(\"_bPagerLoading\", false);\n            };\n\n            var objFailure = a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode, sStatus, objErrorThrown, objError) {\n                if (objController.get(\"objDatagridConfig.bEmitDidDoServiceCallFail\")) {\n                    objController.sendAction(\"onDidDoServiceCallFail\", sCode, sStatus, objErrorThrown, objError);\n                } else if (sCode === \"500\" || sCode === \"502\" || sCode === \"503\" || sCode === \"504\") {\n                    if (_this3.get(\"objDatagridConfig.bHasReloadButton\")) {\n                        _this3.set(\"_bDatagridLoading\", false);\n\n                        // display snackbar message\n                        _this3.get(\"_objSnackbarService\").showSnackbarMessage(_this3.get(\"_objEmberLibStringService\").getString(\"datagridReload\"), _this3.get(\"_objEmberLibStringService\").getString(\"reload\"), function () {\n\n                            _this3.doServiceCall(false);\n                        });\n                    }\n                }\n                if (objController.get(\"_bManyLabelClicked\")) {\n                    objController.set(\"_bManyLabelClicked\", false);\n                }\n\n                if (!a24Core.isEmpty(objController.get(\"objDatagridConfig.funcResultCountManyClicked\"))) {\n                    _this3.get(\"objDatagridConfig.funcResultCountManyClicked\")().funcFailure();\n                }\n            });\n\n            /**\n             * This if makes the datagrid either of GET type or of POST type\n             */\n            if (this.get(\"bPostTypeDatagrid\") || this.get(\"bPostTypeDatagridV2\")) {\n                var bWillDoServiceCallHandled = false;\n                var objCustomHeader = {};\n\n                if (a24Core.isEmpty(bSkipResultCountLimit) && !bSkipResultCountLimit && !a24Core.isEmpty(this.get(\"objDatagridConfig.iResultCountLimit\"))) {\n                    objCustomHeader[\"X-Accept-Result-Count-Limit\"] = this.get(\"objDatagridConfig.iResultCountLimit\");\n                }\n                if (this.get(\"objDatagridConfig.bEmitWillDoServiceCall\")) {\n                    if (!a24Core.isEmpty(this.get(\"onWillDoServiceCall\"))) {\n                        //This now allows you to either just alter the query params before the service call happens OR\n                        //to return true and then handle the service call/data on your own and then call the\n                        //objSuccessCallback or objFailure passed along to the action.\n                        bWillDoServiceCallHandled = this.get(\"onWillDoServiceCall\")(this.get(\"_arrTableData\"), this.get(\"objDatagridConfig.objPermanentQuery\"), this.get(\"_objFilterParamObject\"), this.get(\"_objTableParamObject\"), this.get(\"objDatagridConfig.iPage\"), this.get(\"objDatagridConfig.iPerPage\"), objSuccessCallback, objFailure, this.get(\"bAllowHiddenColumnsProjection\") ? this.get(\"_objProjectionQuery\") : null, bSkipResultCountLimit);\n                    }\n                }\n\n                // This is outside the `if (!bWillDoServiceCallHandled) {` since the onDidDoServiceCall uses this.\n                // It would make sense that objPOSTBody should be null in the onDidDoServiceCall if you handled the\n                // onWillDoServiceCall yourself, but rather leaving it out here for sake of support current code that\n                // might want to check the objPOSTBody anyway.\n                if (this.get(\"bPostTypeDatagrid\")) {\n                    objPOSTBody = a24RestCallHelper.convertHooksToPostBody(this.get(\"_objFilterParamObject\"), this.get(\"objDatagridConfig.objPermanentQuery\"), this.get(\"_objTableParamObject\"), this.get(\"objDatagridConfig.iPage\"), this.get(\"objDatagridConfig.iPerPage\"), this.get(\"objDatagridConfig.objPayloadOverride\"), this.get(\"bAllowHiddenColumnsProjection\") ? this.get(\"_objProjectionQuery\") : null);\n                } else if (this.get(\"bPostTypeDatagridV2\")) {\n                    objPOSTBody = a24RestCallHelper.convertHooksToPostBodyV2(this.get(\"_objFilterParamObject\"), this.get(\"objDatagridConfig.objPermanentQuery\"), this.get(\"_objTableParamObject\"), this.get(\"objDatagridConfig.iPage\"), this.get(\"objDatagridConfig.iPerPage\"), this.get(\"objDatagridConfig.objPayloadOverride\"), this.get(\"bAllowHiddenColumnsProjection\") ? this.get(\"_objProjectionQuery\") : null);\n                }\n\n                if (!bWillDoServiceCallHandled) {\n                    a24RestCallHelper.doRestServiceCall(objController, \"_objUrlCall\", a24RestCallHelper.makeJsonAjaxCall(objController, objController.get(\"_objUserSession\"), objController.get(\"_objNavigation\"), \"POST\", this.get(\"sUrlBase\"), objSuccessCallback, objFailure, objPOSTBody, null, null, null, null, null, objCustomHeader));\n                }\n            } else {\n                //Build up the complete url using the url param query objects from the filter, pager and table sort\n                if (objController.get(\"bSwaggerServiceCalls\")) {\n                    a24RestUrlConstruct.setBaseUrlSwagger(this.get(\"sUrlBase\"));\n                } else {\n                    a24RestUrlConstruct.setBaseUrl(this.get(\"sUrlBase\"));\n                }\n\n                var _bWillDoServiceCallHandled = false;\n                if (this.get(\"objDatagridConfig.bEmitWillDoServiceCall\")) {\n                    if (!a24Core.isEmpty(this.get(\"onWillDoServiceCall\"))) {\n                        //This now allows you to either just alter the query params before the service call happens OR\n                        //to return true and then handle the service call/data on your own and then call the\n                        //objSuccessCallback or objFailure passed along to the action.\n                        _bWillDoServiceCallHandled = this.get(\"onWillDoServiceCall\")(this.get(\"_arrTableData\"), this.get(\"objUrlConstantPart\"), this.get(\"_objFilterParamObject\"), this.get(\"_objTableParamObject\"), this.get(\"objDatagridConfig.iPage\"), this.get(\"objDatagridConfig.iPerPage\"), objSuccessCallback, objFailure);\n                    }\n                }\n\n                var objPageQuery = {\n                    page: {\n                        mValue: this.get(\"objDatagridConfig.iPage\")\n                    },\n                    per_page: {\n                        mValue: this.get(\"objDatagridConfig.iPerPage\")\n                    }\n                };\n\n                if (!_bWillDoServiceCallHandled) {\n                    a24RestUrlConstruct.addQueryParamObject(this.get(\"objUrlConstantPart\"));\n                    a24RestUrlConstruct.addQueryParamObject(this.get(\"_objFilterParamObject\"));\n                    a24RestUrlConstruct.addQueryParamObject(this.get(\"_objTableParamObject\"));\n                    a24RestUrlConstruct.addQueryParamObject(objPageQuery);\n\n                    var sUrl = a24RestUrlConstruct.getConstructedUrl();\n\n                    a24RestCallHelper.doRestServiceCall(objController, \"_objUrlCall\", a24RestCallHelper.makeJsonAjaxCall(objController, objController.get(\"_objUserSession\"), objController.get(\"_objNavigation\"), \"GET\", sUrl, objSuccessCallback, objFailure, null, null, null, !objController.get(\"bSwaggerServiceCalls\")));\n                }\n            }\n        },\n        updatePageParamFilter: function updatePageParamFilter() {\n            //If we do not have any query params setup then do not run this function\n            if (a24Core.isEmpty(this.get(\"objQueryParams\")) || a24Core.isEmpty(this.get(\"objQueryParams.page\"))) {\n                return;\n            }\n\n            //Remove the _sPageParam observer while we change it internally\n            this.removeObserver(\"_sPageParam\", this, this.get(\"_funcPageParamChangeCallback\"));\n            this.set(\"_sPageParam\", this.get(\"objDatagridConfig.iPage\").toString());\n            //Update the page query param in the url (the query-param-object-builder observes this and set it separately,\n            //this is a special case since it it not part of/in the filter params/arrHeaderConfig)\n            this.set(\"objQueryParams.page.sValue\", this.get(\"objDatagridConfig.iPage\").toString());\n            // Add _sPageParam query params observer\n            Ember.run.next(this, function () {\n                this.addObserver(\"_sPageParam\", this, this.get(\"_funcPageParamChangeCallback\"));\n            });\n        },\n        cardDatagridFilterInitEventAction: function cardDatagridFilterInitEventAction(objFilterParamObject) {\n            this.set(\"_objFilterParamObject\", objFilterParamObject);\n            if (this.get(\"objDatagridConfig.bEmitInitFilterChangeEvent\")) {\n                if (!a24Core.isEmpty(this.get(\"cardDatagridInitFilterChange\"))) {\n                    this.get(\"cardDatagridInitFilterChange\")(this.get(\"_objFilterParamObject\"));\n                }\n            }\n        },\n        cardDatagridTableInitSortAction: function cardDatagridTableInitSortAction(objTableParamObject) {\n            this.set(\"_objTableParamObject\", objTableParamObject);\n            if (this.get(\"objDatagridConfig.bEmitInitSortColumnEvent\")) {\n                if (!a24Core.isEmpty(this.get(\"cardDatagridTableInitSort\"))) {\n                    this.get(\"cardDatagridTableInitSort\")(objTableParamObject);\n                }\n            }\n        },\n        cardDatagridFilterChangeEventAction: function cardDatagridFilterChangeEventAction(sProperty, objFilterParamObject) {\n            this.set(\"_objFilterParamObject\", objFilterParamObject);\n\n            //If you want to stop the service call and handle it yourself then save the params(or set flag in parent\n            //when this event fires) from this event and use the bEmitWillDoServiceCall and calling the objSuccessCallback\n            //from that event yourself\n            if (this.get(\"objDatagridConfig.bEmitFilterChangeEvent\")) {\n                if (!a24Core.isEmpty(this.get(\"cardDatagridFilterChange\"))) {\n                    this.get(\"cardDatagridFilterChange\")(sProperty, this.get(\"_objFilterParamObject\"));\n                }\n            }\n\n            this.doServiceCall(true);\n            this.setQueryParams();\n        },\n        cardDatagridFilterParamChangeEventAction: function cardDatagridFilterParamChangeEventAction(objFilterParamObject) {\n            this.set(\"_objFilterParamObject\", objFilterParamObject);\n\n            //If you want to stop the service call and handle it yourself then save the params(or set flag in parent\n            //when this event fires) from this event and use the bEmitWillDoServiceCall and calling the objSuccessCallback\n            //from that event yourself\n            if (this.get(\"objDatagridConfig.bEmitFilterChangeEvent\")) {\n                if (!a24Core.isEmpty(this.get(\"cardDatagridFilterChange\"))) {\n                    this.get(\"cardDatagridFilterChange\")(null, this.get(\"_objFilterParamObject\"));\n                }\n            }\n\n            this.doServiceCall(true);\n            this.updatePageParamFilter();\n        },\n        cardDatagridTableSortAction: function cardDatagridTableSortAction(sColumn, objTableParamObject) {\n            this.set(\"bShowSaveAction\", true);\n            this.set(\"_objTableParamObject\", objTableParamObject);\n\n            //If you want to stop the service call and handle it yourself then save the params(or set flag in parent\n            //when this event fires) from this event and use the bEmitWillDoServiceCall and calling the objSuccessCallback\n            //from that event yourself\n            if (this.get(\"objDatagridConfig.bEmitSortColumnEvent\")) {\n                if (!a24Core.isEmpty(this.get(\"cardDatagridTableSort\"))) {\n                    this.get(\"cardDatagridTableSort\")(sColumn, this.get(\"_objTableParamObject\"));\n                }\n            }\n\n            this.doServiceCall(true);\n            this.setQueryParams();\n        },\n        cardDatagridPagerInitEventAction: function cardDatagridPagerInitEventAction(objPageQuery) {\n            if (this.get(\"objDatagridConfig.bEmitPagerInitEvent\")) {\n                if (!a24Core.isEmpty(this.get(\"cardDatagridPagerInitEvent\"))) {\n                    this.get(\"cardDatagridPagerInitEvent\")(objPageQuery);\n                }\n            }\n        },\n        cardDatagridPagerEventAction: function cardDatagridPagerEventAction() {\n            //If you want to stop the service call and handle it yourself then save the params(or set flag in parent\n            //when this event fires) from this event and use the bEmitWillDoServiceCall and calling the objSuccessCallback\n            //from that event yourself\n            if (this.get(\"objDatagridConfig.bEmitPagerEvent\")) {\n                if (!a24Core.isEmpty(this.get(\"cardDatagridPagerEvent\"))) {\n                    //Page and per page is on datagrid config and can be altered there from parent.\n                    this.get(\"cardDatagridPagerEvent\")();\n                }\n            }\n\n            this.doServiceCall(false);\n        },\n        cardDatagridPagerManyClickedAction: function cardDatagridPagerManyClickedAction() {\n            this.set(\"_bPagerLoading\", true);\n            this.set(\"_bManyLabelClicked\", true);\n            if (!a24Core.isEmpty(this.get(\"cardDatagridPagerManyClicked\"))) {\n                this.get(\"cardDatagridPagerManyClicked\")();\n            } else {\n                //todo implement the many clicked\n                this.doServiceCall(false, true);\n            }\n        },\n        cardDatagridTableNoneSelectedAction: function cardDatagridTableNoneSelectedAction() {\n            this.set(\"_arrSelectedItems\", null);\n            this.set(\"bDisableFilterKeyboardShortcuts\", false);\n            if (this.get(\"objDatagridConfig.bEmitSelectRowEvent\")) {\n                if (!a24Core.isEmpty(this.get(\"cardDatagridTableNoneSelected\"))) {\n                    this.get(\"cardDatagridTableNoneSelected\")([]);\n                }\n            }\n        },\n        funcSelectedItemActionFilter: function funcSelectedItemActionFilter(arrItems) {\n            return function (objAction) {\n                return a24Core.isEmpty(objAction.funcFilterFunc) || !a24Core.isEmpty(objAction.funcFilterFunc) && objAction.funcFilterFunc(arrItems);\n            };\n        },\n        _getBaseProprty: function _getBaseProprty(sProp) {\n            var iTripIndex = sProp.indexOf(\"___\");\n            var iDoubleIndex = sProp.indexOf(\"__\");\n\n            if (iTripIndex !== -1 && iDoubleIndex !== -1) {\n                if (iTripIndex < iDoubleIndex) {\n                    return sProp.split(\"___\")[0];\n                } else {\n                    return sProp.split(\"__\")[0];\n                }\n            } else if (iTripIndex !== -1) {\n                return sProp.split(\"___\")[0];\n            } else if (iDoubleIndex !== -1) {\n                return sProp.split(\"__\")[0];\n            } else {\n                return sProp;\n            }\n        },\n        _onProjectionChange: Ember.observer(\"_objProjectionQuery\", function () {\n            if (this.get(\"bAllowHiddenColumnsProjection\")) {\n\n                Ember.run.once(this, \"doServiceCall\");\n            }\n        }),\n        _onDatagridSingleSelectedActionsChange: Ember.observer(\"objDatagridConfig.arrSingleItemSelectActions\", function () {\n            var arrActions = this.get(\"objDatagridConfig.arrSingleItemSelectActions\");\n            var arrSelected = this.get(\"_arrSelectedItems\");\n            if (!a24Core.isEmpty(arrActions) && !a24Core.isEmpty(arrSelected)) {\n                arrActions = arrActions.filter(this.funcSelectedItemActionFilter(arrSelected));\n            }\n            this.set(\"_arrActionItems\", arrActions);\n        }),\n        _onDatagridMultiSelectedActionsChange: Ember.observer(\"objDatagridConfig.arrMultiItemSelectActions\", function () {\n            var arrActions = this.get(\"objDatagridConfig.arrMultiItemSelectActions\");\n            var arrSelected = this.get(\"_arrSelectedItems\");\n            if (!a24Core.isEmpty(arrActions) && !a24Core.isEmpty(arrSelected)) {\n                arrActions = arrActions.filter(this.funcSelectedItemActionFilter(arrSelected));\n            }\n            this.set(\"_arrActionItems\", arrActions);\n        }),\n        cardDatagridTableOneSelectedAction: function cardDatagridTableOneSelectedAction(arrItems) {\n            this.set(\"_arrSelectedItems\", arrItems);\n            this.set(\"bDisableFilterKeyboardShortcuts\", true);\n            var arrActions = this.get(\"objDatagridConfig.arrSingleItemSelectActions\");\n\n            if (!a24Core.isEmpty(arrActions)) {\n                arrActions = arrActions.filter(this.funcSelectedItemActionFilter(arrItems));\n            }\n\n            this.set(\"_arrActionItems\", arrActions);\n            if (this.get(\"objDatagridConfig.bEmitSelectRowEvent\")) {\n                if (!a24Core.isEmpty(this.get(\"cardDatagridTableOneSelected\"))) {\n                    this.get(\"cardDatagridTableOneSelected\")(arrItems);\n                }\n            }\n        },\n        cardDatagridTableMultiSelectedAction: function cardDatagridTableMultiSelectedAction(arrItems) {\n            this.set(\"_arrSelectedItems\", arrItems);\n            this.set(\"bDisableFilterKeyboardShortcuts\", true);\n            var arrActions = this.get(\"objDatagridConfig.arrMultiItemSelectActions\");\n\n            if (!a24Core.isEmpty(arrActions)) {\n                arrActions = arrActions.filter(this.funcSelectedItemActionFilter(arrItems));\n            }\n\n            this.set(\"_arrActionItems\", arrActions);\n            if (this.get(\"objDatagridConfig.bEmitSelectRowEvent\")) {\n                if (!a24Core.isEmpty(this.get(\"cardDatagridTableMultiSelected\"))) {\n                    this.get(\"cardDatagridTableMultiSelected\")(arrItems);\n                }\n            }\n        },\n        cardDatagridTableCellAction: function cardDatagridTableCellAction(sProperty, objRowData) {\n            if (!a24Core.isEmpty(this.get(\"cardDatagridTableCell\"))) {\n                this.get(\"cardDatagridTableCell\")(sProperty, objRowData);\n            }\n        },\n        actions: {\n            cardDatagridFilterDropdownOpenEvent: function cardDatagridFilterDropdownOpenEvent() {\n                this.set(\"bDisableTableKeyboardShortcuts\", true);\n            },\n            cardDatagridFilterDropdownCloseEvent: function cardDatagridFilterDropdownCloseEvent() {\n                this.set(\"bDisableTableKeyboardShortcuts\", false);\n            },\n            cardDatagridFilterInitEvent: function cardDatagridFilterInitEvent(objFilterParamObject) {\n                this.cardDatagridFilterInitEventAction(objFilterParamObject);\n            },\n            cardDatagridTableInitSort: function cardDatagridTableInitSort(objTableParamObject) {\n                this.cardDatagridTableInitSortAction(objTableParamObject);\n            },\n            cardDatagridFilterChangeEvent: function cardDatagridFilterChangeEvent(sProperty, objFilterParamObject) {\n                this.cardDatagridFilterChangeEventAction(sProperty, objFilterParamObject);\n            },\n            cardDatagridFilterParamChangeEvent: function cardDatagridFilterParamChangeEvent(objFilterParamObject) {\n                this.cardDatagridFilterParamChangeEventAction(objFilterParamObject);\n            },\n            cardDatagridTableSort: function cardDatagridTableSort(sColumn, objTableParamObject) {\n                this.cardDatagridTableSortAction(sColumn, objTableParamObject);\n            },\n            cardDatagridPagerInitEvent: function cardDatagridPagerInitEvent(objPageQuery) {\n                this.cardDatagridPagerInitEventAction(objPageQuery);\n            },\n            cardDatagridPagerEvent: function cardDatagridPagerEvent() {\n                this.cardDatagridPagerEventAction();\n            },\n            cardDatagridPagerManyClicked: function cardDatagridPagerManyClicked() {\n                this.cardDatagridPagerManyClickedAction();\n            },\n            cardDatagridTableNoneSelected: function cardDatagridTableNoneSelected() {\n                this.cardDatagridTableNoneSelectedAction();\n            },\n            cardDatagridTableOneSelected: function cardDatagridTableOneSelected(arrItems) {\n                this.cardDatagridTableOneSelectedAction(arrItems);\n            },\n            cardDatagridTableMultiSelected: function cardDatagridTableMultiSelected(arrItems) {\n                this.cardDatagridTableMultiSelectedAction(arrItems);\n            },\n            cardDatagridTableCell: function cardDatagridTableCell(sProperty, objRowData) {\n                this.cardDatagridTableCellAction(sProperty, objRowData);\n            },\n            cardDatagridColumnToggleChangeEvent: function cardDatagridColumnToggleChangeEvent() {\n                this.setQueryParams();\n            },\n            cardDatagridColumnToggleChangeProjectionEvent: function cardDatagridColumnToggleChangeProjectionEvent(arrProjectionData) {\n                var objProjectionQuery = {};\n                for (var i = 0; i < arrProjectionData.length; i++) {\n                    if (arrProjectionData[i].show) {\n                        objProjectionQuery[this._getBaseProprty(arrProjectionData[i].property)] = {\n                            mValue: 1,\n                            bProject: true\n                        };\n                    }\n                }\n\n                var bMatches = a24Core.compareObjects(Ember, objProjectionQuery, this.get(\"_objProjectionQuery\"));\n\n                if (!bMatches) {\n                    this.set(\"_objProjectionQuery\", objProjectionQuery);\n                }\n\n                this.setQueryParams();\n            },\n            cardDatagridReloadButtonClickEvent: function cardDatagridReloadButtonClickEvent() {\n                this.doServiceCall(false);\n            },\n            showAlertAction: function showAlertAction(sText, sSeverity) {\n                this.set(\"_iShowAlertTrigger\", Math.random());\n                this.set(\"_sAlertText\", sText);\n                this.set(\"_sAlertSeverity\", sSeverity);\n                this.set(\"_bShowAlert\", true);\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/card-datagrid-filter\", [\"exports\", \"a24-ember-lib/templates/components/card-datagrid-filter\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _cardDatagridFilter, _didRenderChangesMixin, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n    var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n        return typeof obj;\n    } : function (obj) {\n        return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _cardDatagridFilter.default,\n        bDisableKeyboardShortcuts: false,\n        sDatagridHeader: null,\n        arrHeaderConfig: null,\n        objHeaderSecondaries: null,\n        objReactFilterExtraData: null,\n        bHasFilterApplied: false,\n        bShowShareButton: false,\n        bShareableLink: false,\n        bShowColumnToggles: false,\n        bCustomiseColumns: false,\n        bCustomiseColumnsProjection: false,\n        arrAllowedHeaders: null,\n        arrCustomActions: null,\n        arrExtraActions: null,\n        bHasReloadButton: false,\n        bShowSaveAction: true,\n        objSavedSearchService: null,\n        sSavedSearchRef: null,\n        bSavedSearchShowActions: true,\n        sReactIFrameUrl: null,\n        iVisibleActions: 0,\n        _objUtilsService: Ember.inject.service(\"ss-utils\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objFilterService: Ember.inject.service(\"card-datagrid-filter\"),\n        _objStringsEmberLibService: Ember.inject.service(\"a24-strings-ember-lib\"),\n        _objEnumEmberLibService: Ember.inject.service(\"a24-enums-ember-lib\"),\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objQueryParamObject: null,\n        _sFilterButtonText: null,\n        _sFilterHeaderText: null,\n        _sFilterOptionPrompt: null,\n        _sEmptyOnlyText: null,\n        _sFilterAddButtonText: null,\n        _sFilterDateFrom: null,\n        _sFilterDateTo: null,\n        _funcKeyDown: null,\n        _sIsLabel: null,\n        _sIsInLabel: null,\n        _sFilterOptionsButtonId: null,\n        _sFilterOptionsDropdownId: null,\n        _sFilterOptionsContainerId: null,\n        _sFilterOptionsTextId: null,\n        _sFilterOptionsPopupId: null,\n        _sQueryTypeOptionPrompt: null,\n        _bDisplayFilterChoices: false,\n        _objSelectedFilterOption: null,\n        _arrCustomObservers: null,\n        _arrQueryType: null,\n        _objSelectedQueryType: null,\n        _bShowSelectedQueryType: false,\n        _bShowAddOrQuestion: false,\n        _bShowSecondaryFilters: true,\n        _bAndOrQuestionAnd: false,\n        _bAndOrQuestionOr: false,\n        _bEmptyEntriesOnly: false,\n        _bCustomFilter: false,\n        _bTextFilter: false,\n        _bBoolFilter: false,\n        _bDropDownFilter: false,\n        _bDropDownMultiFilter: false,\n        _bDateFilter: false,\n        _bDateTimeFilter: false,\n        _bSuggestFilter: true,\n\n        _bFromTagClick: false,\n\n        _arrDateFilterData: null,\n        _sFromDate: \"\",\n        _sToDate: \"\",\n        _sFromTime: \"\",\n        _sToTime: \"\",\n        _bCheckForCustomDate: true,\n        _sFilterValue: null,\n        _objFilterValue: null,\n        _arrFilterValue: null,\n        _sFilterInputPlaceHolder: null,\n        _arrFilterInputArray: null,\n        _iAdvanceFilterEdit: null,\n        _bDisplayAddButton: false,\n        _sTagButtonStyle: \".chip\",\n        _bSecondariesValid: true,\n        _iFilterValue: null,\n        _iFilterValueTo: null,\n        _objBetweenOption: null,\n\n        _bShowReactFilterIframe: false,\n        _mFilterValueReact: null,\n        _bReactFilterPopupLoading: true,\n        _objReactPopupPostData: null,\n        _funcSortFilterOptions: null,\n\n        _funcFilterValuesObserverCallback: function _funcFilterValuesObserverCallback() {\n            Ember.run.once(this, this.setHeaderQueryParamObjects);\n        },\n\n        _bShowSavedSearch: Ember.computed(\"objSavedSearchService\", \"sSavedSearchRef\", function () {\n            if (!a24Core.isEmpty(this.get(\"objSavedSearchService\")) && !a24Core.isEmpty(this.get(\"sSavedSearchRef\"))) {\n                return true;\n            }\n            return false;\n        }).readOnly(),\n        _showSecondaryFilters: Ember.observer(\"_objSelectedQueryType\", function () {\n            //If this observer is firing it means it is advance filter and thus the Empty entries checkbox will be hidden\n            //So we can manually control the _bEmptyEntriesOnly without worry about user changing it\n            var bDisplaySecondaries = true;\n            var bEmptyEntriesOnly = false;\n            if (this.get(\"_objSelectedQueryType.sValue\") === this.get(\"_objEnumEmberLibService.filterOptionsType.IS_NOT.backend\")) {\n                bDisplaySecondaries = false;\n            }\n            if (this.get(\"_objSelectedQueryType.sValue\") === this.get(\"_objLibConstants\").CARD_DATAGRID_FILTER_QUERY_TYPE_EMPTY) {\n                bDisplaySecondaries = false;\n                bEmptyEntriesOnly = true;\n            }\n\n            this.set(\"_bEmptyEntriesOnly\", bEmptyEntriesOnly);\n            this.set(\"_bShowSecondaryFilters\", bDisplaySecondaries);\n        }),\n        _setDateFilterFields: Ember.observer(\"_objFilterValue\", function () {\n            var _this = this;\n\n            if (this.get(\"_bDateFilter\")) {\n                if (a24Core.isEmpty(this.get(\"_objFilterValue\")) || a24Core.isEmpty(this.get(\"_objFilterValue\").sValue)) {\n                    this.set(\"_sFromDate\", \"\");\n                    this.set(\"_sToDate\", \"\");\n                    //Only needed to clear these values here since the inputs wont be on screen\n                    this.set(\"_sFromTime\", \"\");\n                    this.set(\"_sToTime\", \"\");\n                    return;\n                }\n                var sDateOption = this.get(\"_objFilterValue\").sValue;\n                var iFilterValue = this.get(\"_iFilterValue\");\n                var iFilterValueTo = this.get(\"_iFilterValueTo\");\n\n                this.set(\"_sFilterValue\", sDateOption);\n\n                var objToAndFromDate = this.get(\"_objFilterService\").getDateFromAndToValues(sDateOption, iFilterValue, iFilterValueTo);\n                if (objToAndFromDate.bCustomRange) {\n                    //We do not want to change the dates since the user could be altering a previous choice\n                    return;\n                } else {\n                    this.set(\"_bCheckForCustomDate\", false);\n                    this.set(\"_sFromDate\", objToAndFromDate.sFromDate);\n                    this.set(\"_sToDate\", objToAndFromDate.sToDate);\n                    if (this.get(\"_bDateTimeFilter\")) {\n                        Ember.run.next(function () {\n                            Ember.run.schedule(\"afterRender\", function () {\n                                if (!a24Core.isEmpty(_this.get(\"objChildren.sDateTimeFrom\"))) {\n                                    _this.get(\"objChildren.sDateTimeFrom\").setValueFromOutside(objToAndFromDate.sFromTime);\n                                }\n                                if (!a24Core.isEmpty(_this.get(\"objChildren.sDateTimeTo\"))) {\n                                    _this.get(\"objChildren.sDateTimeTo\").setValueFromOutside(objToAndFromDate.sToTime);\n                                }\n                                _this.set(\"_bCheckForCustomDate\", true);\n                            });\n                        });\n                    } else {\n                        this.set(\"_bCheckForCustomDate\", true);\n                    }\n                }\n            } else if (this.get(\"_bBoolFilter\") || this.get(\"_bDropDownFilter\")) {\n                this.set(\"_sFilterValue\", this.get(\"_objFilterValue.sValue\"));\n            } else if (this.get(\"_bSuggestFilter\")) {\n                if (a24Core.isEmpty(this.get(\"_objFilterValue.\" + this.get(\"_objSelectedFilterOption.sFilterOptionsValueKey\")))) {\n                    this.set(\"_sFilterValue\", \"\");\n                } else {\n                    this.set(\"_sFilterValue\", this.get(\"_objFilterValue.\" + this.get(\"_objSelectedFilterOption.sFilterOptionsValueKey\")) + \"||\" + this.get(\"_objFilterValue.\" + this.get(\"_objSelectedFilterOption.sFilterOptionsLabelKey\")));\n                }\n            }\n        }),\n        _setMultiSelectFilterFields: Ember.observer(\"_arrFilterValue\", function () {\n            if (this.get(\"_bDropDownMultiFilter\")) {\n                this._setDisplayAddButton();\n                var arrItems = this.get(\"_arrFilterValue\");\n                var arrStatuses = [];\n                if (!a24Core.isEmpty(arrItems)) {\n                    for (var i = 0; i < arrItems.length; i++) {\n                        arrStatuses.push(arrItems[i].sValue);\n                    }\n                }\n                var sQuery = arrStatuses.join(\"|\");\n                if (a24Core.isEmpty(sQuery.trim())) {\n                    sQuery = null;\n                }\n                this.set(\"_sFilterValue\", sQuery);\n            }\n        }),\n        _setFormInputsForEmptyReset: Ember.observer(\"_bEmptyEntriesOnly\", function () {\n            //Reset the values on form input when displayed again\n            if (this.get(\"_bSuggestFilter\")) {\n                //can add more types here as we add more form inputs\n                if (!this.get(\"_bEmptyEntriesOnly\")) {\n                    this.setFilterValue(this.get(\"_sFilterValue\"), this.get(\"_objSelectedFilterOption.sFilterType\"), this.get(\"_objSelectedFilterOption.sFilterFromValue\"), this.get(\"_objSelectedFilterOption.sFilterToValue\"), this.get(\"_objSelectedFilterOption.arrMappingData\"), false, this.get(\"_objSelectedFilterOption.bFilterAllowTime\"));\n                }\n            }\n        }),\n        _setDisplayAddButton: Ember.observer(\"_sFilterValue\", \"_bEmptyEntriesOnly\", \"_sFromDate\", \"_sToDate\", \"_sFromTime\", \"_sToTime\", function () {\n            //Check if any of the secondaries want to know when the primary value changes\n            if (!this.get(\"_bFromTagClick\")) {\n                var arrSecondaries = this.get(\"objHeaderSecondaries.arrFilterSecondary_\" + this.get(\"_objSelectedFilterOption.sProperty\"));\n                if (!a24Core.isEmpty(arrSecondaries)) {\n                    for (var j = 0; j < arrSecondaries.length; j++) {\n                        var bDoValidate = false;\n                        if (!a24Core.isEmpty(arrSecondaries[j].funcFilterPrimaryChange)) {\n                            arrSecondaries[j].funcFilterPrimaryChange(this.get(\"_sFilterValue\"), this.get(\"_objSelectedFilterOption\"), arrSecondaries[j]);\n\n                            //Some of the secondary options or values might have changed so we need to re-setup the item\n                            this._funcSetupOrResetSecondaryFilter(arrSecondaries[j]);\n                            bDoValidate = true;\n                        }\n\n                        //Some of the secondaries could have changed validation so we need to run validation again to check if\n                        //all is still valid.\n                        if (bDoValidate) {\n                            this._funcSecondariesObserver();\n                        }\n                    }\n                }\n            }\n\n            //We only display the add filter button if the empty entries only checkbox is selected or if we have\n            //a value for the filter. In the date filter case we check that either to or from has a value\n            if (this.get(\"_bDateFilter\")) {\n                if (this.get(\"_bEmptyEntriesOnly\") || !a24Core.isEmpty(this.get(\"_sFromDate\")) || !a24Core.isEmpty(this.get(\"_sToDate\")) || this.get(\"_sFilterValue\") === this.get(\"_objEnumEmberLibService.dateFilterOptionsNotEmpty.DATE_FILTER_NOT_EMPTY.backend\")) {\n                    var sFromValue = this.get(\"_sFromDate\");\n                    var sToValue = this.get(\"_sToDate\");\n                    var sFormat = this.get(\"_objLibConstants.DATE_FORMAT\");\n                    if (this.get(\"_bDateTimeFilter\") && !a24Core.isEmpty(this.get(\"_sFromTime\")) && !a24Core.isEmpty(this.get(\"_sToTime\"))) {\n                        sFromValue = sFromValue + \" \" + this.get(\"_sFromTime\");\n                        sToValue = sToValue + \" \" + this.get(\"_sToTime\");\n                        sFormat = this.get(\"_objLibConstants.DATE_TIME_FORMAT\");\n                    }\n\n                    var objFromDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n                    objFromDate.setDateFromBrowser(sFromValue, sFormat);\n\n                    var objToDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n                    objToDate.setDateFromBrowser(sToValue, sFormat);\n                    if (!a24Core.isEmpty(this.get(\"_sFromDate\")) && !a24Core.isEmpty(this.get(\"_sToDate\")) && objToDate.isBefore(objFromDate)) {\n                        this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsService\").getTokenString(\"validationDateBefore\", \"To Date\", \"From Date\"));\n                        this.set(\"_bDisplayAddButton\", false);\n                        return;\n                    }\n                    this.set(\"_bDisplayAddButton\", true);\n                    return;\n                }\n            } else if (this.get(\"_bDropDownMultiFilter\")) {\n                var arrItems = this.get(\"_arrFilterValue\");\n                var bShowButton = arrItems.length > 0;\n                for (var i = 0; i < arrItems.length; i++) {\n                    if (a24Core.isEmpty(arrItems[i])) {\n                        bShowButton = false;\n                        break;\n                    }\n                }\n                if (bShowButton || this.get(\"_bEmptyEntriesOnly\")) {\n                    this.set(\"_bDisplayAddButton\", true);\n                    return;\n                }\n            } else {\n                if (this.get(\"_bEmptyEntriesOnly\") || !a24Core.isEmpty(this.get(\"_sFilterValue\"))) {\n                    this.set(\"_bDisplayAddButton\", true);\n                    return;\n                }\n            }\n            this.set(\"_bDisplayAddButton\", false);\n        }),\n        _setFilterInput: Ember.observer(\"_objSelectedFilterOption\", function () {\n            //Rest the filter value when the selected filter option changes.\n            this.resetFilterBools();\n            this._setFilterInputChoices();\n        }),\n        _setFilterInputChoices: function _setFilterInputChoices() {\n            var _this2 = this;\n\n            var objSelectedFilterOption = this.get(\"_objSelectedFilterOption\");\n\n            //If null if means that the filter is closed then don't set any filter things\n            if (a24Core.isEmpty(objSelectedFilterOption)) {\n                return;\n            }\n\n            if (!a24Core.isEmpty(objSelectedFilterOption.sReactFilterRoute)) {\n                this.set(\"_bDisplayFilterChoices\", false);\n                this.set(\"_bHideEmptyCheck\", true);\n                this.set(\"_bShowReactFilterIframe\", true);\n\n                var arrSecondaries = this.get(\"objHeaderSecondaries.arrFilterSecondary_\" + objSelectedFilterOption.sProperty);\n\n                var objRouteData = {};\n                var objPrimaryFilter = {};\n                var arrPropCloneSkip = [];\n                if (!a24Core.isEmpty(objSelectedFilterOption.arrReactPropCloneSkip)) {\n                    arrPropCloneSkip = Ember.copy(objSelectedFilterOption.arrReactPropCloneSkip);\n                }\n\n                // Automatically add the ones we know should be skipped\n                arrPropCloneSkip.push(\"arrReactPropCloneSkip\");\n                arrPropCloneSkip.push(\"sFilterCustomComponentName\");\n                arrPropCloneSkip.push(\"objFilterCustomService\");\n                arrPropCloneSkip.push(\"funcTableCustomVal\");\n                arrPropCloneSkip.push(\"funcFilterParseQueryValue\");\n                arrPropCloneSkip.push(\"funcFilterParseFilterValue\");\n\n                Object.keys(objSelectedFilterOption).forEach(function (sKey) {\n                    if (arrPropCloneSkip.indexOf(sKey) === -1) {\n                        objPrimaryFilter[sKey] = Ember.copy(objSelectedFilterOption[sKey], true);\n                    }\n                });\n\n                objRouteData.primary_filter = objPrimaryFilter;\n                if (!a24Core.isEmpty(arrSecondaries)) {\n                    var objSecondaryFilters = Ember.copy(arrSecondaries, true);\n                    objRouteData.secondary_filters = objSecondaryFilters;\n                }\n                if (!a24Core.isEmpty(objSelectedFilterOption.arrReactFilterExtraDataProps)) {\n                    for (var i = 0; i < objSelectedFilterOption.arrReactFilterExtraDataProps.length; i++) {\n                        var objExtraData = Ember.copy(this.get(\"objReactFilterExtraData.\" + objSelectedFilterOption.arrReactFilterExtraDataProps[i]), true);\n\n                        objRouteData[objSelectedFilterOption.arrReactFilterExtraDataProps[i]] = objExtraData;\n                    }\n                }\n\n                //The react popup already checks if there was data set when it does app_ready and then posts it, so no\n                //need to worry about iframe being ready\n                this.set(\"_objReactPopupPostData\", {\n                    type: \"trigger_route\",\n                    data: {\n                        route: objSelectedFilterOption.sReactFilterRoute,\n                        data: objRouteData\n                    }\n                });\n\n                return;\n            }\n\n            //Set the correct bool flag based on the filter type\n            //You might note that we use a sFilterType for the type and not send in bBool, bText etc like on the card\n            //datagrid table this is because we could potentially have different filters for the same column type e.g\n            //date could be a dropdown filter or a datepicker filter. Having the components share the bool flags would\n            //complicate things later.\n            var sFilterType = objSelectedFilterOption.sFilterType;\n            this.set(\"_bHideEmptyCheck\", objSelectedFilterOption.bHideEmptyCheck);\n            //Hide or show the more query options depending if filter supports advance things\n            if (objSelectedFilterOption.bFilterAnd || objSelectedFilterOption.bFilterOr || objSelectedFilterOption.bFilterSecondary) {\n                //For now we for hide the empty checks for advance type filters because of the complexity this brings to\n                //the queries. For instance Empty Entries on policies___type_id would give you all policies where type id\n                //is empty, but the way the user read the filter he would expect to get all users that have NO policies at\n                //all.\n                this.set(\"_bHideEmptyCheck\", true);\n\n                if (!objSelectedFilterOption.bFilterHideMoreQueryTypes) {\n                    this.set(\"_bShowSelectedQueryType\", true);\n                }\n\n                if (!this.get(\"_bAndOrQuestionAnd\") && !this.get(\"_bAndOrQuestionOr\") && !a24Core.isEmpty(objSelectedFilterOption.mFilterValue) && (objSelectedFilterOption.bFilterAnd || objSelectedFilterOption.bFilterOr)) {\n                    this.set(\"_bShowAddOrQuestion\", true);\n                }\n            } else {\n                this.set(\"_bShowSelectedQueryType\", false);\n            }\n\n            this.set(\"_sIsLabel\", this.get(\"_objStringsService\").getString(\"is\") + \":\");\n            this.set(\"_sIsInLabel\", this.get(\"_objStringsService\").getString(\"isIn\") + \":\");\n            this.set(\"_sFilterInputPlaceHolder\", this.get(\"_objStringsService\").getString(\"selectValue\") + \"...\");\n\n            if (!objSelectedFilterOption.bFilterHideMoreQueryTypes && (objSelectedFilterOption.bFilterAnd || objSelectedFilterOption.bFilterOr || objSelectedFilterOption.bFilterSecondary)) {\n                this.set(\"_sIsLabel\", \"\");\n\n                //NOTE for now we will NOT suport multi select when we have advance query like\n                //bFilterAnd or bFilterOr or bFilterSecondary, but putting this dropdown label to empty aswell for\n                //when we do\n                this.set(\"_sIsInLabel\", \"\");\n            }\n\n            var arrQueryType = [];\n            if (a24Core.isEmpty(objSelectedFilterOption.arrQueryType)) {\n                //\"Is\" is the default value so it is not part of the enums\n                this.set(\"_sQueryTypeOptionPrompt\", this.get(\"_objStringsService\").getString(\"is\"));\n                arrQueryType = this.get(\"_objEnumEmberLibService\").getList(\"filterOptionsType\");\n            } else {\n                this.set(\"_sQueryTypeOptionPrompt\", objSelectedFilterOption.arrQueryType[0].sLabel);\n                arrQueryType = objSelectedFilterOption.arrQueryType.slice(1);\n            }\n\n            if (\"text\" === sFilterType) {\n                if (a24Core.isEmpty(objSelectedFilterOption.arrQueryType)) {\n                    this.set(\"_sQueryTypeOptionPrompt\", this.get(\"_objStringsService\").getString(\"contains\"));\n                    //\"Contains\" is the default value for advanced text filters so it is not part of the enums\n                    arrQueryType = this.get(\"_objEnumEmberLibService\").getList(\"filterOptionsTextType\");\n                }\n\n                this.set(\"_sFilterInputPlaceHolder\", this.get(\"_objStringsService\").getString(\"enterValue\") + \"...\");\n                this.set(\"_bTextFilter\", true);\n            } else if (\"bool\" === sFilterType) {\n                this.set(\"_arrFilterInputArray\", objSelectedFilterOption.arrMappingData);\n                this.set(\"_bBoolFilter\", true);\n            } else if (\"dropdown\" === sFilterType) {\n                this.set(\"_arrFilterInputArray\", objSelectedFilterOption.arrMappingData);\n                this.set(\"_bDropDownFilter\", true);\n            } else if (\"dropdownMulti\" === sFilterType) {\n                this.set(\"_arrFilterInputArray\", objSelectedFilterOption.arrMappingData);\n                this.set(\"_bDropDownMultiFilter\", true);\n                this._setDisplayAddButton();\n            } else if (\"date\" === sFilterType) {\n                this.set(\"_arrFilterBetweenArray\", [{\n                    sTitle: this.get(\"_objStringsService\").getString(\"ago\"),\n                    sValue: \"ago\"\n                }, {\n                    sTitle: this.get(\"_objStringsService\").getString(\"fromToday\"),\n                    sValue: \"fromToday\"\n                }]);\n                if (!a24Core.isEmpty(objSelectedFilterOption.arrMappingData)) {\n                    this.set(\"_arrFilterInputArray\", objSelectedFilterOption.arrMappingData);\n                } else {\n                    this.set(\"_arrFilterInputArray\", this.get(\"_arrDateFilterData\"));\n                }\n                this.set(\"_bDateFilter\", true);\n                this.set(\"_bDateTimeFilter\", objSelectedFilterOption.bFilterAllowTime);\n            } else if (\"suggest\" === sFilterType) {\n                this.set(\"_sFilterInputPlaceHolder\", this.get(\"_objStringsService\").getString(\"enterValue\") + \"...\");\n                this.set(\"_bSuggestFilter\", true);\n            } else if (\"custom\" === sFilterType) {\n                this.set(\"_bCustomFilter\", true);\n                this.set(\"_bHideEmptyCheck\", true); //custom items need to handle empty entries on their own\n                this.set(\"_bShowSelectedQueryType\", false);\n            }\n\n            var arrQueryTypeDropdown = [];\n            for (var _i = 0; _i < arrQueryType.length; _i++) {\n                arrQueryTypeDropdown.push({\n                    sTitle: arrQueryType[_i].sLabel,\n                    sValue: arrQueryType[_i].sValue\n                });\n            }\n            this.set(\"_arrQueryType\", arrQueryTypeDropdown);\n\n            var objThis = this;\n\n            //One next to allow time to draw a dropdown if filter has one\n            Ember.run.next(function () {\n                //Another next to first let mdb finish initing a dropdown if filter has one\n                Ember.run.next(function () {\n                    //Now we should be all good to focus any input that was rendered for the filter option\n                    Ember.run.schedule(\"afterRender\", function () {\n                        //Add enter event listener to filter option input and also focus field if it\n                        //exists\n\n                        var objOptionsInputItem = _this2.$(\"#\" + _this2.get(\"_sFilterOptionsContainerId\") + \" input\");\n                        if (!a24Core.isEmpty(objOptionsInputItem)) {\n                            //Add enter key listener to input\n                            objOptionsInputItem.on(\"keydown\", function (objEvent) {\n                                if (objEvent.keyCode === 13 && objThis.get(\"_bDisplayAddButton\") && a24Core.isEmpty($(objThis.$(\".multiple-select-dropdown.active\")))) {\n                                    //Because this is inside jQuery callback add it in Ember run\n                                    Ember.run(function () {\n                                        objThis.addFilter(false, false);\n                                    });\n                                }\n                            });\n                            if (a24Core.isEmpty(_this2.get(\"_iAdvanceFilterEdit\"))) {\n                                //Focus the input\n                                objOptionsInputItem.first().focus();\n                            }\n                        }\n                    });\n                });\n            });\n        },\n        init: function init() {\n            var _this3 = this;\n\n            this._super.apply(this, arguments);\n            var objThis = this;\n\n            this.set(\"_sFilterButtonText\", this.get(\"_objStringsService\").getString(\"filterResults\"));\n            this.set(\"_sFilterHeaderText\", this.get(\"_objStringsService\").getString(\"showAllResultsWhere\") + \":\");\n            this.set(\"_sFilterOptionPrompt\", this.get(\"_objStringsService\").getString(\"selectFilter\") + \"...\");\n            this.set(\"_sEmptyOnlyText\", this.get(\"_objStringsService\").getString(\"emptyEntries\"));\n            this.set(\"_sFilterAddButtonText\", this.get(\"_objStringsService\").getString(\"addFilter\"));\n            this.set(\"_sFilterUpdateButtonText\", this.get(\"_objStringsEmberLibService\").getString(\"updateFilter\"));\n            this.set(\"_sFilterDateFrom\", this.get(\"_objStringsService\").getString(\"from\") + \":\");\n            this.set(\"_sFilterDateTo\", this.get(\"_objStringsService\").getString(\"to\") + \":\");\n            this.set(\"_sIsLabel\", this.get(\"_objStringsService\").getString(\"is\") + \":\");\n            this.set(\"_sIsInLabel\", this.get(\"_objStringsService\").getString(\"isIn\") + \":\");\n\n            this.set(\"_funcSortFilterOptions\", function (arrData) {\n                if ((typeof arrData === \"undefined\" ? \"undefined\" : _typeof(arrData)) === \"object\") {\n                    return objThis.get(\"_objUtilsService\").sortObjectArrayOnText(arrData, \"sTitle\", true);\n                } else {\n                    return arrData;\n                }\n            });\n\n            var arrDateFilterDataEnum = this.get(\"_objEnumEmberLibService\").getList(\"dateFilterOptions\");\n            var arrDateFilterData = [];\n            for (var _i2 = 0; _i2 < arrDateFilterDataEnum.length; _i2++) {\n                arrDateFilterData.push({\n                    sTitle: arrDateFilterDataEnum[_i2].sLabel,\n                    sValue: arrDateFilterDataEnum[_i2].sValue\n                });\n            }\n            this.set(\"_arrDateFilterData\", arrDateFilterData);\n\n            this.set(\"_sFilterOptionsButtonId\", Ember.guidFor({}));\n            this.set(\"_sFilterOptionsDropdownId\", Ember.guidFor({}));\n            this.set(\"_sFilterOptionsContainerId\", Ember.guidFor({}));\n            this.set(\"_sFilterOptionsTextId\", Ember.guidFor({}));\n            this.set(\"_sFilterOptionsPopupId\", Ember.guidFor({}));\n\n            this.set(\"_arrCustomObservers\", []);\n\n            if (a24Core.isEmpty(this.get(\"_arrFilterValue\"))) {\n                this.set(\"_arrFilterValue\", []);\n            }\n            if (a24Core.isEmpty(this.get(\"_arrFilterInputArray\"))) {\n                this.set(\"_arrFilterInputArray\", []);\n            }\n\n            //Set _objQueryParamObject to empty object if empty.\n            if (a24Core.isEmpty(this.get(\"_objQueryParamObject\"))) {\n                this.set(\"_objQueryParamObject\", {});\n            }\n\n            //Set up the initial _objQueryParamObject\n            var arrHeaderConfig = this.get(\"arrHeaderConfig\");\n            if (!a24Core.isEmpty(arrHeaderConfig)) {\n                for (var i = 0; i < arrHeaderConfig.length; i++) {\n                    this.setupOrResetSecondaryFilters(arrHeaderConfig[i]);\n\n                    if (!a24Core.isEmpty(arrHeaderConfig[i].sFilterValue)) {\n                        this.setHeaderQueryParamObject(arrHeaderConfig[i]);\n                    } else if (!a24Core.isEmpty(arrHeaderConfig[i].mFilterValue)) {\n                        this.get(\"_objFilterService\").fixupAdvanceQueryValues(arrHeaderConfig[i], this.get(\"objHeaderSecondaries\"));\n                        this.setHeaderQueryParamObject(arrHeaderConfig[i]);\n                    }\n                }\n            }\n\n            this.addObserver(\"arrHeaderConfig.@each.sFilterValue\", this, this.get(\"_funcFilterValuesObserverCallback\"));\n            this.addObserver(\"arrHeaderConfig.@each.mFilterValue\", this, this.get(\"_funcFilterValuesObserverCallback\"));\n\n            if (!a24Core.isEmpty(this.get(\"cardDatagridFilterInitEvent\"))) {\n                this.get(\"cardDatagridFilterInitEvent\")(Ember.copy(this.get(\"_objQueryParamObject\"), true));\n            }\n\n            Ember.run.schedule(\"afterRender\", function () {\n                var funcKeyDown = function funcKeyDown(objEvent) {\n                    Ember.run(function () {\n                        if (objEvent.keyCode === 70 && !objThis.get(\"_bDisplayFilterChoices\") && !objThis.get(\"bDisableKeyboardShortcuts\") && !Ember.$(\"body\").hasClass(\"modal-open\") && objEvent.target.nodeName !== \"INPUT\" && objEvent.target.nodeName !== \"TEXTAREA\") {\n                            objThis.filterOptionButtonClick(true);\n                        }\n                    });\n                };\n\n                _this3.set(\"_funcKeyDown\", funcKeyDown);\n\n                Ember.$(window).on(\"keydown\", _this3.get(\"_funcKeyDown\"));\n            });\n        },\n        willDestroyElement: function willDestroyElement() {\n            //Remove all custom added observers\n            var arrObservers = this.get(\"_arrCustomObservers\");\n            for (var i = 0; i < arrObservers.length; i++) {\n                Ember.removeObserver(arrObservers[i].objSubject, arrObservers[i].sProperty, arrObservers[i].objContext, arrObservers[i].funcCallback);\n            }\n\n            Ember.$(window).off(\"keydown\", this.get(\"_funcKeyDown\"));\n\n            this._super.apply(this, arguments);\n        },\n        onInputValueChanged: function onInputValueChanged(arrChildRef) {\n            //Only update the value if the not empty entries else the _objFilterValue will go to null when empty entries\n            //hides it, we want the value to presist so that unchecking empty entries will show previous value.\n            if (!this.get(\"_bEmptyEntriesOnly\")) {\n                var sLookup = arrChildRef.join(\".\");\n                if (sLookup === \"objChildren.sSuggestInput\") {\n                    this.set(\"_objFilterValue\", this.get(sLookup + \".mValue\"));\n                } else if (sLookup === \"objChildren.sDateTimeFrom\") {\n                    this.set(\"_sFromTime\", this.get(sLookup + \".mValue\"));\n                } else if (sLookup === \"objChildren.sDateTimeTo\") {\n                    this.set(\"_sToTime\", this.get(sLookup + \".mValue\"));\n                }\n            }\n        },\n        setupOrResetSecondaryFilters: function setupOrResetSecondaryFilters(objHeader) {\n            if (Ember.get(objHeader, \"bFilterSecondary\") !== true) {\n                return;\n            }\n\n            Ember.addObserver(this, \"_objSelectedQueryType\", this, this._funcSecondariesObserver);\n\n            this.get(\"_arrCustomObservers\").pushObject({\n                objSubject: this,\n                sProperty: \"_objSelectedQueryType\",\n                objContext: this,\n                funcCallback: this._funcSecondariesObserver\n            });\n\n            var arrSecondaries = this.get(\"objHeaderSecondaries.arrFilterSecondary_\" + objHeader.sProperty);\n            for (var i = 0; i < arrSecondaries.length; i++) {\n                this._funcSetupOrResetSecondaryFilter(arrSecondaries[i]);\n            }\n            this._funcSecondariesObserver();\n        },\n        _funcSetupOrResetSecondaryFilter: function _funcSetupOrResetSecondaryFilter(objSecondary) {\n            var _this4 = this;\n\n            Ember.set(objSecondary, \"_bEmptyEntriesOnly\", false);\n\n            if (objSecondary.bFilterRequired) {\n                Ember.set(objSecondary, \"_sFilterPrompt\", this.get(\"_objStringsService\").getString(\"selectValue\") + \"...\");\n            } else {\n                Ember.set(objSecondary, \"_sFilterPrompt\", this.get(\"_objStringsService\").getString(\"any\"));\n            }\n            if (Ember.get(objSecondary, \"sFilterType\") === \"int\") {\n                Ember.set(objSecondary, \"_bIntFilter\", true);\n                Ember.set(objSecondary, \"_iFilterValue\", null);\n                Ember.set(objSecondary, \"_objFilterValue\", null);\n                if (a24Core.isEmpty(Ember.get(objSecondary, \"arrMappingData\"))) {\n                    //\"Any\" is the default value so it is not part of the enums\n                    var arrIntOptions = this.get(\"_objEnumEmberLibService\").getList(\"intFilterOptions\");\n                    var arrIntOptionsDropdown = [];\n                    for (var l = 0; l < arrIntOptions.length; l++) {\n                        arrIntOptionsDropdown.push({\n                            sTitle: arrIntOptions[l].sLabel,\n                            sValue: arrIntOptions[l].sValue\n                        });\n                    }\n\n                    Ember.set(objSecondary, \"arrMappingData\", arrIntOptionsDropdown);\n                }\n\n                if (!Ember.get(objSecondary, \"_bObserverObjFilterValueSet\")) {\n                    Ember.addObserver(objSecondary, \"_iFilterValue\", this, this._funcSecondariesObserver);\n                    Ember.addObserver(objSecondary, \"_objFilterValue\", this, this._funcSecondariesObserver);\n                    Ember.addObserver(objSecondary, \"_bEmptyEntriesOnly\", this, this._funcSecondariesObserver);\n\n                    this.get(\"_arrCustomObservers\").pushObject({\n                        objSubject: objSecondary,\n                        sProperty: \"_objFilterValue\",\n                        objContext: this,\n                        funcCallback: this._funcSecondariesObserver\n                    });\n                    this.get(\"_arrCustomObservers\").pushObject({\n                        objSubject: objSecondary,\n                        sProperty: \"_iFilterValue\",\n                        objContext: this,\n                        funcCallback: this._funcSecondariesObserver\n                    });\n                    this.get(\"_arrCustomObservers\").pushObject({\n                        objSubject: objSecondary,\n                        sProperty: \"_bEmptyEntriesOnly\",\n                        objContext: this,\n                        funcCallback: this._funcSecondariesObserver\n                    });\n\n                    Ember.set(objSecondary, \"_bObserverObjFilterValueSet\", true);\n                }\n            } else if (Ember.get(objSecondary, \"sFilterType\") === \"text\") {\n                Ember.set(objSecondary, \"_bTextFilter\", true);\n                Ember.set(objSecondary, \"_sFilterValue\", null);\n                if (!Ember.get(objSecondary, \"_bObserverObjFilterValueSet\")) {\n                    Ember.addObserver(objSecondary, \"_sFilterValue\", this, this._funcSecondariesObserver);\n                    Ember.addObserver(objSecondary, \"_bEmptyEntriesOnly\", this, this._funcSecondariesObserver);\n\n                    this.get(\"_arrCustomObservers\").pushObject({\n                        objSubject: objSecondary,\n                        sProperty: \"_sFilterValue\",\n                        objContext: this,\n                        funcCallback: this._funcSecondariesObserver\n                    });\n                    this.get(\"_arrCustomObservers\").pushObject({\n                        objSubject: objSecondary,\n                        sProperty: \"_bEmptyEntriesOnly\",\n                        objContext: this,\n                        funcCallback: this._funcSecondariesObserver\n                    });\n\n                    Ember.set(objSecondary, \"_bObserverObjFilterValueSet\", true);\n                }\n            } else if (Ember.get(objSecondary, \"sFilterType\") === \"bool\") {\n                Ember.set(objSecondary, \"_bBoolFilter\", true);\n                Ember.set(objSecondary, \"_objFilterValue\", null);\n                if (!Ember.get(objSecondary, \"_bObserverObjFilterValueSet\")) {\n                    Ember.addObserver(objSecondary, \"_objFilterValue\", this, this._funcSecondariesObserver);\n                    Ember.addObserver(objSecondary, \"_bEmptyEntriesOnly\", this, this._funcSecondariesObserver);\n\n                    this.get(\"_arrCustomObservers\").pushObject({\n                        objSubject: objSecondary,\n                        sProperty: \"_objFilterValue\",\n                        objContext: this,\n                        funcCallback: this._funcSecondariesObserver\n                    });\n                    this.get(\"_arrCustomObservers\").pushObject({\n                        objSubject: objSecondary,\n                        sProperty: \"_bEmptyEntriesOnly\",\n                        objContext: this,\n                        funcCallback: this._funcSecondariesObserver\n                    });\n\n                    Ember.set(objSecondary, \"_bObserverObjFilterValueSet\", true);\n                }\n            } else if (Ember.get(objSecondary, \"sFilterType\") === \"dropdown\") {\n                Ember.set(objSecondary, \"_bDropDownFilter\", true);\n                Ember.set(objSecondary, \"_objFilterValue\", null);\n                if (!Ember.get(objSecondary, \"_bObserverObjFilterValueSet\")) {\n                    Ember.addObserver(objSecondary, \"_objFilterValue\", this, this._funcSecondariesObserver);\n                    Ember.addObserver(objSecondary, \"_bEmptyEntriesOnly\", this, this._funcSecondariesObserver);\n\n                    this.get(\"_arrCustomObservers\").pushObject({\n                        objSubject: objSecondary,\n                        sProperty: \"_objFilterValue\",\n                        objContext: this,\n                        funcCallback: this._funcSecondariesObserver\n                    });\n                    this.get(\"_arrCustomObservers\").pushObject({\n                        objSubject: objSecondary,\n                        sProperty: \"_bEmptyEntriesOnly\",\n                        objContext: this,\n                        funcCallback: this._funcSecondariesObserver\n                    });\n\n                    Ember.set(objSecondary, \"_bObserverObjFilterValueSet\", true);\n                }\n            } else if (Ember.get(objSecondary, \"sFilterType\") === \"dropdownMulti\") {\n                Ember.set(objSecondary, \"_bDropDownMultiFilter\", true);\n                Ember.set(objSecondary, \"_arrFilterValue\", []);\n                if (!Ember.get(objSecondary, \"_bObserverObjFilterValueSet\")) {\n                    Ember.addObserver(objSecondary, \"_arrFilterValue\", this, this._funcSecondariesObserver);\n                    Ember.addObserver(objSecondary, \"_bEmptyEntriesOnly\", this, this._funcSecondariesObserver);\n\n                    this.get(\"_arrCustomObservers\").pushObject({\n                        objSubject: objSecondary,\n                        sProperty: \"_arrFilterValue\",\n                        objContext: this,\n                        funcCallback: this._funcSecondariesObserver\n                    });\n                    this.get(\"_arrCustomObservers\").pushObject({\n                        objSubject: objSecondary,\n                        sProperty: \"_bEmptyEntriesOnly\",\n                        objContext: this,\n                        funcCallback: this._funcSecondariesObserver\n                    });\n\n                    Ember.set(objSecondary, \"_bObserverObjFilterValueSet\", true);\n                }\n            } else if (Ember.get(objSecondary, \"sFilterType\") === \"date\") {\n                Ember.set(objSecondary, \"_bDateFilter\", true);\n                Ember.set(objSecondary, \"_objFilterValue\", null);\n                Ember.set(objSecondary, \"_bInternalValueChange\", true); //this caters for when there is already an observer\n                Ember.set(objSecondary, \"_sFromDate\", null);\n                Ember.set(objSecondary, \"_sToDate\", null);\n                Ember.set(objSecondary, \"_bInternalValueChange\", false);\n                Ember.set(objSecondary, \"_iFilterValue\", null);\n                Ember.set(objSecondary, \"_iFilterValueTo\", null);\n                Ember.set(objSecondary, \"_objBetweenOption\", null);\n\n                if (a24Core.isEmpty(Ember.get(objSecondary, \"arrMappingData\"))) {\n                    var arrDateFilterDataEnum = this.get(\"_objEnumEmberLibService\").getList(\"dateFilterOptions\");\n                    var arrDateFilterData = [];\n                    for (var i = 0; i < arrDateFilterDataEnum.length; i++) {\n                        arrDateFilterData.push({\n                            sTitle: arrDateFilterDataEnum[i].sLabel,\n                            sValue: arrDateFilterDataEnum[i].sValue\n                        });\n                    }\n                    Ember.set(objSecondary, \"arrMappingData\", arrDateFilterData);\n                }\n\n                Ember.set(objSecondary, \"arrMappingData\", Ember.copy(Ember.get(objSecondary, \"arrMappingData\"), true));\n\n                if (!Ember.get(objSecondary, \"_bObserverObjFilterValueSet\")) {\n                    var objSecondaryFilter = objSecondary;\n                    var funcFilterDateValuesObserve = function funcFilterDateValuesObserve() {\n\n                        var sDateOption = Ember.get(objSecondaryFilter, \"_objFilterValue.sValue\");\n                        if (!a24Core.isEmpty(sDateOption)) {\n                            if (_this4.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_WITHIN_THE_LAST.backend\") === sDateOption || _this4.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_WITHIN_THE_NEXT.backend\") === sDateOption || _this4.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_WITHIN_THE_NEXT.backend\") === sDateOption || _this4.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_LAST.backend\") === sDateOption || _this4.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_NEXT.backend\") === sDateOption || sDateOption.lastIndexOf(_this4.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED_GRACE.backend\"), 0) === 0 || sDateOption.lastIndexOf(_this4.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_WILL_NOT_EXPIRE.backend\"), 0) === 0 || sDateOption.lastIndexOf(_this4.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_WITHIN_LAST.backend\"), 0) === 0 || sDateOption.lastIndexOf(_this4.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_AT_LEAST.backend\"), 0) === 0) {\n                                var objToAndFromDate = _this4.get(\"_objFilterService\").getDateFromAndToValues(sDateOption, Ember.get(objSecondaryFilter, \"_iFilterValue\"));\n\n                                Ember.set(objSecondaryFilter, \"_bInternalValueChange\", true);\n                                Ember.set(objSecondaryFilter, \"_sFromDate\", objToAndFromDate.sFromDate);\n                                Ember.set(objSecondaryFilter, \"_sToDate\", objToAndFromDate.sToDate);\n                                Ember.set(objSecondaryFilter, \"_bInternalValueChange\", false);\n                            } else if (sDateOption.lastIndexOf(_this4.get(\"_objEnumEmberLibService.dateFilterOptionsBetween.DATE_FILTER_BETWEEN.backend\"), 0) === 0) {\n                                var _objToAndFromDate = _this4.get(\"_objFilterService\").getDateFromAndToValues(sDateOption, Ember.get(objSecondaryFilter, \"_iFilterValue\"), Ember.get(objSecondaryFilter, \"_iFilterValueTo\"));\n\n                                Ember.set(objSecondaryFilter, \"_bInternalValueChange\", true);\n                                Ember.set(objSecondaryFilter, \"_sFromDate\", _objToAndFromDate.sFromDate);\n                                Ember.set(objSecondaryFilter, \"_sToDate\", _objToAndFromDate.sToDate);\n                                Ember.set(objSecondaryFilter, \"_bInternalValueChange\", false);\n                            } else if (!a24Core.isEmpty(sDateOption) && _this4.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_CUSTOM_RANGE.backend\") !== sDateOption && _this4.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_CUSTOM.backend\") !== sDateOption) {\n                                Ember.set(objSecondaryFilter, \"_objFilterValue\", Ember.get(objSecondaryFilter, \"arrMappingData.\" + (Ember.get(objSecondaryFilter, \"arrMappingData\").length - 1)));\n                            }\n                        }\n                    };\n                    var funcFilterDateValuesObserveOnce = function funcFilterDateValuesObserveOnce() {\n                        if (!Ember.get(objSecondaryFilter, \"_bInternalValueChange\")) {\n                            Ember.run.once(objSecondaryFilter, funcFilterDateValuesObserve);\n                            _this4._funcSecondariesObserver();\n                        }\n                    };\n                    var funcFilterDateObserve = function funcFilterDateObserve() {\n                        var sDateOption = Ember.get(objSecondaryFilter, \"_objFilterValue.sValue\");\n                        var iFilterValue = Ember.get(objSecondaryFilter, \"_iFilterValue\");\n                        var iFilterValueTo = Ember.get(objSecondaryFilter, \"_iFilterValueTo\");\n                        var objToAndFromDate = _this4.get(\"_objFilterService\").getDateFromAndToValues(sDateOption, iFilterValue, iFilterValueTo);\n                        if (objToAndFromDate.bCustomRange) {\n                            //We do not want to change the dates since the user could be altering a previous choice\n                            return;\n                        } else {\n                            //Need to remove observers while setting the dates since test cases do not adhere to the\n                            //`once` and then the funcFilterDateValuesObserveOnce will run twice in test\n                            Ember.set(objSecondaryFilter, \"_bInternalValueChange\", true);\n                            Ember.set(objSecondaryFilter, \"_sFromDate\", objToAndFromDate.sFromDate);\n                            Ember.set(objSecondaryFilter, \"_sToDate\", objToAndFromDate.sToDate);\n                            Ember.set(objSecondaryFilter, \"_bInternalValueChange\", false);\n                        }\n                    };\n                    var funcFilterDateObserveOnce = function funcFilterDateObserveOnce() {\n                        Ember.run.once(objSecondaryFilter, funcFilterDateObserve);\n                        _this4._funcSecondariesObserver();\n                    };\n\n                    Ember.addObserver(objSecondary, \"_objFilterValue\", objSecondary, funcFilterDateObserveOnce);\n                    Ember.addObserver(objSecondary, \"_sFromDate\", objSecondary, funcFilterDateValuesObserveOnce);\n                    Ember.addObserver(objSecondary, \"_sToDate\", objSecondary, funcFilterDateValuesObserveOnce);\n                    Ember.addObserver(objSecondary, \"_bEmptyEntriesOnly\", objSecondary, funcFilterDateValuesObserveOnce);\n                    Ember.addObserver(objSecondary, \"_iFilterValue\", objSecondary, funcFilterDateValuesObserveOnce);\n                    Ember.addObserver(objSecondary, \"_iFilterValueTo\", objSecondary, funcFilterDateValuesObserveOnce);\n                    Ember.addObserver(objSecondary, \"_objBetweenOption\", objSecondary, funcFilterDateValuesObserveOnce);\n\n                    this.get(\"_arrCustomObservers\").pushObject({\n                        objSubject: objSecondary,\n                        sProperty: \"_objFilterValue\",\n                        objContext: objSecondary,\n                        funcCallback: funcFilterDateObserveOnce\n                    });\n                    this.get(\"_arrCustomObservers\").pushObject({\n                        objSubject: objSecondary,\n                        sProperty: \"_sFromDate\",\n                        objContext: objSecondary,\n                        funcCallback: funcFilterDateValuesObserveOnce\n                    });\n                    this.get(\"_arrCustomObservers\").pushObject({\n                        objSubject: objSecondary,\n                        sProperty: \"_sToDate\",\n                        objContext: objSecondary,\n                        funcCallback: funcFilterDateValuesObserveOnce\n                    });\n                    this.get(\"_arrCustomObservers\").pushObject({\n                        objSubject: objSecondary,\n                        sProperty: \"_bEmptyEntriesOnly\",\n                        objContext: objSecondary,\n                        funcCallback: funcFilterDateValuesObserveOnce\n                    });\n                    this.get(\"_arrCustomObservers\").pushObject({\n                        objSubject: objSecondary,\n                        sProperty: \"_iFilterValue\",\n                        objContext: objSecondary,\n                        funcCallback: funcFilterDateValuesObserveOnce\n                    });\n                    this.get(\"_arrCustomObservers\").pushObject({\n                        objSubject: objSecondary,\n                        sProperty: \"_iFilterValueTo\",\n                        objContext: objSecondary,\n                        funcCallback: funcFilterDateValuesObserveOnce\n                    });\n                    this.get(\"_arrCustomObservers\").pushObject({\n                        objSubject: objSecondary,\n                        sProperty: \"_objBetweenOption\",\n                        objContext: objSecondary,\n                        funcCallback: funcFilterDateValuesObserveOnce\n                    });\n\n                    Ember.set(objSecondary, \"_bObserverObjFilterValueSet\", true);\n                }\n            } else if (Ember.get(objSecondary, \"sFilterType\") === \"custom\") {\n                Ember.set(objSecondary, \"_bCustomFilter\", true);\n            }\n        },\n        _funcSecondariesObserver: function _funcSecondariesObserver() {\n            Ember.run.once(this, this._funcValidateSecondaries);\n        },\n        _funcValidateSecondaries: function _funcValidateSecondaries() {\n            if (a24Core.isEmpty(this.get(\"_objSelectedFilterOption\")) || !this.get(\"_objSelectedFilterOption.bFilterSecondary\")) {\n                return;\n            }\n\n            this.set(\"_bSecondariesValid\", true);\n\n            if (this.get(\"_objSelectedQueryType.sValue\") === this.get(\"_objEnumEmberLibService.filterOptionsType.IS_NOT.backend\") || this.get(\"_objSelectedQueryType.sValue\") === this.get(\"_objLibConstants\").CARD_DATAGRID_FILTER_QUERY_TYPE_EMPTY) {\n                return;\n            }\n\n            var arrSecondaries = this.get(\"objHeaderSecondaries.arrFilterSecondary_\" + this.get(\"_objSelectedFilterOption.sProperty\"));\n\n            var mReturn = this.get(\"_objFilterService\").validateSecondaries(arrSecondaries);\n\n            if (!a24Core.isEmpty(mReturn)) {\n                this.set(\"_bSecondariesValid\", false);\n            }\n        },\n        setHeaderQueryParamObjects: function setHeaderQueryParamObjects() {\n            this.removeObserver(\"arrHeaderConfig.@each.sFilterValue\", this, this.get(\"_funcFilterValuesObserverCallback\"));\n            this.removeObserver(\"arrHeaderConfig.@each.mFilterValue\", this, this.get(\"_funcFilterValuesObserverCallback\"));\n\n            var objQueryParamObject = this.get(\"_objQueryParamObject\");\n            var arrHeaderConfig = this.get(\"arrHeaderConfig\");\n\n            var bHasFilterApplied = false;\n            if (!a24Core.isEmpty(arrHeaderConfig)) {\n                for (var i = 0; i < arrHeaderConfig.length; i++) {\n                    if (arrHeaderConfig[i].bFilterAnd || arrHeaderConfig[i].bFilterOr || arrHeaderConfig[i].bFilterSecondary || arrHeaderConfig[i].sFilterType === \"custom\") {\n                        if (a24Core.isEmpty(arrHeaderConfig[i].mFilterValue)) {\n                            delete objQueryParamObject[arrHeaderConfig[i].sProperty];\n                        } else {\n                            this.get(\"_objFilterService\").fixupAdvanceQueryValues(arrHeaderConfig[i], this.get(\"objHeaderSecondaries\"));\n                            this.setHeaderQueryParamObject(arrHeaderConfig[i]);\n                            bHasFilterApplied = true;\n                        }\n                    } else if (a24Core.isEmpty(arrHeaderConfig[i].sFilterValue)) {\n                        delete objQueryParamObject[arrHeaderConfig[i].sProperty];\n                    } else {\n                        this.setHeaderQueryParamObject(arrHeaderConfig[i]);\n                        bHasFilterApplied = true;\n                    }\n                }\n            }\n            this.set(\"bHasFilterApplied\", bHasFilterApplied);\n\n            //Let parent know the filters changed\n            if (!a24Core.isEmpty(this.get(\"cardDatagridFilterParamChangeEvent\"))) {\n                this.get(\"cardDatagridFilterParamChangeEvent\")(Ember.copy(this.get(\"_objQueryParamObject\"), true));\n            }\n\n            this.addObserver(\"arrHeaderConfig.@each.sFilterValue\", this, this.get(\"_funcFilterValuesObserverCallback\"));\n            this.addObserver(\"arrHeaderConfig.@each.mFilterValue\", this, this.get(\"_funcFilterValuesObserverCallback\"));\n        },\n        setCustomDataChoiceObserver: Ember.observer(\"_sFromDate\", \"_sToDate\", \"_sFromTime\", \"_sToTime\", \"_iFilterValue\", \"_iFilterValueTo\", \"_objBetweenOption\", function () {\n            if (this.get(\"_bCheckForCustomDate\")) {\n                Ember.run.once(this, this.setCustomDataChoice);\n            }\n            if (this.get(\"_bDateTimeFilter\")) {\n                Ember.run.once(this, this._setDateTimes);\n            }\n        }),\n        _setDateTimes: function _setDateTimes() {\n            var _this5 = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objFilterValue\"))) {\n                var sDateOption = this.get(\"_objFilterValue\").sValue;\n                if (this.get(\"_bDateFilter\") && !a24Core.isEmpty(sDateOption) && (this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_CUSTOM_RANGE.backend\") === sDateOption || this.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_CUSTOM.backend\") === sDateOption)) {\n                    Ember.run.next(function () {\n                        Ember.run.schedule(\"afterRender\", function () {\n                            if (!a24Core.isEmpty(_this5.get(\"objChildren.sDateTimeFrom\"))) {\n                                if (a24Core.isEmpty(_this5.get(\"_sFromDate\"))) {\n                                    _this5.get(\"objChildren.sDateTimeFrom\").clear();\n                                } else if (a24Core.isEmpty(_this5.get(\"_sFromTime\"))) {\n                                    _this5.get(\"objChildren.sDateTimeFrom\").setValueFromOutside(\"00:00\");\n                                }\n                                if (a24Core.isEmpty(_this5.get(\"_sToDate\"))) {\n                                    _this5.get(\"objChildren.sDateTimeTo\").clear();\n                                } else if (a24Core.isEmpty(_this5.get(\"_sToTime\"))) {\n                                    _this5.get(\"objChildren.sDateTimeTo\").setValueFromOutside(\"23:59\");\n                                }\n                            }\n                        });\n                    });\n                }\n            }\n        },\n        setCustomDataChoice: function setCustomDataChoice() {\n            //If empty we know that the filter is closed.\n            if (!a24Core.isEmpty(this.get(\"_objFilterValue\"))) {\n                var sDateOption = this.get(\"_objFilterValue\").sValue;\n\n                if (this.get(\"_bDateFilter\") && !a24Core.isEmpty(sDateOption) && (this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_WITHIN_THE_LAST.backend\") === sDateOption || this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_WITHIN_THE_NEXT.backend\") === sDateOption || this.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_WITHIN_THE_NEXT.backend\") === sDateOption || this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_LAST.backend\") === sDateOption || this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_NEXT.backend\") === sDateOption || sDateOption.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsBetween.DATE_FILTER_BETWEEN.backend\"), 0) === 0 || sDateOption.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED_GRACE.backend\"), 0) === 0 || sDateOption.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_WILL_NOT_EXPIRE.backend\"), 0) === 0 || sDateOption.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_WITHIN_LAST.backend\"), 0) === 0 || sDateOption.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_AT_LEAST.backend\"), 0) === 0)) {\n                    var objCurrentDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                    this.set(\"_bCheckForCustomDate\", false);\n                    if (a24Core.isEmpty(this.get(\"_iFilterValue\")) || this.get(\"_iFilterValue\") === 0 || sDateOption.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsBetween.DATE_FILTER_BETWEEN.backend\"), 0) === 0 && (a24Core.isEmpty(this.get(\"_iFilterValueTo\")) || this.get(\"_iFilterValueTo\") === 0 || a24Core.isEmpty(this.get(\"_objBetweenOption\")))) {\n                        this.set(\"_sFromDate\", null);\n                        this.set(\"_sToDate\", null);\n                    } else {\n                        if (sDateOption.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED_GRACE.backend\"), 0) === 0) {\n                            var sUnit = sDateOption.split(\"_\")[1];\n                            objCurrentDate.setTimeToStartOfDay();\n                            objCurrentDate.subtractTimeFromDate(sUnit, this.get(\"_iFilterValue\"));\n                            this.set(\"_sFromDate\", objCurrentDate.getDateFormat());\n                        } else if (sDateOption.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_WILL_NOT_EXPIRE.backend\"), 0) === 0) {\n                            var _sUnit = sDateOption.split(\"_\")[1];\n                            objCurrentDate.setTimeToStartOfDay();\n                            objCurrentDate.addTimeToDate(_sUnit, this.get(\"_iFilterValue\"));\n                            this.set(\"_sFromDate\", objCurrentDate.getDateFormat());\n                        } else if (sDateOption.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_WITHIN_LAST.backend\"), 0) === 0) {\n                            var _sUnit2 = sDateOption.split(\"_\")[1];\n                            objCurrentDate.setTimeToEndOfDay();\n                            this.set(\"_sToDate\", objCurrentDate.getDateFormat());\n                            objCurrentDate.setTimeToStartOfDay();\n                            objCurrentDate.subtractTimeFromDate(_sUnit2, this.get(\"_iFilterValue\"));\n                            this.set(\"_sFromDate\", objCurrentDate.getDateFormat());\n                        } else if (sDateOption.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_AT_LEAST.backend\"), 0) === 0) {\n                            var _sUnit3 = sDateOption.split(\"_\")[1];\n                            objCurrentDate.setTimeToEndOfDay();\n                            objCurrentDate.subtractTimeFromDate(_sUnit3, this.get(\"_iFilterValue\"));\n                            this.set(\"_sToDate\", objCurrentDate.getDateFormat());\n                        } else if (this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_WITHIN_THE_LAST.backend\") === sDateOption || this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_LAST.backend\") === sDateOption) {\n                            this.set(\"_sToDate\", objCurrentDate.getDateFormat());\n                            objCurrentDate.subtractTimeFromDate(a24Constants.MOMENT_TIME_DAYS, this.get(\"_iFilterValue\"));\n                            this.set(\"_sFromDate\", objCurrentDate.getDateFormat());\n                        } else if (sDateOption.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsBetween.DATE_FILTER_BETWEEN.backend\"), 0) === 0) {\n                            var objFromDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                            var objToDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                            if (!a24Core.isEmpty(this.get(\"_iFilterValue\")) && !a24Core.isEmpty(this.get(\"_iFilterValueTo\")) && !a24Core.isEmpty(this.get(\"_objBetweenOption\"))) {\n                                var iDays = parseInt(this.get(\"_iFilterValue\"));\n                                var iDaysTo = parseInt(this.get(\"_iFilterValueTo\"));\n\n                                var iHigh = iDays >= iDaysTo ? iDays : iDaysTo;\n                                var iLow = iDays < iDaysTo ? iDays : iDaysTo;\n\n                                if (this.get(\"_objBetweenOption.sValue\") === \"ago\") {\n                                    objFromDate.setTimeToStartOfDay();\n                                    objFromDate.subtractTimeFromDate(a24Constants.MOMENT_TIME_DAYS, iHigh);\n                                    objToDate.setTimeToEndOfDay();\n                                    objToDate.subtractTimeFromDate(a24Constants.MOMENT_TIME_DAYS, iLow);\n                                } else if (this.get(\"_objBetweenOption.sValue\") === \"fromToday\") {\n                                    objFromDate.setTimeToStartOfDay();\n                                    objFromDate.addTimeToDate(a24Constants.MOMENT_TIME_DAYS, iLow);\n                                    objToDate.setTimeToEndOfDay();\n                                    objToDate.addTimeToDate(a24Constants.MOMENT_TIME_DAYS, iHigh);\n                                }\n                                this.set(\"_sFromDate\", objFromDate.getDateFormat());\n                                this.set(\"_sToDate\", objToDate.getDateFormat());\n                            }\n                        } else {\n                            this.set(\"_sFromDate\", objCurrentDate.getDateFormat());\n                            objCurrentDate.addTimeToDate(a24Constants.MOMENT_TIME_DAYS, this.get(\"_iFilterValue\"));\n                            this.set(\"_sToDate\", objCurrentDate.getDateFormat());\n                        }\n                    }\n                    this.set(\"_bCheckForCustomDate\", true);\n                } else if (this.get(\"_bDateFilter\") && !a24Core.isEmpty(sDateOption) && this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_CUSTOM_RANGE.backend\") !== sDateOption && this.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_CUSTOM.backend\") !== sDateOption) {\n                    this.set(\"_objFilterValue\", this.get(\"_arrDateFilterData.\" + (this.get(\"_arrDateFilterData\").length - 1)));\n                }\n            }\n        },\n        resetFilterBools: function resetFilterBools() {\n            //Clear all the variables used and share in the filter options popup\n            this.set(\"_bDisplayAddButton\", false);\n            this.set(\"_bCustomFilter\", false);\n            this.set(\"_bTextFilter\", false);\n            this.set(\"_bBoolFilter\", false);\n            this.set(\"_bDropDownFilter\", false);\n            this.set(\"_bDropDownMultiFilter\", false);\n            this.set(\"_bDateFilter\", false);\n            this.set(\"_bDateTimeFilter\", false);\n            this.set(\"_bSuggestFilter\", false);\n            this.set(\"_sFilterValue\", null);\n            this.set(\"_objFilterValue\", null);\n            this.set(\"_sFilterInputPlaceHolder\", null);\n            this.set(\"_arrFilterInputArray\", []);\n            this.set(\"_arrFilterValue\", []);\n            this.set(\"_bEmptyEntriesOnly\", false);\n\n            this.set(\"_bCheckForCustomDate\", false);\n            this.set(\"_sFromDate\", \"\");\n            this.set(\"_sToDate\", \"\");\n            this.set(\"_sFromTime\", \"\");\n            this.set(\"_sToTime\", \"\");\n            this.set(\"_iFilterValue\", null);\n            this.set(\"_iFilterValueTo\", null);\n            this.set(\"_objBetweenOption\", null);\n            this.set(\"_bCheckForCustomDate\", true);\n\n            this.set(\"_bHideEmptyCheck\", false);\n            this.set(\"_objSelectedQueryType\", null);\n            this.set(\"_bShowSelectedQueryType\", false);\n            this.set(\"_bShowAddOrQuestion\", false);\n            this.set(\"_bShowSecondaryFilters\", true);\n            this.set(\"_bAndOrQuestionAnd\", false);\n            this.set(\"_bAndOrQuestionOr\", false);\n            this.set(\"_iAdvanceFilterEdit\", null);\n\n            this.set(\"_mFilterValueReact\", null);\n\n            //Reset form input fields\n            if (!a24Core.isEmpty(this.get(\"objChildren.sSuggestInput\"))) {\n                this.get(\"objChildren.sSuggestInput\").clear();\n            }\n            if (!a24Core.isEmpty(this.get(\"objChildren.sDateTimeFrom\"))) {\n                this.get(\"objChildren.sDateTimeFrom\").clear();\n            }\n            if (!a24Core.isEmpty(this.get(\"objChildren.sDateTimeTo\"))) {\n                this.get(\"objChildren.sDateTimeTo\").clear();\n            }\n\n            //Reset all the secondaries filters\n            var arrHeaderConfig = this.get(\"arrHeaderConfig\");\n            if (!a24Core.isEmpty(arrHeaderConfig)) {\n                for (var i = 0; i < arrHeaderConfig.length; i++) {\n                    if (arrHeaderConfig[i].sFilterType === \"custom\") {\n                        arrHeaderConfig[i].objFilterCustomService.funcFilterCustomPrimaryReset(arrHeaderConfig[i]);\n                    }\n                    this.setupOrResetSecondaryFilters(arrHeaderConfig[i]);\n                }\n            }\n        },\n        addFilter: function addFilter(bDoAndNext, bDoOrNext) {\n            this.removeObserver(\"arrHeaderConfig.@each.sFilterValue\", this, this.get(\"_funcFilterValuesObserverCallback\"));\n            this.removeObserver(\"arrHeaderConfig.@each.mFilterValue\", this, this.get(\"_funcFilterValuesObserverCallback\"));\n\n            this.set(\"bShowSaveAction\", true);\n\n            var objSelectedFilterOption = this.get(\"_objSelectedFilterOption\");\n\n            var sHeaderFilterValue = null;\n            if (this.get(\"_bEmptyEntriesOnly\")) {\n                sHeaderFilterValue = \"null\";\n            } else {\n                sHeaderFilterValue = this.get(\"_sFilterValue\");\n            }\n            Ember.set(objSelectedFilterOption, \"sFilterValue\", sHeaderFilterValue);\n\n            //If date filter set the 2 extra properties\n            if (\"date\" === objSelectedFilterOption.sFilterType) {\n                if (sHeaderFilterValue === \"null\") {\n                    Ember.set(objSelectedFilterOption, \"sFilterFromValue\", null);\n                    Ember.set(objSelectedFilterOption, \"sFilterToValue\", null);\n                } else {\n                    if (sHeaderFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsBetween.DATE_FILTER_BETWEEN.backend\"), 0) === 0) {\n                        Ember.set(objSelectedFilterOption, \"sFilterValue\", sHeaderFilterValue + \"_\" + this.get(\"_objBetweenOption.sValue\") + \"_\" + this.get(\"_iFilterValue\") + \"_\" + this.get(\"_iFilterValueTo\"));\n                    }\n                    if (this.get(\"_bDateTimeFilter\")) {\n                        Ember.set(objSelectedFilterOption, \"sFilterFromValue\", this.get(\"_sFromDate\") + \" \" + this.get(\"_sFromTime\"));\n                        Ember.set(objSelectedFilterOption, \"sFilterToValue\", this.get(\"_sToDate\") + \" \" + this.get(\"_sToTime\"));\n                    } else {\n                        Ember.set(objSelectedFilterOption, \"sFilterFromValue\", this.get(\"_sFromDate\"));\n                        Ember.set(objSelectedFilterOption, \"sFilterToValue\", this.get(\"_sToDate\"));\n                    }\n                }\n            }\n\n            if (!a24Core.isEmpty(objSelectedFilterOption.sReactFilterRoute)) {\n                Ember.set(objSelectedFilterOption, \"mFilterValue\", this.get(\"_mFilterValueReact\"));\n                if (objSelectedFilterOption.bReactSingleton) {\n                    Ember.set(objSelectedFilterOption, \"sFilterValue\", this.get(\"_mFilterValueReact\")[0].sFilterValue);\n                } else {\n                    Ember.set(objSelectedFilterOption, \"sFilterValue\", null);\n                }\n            } else if (objSelectedFilterOption.bFilterSecondary || objSelectedFilterOption.bFilterAnd || objSelectedFilterOption.bFilterOr || objSelectedFilterOption.sFilterType === \"custom\") {\n                this.get(\"_objFilterService\").buildAdvanceFilter(objSelectedFilterOption, this.get(\"_bAndOrQuestionAnd\"), this.get(\"_bAndOrQuestionOr\"), this.get(\"_objSelectedQueryType\"), this.get(\"objHeaderSecondaries\"), this.get(\"_iAdvanceFilterEdit\"));\n            }\n\n            this.setHeaderQueryParamObject(objSelectedFilterOption);\n\n            this.resetFilterBools();\n\n            if (bDoAndNext || bDoOrNext) {\n                this.set(\"_bAndOrQuestionAnd\", bDoAndNext);\n                this.set(\"_bAndOrQuestionOr\", bDoOrNext);\n                this._setFilterInputChoices();\n            } else {\n                this.set(\"_objSelectedFilterOption\", null);\n                this.set(\"_bDisplayFilterChoices\", false);\n                if (!a24Core.isEmpty(this.get(\"cardDatagridFilterDropdownCloseEvent\"))) {\n                    this.get(\"cardDatagridFilterDropdownCloseEvent\")();\n                }\n            }\n\n            //Let parent know the filters changed\n            if (!a24Core.isEmpty(this.get(\"cardDatagridFilterChangeEvent\"))) {\n                this.get(\"cardDatagridFilterChangeEvent\")(objSelectedFilterOption.sProperty, Ember.copy(this.get(\"_objQueryParamObject\"), true));\n            }\n\n            this.addObserver(\"arrHeaderConfig.@each.sFilterValue\", this, this.get(\"_funcFilterValuesObserverCallback\"));\n            this.addObserver(\"arrHeaderConfig.@each.mFilterValue\", this, this.get(\"_funcFilterValuesObserverCallback\"));\n        },\n        _funcHeaderFilter: function _funcHeaderFilter(objHeaderItem) {\n            // Used to disable filters on the dropdown\n            return !objHeaderItem.bStopFiltering;\n        },\n        setHeaderQueryParamObject: function setHeaderQueryParamObject(objHeaderItem) {\n            var objQueryAndTag = this.get(\"_objFilterService\").createQueryAndTag(objHeaderItem, true, this.get(\"objHeaderSecondaries\"));\n\n            if (!a24Core.isEmpty(objHeaderItem.funcFilterParseQueryValue)) {\n                objQueryAndTag.objQuery = objHeaderItem.funcFilterParseQueryValue(objQueryAndTag.objQuery);\n            }\n\n            this.set(\"_objQueryParamObject.\" + objHeaderItem.sProperty, objQueryAndTag.objQuery);\n\n            if (!a24Core.isEmpty(objQueryAndTag.arrTag)) {\n                Ember.set(objHeaderItem, \"arrTagValue\", objQueryAndTag.arrTag);\n            } else {\n                Ember.set(objHeaderItem, \"arrTagValue\", null);\n            }\n\n            if (!a24Core.isEmpty(objQueryAndTag.sTagSimple)) {\n                Ember.set(objHeaderItem, \"sTagValueSimple\", objQueryAndTag.sTagSimple);\n            } else {\n                Ember.set(objHeaderItem, \"sTagValueSimple\", null);\n            }\n\n            if (!a24Core.isEmpty(objQueryAndTag.sTag)) {\n                Ember.set(objHeaderItem, \"sTagValue\", objQueryAndTag.sTag);\n            } else {\n                Ember.set(objHeaderItem, \"sTagValue\", null);\n            }\n        },\n        removeFilter: function removeFilter(sProperty, iIndex, bEntireFilter) {\n            this.removeObserver(\"arrHeaderConfig.@each.sFilterValue\", this, this.get(\"_funcFilterValuesObserverCallback\"));\n            this.removeObserver(\"arrHeaderConfig.@each.mFilterValue\", this, this.get(\"_funcFilterValuesObserverCallback\"));\n\n            this.set(\"bShowSaveAction\", true);\n\n            var arrHeaderConfig = this.get(\"arrHeaderConfig\");\n            var objQueryParamObject = this.get(\"_objQueryParamObject\");\n\n            //Loop over the header, find the one to remove and reset the filter and tag value.\n            for (var i = 0; i < arrHeaderConfig.length; i++) {\n                if (arrHeaderConfig[i].sProperty === sProperty) {\n\n                    //NOTE When the `x` is clicked on individual item advance filter items we remove the item unless\n                    //it is the last item then we remove it like normal.\n                    if (arrHeaderConfig[i].bFilterSecondary || arrHeaderConfig[i].bFilterAnd || arrHeaderConfig[i].bFilterOr || arrHeaderConfig[i].sFilterType === \"custom\") {\n                        //If we have advance item then when iIndex is empty we know that we are dealing with a single item,\n                        //thus we can set iIndex to 0\n                        if (a24Core.isEmpty(iIndex)) {\n                            iIndex = 0;\n                        }\n                        if (bEntireFilter) {\n                            this.set(\"arrHeaderConfig.\" + i + \".mFilterValue\", []);\n                        } else {\n                            this.get(\"arrHeaderConfig.\" + i + \".mFilterValue\").removeAt(iIndex);\n                        }\n\n                        if (this.get(\"arrHeaderConfig.\" + i + \".mFilterValue\").length !== 0) {\n                            this.setHeaderQueryParamObject(this.get(\"arrHeaderConfig.\" + i));\n                            break;\n                        }\n                        this.set(\"arrHeaderConfig.\" + i + \".arrTagValue\", null);\n                    }\n\n                    this.set(\"arrHeaderConfig.\" + i + \".sFilterValue\", null);\n                    this.set(\"arrHeaderConfig.\" + i + \".sTagValueSimple\", null);\n                    this.set(\"arrHeaderConfig.\" + i + \".sTagValue\", null);\n\n                    if (\"date\" === arrHeaderConfig[i].sFilterType) {\n                        this.set(\"arrHeaderConfig.\" + i + \".sFilterFromValue\", null);\n                        this.set(\"arrHeaderConfig.\" + i + \".sFilterToValue\", null);\n                    }\n\n                    if (arrHeaderConfig[i].bFilterSecondary || arrHeaderConfig[i].bFilterAnd || arrHeaderConfig[i].bFilterOr || arrHeaderConfig[i].sFilterType === \"custom\") {\n                        this.set(\"arrHeaderConfig.\" + i + \".mFilterValue\", null);\n                    }\n\n                    delete objQueryParamObject[sProperty];\n                    break;\n                }\n            }\n\n            //Let parent know the filters changed\n            if (!a24Core.isEmpty(this.get(\"cardDatagridFilterChangeEvent\"))) {\n                this.get(\"cardDatagridFilterChangeEvent\")(sProperty, Ember.copy(objQueryParamObject, true));\n            }\n\n            this.addObserver(\"arrHeaderConfig.@each.sFilterValue\", this, this.get(\"_funcFilterValuesObserverCallback\"));\n            this.addObserver(\"arrHeaderConfig.@each.mFilterValue\", this, this.get(\"_funcFilterValuesObserverCallback\"));\n        },\n        filterOptionButtonClick: function filterOptionButtonClick(bAutoFocus) {\n            this.resetFilterBools();\n            this.set(\"_objSelectedFilterOption\", null);\n            this.set(\"_bDisplayFilterChoices\", true);\n\n            var objCurrentController = this;\n\n            //Here we do a next since we first need the DOM to draw the filter options popup before we can access\n            //the first dropdown to focus it(seems it can only be focused in a ember next, might have to do with how\n            //mdb inits the dropdown) and also override the click on the popup so that it does not close the\n            //popup when click happens on itself.\n            Ember.run.next(function () {\n                Ember.run.schedule(\"afterRender\", function () {\n                    var objOptionsDropdown = objCurrentController.$(\"#\" + objCurrentController.get(\"_sFilterOptionsDropdownId\") + \" input\");\n                    if (objCurrentController.get(\"_bDisplayFilterChoices\") && !a24Core.isEmpty(objOptionsDropdown) && bAutoFocus) {\n                        objOptionsDropdown.first().focus();\n                    }\n                });\n            });\n\n            if (!a24Core.isEmpty(this.get(\"cardDatagridFilterDropdownOpenEvent\"))) {\n                this.get(\"cardDatagridFilterDropdownOpenEvent\")();\n            }\n        },\n        setFilterValue: function setFilterValue(sFilterValue, sFilterType, sFilterFromValue, sFilterToValue, arrMappingData, bAdvance, bAllowTime) {\n            var _this6 = this;\n\n            this.set(\"_iFilterValue\", null);\n            this.set(\"_iFilterValueTo\", null);\n            this.set(\"_objBetweenOption\", null);\n            if (\"null\" === sFilterValue) {\n                this.set(\"_sFilterValue\", \"\");\n                this.set(\"_bEmptyEntriesOnly\", true);\n            } else {\n                this.set(\"_sFilterValue\", sFilterValue);\n            }\n            if (\"date\" === sFilterType) {\n                var sFilterFromTime = \"00:00\";\n                var sFilterToTime = \"23:59\";\n\n                var objFromDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                var objToDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n\n                if (!a24Core.isEmpty(sFilterValue) && (bAdvance && sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_CUSTOM_RANGE.backend\") || sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_CUSTOM.backend\") || sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_AFTER.backend\") || sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_WITHIN_THE_LAST.backend\") || sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_WITHIN_THE_NEXT.backend\") || sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_WITHIN_THE_NEXT.backend\") || sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_LAST.backend\") || sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_NEXT.backend\") || sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsBetween.DATE_FILTER_BETWEEN.backend\"), 0) === 0 || sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED_GRACE.backend\"), 0) === 0 || sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_WILL_NOT_EXPIRE.backend\"), 0) === 0 || sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_WITHIN_LAST.backend\"), 0) === 0 || sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_AT_LEAST.backend\"), 0) === 0)) {\n                    if (bAdvance) {\n                        if (!a24Core.isEmpty(sFilterFromValue)) {\n                            objFromDate.setDateFromRest(sFilterFromValue);\n                            sFilterFromValue = objFromDate.getDateFormat();\n                        }\n                        if (!a24Core.isEmpty(sFilterToValue)) {\n                            objToDate.setDateFromRest(sFilterToValue);\n                            sFilterToValue = objToDate.getDateFormat();\n                        }\n                    } else {\n                        if (bAllowTime) {\n                            objFromDate.setDateFromBrowser(sFilterFromValue, this.get(\"_objLibConstants.DATE_TIME_FORMAT\"));\n                            objToDate.setDateFromBrowser(sFilterToValue, this.get(\"_objLibConstants.DATE_TIME_FORMAT\"));\n                        } else {\n                            objFromDate.setDateFromBrowser(sFilterFromValue, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                            objToDate.setDateFromBrowser(sFilterToValue, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                        }\n                    }\n\n                    if (sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED_GRACE.backend\"), 0) === 0 || sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_WILL_NOT_EXPIRE.backend\"), 0) === 0 || sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_WITHIN_LAST.backend\"), 0) === 0 || sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_AT_LEAST.backend\"), 0) === 0) {\n                        var sUnit = sFilterValue.split(\"_\")[1];\n                        objFromDate.setTimeToStartOfDay();\n                        objToDate.setTimeToStartOfDay();\n                        this.set(\"_iFilterValue\", Math.round(objToDate.difference(objFromDate, sUnit, true)));\n                    } else if (sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_WITHIN_THE_LAST.backend\") || sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_WITHIN_THE_NEXT.backend\") || sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_WITHIN_THE_NEXT.backend\") || sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_LAST.backend\") || sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_NEXT.backend\")) {\n                        objFromDate.setTimeToStartOfDay();\n                        objToDate.setTimeToStartOfDay();\n                        this.set(\"_iFilterValue\", Math.round(objToDate.difference(objFromDate, a24Constants.MOMENT_TIME_DAYS, true)));\n                    } else if (sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsBetween.DATE_FILTER_BETWEEN.backend\"), 0) === 0) {\n                        var arrExtraOptions = sFilterValue.split(\"_\");\n                        this.set(\"_iFilterValue\", arrExtraOptions[2]);\n                        this.set(\"_iFilterValueTo\", arrExtraOptions[3]);\n                        var arrBetweenArray = this.get(\"_arrFilterBetweenArray\");\n                        for (var h = 0; h < arrBetweenArray.length; h++) {\n                            if (arrBetweenArray[h].sValue === arrExtraOptions[1]) {\n                                this.set(\"_objBetweenOption\", arrBetweenArray[h]);\n                                break;\n                            }\n                        }\n                    }\n                } else {\n                    if (bAllowTime) {\n                        objFromDate.setDateFromBrowser(sFilterFromValue, this.get(\"_objLibConstants.DATE_TIME_FORMAT\"));\n                        objToDate.setDateFromBrowser(sFilterToValue, this.get(\"_objLibConstants.DATE_TIME_FORMAT\"));\n                    } else {\n                        objFromDate.setDateFromBrowser(sFilterFromValue, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                        objToDate.setDateFromBrowser(sFilterToValue, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                    }\n                }\n\n                if (!a24Core.isEmpty(sFilterFromValue)) {\n                    sFilterFromTime = objFromDate.getTimeFormat();\n                }\n                if (!a24Core.isEmpty(sFilterToValue)) {\n                    sFilterToTime = objToDate.getTimeFormat();\n                }\n\n                this.set(\"_bCheckForCustomDate\", false);\n                if (!a24Core.isEmpty(sFilterFromValue)) {\n                    this.set(\"_sFromDate\", sFilterFromValue);\n                }\n                if (!a24Core.isEmpty(sFilterToValue)) {\n                    this.set(\"_sToDate\", sFilterToValue);\n                }\n                if (bAllowTime) {\n                    if (!a24Core.isEmpty(sFilterFromValue)) {\n                        this.set(\"_sFromTime\", sFilterFromTime);\n                    }\n                    if (!a24Core.isEmpty(sFilterToValue)) {\n                        this.set(\"_sToTime\", sFilterToTime);\n                    }\n                }\n                this.set(\"_bCheckForCustomDate\", true);\n                var arrDateMappings = this.get(\"_arrDateFilterData\");\n                var objSelectedFilterOption = this.get(\"_objSelectedFilterOption\");\n                if (!a24Core.isEmpty(objSelectedFilterOption.arrMappingData)) {\n                    arrDateMappings = objSelectedFilterOption.arrMappingData;\n                }\n                var objDateFilterValue = null;\n                for (var l = 0; l < arrDateMappings.length; l++) {\n                    if (sFilterValue.includes(arrDateMappings[l].sValue)) {\n                        objDateFilterValue = arrDateMappings[l];\n                        break;\n                    } else if (arrDateMappings[l].sValue === sFilterValue) {\n                        objDateFilterValue = arrDateMappings[l];\n                        break;\n                    }\n                }\n\n                this.set(\"_objFilterValue\", objDateFilterValue);\n\n                if (bAllowTime) {\n                    //set the value on the input in next since it needs to render first\n                    Ember.run.next(function () {\n                        Ember.run.schedule(\"afterRender\", function () {\n                            if (!a24Core.isEmpty(_this6.get(\"objChildren.sDateTimeFrom\"))) {\n                                _this6.get(\"objChildren.sDateTimeFrom\").setValueFromOutside(sFilterFromTime);\n                            }\n                            if (!a24Core.isEmpty(_this6.get(\"objChildren.sDateTimeTo\"))) {\n                                _this6.get(\"objChildren.sDateTimeTo\").setValueFromOutside(sFilterToTime);\n                            }\n                        });\n                    });\n                }\n            } else if (\"bool\" === sFilterType || \"dropdown\" === sFilterType) {\n                var arrMappings = arrMappingData;\n                var objFilterValue = null;\n                for (var k = 0; k < arrMappings.length; k++) {\n                    if (arrMappings[k].sValue === sFilterValue) {\n                        objFilterValue = arrMappings[k];\n                        break;\n                    }\n                }\n                this.set(\"_objFilterValue\", objFilterValue);\n            } else if (\"dropdownMulti\" === sFilterType) {\n                var arrSelectedItems = [];\n                if (!a24Core.isEmpty(sFilterValue)) {\n                    var arrItems = sFilterValue.split(\"|\");\n                    var arrData = arrMappingData;\n                    for (var i = 0; i < arrItems.length; i++) {\n                        for (var j = 0; j < arrData.length; j++) {\n                            if (arrData[j].sValue === arrItems[i]) {\n                                arrSelectedItems.push(arrData[j]);\n                                break;\n                            }\n                        }\n                    }\n                }\n                this.set(\"_arrFilterValue\", arrSelectedItems);\n            } else if (\"suggest\" === sFilterType) {\n                var objSelected = null;\n                if (!a24Core.isEmpty(sFilterValue) && sFilterValue !== \"null\") {\n                    var arrSuggestItems = sFilterValue.split(\"||\"); //double pipe for safety.\n                    objSelected = {};\n                    objSelected[this.get(\"_objSelectedFilterOption.sFilterOptionsValueKey\")] = arrSuggestItems[0];\n                    objSelected[this.get(\"_objSelectedFilterOption.sFilterOptionsLabelKey\")] = arrSuggestItems[1];\n                }\n                this.set(\"_objFilterValue\", objSelected);\n\n                //set the value on the input in next since it needs to render first\n                Ember.run.next(function () {\n                    Ember.run.schedule(\"afterRender\", function () {\n                        _this6.get(\"objChildren.sSuggestInput\").setValueFromOutside(objSelected);\n                    });\n                });\n            }\n        },\n        advanceFilterTagClicked: function advanceFilterTagClicked(objFilterItem, iIndex) {\n            var _this7 = this;\n\n            var arrObservers = this.get(\"_arrCustomObservers\");\n\n            arrObservers.forEach(function (objObserver) {\n                Ember.removeObserver(objObserver.objSubject, objObserver.sProperty, objObserver.objContext, objObserver.funcCallback);\n            });\n\n            if (a24Core.isEmpty(iIndex)) {\n                iIndex = 0;\n            }\n\n            this.set(\"_iAdvanceFilterEdit\", iIndex);\n            this.set(\"_bShowAddOrQuestion\", false);\n\n            // This is so that the AND and OR question is faked to be answered when edit is clicked\n            this.set(\"_bAndOrQuestionAnd\", objFilterItem.mFilterValue[iIndex].bA);\n            this.set(\"_bAndOrQuestionOr\", objFilterItem.mFilterValue[iIndex].bO);\n\n            if (objFilterItem.sFilterType === \"custom\") {\n                objFilterItem.objFilterCustomService.funcFilterCustomSetEditState(objFilterItem, iIndex);\n            } else {\n                var objFilterValue = objFilterItem.mFilterValue[iIndex];\n\n                this._setAdvanceFilterValue(objFilterItem, objFilterValue);\n\n                Ember.run.schedule(\"afterRender\", function () {\n                    //We set the secondaries first so that they have values when the inputs init AFTER the primary has a value.\n                    if (objFilterItem.bFilterSecondary) {\n                        var arrSecondaries = _this7.get(\"objHeaderSecondaries.arrFilterSecondary_\" + objFilterItem.sProperty);\n\n                        _this7.get(\"_objFilterService\").setValuesForSecondariesFilter(arrSecondaries, objFilterValue);\n\n                        //We need to set the primary value again if we had secondaries to ensure that all inputs render with\n                        //the correct state, value and floating label.\n                        _this7._setAdvanceFilterValue(objFilterItem, objFilterValue);\n\n                        _this7._funcSecondariesObserver();\n                    }\n\n                    if (objFilterValue.mValue === \"null\") {\n                        if (a24Core.isEmpty(_this7.get(\"_arrQueryType\").findBy(\"sValue\", _this7.get(\"_objLibConstants\").CARD_DATAGRID_FILTER_QUERY_TYPE_EMPTY))) {\n                            _this7.set(\"_objSelectedQueryType\", null);\n                        } else {\n                            _this7.set(\"_objSelectedQueryType\", {\n                                sValue: _this7.get(\"_objLibConstants\").CARD_DATAGRID_FILTER_QUERY_TYPE_EMPTY\n                            });\n                        }\n                    } else if (objFilterValue.bStartWith) {\n                        if (a24Core.isEmpty(_this7.get(\"_arrQueryType\").findBy(\"sValue\", _this7.get(\"_objEnumEmberLibService.filterOptionsTextType.STARTS_WITH.backend\")))) {\n                            _this7.set(\"_objSelectedQueryType\", null);\n                        } else {\n                            _this7.set(\"_objSelectedQueryType\", {\n                                sValue: _this7.get(\"_objEnumEmberLibService.filterOptionsTextType.STARTS_WITH.backend\")\n                            });\n                        }\n                    } else if (objFilterValue.bEndsWith) {\n                        if (a24Core.isEmpty(_this7.get(\"_arrQueryType\").findBy(\"sValue\", _this7.get(\"_objEnumEmberLibService.filterOptionsTextType.ENDS_WITH.backend\")))) {\n                            _this7.set(\"_objSelectedQueryType\", null);\n                        } else {\n                            _this7.set(\"_objSelectedQueryType\", {\n                                sValue: _this7.get(\"_objEnumEmberLibService.filterOptionsTextType.ENDS_WITH.backend\")\n                            });\n                        }\n                    } else if (objFilterValue.bLike) {\n                        if (a24Core.isEmpty(_this7.get(\"_arrQueryType\").findBy(\"sValue\", _this7.get(\"_objLibConstants.CARD_DATAGRID_FILTER_QUERY_TYPE_CONTAINS\")))) {\n                            _this7.set(\"_objSelectedQueryType\", null);\n                        } else {\n                            _this7.set(\"_objSelectedQueryType\", {\n                                sValue: _this7.get(\"_objLibConstants.CARD_DATAGRID_FILTER_QUERY_TYPE_CONTAINS\")\n                            });\n                        }\n                    } else if (objFilterValue.bDelimitedNot) {\n                        if (a24Core.isEmpty(_this7.get(\"_arrQueryType\").findBy(\"sValue\", _this7.get(\"_objEnumEmberLibService.filterOptionsTextType.IS_NOT.backend\")))) {\n                            _this7.set(\"_objSelectedQueryType\", null);\n                        } else {\n                            _this7.set(\"_objSelectedQueryType\", {\n                                sValue: _this7.get(\"_objEnumEmberLibService.filterOptionsTextType.IS_NOT.backend\")\n                            });\n                        }\n                    } else {\n                        if (a24Core.isEmpty(_this7.get(\"_arrQueryType\").findBy(\"sValue\", _this7.get(\"_objEnumEmberLibService.filterOptionsTextType.IS.backend\")))) {\n                            _this7.set(\"_objSelectedQueryType\", null);\n                        } else {\n                            _this7.set(\"_objSelectedQueryType\", {\n                                sValue: _this7.get(\"_objEnumEmberLibService.filterOptionsTextType.IS.backend\")\n                            });\n                        }\n                    }\n                });\n            }\n\n            Ember.run.next(function () {\n                arrObservers.forEach(function (objObserver) {\n                    Ember.addObserver(objObserver.objSubject, objObserver.sProperty, objObserver.objContext, objObserver.funcCallback);\n                });\n            });\n        },\n        _setAdvanceFilterValue: function _setAdvanceFilterValue(objFilterItem, objFilterValue) {\n            if (objFilterItem.sFilterType === \"suggest\") {\n                this.setFilterValue(objFilterValue.mValue + \"||\" + objFilterValue.sFilterValue, objFilterItem.sFilterType, objFilterItem.sFilterFromValue, objFilterItem.sFilterToValue, objFilterItem.arrMappingData, false, objFilterItem.bFilterAllowTime);\n            } else if (objFilterItem.sFilterType === \"date\") {\n                if (objFilterValue.bTo) {\n                    this.setFilterValue(objFilterValue.sFilterValue, objFilterItem.sFilterType, null, objFilterValue.mValue, objFilterItem.arrMappingData, true, objFilterItem.bFilterAllowTime);\n                } else if (objFilterValue.bFrom) {\n                    this.setFilterValue(objFilterValue.sFilterValue, objFilterItem.sFilterType, objFilterValue.mValue, null, objFilterItem.arrMappingData, true, objFilterItem.bFilterAllowTime);\n                } else {\n                    this.setFilterValue(objFilterValue.sFilterValue, objFilterItem.sFilterType, objFilterValue.mValue.sFrom, objFilterValue.mValue.sTo, objFilterItem.arrMappingData, true, objFilterItem.bFilterAllowTime);\n                }\n            } else {\n                this.setFilterValue(objFilterValue.mValue, objFilterItem.sFilterType, objFilterItem.sFilterFromValue, objFilterItem.sFilterToValue, objFilterItem.arrMappingData, false, objFilterItem.bFilterAllowTime);\n            }\n        },\n\n        actions: {\n            changeShowSaveAction: function changeShowSaveAction(bValue) {\n                this.set(\"bShowSaveAction\", bValue);\n            },\n            filterOptionsClicked: function filterOptionsClicked() {\n                this.filterOptionButtonClick(true);\n            },\n            filterTagClicked: function filterTagClicked(objFilterItem, iIndex) {\n                var _this8 = this;\n\n                this.filterOptionButtonClick(false);\n\n                //This is to stop the funcFilterPrimaryChange functions from firing during setup of filter when clicked from\n                //tag\n                this.set(\"_bFromTagClick\", true);\n                Ember.run.next(function () {\n                    _this8.set(\"_bFromTagClick\", false);\n                });\n\n                //NOTE for future, first set the _bAndOrQuestionAnd and _bAndOrQuestionOr to the correct values before\n                //the next line that sets the _objSelectedFilterOption.\n                //NOTE since we will be editing items out of sync setting the _bAndOrQuestionAnd and _bAndOrQuestionOr will\n                //not make sense, instead during an edit we should probably only show the \"Apply filter\" button.\n\n                //First let the secondaries know of preimary value so they can setup correctly before the filter tries to\n                //show with the existing values\n                //This needs to happen before _objSelectedFilterOption is set since the setting of the\n                //_objSelectedFilterOption puts the process in motion\n                if (a24Core.isEmpty(objFilterItem.sReactFilterRoute) && (objFilterItem.bFilterSecondary || objFilterItem.bFilterAnd || objFilterItem.bFilterOr || objFilterItem.sFilterType === \"custom\")) {\n                    if (iIndex !== -1) {\n                        if (a24Core.isEmpty(iIndex)) {\n                            iIndex = 0;\n                        }\n                        var objFilterValue = objFilterItem.mFilterValue[iIndex];\n                        var sFilterValue = \"\";\n                        var arrSecondaries = this.get(\"objHeaderSecondaries.arrFilterSecondary_\" + objFilterItem.sProperty);\n                        if (objFilterItem.sFilterType === \"suggest\") {\n                            sFilterValue = objFilterValue.mValue + \"||\" + objFilterValue.sFilterValue;\n                        } else {\n                            sFilterValue = objFilterValue.mValue;\n                        }\n                        if (!a24Core.isEmpty(arrSecondaries)) {\n                            for (var i = 0; i < arrSecondaries.length; i++) {\n                                if (!a24Core.isEmpty(arrSecondaries[i].funcFilterPrimaryChange)) {\n                                    arrSecondaries[i].funcFilterPrimaryChange(sFilterValue, this.get(\"_objSelectedFilterOption\"), arrSecondaries[i]);\n                                }\n                            }\n                        }\n                    }\n                }\n\n                this.set(\"_objSelectedFilterOption\", objFilterItem);\n                if (a24Core.isEmpty(objFilterItem.sReactFilterRoute) && (objFilterItem.bFilterSecondary || objFilterItem.bFilterAnd || objFilterItem.bFilterOr || objFilterItem.sFilterType === \"custom\")) {\n                    if (iIndex === -1) {\n                        return;\n                    }\n\n                    this.advanceFilterTagClicked(objFilterItem, iIndex);\n\n                    return; //return needs to stay here to skip the logic below since that is for non advance filter items.\n                }\n\n                if (!a24Core.isEmpty(objFilterItem.sReactFilterRoute)) {\n                    //return needs to stay here to skip the logic below since that is for non advance filter items.\n                    return;\n                }\n\n                this.setFilterValue(objFilterItem.sFilterValue, objFilterItem.sFilterType, objFilterItem.sFilterFromValue, objFilterItem.sFilterToValue, objFilterItem.arrMappingData, false, objFilterItem.bFilterAllowTime);\n            },\n            addFilterAction: function addFilterAction(bDoAndNext, bDoOrNext) {\n                this.addFilter(bDoAndNext, bDoOrNext);\n            },\n            removeFilterAction: function removeFilterAction(sProperty, iIndex) {\n                this.removeFilter(sProperty, iIndex);\n            },\n            closeFilterDropdown: function closeFilterDropdown() {\n                var objMultiDropDown = $(this.$(\".multiple-select-dropdown.active\"));\n\n                if (!a24Core.isEmpty(objMultiDropDown)) {\n                    objMultiDropDown.trigger(\"close\");\n                } else {\n                    this.set(\"_bDisplayFilterChoices\", false);\n                    if (!a24Core.isEmpty(this.get(\"cardDatagridFilterDropdownCloseEvent\"))) {\n                        this.get(\"cardDatagridFilterDropdownCloseEvent\")();\n                    }\n                }\n            },\n            customActionClicked: function customActionClicked(objAction) {\n                if (!a24Core.isEmpty(this.get(\"customActionClicked\"))) {\n                    return this.get(\"customActionClicked\")(objAction);\n                }\n            },\n            cardDatagridColumnToggleChangeEvent: function cardDatagridColumnToggleChangeEvent() {\n                if (!a24Core.isEmpty(this.get(\"cardDatagridColumnToggleChangeEvent\"))) {\n                    this.set(\"bShowSaveAction\", true);\n                    return this.get(\"cardDatagridColumnToggleChangeEvent\")();\n                }\n            },\n            setAndOrChoice: function setAndOrChoice(bAnd, bOr) {\n                this.set(\"_bShowAddOrQuestion\", false);\n                this.set(\"_bAndOrQuestionAnd\", bAnd);\n                this.set(\"_bAndOrQuestionOr\", bOr);\n            },\n            reloadActionClicked: function reloadActionClicked() {\n                if (!a24Core.isEmpty(this.get(\"cardDatagridReloadButtonClickEvent\"))) {\n                    return this.get(\"cardDatagridReloadButtonClickEvent\")();\n                }\n            },\n            customFilterDisplayAddButtonEvent: function customFilterDisplayAddButtonEvent(bShow) {\n                this.set(\"_bDisplayAddButton\", bShow);\n            },\n\n            onRecieveReactFilterData: function onRecieveReactFilterData(objData) {\n                if (!a24Core.isEmpty(objData)) {\n                    if (objData.type === \"app_ready\") {\n                        this.set(\"_bReactFilterPopupLoading\", false);\n                    } else if (objData.type === \"datagrid_filter_data\") {\n                        this.set(\"_bShowReactFilterIframe\", false);\n                        if (a24Core.isEmpty(objData.data)) {\n                            this.removeFilter(this.get(\"_objSelectedFilterOption.sProperty\"), -1, true);\n                        } else {\n                            this.set(\"_mFilterValueReact\", objData.data);\n                            this.addFilter(false, false);\n                        }\n                    } else if (objData.type === \"close\") {\n                        this.set(\"_bShowReactFilterIframe\", false);\n                    } else if (objData.type === \"datagrid_column_data\") {\n                        this.set(\"_bShowReactFilterIframe\", false);\n                        this.set(\"bShowSaveAction\", true);\n                        if (!a24Core.isEmpty(objData.data)) {\n                            for (var i = 0; i < objData.data.length; i++) {\n                                var objItem = this.get(\"arrAllowedHeaders\").findBy(\"sProperty\", objData.data[i].property);\n                                if (!a24Core.isEmpty(objItem)) {\n                                    Ember.set(objItem, \"bShowHeader\", objData.data[i].show);\n                                }\n                            }\n                            if (!a24Core.isEmpty(this.get(\"cardDatagridColumnToggleChangeProjectionEvent\"))) {\n                                return this.get(\"cardDatagridColumnToggleChangeProjectionEvent\")(objData.data);\n                            }\n                        }\n                    }\n                }\n            },\n            onShowReactColumnProjection: function onShowReactColumnProjection() {\n                var arrColumns = [];\n                this.get(\"arrAllowedHeaders\").forEach(function (objItem) {\n                    if (!Ember.get(objItem, \"bSilent\")) {\n                        arrColumns.push({\n                            property: objItem.sProperty,\n                            title: objItem.sTitle,\n                            show: objItem.bShowHeader ? true : false\n                        });\n                    }\n                });\n\n                this.set(\"_bShowReactFilterIframe\", true);\n                this.set(\"_objReactPopupPostData\", {\n                    type: \"trigger_route\",\n                    data: {\n                        route: \"datagrid/columnEditor/show-hide-column\",\n                        data: arrColumns\n                    }\n                });\n            },\n            showAlertAction: function showAlertAction(sText, sSeverity) {\n                if (!a24Core.isEmpty(this.get(\"showAlertAction\"))) {\n                    this.get(\"showAlertAction\")(sText, sSeverity);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/card-datagrid-pager\", [\"exports\", \"a24-ember-lib/templates/components/card-datagrid-pager\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _cardDatagridPager, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _cardDatagridPager.default,\n        iResultCount: 0, // The total result count\n        iPage: 1, // The page\n        iPerPage: 25, // The amount of items for each page\n        iResultCountLimit: null,\n        iResultsForCurrentPage: 0,\n        sOfSeparator: \"\", // The \"of\" separator in \"x - y of z\"\n        sToSeparator: \"\", // The \"-\" separator in \"x - y of z\"\n        bPagerLoading: false,\n        bResultCountReturned: false,\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objEmberLibString: Ember.inject.service(\"a24-strings-ember-lib\"),\n        _iPageMin: 0,\n        _iPageMax: 0,\n        _bIsFirstPage: false,\n        _bIsLastPage: false,\n        _bPagerClickable: false,\n        _bPagerClicked: false,\n        _iFromPageDisplay: 0,\n        _iToPageDisplay: 0,\n        _sResultCount: \"\",\n        _bPreviousPage: false,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            if (a24Core.isEmpty(this.get(\"sOfSeparator\"))) {\n                this.set(\"sOfSeparator\", this.get(\"_objStringsService\").getString(\"of\").toLowerCase());\n            }\n            if (a24Core.isEmpty(this.get(\"sToSeparator\"))) {\n                this.set(\"sToSeparator\", this.get(\"_objStringsService\").getString(\"to\").toLowerCase());\n            }\n\n            this.calculatePageLimits();\n\n            // Notify parent of the new page\n            var objPageQuery = {\n                page: {\n                    mValue: this.get(\"iPage\")\n                },\n                per_page: {\n                    mValue: this.get(\"iPerPage\")\n                }\n            };\n            if (!a24Core.isEmpty(this.get(\"cardDatagridPagerInitEvent\"))) {\n                this.get(\"cardDatagridPagerInitEvent\")(objPageQuery);\n            }\n        },\n        calculatePageLimits: Ember.observer(\"iResultCount\", \"iPage\", \"bResultCountReturned\", function () {\n            var iPageMin = 1;\n            var iPageMax = 1;\n\n            var iResultCount = this.get(\"iResultCount\");\n            var iResultsForCurrentPage = this.get(\"iResultsForCurrentPage\");\n            var iPage = this.get(\"iPage\");\n\n            if (iResultCount > 0) {\n                // If there are more than 0 results\n                var iPerPage = this.get(\"iPerPage\");\n                var iResultsOnLastPage = iResultCount % iPerPage;\n                var iPages = (iResultCount - iResultsOnLastPage) / iPerPage;\n\n                // This means we only have one page\n                if (iResultsOnLastPage !== 0) {\n                    iPages++; // Add single page to the iPages count\n                }\n\n                iPageMin = 1;\n                iPageMax = iPages;\n\n                if (iPage > 1 && iResultsForCurrentPage == 0) {\n                    // gone page last page\n                    iResultCount = (iPage - 1) * iPerPage + 1;\n                }\n            }\n\n            if (!a24Core.isEmpty(this.get(\"iResultCountLimit\")) && this.get(\"iResultCountLimit\") === iResultCount && !this.get(\"bResultCountReturned\") // check if the actual result count was returned,\n            // this is used in case the actual result count = result count limit\n            ) {\n                    this.set(\"_sResultCount\", this.get(\"_objEmberLibString\").getString(\"many\"));\n                    this.set(\"_bPagerClickable\", true);\n                } else {\n                this.set(\"_sResultCount\", iResultCount);\n                this.set(\"_bPagerClickable\", false);\n            }\n            // Resets the clicked flag since the result count was changed\n            this.set(\"_bPagerClicked\", false);\n\n            this.set(\"_iPageMin\", iPageMin);\n            this.set(\"_iPageMax\", iPageMax);\n\n            // Update the page display\n            this.updatePage(iPage, false);\n        }),\n        recalculateRange: Ember.observer(\"iResultsForCurrentPage\", \"bResultCountReturned\", function () {\n            var iResultCount = this.get(\"iResultCount\");\n            var iResultsForCurrentPage = this.get(\"iResultsForCurrentPage\");\n            if (!a24Core.isEmpty(this.get(\"iResultCountLimit\")) && iResultsForCurrentPage >= 0 && iResultCount >= this.get(\"iResultCountLimit\")) {\n                var iPage = this.get(\"iPage\");\n                var iPerPage = this.get(\"iPerPage\");\n                var iFromResult = (iPage - 1) * iPerPage + 1;\n                var iToResult = iFromResult + iResultsForCurrentPage - 1;\n\n                if (iResultsForCurrentPage > 0 && iToResult >= iResultCount) {\n                    this.set(\"_iToPageDisplay\", iToResult);\n                }\n\n                if (iResultsForCurrentPage === 0 || iResultsForCurrentPage < iPerPage) {\n\n                    if (iResultsForCurrentPage === 0) {\n                        this.set(\"_sResultCount\", iFromResult);\n                        this.set(\"_iToPageDisplay\", iFromResult);\n                    } else {\n\n                        this.set(\"_sResultCount\", iToResult);\n                    }\n                    this.set(\"_bPagerClickable\", false);\n                    this.set(\"_bIsLastPage\", true);\n                } else {\n                    if (this.get(\"iResultCountLimit\") === iResultCount && !this.get(\"bResultCountReturned\")) {\n                        this.set(\"_sResultCount\", this.get(\"_objEmberLibString\").getString(\"many\"));\n                        this.set(\"_bPagerClickable\", true);\n                    }\n                    this.set(\"_bIsLastPage\", false);\n                }\n            }\n        }),\n        updatePage: function updatePage(iPage, bFireEvent) {\n            var iPageMin = this.get(\"_iPageMin\");\n            var iPageMax = this.get(\"_iPageMax\");\n            var iPerPage = this.get(\"iPerPage\");\n            var iFromResult = (iPage - 1) * iPerPage + 1;\n            var iToResult = iFromResult + iPerPage - 1;\n            var iResultCount = this.get(\"iResultCount\");\n\n            // Calculate whether the page is first and store\n            this.set(\"_bIsFirstPage\", iPage === iPageMin);\n            // Calculate whether the page is last and store\n            if (a24Core.isEmpty(this.get(\"iResultCountLimit\")) || !a24Core.isEmpty(this.get(\"iResultCountLimit\")) && iResultCount > 0 && iToResult <= this.get(\"iResultCountLimit\") || iResultCount === 0 // do the last page check if current page is less than the limit\n            ) {\n                    this.set(\"_bIsLastPage\", iPage === iPageMax);\n                }\n\n            // Set the page\n            this.set(\"iPage\", iPage);\n\n            // Call function to update the display\n            this.updateDisplay(bFireEvent);\n        },\n        updateDisplay: function updateDisplay(bFireEvent) {\n\n            // Get variables\n            var iResultCount = this.get(\"iResultCount\");\n            var iPage = this.get(\"iPage\");\n            var iPerPage = this.get(\"iPerPage\");\n            var iResultsForCurrentPage = this.get(\"iResultsForCurrentPage\");\n\n            // Get starting count\n            var iFromResult = (iPage - 1) * iPerPage + 1;\n\n            // Get ending count\n            var iToResult = iFromResult + iPerPage - 1;\n\n            // If the result count is 0\n            if (iResultCount === 0) {\n                iFromResult = iResultCount;\n            }\n\n            // If the ending count is larger than the last item or going to next page,\n            // when going to a previous page we don't need to rely on the number of\n            // results returned to work out the page range\n            if (!this.get(\"_bPreviousPage\") && iToResult > iResultCount) {\n                this.set(\"_iToPageDisplay\", \"\");\n                if (a24Core.isEmpty(this.get(\"iResultCountLimit\")) || iResultCount !== this.get(\"iResultCountLimit\")) {\n                    iToResult = iResultCount; // Limit the ending count\n                    this.set(\"_iToPageDisplay\", iToResult);\n                } else if (iResultsForCurrentPage === 0) {\n                    this.set(\"_iToPageDisplay\", iFromResult);\n                }\n            } else {\n                this.set(\"_iToPageDisplay\", iToResult);\n            }\n\n            this.set(\"_iFromPageDisplay\", iFromResult);\n            this.set(\"_bPreviousPage\", false);\n\n            // If we want to fire the event\n            if (bFireEvent) {\n                // Notify parent of the new page\n                var objPageQuery = {\n                    page: {\n                        mValue: iPage\n                    },\n                    per_page: {\n                        mValue: iPerPage\n                    }\n                };\n                if (!a24Core.isEmpty(this.get(\"cardDatagridPagerEvent\"))) {\n                    this.get(\"cardDatagridPagerEvent\")(objPageQuery);\n                }\n            }\n        },\n        actions: {\n            pagerClicked: function pagerClicked() {\n                if (this.get(\"_bPagerClickable\")) {\n                    this.set(\"_bPagerClicked\", true);\n                    if (!a24Core.isEmpty(this.get(\"cardDatagridPagerManyClicked\"))) {\n                        this.get(\"cardDatagridPagerManyClicked\")();\n                    }\n                }\n            },\n            firstPageClick: function firstPageClick() {\n                // This is for the future when we want \"back to first page\" logic\n                //this.updatePage(this.get(\"_iPageMin\"), true);\n            },\n            previousPageClick: function previousPageClick() {\n                this.set(\"iResultsForCurrentPage\", -1);\n                this.set(\"_bPreviousPage\", true);\n                var iPage = this.get(\"iPage\");\n                iPage--;\n                this.updatePage(iPage, true);\n            },\n            nextPageClick: function nextPageClick() {\n                this.set(\"iResultsForCurrentPage\", -1);\n                this.set(\"_bPreviousPage\", false);\n                var iPage = this.get(\"iPage\");\n                iPage++;\n                this.updatePage(iPage, true);\n            },\n            lastPageClick: function lastPageClick() {\n                // This is for the future when we want \"go to last page\" logic\n                //this.updatePage(this.get(\"_iPageMax\"), true);\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/card-datagrid-selected-item\", [\"exports\", \"a24-ember-lib/templates/components/card-datagrid-selected-item\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _cardDatagridSelectedItem, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _cardDatagridSelectedItem.default,\n        classNameBindings: [\"bHasSelectedItems:cover-parent\"],\n        arrSelectedItems: null,\n        bHasSelectedItems: false,\n        sSelected: \"\",\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            if (a24Core.isEmpty(this.get(\"arrSelectedItems\"))) {\n                this.set(\"arrSelectedItems\", []);\n            }\n        },\n        setSelectedText: Ember.observer(\"arrSelectedItems\", function () {\n            var iSelectedItems = 0;\n            if (!a24Core.isEmpty(this.get(\"arrSelectedItems\"))) {\n                iSelectedItems = this.get(\"arrSelectedItems\").length;\n                this.set(\"bHasSelectedItems\", true);\n                this.set(\"sSelected\", iSelectedItems + \" \" + this.get(\"_objStringsService\").getString(\"itemsSelected\"));\n            } else {\n                this.set(\"bHasSelectedItems\", false);\n                this.set(\"sSelected\", \"\");\n            }\n        }),\n        actions: {\n            clearSelected: function clearSelected() {\n                this.get(\"arrSelectedItems\").forEach(function (objDataItem) {\n                    Ember.set(objDataItem, \"bSelected\", false);\n                });\n                this.set(\"arrSelectedItems\", null);\n                this.set(\"bHasSelectedItems\", false);\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/card-datagrid-table\", [\"exports\", \"a24-ember-lib/templates/components/card-datagrid-table\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _cardDatagridTable, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _cardDatagridTable.default,\n        // ember variables\n        classNames: [\"cardDatagridTable\"],\n        // parameters\n        bDisableKeyboardShortcuts: false,\n        bSelectColumn: true,\n        //40 is the smallest we can go, html tr/td does not allow it to go smaller, determined from font/padding border\n        //NOTE: if your content is bigger it will force the row bigger and scroll calcs will be WRONG. iRowHeight should\n        //      match your biggest possible row height\n        iRowHeight: null,\n        iMaxHeight: null, //Min height is 100px, so max height can not be smaller\n        iMinWidth: null, //Min width the datagrid is allowed to be, small screens(mobile) will get horizontal scroll\n        arrHeaders: null,\n        iMinColWidthDefault: null,\n        objDatagridConfig: null,\n        arrData: null,\n        bLoading: false,\n        bAllowSorting: true,\n        // variables\n        sSortAsc: \"asc\",\n        sSortDesc: \"desc\",\n        // private variables\n        _funcKeyDown: null,\n        _arrSelectedItems: null,\n        _bAllSelected: false,\n        _sSelectAllConstant: \"SELECT_ALL\",\n        _sNoDataMessage: \"\",\n        _objColumnWidthRecalc: null,\n        _sRowHeight: null,\n        _sTableInnerContainerId: null,\n        _sTableContentContainerId: null,\n        _sTableContentTopSpacerId: null,\n        _sTableContentBottomSpacerId: null,\n        _sMinWidth: null,\n        _iMinHeight: 100,\n        _iVisibleRecords: 0,\n        _arrVisibleRecords: null,\n        _objSpacersCalc: null,\n        _bRenderLoad: false,\n        _iPrevLeft: 0,\n        _iCheckColumnWidth: 68,\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _sContextTimezone: null,\n        _objRecalcColumnWidths: null,\n        _iMinColWidthDefaultInternal: 150,\n        _iActiveIndex: -1,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"_sNoDataMessage\", this.get(\"_objStringsService\").getString(\"noResultsFound\"));\n\n            var objThis = this;\n            this.set(\"_sContextTimezone\", this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n            this.set(\"_sTableInnerContainerId\", Ember.guidFor({}));\n            this.set(\"_sTableContentContainerId\", Ember.guidFor({}));\n            this.set(\"_sTableContentTopSpacerId\", Ember.guidFor({}));\n            this.set(\"_sTableContentBottomSpacerId\", Ember.guidFor({}));\n\n            if (a24Core.isEmpty(this.get(\"arrHeaders\"))) {\n                this.set(\"arrHeaders\", []);\n            }\n            if (a24Core.isEmpty(this.get(\"arrData\"))) {\n                this.set(\"arrData\", []);\n            }\n            if (a24Core.isEmpty(this.get(\"_arrSelectedItems\"))) {\n                this.set(\"_arrSelectedItems\", []);\n            }\n\n            this.setColumnSortIndicator();\n\n            // Loop over the headers to create the initial query sort object\n            var arrHeaders = this.get(\"arrHeaders\");\n            var objSortQuery = {};\n            for (var i = 0; i < arrHeaders.length; i++) {\n                if (!a24Core.isEmpty(arrHeaders[i].sAsc)) {\n                    var objQueryItem = {};\n                    objQueryItem.mValue = arrHeaders[i].sAsc;\n                    objQueryItem.bSortBy = true;\n                    objSortQuery[arrHeaders[i].sProperty] = objQueryItem;\n                }\n            }\n            if (!a24Core.isEmpty(this.get(\"cardDatagridTableInitSort\"))) {\n                this.get(\"cardDatagridTableInitSort\")(objSortQuery);\n            }\n\n            Ember.run.scheduleOnce(\"afterRender\", this, function () {\n                objThis._setupContainers();\n\n                var funcKeyDown = function funcKeyDown(objEvent) {\n                    Ember.run(function () {\n                        if (!objThis.get(\"bLoading\") && !objThis.get(\"bDisableKeyboardShortcuts\") && !Ember.$(\"body\").hasClass(\"modal-open\") && objEvent.target.nodeName !== \"INPUT\" && objEvent.target.nodeName !== \"TEXTAREA\") {\n                            if (objEvent.keyCode === 9) {\n                                var iIndex = null;\n\n                                if (objEvent.shiftKey === true) {\n                                    iIndex = objThis.get(\"_iActiveIndex\") - 1;\n                                } else {\n                                    iIndex = objThis.get(\"_iActiveIndex\") + 1;\n                                }\n\n                                if (iIndex > -1 && iIndex < objThis.get(\"_arrVisibleRecords.length\")) {\n                                    if (!a24Core.isEmpty(objThis.$(\".tableCheck > .form-group\").eq(objThis.get(\"_iActiveIndex\")))) {\n                                        objThis.$(\".tableCheck > .form-group\").eq(objThis.get(\"_iActiveIndex\")).removeClass(\"is-active\");\n                                    }\n                                    if (!a24Core.isEmpty(objThis.$(\".tableCheck > .form-group\").eq(iIndex))) {\n                                        objEvent.preventDefault();\n                                        objThis.$(\".tableCheck > .form-group\").eq(iIndex).addClass(\"is-active\");\n                                        objThis.set(\"_iActiveIndex\", iIndex);\n                                    }\n                                }\n                            } else if (objEvent.keyCode === 32) {\n                                objEvent.preventDefault();\n                                if (objThis.get(\"_iActiveIndex\") > -1) {\n                                    var objRowData = objThis.get(\"arrData\").objectAt(objThis.get(\"_iActiveIndex\"));\n                                    Ember.set(objRowData, \"bSelected\", !objRowData.bSelected);\n                                }\n                            } else if (objEvent.keyCode === 13) {\n                                objEvent.preventDefault();\n                                var arrSelectedItems = objThis.get(\"_arrSelectedItems\");\n                                var objSingleItemAction = objThis.get(\"objDatagridConfig.arrSingleItemSelectActions.firstObject\");\n                                var objMultiItemAction = objThis.get(\"objDatagridConfig.arrMultiItemSelectActions.firstObject\");\n\n                                if (arrSelectedItems.length === 1 && !a24Core.isEmpty(objSingleItemAction)) {\n                                    if (!a24Core.isEmpty(objSingleItemAction.funcFilterFunc)) {\n                                        if (objSingleItemAction.funcFilterFunc(arrSelectedItems) === true) {\n                                            objSingleItemAction.executeCardAction(arrSelectedItems);\n                                        }\n                                    } else {\n                                        objSingleItemAction.executeCardAction(arrSelectedItems);\n                                    }\n                                } else if (arrSelectedItems.length > 1 && !a24Core.isEmpty(objMultiItemAction)) {\n                                    if (!a24Core.isEmpty(objMultiItemAction.funcFilterFunc)) {\n                                        if (objMultiItemAction.funcFilterFunc(arrSelectedItems) === true) {\n                                            objMultiItemAction.executeCardAction(arrSelectedItems);\n                                        }\n                                    } else {\n                                        objMultiItemAction.executeCardAction(arrSelectedItems);\n                                    }\n                                }\n                            }\n                        }\n                    });\n                };\n\n                this.set(\"_funcKeyDown\", funcKeyDown);\n\n                Ember.$(window).on(\"keydown\", this.get(\"_funcKeyDown\"));\n            });\n        },\n        _setupContainers: function _setupContainers() {\n            if (a24Core.isEmpty(this.$(\"#\" + this.get(\"_sTableInnerContainerId\")))) {\n                //This means the elements are not in the DOM yet and thus we should not do anything yet\n                return;\n            }\n\n            //Set the defaults if none were supplied, seems it does not work in the init since it will go back to\n            //undefined when binding it to an property on an object when that property does not exist on the object\n            if (a24Core.isEmpty(this.get(\"iRowHeight\"))) {\n                this.set(\"iRowHeight\", 40);\n            }\n            if (a24Core.isEmpty(this.get(\"iMaxHeight\"))) {\n                this.set(\"iMaxHeight\", 100);\n            }\n\n            if (a24Core.isEmpty(this.get(\"iMinWidth\"))) {\n                this.set(\"iMinWidth\", 700);\n            }\n\n            var objController = this;\n\n            // This is used to cater for mobile but now that each column has a min width it is not longer needed\n            // this.setMinWidth();\n\n            //Set min height on the outer container\n            this.$().css(\"min-height\", this.get(\"_iMinHeight\") + \"px\");\n\n            var objTableInnerContainer = this.$(\"#\" + this.get(\"_sTableInnerContainerId\"));\n            //Set min height on the inner container\n            objTableInnerContainer.css(\"min-height\", this.get(\"_iMinHeight\") + \"px\");\n\n            if (!this.get(\"bDontUseVirtualization\")) {\n                //Recalc the spacer heights each 200 milli seconds of scrolling\n                objTableInnerContainer.scroll(function () {\n                    //only do the render if we have vertical scolling\n                    var iScrollLeft = objTableInnerContainer.scrollLeft();\n\n                    //If the last left scroll matches the current we know the user scrolled vertically\n                    if (iScrollLeft === objController.get(\"_iPrevLeft\")) {\n                        objController.set(\"_bRenderLoad\", true);\n                        Ember.run.cancel(objController.get(\"_objSpacersCalc\"));\n                        objController.set(\"_objSpacersCalc\", Ember.run.later(function () {\n                            objController.setSpacersHeight();\n                            objController.set(\"_bRenderLoad\", false);\n                        }, 200));\n                    } else {\n                        objController.set(\"_iPrevLeft\", iScrollLeft);\n                    }\n                });\n            }\n\n            //Recalc the column widths each 100 milli seconds as the window resizes\n            this.set(\"_objRecalcColumnWidths\", function () {\n                Ember.run.cancel(objController.get(\"_objColumnWidthRecalc\"));\n                objController.set(\"_objColumnWidthRecalc\", Ember.run.later(function () {\n                    objController.setColumnWidths();\n                }, 100));\n            });\n            $(window).resize(this.get(\"_objRecalcColumnWidths\"));\n\n            this.setRowHeight();\n            this.setMaxHeight();\n            this.setVisibleItems();\n        },\n        willDestroyElement: function willDestroyElement() {\n            this._super.apply(this, arguments);\n\n            //remove the resize event listener from the window\n            $(window).unbind(\"resize\", this.get(\"_objRecalcColumnWidths\"));\n            Ember.run.cancel(this.get(\"_objColumnWidthRecalc\"));\n            Ember.run.cancel(this.get(\"_objSpacersCalc\"));\n            Ember.$(window).off(\"keydown\", this.get(\"_funcKeyDown\"));\n        },\n        setVisibleItems: Ember.observer(\"arrData\", function () {\n            if (a24Core.isEmpty(this.$(\"#\" + this.get(\"_sTableInnerContainerId\")))) {\n                //This means the elements are not in the DOM yet and thus we should not do anything yet\n                return;\n            }\n\n            //this function's observer only fires when setting arrData to NEW array e.g this.set(\"arrData\", arrResponse)\n            //it will not fire when changing individual items OR when adding or removing items from the array\n\n            //Set scroll to top, since this will only fire when data changes and NOT when items in data changes\n            //to update each items view from outside you have to replace that item in the array\n            this.$(\"#\" + this.get(\"_sTableInnerContainerId\")).scrollTop(0);\n\n            //Work out the max possible items that can be visible at a given time based on te max height that was set.\n            var iRowHeight = this.get(\"iRowHeight\");\n            //minus one row to allow space for headers\n            var iMaxPossibleContentHeight = this.get(\"iMaxHeight\") - iRowHeight;\n\n            //Round up to make sure we have cover entire view port and plus 2, extra one for top and bottom\n            var iVisibleRecords = Math.ceil(iMaxPossibleContentHeight / iRowHeight) + 2;\n            var arrData = this.get(\"arrData\");\n            if (this.get(\"bDontUseVirtualization\")) {\n                var iRowCount = arrData.length;\n                // var iRowCount = this.$(`#${this.get(\"_sTableContentContainerId\")} > table > tbody > tr`).length;\n                iVisibleRecords = iRowCount + 2;\n            }\n\n            this.set(\"_iVisibleRecords\", iVisibleRecords);\n\n            //Add the amount of items that can be visible or add them all if there are less that the max visible items\n            var arrVisibleRecords = [];\n            if (arrData.length > iVisibleRecords) {\n                for (var i = 0; i < iVisibleRecords; i++) {\n                    arrVisibleRecords.push(arrData[i]);\n                }\n            } else {\n                arrVisibleRecords = arrData;\n            }\n            this.set(\"_arrVisibleRecords\", arrVisibleRecords);\n\n            //Set the top spacer height\n            this.$(\"#\" + this.get(\"_sTableContentTopSpacerId\")).height(0);\n\n            //Set the bottom spacer height\n            var iBottomSpacerHeight = (arrData.length - iVisibleRecords) * iRowHeight;\n            this.$(\"#\" + this.get(\"_sTableContentBottomSpacerId\")).height(iBottomSpacerHeight);\n\n            // Force a recalculation of the columns once the data has been rendered in case of any odd pixel shifts\n            // caused by the new data loaded in the datagrid\n            Ember.run.scheduleOnce(\"afterRender\", this, function () {\n                this.setColumnWidths();\n            });\n        }),\n        setSpacersHeight: function setSpacersHeight() {\n            if (a24Core.isEmpty(this.$(\"#\" + this.get(\"_sTableInnerContainerId\")))) {\n                //This means the elements are not in the DOM yet and thus we should not do anything yet\n                return;\n            }\n\n            var arrData = this.get(\"arrData\");\n            var iVisibleRecords = this.get(\"_iVisibleRecords\");\n\n            //If the data is more than the visible records we work out the new heights of the spacer items and also the\n            //items that should be in view else we set the spacers to 0 and set the visible items equal to the arrData.\n            if (arrData.length > iVisibleRecords) {\n                var objTableInnerContainer = this.$(\"#\" + this.get(\"_sTableInnerContainerId\"));\n                var iRowHeight = this.get(\"iRowHeight\");\n                var iCurrentTop = objTableInnerContainer.scrollTop();\n\n                var objTableContentTopSpacer = this.$(\"#\" + this.get(\"_sTableContentTopSpacerId\"));\n                var objTableContentBottomSpacer = this.$(\"#\" + this.get(\"_sTableContentBottomSpacerId\"));\n\n                //We floor here to get the whole amount of rows that are on top and also minus one row since we have one\n                //grace row at the top. This gives us the amount of items that can fit into the top spacer item\n                var iTopItemsAmount = Math.floor(iCurrentTop / iRowHeight) - 1;\n\n                if (iTopItemsAmount < 0) {\n                    //If the iTopItemsAmount is smaller that 0 we know we are at the top and set the top spacer to 0px\n                    iTopItemsAmount = 0;\n                } else if (iTopItemsAmount + iVisibleRecords > arrData.length) {\n                    //If the top items + allowed visible items are bigger that the actual amount of items we know\n                    //we are at the bottom of the container and that the top spacer should be actual amount of items\n                    //minus visible items\n                    iTopItemsAmount = arrData.length - iVisibleRecords;\n                }\n\n                var iTopSpacerHeight = iTopItemsAmount * iRowHeight;\n                var iBottomSpacerHeight = (arrData.length - iTopItemsAmount - iVisibleRecords) * iRowHeight;\n\n                objTableContentTopSpacer.height(iTopSpacerHeight);\n                objTableContentBottomSpacer.height(iBottomSpacerHeight);\n\n                //Visible record would be the amount from top and to the amount from top plus items that should be visible\n                this.set(\"_arrVisibleRecords\", arrData.slice(iTopItemsAmount, iTopItemsAmount + iVisibleRecords));\n            } else {\n                this.$(\"#\" + this.get(\"_sTableContentTopSpacerId\")).height(0);\n                this.$(\"#\" + this.get(\"_sTableContentBottomSpacerId\")).height(0);\n\n                this.set(\"_arrVisibleRecords\", arrData);\n            }\n        },\n        setRowHeight: function setRowHeight() {\n            if (this.get(\"iRowHeight\") < 40) {\n                this.set(\"iRowHeight\", 40);\n            }\n            this.set(\"_sRowHeight\", new Ember.String.htmlSafe(\"height: \" + this.get(\"iRowHeight\") + \"px;\"));\n        },\n        setMaxHeight: function setMaxHeight() {\n            if (a24Core.isEmpty(this.$(\"#\" + this.get(\"_sTableInnerContainerId\")))) {\n                //This means the elements are not in the DOM yet and thus we should not do anything yet\n                return;\n            }\n            if (this.get(\"iMaxHeight\") < this.get(\"_iMinHeight\")) {\n                this.set(\"iMaxHeight\", this.get(\"_iMinHeight\"));\n            }\n\n            //Minus one row to allow space for the headers\n            this.$(\"#\" + this.get(\"_sTableContentContainerId\")).css(\"max-height\", this.get(\"iMaxHeight\") - this.get(\"iRowHeight\") + \"px\");\n        },\n        setMinWidth: function setMinWidth() {\n            if (a24Core.isEmpty(this.$(\"#\" + this.get(\"_sTableInnerContainerId\")))) {\n                //This means the elements are not in the DOM yet and thus we should not do anything yet\n                return;\n            }\n            this.set(\"_sMinWidth\", new Ember.String.htmlSafe(\"min-width: \" + this.get(\"iMinWidth\") + \"px;\"));\n\n            this.$(\"#\" + this.get(\"_sTableContentContainerId\")).css(\"min-width\", this.get(\"iMinWidth\") + \"px\");\n            //We need the DOM to update with the new min width before recalcing the column widths\n            var objController = this;\n            Ember.run.schedule(\"actions\", function () {\n                objController.setColumnWidths();\n            });\n        },\n        _getParentWidthWithColumnMinWidthShortage: function _getParentWidthWithColumnMinWidthShortage(arrHeaders, iParentWidth, iTotalPercentage, iPrevShortage) {\n            if (a24Core.isEmpty(iPrevShortage)) {\n                iPrevShortage = 0;\n            }\n            var iMinWidthShortage = 0;\n            for (var i = 0; i < arrHeaders.length; i++) {\n                //We round down here. Since this is html table the last column will take up whatever pixels were left\n                // We -2 since we have borders on the table\n                // Set column width for columns which are not silent\n                if (!arrHeaders[i].bSilent) {\n                    var iColumnWidth = Math.floor(iParentWidth / iTotalPercentage * arrHeaders[i].iWidth) - 2;\n\n                    var iMinWidth = 0;\n                    if (a24Core.isEmpty(arrHeaders[i].iMinWidth)) {\n                        if (a24Core.isEmpty(this.get(\"iMinColWidthDefault\"))) {\n                            iMinWidth = this.get(\"_iMinColWidthDefaultInternal\");\n                        } else {\n                            iMinWidth = this.get(\"iMinColWidthDefault\");\n                        }\n                    } else {\n                        iMinWidth = arrHeaders[i].iMinWidth;\n                    }\n                    if (iColumnWidth < iMinWidth) {\n                        iMinWidthShortage = iMinWidthShortage + (iMinWidth - iColumnWidth);\n                    }\n                }\n            }\n\n            var iNewParentWidth = iParentWidth - (iMinWidthShortage - iPrevShortage);\n            if (iNewParentWidth < 0) {\n                iNewParentWidth = 0;\n            }\n\n            if (iNewParentWidth === iParentWidth) {\n                return iNewParentWidth;\n            } else {\n                /**\n                 * We need to do the calc again if any of the columns reached their min width because that\n                 * means the total space available has become less than expected. E.g if the parent width\n                 * was 1000px and one of the column should have been 100px but its min width is 200px, it\n                 * means that it will be using 100px more than expected, thus only leaving 900px for the\n                 * rest of the columns to use and now since the available width went from 1000px to 900px\n                 * it means that some of the other columns might have also reached min width and take up\n                 * more than expected. Thus the recursive call until the iNewParentWidth matches the\n                 * prev calculated one\n                */\n                return this._getParentWidthWithColumnMinWidthShortage(arrHeaders, iNewParentWidth, iTotalPercentage, iMinWidthShortage);\n            }\n        },\n        setColumnWidths: function setColumnWidths() {\n            var _this = this;\n\n            if (a24Core.isEmpty(this.$(\"#\" + this.get(\"_sTableInnerContainerId\")))) {\n                //This means the elements are not in the DOM yet and thus we should not do anything yet\n                return;\n            }\n\n            //Get the parent width\n            var iParentWidth = this.$(\"#\" + this.get(\"_sTableContentContainerId\")).width();\n\n            if (this.get(\"bSelectColumn\")) {\n                iParentWidth = iParentWidth - this.get(\"_iCheckColumnWidth\") - 2; //minus the checkbox column width\n            }\n\n            //Work out how much each column needs to take up in PX\n            var arrHeaders = this.get(\"arrHeaders\");\n\n            var iTotalPercentage = 0;\n            for (var j = 0; j < arrHeaders.length; j++) {\n                if (arrHeaders[j].bShowHeader && !arrHeaders[j].bSilent) {\n                    iTotalPercentage += arrHeaders[j].iWidth;\n                }\n            }\n            if (iTotalPercentage > 100) {\n                iTotalPercentage = 100;\n            }\n\n            iParentWidth = this._getParentWidthWithColumnMinWidthShortage(arrHeaders, iParentWidth, iTotalPercentage);\n\n            // Starts at 1 due to the column for the select boxes else it starts on 0\n            var iVisableCount = this.get(\"bSelectColumn\") ? 1 : 0;\n            for (var i = 0; i < arrHeaders.length; i++) {\n                //We round down here. Since this is html table the last column will take up whatever pixels were left\n                // We -2 since we have borders on the table\n                // Set column width for columns which are not silent\n                if (!arrHeaders[i].bSilent) {\n                    var iColumnWidth = Math.floor(iParentWidth / iTotalPercentage * arrHeaders[i].iWidth) - 2;\n                    var iMinWidth = 0;\n\n                    if (a24Core.isEmpty(arrHeaders[i].iMinWidth)) {\n                        if (a24Core.isEmpty(this.get(\"iMinColWidthDefault\"))) {\n                            iMinWidth = this.get(\"_iMinColWidthDefaultInternal\");\n                        } else {\n                            iMinWidth = this.get(\"iMinColWidthDefault\");\n                        }\n                    } else {\n                        iMinWidth = arrHeaders[i].iMinWidth;\n                    }\n                    if (iColumnWidth < iMinWidth) {\n                        iColumnWidth = iMinWidth;\n                    }\n                    if (this.get(\"bDontUseVirtualization\") && arrHeaders[i].bWrapText) {\n                        (function () {\n                            var funcRunOnce = function funcRunOnce(iIndex, iCount) {\n                                var objTableContent = _this.$(\"#\" + _this.get(\"_sTableContentContainerId\") + \" > table > tbody > tr:eq(1) > td:eq(\" + iCount + \")\").not(\".cardDatagridTableSpacer\");\n\n                                var iTableContentWidth = iColumnWidth;\n                                if (!a24Core.isEmpty(objTableContent)) {\n                                    iTableContentWidth = objTableContent.width();\n                                }\n\n                                _this.set(\"arrHeaders.\" + iIndex + \".sCalcWidth\", new Ember.String.htmlSafe(\"width: \" + iTableContentWidth + \"px;\"));\n                                _this.set(\"arrHeaders.\" + iIndex + \".sCalcMaxWidth\", new Ember.String.htmlSafe(\"max-width: \" + iTableContentWidth + \"px;\"));\n                            };\n                            var funcNext = function funcNext(iIndex, iCount) {\n                                Ember.run.scheduleOnce(\"afterRender\", _this, funcRunOnce, iIndex, iCount);\n                            };\n                            Ember.run.next(funcNext, i, iVisableCount);\n                        })();\n                    } else {\n                        this.set(\"arrHeaders.\" + i + \".sCalcWidth\", new Ember.String.htmlSafe(\"width: \" + iColumnWidth + \"px;\"));\n                        this.set(\"arrHeaders.\" + i + \".sCalcMaxWidth\", new Ember.String.htmlSafe(\"max-width: \" + iColumnWidth + \"px;\"));\n                    }\n                    iVisableCount++;\n                }\n            }\n        },\n        setWidthsOnShowHeader: Ember.observer(\"arrHeaders.@each.bShowHeader\", function () {\n            Ember.run.once(this, \"setColumnWidths\");\n        }),\n        repopulateSelectedItems: Ember.observer(\"arrData.@each.bSelected\", function () {\n            Ember.run.once(this, this.repopulateSelectedItemsLogic);\n        }),\n        onLoadingChange: Ember.observer(\"bLoading\", function () {\n            if (this.get(\"bLoading\")) {\n                this.set(\"_iActiveIndex\", -1);\n            }\n        }),\n        repopulateSelectedItemsLogic: function repopulateSelectedItemsLogic() {\n            // Repopulate selected items\n            // Start with an empty array\n            var arrSelectedItems = [];\n            this.get(\"arrData\").forEach(function (objDataItem) {\n                // If items selected, add item to the array\n                if (Ember.get(objDataItem, \"bSelected\")) {\n                    arrSelectedItems.push(objDataItem);\n                }\n            });\n\n            // set the selected items back on the array\n            this.set(\"_arrSelectedItems\", arrSelectedItems);\n            // if the amount of selected items are the same as the amount of total items\n            if (arrSelectedItems.length === this.get(\"arrData\").length) {\n                if (this.get(\"arrData\").length === 0) {\n                    // Unselect \"select all\" checkbox if no items are in the datagrid\n                    this.set(\"_bAllSelected\", false);\n                } else {\n                    // Select \"select all\" checkbox if all items are checked\n                    this.set(\"_bAllSelected\", true);\n                }\n            } else {\n                // Unselect \"select all\" checkbox if the selected items are less than the data items\n                this.set(\"_bAllSelected\", false);\n            }\n\n            // If the datagrid is not in loading state and it is a selection column\n            if (!this.get(\"bLoading\") && this.get(\"bSelectColumn\")) {\n                // Send the appropriate event\n                var iCountSelected = this.get(\"_arrSelectedItems\").length;\n                if (iCountSelected === 0) {\n                    // No items selected\n                    if (!a24Core.isEmpty(this.get(\"cardDatagridTableNoneSelected\"))) {\n                        this.get(\"cardDatagridTableNoneSelected\")();\n                    }\n                } else if (iCountSelected === 1) {\n                    // One item selected\n                    if (!a24Core.isEmpty(this.get(\"cardDatagridTableOneSelected\"))) {\n                        this.get(\"cardDatagridTableOneSelected\")(arrSelectedItems);\n                    }\n                } else {\n                    // Multi items selected\n                    if (!a24Core.isEmpty(this.get(\"cardDatagridTableMultiSelected\"))) {\n                        this.get(\"cardDatagridTableMultiSelected\")(arrSelectedItems);\n                    }\n                }\n            }\n        },\n        setColumnSortIndicator: function setColumnSortIndicator() {\n            var objController = this;\n            objController.get(\"arrHeaders\").forEach(function (objHeaderItem) {\n                //if the sAsc is set we know we can set a sort on the column else clear the sort bools\n                if (!a24Core.isEmpty(Ember.get(objHeaderItem, \"sAsc\"))) {\n                    if (Ember.get(objHeaderItem, \"sAsc\") === objController.get(\"sSortAsc\")) {\n                        Ember.set(objHeaderItem, \"bAsc\", true);\n                        Ember.set(objHeaderItem, \"bDesc\", false);\n                    } else {\n                        Ember.set(objHeaderItem, \"bAsc\", false);\n                        Ember.set(objHeaderItem, \"bDesc\", true);\n                    }\n                } else {\n                    // otherwise we clear the sort on the header\n                    Ember.set(objHeaderItem, \"bAsc\", false);\n                    Ember.set(objHeaderItem, \"bDesc\", false);\n                }\n            });\n        },\n        sortObserver: Ember.observer(\"arrHeaders.@each.sAsc\", function () {\n            // redo the sort on the columns\n            Ember.run.once(this, this.setColumnSortIndicator);\n        }),\n        isHeaderClickable: function isHeaderClickable(sHeaderTitle) {\n            var arrHeaders = this.get(\"arrHeaders\");\n            for (var i = 0; i < arrHeaders.length; i++) {\n                var objHeader = arrHeaders[i];\n                if (!a24Core.isEmpty(objHeader.sProperty) && objHeader.sProperty === sHeaderTitle) {\n                    return objHeader.bIsClickable;\n                }\n            }\n            return false;\n        },\n        actions: {\n            columnHeaderClicked: function columnHeaderClicked(sColumnReference, sAscendingOrder) {\n                // If not in loading state, do the column header click\n                var bAllowSort = !this.get(\"bLoading\") && this.get(\"bAllowSorting\");\n\n                // Check if the clicked column allows sorting\n                this.get(\"arrHeaders\").forEach(function (objHeaderItem) {\n                    if (Ember.get(objHeaderItem, \"sProperty\") === sColumnReference) {\n                        if (Ember.get(objHeaderItem, \"bStopColumnSort\")) {\n                            // This column may not sort\n                            bAllowSort = false;\n                        }\n                    }\n                });\n\n                // Check if the sort is allowed\n                if (bAllowSort) {\n                    var sSort = this.get(\"sSortAsc\");\n                    // If the sort is not empty\n                    if (!a24Core.isEmpty(sAscendingOrder)) {\n                        // flip if asc\n                        if (sAscendingOrder === this.get(\"sSortAsc\")) {\n                            sSort = this.get(\"sSortDesc\");\n                        }\n                        // If desc, it will still be set as asc\n                    }\n\n                    this.get(\"arrHeaders\").forEach(function (objHeaderItem) {\n                        if (Ember.get(objHeaderItem, \"sProperty\") === sColumnReference) {\n                            // If the column property matches the column reference, set the sort\n                            Ember.set(objHeaderItem, \"sAsc\", sSort);\n                        } else {\n                            // otherwise we clear the sort on a column\n                            Ember.set(objHeaderItem, \"sAsc\", null);\n                        }\n                    });\n\n                    this.get(\"arrData\").forEach(function (objDataItem) {\n                        Ember.set(objDataItem, \"bSelected\", false);\n                    });\n\n                    //Build up query param object that can be used in url call\n                    var objSortQuery = {};\n                    var objQueryItem = {};\n                    objQueryItem.mValue = sSort;\n                    objQueryItem.bSortBy = true;\n                    objSortQuery[sColumnReference] = objQueryItem;\n\n                    if (!a24Core.isEmpty(this.get(\"cardDatagridTableSort\"))) {\n                        return this.get(\"cardDatagridTableSort\")(sColumnReference, objSortQuery);\n                    }\n                }\n            },\n            onCheckBoxClicked: function onCheckBoxClicked(iIndex, mValue) {\n                // If not in loading state, do check box click events\n                if (!this.get(\"bLoading\")) {\n                    // If a checkbox is clicked\n                    if (mValue === this.get(\"_sSelectAllConstant\")) {\n                        // If the select all constant is used\n                        if (this.get(\"arrData\").length !== 0) {\n\n                            // If there is data\n                            var arrData = this.get(\"arrData\");\n                            var arrSelectedItems = this.get(\"_arrSelectedItems\");\n                            // This selection is based on whether all items are currently selected\n                            var bSelection = arrData.length !== arrSelectedItems.length;\n\n                            arrData.setEach(\"bSelected\", bSelection);\n                            this.set(\"_iActiveIndex\", -1);\n                        }\n                    } else {\n                        this.$(\".tableCheck > .form-group\").eq(this.get(\"_iActiveIndex\")).removeClass(\"is-active\");\n                        this.set(\"_iActiveIndex\", iIndex);\n                    }\n                }\n            },\n            cellClicked: function cellClicked(sProperty, objRowData) {\n                if (this.isHeaderClickable(sProperty)) {\n                    //First unselect all selected items\n                    this.get(\"arrData\").setEach(\"bSelected\", false);\n\n                    // If the cell was clicked, tick the related check box as well and make the row selected.\n                    Ember.set(objRowData, \"bSelected\", true);\n                }\n\n                // If not in loading state\n                if (!this.get(\"bLoading\")) {\n                    // Dispatch event to parent\n                    if (!a24Core.isEmpty(this.get(\"cardDatagridTableCell\"))) {\n                        return this.get(\"cardDatagridTableCell\")(sProperty, objRowData);\n                    }\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/card-heading-and-content-component\", [\"exports\", \"a24-ember-lib/templates/components/card-heading-and-content-component\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _cardHeadingAndContentComponent, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _cardHeadingAndContentComponent.default,\n        bApplyDefaultPadding: true,\n        bHideOverFlow: false,\n        sHeading: \"\",\n        sHeaderSizeClass: \"\",\n        sHeaderClass: \"\",\n        sSubHeading: \"\",\n        sSubHeaderSizeClass: \"\",\n        sSubHeaderClass: \"\",\n        bHasIcon: false,\n        sRoundButtonSize: \"\",\n        sLetter: \"\",\n        sIcon: \"\",\n        sIconFa: \"\",\n        sIconSvg: \"\",\n        sIconColor: \"\",\n        sImageUrl: \"\",\n        sIconClass: \"\",\n        sIconSizeClass: \"\",\n        bLoading: true,\n        // Action items\n        arrActionItems: null,\n        objSpecialAction: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            if (this.get(\"arrActionItems\") === null) {\n                this.set(\"arrActionItems\", []);\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/card-style-component\", [\"exports\", \"a24-ember-lib/templates/components/card-style-component\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _cardStyleComponent, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _cardStyleComponent.default,\n        classNames: [\"a24-card-style-component\"],\n        classNameBindings: [\"bHideOverFlow:ovf-hidden\"],\n        bApplyDefaultPadding: true,\n        bHideOverFlow: false,\n        init: function init() {\n            this._super.apply(this, arguments);\n        }\n    });\n});","define(\"a24-ember-lib/components/chart-component\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/templates/components/chart-component\"], function (exports, _didRenderChangesMixin, _chartComponent) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n    function _toConsumableArray(arr) {\n        if (Array.isArray(arr)) {\n            for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n                arr2[i] = arr[i];\n            }\n\n            return arr2;\n        } else {\n            return Array.from(arr);\n        }\n    }\n\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _chartComponent.default,\n        iRowHeight: 50,\n        classNames: [\"full-width\", \"position-relative\"],\n        sType: null,\n        objData: null,\n        objOptions: null,\n        arrPlugins: null,\n        _sCanvasId: null,\n        _objChart: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            this.set(\"_sCanvasId\", Ember.guidFor({}));\n        },\n\n        didInsertElement: function didInsertElement() {\n            this._super.apply(this, arguments);\n            this._setHeight();\n\n            var objContext = this.$(\"#\" + this.get(\"_sCanvasId\"));\n            var objChart = new Chart(objContext, {\n                type: this.get(\"sType\"),\n                data: this.get(\"objData\"),\n                options: this.get(\"objOptions\"),\n                plugins: this.get(\"arrPlugins\")\n            });\n            this.set(\"_objChart\", objChart);\n        },\n\n        willDestroyElement: function willDestroyElement() {\n            this._super.apply(this, arguments);\n            this.get(\"_objChart\").destroy();\n        },\n\n        didUpdateAttrs: function didUpdateAttrs() {\n            this._super.apply(this, arguments);\n            this._setHeight();\n            this.set(\"_objChart.config.data\", this.get(\"objData\"));\n            this.set(\"_objChart.config.options\", this.get(\"objOptions\"));\n            this.get(\"_objChart\").update();\n        },\n\n        _setHeight: function _setHeight() {\n            var objData = this.get(\"objData\");\n            var arrDatasetLength = objData.datasets.map(function (objDataset) {\n                return objDataset.data.length;\n            });\n            var iCount = Math.max.apply(Math, _toConsumableArray(arrDatasetLength));\n            var iHeight = iCount * this.get(\"iRowHeight\");\n            if (!a24Core.isEmpty(this.get(\"objOptions.title\")) && this.get(\"objOptions.title.display\") === true) {\n                iHeight += this.get(\"iRowHeight\");\n            }\n            if (a24Core.isEmpty(this.get(\"objOptions.legend\")) || this.get(\"objOptions.legend.display\") === true) {\n                iHeight += this.get(\"iRowHeight\");\n            }\n            this.$().css(\"height\", iHeight + \"px\");\n        }\n    });\n});","define(\"a24-ember-lib/components/collapse-section-component\", [\"exports\", \"a24-ember-lib/templates/components/collapse-section-component\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _collapseSectionComponent, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _collapseSectionComponent.default,\n        // id for the component\n        sCollapseSectionId: \"\",\n        sCollapseGroupParent: \"\",\n        // whether the component is initially expanded or collapsed\n        bExpanded: false,\n        didInsertElement: function didInsertElement() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n            Ember.run.next(function () {\n                _this.$().attr(\"id\", _this.get(\"sCollapseSectionId\"));\n                _this.$().addClass(\"collapse\");\n                var objCollapseItem = $(\"#\" + _this.get(\"sCollapseSectionId\"));\n                if (a24Core.isEmpty(_this.get(\"sCollapseGroupParent\"))) {\n                    objCollapseItem.collapse({\n                        toggle: _this.get(\"bExpanded\")\n                    });\n                } else {\n                    objCollapseItem.collapse({\n                        toggle: _this.get(\"bExpanded\"),\n                        parent: \"#\" + _this.get(\"sCollapseGroupParent\")\n                    });\n                }\n                objCollapseItem.on(\"show.bs.collapse\", function () {\n                    Ember.run(function () {\n                        if (!a24Core.isEmpty(_this.get(\"onCollapseExpandStart\"))) {\n                            _this.get(\"onCollapseExpandStart\")(_this.get(\"sCollapseSectionId\"));\n                        }\n                    });\n                }).on(\"shown.bs.collapse\", function () {\n                    Ember.run(function () {\n                        if (!a24Core.isEmpty(_this.get(\"onCollapseExpandEnd\"))) {\n                            _this.get(\"onCollapseExpandEnd\")(_this.get(\"sCollapseSectionId\"));\n                        }\n                    });\n                }).on(\"hide.bs.collapse\", function () {\n                    Ember.run(function () {\n                        if (!a24Core.isEmpty(_this.get(\"onCollapseCollapseStart\"))) {\n                            _this.get(\"onCollapseCollapseStart\")(_this.get(\"sCollapseSectionId\"));\n                        }\n                    });\n                }).on(\"hidden.bs.collapse\", function () {\n                    Ember.run(function () {\n                        _this.$().height(0);\n                        if (!a24Core.isEmpty(_this.get(\"onCollapseCollapseEnd\"))) {\n                            _this.get(\"onCollapseCollapseEnd\")(_this.get(\"sCollapseSectionId\"));\n                        }\n                    });\n                });\n            });\n        },\n        _observeExpandState: Ember.observer(\"bExpanded\", function () {\n            this._setExpandedState();\n        }),\n        _setExpandedState: function _setExpandedState() {\n            var _this2 = this;\n\n            Ember.run.schedule(\"afterRender\", function () {\n                if (_this2.get(\"bExpanded\")) {\n                    $(\"#\" + _this2.get(\"sCollapseSectionId\")).collapse(\"show\");\n                } else {\n                    $(\"#\" + _this2.get(\"sCollapseSectionId\")).collapse(\"hide\");\n                }\n            });\n        }\n    });\n});","define(\"a24-ember-lib/components/collapse-trigger-component\", [\"exports\", \"a24-ember-lib/templates/components/collapse-trigger-component\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _collapseTriggerComponent, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _collapseTriggerComponent.default,\n        // the id of the component that will collapse\n        sCollapseSectionId: \"\",\n        bDisplayArrow: true,\n        bDisplayWaves: true,\n        bShouldShowCollapsed: false,\n        calcShouldShowCollapsed: function calcShouldShowCollapsed() {\n            var _this = this;\n\n            Ember.run(function () {\n                if (!a24Core.isEmpty(_this) && !a24Core.isEmpty(_this.get(\"sCollapseSectionId\"))) {\n                    _this.set(\"bShouldShowCollapsed\", !$(\"#\" + _this.get(\"sCollapseSectionId\")).eq(0).hasClass(\"show\"));\n                }\n            });\n        },\n        didInsertElement: function didInsertElement() {\n            var _this2 = this;\n\n            this._super.apply(this, arguments);\n\n            Ember.run.next(function () {\n                Ember.run.scheduleOnce(\"afterRender\", function () {\n                    if (!a24Core.isEmpty(_this2.get(\"sCollapseSectionId\"))) {\n                        $(\"#\" + _this2.get(\"sCollapseSectionId\")).eq(0).on(\"shown.bs.collapse\", function () {\n                            _this2.calcShouldShowCollapsed();\n                        }).on(\"hidden.bs.collapse\", function () {\n                            _this2.calcShouldShowCollapsed();\n                        });\n                        _this2.calcShouldShowCollapsed();\n                    }\n                });\n            });\n        },\n        mouseEnter: function mouseEnter() {\n            if (!a24Core.isEmpty(this.get(\"onAccordionMouseEnter\"))) {\n                this.get(\"onAccordionMouseEnter\")(this.get(\"sCollapseSectionId\"));\n            }\n        },\n        mouseLeave: function mouseLeave() {\n            if (!a24Core.isEmpty(this.get(\"onAccordionMouseLeave\"))) {\n                this.get(\"onAccordionMouseLeave\")(this.get(\"sCollapseSectionId\"));\n            }\n        },\n        actions: {\n            onTriggerClicked: function onTriggerClicked(objEvent) {\n                var objTarget = $(objEvent.target);\n                // If the item IS NOT <a> or class waves-effect perform the click\n                // If the item IS <a> or class waves-effect ensure that only this accordian <a> allows expanding\n                if (!(objTarget.hasClass(\"waves-effect\") || objTarget.is(\"a\")) || objTarget[0] === this.$(\"a\")[0]) {\n                    if (!a24Core.isEmpty(this.get(\"sCollapseSectionId\"))) {\n                        if (!a24Core.isEmpty($(\"#\" + this.get(\"sCollapseSectionId\")))) {\n                            $(\"#\" + this.get(\"sCollapseSectionId\")).collapse(\"toggle\");\n                        }\n                    }\n                    if (!a24Core.isEmpty(this.get(\"onAccordionMouseClick\"))) {\n                        this.get(\"onAccordionMouseClick\")(this.get(\"sCollapseSectionId\"));\n                    }\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/component-sort\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/templates/components/component-sort\"], function (exports, _didRenderChangesMixin, _componentSort) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _componentSort.default,\n        sGroupTitleStyle: null,\n        sSortProperty: null,\n        sInnerSortProperty: null,\n        arrGroupings: null,\n        sFilterProperty: null,\n        sFilterValue: null,\n        arrComponents: null,\n\n        _objComponentSort: Ember.inject.service(\"component-sort\"),\n\n        _arrGroups: Ember.computed(\"arrComponents.[]\", \"sFilterValue\", function () {\n            return Ember.get(this, \"_objComponentSort\").filterAndSortComponents(Ember.get(this, \"arrComponents\"), Ember.get(this, \"arrGroupings\"), Ember.get(this, \"sFilterProperty\"), Ember.get(this, \"sFilterValue\"), Ember.get(this, \"sInnerSortProperty\"));\n        }).readOnly(),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            if (a24Core.isEmpty(this.get(\"arrGroupings\"))) {\n                var arrGroups = [];\n                var sTitles = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n                var iTitlesLength = sTitles.length;\n                var sSortProperty = this.get(\"sSortProperty\");\n\n                for (var i = 0; i < iTitlesLength; i++) {\n                    var sTitle = sTitles.charAt(i);\n\n                    arrGroups.push({\n                        sTitle: sTitle,\n                        funcGroupFilter: function funcGroupFilter(objComponent) {\n                            return this.sTitle.toLowerCase() === Ember.get(objComponent, sSortProperty).charAt(0).toLowerCase();\n                        }\n                    });\n                }\n\n                this.set(\"arrGroupings\", arrGroups);\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/default-image-component\", [\"exports\", \"a24-ember-lib/templates/components/default-image-component\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _defaultImageComponent, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _defaultImageComponent.default,\n        classNames: [\"default-image\"],\n        sSrc: \"\", // The image url\n        sImgClasses: \"\", // The classes to apply to the image\n        sWidth: \"\",\n        sHeight: \"\",\n        _sImageSrc: \"\",\n        //1x1 transparent pixel base64 encoded\n        _sClearSrc: \"data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\",\n        _bShowDefault: true,\n        _bShowImage: false,\n        init: function init() {\n            this._super.apply(this, arguments);\n            this._onImageChange();\n        },\n        didInsertElement: function didInsertElement() {\n            this._super.apply(this, arguments);\n            var objThis = this;\n            // Add a load listener\n            this.$(\"img\").on(\"load\", function () {\n                Ember.run(function () {\n                    objThis._onLoad();\n                });\n                return false;\n            });\n            // Add an error listener\n            this.$(\"img\").on(\"error\", function () {\n                Ember.run(function () {\n                    objThis._onError();\n                });\n                return false;\n            });\n            this._setSizeStyle();\n        },\n        willDestroyElement: function willDestroyElement() {\n            this._super.apply(this, arguments);\n            // Unregister the image listeners\n            this.$(\"img\").off(\"load\");\n            this.$(\"img\").off(\"error\");\n        },\n        _setSizeStyle: Ember.observer(\"sWidth\", \"sHeight\", function () {\n            if (!a24Core.isEmpty(this.get(\"sWidth\"))) {\n                this.$().css(\"width\", this.get(\"sWidth\"));\n            }\n            if (!a24Core.isEmpty(this.get(\"sHeight\"))) {\n                this.$().css(\"height\", this.get(\"sHeight\"));\n            }\n        }),\n        _sImageClassNames: Ember.computed(\"sImgClasses\", \"_bShowImage\", function () {\n            if (this.get(\"_bShowImage\")) {\n                return \"display-block \" + this.get(\"sImgClasses\");\n            }\n            return \"display-none\";\n        }),\n        _onImageChange: Ember.observer(\"sSrc\", function () {\n            var objThis = this;\n\n            this.set(\"_sImageSrc\", this.get(\"_sClearSrc\"));\n            this.set(\"_bShowImage\", false);\n            this.set(\"_bShowDefault\", true);\n\n            if (!a24Core.isEmpty(this.get(\"sSrc\"))) {\n                //Then schedule a after render to change the src to the actual src, this is so that the image will first\n                //render the placeholder and show that while the correct img src is fetched\n                Ember.run.scheduleOnce(\"afterRender\", function () {\n                    objThis.set(\"_sImageSrc\", objThis.get(\"sSrc\"));\n                });\n            }\n        }),\n        _onLoad: function _onLoad() {\n            if (this.get(\"_sImageSrc\") !== this.get(\"_sClearSrc\")) {\n                // If the image successfully loaded\n                this.set(\"_bShowDefault\", false);\n                this.set(\"_bShowImage\", true);\n\n                if (!a24Core.isEmpty(this.get(\"onLoad\"))) {\n                    this.get(\"onLoad\")();\n                }\n            }\n        },\n        _onError: function _onError() {\n            // If the image failed to load\n            this.set(\"_bShowImage\", false);\n            this.set(\"_bShowDefault\", true);\n\n            if (!a24Core.isEmpty(this.get(\"onError\"))) {\n                this.get(\"onError\")();\n            }\n        },\n        click: function click() {\n            if (!a24Core.isEmpty(this.get(\"onClick\"))) {\n                this.get(\"onClick\")();\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/dropdown-content\", [\"exports\", \"a24-ember-lib/templates/components/dropdown-content\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _dropdownContent, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _dropdownContent.default,\n        classNames: [\"a24-dropdown-content\"],\n        sDropdownContentId: null,\n        bShow: false,\n        bAutoShow: true,\n        bShowOnHover: false,\n        sAlign: \"left\", //only left and right for now\n        sDropdownClass: \"\",\n        _bHovered: false,\n        _bClicked: false,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            if (this.get(\"sAlign\") !== \"left\" && this.get(\"sAlign\") !== \"right\") {\n                this.set(\"sAlign\", \"left\");\n            }\n        },\n\n        didInsertElement: function didInsertElement() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            if (this.get(\"bAutoShow\")) {\n                this.$(\"#\" + this.get(\"sDropdownContentId\")).on(\"a24DropdownClick\", function () {\n                    // Register custom click event\n                    _this.onClickAction();\n                }).on(\"a24DropdownEnter\", function () {\n                    // Register custom mouse enter event\n                    _this.onEnterAction();\n                }).on(\"a24DropdownLeave\", function () {\n                    // Register custom mouse leave event\n                    _this.onLeaveAction();\n                }).on(\"mouseout\", function () {\n                    // Register standard mouse leave event\n                    _this.onLeaveAction();\n                });\n            }\n        },\n        onClickAction: function onClickAction() {\n            if (this.get(\"bAutoShow\")) {\n                this.toggleProperty(\"_bClicked\");\n                this.set(\"_bHovered\", false);\n            }\n        },\n        onEnterAction: function onEnterAction() {\n            if (this.get(\"bAutoShow\") && this.get(\"bShowOnHover\") && !this.get(\"_bClicked\")) {\n                this.set(\"_bHovered\", true);\n            }\n        },\n        onLeaveAction: function onLeaveAction() {\n            if (this.get(\"bAutoShow\") && this.get(\"bShowOnHover\") && !this.get(\"_bClicked\")) {\n                // Do a custom check to make sure that if a user hovers over this item, that the trigger leave\n                // event does not fire a close on this.\n                if (!$(\"#\" + this.get(\"sDropdownContentId\")).is(\":hover\")) {\n                    this.set(\"_bHovered\", false);\n                }\n            }\n        },\n        onClickHoverChange: Ember.observer(\"_bHovered\", \"_bClicked\", function () {\n            this.set(\"bShow\", this.get(\"_bHovered\") || this.get(\"_bClicked\"));\n        }),\n        _bShowBackdrop: Ember.computed(\"_bClicked\", \"bShow\", function () {\n            return this.get(\"bShow\") && !this.get(\"_bHovered\");\n        }),\n        _onShowChange: Ember.observer(\"bShow\", function () {\n            if (!this.get(\"bShow\")) {\n                this.set(\"_bClicked\", false);\n            }\n        }),\n        actions: {\n            onBackdropClick: function onBackdropClick() {\n                if (this.get(\"bAutoShow\")) {\n                    this.set(\"_bHovered\", false);\n                    this.set(\"_bClicked\", false);\n                    this.set(\"bShow\", false);\n                } else {\n                    if (!a24Core.isEmpty(this.get(\"a24DropdownBlockerClicked\"))) {\n                        return this.get(\"a24DropdownBlockerClicked\")(this.get(\"sDropdownContentId\"));\n                    }\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/dropdown-trigger\", [\"exports\", \"a24-ember-lib/templates/components/dropdown-trigger\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _dropdownTrigger, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _dropdownTrigger.default,\n        classNameBindings: [\"bInline:display-inline-block:display-block\"],\n        sDropdownContentId: null,\n        bInline: true,\n        bStopEventPropagation: true,\n        /**\n         * Handles the click event built in to ember\n         *\n         * @param objEvent - The default jQuery event that is triggered\n         */\n        click: function click(objEvent) {\n            this.dispatchEventAndAction(objEvent, \"a24DropdownClick\");\n        },\n        /**\n         * Handles the hover enter event built in to ember\n         *\n         * @param objEvent - The default jQuery event that is triggered\n         */\n        mouseEnter: function mouseEnter(objEvent) {\n            this.dispatchEventAndAction(objEvent, \"a24DropdownEnter\");\n        },\n        /**\n         * Handles the hover exit event built in to ember\n         *\n         * @param objEvent - The default jQuery event that is triggered\n         */\n        mouseLeave: function mouseLeave(objEvent) {\n            this.dispatchEventAndAction(objEvent, \"a24DropdownLeave\");\n        },\n        /**\n         * This is a wrapper that will dispatch the event to the correct place and call a sendAction\n         *\n         * @param objEvent - The default jQuery event that is triggered\n         * @param sDropdownActionName - The name of the action that should be sent to the dropdown\n         */\n        dispatchEventAndAction: function dispatchEventAndAction(objEvent, sDropdownActionName) {\n            // Stop the propagation on the event\n            if (this.get(\"bStopEventPropagation\")) {\n                objEvent.preventDefault();\n                objEvent.stopPropagation();\n            }\n            // Get the id of the dropdown this trigger is linked to\n            var sDropdownContentId = this.get(\"sDropdownContentId\");\n\n            // Select the dropdown, and trigger the event on it\n            Ember.$(\"#\" + sDropdownContentId).trigger(sDropdownActionName);\n\n            if (!a24Core.isEmpty(this.get(sDropdownActionName))) {\n                // Send an action to the parent of this component\n                this.get(sDropdownActionName)(sDropdownContentId);\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/export-popup-component\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/templates/components/export-popup-component\"], function (exports, _didRenderChangesMixin, _exportPopupComponent) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _exportPopupComponent.default,\n        bLoading: true,\n        bShow: true,\n        objDatagridConfig: null,\n        sQuery: null,\n        sExportRef: null,\n        objExportService: null,\n        _bDataWarning: false,\n        _bTooManyResults: false,\n        onExportPopupCloseAction: null,\n        onExportPopupLoadingStateChangeAction: null,\n        _objEmberLibStringsService: Ember.inject.service(\"a24-strings-ember-lib\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objExportPopupSpecialAction: null,\n        _objExportServicePromise: null,\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.set(\"_objExportPopupSpecialAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this._closeExportPopup();\n                }\n            });\n\n            var objThis = this;\n            if (!a24Core.isEmpty(this.get(\"objDatagridConfig\"))) {\n                if (!a24Core.isEmpty(this.get(\"objDatagridConfig.funcResultCountManyClicked\"))) {\n                    var objResultCountFunctions = this.get(\"objDatagridConfig.funcResultCountManyClicked\")();\n                    this.set(\"objDatagridConfig.funcResultCountManyClicked\", function () {\n                        return {\n                            funcSuccess: function funcSuccess() {\n                                if (!a24Core.isEmpty(objThis.get(\"onExportPopupLoadingStateChangeAction\"))) {\n                                    objThis.get(\"onExportPopupLoadingStateChangeAction\")(false);\n                                }\n                                objResultCountFunctions.funcSuccess();\n                            },\n                            funcFailure: function funcFailure() {\n                                if (!a24Core.isEmpty(objThis.get(\"onExportPopupLoadingStateChangeAction\"))) {\n                                    objThis.get(\"onExportPopupLoadingStateChangeAction\")(false);\n                                }\n\n                                objThis._closeExportPopup();\n                                objThis.get(\"_objSnackbarService\").showSnackbarMessage(objThis.get(\"_objEmberLibStringsService\").getString(\"somethingWentWrongTryAgain\"));\n                                objResultCountFunctions.funcFailure();\n                            }\n                        };\n                    });\n                } else {\n                    this.set(\"objDatagridConfig.funcResultCountManyClicked\", function () {\n                        return {\n                            funcSuccess: function funcSuccess() {\n                                if (!a24Core.isEmpty(objThis.get(\"onExportPopupLoadingStateChangeAction\"))) {\n                                    objThis.get(\"onExportPopupLoadingStateChangeAction\")(false);\n                                }\n                            },\n                            funcFailure: function funcFailure() {\n                                if (!a24Core.isEmpty(objThis.get(\"onExportPopupLoadingStateChangeAction\"))) {\n                                    objThis.get(\"onExportPopupLoadingStateChangeAction\")(false);\n                                }\n\n                                objThis._closeExportPopup();\n                                objThis.get(\"_objSnackbarService\").showSnackbarMessage(objThis.get(\"_objEmberLibStringsService\").getString(\"somethingWentWrongTryAgain\"));\n                            }\n                        };\n                    });\n                }\n            }\n        },\n        onShow: Ember.observer(\"bShow\", function () {\n            var _this2 = this;\n\n            if (this.get(\"bShow\")) {\n                if (!a24Core.isEmpty(this.get(\"objDatagridConfig.funcTriggerResultCountManyClick\"))) {\n                    Ember.run.scheduleOnce(\"afterRender\", function () {\n                        _this2.get(\"objDatagridConfig.funcTriggerResultCountManyClick\")();\n                    });\n                }\n            }\n        }),\n        onDataChange: Ember.observer(\"bLoading\", function () {\n\n            if (!this.get(\"bLoading\")) {\n                this.set(\"_bTooManyResults\", false);\n                this.set(\"_bDataWarning\", false);\n                if (this.get(\"objDatagridConfig\").iResultCount > 63999) {\n                    // do not allow export\n                    this.set(\"_bTooManyResults\", true);\n                } else if (this.get(\"objDatagridConfig\").iResultCount > 500) {\n                    // display warning\n                    this.set(\"_bDataWarning\", true);\n                }\n            }\n        }),\n        _closeExportPopup: function _closeExportPopup() {\n            if (!a24Core.isEmpty(this.get(\"onExportPopupCloseAction\"))) {\n                this.get(\"onExportPopupCloseAction\")();\n            }\n        },\n        actions: {\n            onExportPopupCancel: function onExportPopupCancel() {\n                this._closeExportPopup();\n            },\n            onExportPopupConfirm: function onExportPopupConfirm() {\n                var _this3 = this;\n\n                if (!this.get(\"_bTooManyResults\")) {\n                    var objQuery = JSON.parse(this.get(\"sQuery\")).query;\n                    var objHeaders = {};\n                    var arrSort = [];\n                    var objProjectConfig = {};\n                    var arrDataGridHeaderConfig = this.get(\"objDatagridConfig\").arrHeaderConfig;\n                    var objPermanentQuery = this.get(\"objDatagridConfig\").objPermanentQuery;\n                    var objLastIndex = {};\n                    arrDataGridHeaderConfig.forEach(function (objItem) {\n                        if (!a24Core.isEmpty(objItem.sExportPostColumn) && objItem.bShowHeader && !objItem.bSilent) {\n                            objLastIndex[objItem.sExportPostColumn] = objItem.iUniqueColNum;\n                        }\n                    });\n                    var bHasHeaders = false;\n                    arrDataGridHeaderConfig.forEach(function (objHeaderItem) {\n                        if (objHeaderItem.bShowHeader && !objHeaderItem.bSilent) {\n                            bHasHeaders = true;\n                            if (!a24Core.isEmpty(objHeaderItem.sExportPreColumn) && !objHeaders.hasOwnProperty(objHeaderItem.sExportPreColumn)) {\n                                objHeaders[objHeaderItem.sExportPreColumn] = 1;\n                                objProjectConfig[objHeaderItem.sExportPreColumn] = {\n                                    \"column_name\": objHeaderItem.sExportPreColumnName\n                                };\n                            }\n\n                            if (!a24Core.isEmpty(objHeaderItem.sExportColumn)) {\n                                objHeaders[objHeaderItem.sExportColumn] = 1;\n                            } else {\n                                objHeaders[objHeaderItem.sProperty] = 1;\n                            }\n\n                            if (!a24Core.isEmpty(objHeaderItem.sExportColumnName)) {\n                                objProjectConfig[!a24Core.isEmpty(objHeaderItem.sExportColumn) ? objHeaderItem.sExportColumn : objHeaderItem.sProperty] = {\n                                    \"column_name\": objHeaderItem.sExportColumnName\n                                };\n                            } else {\n                                objProjectConfig[!a24Core.isEmpty(objHeaderItem.sExportColumn) ? objHeaderItem.sExportColumn : objHeaderItem.sProperty] = {\n                                    \"column_name\": objHeaderItem.sTitle\n                                };\n                            }\n\n                            if (!a24Core.isEmpty(objHeaderItem.sExportPostColumn) && objHeaderItem.iUniqueColNum === objLastIndex[objHeaderItem.sExportPostColumn]) {\n                                objHeaders[objHeaderItem.sExportPostColumn] = 1;\n                                if (!objProjectConfig.hasOwnProperty(objHeaderItem.sExportPostColumn)) {\n                                    objProjectConfig[objHeaderItem.sExportPostColumn] = {\n                                        \"column_name\": objHeaderItem.sExportPostColumnName\n                                    };\n                                }\n                            }\n                        }\n\n                        var sProperty = objHeaderItem.sProperty;\n                        if (!a24Core.isEmpty(objHeaderItem.sAsc)) {\n                            if (objHeaderItem.bAsc) {\n                                arrSort.push(sProperty);\n                            } else {\n                                arrSort.push(\"-\" + sProperty);\n                            }\n                        }\n\n                        if (!a24Core.isEmpty(objPermanentQuery) && !a24Core.isEmpty(objPermanentQuery[sProperty]) && objPermanentQuery[sProperty].bSortBy) {\n                            if (objPermanentQuery[sProperty].mValue === \"asc\") {\n                                arrSort.push(sProperty);\n                            } else {\n                                arrSort.push(\"-\" + sProperty);\n                            }\n                        }\n                    });\n\n                    if (bHasHeaders) {\n                        var objExportData = {\n                            \"query\": objQuery,\n                            \"sort\": arrSort,\n                            \"project\": objHeaders,\n                            \"project_config\": objProjectConfig\n                        };\n\n                        if (!a24Core.isEmpty(this.get(\"onExportPopupLoadingStateChangeAction\"))) {\n                            this.get(\"onExportPopupLoadingStateChangeAction\")(true);\n                        }\n\n                        this.get(\"objExportService\").exportData(this, \"_objExportServicePromise\", this.get(\"sExportRef\"), objExportData, function (arrResponse) {\n                            if (!a24Core.isEmpty(_this3.get(\"onExportPopupLoadingStateChangeAction\"))) {\n                                _this3.get(\"onExportPopupLoadingStateChangeAction\")(false);\n                            }\n                            if (!a24Core.isEmpty(arrResponse)) {\n                                _this3.get(\"_objSnackbarService\").showSnackbarMessage(_this3.get(\"_objEmberLibStringsService\").getString(\"dataHasBeenSent\"));\n\n                                if (!a24Core.isEmpty(_this3.get(\"onExportPopupCloseAction\"))) {\n                                    _this3.get(\"onExportPopupCloseAction\")();\n                                }\n                            } else {\n                                _this3.get(\"_objSnackbarService\").showSnackbarMessage(_this3.get(\"_objStringsService\").getString(\"serverError\"));\n                            }\n                        }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode /*, sStatus, objErrorThrown, objError*/) {\n                            if (sCode === \"401\") {\n                                _this3.get(\"_objSnackbarService\").showSnackbarMessage(_this3.get(\"_objEmberLibStringsService\").getString(\"requiredPermission\"));\n                            } else {\n                                _this3.get(\"_objSnackbarService\").showSnackbarMessage(_this3.get(\"_objStringsService\").getString(\"serverError\"));\n                            }\n                            if (!a24Core.isEmpty(_this3.get(\"onExportPopupLoadingStateChangeAction\"))) {\n                                _this3.get(\"onExportPopupLoadingStateChangeAction\")(false);\n                            }\n                        }));\n                    }\n                }\n            }\n        }\n\n    });\n});","define(\"a24-ember-lib/components/fab-button\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-window/mixins/a24responsive\", \"a24-ember-lib/templates/components/fab-button\"], function (exports, _didRenderChangesMixin, _a24responsive, _fabButton) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _a24responsive.default, {\n        layout: _fabButton.default,\n        classNames: [\"a24-fab-button-component\"],\n        sLeftMenuService: \"\",\n        _objFabCurrent: null,\n        _sFabState: \"hideEnd\", //showStart, showEnd, hideStart, hideEnd\n        _iAnimInSpeed: 250,\n        _objFabService: Ember.inject.service(\"fab-button\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objLeftMenuService: Ember.computed(\"sLeftMenuService\", function () {\n            if (a24Core.isEmpty(this.get(\"sLeftMenuService\"))) {\n                return null;\n            } else {\n                return Ember.getOwner(this).lookup(\"service:\" + this.get(\"sLeftMenuService\"));\n            }\n        }),\n        _objWindowConstants: Ember.inject.service(\"a24-constants-window\"),\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _bIsClickable: false, //This will be false during animations\n        _bClearFab: false,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            this.get(\"_objFabService\");\n            this.get(\"_objSnackbarService\");\n            this.get(\"_objLeftMenuService\");\n            this.set(\"_objFabCurrent\", {\n                funcFabAction: null,\n                sIconName: \"add\", //This needs a default otherwise the jQuery `.material-icons` select on afterRender wont work\n\n                //NOTE: the sIconFaName and sIconSvg being passed on for now but will not work untill the fab button\n                //component is updated to not use the `.material-icons` to select the icon to animate the font\n                sIconFaName: null,\n                sIconSvg: null,\n\n                sTooltip: \"\",\n                sButtonColor: \"\",\n                sIconColor: \"white-text\",\n                bLightWaves: true\n            });\n        },\n        didInsertElement: function didInsertElement() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            Ember.run.scheduleOnce(\"afterRender\", this, function () {\n                //Set the initial values of the animating parts\n                _this.$(\".a24-fab-button-container\").css({\n                    marginBottom: \"0px\",\n                    width: _this.get(\"_objLibConstants.ROUND_ICON_SIZE_EXTRA_LARGE_PX\") + \"px\",\n                    height: _this.get(\"_objLibConstants.ROUND_ICON_SIZE_EXTRA_LARGE_PX\") + \"px\",\n                    padding: _this.get(\"_objLibConstants.ROUND_ICON_SIZE_EXTRA_LARGE_PX\") / 2 + \"px\"\n                });\n\n                _this.$(\".a24-fab-button-main .material-icons\").css({\n                    fontSize: \"0px\",\n                    lineHeight: \"0px\"\n                });\n\n                _this.showSnackbarMessage();\n            });\n        },\n        showSnackbarMessage: Ember.observer(\"_objFabService._bHasNewAction\", function () {\n            if (this.get(\"_objFabService._bHasNewAction\")) {\n                this.set(\"_objFabService._bHasNewAction\", false);\n\n                if (this.get(\"_objFabService._arrFabActions\").length === 0) {\n                    //In this case we want to hide the FAB button\n\n                    if (this.get(\"_sFabState\") === \"showStart\") {\n                        this.set(\"_bClearFab\", true);\n                    } else if (this.get(\"_sFabState\") === \"showEnd\") {\n                        this.hideFabButton();\n                    }\n                    //else if (this.get(\"_sFabState\") === \"hideStart\") {\n                    //    //Already busy hiding so nothing to do here\n                    //} else if (this.get(\"_sFabState\") === \"hideEnd\") {\n                    //    //Already hidden so nothing to do here\n                    //}\n                } else {\n                    //In this case we want to display the next queued FAB action\n\n                    //if (this.get(\"_sFabState\") === \"showStart\") {\n                    //    //The showFabButtonEnd will cover this scenario\n                    //} else\n                    if (this.get(\"_sFabState\") === \"showEnd\") {\n                        this.hideFabButton();\n                        //} else if (this.get(\"_sFabState\") === \"hideStart\") {\n                        //    //The hideFabButtonEnd will cover this scenario\n                    } else if (this.get(\"_sFabState\") === \"hideEnd\") {\n                        this.setFabButtonDetails();\n                    }\n                }\n            }\n        }),\n        observeSnackbarHeight: Ember.observer(\"_objSnackbarService.sSnackbarState\", function () {\n            var sSize = this.get(\"sScreenSize\");\n            if (sSize === this.get(\"_objWindowConstants.MEDIA_SIZE_TABLET\") || sSize === this.get(\"_objWindowConstants.MEDIA_SIZE_DESKTOP\") || sSize === this.get(\"_objWindowConstants.MEDIA_SIZE_JUMBO\")) {\n                this.$(\".a24-fab-button-container\").stop(\"fabSnackbarSyncAnim\");\n                this.$(\".a24-fab-button-container\").css({\n                    marginBottom: \"0px\"\n                });\n            } else {\n                if (this.get(\"_objSnackbarService.sSnackbarState\") === \"showStart\") {\n                    this.animateFabSnackbarSync(this.get(\"_objSnackbarService.iSnackbarHeight\"));\n                } else if (this.get(\"_objSnackbarService.sSnackbarState\") === \"hideStart\") {\n                    this.animateFabSnackbarSync(0);\n                }\n            }\n        }),\n        observeScreenSize: Ember.observer(\"sScreenSize\", \"_objSnackbarService.iSnackbarHeight\", function () {\n            if (a24Core.isEmpty(this.$(\".a24-fab-button-container\"))) {\n                return;\n            }\n\n            var sSize = this.get(\"sScreenSize\");\n\n            if (sSize === this.get(\"_objWindowConstants.MEDIA_SIZE_TABLET\") || sSize === this.get(\"_objWindowConstants.MEDIA_SIZE_DESKTOP\") || sSize === this.get(\"_objWindowConstants.MEDIA_SIZE_JUMBO\")) {\n                this.$(\".a24-fab-button-container\").stop(\"fabSnackbarSyncAnim\");\n                this.$(\".a24-fab-button-container\").css({\n                    marginBottom: \"0px\"\n                });\n            } else {\n                if (this.get(\"_objSnackbarService.sSnackbarState\") === \"showStart\") {\n                    this.animateFabSnackbarSync(this.get(\"_objSnackbarService.iSnackbarHeight\"));\n                } else if (this.get(\"_objSnackbarService.sSnackbarState\") === \"showEnd\") {\n                    this.$(\".a24-fab-button-container\").css({\n                        marginBottom: this.get(\"_objSnackbarService.iSnackbarHeight\") + \"px\"\n                    });\n                }\n            }\n        }),\n        observeRightPanel: Ember.observer(\"_objLeftMenuService.iRightPanelWidth\", function () {\n            if (a24Core.isEmpty(this.$(\".a24-fab-button-container\"))) {\n                return;\n            }\n            if (this.get(\"_objLeftMenuService.sRightPanelState\") === \"showStart\" || this.get(\"_objLeftMenuService.sRightPanelState\") === \"hideStart\") {\n                this.animateFabRightPanelSync(this.get(\"_objLeftMenuService.iRightPanelWidth\"));\n            } else {\n                this.$(\".a24-fab-button-container\").css({ marginRight: this.get(\"_objLeftMenuService.iRightPanelWidth\") });\n            }\n        }),\n        animateFabSnackbarSync: function animateFabSnackbarSync(iHeight) {\n            this.$(\".a24-fab-button-container\").stop(\"fabSnackbarSyncAnim\");\n            this.$(\".a24-fab-button-container\").animate({\n                marginBottom: iHeight + \"px\"\n            }, {\n                duration: a24Constants.SNACKBAR_SLIDE_TIME,\n                queue: \"fabSnackbarSyncAnim\"\n            });\n            this.$(\".a24-fab-button-container\").dequeue(\"fabSnackbarSyncAnim\"); //Start the animation queue\n        },\n        animateFabRightPanelSync: function animateFabRightPanelSync(iValue) {\n            this.$(\".a24-fab-button-container\").stop(\"fabRightPanelSyncAnim\");\n            this.$(\".a24-fab-button-container\").animate({\n                marginRight: iValue + \"px\"\n            }, {\n                duration: \"fast\",\n                queue: \"fabRightPanelSyncAnim\"\n            });\n            this.$(\".a24-fab-button-container\").dequeue(\"fabRightPanelSyncAnim\"); //Start the animation queue\n        },\n        setFabButtonDetails: function setFabButtonDetails() {\n            var objFabCurrent = this.get(\"_objFabService._arrFabActions\").objectAt(0);\n            this.get(\"_objFabService._arrFabActions\").removeAt(0);\n            this.set(\"_objFabCurrent\", objFabCurrent);\n            this.showFabButton();\n        },\n        showFabButton: function showFabButton() {\n            var _this2 = this;\n\n            this.set(\"_sFabState\", \"showStart\");\n            this.$(\".a24-fab-button-container\").removeClass(\"display-none\");\n\n            //Stop the current animation if there is one and create new one with the correct height\n            this.$(\".a24-fab-button-container\").stop(\"fabGrowAnim\");\n            this.$(\".a24-fab-button-container\").animate({\n                padding: \"0px\"\n            }, {\n                duration: this.get(\"_iAnimInSpeed\"),\n                complete: function complete() {\n                    Ember.run(function () {\n                        _this2.showFabButtonEnd();\n                    });\n                },\n                queue: \"fabGrowAnim\"\n            });\n            this.$(\".a24-fab-button-container\").dequeue(\"fabGrowAnim\"); //Start the animation queue\n            this.$(\".a24-fab-button-main .material-icons\").animate({\n                fontSize: this.get(\"_objLibConstants.FONT_SIZE_H4_PX\") + \"px\",\n                lineHeight: this.get(\"_objLibConstants.ROUND_ICON_SIZE_EXTRA_LARGE_PX\") + \"px\"\n            }, this.get(\"_iAnimInSpeed\"));\n        },\n        showFabButtonEnd: function showFabButtonEnd() {\n            this.set(\"_sFabState\", \"showEnd\");\n\n            //If there are other fabs that want to show then hide this one\n            if (this.get(\"_bClearFab\")) {\n                this.set(\"_bClearFab\", false);\n                this.hideFabButton();\n            } else if (this.get(\"_objFabService._arrFabActions\").length > 0) {\n                this.hideFabButton();\n            }\n        },\n        hideFabButton: function hideFabButton() {\n            var _this3 = this;\n\n            this.set(\"_sFabState\", \"hideStart\");\n\n            //Stop the current animation if there is one and create new one with the correct height\n            this.$(\".a24-fab-button-container\").stop(\"fabGrowAnim\");\n            this.$(\".a24-fab-button-container\").animate({\n                padding: this.get(\"_objLibConstants.ROUND_ICON_SIZE_EXTRA_LARGE_PX\") / 2 + \"px\"\n            }, {\n                duration: this.get(\"_iAnimInSpeed\"),\n                complete: function complete() {\n                    Ember.run(function () {\n                        _this3.hideFabButtonEnd();\n                    });\n                },\n                queue: \"fabGrowAnim\"\n            });\n            this.$(\".a24-fab-button-container\").dequeue(\"fabGrowAnim\"); //Start the animation queue\n            this.$(\".a24-fab-button-main .material-icons\").animate({\n                fontSize: \"0px\",\n                lineHeight: \"0px\"\n            }, this.get(\"_iAnimInSpeed\"));\n        },\n        hideFabButtonEnd: function hideFabButtonEnd() {\n            this.set(\"_sFabState\", \"hideEnd\");\n            this.$(\".a24-fab-button-container\").addClass(\"display-none\");\n            if (this.get(\"_objFabService._arrFabActions\").length > 0) {\n                this.setFabButtonDetails();\n            }\n        },\n        actions: {\n            onFabClick: function onFabClick() {\n                if (this.get(\"_sFabState\") === \"showEnd\") {\n                    this.get(\"_objFabCurrent.funcFabAction\")();\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/horizontal-line-component\", [\"exports\", \"a24-ember-lib/templates/components/horizontal-line-component\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _horizontalLineComponent, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _horizontalLineComponent.default,\n        classNames: [\"horizontal-line-component\"],\n        classNameBindings: [\"sCustomClassName\"],\n        sCustomClassName: \"\"\n    });\n});","define(\"a24-ember-lib/components/icon-label-value-row-component\", [\"exports\", \"a24-ember-lib/templates/components/icon-label-value-row-component\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _iconLabelValueRowComponent, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _iconLabelValueRowComponent.default,\n        tagName: \"tr\",\n        bEmail: false,\n        bPhone: false,\n        bLink: false,\n        bExternalLink: false,\n        bAddress: false,\n        sIcon: null,\n        sIconFa: null,\n        sIconSvg: null,\n        sLetter: null,\n        sImageUrl: null,\n        sValue: null,\n        sLabel: null,\n        sRightLabel: null,\n        sIconPadding: \"default-icon-padding\",\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var sHref = \"\";\n            if (this.get(\"bEmail\")) {\n                sHref = \"email\";\n            } else if (this.get(\"bPhone\")) {\n                sHref = \"phone\";\n            } else if (this.get(\"bLink\")) {\n                sHref = \"link\";\n            } else if (this.get(\"bExternalLink\")) {\n                sHref = \"externalLink\";\n            } else if (this.get(\"bAddress\")) {\n                sHref = \"address\";\n            }\n\n            var sValue = a24Core.getSafeStringLink(Ember, this.get(\"sValue\"), this.get(\"sValue\"), sHref);\n            this.set(\"sValue\", sValue);\n        }\n    });\n});","define(\"a24-ember-lib/components/icon-label-value-table-component\", [\"exports\", \"a24-ember-lib/templates/components/icon-label-value-table-component\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _iconLabelValueTableComponent, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _iconLabelValueTableComponent.default,\n        // example of the array\n        //arrValueEntries: [\n        //    {\n        //        sIcon: \"phone\",\n        //        sIconFa: null,\n        //        sIconSvg: null,\n        //        sValue: \"value\",\n        //        sLabel: \"label\",\n        //        sRightLabel: \"rightLabel\",\n        //        bEmail: false\n        //        bPhone: false\n        //        bLink: false\n        //    }\n        //],\n        arrValueEntries: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            if (a24Core.isEmpty(this.get(\"arrValueEntries\"))) {\n                this.set(\"arrValueEntries\", []);\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/iframe-component\", [\"exports\", \"a24-ember-lib/templates/components/iframe-component\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _iframeComponent, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _iframeComponent.default,\n        sHeading: \"\",\n        sIFrameUrl: \"\",\n        sAllowList: \"\",\n        bLoading: false,\n        bPadHeader: false,\n        _sIFrameName: null,\n        bFullscreen: false,\n        _objDomService: Ember.inject.service(\"dom-event\"),\n        _bInitSetSize: false,\n        init: function init() {\n            this._super.apply(this, arguments);\n            this.set(\"_sIFrameName\", Ember.guidFor({}));\n\n            // We need to specifically get the service since it is lazy loaded and incompatible with observe only\n            this.get(\"_objDomService.iPageHeight\");\n        },\n        didInsertElement: function didInsertElement() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n            Ember.run.scheduleOnce(\"afterRender\", function () {\n                _this.observeLoader();\n            });\n        },\n        observeIFrameUrl: Ember.observer(\"sIFrameUrl\", function () {\n            this.set(\"_bInitSetSize\", false);\n            this.observeLoader();\n        }),\n        observeLoader: Ember.observer(\"bLoading\", function () {\n            if (!this.get(\"bLoading\") && !this.get(\"_bInitSetSize\")) {\n                this.set(\"_bInitSetSize\", true);\n                this.onResize();\n            }\n        }),\n        onResize: Ember.observer(\"_objDomService.iPageWidth\", \"_objDomService.iPageHeight\", function () {\n            if (this.get(\"bFullscreen\")) {\n                window.parent.postMessage({\n                    sEventType: \"setHeight\",\n                    sIFrameName: this.get(\"_sIFrameName\"),\n                    iHeight: -1,\n                    sIFrameType: \"fullscreen\"\n                }, \"*\" // No location reference needed\n                );\n            }\n        })\n    });\n});","define(\"a24-ember-lib/components/iframe-sourceless\", [\"exports\", \"a24-ember-lib/templates/components/iframe-sourceless\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _iframeSourceless, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _iframeSourceless.default,\n        classNames: [\"iframe-sourceless\"],\n        sContent: \"\",\n        sStyles: \"\",\n        _sUniqueId: \"\",\n        _objEventListener: null,\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n            // Generate a new Id \n            this.set(\"_sUniqueId\", Ember.guidFor({}));\n\n            // Perform this after render to allow the iframe to load\n            Ember.run.schedule(\"afterRender\", function () {\n\n                // Get the unique id that was generated for the component\n                var sUniqueId = _this.get(\"_sUniqueId\");\n\n                // Get the iframe reference\n                var objIFrame = _this.$(\"iframe\");\n\n                // Set the height to an original size to allow other components to\n                // be aware of the minimum size it will take up.\n                objIFrame.css(\"height\", \"250px\");\n                // Add a message listener to the window\n                var objEventListener = window.addEventListener(\"message\", function (objEvent) {\n                    // If the event starts with the same unique identifier as the iframe\n                    if (objEvent.data.startsWith(\"sourceless-\" + sUniqueId)) {\n                        // Split the data and use the height property\n                        var iHeight = objEvent.data.split(\":\")[1];\n                        // Set the iframe height\n                        objIFrame.css(\"height\", iHeight + \"px\");\n                    }\n                }, false);\n\n                _this.set(\"_objEventListener\", objEventListener);\n\n                // This will be called on initialisation\n                _this.onContentOrStyleChange();\n            });\n        },\n        willDestroyElement: function willDestroyElement() {\n            if (!a24Core.isEmpty(this.get(\"_objEventListener\"))) {\n                window.removeEventListener(\"message\", this.get(\"_objEventListener\"), false);\n            }\n            this._super.apply(this, arguments);\n        },\n        /**\n         * This function will get the html body as an encoded data url\n         * \n         * This will combine sContent and sStyles as well as a custom js block\n         */\n        getIFrameDataUrl: function getIFrameDataUrl() {\n            // Get the content\n            var sContent = this.get(\"sContent\");\n            if (a24Core.isEmpty(sContent)) {\n                sContent = \"\";\n            }\n            // Get the styles\n            var sStyle = this.get(\"sStyles\");\n            if (a24Core.isEmpty(sStyle)) {\n                sStyle = \"\";\n            }\n            // Get the Unique id for this frame\n            var sUniqueId = this.get(\"_sUniqueId\");\n            /** \n             * Below Builds up an HTML document with all relvant parts\n             */\n            var sHtml = \"\\n            <!DOCTYPE html>\\n            <html>\\n                <head>\\n                    <style>\\n                        \" + sStyle + \"\\n                    </style>\\n                </head>\\n                <body>\\n                    \" + sContent + \"\\n                    <script>\\n                        var funcRecalculate = function() {\\n                            setTimeout(\\n                                function() {\\n                                    var objBody = document.body,\\n                                        objHtml = document.documentElement;\\n        \\n                                    var iHeight = Math.max(\\n                                        objBody.scrollHeight,\\n                                        objBody.offsetHeight, \\n                                        objHtml.clientHeight,\\n                                        objHtml.scrollHeight,\\n                                        objHtml.offsetHeight\\n                                    );\\n                                    parent.postMessage(\\\"sourceless-\" + sUniqueId + \":\\\" + iHeight, \\\"*\\\");\\n                                },\\n                                0\\n                            );\\n                        };\\n                        window.onload = function(){\\n                        \\n                            var arrImages = document.getElementsByTagName(\\\"img\\\");\\n                            for (var i = 0; i < arrImages.length; i++) {\\n                                var objImage = arrImages[i];\\n                                if (!objImage.complete) {\\n                                    objImage.addEventListener('load', funcRecalculate);\\n                                    objImage.addEventListener('error', funcRecalculate);\\n                                }\\n                            }\\n                            var arrLinks = document.getElementsByTagName(\\\"a\\\");\\n                            for (var j = 0; j < arrLinks.length; j++) {\\n                                var objLink = arrLinks[j];\\n                                objLink.setAttribute(\\\"target\\\", \\\"_blank\\\");\\n                            }\\n\\n                            funcRecalculate();\\n                        }\\n                    </script>\\n                </body>\\n            </html>\\n        \";\n            // Return an encoded data url for the HTML\n            return \"data:text/html;charset=UTF-8,\" + encodeURI(sHtml);\n        },\n        onContentOrStyleChange: Ember.observer(\"sStyles\", \"sContent\", function () {\n            // Get the iframe reference\n            var objIFrame = this.$(\"iframe\");\n            // Set the source to the encoded html\n            objIFrame.attr(\"src\", this.getIFrameDataUrl());\n        })\n    });\n});","define(\"a24-ember-lib/components/image-cropper-modal\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-lib/templates/components/image-cropper-modal\"], function (exports, _didRenderChangesMixin, _inputFormElement, _imageCropperModal) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _imageCropperModal.default,\n        classNames: [\"image-cropper-modal\"],\n\n        bShowPopup: false,\n        bLoading: true,\n        sHeader: \"\",\n        sAvatar: null,\n\n        _objAjax: $.ajax,\n        _objWhen: $.when,\n\n        _bImageSet: false,\n        _bScriptBusy: false,\n        _bScriptLoaded: false,\n        _bShowUnsavedData: false,\n        _bShowDeleteConfirm: false,\n        _bPopupLoading: false,\n\n        _sChooseImage: null,\n\n        _objCropper: null,\n        _objOriginalData: null,\n\n        _funcCreateObjectUrl: null,\n\n        _objEmberLibStringService: Ember.inject.service(\"a24-strings-ember-lib\"),\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.set(\"_sChooseImage\", this.get(\"_objEmberLibStringService\").getString(\"chooseImage\").toUpperCase());\n\n            if (a24Core.isEmpty(this.get(\"funcCreateObjectUrl\"))) {\n                this.set(\"_funcCreateObjectUrl\", function (arrBlob) {\n                    return URL.createObjectURL(arrBlob);\n                });\n            }\n\n            this.set(\"_objSpecialPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this._popupCancel();\n                }\n            });\n        },\n\n        _popupCancel: function _popupCancel() {\n            if (this.get(\"bLoading\")) {\n                return;\n            }\n            // Check if the form has any unsaved data\n            var bDataMatches = a24Core.compareObjects(Ember, this.get(\"objChildren.file.mValue\"), this.get(\"_objOriginalData\"));\n\n            if (bDataMatches) {\n                this.get(\"onPopupToggle\")(false);\n            } else {\n                this.set(\"_bShowUnsavedData\", true);\n            }\n        },\n\n        _loadCropper: function _loadCropper() {\n            var sResourceBase = \"assets/cropperjs\";\n            var objThis = this;\n            if (a24Core.isEmpty(this.get(\"_objCropper\"))) {\n                if (!this.get(\"_bScriptBusy\") && !this.get(\"_bScriptLoaded\")) {\n                    this.set(\"_bScriptBusy\", true);\n                    this.get(\"_objWhen\")(objThis.get(\"_objAjax\")({\n                        url: sResourceBase + \"/cropper.min.js\",\n                        dataType: \"script\",\n                        cache: true\n                    }), objThis.get(\"_objAjax\")({\n                        url: sResourceBase + \"/cropper.min.css\",\n                        cache: true\n                    }).done(function (sCss) {\n                        Ember.run(function () {\n                            $(\"<style type='text/css'></style>\").html(sCss).appendTo(\"head\");\n                        });\n                    })).then(function () {\n                        Ember.run(function () {\n                            objThis.set(\"_bScriptBusy\", false);\n                            objThis.set(\"_bScriptLoaded\", true);\n                            objThis.set(\"bLoading\", false);\n                        });\n                    }, function () {\n                        Ember.run(function () {\n                            objThis.set(\"_bScriptBusy\", false);\n                            objThis.set(\"_bScriptLoaded\", false);\n                        });\n                    });\n                }\n            }\n        },\n\n        onPopupOpen: Ember.observer(\"bShowPopup\", function () {\n            var _this2 = this;\n\n            this.set(\"_bShowDeleteConfirm\", false);\n            if (this.get(\"bShowPopup\")) {\n                this.set(\"_bPopupLoading\", false);\n                this.clearForm();\n                this._loadCropper();\n\n                Ember.run.next(function () {\n                    Ember.run.schedule(\"afterRender\", function () {\n                        _this2.set(\"_objOriginalData\", _this2.get(\"objChildren.file.mValue\"));\n                        _this2.$(\".image-cropper-container\").height(_this2.$(\".image-cropper-container\").width());\n                        // This is to allow the input to be able to capture from camera and only images\n                        _this2.$(\"input[type=file]\").attr(\"accept\", \"image/*\");\n                        _this2.$(\"input[type=file]\").attr(\"capture\", \"\");\n                    });\n                });\n            } else {\n                if (!a24Core.isEmpty(this.get(\"_objCropper\"))) {\n                    this.get(\"_objCropper\").destroy();\n                }\n                this.set(\"_bImageSet\", false);\n            }\n        }),\n\n        onInputValueChanged: function onInputValueChanged(arrChildRef) {\n            var sLookup = arrChildRef.join(\".\");\n            var mValue = this.get(sLookup + \".mValue\");\n            if (!a24Core.isEmpty(mValue)) {\n                var arrBlob = mValue.slice(0, mValue.size);\n                this._initCropper(arrBlob);\n                this.set(\"_bImageSet\", true);\n            } else {\n                if (!a24Core.isEmpty(this.get(\"_objCropper\"))) {\n                    this.get(\"_objCropper\").destroy();\n                }\n                this.set(\"_bImageSet\", false);\n            }\n        },\n\n        _initCropper: function _initCropper(arrBlob) {\n            var _this3 = this;\n\n            if (this.get(\"_bScriptLoaded\")) {\n                Ember.run.next(function () {\n                    Ember.run.schedule(\"afterRender\", function () {\n                        if (a24Core.isEmpty(_this3.get(\"_objCropper\"))) {\n                            var objElement = $(\"img.image-cropper-image\").get(0);\n\n                            var objCropper = new Cropper(objElement, {\n                                viewMode: 3,\n                                // Show the grid background\n                                background: false,\n                                guides: false,\n                                cropBoxMovable: false,\n                                cropBoxResizable: false,\n                                // Enable to move the image\n                                movable: true,\n                                dragMode: \"move\",\n                                // Enable to zoom the image\n                                zoomable: true,\n                                aspectRatio: 1 / 1,\n                                autoCropArea: 1\n                            });\n                            _this3.set(\"_objCropper\", objCropper);\n                        }\n                        _this3.get(\"_objCropper\").replace(_this3.get(\"_funcCreateObjectUrl\")(arrBlob));\n                    });\n                });\n            }\n        },\n\n        actions: {\n            onFileInputClick: function onFileInputClick() {\n                this.$(\"input[type=text]\").click();\n            },\n            onPopupCancel: function onPopupCancel() {\n                this._popupCancel();\n            },\n            onPopupConfirm: function onPopupConfirm() {\n                var _this4 = this;\n\n                var objFile = this.get(\"objChildren.file.mValue\");\n                if (!a24Core.isEmpty(objFile)) {\n                    if (a24Core.isEmpty(HTMLCanvasElement.prototype.toBlob)) {\n                        // This is to cater for if the msToBlob does not take in a callback\n                        var objBlob = this.get(\"_objCropper\").getCroppedCanvas({\n                            fillColor: \"#fff\",\n                            width: 400,\n                            height: 400\n                        }).msToBlob(function (objBlob) {\n                            if (!a24Core.isEmpty(_this4.get(\"onUploadImage\"))) {\n                                _this4.get(\"onUploadImage\")(objFile, objBlob);\n                            }\n                        });\n\n                        if (!a24Core.isEmpty(objBlob)) {\n                            if (!a24Core.isEmpty(this.get(\"onUploadImage\"))) {\n                                this.get(\"onUploadImage\")(objFile, objBlob);\n                            }\n                        }\n                    } else {\n                        this.get(\"_objCropper\").getCroppedCanvas({\n                            fillColor: \"#fff\",\n                            width: 400,\n                            height: 400\n                        }).toBlob(function (objBlob) {\n                            if (!a24Core.isEmpty(_this4.get(\"onUploadImage\"))) {\n                                _this4.get(\"onUploadImage\")(objFile, objBlob);\n                            }\n                        });\n                    }\n                }\n            },\n            onPopupRemove: function onPopupRemove() {\n                this.set(\"_bPopupLoading\", false);\n                this.set(\"_bShowDeleteConfirm\", true);\n            },\n            onPopupDeletePopupClose: function onPopupDeletePopupClose() {\n                if (this.get(\"_bPopupLoading\")) {\n                    return;\n                }\n\n                this.set(\"_bShowDeleteConfirm\", false);\n            },\n            onPopupDeleteConfirm: function onPopupDeleteConfirm() {\n                this.set(\"_bPopupLoading\", true);\n                if (!a24Core.isEmpty(this.get(\"onDeleteImage\"))) {\n                    this.get(\"onDeleteImage\")();\n                }\n            },\n\n            onPopupUnsavedConfirm: function onPopupUnsavedConfirm() {\n                this.get(\"onPopupToggle\")(false);\n                this.set(\"_bShowUnsavedData\", false);\n            },\n            zoomInAction: function zoomInAction() {\n                if (!a24Core.isEmpty(this.get(\"_objCropper\"))) {\n                    this.get(\"_objCropper\").zoom(0.1);\n                }\n            },\n            zoomOutAction: function zoomOutAction() {\n                if (!a24Core.isEmpty(this.get(\"_objCropper\"))) {\n                    this.get(\"_objCropper\").zoom(-0.1);\n                }\n            },\n            rotateLeftAction: function rotateLeftAction() {\n                if (!a24Core.isEmpty(this.get(\"_objCropper\"))) {\n                    this.get(\"_objCropper\").rotate(-90);\n                }\n            },\n            rotateRightAction: function rotateRightAction() {\n                if (!a24Core.isEmpty(this.get(\"_objCropper\"))) {\n                    this.get(\"_objCropper\").rotate(90);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/input-checkbox\", [\"exports\", \"a24-ember-lib/templates/components/input-checkbox\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _inputCheckbox, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _inputCheckbox.default,\n        classNames: [\"form-group\"],\n        classNameBindings: [\"hasErrorMessageSpace::clear-margin-bottom\"],\n        hasErrorMessageSpace: false,\n        sFieldName: null,\n        bValue: false,\n        mValue: null,\n        _sInputId: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n            this.set(\"_sInputId\", Ember.guidFor({}));\n        },\n        _onCheckBoxClicked: function _onCheckBoxClicked() {\n            if (!a24Core.isEmpty(this.get(\"onCheckBoxClicked\"))) {\n                return this.get(\"onCheckBoxClicked\")(this.get(\"mValue\"));\n            }\n        },\n        actions: {\n            onClick: function onClick() {\n                if (!a24Core.isEmpty(this.get(\"mValue\"))) {\n                    var objThis = this;\n                    //Run next to give ember/mdb chance to first set the new value of the checkbox before firing the event\n                    Ember.run.next(function () {\n                        objThis._onCheckBoxClicked();\n                    });\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/input-date-picker\", [\"exports\", \"a24-ember-lib/templates/components/input-date-picker\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _inputDatePicker, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _inputDatePicker.default,\n        classNames: [\"md-form\"],\n        sFieldName: \"\",\n        sSelectedDate: null,\n        objMaxDate: null, //This should be a TimeZoneDate object, see a24DateManager.createDate(sTimeZone)\n        objMinDate: null, //This should be a TimeZoneDate object, see a24DateManager.createDate(sTimeZone)\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _sInputId: null,\n        _arrDayLetters: null,\n        _arrDayLong: null,\n        _arrMonthShort: null,\n        _arrMonthLong: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"_arrDayLetters\", [this.get(\"_objStringsService\").getString(\"daySunLetter\"), this.get(\"_objStringsService\").getString(\"dayMonLetter\"), this.get(\"_objStringsService\").getString(\"dayTueLetter\"), this.get(\"_objStringsService\").getString(\"dayWedLetter\"), this.get(\"_objStringsService\").getString(\"dayThuLetter\"), this.get(\"_objStringsService\").getString(\"dayFriLetter\"), this.get(\"_objStringsService\").getString(\"daySatLetter\")]);\n            this.set(\"_arrDayLong\", [this.get(\"_objStringsService\").getString(\"daySunLong\"), this.get(\"_objStringsService\").getString(\"dayMonLong\"), this.get(\"_objStringsService\").getString(\"dayTueLong\"), this.get(\"_objStringsService\").getString(\"dayWedLong\"), this.get(\"_objStringsService\").getString(\"dayThuLong\"), this.get(\"_objStringsService\").getString(\"dayFriLong\"), this.get(\"_objStringsService\").getString(\"daySatLong\")]);\n            this.set(\"_arrMonthShort\", [this.get(\"_objStringsService\").getString(\"monthJanShort\"), this.get(\"_objStringsService\").getString(\"monthFebShort\"), this.get(\"_objStringsService\").getString(\"monthMarShort\"), this.get(\"_objStringsService\").getString(\"monthAprShort\"), this.get(\"_objStringsService\").getString(\"monthMayShort\"), this.get(\"_objStringsService\").getString(\"monthJunShort\"), this.get(\"_objStringsService\").getString(\"monthJulShort\"), this.get(\"_objStringsService\").getString(\"monthAugShort\"), this.get(\"_objStringsService\").getString(\"monthSepShort\"), this.get(\"_objStringsService\").getString(\"monthOctShort\"), this.get(\"_objStringsService\").getString(\"monthNovShort\"), this.get(\"_objStringsService\").getString(\"monthDecShort\")]);\n            this.set(\"_arrMonthLong\", [this.get(\"_objStringsService\").getString(\"monthJanLong\"), this.get(\"_objStringsService\").getString(\"monthFebLong\"), this.get(\"_objStringsService\").getString(\"monthMarLong\"), this.get(\"_objStringsService\").getString(\"monthAprLong\"), this.get(\"_objStringsService\").getString(\"monthMayLong\"), this.get(\"_objStringsService\").getString(\"monthJunLong\"), this.get(\"_objStringsService\").getString(\"monthJulLong\"), this.get(\"_objStringsService\").getString(\"monthAugLong\"), this.get(\"_objStringsService\").getString(\"monthSepLong\"), this.get(\"_objStringsService\").getString(\"monthOctLong\"), this.get(\"_objStringsService\").getString(\"monthNovLong\"), this.get(\"_objStringsService\").getString(\"monthDecLong\")]);\n\n            this.set(\"_sInputId\", Ember.guidFor({}));\n\n            var objThis = this;\n            Ember.run.scheduleOnce(\"afterRender\", this, function () {\n                var objDateInput = $(\"#\" + objThis.get(\"_sInputId\"));\n                var objMaxDate = objThis.get(\"objMaxDate\");\n                var objMinDate = objThis.get(\"objMinDate\");\n                if (a24Core.isEmpty(objMaxDate)) {\n                    objMaxDate = a24DateManager.createDate(objThis.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                    objMaxDate.setDateFromBrowser(\"31 Dec 2040\", this.get(\"_objLibConstants.DATE_FORMAT\"));\n                }\n                if (a24Core.isEmpty(objMinDate)) {\n                    objMinDate = a24DateManager.createDate(objThis.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                    objMinDate.setDateFromBrowser(\"01 Jan 1930\", this.get(\"_objLibConstants.DATE_FORMAT\"));\n                }\n                var arrMaxDate = [objMaxDate.getTimeOnDate(this.get(\"_objLibConstants.MOMENT_TIME_YEARS\")), objMaxDate.getTimeOnDate(this.get(\"_objLibConstants.MOMENT_TIME_MONTHS\")), objMaxDate.getTimeOnDate(this.get(\"_objLibConstants.MOMENT_TIME_DATE\"))];\n                var arrMinDate = [objMinDate.getTimeOnDate(this.get(\"_objLibConstants.MOMENT_TIME_YEARS\")), objMinDate.getTimeOnDate(this.get(\"_objLibConstants.MOMENT_TIME_MONTHS\")), objMinDate.getTimeOnDate(this.get(\"_objLibConstants.MOMENT_TIME_DATE\"))];\n\n                //set the initial value before adding the date picker to the field\n                objDateInput.pickadate({\n                    format: this.get(\"_objLibConstants.DATE_FORMAT\").toLowerCase(),\n                    weekdaysShort: objThis.get(\"_arrDayLetters\"),\n                    weekdaysFull: objThis.get(\"_arrDayLong\"),\n                    monthsShort: objThis.get(\"_arrMonthShort\"),\n                    monthsFull: objThis.get(\"_arrMonthLong\"),\n                    closeOnSelect: false,\n                    selectYears: 110, //This is the max amount of years that will display in the years dropdown at a time\n                    today: null,\n                    clear: this.get(\"_objStringsService\").getString(\"clear\"),\n                    close: this.get(\"_objStringsService\").getString(\"ok\"),\n                    labelMonthNext: this.get(\"_objStringsService\").getString(\"nextMonth\"),\n                    labelMonthPrev: this.get(\"_objStringsService\").getString(\"previousMonth\"),\n                    labelMonthSelect: this.get(\"_objStringsService\").getString(\"monthSelect\"),\n                    labelYearSelect: this.get(\"_objStringsService\").getString(\"yearSelect\"),\n                    max: arrMaxDate,\n                    min: arrMinDate,\n                    onSet: function onSet() {\n                        //Set the sSelectedDate when the value changes and also reset floater if value is empty\n                        objThis.set(\"sSelectedDate\", objDateInput.val());\n                        objThis.resetFloatingLabel(objDateInput);\n                    }\n                });\n                if (!a24Core.isEmpty(objThis.get(\"sSelectedDate\"))) {\n                    //Set the init date if we have one\n                    objDateInput.pickadate(\"picker\").set(\"select\", this.get(\"sSelectedDate\"), {\n                        format: this.get(\"_objLibConstants.DATE_FORMAT\").toLowerCase()\n                    });\n                }\n                objDateInput.on(\"blur\", function () {\n                    objThis.resetFloatingLabel(objDateInput);\n                });\n            });\n        },\n        resetFloatingLabel: function resetFloatingLabel(objDateInput) {\n            //If the input field has no value then the label should NOT have the active class and\n            //float at placeholder position\n            if (a24Core.isEmpty(objDateInput.val())) {\n                this.$(\"label\").removeClass(\"active\");\n            }\n        },\n        setInputValue: Ember.observer(\"sSelectedDate\", function () {\n            var objDateInput = $(\"#\" + this.get(\"_sInputId\"));\n\n            if (a24Core.isEmpty(this.get(\"sSelectedDate\"))) {\n                objDateInput.pickadate(\"picker\").clear();\n            } else if (objDateInput.val() !== this.get(\"sSelectedDate\")) {\n                objDateInput.pickadate(\"picker\").set(\"select\", this.get(\"sSelectedDate\"), {\n                    format: this.get(\"_objLibConstants.DATE_FORMAT\").toLowerCase()\n                });\n            }\n        })\n    });\n});","define(\"a24-ember-lib/components/input-dropdown\", [\"exports\", \"a24-ember-lib/templates/components/input-dropdown\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _inputDropdown, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _inputDropdown.default,\n        classNames: [\"md-form\"],\n        sFieldName: \"\",\n        sOptionsPrompt: null,\n        arrOptions: null,\n        bMultiSelect: false,\n        objValue: null,\n        arrValues: null,\n        sOptionsValueKey: \"sValue\",\n        sOptionsLabelKey: \"sLabel\",\n        _sInputId: null,\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            // If button not empty string set it to default\n            if (a24Core.isEmpty(this.get(\"sOptionsPrompt\"))) {\n                this.set(\"sOptionsPrompt\", this.get(\"_objStringsService\").getString(\"selectOption\"));\n            }\n\n            var objThis = this;\n            this.set(\"_sInputId\", Ember.guidFor({}));\n            if (a24Core.isEmpty(this.get(\"arrOptions\"))) {\n                this.set(\"arrOptions\", []);\n            }\n            if (a24Core.isEmpty(this.get(\"arrValues\"))) {\n                this.set(\"arrValues\", []);\n            }\n\n            Ember.run.scheduleOnce(\"afterRender\", this, function () {\n                var objDropdown = $(\"#\" + objThis.get(\"_sInputId\"));\n                objThis.setValuesOnDropdownInput(false);\n                objDropdown.material_select();\n                objDropdown.change(function () {\n                    objThis.getValuesOnDropdownInput(objDropdown);\n                });\n            });\n        },\n        observeValueChanges: Ember.observer(\"objValue\", \"arrValues\", function () {\n            this.setValuesOnDropdownInput(true);\n        }),\n        observeOptionsChange: Ember.observer(\"arrOptions.@each\", \"sOptionsPrompt\", function () {\n            Ember.run.once(this, this.setValuesAndDoAfterChange);\n        }),\n        setValuesAndDoAfterChange: function setValuesAndDoAfterChange() {\n            var _this = this;\n\n            //Reset values since they there are new options\n            this.set(\"objValue\", null);\n            this.set(\"arrValues\", []);\n            this.setValuesOnDropdownInput(false);\n            Ember.run.next(function () {\n                Ember.run.scheduleOnce(\"afterRender\", function () {\n                    _this.functionAfterOptionChange();\n                });\n            });\n        },\n        functionAfterOptionChange: function functionAfterOptionChange() {\n            var objDropdown = $(\"#\" + this.get(\"_sInputId\"));\n            objDropdown.material_select(\"destroy\");\n            objDropdown.material_select();\n        },\n        setValuesOnDropdownInput: function setValuesOnDropdownInput(bCheckCurrentValue) {\n            var objDropdown = $(\"#\" + this.get(\"_sInputId\"));\n            var bSetValues = true;\n\n            //If bCheckCurrentValue is true we know it is from the observers and then we need to check if the value changed\n            //since if it did not then setting the value on the input again will trigger another observe and then create\n            //infinite loop\n            if (bCheckCurrentValue) {\n                if (this.get(\"bMultiSelect\")) {\n                    var bMatch = true;\n                    var arrDropdown = objDropdown.val();\n                    var arrChange = this.get(\"arrValues\");\n                    if (a24Core.isEmpty(arrDropdown)) {\n                        arrDropdown = [];\n                    }\n                    if (a24Core.isEmpty(arrChange)) {\n                        arrChange = [];\n                    }\n                    if (arrDropdown.length === arrChange.length) {\n                        for (var i = 0; i < arrDropdown.length; i++) {\n                            if (arrDropdown[i] !== arrChange[i][this.get(\"sOptionsValueKey\")]) {\n                                bMatch = false;\n                                break;\n                            }\n                        }\n                    } else {\n                        bMatch = false;\n                    }\n                    bSetValues = !bMatch;\n                } else {\n                    var objCurrent = this.getSelectedObject(objDropdown);\n                    var objNew = this.get(\"objValue\");\n                    if (a24Core.isEmpty(objCurrent) && a24Core.isEmpty(objNew) || !a24Core.isEmpty(objCurrent) && !a24Core.isEmpty(objNew) && objCurrent[this.get(\"sOptionsValueKey\")] === objNew[this.get(\"sOptionsValueKey\")]) {\n                        bSetValues = false;\n                    }\n                }\n            }\n\n            if (bSetValues) {\n                if (this.get(\"bMultiSelect\")) {\n                    var arrNewValues = [];\n                    var arrValues = this.get(\"arrValues\");\n                    for (var j = 0; j < arrValues.length; j++) {\n                        arrNewValues.push(arrValues[j][this.get(\"sOptionsValueKey\")]);\n                    }\n\n                    objDropdown.material_select(\"destroy\");\n                    objDropdown.val(arrNewValues);\n                    objDropdown.material_select();\n                } else {\n                    var objNewValue = null;\n                    if (!a24Core.isEmpty(this.get(\"objValue\"))) {\n                        objNewValue = this.get(\"objValue\")[this.get(\"sOptionsValueKey\")];\n                    }\n\n                    objDropdown.material_select(\"destroy\");\n                    objDropdown.val(objNewValue);\n                    objDropdown.material_select();\n                }\n            }\n        },\n        getValuesOnDropdownInput: function getValuesOnDropdownInput(objDropdown) {\n            if (this.get(\"bMultiSelect\")) {\n                this.set(\"arrValues\", this.getSelectedObjects(objDropdown));\n            } else {\n                this.set(\"objValue\", this.getSelectedObject(objDropdown));\n            }\n        },\n        getSelectedObject: function getSelectedObject(objDropdown) {\n            var sValue = objDropdown.val();\n            var arrOptionsSingle = this.get(\"arrOptions\");\n            if (a24Core.isEmpty(sValue)) {\n                sValue = null;\n            }\n            var objSelectedItem = null;\n\n            for (var k = 0; k < arrOptionsSingle.length; k++) {\n                if (sValue === arrOptionsSingle[k][this.get(\"sOptionsValueKey\")]) {\n                    objSelectedItem = arrOptionsSingle[k];\n                }\n            }\n            return objSelectedItem;\n        },\n        getSelectedObjects: function getSelectedObjects(objDropdown) {\n            var arrValues = objDropdown.val();\n            var arrOptions = this.get(\"arrOptions\");\n            if (a24Core.isEmpty(arrValues)) {\n                arrValues = [];\n            }\n            var arrSelectedItems = [];\n\n            for (var i = 0; i < arrOptions.length; i++) {\n                for (var j = 0; j < arrValues.length; j++) {\n                    if (arrValues[j] === arrOptions[i][this.get(\"sOptionsValueKey\")]) {\n                        arrSelectedItems.push(arrOptions[i]);\n                    }\n                }\n            }\n            return arrSelectedItems;\n        },\n        actions: {\n            onChangeOption: function onChangeOption(objEvent) {\n                if (!a24Core.isEmpty(this.get(\"onChangeOptions\"))) {\n                    var arrOptions = this.getSelectedObjects($(objEvent.target));\n                    this.get(\"onChangeOptions\")(arrOptions);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/input-form-address\", [\"exports\", \"a24-ember-lib/templates/components/input-form-address\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _inputFormAddress, _inputFormElement, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _inputFormAddress.default,\n        classNames: [\"a24ErrorInputParent\", \"row\"],\n        sInputType: \"address\",\n        arrCountry: null,\n        arrCounty: null,\n        bDisplayCounty: false,\n        bDisplayPeriod: false,\n        bDisplayCurrent: false,\n        objAddressDetails: null,\n        sTimeZone: null,\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _arrFromDateMonth: null,\n        _arrFromDateYear: null,\n        _arrToDateMonth: null,\n        _arrToDateYear: null,\n        _objAddressDetailsUnbound: null,\n        _objCountrySelectedValue: null,\n        _objCountySelectedValue: null,\n        _objToDateYearSelected: null,\n        _objToDateMonthSelected: null,\n        _objFromDateYearSelected: null,\n        _objFromDateMonthSelected: null,\n        _iMinYear: 1930,\n        _iMaxYear: 2040,\n        _bDisplayToPeriod: false,\n        _bInternalProcess: false,\n        _arrMonthShort: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            if (a24Core.isEmpty(this.get(\"sTimeZone\"))) {\n                this.set(\"sTimeZone\", this.get(\"_objLibConstants.MOMENT_TIMEZONE_UTC\"));\n            }\n\n            this.set(\"_arrMonthShort\", [this.get(\"_objStringsService\").getString(\"monthJanShort\"), this.get(\"_objStringsService\").getString(\"monthFebShort\"), this.get(\"_objStringsService\").getString(\"monthMarShort\"), this.get(\"_objStringsService\").getString(\"monthAprShort\"), this.get(\"_objStringsService\").getString(\"monthMayShort\"), this.get(\"_objStringsService\").getString(\"monthJunShort\"), this.get(\"_objStringsService\").getString(\"monthJulShort\"), this.get(\"_objStringsService\").getString(\"monthAugShort\"), this.get(\"_objStringsService\").getString(\"monthSepShort\"), this.get(\"_objStringsService\").getString(\"monthOctShort\"), this.get(\"_objStringsService\").getString(\"monthNovShort\"), this.get(\"_objStringsService\").getString(\"monthDecShort\")]);\n\n            if (this.get(\"arrCountry\") === null) {\n                this.set(\"arrCountry\", []);\n            }\n            if (this.get(\"arrCounty\") === null) {\n                this.set(\"arrCounty\", []);\n            }\n\n            // Generate data for \"From Date\" month and year dropdowns\n            this.set(\"_arrFromDateYear\", a24Core.generateRangeOptions(this.get(\"_iMaxYear\"), this.get(\"_iMinYear\")));\n            this.set(\"_arrFromDateMonth\", this.generateMonthOptions());\n\n            // Generate data for \"To Date\" month and year dropdowns\n            this.set(\"_arrToDateYear\", a24Core.generateRangeOptions(this.get(\"_iMaxYear\"), this.get(\"_iMinYear\")));\n            this.set(\"_arrToDateMonth\", this.generateMonthOptions());\n\n            if (!a24Core.isEmpty(this.get(\"objAddressDetails\"))) {\n                var objAddressDetails = this.get(\"objAddressDetails\");\n                // Set the selected \"Date From\"\n                if (!a24Core.isEmpty(objAddressDetails.sFromDate)) {\n                    var objFromDate = this.splitDateToObject(objAddressDetails.sFromDate);\n                    this.set(\"_objFromDateMonthSelected\", objFromDate.sMonth);\n                    this.set(\"_objFromDateYearSelected\", objFromDate.sYear);\n                }\n\n                // Set the selected \"Date To\"\n                if (!a24Core.isEmpty(objAddressDetails.sToDate)) {\n                    var objToDate = this.splitDateToObject(objAddressDetails.sToDate);\n                    this.set(\"_objToDateMonthSelected\", objToDate.sMonth);\n                    this.set(\"_objToDateYearSelected\", objToDate.sYear);\n                }\n            }\n\n            // Update mValue and fields with data passed from parent\n            this.updateDataFromParent(false);\n            // Setup validation for fields that require it\n            this.setupValidation();\n        },\n        checkExtraTypes: function checkExtraTypes(objChild) {\n            //Override the checkExtraTypes from the input form mixin to allow us to handle the address type\n\n            if (objChild.sInputType === \"address\") {\n                var objValue = this.getPlainFormValueObject();\n                if (!this.get(\"bDisplayCounty\")) {\n                    delete objValue.sCounty;\n                }\n\n                if (this.get(\"bDisplayPeriod\")) {\n                    objValue[\"sFromDate\"] = null;\n                    if (!a24Core.isEmpty(objValue.sDateFromMonth) && !a24Core.isEmpty(objValue.sDateFromYear)) {\n                        objValue[\"sFromDate\"] = this.formatRangeDate(objValue.sDateFromYear, objValue.sDateFromMonth);\n                    }\n\n                    if (this.get(\"_bShouldDisplayToDate\")) {\n                        objValue[\"sToDate\"] = null;\n                        if (!a24Core.isEmpty(objValue.sDateToMonth) && !a24Core.isEmpty(objValue.sDateToYear)) {\n                            objValue[\"sToDate\"] = this.formatRangeDate(objValue.sDateToYear, objValue.sDateToMonth);\n                        }\n                    }\n                }\n\n                delete objValue.sDateFromYear;\n                delete objValue.sDateFromMonth;\n                delete objValue.sDateToYear;\n                delete objValue.sDateToMonth;\n\n                if (!this.get(\"bDisplayCurrent\")) {\n                    delete objValue.bCurrent;\n                }\n\n                return {\n                    bHandled: true,\n                    mReturned: objValue\n                };\n            }\n        },\n        // Sets up default validation on fields that require validation\n        setupValidation: function setupValidation() {\n            var _this = this;\n\n            // Will check if the selected year/month date is in the future\n            var funcValidateFutureDate = function funcValidateFutureDate(objMixin, sYearField, sMonthField, bEmptyMessage) {\n                // Get the current date but the day is set to the last day of the month\n                var objCurrentEndOfMonth = a24DateManager.createDate(_this.get(\"sTimeZone\"));\n                objCurrentEndOfMonth.endOf(_this.get(\"_objLibConstants.MOMENT_UNIT_MONTH\"));\n\n                // Get the specified date but the day is set to the first day of the month\n                var objFromDate = a24DateManager.createDate(_this.get(\"sTimeZone\"));\n                objFromDate.setTimeOnDate(_this.get(\"_objLibConstants.MOMENT_UNIT_YEAR\"), parseInt(_this.get(\"objChildren.\" + sYearField + \".mValue.sValue\")));\n                objFromDate.setTimeOnDate(_this.get(\"_objLibConstants.MOMENT_UNIT_MONTH\"), parseInt(_this.get(\"objChildren.\" + sMonthField + \".mValue.sValue\")));\n                objFromDate.startOf(_this.get(\"_objLibConstants.MOMENT_UNIT_MONTH\"));\n\n                if (objFromDate.isAfter(objCurrentEndOfMonth)) {\n                    if (bEmptyMessage === true) {\n                        return \"&nbsp;\";\n                    } else {\n                        return _this.get(\"_objStringsService\").getTokenString(\"validationDateInFuture\", objMixin.get(\"sFieldName\"));\n                    }\n                }\n            };\n\n            // Will ensure that the To Date is not before the From Date\n            var funcValidateToDateBeforeFrom = function funcValidateToDateBeforeFrom(objMixin, bEmptyMessage) {\n\n                // The From Date but the day is set to the first day of the month\n                var objFromDate = a24DateManager.createDate(_this.get(\"sTimeZone\"));\n                objFromDate.setTimeOnDate(_this.get(\"_objLibConstants.MOMENT_UNIT_YEAR\"), parseInt(_this.get(\"objChildren.sDateFromYear.mValue.sValue\")));\n                objFromDate.setTimeOnDate(_this.get(\"_objLibConstants.MOMENT_TIME_MONTHS\"), parseInt(_this.get(\"objChildren.sDateFromMonth.mValue.sValue\")));\n                objFromDate.startOf(_this.get(\"_objLibConstants.MOMENT_UNIT_MONTH\"));\n\n                // The TO Date but the day is set to the last day of the month\n                var objToDate = a24DateManager.createDate(_this.get(\"sTimeZone\"));\n                objToDate.setTimeOnDate(_this.get(\"_objLibConstants.MOMENT_UNIT_YEAR\"), parseInt(_this.get(\"objChildren.sDateToYear.mValue.sValue\")));\n                objToDate.setTimeOnDate(_this.get(\"_objLibConstants.MOMENT_TIME_MONTHS\"), parseInt(_this.get(\"objChildren.sDateToMonth.mValue.sValue\")));\n                objToDate.endOf(_this.get(\"_objLibConstants.MOMENT_UNIT_MONTH\"));\n\n                if (objToDate.isBefore(objFromDate)) {\n                    if (bEmptyMessage === true) {\n                        return \"&nbsp;\";\n                    } else {\n                        return _this.get(\"_objStringsService\").getTokenString(\"validationDateBefore\", _this.get(\"objChildren.sDateToMonth.sFieldName\"), _this.get(\"objChildren.sDateFromMonth.sFieldName\"));\n                    }\n                }\n            };\n\n            // Set validation on all fields that require validation\n            this.set(\"objChildConfig\", {\n                \"objChildren.sAddressLine1\": function objChildrenSAddressLine1(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                },\n                \"objChildren.sCityTown\": function objChildrenSCityTown(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                },\n                \"objChildren.sCountryCode\": function objChildrenSCountryCode(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                },\n                \"objChildren.sDateFromMonth\": function objChildrenSDateFromMonth(objMixin) {\n                    // We need to do custom required validation here as this field is dependent on sDateFromYear\n                    objMixin.get(\"arrValidation\").pushObject(function () {\n                        if (a24Core.isEmpty(objMixin.get(\"mValue\")) || a24Core.isEmpty(_this.get(\"objChildren.sDateFromYear.mValue\"))) {\n                            return _this.get(\"_objStringsService\").getTokenString(\"validationRequired\", objMixin.get(\"sFieldName\"));\n                        }\n                    });\n\n                    // Check if the From Date in the future\n                    objMixin.get(\"arrValidation\").pushObject(function () {\n                        return funcValidateFutureDate(objMixin, \"sDateFromYear\", \"sDateFromMonth\", false);\n                    });\n                },\n                \"objChildren.sDateFromYear\": function objChildrenSDateFromYear(objMixin) {\n                    // We need to do custom required validation here as this field is dependent on sDateFromMonth\n                    objMixin.get(\"arrValidation\").pushObject(function () {\n                        if (a24Core.isEmpty(objMixin.get(\"mValue\")) || a24Core.isEmpty(_this.get(\"objChildren.sDateFromMonth.mValue\"))) {\n                            // Return an space to highlight the field\n                            return \"&nbsp;\";\n                        }\n                    });\n\n                    // Check if the From Date in the future\n                    objMixin.get(\"arrValidation\").pushObject(function () {\n                        return funcValidateFutureDate(objMixin, \"sDateFromYear\", \"sDateFromMonth\", true);\n                    });\n                },\n                \"objChildren.sDateToMonth\": function objChildrenSDateToMonth(objMixin) {\n                    // We need to do custom required validation here as this field is dependent on sDateToYear\n                    objMixin.get(\"arrValidation\").pushObject(function () {\n                        if (a24Core.isEmpty(objMixin.get(\"mValue\")) || a24Core.isEmpty(_this.get(\"objChildren.sDateToYear.mValue\"))) {\n                            return _this.get(\"_objStringsService\").getTokenString(\"validationRequired\", objMixin.get(\"sFieldName\"));\n                        }\n                    });\n\n                    // Check if the To Date in the future\n                    objMixin.get(\"arrValidation\").pushObject(function () {\n                        return funcValidateFutureDate(objMixin, \"sDateToYear\", \"sDateToMonth\", false);\n                    });\n\n                    // Check To Date is before From Date\n                    objMixin.get(\"arrValidation\").pushObject(function () {\n                        return funcValidateToDateBeforeFrom(objMixin, false);\n                    });\n                },\n                \"objChildren.sDateToYear\": function objChildrenSDateToYear(objMixin) {\n                    // We need to do custom required validation here as this field is dependent on sDateToMonth\n                    objMixin.get(\"arrValidation\").pushObject(function () {\n                        if (a24Core.isEmpty(objMixin.get(\"mValue\")) || a24Core.isEmpty(_this.get(\"objChildren.sDateToMonth.mValue\"))) {\n                            return \"&nbsp;\";\n                        }\n                    });\n\n                    // Check if the To Date in the future\n                    objMixin.get(\"arrValidation\").pushObject(function () {\n                        return funcValidateFutureDate(objMixin, \"sDateToYear\", \"sDateToMonth\", true);\n                    });\n\n                    // Check To Date is before From Date\n                    objMixin.get(\"arrValidation\").pushObject(function () {\n                        return funcValidateToDateBeforeFrom(objMixin, true);\n                    });\n                }\n            });\n        },\n        /**\n         * Whenever a child's value changes this will be called.\n         *\n         * To prevent multitude of events from firing we check if the changes\n         * that where made came from the parent. If this is the case we do not call updateData\n         */\n        onInputValueChanged: function onInputValueChanged(arrPathToInputMixin) {\n            var sLookup = arrPathToInputMixin.join(\".\");\n\n            if (sLookup === \"objChildren.sCountryCode\") {\n                if (!a24Core.isEmpty(this.get(sLookup + \".mValue\"))) {\n                    this.get(\"objChildren.sPostCode\").get(\"arrValidation\").clear();\n                    this.get(\"objChildren.sPostCode\").set(\"funcValidationRequired\", null);\n\n                    if (this.get(sLookup + \".mValue.sValue\") === \"UK\" || this.get(sLookup + \".mValue.sValue\") === \"GB\") {\n                        a24Validation.addPostCode(this.get(\"objChildren.sPostCode\"));\n                    }\n\n                    this._formatPostCode();\n                }\n            } else if (sLookup === \"objChildren.sPostCode\") {\n                this._formatPostCode();\n            }\n\n            if (!a24Core.isEmpty(arrPathToInputMixin) && !this.get(\"_bInternalProcess\")) {\n                Ember.run.once(this, this.updateData);\n            }\n        },\n        _formatPostCode: function _formatPostCode() {\n            var objCountryCode = this.get(\"objChildren\")[\"sCountryCode\"];\n            var objPostCode = this.get(\"objChildren\")[\"sPostCode\"];\n\n            if (!a24Core.isEmpty(objCountryCode) && !a24Core.isEmpty(objCountryCode.mValue) && !a24Core.isEmpty(objPostCode.mValue) && (objCountryCode.mValue.sValue === \"UK\" || objCountryCode.mValue.sValue === \"GB\")) {\n                var sInputValue = objPostCode.mValue.trim();\n                if (!/\\s/.test(sInputValue)) {\n                    var sValue1 = sInputValue.slice(0, sInputValue.length - 3);\n                    var sValue2 = sInputValue.slice(sInputValue.length - 3, sInputValue.length);\n                    objPostCode.setValueFromOutside(sValue1.toUpperCase() + \" \" + sValue2.toUpperCase());\n                } else if (sInputValue.split(\" \").length > 1) {\n                    objPostCode.setValueFromOutside(sInputValue.replace(/  +/g, \" \").toUpperCase());\n                }\n            }\n        },\n        onDisplayFieldsChanged: Ember.observer(\"bDisplayCounty\", \"bDisplayPeriod\", \"bDisplayCurrent\", function () {\n            Ember.run.once(this, this.updateData);\n        }),\n        // This will apply all child values to the mValue\n        updateData: function updateData() {\n\n            var objValue = this.getPlainFormValueObject();\n\n            if (a24Core.isEmpty(objValue.bCurrent)) {\n                this.set(\"_bCurrentAddress\", false);\n            } else {\n                this.set(\"_bCurrentAddress\", objValue.bCurrent);\n            }\n\n            this._buildInputValueChangedPath([]);\n        },\n        checkForCheckbox: Ember.observer(\"objAddressDetails.bCurrent\", function () {\n            var objAddressDetailsUnbound = this.get(\"_objAddressDetailsUnbound\");\n            if (objAddressDetailsUnbound.bCurrent === true) {\n                this.set(\"_objAddressDetailsUnbound.bCurrent\", false);\n                this.set(\"_bCurrentAddress\", false);\n            } else {\n                this.set(\"_objAddressDetailsUnbound.bCurrent\", true);\n                this.set(\"_bCurrentAddress\", true);\n            }\n        }),\n        // Checks if any of the parents data changed\n        //Seems that we can only observe the objAddressDetails here and not every property on it\n        //This is because in production code it will work as expected and only fire one updateDataFromParent\n        //no matter how many properties change at a time, that is because of the run once. HOWEVER, that is not the\n        //case in test cases, there it will basically ignore the run once and fire the updateDataFromParent multiple\n        //time, see below link\n        //https://guides.emberjs.com/v2.10.0/applications/run-loop/#toc_how-is-run-loop-behaviour-different-when-testing\n        //And no, we are not doing the run once in the observer wrong, see ember run once example in doc below\n        //https://guides.emberjs.com/v2.10.0/object-model/observers/#toc_observers-and-asynchrony\n        //We can not have tests that do not test the code accurately, so for this component to change details from\n        //outside you would have to replace the objAddressDetails completely\n        //\"objAddressDetails.sAddressLine1\",\n        //\"objAddressDetails.sAddressLine2\",\n        //\"objAddressDetails.sCityTown\",\n        //\"objAddressDetails.sPostCode\",\n        //\"objAddressDetails.sCountryCode\",\n        //\"objAddressDetails.sCounty\",\n        //\"objAddressDetails.sFromDate\",\n        //\"objAddressDetails.sToDate\",\n        //\"objAddressDetails.bCurrent\"\n        updateDataFromParentObserves: Ember.observer(\"objAddressDetails\", function () {\n            Ember.run.once(this, this.updateDataFromParent, true);\n        }),\n        // Applies the parents values to all input fields and set it to the mValue\n        updateDataFromParent: function updateDataFromParent(bFireEvent) {\n            var _this2 = this;\n\n            this.set(\"_bInternalProcess\", true);\n            var objValue = {};\n\n            //Call this from init and set mValue from objAddressDetails\n            objValue[\"bCurrent\"] = false;\n            if (!a24Core.isEmpty(this.get(\"objAddressDetails.bCurrent\"))) {\n                this.set(\"_bCurrentAddress\", this.get(\"objAddressDetails.bCurrent\"));\n                objValue[\"bCurrent\"] = this.get(\"objAddressDetails.bCurrent\");\n            } else {\n                this.set(\"_bCurrentAddress\", false);\n            }\n\n            objValue[\"sAddressLine1\"] = null;\n            if (!a24Core.isEmpty(this.get(\"objAddressDetails.sAddressLine1\"))) {\n                objValue[\"sAddressLine1\"] = this.get(\"objAddressDetails.sAddressLine1\");\n            }\n\n            objValue[\"sAddressLine2\"] = null;\n            if (!a24Core.isEmpty(this.get(\"objAddressDetails.sAddressLine2\"))) {\n                objValue[\"sAddressLine2\"] = this.get(\"objAddressDetails.sAddressLine2\");\n            }\n\n            objValue[\"sCityTown\"] = null;\n            if (!a24Core.isEmpty(this.get(\"objAddressDetails.sCityTown\"))) {\n                objValue[\"sCityTown\"] = this.get(\"objAddressDetails.sCityTown\");\n            }\n\n            objValue[\"sPostCode\"] = null;\n            if (!a24Core.isEmpty(this.get(\"objAddressDetails.sPostCode\"))) {\n                objValue[\"sPostCode\"] = this.get(\"objAddressDetails.sPostCode\");\n            }\n\n            objValue[\"sCountryCode\"] = null;\n            if (!a24Core.isEmpty(this.get(\"objAddressDetails.sCountryCode\"))) {\n                objValue[\"sCountryCode\"] = this.get(\"objAddressDetails.sCountryCode\");\n                this.set(\"_objCountrySelectedValue\", { sValue: this.get(\"objAddressDetails.sCountryCode\") });\n            } else {\n                this.set(\"_objCountrySelectedValue\", { sValue: null });\n            }\n\n            objValue[\"sCounty\"] = null;\n            if (!a24Core.isEmpty(this.get(\"objAddressDetails.sCounty\"))) {\n                objValue[\"sCounty\"] = this.get(\"objAddressDetails.sCounty\");\n                this.set(\"_objCountySelectedValue\", { sValue: this.get(\"objAddressDetails.sCounty\") });\n            } else {\n                this.set(\"_objCountySelectedValue\", { sValue: null });\n            }\n\n            objValue[\"sDateFromYear\"] = null;\n            objValue[\"sDateFromMonth\"] = null;\n            objValue[\"sDateToYear\"] = null;\n            objValue[\"sDateToMonth\"] = null;\n\n            if (!a24Core.isEmpty(this.get(\"objAddressDetails.sFromDate\"))) {\n                var objFromDate = this.splitDateToObject(this.get(\"objAddressDetails.sFromDate\"));\n                this.set(\"_objFromDateMonthSelected\", objFromDate.sMonth);\n                this.set(\"_objFromDateYearSelected\", objFromDate.sYear);\n\n                objValue[\"sDateFromYear\"] = objFromDate.sYear.sValue;\n                objValue[\"sDateFromMonth\"] = objFromDate.sMonth.sValue;\n            } else {\n                this.set(\"_objFromDateMonthSelected\", { sValue: null });\n                this.set(\"_objFromDateYearSelected\", { sValue: null });\n            }\n\n            if (!a24Core.isEmpty(this.get(\"objAddressDetails.sToDate\"))) {\n                var objToDate = this.splitDateToObject(this.get(\"objAddressDetails.sToDate\"));\n                this.set(\"_objToDateMonthSelected\", objToDate.sMonth);\n                this.set(\"_objToDateYearSelected\", objToDate.sYear);\n\n                objValue[\"sDateToYear\"] = objToDate.sYear.sValue;\n                objValue[\"sDateToMonth\"] = objToDate.sMonth.sValue;\n            } else {\n                this.set(\"_objToDateMonthSelected\", { sValue: null });\n                this.set(\"_objToDateYearSelected\", { sValue: null });\n            }\n\n            this.clearForm();\n\n            // Unbind the parents objAddressDetails\n            this.set(\"_objAddressDetailsUnbound\", Ember.copy(objValue, true));\n\n            // Only call method if parent data changed\n            if (bFireEvent) {\n                this._buildInputValueChangedPath([]);\n            }\n\n            // Set value back to false once the parent update process has completed\n            Ember.run.next(function () {\n                _this2.set(\"_bInternalProcess\", false);\n            });\n        },\n        // Property used to determine if the To Date should be displayed or not\n        _bShouldDisplayToDate: Ember.computed(\"bDisplayPeriod\", \"_bCurrentAddress\", function () {\n            return this.get(\"bDisplayPeriod\") && !this.get(\"_bCurrentAddress\");\n        }),\n        formatRangeDate: function formatRangeDate(sYear, sMonth) {\n            sMonth = (parseInt(sMonth) + 1).toString();\n            if (parseInt(sMonth) < 10) {\n                sMonth = \"0\" + sMonth;\n            }\n            return sYear + \"-\" + sMonth;\n        },\n        splitDateToObject: function splitDateToObject(sDate) {\n            var arrDate = sDate.split(\"-\");\n            return {\n                sYear: { sValue: arrDate[0] },\n                sMonth: { sValue: (parseInt(arrDate[1]) - 1).toString() }\n            };\n        },\n        generateMonthOptions: function generateMonthOptions() {\n            var arrResult = [];\n            var arrMonthShort = this.get(\"_arrMonthShort\");\n            for (var i = 0; i < 12; i++) {\n                arrResult.push({ sValue: i.toString(), sLabel: arrMonthShort[i] });\n            }\n\n            return arrResult;\n        }\n    });\n});","define(\"a24-ember-lib/components/input-form-checkbox\", [\"exports\", \"a24-ember-lib/templates/components/input-form-checkbox\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _inputFormCheckbox, _inputFormElement, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _inputFormCheckbox.default,\n        classNames: [\"a24ErrorInputParent\"],\n        classNameBindings: [\"hasErrorMessageSpace::clear-margin-bottom\"],\n        hasErrorMessageSpace: false,\n        bValue: false,\n        mCheckboxValue: null,\n        sInputType: \"checkbox\",\n        bDisabled: false,\n        _bUIValue: false,\n        _bInternalProcess: false,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            // Set as internal process\n            this.set(\"_bInternalProcess\", true);\n            // Set UI value\n            this.set(\"_bUIValue\", this.get(\"bValue\"));\n            // Set mValue\n            this.setMValueWithInternalFlag({\n                bValue: this.get(\"_bUIValue\"),\n                mCheckboxValue: this.get(\"mCheckboxValue\")\n            }, true);\n            // Done with internal process\n            this.set(\"_bInternalProcess\", false);\n\n            if (!a24Core.isEmpty(this.get(\"sErrorMessage\"))) {\n                this.observeErrorChanges();\n            }\n        },\n        clear: function clear() {\n            this.set(\"_bUIValue\", false);\n        },\n        onUIValue: Ember.observer(\"_bUIValue\", function () {\n            // UI value might change as a result of internal changes,\n            // here we use the state of _bInternalProcess to avoid unneeded events\n            this.setMValueWithInternalFlag({\n                bValue: this.get(\"_bUIValue\"),\n                mCheckboxValue: this.get(\"mCheckboxValue\")\n            }, this.get(\"_bInternalProcess\"));\n        }),\n        observeChangesFromOutside: Ember.observer(\"bValue\", \"mCheckboxValue\", function () {\n            this.set(\"_bInternalProcess\", true);\n            this.set(\"_bUIValue\", this.get(\"bValue\"));\n            this.set(\"_bInternalProcess\", false);\n        }),\n        observeErrorChanges: Ember.observer(\"sErrorMessage\", function () {\n            if (a24Core.isEmpty(this.get(\"sErrorMessage\"))) {\n                this.set(\"hasErrorMessageSpace\", false);\n            } else {\n                this.set(\"hasErrorMessageSpace\", true);\n            }\n        })\n    });\n});","define(\"a24-ember-lib/components/input-form-date-picker\", [\"exports\", \"a24-ember-lib/templates/components/input-form-date-picker\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _inputFormDatePicker, _inputFormElement, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _inputFormDatePicker.default,\n        classNames: [\"input-form-date-picker\", \"md-form\", \"a24ErrorInputParent\"],\n        classNameBindings: [\"bIsOutline:a24-form-outlined\", \"bDisabled:is-disabled\"],\n        bDisabled: false,\n        bIsOutline: false,\n        sSelectedDate: null,\n        objMaxDate: null, //This should be a TimeZoneDate object, see a24DateManager.createDate(sTimeZone)\n        objMinDate: null, //This should be a TimeZoneDate object, see a24DateManager.createDate(sTimeZone)\n        sInputType: \"date\",\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _bInternalProcess: false,\n        _arrDayLetters: null,\n        _arrDayLong: null,\n        _arrMonthShort: null,\n        _arrMonthLong: null,\n        _sDefaultTestDate: \"15 Jan 2015\",\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.set(\"_arrDayLetters\", [this.get(\"_objStringsService\").getString(\"daySunLetter\"), this.get(\"_objStringsService\").getString(\"dayMonLetter\"), this.get(\"_objStringsService\").getString(\"dayTueLetter\"), this.get(\"_objStringsService\").getString(\"dayWedLetter\"), this.get(\"_objStringsService\").getString(\"dayThuLetter\"), this.get(\"_objStringsService\").getString(\"dayFriLetter\"), this.get(\"_objStringsService\").getString(\"daySatLetter\")]);\n            this.set(\"_arrDayLong\", [this.get(\"_objStringsService\").getString(\"daySunLong\"), this.get(\"_objStringsService\").getString(\"dayMonLong\"), this.get(\"_objStringsService\").getString(\"dayTueLong\"), this.get(\"_objStringsService\").getString(\"dayWedLong\"), this.get(\"_objStringsService\").getString(\"dayThuLong\"), this.get(\"_objStringsService\").getString(\"dayFriLong\"), this.get(\"_objStringsService\").getString(\"daySatLong\")]);\n            this.set(\"_arrMonthShort\", [this.get(\"_objStringsService\").getString(\"monthJanShort\"), this.get(\"_objStringsService\").getString(\"monthFebShort\"), this.get(\"_objStringsService\").getString(\"monthMarShort\"), this.get(\"_objStringsService\").getString(\"monthAprShort\"), this.get(\"_objStringsService\").getString(\"monthMayShort\"), this.get(\"_objStringsService\").getString(\"monthJunShort\"), this.get(\"_objStringsService\").getString(\"monthJulShort\"), this.get(\"_objStringsService\").getString(\"monthAugShort\"), this.get(\"_objStringsService\").getString(\"monthSepShort\"), this.get(\"_objStringsService\").getString(\"monthOctShort\"), this.get(\"_objStringsService\").getString(\"monthNovShort\"), this.get(\"_objStringsService\").getString(\"monthDecShort\")]);\n            this.set(\"_arrMonthLong\", [this.get(\"_objStringsService\").getString(\"monthJanLong\"), this.get(\"_objStringsService\").getString(\"monthFebLong\"), this.get(\"_objStringsService\").getString(\"monthMarLong\"), this.get(\"_objStringsService\").getString(\"monthAprLong\"), this.get(\"_objStringsService\").getString(\"monthMayLong\"), this.get(\"_objStringsService\").getString(\"monthJunLong\"), this.get(\"_objStringsService\").getString(\"monthJulLong\"), this.get(\"_objStringsService\").getString(\"monthAugLong\"), this.get(\"_objStringsService\").getString(\"monthSepLong\"), this.get(\"_objStringsService\").getString(\"monthOctLong\"), this.get(\"_objStringsService\").getString(\"monthNovLong\"), this.get(\"_objStringsService\").getString(\"monthDecLong\")]);\n\n            Ember.run.scheduleOnce(\"afterRender\", this, function () {\n                var objDateInput = $(\"#\" + _this.get(\"_sInputId\"));\n                var objMaxDate = _this.get(\"objMaxDate\");\n                var objMinDate = _this.get(\"objMinDate\");\n                if (a24Core.isEmpty(objMaxDate)) {\n                    objMaxDate = a24DateManager.createDate(_this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                    objMaxDate.setDateFromBrowser(\"31 Dec 2040\", _this.get(\"_objLibConstants.DATE_FORMAT\"));\n                }\n                if (a24Core.isEmpty(objMinDate)) {\n                    objMinDate = a24DateManager.createDate(_this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                    objMinDate.setDateFromBrowser(\"01 Jan 1930\", _this.get(\"_objLibConstants.DATE_FORMAT\"));\n                }\n                var arrMaxDate = [objMaxDate.getTimeOnDate(_this.get(\"_objLibConstants.MOMENT_TIME_YEARS\")), objMaxDate.getTimeOnDate(_this.get(\"_objLibConstants.MOMENT_TIME_MONTHS\")), objMaxDate.getTimeOnDate(_this.get(\"_objLibConstants.MOMENT_TIME_DATE\"))];\n                var arrMinDate = [objMinDate.getTimeOnDate(_this.get(\"_objLibConstants.MOMENT_TIME_YEARS\")), objMinDate.getTimeOnDate(_this.get(\"_objLibConstants.MOMENT_TIME_MONTHS\")), objMinDate.getTimeOnDate(_this.get(\"_objLibConstants.MOMENT_TIME_DATE\"))];\n\n                //set the initial value before adding the date picker to the field\n                objDateInput.pickadate({\n                    format: _this.get(\"_objLibConstants.DATE_FORMAT\").toLowerCase(),\n                    weekdaysShort: _this.get(\"_arrDayLetters\"),\n                    weekdaysFull: _this.get(\"_arrDayLong\"),\n                    monthsShort: _this.get(\"_arrMonthShort\"),\n                    monthsFull: _this.get(\"_arrMonthLong\"),\n                    closeOnSelect: false,\n                    selectYears: 110, //This is the max amount of years that will display in the years dropdown at a time\n                    today: null,\n                    clear: _this.get(\"_objStringsService\").getString(\"clear\"),\n                    close: _this.get(\"_objStringsService\").getString(\"ok\"),\n                    labelMonthNext: _this.get(\"_objStringsService\").getString(\"nextMonth\"),\n                    labelMonthPrev: _this.get(\"_objStringsService\").getString(\"previousMonth\"),\n                    labelMonthSelect: _this.get(\"_objStringsService\").getString(\"monthSelect\"),\n                    labelYearSelect: _this.get(\"_objStringsService\").getString(\"yearSelect\"),\n                    max: arrMaxDate,\n                    min: arrMinDate,\n                    onSet: function onSet() {\n                        //Set mValue when the value changes and also reset floater if value is empty\n                        _this.setMValueWithInternalFlag(objDateInput.val(), _this.get(\"_bInternalProcess\"));\n\n                        _this.resetFloatingLabel(objDateInput);\n                    }\n                });\n                var env = Ember.getOwner(_this).resolveRegistration(\"config:environment\");\n                if (env.environment === \"test\") {\n                    objDateInput.on(\"onSetDateForTest\", function (objEvent, sDate) {\n                        _this.set(\"sSelectedDate\", sDate);\n                    });\n                    if (a24Core.isEmpty(_this.get(\"sSelectedDate\"))) {\n                        _this.set(\"sSelectedDate\", _this.get(\"_sDefaultTestDate\"));\n                    }\n                }\n                if (!a24Core.isEmpty(_this.get(\"sSelectedDate\"))) {\n                    //Set the init date if we have one\n                    _this.set(\"_bInternalProcess\", true);\n                    objDateInput.pickadate(\"picker\").set(\"select\", _this.get(\"sSelectedDate\"), {\n                        format: _this.get(\"_objLibConstants.DATE_FORMAT\").toLowerCase()\n                    });\n                    _this.set(\"_bInternalProcess\", false);\n                }\n                objDateInput.on(\"blur\", function () {\n                    _this.resetFloatingLabel(objDateInput);\n                });\n\n                $(_this.$()).on(\"keyup\", function (objEvent) {\n                    if (objEvent.which === 27) {\n                        objEvent.stopPropagation();\n                    }\n                });\n\n                _this.$().on(\"keyup\", function (objEvent) {\n                    if (objEvent.which === 27) {\n                        objEvent.stopPropagation();\n                    }\n                });\n\n                _this.setMValueWithInternalFlag(_this.get(\"sSelectedDate\"), true);\n            });\n        },\n        resetFloatingLabel: function resetFloatingLabel(objDateInput) {\n            //If the input field has no value then the label should NOT have the active class and\n            //float at placeholder position\n            if (a24Core.isEmpty(objDateInput.val())) {\n                this.$(\"label\").removeClass(\"active\");\n            }\n        },\n        clear: function clear() {\n            this.setValueFromOutside(null);\n        },\n        setValueFromOutside: function setValueFromOutside(sSelectedDate) {\n            var objDateInput = $(\"#\" + this.get(\"_sInputId\"));\n\n            if (a24Core.isEmpty(sSelectedDate)) {\n                objDateInput.pickadate(\"picker\").clear();\n            } else if (objDateInput.val() !== sSelectedDate) {\n                objDateInput.pickadate(\"picker\").set(\"select\", sSelectedDate, {\n                    format: this.get(\"_objLibConstants.DATE_FORMAT\").toLowerCase()\n                });\n            }\n        },\n        setInputValue: Ember.observer(\"sSelectedDate\", function () {\n            this.set(\"_bInternalProcess\", true);\n            this.setValueFromOutside(this.get(\"sSelectedDate\"));\n            this.set(\"_bInternalProcess\", false);\n        })\n    });\n});","define(\"a24-ember-lib/components/input-form-dropdown\", [\"exports\", \"a24-ember-lib/templates/components/input-form-dropdown\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-window/mixins/a24responsive\"], function (exports, _inputFormDropdown, _inputFormElement, _didRenderChangesMixin, _a24responsive) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _a24responsive.default, _didRenderChangesMixin.default, {\n        layout: _inputFormDropdown.default,\n        classNames: [\"input-form-dropdown\", \"md-form\", \"a24ErrorInputParent\"],\n        classNameBindings: [\"bLoading:loading\"],\n        bLoading: false,\n        bDisabled: false,\n        sOptionsValueKey: \"sValue\",\n        sOptionsLabelKey: \"sLabel\",\n        sOptionsPrompt: null,\n        bMultiSelect: false,\n        arrOptions: null,\n        objValue: null,\n        arrValues: null,\n        sInputType: \"\",\n        _bInitializing: false,\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objConstantsWindowService: Ember.inject.service(\"a24-constants-window\"),\n        _objDomService: Ember.inject.service(\"dom-event\"),\n        _objDivInstance: null,\n        _objCloseLater: null,\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            if (this.get(\"bMultiSelect\")) {\n                this.set(\"sInputType\", \"dropdown-multi\");\n            } else {\n                this.set(\"sInputType\", \"dropdown-single\");\n            }\n\n            this.set(\"_bInitializing\", true);\n            this.get(\"_objDomService\");\n\n            // Create a new body level div\n            this.set(\"_objDivInstance\", $(\"<div class='displayBlock select-wrapper mdb-select dropdown-blocker'></div>\"));\n            $(\"body\").append(this.get(\"_objDivInstance\"));\n\n            // We are blocking scrolling on the blocker div once its in view. This will help when the dropdown shows\n            // that the whole page does not scroll that will place the dropdown on the wrong position.\n            this.get(\"_objDivInstance\").on(\"scroll wheel DOMMouseScroll mousewheel touchmove\", function (objEvent) {\n                objEvent.stopPropagation();\n            });\n\n            // If button not empty string set it to default\n            if (a24Core.isEmpty(this.get(\"sOptionsPrompt\"))) {\n                this.set(\"sOptionsPrompt\", this.get(\"_objStringsService\").getString(\"selectOption\"));\n            }\n\n            // If array options is any empty type\n            if (a24Core.isEmpty(this.get(\"arrOptions\"))) {\n                // Default to an empty list\n                this.set(\"arrOptions\", []);\n            }\n\n            // Schedule for after render\n            Ember.run.scheduleOnce(\"afterRender\", function () {\n\n                // Set values on dropdown\n                _this.setValuesOnDropdownInput();\n\n                // Get the dropdown item\n                var objDropdown = $(\"#\" + _this.get(\"_sInputId\"));\n                // Init the dropdown as a material select\n                _this.createAndAttachListeners(objDropdown);\n\n                // Add a change listener on this dropdown\n                objDropdown.change(function () {\n                    // Get values on dropdown\n                    _this.getValuesOnDropdownInput(objDropdown);\n                });\n\n                _this.onHandleEscEvent();\n\n                if (_this.get(\"bDisabled\")) {\n                    _this._toggleDropdownInputState();\n                }\n\n                _this.set(\"_bInitializing\", false);\n            });\n        },\n        /**\n         * This function will handle the esc event for dropdown as we removed the default handling of esc from the\n         * material select\n         */\n        onHandleEscEvent: function onHandleEscEvent() {\n            var _this2 = this;\n\n            $(this.$()).off(\"keyup\");\n            this.$().off(\"keyup\");\n\n            $(this.$()).on(\"keyup\", function (objEvent) {\n                if (objEvent.which === 27) {\n                    _this2.closePopup(objEvent);\n                }\n            });\n            this.$().on(\"keyup\", function (objEvent) {\n                if (objEvent.which === 27) {\n                    _this2.closePopup(objEvent);\n                }\n            });\n        },\n        /**\n         * This function, when called, will set the mValue the selected item or items\n         *\n         * @param objDropdown - The dropdown from which to retrieve the data\n         */\n        getValuesOnDropdownInput: function getValuesOnDropdownInput(objDropdown) {\n\n            if (this.get(\"bMultiSelect\")) {\n                // Set mValue to array of objects\n                this.setMValueWithInternalFlag(this.getSelectedObjects(objDropdown), this.get(\"_bInitializing\"));\n            } else {\n                // Set mValue to a single objects\n                this.setMValueWithInternalFlag(this.getSelectedObject(objDropdown), this.get(\"_bInitializing\"));\n            }\n        },\n        /**\n         * Get single selected object\n         *\n         * @param objDropdown - The dropdown from which to retrieve the data\n         */\n        getSelectedObject: function getSelectedObject(objDropdown) {\n            // Get the value from the dropdown\n            var sValue = objDropdown.val();\n            // Set the value to null if it is empty\n            if (a24Core.isEmpty(sValue)) {\n                sValue = null;\n            }\n\n            // Set a default selected item\n            var objSelectedItem = null;\n\n            // Get the options\n            var arrOptions = this.get(\"arrOptions\");\n            // Loop over the selected items\n            for (var i = 0; i < arrOptions.length; i++) {\n                // If the sValue matches the sOptionValueKey on the current option\n                if (sValue === arrOptions[i][this.get(\"sOptionsValueKey\")]) {\n                    // Set the selected item as the current item\n                    objSelectedItem = arrOptions[i];\n                    break;\n                }\n            }\n            // return the selected object\n            return objSelectedItem;\n        },\n        sizeChanges: Ember.observer(\"_objDomService.iPageWidth\", \"_objDomService.iPageHeight\", function () {\n            var sSize = this.get(\"sScreenSize\");\n            if (sSize !== this.get(\"_objConstantsWindowService\").MEDIA_SIZE_TINY && sSize !== this.get(\"_objConstantsWindowService\").MEDIA_SIZE_MOBILE) {\n                Ember.run.scheduleOnce(\"afterRender\", this, this.closePopup);\n            }\n        }),\n        closePopup: function closePopup(objEvent) {\n            if (this.get(\"_objDivInstance\").hasClass(\"dropdown-open\")) {\n                if (!a24Core.isEmpty(objEvent)) {\n                    objEvent.stopPropagation();\n                }\n                //Do not use \"close\" since that assumes the input has already been blured.\n                //Triggering \"close\" will make that you cant refocus the input after we manually closed it, thus\n                //dropdown wont appear\n                //Bluring the input will trigger the \"close\"\n                //$(this.$(\"input.select-dropdown\")).trigger(\"close\");\n                $(this.$(\"input.select-dropdown\")).trigger(\"blur\");\n                if (this.get(\"bMultiSelect\")) {\n                    // Will have to trigger the close on multi select since the blur does not triggering the close on mdb\n                    // if the dropdown is a multiselect\n                    $(this.$(\"input.select-dropdown\")).trigger(\"close\");\n                }\n            }\n        },\n        /**\n         * Get multiple selected objects\n         *\n         * @param objDropdown - The dropdown from which to retrieve the data\n         */\n        getSelectedObjects: function getSelectedObjects(objDropdown) {\n            // Get the values from the dropdown\n            var arrValues = objDropdown.val();\n            // Set the value to empty array if it is empty\n            if (a24Core.isEmpty(arrValues)) {\n                arrValues = [];\n            }\n\n            // Set a default selected items\n            var arrSelectedItems = [];\n\n            // Get the options\n            var arrOptions = this.get(\"arrOptions\");\n            // Loop over the selected items\n            for (var i = 0; i < arrOptions.length; i++) {\n                // Loop over the array of selected values\n                for (var j = 0; j < arrValues.length; j++) {\n                    // If the value item matches the sOptionValueKey on the current option\n                    if (arrValues[j] === arrOptions[i][this.get(\"sOptionsValueKey\")]) {\n                        // Add the selected item as a current item\n                        arrSelectedItems.push(arrOptions[i]);\n                    }\n                }\n            }\n\n            if (arrSelectedItems.length === 0) {\n                arrSelectedItems = null;\n            }\n\n            // return the selected arrays\n            return arrSelectedItems;\n        },\n        /**\n         * This function, when called, will set dropdown values equal to the objValues or arrValues\n         */\n        setValuesOnDropdownInput: function setValuesOnDropdownInput() {\n            // Get the dropdown\n            var objDropdown = $(\"#\" + this.get(\"_sInputId\"));\n\n            // Set the default bSetValue flag\n            var bSetValues = true;\n\n            if (this.get(\"bMultiSelect\")) {\n                // Set a match boolean to true by default\n                var bMatch = true;\n                // Get the list of dropdowns\n                var arrDropdown = objDropdown.val();\n\n                // Get the current list of stored items\n                var arrChange = this.get(\"arrValues\");\n\n                // Set empty to arrDropdown if it is not set\n                if (a24Core.isEmpty(arrDropdown)) {\n                    arrDropdown = [];\n                }\n                // Set empty to arrChange if it is not set\n                if (a24Core.isEmpty(arrChange)) {\n                    arrChange = [];\n                }\n                // If the lengths are the same\n                if (arrDropdown.length === arrChange.length) {\n                    for (var i = 0; i < arrDropdown.length; i++) {\n                        // Check if each item matches\n                        if (arrDropdown[i] !== arrChange[i][this.get(\"sOptionsValueKey\")]) {\n                            // As soon as an item does not match, flag it and break\n                            bMatch = false;\n                            break;\n                        }\n                    }\n                } else {\n                    // Note that the arrays are different\n                    bMatch = false;\n                }\n\n                bSetValues = !bMatch;\n            } else {\n                // Get the current selected object\n                var objCurrent = this.getSelectedObject(objDropdown);\n                // Get the current selected value\n                var objNew = this.get(\"objValue\");\n                // If both items are empty OR both items have the same key\n                if (a24Core.isEmpty(objCurrent) && a24Core.isEmpty(objNew) || !a24Core.isEmpty(objCurrent) && !a24Core.isEmpty(objNew) && objCurrent[this.get(\"sOptionsValueKey\")] === objNew[this.get(\"sOptionsValueKey\")]) {\n                    // Mark that the values should not set\n                    bSetValues = false;\n                }\n            }\n\n            // If bSetValues is still true\n            if (bSetValues) {\n                var mValues = this._getSingleMultiSelectedObjects();\n                // Set values on the Dropdown\n                objDropdown.material_select(\"destroy\");\n                objDropdown.val(mValues);\n                this.createAndAttachListeners(objDropdown);\n\n                this.onHandleEscEvent();\n            }\n\n            // Get the dropdown item\n            this.getValuesOnDropdownInput(objDropdown);\n        },\n        createAndAttachListeners: function createAndAttachListeners(objDropdown) {\n            var _this3 = this;\n\n            // Init the dropdown\n            objDropdown.material_select();\n\n            Ember.run.next(function () {\n                // Move the list to the dropdown\n                var objList = $(_this3.$()).find(\"ul.dropdown-content\");\n                _this3.get(\"_objDivInstance\").append(objList);\n                objList.addClass(\"view-select-box\");\n\n                _this3.get(\"_objDivInstance\").on(\"click\", function (objEvent) {\n                    objEvent.stopPropagation();\n\n                    if (objEvent.type === \"click\") {\n                        _this3.closePopup();\n                    }\n                });\n            });\n\n            // ON CLOSE\n            $(this.$()).find(\"input.select-dropdown\").on(\"close\", function () {\n                if (_this3.get(\"_objDivInstance\").hasClass(\"dropdown-open\")) {\n                    Ember.run(function () {\n                        //filty hacks here because we need to allow the dropdown to stay on screen while fading so that the\n                        //keyup can fire on the correct item. If we hide the dropdown immediatly then the keyup wont fire\n                        //for the clicked item and non gets selected. MDB closes the dropdown with keydown and selects the\n                        //value with keyup -_-\n                        if (!a24Core.isEmpty(_this3.get(\"_objCloseLater\"))) {\n                            Ember.run.cancel(_this3.get(\"_objCloseLater\"));\n                            _this3.set(\"_objCloseLater\", null);\n                        }\n                        _this3.set(\"_objCloseLater\", Ember.run.later(function () {\n                            _this3.get(\"_objDivInstance\").removeClass(\"dropdown-open\");\n                            $(\"body\").removeClass(\"stop-scrolling\");\n                            _this3.get(\"_objDivInstance\").css({\n                                \"padding-top\": \"0\",\n                                \"padding-left\": \"0\",\n                                \"width\": \"0\", //Width and height set here to preserve animations for open later\n                                \"heigt\": \"0\"\n                            });\n                            //Defocus the input so the it can regain focus when clicked(this is dmb bug where after\n                            //selecting a value using the arrows and enter it does not blur the field)\n                            $(_this3.$(\"input.select-dropdown\")).trigger(\"blur\");\n                        }, 200));\n                    });\n                }\n            });\n\n            // ON OPEN\n            $(this.$()).find(\"input.select-dropdown\").on(\"open\", function () {\n                Ember.run(function () {\n                    if (!a24Core.isEmpty(_this3.get(\"_objCloseLater\"))) {\n                        Ember.run.cancel(_this3.get(\"_objCloseLater\"));\n                        _this3.set(\"_objCloseLater\", null);\n                    }\n                    _this3.get(\"_objDivInstance\").addClass(\"dropdown-open\");\n                    $(\"body\").addClass(\"stop-scrolling\");\n\n                    // Set the width equal to that of the list\n                    _this3.get(\"_objDivInstance\").find(\"ul.dropdown-content\").width($(_this3.$()).find(\"input.select-dropdown\").width());\n\n                    var objInputOffset = $(_this3.$()).find(\"input.select-dropdown\").offset();\n                    var objBlockerDivOffset = _this3.get(\"_objDivInstance\").offset();\n\n                    // Set the padding of the blocker div to match the position of the input so that it lines up with the input\n                    _this3.get(\"_objDivInstance\").css({\n                        \"padding-top\": objInputOffset.top - objBlockerDivOffset.top + \"px\",\n                        \"padding-left\": objInputOffset.left + \"px\"\n                    });\n                });\n            });\n        },\n        willDestroyElement: function willDestroyElement() {\n            // Destroy the div if it still exists\n            if (!a24Core.isEmpty(this.get(\"_objDivInstance\"))) {\n                var objDropdown = $(\"#\" + this.get(\"_sInputId\"));\n                objDropdown.material_select(\"destroy\");\n                this.get(\"_objDivInstance\").remove();\n            }\n            this._super.apply(this, arguments);\n        },\n        clear: function clear() {\n            var objDropdown = $(\"#\" + this.get(\"_sInputId\"));\n            objDropdown.material_select(\"destroy\");\n            objDropdown.val(null);\n            this.createAndAttachListeners(objDropdown);\n            this.getValuesOnDropdownInput(objDropdown);\n\n            this.onHandleEscEvent();\n        },\n        observeValueChange: Ember.observer(\"objValue\", \"arrValues.@each\", function () {\n            // Set values based on input change\n            Ember.run.scheduleOnce(\"afterRender\", this, this.setValuesOnDropdownInput);\n        }),\n        observeOptionsChange: Ember.observer(\"arrOptions.@each\", function () {\n            Ember.run.scheduleOnce(\"afterRender\", this, this.setValuesAndDoAfterChange);\n        }),\n        observeDisabledChange: Ember.observer(\"bDisabled\", function () {\n            // Set component to enabled/disabled\n            Ember.run.scheduleOnce(\"afterRender\", this, this._toggleDropdownInputState);\n        }),\n        setValuesAndDoAfterChange: function setValuesAndDoAfterChange() {\n            this.clear();\n        },\n        functionAfterOptionChange: function functionAfterOptionChange() {\n            var objDropdown = $(\"#\" + this.get(\"_sInputId\"));\n            objDropdown.material_select(\"destroy\");\n            this.createAndAttachListeners(objDropdown);\n\n            this.onHandleEscEvent();\n        },\n        // gets object(s) currently selected in the dropdown\n        _getSingleMultiSelectedObjects: function _getSingleMultiSelectedObjects() {\n            if (this.get(\"bMultiSelect\")) {\n                // Create empty array\n                var arrNewValues = [];\n\n                // Get the array of values\n                var arrValues = this.get(\"arrValues\");\n                // Set arrValues as empty array if it is not set\n                if (a24Core.isEmpty(arrValues)) {\n                    arrValues = [];\n                }\n\n                for (var j = 0; j < arrValues.length; j++) {\n                    // Add each mValue key to the array\n                    arrNewValues.push(arrValues[j][this.get(\"sOptionsValueKey\")]);\n                }\n\n                return arrNewValues;\n            } else {\n                // Create empty object\n                var objNewValue = null;\n                // If the mValue is not null\n                if (!a24Core.isEmpty(this.get(\"objValue\"))) {\n                    // Set objNewValue to the mValue key\n                    objNewValue = this.get(\"objValue\")[this.get(\"sOptionsValueKey\")];\n                }\n\n                return objNewValue;\n            }\n        },\n        _toggleDropdownInputState: function _toggleDropdownInputState() {\n            // Set values on the Dropdown\n            var objDropdown = $(\"#\" + this.get(\"_sInputId\"));\n            objDropdown.material_select(\"destroy\");\n            var mValues = this._getSingleMultiSelectedObjects();\n            objDropdown.val(mValues);\n            if (this.get(\"bDisabled\")) {\n                objDropdown.attr(\"disabled\", true);\n            } else {\n                objDropdown.removeAttr(\"disabled\");\n            }\n            this.createAndAttachListeners(objDropdown);\n        },\n\n        observeErrorChanges: Ember.observer(\"sErrorMessage\", function () {\n            // Get the dropdown\n            // This is done since MBD replaces the <select> with their own html which adds the input in the dom\n            var objSelectDropdown = this.$(\"input.select-dropdown\");\n            // Check if the error message is set\n            if (a24Core.isEmpty(this.get(\"sErrorMessage\"))) {\n                // Remove class since the error is not set\n                objSelectDropdown.removeClass(\"invalid\");\n            } else {\n                // Add class since the error is set\n                objSelectDropdown.addClass(\"invalid\");\n            }\n        })\n    });\n});","define(\"a24-ember-lib/components/input-form-file\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/templates/components/input-form-file\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _didRenderChangesMixin, _inputFormFile, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _inputFormFile.default,\n        classNames: [\"md-form\", \"a24ErrorInputParent\"],\n        sPlaceholder: null,\n        sInputType: \"file\",\n        bStaticHeader: true,\n\n        // Id for the hidden input\n        _sUploadInputId: null,\n        _objInputFormFileService: Ember.inject.service(\"input-form-file-service\"),\n        _objInputFormStringsService: Ember.inject.service(\"a24-strings-ember-lib\"),\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            if (a24Core.isEmpty(this.get(\"sPlaceholder\"))) {\n                this.set(\"sPlaceholder\", this.get(\"_objInputFormStringsService\").getString(\"fileInputPlaceHolder\"));\n            }\n\n            this.set(\"_sUploadInputId\", this.get(\"_objInputFormFileService\").getFileInputId());\n\n            Ember.run.scheduleOnce(\"afterRender\", function () {\n                var objTextInput = $(\"#\" + _this.get(\"_sInputId\"));\n                var objFileInput = $(\"#\" + _this.get(\"_sUploadInputId\"));\n\n                objFileInput.on(\"change\", function () {\n                    _this.setValueFromOutside(_this.get(\"_objInputFormFileService\").getFileObject(objFileInput));\n                });\n                objTextInput.on(\"keydown\", function (objEvent) {\n                    if (objEvent.which === 13) {\n                        objEvent.preventDefault();\n                        objEvent.stopPropagation();\n                        objFileInput.trigger(\"click\");\n                    }\n                });\n                objTextInput.on(\"keyup\", function (objEvent) {\n                    if (objEvent.which === 27) {\n                        // Escape key\n                        objTextInput.change();\n                        objTextInput.blur();\n                    } else {\n                        objTextInput.val(_this.get(\"_objInputFormFileService\").getFileObject(objFileInput, true));\n                    }\n                });\n                objTextInput.on(\"blur\", function () {\n                    _this.resetFloatingLabel(objTextInput);\n                });\n                objTextInput.on(\"click\", function () {\n                    objFileInput.trigger(\"click\");\n                });\n\n                _this.resetFloatingLabel(objTextInput);\n            });\n        },\n        resetFloatingLabel: function resetFloatingLabel(objTextInput) {\n            //If the input field has no value then the label should NOT have the active class and\n            //float at placeholder position\n            if (!a24Core.isEmpty(objTextInput.val()) || !a24Core.isEmpty(this.get(\"sPlaceholder\"))) {\n                this.$(\"label\").addClass(\"active\");\n            } else if (a24Core.isEmpty(objTextInput.val())) {\n                this.$(\"label\").removeClass(\"active\");\n            }\n        },\n        clear: function clear() {\n            $(\"#\" + this.get(\"_sUploadInputId\")).val(\"\");\n\n            this.setValueFromOutside(null);\n        },\n        setValueFromOutside: function setValueFromOutside(objFile) {\n            if (a24Core.isEmpty(objFile)) {\n                objFile = null;\n            }\n\n            this.setMValueWithInternalFlag(objFile, false);\n\n            var objTextInput = $(\"#\" + this.get(\"_sInputId\"));\n            if (a24Core.isEmpty(objFile)) {\n                objTextInput.val(\"\");\n            } else {\n                objTextInput.val(objFile.name);\n            }\n            objTextInput.change();\n\n            this.resetFloatingLabel(objTextInput);\n        },\n        actions: {\n            onClearAction: function onClearAction() {\n                this.clear();\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/input-form-header\", [\"exports\", \"a24-ember-lib/templates/components/input-form-header\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _inputFormHeader, _inputFormElement, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _inputFormHeader.default,\n        classNames: [\"a24ErrorInputParent\"],\n        sHeaderClass: \"\"\n        // Currently error message set on header does not work as this will go apply to the child that is in the yield\n        // of this component\n    });\n});","define(\"a24-ember-lib/components/input-form-html\", [\"exports\", \"a24-ember-lib/templates/components/input-form-html\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _inputFormHtml, _inputFormElement, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _inputFormHtml.default,\n        classNames: [\"md-form\", \"a24ErrorInputParent\"],\n        sInputType: \"html\",\n        sValue: null,\n        arrAdditionalCssFiles: null,\n        _bShowPopup: false,\n        _bConfirmationPopup: false,\n        _sEmptyPlaceholder: null,\n        _sFilledPlaceholder: null,\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            // If button not empty string set it to default\n            if (a24Core.isEmpty(this.get(\"_sEmptyPlaceholder\"))) {\n                this.set(\"_sEmptyPlaceholder\", this.get(\"_objStringsService\").getString(\"clickHereToEdit\"));\n            }\n            // If button not empty string set it to default\n            if (a24Core.isEmpty(this.get(\"_sFilledPlaceholder\"))) {\n                this.set(\"_sFilledPlaceholder\", this.get(\"_objStringsService\").getString(\"dataEnteredSuccessfullyClickToPreview\"));\n            }\n\n            if (!a24Core.isEmpty(this.get(\"sValue\"))) {\n                this.setMValueWithInternalFlag(this.get(\"sValue\"), true);\n            }\n\n            var onEscHandle = function onEscHandle() {\n                _this.triggerAction({\n                    action: \"onPopupConfirmationCancel\",\n                    target: _this\n                });\n            };\n\n            Ember.run.scheduleOnce(\"afterRender\", this, function () {\n                // This is jquery for the mdb side\n                $(_this.$()).on(\"keyup\", function (objEvent) {\n                    if (objEvent.which === 27 && objEvent.keyCode === 27) {\n                        if (_this.get(\"_bShowPopup\")) {\n                            Ember.run.once(_this, onEscHandle);\n                        }\n                        objEvent.stopPropagation();\n                    }\n                });\n                // This is the jquery for the ember side\n                _this.$().on(\"keyup\", function (objEvent) {\n                    if (objEvent.which === 27 && objEvent.keyCode === 27) {\n                        if (_this.get(\"_bShowPopup\")) {\n                            Ember.run.once(_this, onEscHandle);\n                        }\n                        objEvent.stopPropagation();\n                    }\n                });\n            });\n        },\n        clear: function clear() {\n            this.setValueFromOutside(null);\n        },\n        setValueFromOutside: function setValueFromOutside(sValue) {\n            this.setMValueWithInternalFlag(sValue, false);\n        },\n        observeValueChange: Ember.observer(\"sValue\", function () {\n            this.setValueFromOutside(this.get(\"sValue\"));\n        }),\n        /**\n         * Computed property based on when the input field has a value or not\n         */\n        sTextFiller: Ember.computed(\"mValue\", \"sFieldName\", function () {\n            if (!a24Core.isEmpty(this.get(\"mValue\"))) {\n                // Return the filled data placeholder\n                return this.get(\"sFieldName\") + \" \" + this.get(\"_sFilledPlaceholder\");\n            } else {\n                // Return the empty data placeholder\n                return this.get(\"_sEmptyPlaceholder\") + \" \" + this.get(\"sFieldName\");\n            }\n        }),\n        /**\n         * Get the config for the tinymce editor\n         */\n        getConfigForTinyMCE: function getConfigForTinyMCE() {\n            var arrContentCss = [\"/assets/mce.css\"];\n            if (!a24Core.isEmpty(this.get(\"arrAdditionalCssFiles\"))) {\n                arrContentCss = arrContentCss.concat(this.get(\"arrAdditionalCssFiles\"));\n            }\n            return {\n                selector: \"#\" + this.get(\"_sInputId\") + \"-input\",\n                height: 250,\n                menubar: true,\n                theme: \"modern\",\n                plugins: [\"advlist autolink lists link image charmap preview hr anchor pagebreak\", \"searchreplace wordcount visualblocks visualchars code\", \"insertdatetime nonbreaking save table contextmenu directionality\", \"template paste textcolor colorpicker textpattern imagetools toc help\"],\n                toolbar1: \"undo redo | insert | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image\",\n                toolbar2: \"preview | forecolor backcolor | help\",\n                image_advtab: true,\n                browser_spellcheck: true,\n                contextmenu: false,\n                content_css: arrContentCss,\n                init_instance_callback: function init_instance_callback(objEditor) {\n                    // Get the iframe for the editor\n                    var objIFrame = objEditor.iframeElement;\n                    // Ensure it exists\n                    if (!a24Core.isEmpty(objIFrame)) {\n                        // Get a list of all link tags\n                        var arrLinks = $(objIFrame).contents().find(\"link\");\n                        // If the list is not empty\n                        if (!a24Core.isEmpty(arrLinks)) {\n                            // JQuery Array will apply \"attr\" to each item in the array\n                            arrLinks.attr(\"onload\", // When the link completes its loading\n                            function () {\n                                // Redraw the content to ensure css re-applies special counter cases\n                                tinyMCE.activeEditor.setContent(tinyMCE.activeEditor.getContent());\n                            });\n                        }\n                    }\n                }\n            };\n        },\n        /**\n         * Hide the tiny mce editor and optionally save the data to mValue\n         */\n        hideTinyMCEPopup: function hideTinyMCEPopup(bSaveDataOnClose) {\n            if (bSaveDataOnClose) {\n\n                var mValue = tinyMCE.activeEditor.getContent();\n                if (a24Core.isEmpty(mValue)) {\n                    mValue = null;\n                }\n                this.setMValueWithInternalFlag(mValue, false);\n            }\n            tinyMCE.remove();\n            this.set(\"_bShowPopup\", false);\n        },\n        actions: {\n            onTextboxClick: function onTextboxClick() {\n                var _this2 = this;\n\n                // Show the popup\n                this.set(\"_bShowPopup\", true);\n                // Wait till the textarea is rendered then run the init for tinyMCE\n                Ember.run.schedule(\"afterRender\", function () {\n                    // Ensure that the tinyMCE has the correct mValue\n                    _this2.$(\"#\" + _this2.get(\"_sInputId\") + \"-input\").val(_this2.get(\"mValue\"));\n\n                    // Initialise the tinyMCE editor\n                    tinyMCE.init(_this2.getConfigForTinyMCE());\n                });\n            },\n            onPopupConfirmationConfirm: function onPopupConfirmationConfirm() {\n                // Hide the popup and save the data\n                this.hideTinyMCEPopup(true);\n            },\n            onPopupConfirmationCancel: function onPopupConfirmationCancel() {\n                // Get the value that is stored\n                var mValue = this.get(\"mValue\");\n\n                // Get the value from the tinyMCE editor\n                var mTinyValue = tinyMCE.activeEditor.getContent();\n\n                // If both values are not empty and they differ, we have unsaved data\n                var bHasUnsavedData = !(a24Core.isEmpty(mValue) && a24Core.isEmpty(mTinyValue)) && mValue !== mTinyValue;\n\n                if (bHasUnsavedData) {\n                    // Propt for confirmation on losing unsaved\n                    this.set(\"_bConfirmationPopup\", true);\n                } else {\n                    // Hide the tinyMCE popup\n                    this.hideTinyMCEPopup(false);\n                }\n            },\n            onUnsavedPopupConfirmationConfirm: function onUnsavedPopupConfirmationConfirm() {\n                // Hide the confirmation popup\n                this.set(\"_bConfirmationPopup\", false);\n                // Hide the tinyMCE popup\n                this.hideTinyMCEPopup(false);\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/input-form-password\", [\"exports\", \"a24-ember-lib/templates/components/input-form-password\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _inputFormPassword, _inputFormElement, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _inputFormPassword.default,\n        classNames: [\"a24ErrorInputParent\", \"md-form\"],\n        sValue: null,\n        sInputType: \"password\",\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objThis = this;\n            Ember.run.scheduleOnce(\"afterRender\", this, function () {\n                var objTextInput = $(\"#\" + objThis.get(\"_sInputId\"));\n\n                if (!a24Core.isEmpty(objThis.get(\"sValue\"))) {\n                    // Set the mvalue first\n                    this.setMValueWithInternalFlag(objThis.get(\"sValue\"), true);\n\n                    // firing a change here will cause the mvalue to update to\n                    // the same value, hence not causing a duplicate event to be fired\n                    objTextInput.val(this.get(\"sValue\"));\n                    objTextInput.change();\n                }\n\n                objTextInput.on(\"keyup\", function (objEvent) {\n                    if (objEvent.which === 27) {\n                        // Escape key\n                        objTextInput.change();\n                        objTextInput.blur();\n                    }\n                });\n\n                this.resetFloatingLabel(objTextInput);\n\n                objTextInput.on(\"blur\", function () {\n                    objThis.resetFloatingLabel(objTextInput);\n                });\n            });\n        },\n        clear: function clear() {\n            this.setValueFromOutside(\"\");\n        },\n        setValueFromOutside: function setValueFromOutside(sValue) {\n\n            this.setMValueWithInternalFlag(sValue, false);\n\n            //Set the new value onto the input since it does not bind anymore\n            var objTextInput = $(\"#\" + this.get(\"_sInputId\"));\n            objTextInput.val(sValue);\n            objTextInput.change();\n\n            this.resetFloatingLabel(objTextInput);\n        },\n        observeValueChange: Ember.observer(\"sValue\", function () {\n            this.setValueFromOutside(this.get(\"sValue\"));\n        }),\n        resetFloatingLabel: function resetFloatingLabel(objTextInput) {\n            //If the input field has no value then the label should NOT have the active class and\n            //float at placeholder position\n            if (objTextInput.val() === \"\" || objTextInput.val() === null) {\n                this.$(\"label\").removeClass(\"active\");\n            }\n        },\n        actions: {\n            onInputChange: function onInputChange(sValue) {\n                // any internal changes that fire this function will have updated\n                // mvalue already, meaning the duplicate update will not fire any\n                // additional events\n                this.setMValueWithInternalFlag(sValue, false);\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/input-form-radio-group\", [\"exports\", \"a24-ember-lib/templates/components/input-form-radio-group\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _inputFormRadioGroup, _inputFormElement, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _inputFormRadioGroup.default,\n        classNames: [\"a24ErrorInputParent\"],\n        sInputType: \"radio\",\n        _sGroupName: null,\n        objSelectedItem: null,\n        arrRadioButtonItems: null, // the items that will display on screen\n        // the key in the array for the radio button value\n        sOptionsValueKey: \"sValue\",\n        // the key in the array for the radio button label\n        sOptionsLabelKey: \"sLabel\",\n        // the key in the array for whether the radio button is selected\n        sOptionsSelectedKey: \"bSelected\",\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n            // this is done so that the _sItemId can passed in during testing and\n            // we can test that it is set correct\n            if (a24Core.isEmpty(this.get(\"_sGroupName\"))) {\n                this.set(\"_sGroupName\", Ember.guidFor({}));\n            }\n            Ember.run.scheduleOnce(\"afterRender\", this, function () {\n                _this.updateInputSelectedValues(false);\n            });\n        },\n        clear: function clear() {\n            var sSelectedKey = this.get(\"sOptionsSelectedKey\");\n\n            //Sets all to false\n            this.get(\"arrRadioButtonItems\").setEach(sSelectedKey, false);\n            this.setValueFromOutside(null, false);\n        },\n        setValueFromOutside: function setValueFromOutside(objSelectedItem, bInternalProcess) {\n            var arrRadioButtonItemData = this.get(\"arrRadioButtonItems\");\n            if (a24Core.isEmpty(arrRadioButtonItemData)) {\n                arrRadioButtonItemData = [];\n            }\n\n            var objFinalSelectedItem = null;\n            var sOptionsValueKey = this.get(\"sOptionsValueKey\");\n\n            // add the item id to each object\n            for (var i = 0; i < arrRadioButtonItemData.length; i++) {\n                Ember.set(arrRadioButtonItemData[i], \"_sItemId\", Ember.guidFor({}));\n                if (!a24Core.isEmpty(objSelectedItem) && arrRadioButtonItemData[i][sOptionsValueKey] === objSelectedItem[sOptionsValueKey]) {\n                    Ember.set(arrRadioButtonItemData[i], \"bSelected\", true);\n                    objFinalSelectedItem = arrRadioButtonItemData[i];\n                }\n            }\n            this.setMValueWithInternalFlag(objFinalSelectedItem, bInternalProcess);\n        },\n        observeOptionsChange: Ember.observer(\"arrRadioButtonItems.@each\", \"objSelectedItem\", function () {\n            Ember.run.once(this, this.updateInputSelectedValuesFromObserve);\n        }),\n        updateInputSelectedValuesFromObserve: function updateInputSelectedValuesFromObserve() {\n            this.updateInputSelectedValues(true);\n        },\n        updateInputSelectedValues: function updateInputSelectedValues(bFireEvent) {\n            this.setValueFromOutside(this.get(\"objSelectedItem\"), !bFireEvent);\n        },\n        actions: {\n            onItemSelected: function onItemSelected(objRadioButtonItem) {\n                var sSelectedKey = this.get(\"sOptionsSelectedKey\");\n\n                //Sets all to false\n                this.get(\"arrRadioButtonItems\").setEach(sSelectedKey, false);\n                Ember.set(objRadioButtonItem, sSelectedKey, true); //Set selected to true\n\n                this.setMValueWithInternalFlag(objRadioButtonItem, false);\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/input-form-search\", [\"exports\", \"a24-ember-lib/templates/components/input-form-search\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _inputFormSearch, _inputFormElement, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _inputFormSearch.default,\n        classNames: [\"input-form-search\", \"a24ErrorInputParent\", \"md-form\", \"a24-form-outlined\"],\n        sValue: null,\n        sInputType: \"search\",\n        bUpdateValueOnType: true,\n        init: function init() {\n            this._super.apply(this, arguments);\n            var objThis = this;\n            Ember.run.scheduleOnce(\"afterRender\", this, function () {\n                var _this = this;\n\n                var objTextInput = $(\"#\" + objThis.get(\"_sInputId\"));\n\n                if (!a24Core.isEmpty(objThis.get(\"sValue\"))) {\n\n                    // Set the mvalue first\n                    this.setMValueWithInternalFlag(this.get(\"sValue\"), true);\n\n                    // firing a change here will cause the mvalue to update to\n                    // the same value, hence not causing a duplicate event to be fired\n                    objTextInput.val(this.get(\"sValue\"));\n                    objTextInput.change();\n                }\n\n                objTextInput.on(\"keyup\", function (objEvent) {\n                    if (objEvent.which === 27) {\n                        // Escape key\n                        objTextInput.change();\n                        objTextInput.blur();\n                    }\n                });\n\n                if (this.get(\"bUpdateValueOnType\")) {\n                    objTextInput.on(\"click keyup input paste\", function () {\n                        Ember.run.once(_this, \"_onInputTextValueChange\", objTextInput.val());\n                    });\n                }\n\n                if (!a24Core.isEmpty(objThis.get(\"iMaxCharacters\"))) {\n                    objTextInput.attr(\"length\", objThis.get(\"iMaxCharacters\"));\n                    objTextInput.characterCounter();\n                }\n\n                this.resetFloatingLabel(objTextInput);\n\n                objTextInput.on(\"blur\", function () {\n                    objThis.resetFloatingLabel(objTextInput);\n                });\n            });\n        },\n        _onInputTextValueChange: function _onInputTextValueChange(sValue) {\n            // any internal changes that fire this function will have updated\n            // mvalue already, meaning the duplicate update will not fire any\n            // additional events\n            this.setMValueWithInternalFlag(sValue, false);\n        },\n        clear: function clear() {\n            this.setValueFromOutside(\"\");\n        },\n        setValueFromOutside: function setValueFromOutside(sValue) {\n            this.setMValueWithInternalFlag(sValue, false);\n\n            //Set the new value onto the input since it does not bind anymore\n            var objTextInput = $(\"#\" + this.get(\"_sInputId\"));\n            objTextInput.val(sValue);\n            objTextInput.change();\n\n            this.resetFloatingLabel(objTextInput);\n        },\n        observeValueChange: Ember.observer(\"sValue\", function () {\n            this.setValueFromOutside(this.get(\"sValue\"));\n        }),\n        resetFloatingLabel: function resetFloatingLabel(objTextInput) {\n            //If the input field has no value then the label should NOT have the active class and\n            //float at placeholder position\n            if (a24Core.isEmpty(objTextInput.val())) {\n                this.$(\"label\").removeClass(\"active\");\n            }\n        },\n        actions: {\n            onInputChange: function onInputChange(sValue) {\n                // any internal changes that fire this function will have updated\n                // mvalue already, meaning the duplicate update will not fire any\n                // additional events\n                if (!this.get(\"bUpdateValueOnType\")) {\n                    Ember.run.once(this, \"_onInputTextValueChange\", sValue);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/input-form-suggest\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/templates/components/input-form-suggest\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _didRenderChangesMixin, _inputFormSuggest, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _inputFormSuggest.default,\n        classNames: [\"a24ErrorInputParent\", \"md-form\"],\n        sInputType: \"suggest\",\n        sPlaceHolder: \"\",\n        // Need to set this when using this component as this will be the display key for the dropdown\n        sOptionsLabelKey: null,\n        //This is the value that will display in the input after selecting suggestion, because sometimes you might want to\n        //display more info on the suggested item that is not part of the search string.\n        sOptionsLabelInputKey: null,\n        // This is optional if you want a icon to display next to the entry in the dropdown\n        sOptionsLinkKey: null,\n        // This is for if you want a permanent item showed and the bottom of the dropdown\n        objPermanentItem: null,\n        // This is the display key from the above object to be sent in\n        sPermanentLabelKey: null,\n        /*\n        When setting the function for the component you should set to variables for it.\n        Variables are as follows\n        - sFilter - This is the string to search for\n        - funcCallback - Call this function at the end when setting up the function. The param of this funcCallback\n          will be the array of results from the filter search\n         */\n        funcGetSuggestions: null,\n        iSuggestAt: 3,\n        bAlwaysShowOnFocus: false,\n        iSuggestDelay: 500,\n        bShowLoaderDuringSuggest: true,\n        sToolTipKey: null,\n        iMaxSuggestHeight: 192, // this is the total height of 5 items plus the top and bottom padding 36 * 5 + 6 + 6\n        sCustomTabIndex: null,\n        sCustomDropdownClass: null,\n        _iPageWidth: null,\n        _iPageHeight: null,\n        _arrSuggestions: null,\n        _bDropdownShow: false,\n        _bPreventBlur: false,\n        _bLoading: true,\n        _iSelected: null,\n        _sPreviousValue: null,\n        _sDropdownClass: null,\n        _bActionOnMouseDown: false,\n        _objDropdownContainer: null,\n        _objDomService: Ember.inject.service(\"dom-event\"),\n        _objEmberLibStringService: Ember.inject.service(\"a24-strings-ember-lib\"),\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.get(\"_objDomService\");\n            this.set(\"_iPageWidth\", this.get(\"_objDomService.iPageWidth\"));\n            this.set(\"_iPageHeight\", this.get(\"_objDomService.iPageHeight\"));\n\n            this.set(\"_bLoading\", this.get(\"bShowLoaderDuringSuggest\"));\n\n            var sDropdownClass = \"input-form-suggest-dropdown\";\n            if (!a24Core.isEmpty(this.get(\"sCustomDropdownClass\"))) {\n                sDropdownClass += \" \" + this.get(\"sCustomDropdownClass\");\n            }\n            this.set(\"_sDropdownClass\", sDropdownClass);\n\n            Ember.run.scheduleOnce(\"afterRender\", function () {\n                var objTextInput = $(\"#\" + _this.get(\"_sInputId\"));\n                var iSelected = null;\n\n                if (a24Core.isEmpty(_this.get(\"sOptionsLabelInputKey\"))) {\n                    //If you did not supply a sOptionsLabelInputKey we default it to the same as sOptionsLabelKey, thus\n                    //this component will function exatly as before when no sOptionsLabelInputKey is supplied.\n                    _this.set(\"sOptionsLabelInputKey\", _this.get(\"sOptionsLabelKey\"));\n                }\n\n                _this.set(\"_sPreviousValue\", objTextInput.val());\n\n                var objRunLater = null;\n\n                objTextInput.bind(\"keydown\", function (objEvent) {\n                    if (!a24Core.isEmpty(objEvent.which) && (objEvent.which === 33 || //page up\n                    objEvent.which === 34 || //page down\n                    objEvent.which === 35 || //end\n                    objEvent.which === 36 //home\n                    )) {\n                        objEvent.stopPropagation();\n                        objEvent.preventDefault();\n                    } else if (!a24Core.isEmpty(objEvent.which) && objEvent.which === 38) {\n                        // Up Arrow\n                        objEvent.stopPropagation();\n                        objEvent.preventDefault();\n\n                        Ember.run(function () {\n                            if (a24Core.isEmpty(_this.get(\"_arrSuggestions\"))) {\n                                return;\n                            }\n\n                            iSelected = _this.get(\"_iSelected\");\n                            if (iSelected === null) {\n                                iSelected = 0;\n                            } else {\n                                if (iSelected !== 0) {\n                                    iSelected = iSelected - 1;\n                                }\n                            }\n                            _this.get(\"_arrSuggestions\").setEach(\"_bSuggestionSelected\", false);\n                            _this.set(\"_arrSuggestions.\" + iSelected + \"._bSuggestionSelected\", true);\n\n                            _this.set(\"_iSelected\", iSelected);\n\n                            _this._scrollItemIntoView();\n                        });\n                    } else if (!a24Core.isEmpty(objEvent.which) && objEvent.which === 40) {\n                        // Down Arrow\n                        objEvent.stopPropagation();\n                        objEvent.preventDefault();\n\n                        Ember.run(function () {\n                            if (a24Core.isEmpty(_this.get(\"_arrSuggestions\"))) {\n                                return;\n                            }\n\n                            iSelected = _this.get(\"_iSelected\");\n                            if (iSelected === null) {\n                                iSelected = 0;\n                            } else {\n                                if (iSelected !== _this.get(\"_objDropdownContainer\").find(\".input-form-suggest-content-list li\").length - 1) {\n                                    iSelected = iSelected + 1;\n                                }\n                            }\n                            _this.get(\"_arrSuggestions\").setEach(\"_bSuggestionSelected\", false);\n                            _this.set(\"_arrSuggestions.\" + iSelected + \"._bSuggestionSelected\", true);\n\n                            _this.set(\"_iSelected\", iSelected);\n\n                            _this._scrollItemIntoView();\n                        });\n                    }\n                });\n\n                // Binds the below events for when typing into the text box. This will set the suggestions and show dropdown\n                objTextInput.bind(\"click keyup input paste\", function (objEvent) {\n                    if (!a24Core.isEmpty(_this.get(\"onErrorMessageSetAction\"))) {\n                        _this.get(\"onErrorMessageSetAction\")(_this, parseInt(_this.$().css(\"margin-top\")));\n                    }\n\n                    //We want to ignore some keys that dont have anything to do with input value changing, like arrow keys\n                    if (!a24Core.isEmpty(objEvent.which) && (objEvent.which === 13 || //enter\n                    objEvent.which === 16 || //shift\n                    objEvent.which === 17 || //ctrl\n                    objEvent.which === 18 || //alt\n                    objEvent.which === 20 || //caps lock\n                    objEvent.which === 37 || //left\n                    objEvent.which === 38 || //up\n                    objEvent.which === 39 || //right\n                    objEvent.which === 40 //down\n                    )) {\n                        return;\n                    }\n\n                    // sets the mValue to null when typing\n                    if (!a24Core.isEmpty(_this.get(\"mValue\")) && _this.get(\"_sPreviousValue\") !== objTextInput.val()) {\n                        _this.setMValueWithInternalFlag(null, false);\n                        //We refocus the input here since we know in some cases input will loase focus if other fields hide/display when\n                        //this field goes empty, the DOM render will defocus this field.\n                        objTextInput.focus();\n                    }\n\n                    if (_this.get(\"_sPreviousValue\") !== objTextInput.val() || objTextInput.val().length === 0 && _this.get(\"iSuggestAt\") === 0 || _this.get(\"bAlwaysShowOnFocus\")) {\n                        //We do not clear the _arrSuggestions when you set bShowLoaderDuringSuggest to false since we assume\n                        //that in that scenario you either will supply results immediatly or want results showing while user\n                        //types\n                        if (_this.get(\"bShowLoaderDuringSuggest\")) {\n                            _this.set(\"_bLoading\", true);\n                            _this.set(\"_arrSuggestions\", []);\n                        }\n                        _this.set(\"_sPreviousValue\", objTextInput.val());\n\n                        if (objTextInput.val().length >= _this.get(\"iSuggestAt\")) {\n\n                            if (!a24Core.isEmpty(objRunLater)) {\n                                Ember.run.cancel(objRunLater);\n                            }\n                            var funcCallback = function funcCallback(arrSuggestions) {\n                                if (!a24Core.isEmpty(arrSuggestions)) {\n                                    for (var i = 0; i < arrSuggestions.length; i++) {\n                                        if (!a24Core.isEmpty(arrSuggestions[i].arrActions)) {\n                                            for (var j = 0; j < arrSuggestions[i].arrActions.length; j++) {\n                                                if (!a24Core.isEmpty(arrSuggestions[i].arrActions[j].executeCardAction)) {\n                                                    (function () {\n                                                        var funcAction = arrSuggestions[i].arrActions[j].executeCardAction;\n                                                        arrSuggestions[i].arrActions[j].executeCardAction = function () {\n                                                            _this.set(\"_bDropdownShow\", false);\n                                                            funcAction();\n                                                        };\n                                                    })();\n                                                }\n                                            }\n                                        }\n                                    }\n                                }\n\n                                _this.set(\"_arrSuggestions\", arrSuggestions);\n\n                                _this.set(\"_bLoading\", false);\n                            };\n\n                            var funcRunLater = function funcRunLater() {\n                                _this.get(\"funcGetSuggestions\")(objTextInput.val(), funcCallback);\n                            };\n\n                            objRunLater = Ember.run.later(funcRunLater, _this.get(\"iSuggestDelay\"));\n\n                            _this.set(\"_bDropdownShow\", true);\n                            _this.set(\"_iSelected\", null);\n                        } else {\n                            _this.set(\"_bDropdownShow\", false);\n                        }\n                    }\n                });\n                // This is key up events for the arrow keys and the enter when selecting a input\n                objTextInput.on(\"keyup\", function (objEvent) {\n                    if (objEvent.which === 13) {\n                        // Enter\n                        var iSelect = _this.get(\"_iSelected\");\n                        if (iSelect === null && !a24Core.isEmpty(_this.get(\"_arrSuggestions\"))) {\n                            _this.setSelectedItem(_this.get(\"_arrSuggestions.0\"));\n                        } else if (iSelect !== null && !a24Core.isEmpty(_this.get(\"_arrSuggestions\"))) {\n                            _this.setSelectedItem(_this.get(\"_arrSuggestions.\" + iSelect));\n                        }\n\n                        _this.set(\"_bDropdownShow\", false);\n                    } else if (objEvent.which === 27) {\n                        // esc\n                        objEvent.stopPropagation();\n                        _this.set(\"_bDropdownShow\", false);\n                    }\n                });\n\n                _this.$(\"#\" + _this.get(\"_sInputId\")).on(\"keyup\", function (objEvent) {\n                    if (objEvent.which === 27) {\n                        // esc\n                        objEvent.stopPropagation();\n                        _this.set(\"_bDropdownShow\", false);\n                    }\n                });\n\n                if (!a24Core.isEmpty(_this.get(\"mValue\"))) {\n                    // firing a change here will cause the mvalue to update to\n                    // the same value, hence not causing a duplicate event to be fired\n                    objTextInput.val(_this.get(\"mValue\")[_this.get(\"sOptionsLabelInputKey\")]);\n                    objTextInput.change();\n\n                    _this.resetFloatingLabel(objTextInput);\n                }\n\n                objTextInput.on(\"blur\", function () {\n                    // This is to prevent the blur to happen when dropdown is clicked when clicking the link\n                    if (_this.get(\"_bPreventBlur\")) {\n                        _this.set(\"_bPreventBlur\", false);\n                    } else {\n                        _this.set(\"_bDropdownShow\", false);\n                        _this.resetFloatingLabel(objTextInput);\n                    }\n                });\n\n                var objDropdownContainer = _this.$(\".input-form-suggest-dropdown-container\");\n                _this.set(\"_objDropdownContainer\", objDropdownContainer);\n                objDropdownContainer.appendTo(\"body\");\n\n                // We are blocking scrolling on the blocker div. This will help when the dropdown shows\n                // that the whole page does not scroll that will place the dropdown on the wrong position.\n                objDropdownContainer.on(\"scroll wheel DOMMouseScroll mousewheel touchmove\", function (objEvent) {\n                    objEvent.stopPropagation();\n                });\n\n                if (!a24Core.isEmpty(_this.get(\"sFieldName\")) && !a24Core.isEmpty(_this.get(\"sPlaceHolder\"))) {\n                    _this.$(\"label\").addClass(\"active\");\n                }\n            });\n        },\n        sizeChanges: Ember.observer(\"_objDomService.iPageWidth\", \"_objDomService.iPageHeight\", function () {\n            if (this.get(\"_bDropdownShow\") && (this.get(\"_objDomService.iPageWidth\") !== this.get(\"_iPageWidth\") || this.get(\"_objDomService.iPageHeight\") !== this.get(\"_iPageHeight\"))) {\n                this.set(\"_bDropdownShow\", false);\n            }\n            this.set(\"_iPageWidth\", this.get(\"_objDomService.iPageWidth\"));\n            this.set(\"_iPageHeight\", this.get(\"_objDomService.iPageHeight\"));\n        }),\n        _onDropdownShow: Ember.observer(\"_bDropdownShow\", function () {\n            var _this2 = this;\n\n            if (this.get(\"_bDropdownShow\")) {\n                this.positionDropdown();\n\n                //This is to cater for shdow scroller that does a 100 scroll animation, we can fix this better in future.\n                Ember.run.later(this, this.positionDropdown, 150);\n\n                Ember.$(\"body\").addClass(\"stop-scrolling-suggest-input\");\n            } else {\n                Ember.run.scheduleOnce(\"afterRender\", function () {\n                    _this2.get(\"_objDropdownContainer\").css({\n                        top: \"0px\",\n                        left: \"0px\",\n                        width: \"0px\",\n                        height: \"0px\"\n                    });\n\n                    //This style needs to be made pre component else tabbing from one to another makes that the closing of the\n                    //one removes the stop-scrolling style added by the new one opened.\n                    //I would suggest adding this components ember id as a class to the body aswell and then only removing\n                    //stop-scrolling-suggest-input when its id is also there\n                    Ember.$(\"body\").removeClass(\"stop-scrolling-suggest-input\");\n                });\n            }\n        }),\n        positionDropdown: function positionDropdown() {\n            var _this3 = this;\n\n            if (this.get(\"_bDropdownShow\")) {\n                Ember.run.scheduleOnce(\"afterRender\", function () {\n                    var objOffset = _this3.$(\".input-form-suggest-dropdown-placeholder\").offset();\n                    var iHeight = _this3.get(\"iMaxSuggestHeight\");\n\n                    //Calc the height the popup should be based on the viewport and where the popup shows relative to the\n                    //viewport\n                    var iTopPos = _this3.$(\".input-form-suggest-dropdown-placeholder\")[0].getBoundingClientRect().top;\n                    var iBodyHeight = Ember.$(window).height();\n                    if (iBodyHeight - iTopPos < iHeight + 5) {\n                        iHeight = iBodyHeight - iTopPos - 5; // minus 5 to allow the bottom shadow visibility\n                    }\n\n                    _this3.get(\"_objDropdownContainer\").css({\n                        top: objOffset.top,\n                        left: objOffset.left,\n                        width: _this3.$(\".input-form-suggest-dropdown-placeholder\").width(),\n                        height: iHeight\n                    });\n                });\n            }\n        },\n        clear: function clear() {\n            this.setValueFromOutside(null);\n        },\n        willDestroyElement: function willDestroyElement() {\n            this._super();\n            if (!a24Core.isEmpty(this.get(\"_objDropdownContainer\"))) {\n                this.get(\"_objDropdownContainer\").remove();\n            }\n        },\n        setValueFromOutside: function setValueFromOutside(mValue) {\n            this.setMValueWithInternalFlag(mValue, false);\n\n            //Set the new value onto the input since it does not bind anymore\n            var objTextInput = $(\"#\" + this.get(\"_sInputId\"));\n            if (a24Core.isEmpty(mValue)) {\n                objTextInput.val(\"\");\n            } else {\n                objTextInput.val(mValue[this.get(\"sOptionsLabelInputKey\")]);\n            }\n            objTextInput.change();\n            this.set(\"_sPreviousValue\", objTextInput.val());\n\n            this.resetFloatingLabel(objTextInput);\n        },\n        resetFloatingLabel: function resetFloatingLabel(objTextInput) {\n            if (!a24Core.isEmpty(this.get(\"sFieldName\")) && !a24Core.isEmpty(this.get(\"sPlaceHolder\"))) {\n                return;\n            }\n\n            //If the input field has no value then the label should NOT have the active class and\n            //float at placeholder position\n            if (a24Core.isEmpty(objTextInput.val())) {\n                this.$(\"label\").removeClass(\"active\");\n            }\n        },\n        setSelectedItem: function setSelectedItem(objItem) {\n            if (!a24Core.isEmpty(objItem) && !a24Core.isEmpty(objItem._bSuggestionSelected)) {\n                delete objItem._bSuggestionSelected;\n            }\n\n            this.setMValueWithInternalFlag(objItem, false);\n\n            var objTextInput = $(\"#\" + this.get(\"_sInputId\"));\n            // Set input value after click\n            objTextInput.val(objItem[this.get(\"sOptionsLabelInputKey\")]);\n            objTextInput.change();\n            objTextInput.blur();\n\n            this.set(\"_sPreviousValue\", objTextInput.val());\n\n            this.set(\"_iSelected\", null);\n        },\n        _scrollItemIntoView: function _scrollItemIntoView() {\n            var _this4 = this;\n\n            Ember.run.scheduleOnce(\"afterRender\", function () {\n                var objList = _this4.get(\"_objDropdownContainer\").find(\".a24-dropdown-content-box\");\n                var objItem = _this4.get(\"_objDropdownContainer\").find(\".input-form-suggest-content-list li.hover\");\n                if (a24Core.isEmpty(objList) || a24Core.isEmpty(objItem)) {\n                    return;\n                }\n                if (objItem.offset().top - objItem.height() < objList.offset().top) {\n                    var iScrollTo = objItem.offset().top - objList.offset().top + objList.scrollTop() - objItem.height();\n                    objList.scrollTop(iScrollTo);\n                } else if (objItem.offset().top + objItem.height() * 2 > objList.offset().top + objList.height()) {\n                    var _iScrollTo = objItem.offset().top - objList.offset().top + objList.scrollTop() - objList.height() + objItem.height() * 2;\n                    objList.scrollTop(_iScrollTo);\n                }\n            });\n        },\n        // might need to move this to emberlib some time\n        _funcOpenWindow: function _funcOpenWindow(sLink) {\n            window.open(sLink);\n        },\n        actions: {\n            onActionClick: function onActionClick() {\n                var objTextInput = $(\"#\" + this.get(\"_sInputId\"));\n                this.resetFloatingLabel(objTextInput);\n                this.set(\"_bPreventBlur\", true);\n                this.set(\"_bActionOnMouseDown\", true);\n            },\n            closeSuggestDropdown: function closeSuggestDropdown() {\n                this.set(\"_bDropdownShow\", false);\n                this.set(\"_iSelected\", null);\n            },\n            setSelectedItemAction: function setSelectedItemAction(objItem) {\n                if (this.get(\"_bActionOnMouseDown\")) {\n                    this.set(\"_bActionOnMouseDown\", false);\n                } else {\n                    this.set(\"_bPreventBlur\", false);\n                    this.setSelectedItem(objItem);\n                }\n            },\n            onPermanentItemAction: function onPermanentItemAction(objItem) {\n                this.get(\"onPermanentItemAction\")(objItem);\n                this.set(\"_bDropdownShow\", false);\n            },\n            onLinkAction: function onLinkAction(sOptionsLink, objEvent) {\n                this.set(\"_bPreventBlur\", true);\n                objEvent.stopPropagation();\n                this._funcOpenWindow(sOptionsLink);\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/input-form-tag\", [\"exports\", \"a24-ember-lib/templates/components/input-form-tag\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _inputFormTag, _inputFormElement, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _inputFormTag.default,\n        classNames: [\"a24ErrorInputParent\"],\n        sInputType: \"tag\",\n        arrTags: null,\n        sValueKey: \"sValue\",\n        sIdKey: \"sId\",\n        sPlaceholderSecondary: null,\n        _sChipStyle: null,\n        _bRendered: false,\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            Ember.run.scheduleOnce(\"afterRender\", function () {\n                //Set default values\n                if (a24Core.isEmpty(_this.get(\"arrTags\"))) {\n                    _this.set(\"arrTags\", []);\n                } else {\n                    _this._updateInputValuesFromTags(false);\n                }\n\n                _this.set(\"_sChipStyle\", \"chips\");\n                var objChips = $(\"#\" + _this.get(\"_sInputId\"));\n                var arrData = _this._updateMaterialChipValues(true);\n\n                objChips.material_chip({\n                    data: arrData,\n                    placeholder: _this.get(\"sPlaceholderSecondary\"),\n                    secondaryPlaceholder: _this.get(\"sPlaceholder\") //This seems to be the primary placeholder\n                });\n                objChips.on(\"chip.add\", function () {\n                    _this._updateInputValuesFromMDBTags(objChips);\n                });\n                objChips.on(\"chip.delete\", function () {\n                    _this._updateInputValuesFromMDBTags(objChips);\n                });\n\n                objChips.find(\"input\").on(\"keyup\", function (objEvent) {\n                    if (objEvent.which === 27) {\n                        // Escape key\n                        objChips.find(\"input\").blur();\n                    }\n                });\n\n                _this.set(\"_bRendered\", true);\n            });\n        },\n        _updateInputValuesFromMDBTags: function _updateInputValuesFromMDBTags(objChips) {\n            var arrTagData = objChips.material_chip(\"data\");\n\n            var arrData = [];\n            for (var i = 0; i < arrTagData.length; i++) {\n                var objTag = {};\n                objTag[this.get(\"sValueKey\")] = arrTagData[i].tag;\n                if (!a24Core.isEmpty(arrTagData[i].id)) {\n                    objTag[this.get(\"sIdKey\")] = arrTagData[i].id;\n                }\n                arrData.push(objTag);\n            }\n\n            this.setMValueWithInternalFlag(arrData, false);\n        },\n        _updateInputValuesFromTags: function _updateInputValuesFromTags(bBuild) {\n            var arrData = [];\n            for (var i = 0; i < this.get(\"arrTags\").length; i++) {\n                var objTag = {};\n                objTag[this.get(\"sValueKey\")] = this.get(\"arrTags.\" + i + \".\" + this.get(\"sValueKey\"));\n                if (!a24Core.isEmpty(this.get(\"arrTags.\" + i + \".\" + this.get(\"sIdKey\")))) {\n                    objTag[this.get(\"sIdKey\")] = this.get(\"arrTags.\" + i + \".\" + this.get(\"sIdKey\"));\n                }\n                arrData.push(objTag);\n            }\n\n            this.setMValueWithInternalFlag(arrData, !bBuild);\n        },\n        _updateMaterialChipValues: function _updateMaterialChipValues(bReturnData) {\n            var arrData = [];\n            if (!a24Core.isEmpty(this.get(\"arrTags\"))) {\n                for (var i = 0; i < this.get(\"arrTags\").length; i++) {\n\n                    var objTag = {\n                        tag: this.get(\"arrTags.\" + i + \".\" + this.get(\"sValueKey\"))\n                    };\n\n                    if (!a24Core.isEmpty(this.get(\"arrTags.\" + i + \".\" + this.get(\"sIdKey\")))) {\n                        objTag.id = this.get(\"arrTags.\" + i + \".\" + this.get(\"sIdKey\"));\n                    }\n                    arrData.push(objTag);\n                }\n            }\n\n            if (bReturnData) {\n                return arrData;\n            } else {\n                //Reload the new data into the tag input\n                $(\"#\" + this.get(\"_sInputId\")).material_chip(arrData);\n                this._updateInputValuesFromTags(true);\n            }\n        },\n        clear: function clear() {\n            var arrData = [];\n            this.setMValueWithInternalFlag(null, false);\n            $(\"#\" + this.get(\"_sInputId\")).material_chip(arrData);\n        },\n        observeArrTags: Ember.observer(\"arrTags.@each\", function () {\n            if (this.get(\"_bRendered\")) {\n                Ember.run.once(this, this._updateMaterialChipValues, false);\n            }\n        })\n    });\n});","define(\"a24-ember-lib/components/input-form-text-area\", [\"exports\", \"a24-ember-lib/templates/components/input-form-text-area\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _inputFormTextArea, _inputFormElement, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _inputFormTextArea.default,\n        classNames: [\"md-form\", \"a24ErrorInputParent\"],\n        sValue: \"\",\n        sInputType: \"text-area\",\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            Ember.run.scheduleOnce(\"afterRender\", function () {\n                var objTextInput = $(\"#\" + _this.get(\"_sInputId\"));\n                if (!a24Core.isEmpty(_this.get(\"sValue\"))) {\n                    // Set the mvalue first\n                    _this.setMValueWithInternalFlag(_this.get(\"sValue\"), true);\n\n                    // firing a change here will cause the mvalue to update to\n                    // the same value, hence not causing a duplicate event to be fired\n                    objTextInput.val(_this.get(\"sValue\"));\n                    objTextInput.change();\n                }\n\n                objTextInput.on(\"keyup\", function (objEvent) {\n                    if (objEvent.which === 27) {\n                        // Escape key\n                        objTextInput.change();\n                        objTextInput.blur();\n                    }\n                });\n\n                if (!a24Core.isEmpty(_this.get(\"iMaxCharacters\"))) {\n                    objTextInput.attr(\"length\", _this.get(\"iMaxCharacters\"));\n                    objTextInput.characterCounter();\n                }\n\n                _this.resetFloatingLabel(objTextInput);\n\n                objTextInput.on(\"blur\", function () {\n                    _this.resetFloatingLabel(objTextInput);\n                });\n            });\n        },\n        resetFloatingLabel: function resetFloatingLabel(objTextInput) {\n            //If the input field has no value then the label should NOT have the active class and\n            //float at placeholder position\n            if (!a24Core.isEmpty(this.get(\"sValue\")) || !a24Core.isEmpty(this.get(\"sPlaceholder\"))) {\n                this.$(\"label\").addClass(\"active\");\n            } else if (a24Core.isEmpty(objTextInput.val())) {\n                this.$(\"label\").removeClass(\"active\");\n            }\n        },\n        clear: function clear() {\n            this.setValueFromOutside(\"\");\n        },\n        setValueFromOutside: function setValueFromOutside(sValue) {\n            this.setMValueWithInternalFlag(sValue, false);\n\n            //Set the new value onto the input since it does not bind anymore\n            var objTextInput = $(\"#\" + this.get(\"_sInputId\"));\n            objTextInput.val(sValue);\n            objTextInput.change();\n\n            this.resetFloatingLabel(objTextInput);\n        },\n        observeValueChange: Ember.observer(\"sValue\", function () {\n            this.setValueFromOutside(this.get(\"sValue\"));\n        }),\n        actions: {\n            onInputChange: function onInputChange(sValue) {\n                // any internal changes that fire this function will have updated\n                // mvalue already, meaning the duplicate update will not fire any\n                // additional events\n                this.setMValueWithInternalFlag(sValue, false);\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/input-form-text\", [\"exports\", \"a24-ember-lib/templates/components/input-form-text\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _inputFormText, _inputFormElement, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _inputFormText.default,\n        classNames: [\"a24ErrorInputParent\", \"md-form\"],\n        sValue: null,\n        sInputType: \"text\",\n        bUpdateValueOnType: false,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objThis = this;\n            Ember.run.scheduleOnce(\"afterRender\", this, function () {\n                var _this = this;\n\n                var objTextInput = $(\"#\" + objThis.get(\"_sInputId\"));\n\n                if (!a24Core.isEmpty(objThis.get(\"sValue\"))) {\n\n                    // Set the mvalue first\n                    this.setMValueWithInternalFlag(this.get(\"sValue\"), true);\n\n                    // firing a change here will cause the mvalue to update to\n                    // the same value, hence not causing a duplicate event to be fired\n                    objTextInput.val(this.get(\"sValue\"));\n                    objTextInput.change();\n                }\n\n                objTextInput.on(\"keyup\", function (objEvent) {\n                    if (objEvent.which === 27) {\n                        // Escape key\n                        objTextInput.change();\n                        objTextInput.blur();\n                    }\n                });\n\n                if (this.get(\"bUpdateValueOnType\")) {\n                    objTextInput.on(\"click keyup input paste\", function () {\n                        Ember.run.once(_this, \"_onInputTextValueChange\", objTextInput.val());\n                    });\n                }\n\n                if (!a24Core.isEmpty(objThis.get(\"iMaxCharacters\"))) {\n                    objTextInput.attr(\"length\", objThis.get(\"iMaxCharacters\"));\n                    objTextInput.characterCounter();\n                }\n\n                this.resetFloatingLabel(objTextInput);\n\n                objTextInput.on(\"blur\", function () {\n                    objThis.resetFloatingLabel(objTextInput);\n                });\n            });\n        },\n        _onInputTextValueChange: function _onInputTextValueChange(sValue) {\n            // any internal changes that fire this function will have updated\n            // mvalue already, meaning the duplicate update will not fire any\n            // additional events\n            this.setMValueWithInternalFlag(sValue, false);\n        },\n        clear: function clear() {\n            this.setValueFromOutside(\"\");\n        },\n        setValueFromOutside: function setValueFromOutside(sValue) {\n            this.setMValueWithInternalFlag(sValue, false);\n\n            //Set the new value onto the input since it does not bind anymore\n            var objTextInput = $(\"#\" + this.get(\"_sInputId\"));\n            objTextInput.val(sValue);\n            objTextInput.change();\n\n            this.resetFloatingLabel(objTextInput);\n        },\n        observeValueChange: Ember.observer(\"sValue\", function () {\n            this.setValueFromOutside(this.get(\"sValue\"));\n        }),\n        resetFloatingLabel: function resetFloatingLabel(objTextInput) {\n            //If the input field has no value then the label should NOT have the active class and\n            //float at placeholder position\n            if (a24Core.isEmpty(objTextInput.val())) {\n                this.$(\"label\").removeClass(\"active\");\n            }\n        },\n        actions: {\n            onInputChange: function onInputChange(sValue) {\n                // any internal changes that fire this function will have updated\n                // mvalue already, meaning the duplicate update will not fire any\n                // additional events\n                if (!this.get(\"bUpdateValueOnType\")) {\n                    Ember.run.once(this, \"_onInputTextValueChange\", sValue);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/input-form-time-picker\", [\"exports\", \"a24-ember-lib/templates/components/input-form-time-picker\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _inputFormTimePicker, _inputFormElement, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _inputFormTimePicker.default,\n        classNames: [\"md-form\", \"a24ErrorInputParent\"],\n        sSelectedTime: \"\",\n        sInputType: \"time\",\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            Ember.run.scheduleOnce(\"afterRender\", this, function () {\n                var objTimeInput = $(\"#\" + _this.get(\"_sInputId\"));\n\n                //set the initial value before adding the time picker to the field\n                objTimeInput.pickatime({\n                    twelvehour: false,\n                    darktheme: false,\n                    clear: _this.get(\"_objStringsService\").getString(\"clear\"),\n                    donetext: _this.get(\"_objStringsService\").getString(\"ok\")\n                    //min: [7,30], will ignore this for now\n                    //max: [14,0], will ignore this for now\n                });\n                if (!a24Core.isEmpty(_this.get(\"sSelectedTime\"))) {\n\n                    _this.setMValueWithInternalFlag(_this.get(\"sSelectedTime\"), true);\n\n                    //Set the init time if we have one\n                    objTimeInput.val(_this.get(\"sSelectedTime\"));\n                    objTimeInput.change();\n                }\n                objTimeInput.on(\"change\", function () {\n                    Ember.run(function () {\n                        //Set mValue when the value changes and also reset floater if value is empty\n                        _this.setMValueWithInternalFlag(objTimeInput.val(), false);\n\n                        _this.resetFloatingLabel(objTimeInput);\n                    });\n                });\n                objTimeInput.on(\"blur\", function () {\n                    Ember.run(function () {\n                        _this.resetFloatingLabel(objTimeInput);\n                    });\n                });\n\n                // This is added so we can add the esc event on the div\n                _this.$().attr(\"tabindex\", -1);\n                // This is stopped as the picker has a default handling of focusin that closes the popover\n                $(_this.$()).on(\"focusin\", function (objEvent) {\n                    Ember.run(function () {\n                        objEvent.stopPropagation();\n                    });\n                });\n                // This is to focus the popover so the key up events can be handled\n                objTimeInput.on(\"focus\", function () {\n                    Ember.run(function () {\n                        //First we need to hide the time picker that tried to show\n                        //before focusing the input that will bring up the picker\n                        $(\"#\" + _this.get(\"_sInputId\")).data(\"clockpicker\").hide();\n                        _this.$().focus();\n                    });\n                });\n\n                var onEscHandler = function onEscHandler() {\n                    // hides the clock picker when esc is clicked\n                    $(\"#\" + _this.get(\"_sInputId\")).data(\"clockpicker\").hide();\n                };\n\n                // This is jquery for the mdb side\n                $(_this.$()).on(\"keyup\", function (objEvent) {\n                    Ember.run(function () {\n                        if (objEvent.which === 27 && objEvent.keyCode === 27) {\n                            // This is to stop the event from falling through\n                            objEvent.stopPropagation();\n                            Ember.run.once(_this, onEscHandler);\n                        }\n                    });\n                });\n                // This is the jquery for the ember side\n                _this.$().on(\"keyup\", function (objEvent) {\n                    Ember.run(function () {\n                        if (objEvent.which === 27 && objEvent.keyCode === 27) {\n                            // This is to stop the event from falling through\n                            objEvent.stopPropagation();\n                            Ember.run.once(_this, onEscHandler);\n                        }\n                    });\n                });\n\n                objTimeInput.prop(\"readonly\", true);\n\n                _this.resetFloatingLabel(objTimeInput);\n            });\n        },\n        resetFloatingLabel: function resetFloatingLabel(objTimeInput) {\n            //If the input field has no value then the label should NOT have the active class and\n            //float at placeholder position\n            if (a24Core.isEmpty(objTimeInput.val())) {\n\n                this.$(\"label\").removeClass(\"active\");\n            }\n        },\n        clear: function clear() {\n            this.setValueFromOutside(null);\n        },\n        setValueFromOutside: function setValueFromOutside(sValue) {\n            var objTimeInput = $(\"#\" + this.get(\"_sInputId\"));\n\n            if (a24Core.isEmpty(sValue)) {\n                objTimeInput.val(\"\");\n            } else if (objTimeInput.val() !== sValue) {\n                objTimeInput.val(sValue);\n            }\n\n            this.resetFloatingLabel(objTimeInput);\n\n            this.setMValueWithInternalFlag(sValue, false);\n        },\n        setInputValue: Ember.observer(\"sSelectedTime\", function () {\n            this.setValueFromOutside(this.get(\"sSelectedTime\"));\n        })\n    });\n});","define(\"a24-ember-lib/components/input-form-week\", [\"exports\", \"a24-ember-lib/templates/components/input-form-week\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _inputFormWeek, _inputFormElement, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _inputFormWeek.default,\n        classNames: [\"a24ErrorInputParent\", \"input-form-week\"],\n        sInputType: \"week\",\n        arrWeekItems: null, // the items that will display on screen\n        sOptionsValueKey: \"sValue\",\n        sOptionsLabelKey: \"sLabel\",\n        sOptionsSelectedKey: \"bSelected\",\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            if (a24Core.isEmpty(this.get(\"arrWeekItems\"))) {\n                var arrWeekItems = [];\n\n                var objSun = {};\n                objSun[this.get(\"sOptionsLabelKey\")] = \"S\";\n                objSun[this.get(\"sOptionsValueKey\")] = 0;\n                var objMon = {};\n                objMon[this.get(\"sOptionsLabelKey\")] = \"M\";\n                objMon[this.get(\"sOptionsValueKey\")] = 1;\n                var objTue = {};\n                objTue[this.get(\"sOptionsLabelKey\")] = \"T\";\n                objTue[this.get(\"sOptionsValueKey\")] = 2;\n                var objWed = {};\n                objWed[this.get(\"sOptionsLabelKey\")] = \"W\";\n                objWed[this.get(\"sOptionsValueKey\")] = 3;\n                var objThu = {};\n                objThu[this.get(\"sOptionsLabelKey\")] = \"T\";\n                objThu[this.get(\"sOptionsValueKey\")] = 4;\n                var objFri = {};\n                objFri[this.get(\"sOptionsLabelKey\")] = \"F\";\n                objFri[this.get(\"sOptionsValueKey\")] = 5;\n                var objSat = {};\n                objSat[this.get(\"sOptionsLabelKey\")] = \"S\";\n                objSat[this.get(\"sOptionsValueKey\")] = 6;\n\n                arrWeekItems.push(objSun);\n                arrWeekItems.push(objMon);\n                arrWeekItems.push(objTue);\n                arrWeekItems.push(objWed);\n                arrWeekItems.push(objThu);\n                arrWeekItems.push(objFri);\n                arrWeekItems.push(objSat);\n                this.set(\"arrWeekItems\", arrWeekItems);\n            }\n        },\n        clear: function clear() {\n            //Sets all to false\n            this.get(\"arrWeekItems\").setEach(this.get(\"sOptionsSelectedKey\"), false);\n            this.setValueFromOutside(null, false);\n        },\n        setValueFromOutside: function setValueFromOutside(arrSelectedItems, bInternalProcess) {\n            var arrWeekItems = this.get(\"arrWeekItems\");\n            arrWeekItems.setEach(this.get(\"sOptionsSelectedKey\"), false);\n\n            var arrNewSelectedItems = [];\n            if (!a24Core.isEmpty(arrSelectedItems)) {\n                for (var i = 0; i < arrWeekItems.length; i++) {\n                    for (var j = 0; j < arrSelectedItems.length; j++) {\n                        if (Ember.get(arrWeekItems[i], this.get(\"sOptionsValueKey\")) === Ember.get(arrSelectedItems[j], this.get(\"sOptionsValueKey\"))) {\n                            arrNewSelectedItems.pushObject(arrWeekItems[i]);\n                            Ember.set(arrWeekItems[i], this.get(\"sOptionsSelectedKey\"), true);\n                        }\n                    }\n                }\n            }\n\n            if (a24Core.isEmpty(arrNewSelectedItems)) {\n                arrNewSelectedItems = null;\n            }\n\n            this.setMValueWithInternalFlag(arrNewSelectedItems, bInternalProcess);\n        },\n        observeOptionsChange: Ember.observer(\"arrWeekItems.@each\", function () {\n            Ember.run.once(this, this.updateInputSelectedValuesFromObserve);\n        }),\n        updateInputSelectedValuesFromObserve: function updateInputSelectedValuesFromObserve() {\n            this.setValueFromOutside(null, true);\n        },\n        actions: {\n            onItemSelected: function onItemSelected(objWeekItem, objEvent) {\n                if (a24Core.isEmpty(objEvent) || objEvent.which === 13 || objEvent.keyCode === 13) {\n                    var bPrevSelected = Ember.get(objWeekItem, this.get(\"sOptionsSelectedKey\"));\n                    Ember.set(objWeekItem, this.get(\"sOptionsSelectedKey\"), !bPrevSelected);\n\n                    var arrValues = [];\n                    var arrPrevValues = this.get(\"mValue\");\n                    if (a24Core.isEmpty(arrPrevValues)) {\n                        arrPrevValues = [];\n                    }\n                    arrValues.addObjects(arrPrevValues);\n                    if (bPrevSelected) {\n                        arrValues.removeObject(objWeekItem);\n                    } else {\n                        arrValues.pushObject(objWeekItem);\n                    }\n\n                    if (a24Core.isEmpty(arrValues)) {\n                        arrValues = null;\n                    }\n\n                    this.setMValueWithInternalFlag(arrValues, false);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/input-number\", [\"exports\", \"a24-ember-lib/templates/components/input-number\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _inputNumber, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _inputNumber.default,\n        classNames: [\"md-form\"],\n        sFieldName: \"\",\n        iValue: null,\n        bAllowFloat: false,\n        bAllowNegative: false,\n        iFloatPlaces: 1,\n        _sValue: \"\",\n        _sInputId: null,\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n            this.set(\"_sInputId\", Ember.guidFor({}));\n\n            Ember.run.scheduleOnce(\"afterRender\", function () {\n                var objTextInput = $(\"#\" + _this.get(\"_sInputId\"));\n\n                if (!a24Core.isEmpty(_this.get(\"iValue\"))) {\n                    _this._setValueFromInputChange(true);\n                }\n\n                objTextInput.on(\"blur\", function () {\n                    _this.resetFloatingLabel();\n                });\n            });\n        },\n        _setValueFromInputChange: function _setValueFromInputChange(bUseIValue) {\n            this.set(\"_bInternalChange\", true);\n            var objTextInput = $(\"#\" + this.get(\"_sInputId\"));\n            var objParsedNum = null;\n            if (!a24Core.isEmpty(bUseIValue) && bUseIValue) {\n                objParsedNum = this._parseToNumber(this.get(\"iValue\") + \"\");\n            } else {\n                objParsedNum = this._parseToNumber(objTextInput.val().trim());\n            }\n\n            var iInputValue = objParsedNum.iValue;\n            if (a24Core.isEmpty(iInputValue) && objParsedNum.bTrailingDot) {\n                this.set(\"_sValue\", \".\");\n            } else if (a24Core.isEmpty(iInputValue)) {\n                this.set(\"_sValue\", \"\");\n            } else {\n                if (objParsedNum.bTrailingDot) {\n                    this.set(\"_sValue\", \"\" + iInputValue + \".\");\n                } else {\n                    this.set(\"_sValue\", \"\" + iInputValue);\n                }\n            }\n\n            this.set(\"iValue\", iInputValue);\n            objTextInput.val(this.get(\"_sValue\"));\n            objTextInput.change();\n\n            this.resetFloatingLabel();\n            this.set(\"_bInternalChange\", false);\n        },\n        _observeIValue: Ember.observer(\"iValue\", function () {\n            if (!this.get(\"_bInternalChange\")) {\n                this._setValueFromInputChange(true);\n            }\n        }),\n        _observeSValue: Ember.observer(\"_sValue\", function () {\n            if (!this.get(\"_bInternalChange\")) {\n                this._setValueFromInputChange();\n            }\n        }),\n        _parseToNumber: function _parseToNumber(sInputValue) {\n            if (a24Core.isEmpty(sInputValue)) {\n                return {\n                    iValue: null,\n                    bTrailingDot: false\n                };\n            }\n\n            var sParsedNumber = \"\";\n            var arrValids = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \".\"];\n\n            if (this.get(\"bAllowNegative\")) {\n                arrValids.push(\"-\");\n            }\n\n            for (var i = 0; i < sInputValue.length; i++) {\n                if (arrValids.indexOf(sInputValue.charAt(i)) !== -1) {\n                    sParsedNumber += sInputValue.charAt(i);\n                }\n            }\n\n            //Make sure that there is only one \".\" in the string, we keep the first one and just remove the rest.\n            var arrSplit = sParsedNumber.split(\".\");\n            if (arrSplit.length !== 1) {\n                sParsedNumber = arrSplit[0] + \".\" + arrSplit[1];\n                for (var j = 2; j < arrSplit.length; j++) {\n                    sParsedNumber += arrSplit[j];\n                }\n            }\n\n            if (sParsedNumber.charAt(0) === \".\" && !this.get(\"bAllowFloat\")) {\n                sParsedNumber = \"\";\n            }\n\n            if (a24Core.isEmpty(sParsedNumber)) {\n                return {\n                    iValue: null,\n                    bTrailingDot: false\n                };\n            } else if (sParsedNumber === \".\") {\n                return {\n                    iValue: null,\n                    bTrailingDot: true\n                };\n            } else if (this.get(\"bAllowFloat\")) {\n                //Trim the string to the allowed float places.\n                var iIndexOfDot = sParsedNumber.indexOf(\".\");\n                if (iIndexOfDot !== -1) {\n                    sParsedNumber = sParsedNumber.substring(0, iIndexOfDot + 1 + this.get(\"iFloatPlaces\"));\n                }\n\n                return {\n                    iValue: parseFloat(sParsedNumber),\n                    bTrailingDot: sParsedNumber[sParsedNumber.length - 1] === \".\"\n                };\n            } else if (this.get(\"bAllowNegative\")) {\n                var iIndexOfNeg = sParsedNumber.indexOf(\"-\");\n                var iIndexOfOtherNeg = sParsedNumber.indexOf(\"-\", 1);\n                var sBeforeNeg = null;\n                var sAfterNeg = null;\n                if (iIndexOfNeg === 0) {\n                    if (iIndexOfOtherNeg !== -1) {\n                        sBeforeNeg = sParsedNumber.substring(0, iIndexOfOtherNeg);\n                        sAfterNeg = sParsedNumber.substring(iIndexOfOtherNeg + 1, sParsedNumber.length);\n                        sParsedNumber = sBeforeNeg + sAfterNeg;\n                    }\n                    if (sParsedNumber.length > 1) {\n                        return {\n                            iValue: parseInt(sParsedNumber),\n                            bTrailingDot: false\n                        };\n                    }\n                    return {\n                        iValue: sParsedNumber,\n                        bTrailingDot: false\n                    };\n                } else if (iIndexOfNeg > 0) {\n                    sBeforeNeg = sParsedNumber.substring(0, iIndexOfNeg);\n                    sAfterNeg = sParsedNumber.substring(iIndexOfNeg + 1, sParsedNumber.length);\n                    sParsedNumber = sBeforeNeg + sAfterNeg;\n                }\n                return {\n                    iValue: parseInt(sParsedNumber),\n                    bTrailingDot: false\n                };\n            } else {\n                return {\n                    iValue: parseInt(sParsedNumber),\n                    bTrailingDot: false\n                };\n            }\n        },\n        resetFloatingLabel: function resetFloatingLabel() {\n            //If the input field has no value then the label should NOT have the active class and\n            //float at placeholder position\n            if (a24Core.isEmpty(this.get(\"_sValue\"))) {\n                this.$(\"label\").removeClass(\"active\");\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/input-text\", [\"exports\", \"a24-ember-lib/templates/components/input-text\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _inputText, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _inputText.default,\n        classNames: [\"md-form\"],\n        sFieldName: \"\",\n        sValue: \"\",\n        _sInputId: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n            this.set(\"_sInputId\", Ember.guidFor({}));\n\n            var objThis = this;\n\n            Ember.run.scheduleOnce(\"afterRender\", this, function () {\n                var objTextInput = $(\"#\" + objThis.get(\"_sInputId\"));\n\n                if (!a24Core.isEmpty(objThis.get(\"sValue\"))) {\n                    objTextInput.change();\n                }\n\n                objTextInput.on(\"blur\", function () {\n                    objThis.resetFloatingLabel(objTextInput);\n                });\n            });\n        },\n        resetFloatingLabel: function resetFloatingLabel(objTextInput) {\n            //If the input field has no value then the label should NOT have the active class and\n            //float at placeholder position\n            if (a24Core.isEmpty(objTextInput.val())) {\n                this.$(\"label\").removeClass(\"active\");\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/line-item-component\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/templates/components/line-item-component\"], function (exports, _didRenderChangesMixin, _lineItemComponent) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _lineItemComponent.default,\n        tagName: \"li\",\n        classNameBindings: [\"sCustomClassName\"],\n        sCustomClassName: null,\n        sOptionsLabel: null,\n        sOptionsLink: null,\n        arrActions: null,\n        // the tooltip text\n        sToolTipText: null,\n        // the tooltip position\n        sToolTipPosition: \"bottom\",\n        sToolTipClass: \"a24-tooltip\",\n        funcGetTooltipElementCallback: null,\n        _objToolTipService: Ember.inject.service(\"tooltip\"),\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            Ember.run.schedule(\"afterRender\", function () {\n                var objElement = _this.$();\n                var sToolTipText = _this.get(\"sToolTipText\");\n                var sToolTipPosition = _this.get(\"sToolTipPosition\");\n                var sToolTipClass = _this.get(\"sToolTipClass\");\n                var funcGetTooltipElementCallback = _this.get(\"funcGetTooltipElementCallback\");\n                _this.get(\"_objToolTipService\").addTooltip(objElement, sToolTipText, sToolTipPosition, sToolTipClass, funcGetTooltipElementCallback);\n\n                _this.$().on(\"mousedown\", function () {\n                    if (!a24Core.isEmpty(_this.get(\"setSelectedItemAction\"))) {\n                        return _this.get(\"setSelectedItemAction\")();\n                    }\n                });\n            });\n        },\n        observeTooltip: Ember.observer(\"sToolTipText\", function () {\n            var objElement = this.$();\n            this.get(\"_objToolTipService\").disposeOfTooltip(objElement);\n\n            var sToolTipText = this.get(\"sToolTipText\");\n            var sToolTipPosition = this.get(\"sToolTipPosition\");\n            var sToolTipClass = this.get(\"sToolTipClass\");\n            var funcGetTooltipElementCallback = this.get(\"funcGetTooltipElementCallback\");\n            this.get(\"_objToolTipService\").addTooltip(objElement, sToolTipText, sToolTipPosition, sToolTipClass, funcGetTooltipElementCallback);\n        }),\n        willDestroyElement: function willDestroyElement() {\n            var objElement = this.$();\n            this.get(\"_objToolTipService\").disposeOfTooltip(objElement);\n        },\n        actions: {\n            onActionClick: function onActionClick() {\n                if (!a24Core.isEmpty(this.get(\"onActionClick\"))) {\n                    return this.get(\"onActionClick\")();\n                }\n            },\n            onLinkAction: function onLinkAction(objEvent) {\n                if (!a24Core.isEmpty(this.get(\"onLinkAction\"))) {\n                    return this.get(\"onLinkAction\")(this.get(\"sOptionsLink\"), objEvent);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/loader-blackout\", [\"exports\", \"a24-ember-lib/templates/components/loader-blackout\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _loaderBlackout, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _loaderBlackout.default,\n        bLoading: false,\n        sBlackOutClass: \"\",\n        _objDomEventService: Ember.inject.service(\"dom-event\"),\n        _iMinHeight: 72, //36 (loader height) * 2\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n            this.get(\"_objDomEventService\");\n\n            Ember.run.scheduleOnce(\"afterRender\", function () {\n                _this.setLoaderWrapperSize();\n            });\n        },\n        setLoaderWrapperSize: function setLoaderWrapperSize() {\n            this.$().removeClass(\"loader-min-height\");\n            if (this.get(\"bLoading\")) {\n                if (this.$().parent().css(\"position\") === \"relative\") {\n\n                    if (this.$().parent().height() < this.get(\"_iMinHeight\")) {\n                        this.$().addClass(\"loader-min-height\");\n                    }\n                } else {\n                    console.error( //eslint-disable-line no-console\n                    \"The loader-blackout component should always be within a parent div \" + \"that has position:relative on it.\");\n                }\n            }\n        },\n        _onWindowResize: Ember.observer(\"_objDomEventService.iPageWidth\", \"_objDomEventService.iPageHeight\", \"bLoading\", function () {\n            Ember.run.once(this, \"setLoaderWrapperSize\");\n        })\n    });\n});","define(\"a24-ember-lib/components/loading-component\", [\"exports\", \"a24-ember-lib/templates/components/loading-component\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _loadingComponent, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _loadingComponent.default,\n        classNames: [\"center-text-horizontal\"]\n    });\n});","define(\"a24-ember-lib/components/popup-modal\", [\"exports\", \"a24-ember-lib/templates/components/popup-modal\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _popupModal, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _popupModal.default,\n        // id of the component\n        sModalId: null,\n        // used to determine what was clicked\n        mValue: null,\n        // the text on the confirm button\n        sConfirmButtonText: null,\n        // the text on the cancel button\n        sCancelButtonText: null,\n        // used to determine if clicking outside the popup will close it\n        bDismissible: true,\n        // used to open/close the popup\n        bShowPopup: false,\n        // used to open/close the popup when a button is clicked\n        bAutoClose: true,\n        // Keeps track of the loading state.\n        bLoading: false,\n        // hide buttons\n        bHasDefaultButtons: true,\n        // used to prevent popup from getting hidden or shown while animating\n        _bPopupAnimating: false,\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            // If button not empty string set it to default\n            if (a24Core.isEmpty(this.get(\"sConfirmButtonText\")) && this.get(\"sConfirmButtonText\") !== \"\") {\n                this.set(\"sConfirmButtonText\", this.get(\"_objStringsService\").getString(\"ok\"));\n            }\n            // If button not empty string set it to default\n            if (a24Core.isEmpty(this.get(\"sCancelButtonText\")) && this.get(\"sCancelButtonText\") !== \"\") {\n                this.set(\"sCancelButtonText\", this.get(\"_objStringsService\").getString(\"cancel\"));\n            }\n\n            Ember.run.scheduleOnce(\"afterRender\", this, function () {\n                this.$().attr(\"id\", this.get(\"sModalId\"));\n                this.$().attr(\"role\", \"dialog\");\n                // this is to preserve the order in which the attributes get added\n                this.$().attr(\"style\", \"display: none\");\n                this.$().addClass(\"modal\");\n                this.$().addClass(\"fade\");\n\n                if (a24Core.isEmpty(this.get(\"bShowPopup\"))) {\n                    this.set(\"bShowPopup\", false);\n                }\n\n                $(this.$()).modal({\n                    backdrop: false,\n                    show: this.get(\"bShowPopup\")\n                });\n\n                var objThis = this;\n                $(this.$()).on(\"hide.bs.modal\", function () /*objEvent*/{\n                    objThis.set(\"_bPopupAnimating\", true);\n                    objThis.set(\"bShowPopup\", false);\n                });\n                $(this.$()).on(\"show.bs.modal\", function () /*objEvent*/{\n                    objThis.set(\"_bPopupAnimating\", true);\n                    objThis.set(\"bShowPopup\", true);\n                });\n                $(this.$()).on(\"hidden.bs.modal\", function () /*objEvent*/{\n                    if (!a24Core.isEmpty(objThis)) {\n                        objThis.set(\"_bPopupAnimating\", false);\n                        if (objThis.get(\"bShowPopup\")) {\n                            $(objThis.$()).modal(\"show\");\n                        }\n                    }\n                });\n                $(this.$()).on(\"shown.bs.modal\", function () /*objEvent*/{\n                    if (!a24Core.isEmpty(objThis)) {\n                        objThis.set(\"_bPopupAnimating\", false);\n                        if (!objThis.get(\"bShowPopup\")) {\n                            $(objThis.$()).modal(\"hide\");\n                        }\n                    }\n                });\n            });\n        },\n        observeShowHideChanges: Ember.observer(\"bShowPopup\", function () {\n            if (this.get(\"bShowPopup\") && !this.get(\"_bPopupAnimating\")) {\n                $(this.$()).modal(\"show\");\n                a24ComponentEvent.onPopupConfirmationModalOpen();\n            } else if (!this.get(\"bShowPopup\") && !this.get(\"_bPopupAnimating\")) {\n                $(this.$()).modal(\"hide\");\n                a24ComponentEvent.onPopupConfirmationModalClose();\n            }\n        }),\n        actions: {\n            onPopupConfirmationCancel: function onPopupConfirmationCancel() {\n                if (!a24Core.isEmpty(this.get(\"onPopupConfirmationCancel\"))) {\n                    this.get(\"onPopupConfirmationCancel\")(this.get(\"mValue\"));\n                }\n\n                if (this.get(\"bAutoClose\")) {\n                    this.set(\"bShowPopup\", false);\n                }\n            },\n            onPopupConfirmationConfirm: function onPopupConfirmationConfirm() {\n                if (!a24Core.isEmpty(this.get(\"onPopupConfirmationConfirm\"))) {\n                    this.get(\"onPopupConfirmationConfirm\")(this.get(\"mValue\"));\n                }\n\n                if (this.get(\"bAutoClose\")) {\n                    this.set(\"bShowPopup\", false);\n                }\n            },\n            onPopupBackdropClick: function onPopupBackdropClick() {\n                if (this.get(\"bDismissible\")) {\n                    if (!a24Core.isEmpty(this.get(\"onPopupConfirmationCancel\"))) {\n                        this.get(\"onPopupConfirmationCancel\")(this.get(\"mValue\"));\n                    }\n\n                    if (this.get(\"bAutoClose\")) {\n                        this.set(\"bShowPopup\", false);\n                    }\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/popup-responsive-modal\", [\"exports\", \"a24-ember-lib/templates/components/popup-responsive-modal\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _popupResponsiveModal, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _popupResponsiveModal.default,\n        classNames: [\"popup-responsive-modal\"],\n        // id of the component\n        sModalId: null,\n        // used to determine what was clicked\n        mValue: null,\n        // used to determine if clicking outside the popup will close it.\n        bDismissible: true,\n        // used to open/close the popup\n        bShowPopup: false,\n        bLoading: false,\n        iMobileWidth: 800,\n        iMobileHeight: 500,\n        bMobileView: false, //This is not meant to be send in but rather observed by components wrapped inside this one\n        sModalSize: \"\", //modal-sm | modal-lg | modal-fluid | It is medium by default, so no style for that\n        _bPopupAnimating: false, // used to prevent popup from getting hidden or shown while animating\n        _objDomEventService: Ember.inject.service(\"dom-event\"), // Dom event service\n        _objUrlTrickery: Ember.inject.service(\"url-trickery\"), // Url manipulation service\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _sPopupId: \"\",\n        _sPopupUrlQuery: \"\",\n        _funcKeyUp: null,\n        _bDoneInit: false,\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.get(\"_objDomEventService\");\n            this.get(\"_objUrlTrickery\");\n\n            if (a24Core.isEmpty(this.get(\"_sPopupId\"))) {\n                this.set(\"_sPopupId\", Ember.guidFor({}));\n            }\n            this.set(\"_sPopupUrlQuery\", this.get(\"_sPopupId\") + \"=\" + encodeURI(this.get(\"_objLibConstants.URL_VALUE_POPUPS\")));\n\n            var objThis = this;\n            var funcKeyUp = function funcKeyUp(objEvent) {\n                Ember.run(function () {\n                    if (objEvent.keyCode === 27) {\n\n                        if (a24Core.endsWith(objThis.get(\"_objUrlTrickery.sCurrentHash\"), objThis.get(\"_sPopupUrlQuery\"))) {\n                            if (objThis.get(\"bDismissible\")) {\n                                //The below goBack will cause the onPopupResponsiveDismiss to fire\n                                objThis.get(\"_objUrlTrickery\").goBack();\n                            } else {\n                                objThis.sendAction(\"onPopupResponsiveDismiss\", objThis.get(\"mValue\"));\n                            }\n                        }\n                    }\n                });\n            };\n            this.set(\"_funcKeyUp\", funcKeyUp);\n\n            Ember.run.scheduleOnce(\"afterRender\", function () {\n                _this.$().attr(\"id\", _this.get(\"sModalId\"));\n                _this.$().attr(\"role\", \"dialog\");\n                // this is to preserve the order in which the attributes get added\n                _this.$().attr(\"style\", \"display: none;\");\n                _this.$().addClass(\"modal\");\n                _this.$().addClass(\"fade\");\n\n                if (a24Core.isEmpty(_this.get(\"bShowPopup\"))) {\n                    _this.set(\"bShowPopup\", false);\n                }\n                if (_this.get(\"bShowPopup\")) {\n                    _this.get(\"_objUrlTrickery\").addUrlParam(_this.get(\"_sPopupId\"), _this.get(\"_objLibConstants.URL_VALUE_POPUPS\"));\n                    $(document).on(\"keyup\", _this.get(\"_funcKeyUp\"));\n                }\n\n                var objComponentElement = $(_this.$());\n                objComponentElement.modal({\n                    backdrop: false,\n                    show: _this.get(\"bShowPopup\"),\n                    keyboard: false\n                });\n\n                var objThis = _this;\n                objComponentElement.on(\"hidden.bs.modal\", function () /*objEvent*/{\n                    Ember.run(function () {\n                        if (!a24Core.isEmpty(objThis)) {\n                            objThis.set(\"_bPopupAnimating\", false);\n                            if (objThis.get(\"bShowPopup\")) {\n                                objThis.funcShow();\n                            }\n                        }\n                    });\n                });\n                objComponentElement.on(\"shown.bs.modal\", function () /*objEvent*/{\n                    Ember.run(function () {\n                        if (!a24Core.isEmpty(objThis)) {\n                            objThis.set(\"_bPopupAnimating\", false);\n                            if (!objThis.get(\"bShowPopup\")) {\n                                objThis.funcHide();\n                            }\n                        }\n                    });\n                });\n\n                _this.set(\"_bDoneInit\", true);\n\n                //Set the correct state\n                _this.onWindowResize();\n            });\n        },\n        funcShow: function funcShow() {\n            var _this2 = this;\n\n            Ember.run(function () {\n                if (!a24Core.isEmpty(_this2)) {\n                    if (!_this2.get(\"_objUrlTrickery.sCurrentHash\").includes(_this2.get(\"_sPopupId\") + \"=\" + _this2.get(\"_objLibConstants.URL_VALUE_POPUPS\"))) {\n                        $(_this2.$()).modal(\"show\");\n                        _this2.set(\"_bPopupAnimating\", true);\n                        _this2.set(\"bShowPopup\", true);\n                        _this2.get(\"_objUrlTrickery\").addUrlParam(_this2.get(\"_sPopupId\"), _this2.get(\"_objLibConstants.URL_VALUE_POPUPS\"));\n\n                        $(document).on(\"keyup\", _this2.get(\"_funcKeyUp\"));\n                    }\n                }\n            });\n        },\n        funcHide: function funcHide() {\n            var _this3 = this;\n\n            Ember.run(function () {\n                if (!a24Core.isEmpty(_this3)) {\n                    $(_this3.$()).modal(\"hide\");\n                    _this3.set(\"_bPopupAnimating\", true);\n                    _this3.set(\"bShowPopup\", false);\n\n                    if (_this3.get(\"_objUrlTrickery.sCurrentHash\").indexOf(_this3.get(\"_sPopupUrlQuery\")) !== -1) {\n                        _this3.get(\"_objUrlTrickery\").goBack();\n                    }\n                    $(document).off(\"keyup\", _this3.get(\"_funcKeyUp\"));\n                }\n            });\n        },\n        willDestroy: function willDestroy() {\n            this._super.apply(this, arguments);\n            //Remove only the callback added by this component since there might be other popups still\n            $(document).off(\"keyup\", this.get(\"_funcKeyUp\"));\n        },\n        dismissPopup: function dismissPopup() {\n            if (!a24Core.isEmpty(this.get(\"onPopupResponsiveDismiss\"))) {\n                this.get(\"onPopupResponsiveDismiss\")(this.get(\"mValue\"));\n            }\n            if (this.get(\"bDismissible\")) {\n                this.set(\"bShowPopup\", false);\n            }\n        },\n        observeShowHideChanges: Ember.observer(\"bShowPopup\", function () {\n            if (this.get(\"_bDoneInit\")) {\n                if (this.get(\"bShowPopup\") && !this.get(\"_bPopupAnimating\")) {\n                    this.funcShow();\n                    a24ComponentEvent.onPopupResponsiveModalOpen();\n                } else if (!this.get(\"bShowPopup\") && !this.get(\"_bPopupAnimating\")) {\n                    this.funcHide();\n                    a24ComponentEvent.onPopupResponsiveModalClose();\n                }\n            }\n        }),\n        observeHashChanges: Ember.observer(\"_objUrlTrickery.sCurrentHash\", function () {\n            if (!a24Core.isEmpty(this)) {\n                if (this.get(\"_bDoneInit\")) {\n                    if (this.get(\"bShowPopup\") && this.get(\"_objUrlTrickery.sCurrentHash\").indexOf(this.get(\"_sPopupUrlQuery\")) === -1) {\n                        if (!this.get(\"bDismissible\")) {\n                            this.get(\"_objUrlTrickery\").addUrlParam(this.get(\"_sPopupId\"), this.get(\"_objLibConstants.URL_VALUE_POPUPS\"));\n                        }\n                        this.dismissPopup();\n                    } else if (!this.get(\"bShowPopup\") && a24Core.endsWith(this.get(\"_objUrlTrickery.sCurrentHash\"), this.get(\"_sPopupUrlQuery\"))) {\n                        this.get(\"_objUrlTrickery\").goBack();\n                    }\n                }\n            }\n        }),\n        onWindowResize: Ember.observer(\"_objDomEventService.iPageWidth\", \"_objDomEventService.iPageHeight\", function () {\n            if (this.get(\"_bDoneInit\")) {\n                var iPageWidth = this.get(\"_objDomEventService.iPageWidth\");\n                var iPageHeight = this.get(\"_objDomEventService.iPageHeight\");\n\n                if (iPageWidth < this.get(\"iMobileWidth\") || iPageHeight < this.get(\"iMobileHeight\")) {\n                    this.set(\"bMobileView\", true);\n                } else {\n                    this.set(\"bMobileView\", false);\n                }\n            }\n        }),\n        actions: {\n            onPopupBackdropClick: function onPopupBackdropClick(objEvent) {\n                if (objEvent.target === this.$(\".a24-modal-backdrop\").get(0) || objEvent.target === this.$(\".modal-dialog\").get(0)) {\n                    objEvent.stopPropagation();\n                    this.dismissPopup();\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/popup-trigger\", [\"exports\", \"a24-ember-lib/templates/components/popup-trigger\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _popupTrigger, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _popupTrigger.default,\n        // the id of the modal component\n        sModalId: \"\",\n        init: function init() {\n            this._super.apply(this, arguments);\n            Ember.run.scheduleOnce(\"afterRender\", this, function () {\n                this.$(\"a\").attr(\"data-toggle\", \"modal\");\n            });\n        }\n    });\n});","define(\"a24-ember-lib/components/progress-loader-component\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/templates/components/progress-loader-component\"], function (exports, _didRenderChangesMixin, _progressLoaderComponent) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _progressLoaderComponent.default,\n        classNames: [\"progress-loader-component\"],\n        iProgress: null,\n        sLoaderText: null,\n        _objDomEventService: Ember.inject.service(\"dom-event\"),\n        _iMinHeight: 100,\n\n        _sProgressStyle: Ember.computed(\"iProgress\", function () {\n            return (\"width: \" + this.get(\"iProgress\") + \"%;\").htmlSafe();\n        }),\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n            this.get(\"_objDomEventService\");\n\n            Ember.run.scheduleOnce(\"afterRender\", function () {\n                _this.setLoaderWrapperSize();\n            });\n        },\n\n        setLoaderWrapperSize: function setLoaderWrapperSize() {\n            this.$().removeClass(\"loader-min-height\");\n            if (this.$().parent().css(\"position\") === \"relative\") {\n\n                if (this.$().parent().height() < this.get(\"_iMinHeight\")) {\n                    this.$().addClass(\"loader-min-height\");\n                }\n            } else {\n                console.error( //eslint-disable-line no-console\n                \"The progress-loader-componen should always be within a parent div \" + \"that has position:relative on it.\");\n            }\n        },\n\n        _onWindowResize: Ember.observer(\"_objDomEventService.iPageWidth\", \"_objDomEventService.iPageHeight\", function () {\n            Ember.run.once(this, \"setLoaderWrapperSize\");\n        })\n    });\n});","define(\"a24-ember-lib/components/react-page-component\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/templates/components/react-page-component\"], function (exports, _didRenderChangesMixin, _reactPageComponent) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _reactPageComponent.default,\n        classNames: [\"tab-react-iframe\", \"react-page\"],\n        classNameBindings: [\"_bShowPopup:modal-opened\"],\n\n        sIFrameId: null,\n        sIFrameUrl: null,\n        sIFrameLoader: null,\n        objPostIframeData: null,\n        sExtraQueryParams: null,\n        sExtraParams: null,\n        objQueryParams: null,\n\n        _objDomService: Ember.inject.service(\"dom-event\"),\n        _objChatterIframeComService: Ember.inject.service(\"chatter-iframe-com-base\"),\n        _objQueryParamBuilderService: Ember.inject.service(\"query-param-object-builder\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigationWithWillDestroyService: Ember.inject.service(\"navigation\"),\n        // this relies on the react-ember-navigation having been created in the app\n        _objReactEmberNavigation: Ember.inject.service(\"react-ember-navigation\"),\n\n        _sAllowList: \"\",\n        _sIFrameFullUrl: null,\n        _bShowPopup: false,\n        _bReadyFired: false,\n        _funcUnregister: null,\n        _funcPostLayoutData: null,\n        _objLayoutInfo: null,\n        _bFrameFullscreen: false,\n\n        _funcQueryParamsObserverCallback: function _funcQueryParamsObserverCallback() {\n            var objThis = this;\n            // We do this purely because we need certain variables to bind back to the parent for testing\n            Ember.run.schedule(\"actions\", function () {\n                objThis._sendReactQueryParams();\n            });\n        },\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            // Commented out since the fab does not show\n            // schedule(\"afterRender\", () => {\n            //     $(\".main-container\").addClass(\"tab-react-iframe\");\n            // });\n\n            // We need to specifically get the service since it is lazy loaded and incompatible with observe only\n            this.get(\"_objDomService.iPageHeight\");\n\n            this.set(\"_sAllowList\", \"clipboard-read; clipboard-write;\");\n\n            this.addObserver(\"objQueryParams\", this, this.get(\"_funcQueryParamsObserverCallback\"));\n\n            if (!a24Core.isEmpty(this.get(\"sIFrameUrl\"))) {\n                var env = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n                if (env.environment === \"test\") {\n                    this.set(\"sIFrameId\", \"testFrameIdhere1234\");\n                } else if (a24Core.isEmpty(this.get(\"sIFrameId\"))) {\n                    this.set(\"sIFrameId\", Ember.guidFor({}));\n                }\n                this.set(\"_funcUnregister\", this.get(\"_objChatterIframeComService\").receiveMessage(function (objMessage) {\n                    var objData = {};\n                    if (!a24Core.isEmpty(objMessage.data)) {\n                        objData = JSON.parse(objMessage.data);\n                    }\n                    if (a24Core.isEmpty(objData.frameId) || objData.frameId === _this.get(\"sIFrameId\")) {\n                        _this._handleMessages(objData);\n                    }\n                }, this.get(\"sIFrameUrl\")));\n            }\n\n            var funcPostLayoutData = function funcPostLayoutData() {\n                if (a24Core.isEmpty(_this) || !_this.get(\"_bReadyFired\")) {\n                    return;\n                }\n                Ember.run.next(function () {\n                    Ember.run.schedule(\"afterRender\", function () {\n                        if (a24Core.isEmpty(_this)) {\n                            return;\n                        }\n                        var objRect = _this.element.getBoundingClientRect();\n                        var iRight = _this.get(\"_objDomService.iPageWidth\") - objRect.right;\n                        var iBottom = _this.get(\"_objDomService.iPageHeight\") - objRect.bottom;\n                        if (_this.get(\"_objLayoutInfo.layoutLeft\") !== objRect.left || _this.get(\"_objLayoutInfo.layoutTop\") !== objRect.top || _this.get(\"_objLayoutInfo.layoutRight\") !== iRight || _this.get(\"_objLayoutInfo.layoutBottom\") !== iBottom) {\n                            if (!_this.get(\"_bFrameFullscreen\")) {\n                                var objIframeEl = _this.$(\".a24-iframe\");\n                                if (!a24Core.isEmpty(objIframeEl)) {\n                                    objIframeEl.width(objRect.width);\n                                    objIframeEl.height(objRect.height);\n                                }\n                            }\n\n                            var objLayoutInfo = {\n                                layoutLeft: objRect.left,\n                                layoutRight: iRight,\n                                layoutTop: objRect.top,\n                                layoutBottom: iBottom\n                            };\n                            _this._postData({\n                                type: \"layout_info\",\n                                data: objLayoutInfo\n                            });\n                            _this.set(\"_objLayoutInfo\", objLayoutInfo);\n                        }\n                    });\n                });\n            };\n\n            this.set(\"_funcPostLayoutData\", funcPostLayoutData);\n            this.get(\"_objDomService\").on(\"resize\", this.get(\"_funcPostLayoutData\"));\n\n            this._setFullUrl();\n        },\n\n        _sendReactQueryParams: function _sendReactQueryParams() {\n            if (!a24Core.isEmpty(this.get(\"objQueryParams.react_query.sValue\"))) {\n                try {\n                    var objReactQuery = JSON.parse(this.get(\"objQueryParams.react_query.sValue\"));\n                    this._postData({\n                        type: \"ember_update_query_params\",\n                        data: objReactQuery\n                    });\n                } catch (e) {\n                    // do nothing\n                }\n            }\n        },\n\n        a24WillDestroy: function a24WillDestroy() {\n            // Commented out since the fab does not show\n            // $(\".main-container\").removeClass(\"tab-react-iframe\");\n        },\n\n        _setFullUrl: function _setFullUrl() {\n            if (a24Core.isEmpty(this.get(\"sIFrameUrl\"))) {\n                this.set(\"_sIFrameFullUrl\", null);\n                return;\n            }\n\n            var sIframeUrl = this.get(\"sIFrameUrl\");\n            if (!a24Core.isEmpty(this.get(\"sExtraParams\"))) {\n                sIframeUrl = \"\" + sIframeUrl + this.get(\"sExtraParams\");\n            }\n            if (!a24Core.isEmpty(this.get(\"sExtraQueryParams\"))) {\n                sIframeUrl = sIframeUrl + \"?\" + this.get(\"sExtraQueryParams\");\n            }\n\n            var sPre = \"?\";\n            if (sIframeUrl.indexOf(\"?\") !== -1) {\n                sPre = \"&\";\n            }\n            if (a24Core.isEmpty(this.get(\"sIFrameLoader\"))) {\n                // This will be the default\n                this.set(\"_sIFrameFullUrl\", \"\" + sIframeUrl + sPre + \"reactLoaderType=modeBackground&reactFrameId=\" + this.get(\"sIFrameId\"));\n            } else {\n                this.set(\"_sIFrameFullUrl\", \"\" + sIframeUrl + sPre + \"reactLoaderType=\" + this.get(\"sIFrameLoader\") + \"&reactFrameId=\" + this.get(\"sIFrameId\"));\n            }\n        },\n\n        willDestroyElement: function willDestroyElement() {\n            if (!a24Core.isEmpty(this.get(\"_funcUnregister\"))) {\n                this.get(\"_funcUnregister\")();\n            }\n            this.get(\"_objDomService\").off(\"resize\", this.get(\"_funcPostLayoutData\"));\n            this._super.apply(this, arguments);\n        },\n\n\n        _onRender: Ember.observer(\"_objDidRenderService._iCountRender\", function () {\n            Ember.run.once(\"afterRender\", this._funcPostLayoutData);\n        }),\n\n        _onDataChange: Ember.observer(\"objPostIframeData\", function () {\n            Ember.run.once(this, this._postContextData);\n        }),\n\n        _postContextData: function _postContextData() {\n            if (!a24Core.isEmpty(this.get(\"objPostIframeData\"))) {\n                this._postData(this.get(\"objPostIframeData\"));\n            }\n        },\n\n        _postData: function _postData(objData) {\n            var objDataCopy = Ember.copy(objData, true);\n            if (objDataCopy.type === \"trigger_route\") {\n                if (a24Core.isEmpty(objDataCopy.data)) {\n                    objDataCopy.data = {};\n                }\n                objDataCopy.data.authResponse = Ember.copy(this.get(\"_objUserSession.objAuthData\"), true);\n                objDataCopy.data.contextResponse = Ember.copy(this.get(\"_objUserSession.objContextDetails\"), true);\n            }\n            this.get(\"_objChatterIframeComService\").postMessage(JSON.stringify(objDataCopy), this.get(\"sIFrameUrl\"), this.$(\"iframe\")[0].contentWindow);\n        },\n\n        _notifyEventListener: function _notifyEventListener(event) {\n            if (!a24Core.isEmpty(this.$(\"iframe\"))) {\n                this._postData({\n                    type: \"notify_event_listener\",\n                    data: {\n                        event: event\n                    }\n                });\n            }\n        },\n\n        _handleMessages: function _handleMessages(objData) {\n            var _this2 = this;\n\n            if (!this.get(\"_bReadyFired\") && (objData.type === \"app_ready\" || objData.type === \"router_ready\")) {\n                this.set(\"_bReadyFired\", true);\n                Ember.run.once(this, this._funcPostLayoutData);\n                Ember.run.once(this, this._postContextData);\n            } else if (objData.type === \"app_ready\") {\n                //Because the above if might run when the `router_ready` is received it means that the _funcPostLayoutData\n                //might not be captured by react yet since they only start listening for that in the `app_ready`.\n                //So we fire it here again if we receive app_ready after _bReadyFired\n                Ember.run.once(this, this._funcPostLayoutData);\n            } else if (objData.type === \"update_query_params\") {\n                var objQueryParams = this.get(\"objQueryParams\");\n                var arrQueryParams = [\"react_query\"];\n                var objQueryParamsUpdate = Ember.Object.create({\n                    react_query: JSON.stringify(objData.data.react_query)\n                });\n                this.set(\"objQueryParams\", Ember.copy(this.get(\"_objQueryParamBuilderService\").createQueryParamObject(arrQueryParams, objQueryParamsUpdate, objQueryParams, false, true), true));\n            } else if (objData.type === \"check_parent_has_focus\") {\n                this._postData({\n                    type: objData.type + \"_response\",\n                    data: {\n                        hasFocus: window.document.hasFocus() || document.hasFocus()\n                    },\n                    requestId: objData.requestId\n                });\n            } else if (objData.type === \"add_event_listener\") {\n                if (objData.data.location === \"window\") {\n                    window.addEventListener(objData.data.event, function (event) {\n                        _this2._notifyEventListener(event);\n                    });\n                } else if (objData.data.location === \"document\") {\n                    document.addEventListener(objData.data.event, function (event) {\n                        _this2._notifyEventListener(event);\n                    });\n                }\n            } else if (objData.type === \"remove_event_listener\") {\n                if (objData.data.location === \"window\") {\n                    window.removeEventListener(objData.data.event, function (event) {\n                        _this2._notifyEventListener(event);\n                    });\n                } else if (objData.data.location === \"document\") {\n                    document.removeEventListener(objData.data.event, function (event) {\n                        _this2._notifyEventListener(event);\n                    });\n                }\n            } else if (objData.type === \"toggle_modal\") {\n                var bIsOpen = objData.data.open === true;\n                this.set(\"_bShowPopup\", bIsOpen);\n                this.$(\".react-iframe-wrapper\").css(\"z-index\", bIsOpen ? \"1051\" : \"\");\n            } else if (objData.type === \"snackbar-message\") {\n                this.get(\"_objSnackbarService\").showSnackbarMessage(objData.data.message);\n            } else if (objData.type === \"show_modal_masks\") {\n                var iMaskCount = objData.data;\n                var bOpen = iMaskCount > 0;\n                this.set(\"_bShowPopup\", bOpen);\n                this.$(\".react-iframe-wrapper\").css(\"z-index\", bOpen ? \"1051\" : \"\");\n\n                var objBackgroundModal = this.$(\".a24-modal-backdrop\");\n                var iOpacity = 1 - Math.pow(1 - 0.3, iMaskCount);\n                objBackgroundModal.fadeTo(150, iOpacity);\n            } else if (objData.type === \"set_iframe_fullscreen\") {\n                if (objData.data) {\n                    this.set(\"_bFrameFullscreen\", true);\n                    var objIframeEl = this.$(\".a24-iframe\");\n                    if (!a24Core.isEmpty(objIframeEl)) {\n                        objIframeEl.css({\n                            position: \"fixed\",\n                            \"z-index\": 1503 //to be above left menu on mobile, snackbar is still above this\n                        });\n                    }\n                } else {\n                    this.set(\"_bFrameFullscreen\", false);\n                    var _objIframeEl = this.$(\".a24-iframe\");\n                    if (!a24Core.isEmpty(_objIframeEl)) {\n                        _objIframeEl.css({\n                            position: \"\",\n                            \"z-index\": \"\"\n                        });\n                    }\n                }\n            }\n\n            // handle navigation message\n            var objUrlData = this.get(\"_objReactEmberNavigation\").handleNavigationMessage(objData);\n            if (!a24Core.isEmpty(objUrlData)) {\n                this._postData(objUrlData);\n            }\n\n            // This is for if we want to handle custom messages\n            if (!a24Core.isEmpty(this.get(\"onRecieveData\"))) {\n                this.get(\"onRecieveData\")(objData);\n            }\n        },\n\n        actions: {\n            onPopupClose: function onPopupClose() {\n                if (this.get(\"_bShowPopup\")) {\n                    this._postData({\n                        type: \"modal_overlay_clicked\"\n                    });\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/react-page-datagrid-component\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/templates/components/react-page-component\"], function (exports, _didRenderChangesMixin, _reactPageComponent) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n    var _slicedToArray = function () {\n        function sliceIterator(arr, i) {\n            var _arr = [];\n            var _n = true;\n            var _d = false;\n            var _e = undefined;\n\n            try {\n                for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n                    _arr.push(_s.value);\n\n                    if (i && _arr.length === i) break;\n                }\n            } catch (err) {\n                _d = true;\n                _e = err;\n            } finally {\n                try {\n                    if (!_n && _i[\"return\"]) _i[\"return\"]();\n                } finally {\n                    if (_d) throw _e;\n                }\n            }\n\n            return _arr;\n        }\n\n        return function (arr, i) {\n            if (Array.isArray(arr)) {\n                return arr;\n            } else if (Symbol.iterator in Object(arr)) {\n                return sliceIterator(arr, i);\n            } else {\n                throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n            }\n        };\n    }();\n\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _reactPageComponent.default,\n        classNames: [\"tab-react-iframe\", \"react-page\"],\n        classNameBindings: [\"_bShowPopup:modal-opened\"],\n\n        sIFrameId: null,\n        sIFrameUrl: null,\n        sIFrameLoader: null,\n        objPostIframeData: null,\n        sExtraQueryParams: null,\n        objQueryParams: null,\n        sRoute: null,\n\n        bUseEmberQueryParams: false,\n\n        _objDomService: Ember.inject.service(\"dom-event\"),\n        _objChatterIframeComService: Ember.inject.service(\"chatter-iframe-com-base\"),\n        _objQueryParamBuilderService: Ember.inject.service(\"query-param-object-builder\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigationWithWillDestroyService: Ember.inject.service(\"navigation\"),\n        _objUrlTrickeryService: Ember.inject.service(\"url-trickery\"),\n        // this relies on the react-ember-navigation having been created in the app\n        _objReactEmberNavigation: Ember.inject.service(\"react-ember-navigation\"),\n\n        _sAllowList: \"\",\n        _sIFrameFullUrl: null,\n        _bShowPopup: false,\n        _bReadyFired: false,\n        _funcUnregister: null,\n        _funcPostLayoutData: null,\n        _objLayoutInfo: null,\n        _bFrameFullscreen: false,\n\n        // Message queue system - ensures messages are processed sequentially\n        // Set to true on routes/components that need sequential message processing\n        bUseMessageQueue: false,\n        _arrQueuedMessages: null,\n        _bProcessingQueuedMessage: false,\n        // Messages that should skip the queue and process immediately (when queue is enabled)\n        _arrNonQueueableMessageTypes: null,\n\n        _funcQueryParamsObserverCallback: function _funcQueryParamsObserverCallback() {\n            var objThis = this;\n            // We do this purely because we need certain variables to bind back to the parent for testing\n            Ember.run.schedule(\"actions\", function () {\n                objThis._sendReactQueryParams();\n            });\n        },\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            // Commented out since the fab does not show\n            // schedule(\"afterRender\", () => {\n            //     $(\".main-container\").addClass(\"tab-react-iframe\");\n            // });\n\n            // We need to specifically get the service since it is lazy loaded and incompatible with observe only\n            this.get(\"_objDomService.iPageHeight\");\n\n            this.set(\"_sAllowList\", \"clipboard-read; clipboard-write;\");\n\n            // Initialize message queue system\n            this.set(\"_arrQueuedMessages\", []);\n            // Messages that bypass the queue and process immediately\n            // These are typically read-only messages that don't affect state\n            this.set(\"_arrNonQueueableMessageTypes\", [\"app_ready\", \"router_ready\", \"getCurrentPageInfo\", \"get_react_datagrid_query_params\", \"check_parent_has_focus\", \"add_event_listener\", \"remove_event_listener\", \"layout_info\"]);\n\n            this.addObserver(\"objQueryParams\", this, this.get(\"_funcQueryParamsObserverCallback\"));\n\n            if (!a24Core.isEmpty(this.get(\"sIFrameUrl\"))) {\n                var env = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n                if (env.environment === \"test\") {\n                    this.set(\"sIFrameId\", \"testFrameIdhere1234\");\n                } else if (a24Core.isEmpty(this.get(\"sIFrameId\"))) {\n                    this.set(\"sIFrameId\", Ember.guidFor({}));\n                }\n                this.set(\"_funcUnregister\", this.get(\"_objChatterIframeComService\").receiveMessage(function (objMessage) {\n                    var objData = {};\n                    if (!a24Core.isEmpty(objMessage.data)) {\n                        objData = JSON.parse(objMessage.data);\n                    }\n                    if (a24Core.isEmpty(objData.frameId) || objData.frameId === _this.get(\"sIFrameId\")) {\n                        // Use queue system if enabled, otherwise process immediately\n                        if (_this.get(\"bUseMessageQueue\")) {\n                            _this._enqueueMessage(objData);\n                        } else {\n                            _this._handleMessages(objData);\n                        }\n                    }\n                }, this.get(\"sIFrameUrl\")));\n            }\n\n            var funcPostLayoutData = function funcPostLayoutData() {\n                if (a24Core.isEmpty(_this) || !_this.get(\"_bReadyFired\")) {\n                    return;\n                }\n                Ember.run.next(function () {\n                    Ember.run.schedule(\"afterRender\", function () {\n                        if (a24Core.isEmpty(_this)) {\n                            return;\n                        }\n                        var objRect = _this.element.getBoundingClientRect();\n                        var iRight = _this.get(\"_objDomService.iPageWidth\") - objRect.right;\n                        var iBottom = _this.get(\"_objDomService.iPageHeight\") - objRect.bottom;\n                        if (_this.get(\"_objLayoutInfo.layoutLeft\") !== objRect.left || _this.get(\"_objLayoutInfo.layoutTop\") !== objRect.top || _this.get(\"_objLayoutInfo.layoutRight\") !== iRight || _this.get(\"_objLayoutInfo.layoutBottom\") !== iBottom) {\n                            if (!_this.get(\"_bFrameFullscreen\")) {\n                                var objIframeEl = _this.$(\".a24-iframe\");\n                                if (!a24Core.isEmpty(objIframeEl)) {\n                                    objIframeEl.width(objRect.width);\n                                    objIframeEl.height(objRect.height);\n                                }\n                            }\n\n                            var objLayoutInfo = {\n                                layoutLeft: objRect.left,\n                                layoutRight: iRight,\n                                layoutTop: objRect.top,\n                                layoutBottom: iBottom\n                            };\n                            _this._postData({\n                                type: \"layout_info\",\n                                data: objLayoutInfo\n                            });\n                            _this.set(\"_objLayoutInfo\", objLayoutInfo);\n                        }\n                    });\n                });\n            };\n\n            this.set(\"_funcPostLayoutData\", funcPostLayoutData);\n            this.get(\"_objDomService\").on(\"resize\", this.get(\"_funcPostLayoutData\"));\n\n            this._setFullUrl();\n        },\n\n        _sendReactQueryParams: function _sendReactQueryParams() {\n            var objQueryParams = this.get(\"objQueryParams\");\n            var objPostData = {};\n\n            if (!a24Core.isEmpty(objQueryParams.datagrid_params) && !a24Core.isEmpty(objQueryParams.datagrid_params.sValue)) {\n                // datagrid_params exists - send as-is (already React format)\n                objPostData = {\n                    react_datagrid_data: objQueryParams.datagrid_params.sValue,\n                    react_format: true\n                };\n            } else if (this.get(\"bUseEmberQueryParams\")) {\n                // No datagrid_params - parse individual Ember query params\n                objPostData = {\n                    react_datagrid_data: this._parseQueryParams()\n                };\n            }\n\n            this._postData({\n                type: \"ember_update_query_params\",\n                data: objPostData\n            });\n        },\n\n        a24WillDestroy: function a24WillDestroy() {\n            // Commented out since the fab does not show\n            // $(\".main-container\").removeClass(\"tab-react-iframe\");\n        },\n\n        _setFullUrl: function _setFullUrl() {\n            if (a24Core.isEmpty(this.get(\"sIFrameUrl\"))) {\n                this.set(\"_sIFrameFullUrl\", null);\n                return;\n            }\n\n            var sIframeUrl = this.get(\"sIFrameUrl\");\n            if (!a24Core.isEmpty(this.get(\"sExtraQueryParams\"))) {\n                sIframeUrl = sIframeUrl + \"?\" + this.get(\"sExtraQueryParams\");\n            }\n\n            var sPre = \"?\";\n            if (sIframeUrl.indexOf(\"?\") !== -1) {\n                sPre = \"&\";\n            }\n            if (a24Core.isEmpty(this.get(\"sIFrameLoader\"))) {\n                // This will be the default\n                this.set(\"_sIFrameFullUrl\", \"\" + sIframeUrl + sPre + \"reactLoaderType=modeBackground&reactFrameId=\" + this.get(\"sIFrameId\"));\n            } else {\n                this.set(\"_sIFrameFullUrl\", \"\" + sIframeUrl + sPre + \"reactLoaderType=\" + this.get(\"sIFrameLoader\") + \"&reactFrameId=\" + this.get(\"sIFrameId\"));\n            }\n        },\n\n        willDestroyElement: function willDestroyElement() {\n            if (!a24Core.isEmpty(this.get(\"_funcUnregister\"))) {\n                this.get(\"_funcUnregister\")();\n            }\n            this.get(\"_objDomService\").off(\"resize\", this.get(\"_funcPostLayoutData\"));\n            this._super.apply(this, arguments);\n        },\n\n\n        _onRender: Ember.observer(\"_objDidRenderService._iCountRender\", function () {\n            Ember.run.once(\"afterRender\", this._funcPostLayoutData);\n        }),\n\n        _onDataChange: Ember.observer(\"objPostIframeData\", function () {\n            Ember.run.once(this, this._postContextData);\n        }),\n\n        _postContextData: function _postContextData() {\n            if (!a24Core.isEmpty(this.get(\"objPostIframeData\"))) {\n                this._postData(this.get(\"objPostIframeData\"));\n            }\n        },\n\n        _postData: function _postData(objData) {\n            var objDataCopy = Ember.copy(objData, true);\n            if (objDataCopy.type === \"trigger_route\") {\n                if (a24Core.isEmpty(objDataCopy.data)) {\n                    objDataCopy.data = {};\n                }\n                objDataCopy.data.authResponse = Ember.copy(this.get(\"_objUserSession.objAuthData\"), true);\n                objDataCopy.data.contextResponse = Ember.copy(this.get(\"_objUserSession.objContextDetails\"), true);\n            }\n            this.get(\"_objChatterIframeComService\").postMessage(JSON.stringify(objDataCopy), this.get(\"sIFrameUrl\"), this.$(\"iframe\")[0].contentWindow);\n        },\n\n        _notifyEventListener: function _notifyEventListener(event) {\n            if (!a24Core.isEmpty(this.$(\"iframe\"))) {\n                this._postData({\n                    type: \"notify_event_listener\",\n                    data: {\n                        event: event\n                    }\n                });\n            }\n        },\n\n        _parseQueryParams: function _parseQueryParams() {\n            var objQueryParams = this.get(\"objQueryParams\");\n            if (a24Core.isEmpty(objQueryParams)) {\n                return;\n            }\n            var objParsedQueryParams = {};\n            var _iteratorNormalCompletion = true;\n            var _didIteratorError = false;\n            var _iteratorError = undefined;\n\n            try {\n                for (var _iterator = Object.entries(objQueryParams)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                    var _ref = _step.value;\n\n                    var _ref2 = _slicedToArray(_ref, 2);\n\n                    var sKey = _ref2[0];\n                    var sValue = _ref2[1];\n\n                    if (a24Core.isEmpty(sValue)) {\n                        continue;\n                    }\n                    // If filter has a default and value is empty, include it so React knows it was cleared\n                    // Otherwise skip empty values\n                    if (a24Core.isEmpty(sValue.sValue) && a24Core.isEmpty(sValue.sDefault)) {\n                        continue;\n                    }\n                    objParsedQueryParams[sKey] = sValue.sValue;\n                }\n            } catch (err) {\n                _didIteratorError = true;\n                _iteratorError = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion && _iterator.return) {\n                        _iterator.return();\n                    }\n                } finally {\n                    if (_didIteratorError) {\n                        throw _iteratorError;\n                    }\n                }\n            }\n\n            return btoa(JSON.stringify(objParsedQueryParams));\n        },\n\n        /**\n         * Gets the current page URL (without origin) for use in React communication.\n         * Handles different Ember URL formats (hash routing, emberViews prefix, test mode).\n         * @returns {string} The current URL path with query params\n         */\n        _getCurrentPageUrl: function _getCurrentPageUrl() {\n            var sCurrentUrl = window.location.href.replace(window.location.origin, \"\");\n            if (sCurrentUrl.startsWith(\"/#/\")) {\n                sCurrentUrl = sCurrentUrl.substring(\"/#/\".length - 1);\n            } else if (sCurrentUrl.startsWith(\"/emberViews#/\")) {\n                sCurrentUrl = sCurrentUrl.substring(\"/emberViews#/\".length - 1);\n            } else if (this.get(\"_objEnv\") && this.get(\"_objEnv\").environment === \"test\") {\n                sCurrentUrl = sCurrentUrl.slice(sCurrentUrl.indexOf(\"/tests/\") + 1, sCurrentUrl.length);\n            }\n            return sCurrentUrl;\n        },\n\n        /**\n         * Strips specified query params from a URL string.\n         * Used to remove view-specific params (e.g., view=classic) before sending to React.\n         * @param {string} sUrl - The URL to process\n         * @param {string[]} arrParamsToRemove - Array of query param keys to remove\n         * @returns {string} The URL with specified params removed\n         */\n        _stripQueryParams: function _stripQueryParams(sUrl, arrParamsToRemove) {\n            if (a24Core.isEmpty(arrParamsToRemove) || !sUrl.includes(\"?\")) {\n                return sUrl;\n            }\n\n            var arrParts = sUrl.split(\"?\");\n            var sPath = arrParts[0];\n            var objParams = new URLSearchParams(arrParts[1]);\n\n            arrParamsToRemove.forEach(function (sParam) {\n                objParams.delete(sParam);\n            });\n\n            var sNewQueryString = objParams.toString();\n            return sNewQueryString ? sPath + \"?\" + sNewQueryString : sPath;\n        },\n\n        /**\n         * Handles incoming messages from the React iframe\n         * @param {Object} objData - The message data\n         * @param {Function|null} funcResolve - Optional Promise resolve function for queue processing\n         */\n        _handleMessages: function _handleMessages(objData, funcResolve) {\n            var _this2 = this;\n\n            var sCurrentUrl = window.location.href.replace(window.location.origin, \"\");\n            if (!this.get(\"_bReadyFired\") && (objData.type === \"app_ready\" || objData.type === \"router_ready\")) {\n                this.set(\"_bReadyFired\", true);\n                Ember.run.once(this, this._funcPostLayoutData);\n                Ember.run.once(this, this._postContextData);\n            } else if (objData.type === \"app_ready\") {\n                //Because the above if might run when the `router_ready` is received it means that the _funcPostLayoutData\n                //might not be captured by react yet since they only start listening for that in the `app_ready`.\n                //So we fire it here again if we receive app_ready after _bReadyFired\n                Ember.run.once(this, this._funcPostLayoutData);\n            } else if (objData.type === \"getCurrentPageInfo\") {\n                // Strip view param so saved searches are view-agnostic\n                var sUrl = this._stripQueryParams(this._getCurrentPageUrl(), [\"view\"]);\n                var objPostData = {\n                    url: sUrl,\n                    route: this.get(\"sRoute\")\n                };\n\n                if (!a24Core.isEmpty(this.get(\"objQueryParams\").savedSearchKey)) {\n                    objPostData.savedSearchKey = this.get(\"objQueryParams\").savedSearchKey.sValue;\n                }\n\n                this._postData({\n                    type: objData.type + \"_response\",\n                    data: objPostData,\n                    requestId: objData.requestId\n                });\n            } else if (objData.type === \"replaceBrowserUrl\") {\n                // Preserve view param from current URL if it exists (saved searches are view-agnostic)\n                var sUrlToSet = objData.data.url;\n                if (sCurrentUrl.includes(\"view=\")) {\n                    var objCurrentParams = new URLSearchParams(sCurrentUrl.split(\"?\")[1] || \"\");\n                    var sViewParam = objCurrentParams.get(\"view\");\n                    if (!a24Core.isEmpty(sViewParam)) {\n                        var sSeparator = sUrlToSet.includes(\"?\") ? \"&\" : \"?\";\n                        sUrlToSet = sUrlToSet + sSeparator + \"view=\" + sViewParam;\n                    }\n                }\n\n                if (sCurrentUrl.startsWith(\"/#/\") || this.get(\"_objEnv\").environment === \"test\") {\n                    this.get(\"_objUrlTrickeryService\").replaceBrowserUrl(window.location.origin + \"/#\" + sUrlToSet);\n                } else if (sCurrentUrl.startsWith(\"/emberViews#/\")) {\n                    this.get(\"_objUrlTrickeryService\").replaceBrowserUrl(window.location.origin + \"/emberViews#\" + sUrlToSet);\n                }\n\n                // Notify React of the new URL and query params for saved search auto-selection\n                var _objPostData = {\n                    original_url: objData.data.url\n                };\n\n                // Extract query params from the URL\n                var sNewUrl = objData.data.url;\n                if (sNewUrl.indexOf(\"?\") !== -1) {\n                    var sQueryString = sNewUrl.split(\"?\")[1];\n                    var objUrlParams = new URLSearchParams(sQueryString);\n                    var sDatagridParams = objUrlParams.get(\"datagrid_params\");\n\n                    if (!a24Core.isEmpty(sDatagridParams)) {\n                        // URL has datagrid_params - already in React format\n                        _objPostData.react_datagrid_data = sDatagridParams;\n                        _objPostData.react_format = true;\n                    } else if (this.get(\"bUseEmberQueryParams\")) {\n                        // URL has individual Ember query params - parse them\n                        var objParsedQueryParams = {};\n                        objUrlParams.forEach(function (sValue, sKey) {\n                            if (!a24Core.isEmpty(sValue)) {\n                                objParsedQueryParams[sKey] = sValue;\n                            }\n                        });\n                        _objPostData.react_datagrid_data = btoa(JSON.stringify(objParsedQueryParams));\n                    }\n                }\n\n                this._postData({\n                    type: \"ember_update_query_params\",\n                    data: _objPostData\n                });\n            } else if (objData.type === \"get_react_datagrid_query_params\") {\n                var _objPostData2 = {\n                    // Always include original URL for saved search auto-selection\n                    original_url: this._getCurrentPageUrl()\n                };\n\n                if (!a24Core.isEmpty(this.get(\"objQueryParams\").datagrid_params.sValue)) {\n                    // datagrid_params exists - return as-is (already React format)\n                    _objPostData2.react_datagrid_data = this.get(\"objQueryParams\").datagrid_params.sValue;\n                    _objPostData2.react_format = true;\n                } else if (objData.data && objData.data.useEmberQueryParams) {\n                    // No datagrid_params - parse individual Ember query params\n                    _objPostData2.react_datagrid_data = this._parseQueryParams();\n                }\n\n                this._postData({\n                    type: objData.type + \"_response\",\n                    data: _objPostData2,\n                    requestId: objData.requestId\n                });\n            } else if (objData.type === \"update_query_params\") {\n                this._handleUpdateQueryParams(objData, funcResolve);\n                return; // Async handler - will call funcResolve when complete\n            } else if (objData.type === \"getCurrentUrl\") {\n                // Strip ember popup params and view param so URLs are view-agnostic\n                sCurrentUrl = this._getCurrentPageUrl().replace(/[&?]ember\\d{1,}=r-pop/, \"\");\n                sCurrentUrl = this._stripQueryParams(sCurrentUrl, [\"view\"]);\n\n                this._postData({\n                    type: objData.type + \"_response\",\n                    data: {\n                        url: sCurrentUrl\n                    },\n                    requestId: objData.requestId\n                });\n            } else if (objData.type === \"check_parent_has_focus\") {\n                this._postData({\n                    type: objData.type + \"_response\",\n                    data: {\n                        hasFocus: window.document.hasFocus() || document.hasFocus()\n                    },\n                    requestId: objData.requestId\n                });\n            } else if (objData.type === \"add_event_listener\") {\n                if (objData.data.location === \"window\") {\n                    window.addEventListener(objData.data.event, function (event) {\n                        _this2._notifyEventListener(event);\n                    });\n                } else if (objData.data.location === \"document\") {\n                    document.addEventListener(objData.data.event, function (event) {\n                        _this2._notifyEventListener(event);\n                    });\n                }\n            } else if (objData.type === \"remove_event_listener\") {\n                if (objData.data.location === \"window\") {\n                    window.removeEventListener(objData.data.event, function (event) {\n                        _this2._notifyEventListener(event);\n                    });\n                } else if (objData.data.location === \"document\") {\n                    document.removeEventListener(objData.data.event, function (event) {\n                        _this2._notifyEventListener(event);\n                    });\n                }\n            } else if (objData.type === \"toggle_modal\") {\n                var bIsOpen = objData.data.open === true;\n                this.set(\"_bShowPopup\", bIsOpen);\n                this.$(\".react-iframe-wrapper\").css(\"z-index\", bIsOpen ? \"1051\" : \"\");\n            } else if (objData.type === \"snackbar-message\") {\n                this.get(\"_objSnackbarService\").showSnackbarMessage(objData.data.message);\n            } else if (objData.type === \"show_modal_masks\") {\n                this._handleShowModalMasks(objData, funcResolve);\n                return; // Async handler - will call funcResolve when complete\n            } else if (objData.type === \"set_iframe_fullscreen\") {\n                if (objData.data) {\n                    this.set(\"_bFrameFullscreen\", true);\n                    var objIframeEl = this.$(\".a24-iframe\");\n                    if (!a24Core.isEmpty(objIframeEl)) {\n                        objIframeEl.css({\n                            position: \"fixed\",\n                            \"z-index\": 1503 //to be above left menu on mobile, snackbar is still above this\n                        });\n                    }\n                } else {\n                    this.set(\"_bFrameFullscreen\", false);\n                    var _objIframeEl = this.$(\".a24-iframe\");\n                    if (!a24Core.isEmpty(_objIframeEl)) {\n                        _objIframeEl.css({\n                            position: \"\",\n                            \"z-index\": \"\"\n                        });\n                    }\n                }\n            }\n\n            // handle navigation message\n            var objUrlData = this.get(\"_objReactEmberNavigation\").handleNavigationMessage(objData);\n            if (!a24Core.isEmpty(objUrlData)) {\n                this._postData(objUrlData);\n            }\n\n            // This is for if we want to handle custom messages\n            if (!a24Core.isEmpty(this.get(\"onRecieveData\"))) {\n                this.get(\"onRecieveData\")(objData);\n            }\n\n            // Resolve promise for synchronous messages (async handlers return early and resolve themselves)\n            if (funcResolve) {\n                funcResolve();\n            }\n        },\n\n        /**\n         * Enqueues a message for sequential processing or processes immediately if not queueable\n         * @param {Object} objData - The message data to process\n         */\n        _enqueueMessage: function _enqueueMessage(objData) {\n            // Check if this message type should skip the queue\n            var arrNonQueueable = this.get(\"_arrNonQueueableMessageTypes\") || [];\n            if (arrNonQueueable.indexOf(objData.type) !== -1) {\n                // Process immediately without queuing\n                this._handleMessages(objData);\n                return;\n            }\n\n            // Add to queue\n            this.get(\"_arrQueuedMessages\").push(objData);\n\n            // Start processing if not already processing\n            if (!this.get(\"_bProcessingQueuedMessage\")) {\n                this._processMessageQueue();\n            }\n        },\n\n        /**\n         * Processes messages from the queue sequentially\n         * Waits for each message to complete before processing the next\n         */\n        _processMessageQueue: function _processMessageQueue() {\n            var arrQueue = this.get(\"_arrQueuedMessages\");\n\n            // If queue is empty or already processing, exit\n            if (arrQueue.length === 0 || this.get(\"_bProcessingQueuedMessage\")) {\n                return;\n            }\n\n            // Mark as processing\n            this.set(\"_bProcessingQueuedMessage\", true);\n\n            // Get next message from queue\n            var objData = arrQueue.shift();\n            var objThis = this;\n\n            // Process message and wait for completion via Promise\n            new Promise(function (resolve) {\n                objThis._handleMessages(objData, resolve);\n            }).then(function () {\n                // Mark processing complete and process next message\n                objThis.set(\"_bProcessingQueuedMessage\", false);\n                if (arrQueue.length > 0) {\n                    objThis._processMessageQueue();\n                }\n            }).catch(function () {\n                // On error, still continue processing queue\n                objThis.set(\"_bProcessingQueuedMessage\", false);\n                if (arrQueue.length > 0) {\n                    objThis._processMessageQueue();\n                }\n            });\n        },\n\n        /**\n         * Handles update_query_params message with optional Promise completion\n         * @param {Object} objData - The message data\n         * @param {Function|null} funcResolve - Promise resolve function (null when called directly)\n         */\n        _handleUpdateQueryParams: function _handleUpdateQueryParams(objData, funcResolve) {\n            var objQueryParams = this.get(\"objQueryParams\");\n            var arrQueryParams = [\"datagrid_params\"];\n            var objQueryParamsUpdate = Ember.Object.create({\n                datagrid_params: objData.data.datagrid_params\n            });\n\n            if (objData.data && objData.data.useEmberQueryParams) {\n                // Set datagrid_params as-is and reset all other query params to their defaults\n                var objUpdateData = {\n                    datagrid_params: objData.data.datagrid_params\n                };\n                Object.keys(objQueryParams).forEach(function (key) {\n                    if (key !== \"datagrid_params\") {\n                        objUpdateData[key] = objQueryParams[key].sDefault;\n                    }\n                });\n                objQueryParamsUpdate = Ember.Object.create(objUpdateData);\n                arrQueryParams = Object.keys(objUpdateData);\n            }\n\n            // Remove observer to prevent echo loop back to React\n            this.removeObserver(\"objQueryParams\", this, this.get(\"_funcQueryParamsObserverCallback\"));\n\n            this.set(\"objQueryParams\", Ember.copy(this.get(\"_objQueryParamBuilderService\").createQueryParamObject(arrQueryParams, objQueryParamsUpdate, Ember.copy(objQueryParams, true), false, true), true));\n\n            var objThis = this;\n            // Add observer back after Ember run loop settles and resolve promise\n            Ember.run.next(function () {\n                objThis.addObserver(\"objQueryParams\", objThis, objThis.get(\"_funcQueryParamsObserverCallback\"));\n\n                // Send response to React so it knows the query params have been updated\n                objThis._postData({\n                    type: objData.type + \"_response\",\n                    data: { success: true },\n                    requestId: objData.requestId\n                });\n\n                // Resolve the promise to allow next message in queue to process\n                if (funcResolve) {\n                    funcResolve();\n                }\n            });\n        },\n\n        /**\n         * Handles show_modal_masks message with optional Promise completion\n         * @param {Object} objData - The message data\n         * @param {Function|null} funcResolve - Promise resolve function (null when called directly)\n         */\n        _handleShowModalMasks: function _handleShowModalMasks(objData, funcResolve) {\n            var iMaskCount = objData.data;\n            var bOpen = iMaskCount > 0;\n            this.set(\"_bShowPopup\", bOpen);\n            this.$(\".react-iframe-wrapper\").css(\"z-index\", bOpen ? \"1051\" : \"\");\n\n            var objBackgroundModal = this.$(\".a24-modal-backdrop\");\n            var iOpacity = 1 - Math.pow(1 - 0.3, iMaskCount);\n\n            if (funcResolve) {\n                // Wait for fade animation to complete before resolving\n                objBackgroundModal.fadeTo(150, iOpacity, function () {\n                    funcResolve();\n                });\n            } else {\n                objBackgroundModal.fadeTo(150, iOpacity);\n            }\n        },\n\n        actions: {\n            onPopupClose: function onPopupClose() {\n                if (this.get(\"_bShowPopup\")) {\n                    this._postData({\n                        type: \"modal_overlay_clicked\"\n                    });\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/react-popup\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/templates/components/react-popup\"], function (exports, _didRenderChangesMixin, _reactPopup) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objChatterIframeComService: Ember.inject.service(\"chatter-iframe-com-base\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        classNames: [\"react-popup\"],\n        classNameBindings: [\"bShow::closed\"],\n        layout: _reactPopup.default,\n        bShow: false,\n        bLoading: false,\n        objData: null,\n        sIFrameUrl: null,\n        sIFrameId: null,\n        _sAllowList: \"\",\n        // this relies on the react-ember-navigation having been created in the app\n        _objReactEmberNavigation: Ember.inject.service(\"react-ember-navigation\"),\n\n        _bReadyFired: false,\n        _sIFrameFullUrl: null,\n        _funcUnregister: null,\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.set(\"_sAllowList\", \"clipboard-read; clipboard-write;\");\n\n            if (!a24Core.isEmpty(this.get(\"sIFrameUrl\"))) {\n                var env = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n                if (env.environment === \"test\") {\n                    this.set(\"sIFrameId\", \"testFrameIdhere1234\");\n                } else if (a24Core.isEmpty(this.get(\"sIFrameId\"))) {\n                    this.set(\"sIFrameId\", Ember.guidFor({}));\n                }\n                this.set(\"_funcUnregister\", this.get(\"_objChatterIframeComService\").receiveMessage(function (objMessage) {\n                    var objData = {};\n                    if (!a24Core.isEmpty(objMessage.data)) {\n                        objData = JSON.parse(objMessage.data);\n                    }\n                    if (a24Core.isEmpty(objData.frameId) || objData.frameId === _this.get(\"sIFrameId\")) {\n                        _this._handleMessages(objData);\n                    }\n                }, this.get(\"sIFrameUrl\")));\n\n                this._setFullUrl();\n            }\n        },\n        willDestroyElement: function willDestroyElement() {\n            if (!a24Core.isEmpty(this.get(\"_funcUnregister\"))) {\n                this.get(\"_funcUnregister\")();\n            }\n            this._super.apply(this, arguments);\n        },\n\n\n        _setFullUrl: function _setFullUrl() {\n            if (a24Core.isEmpty(this.get(\"sIFrameUrl\"))) {\n                this.set(\"_sIFrameFullUrl\", null);\n                return;\n            }\n            var sPre = \"?\";\n            if (this.get(\"sIFrameUrl\").indexOf(\"?\") !== -1) {\n                sPre = \"&\";\n            }\n            this.set(\"_sIFrameFullUrl\", this.get(\"sIFrameUrl\") + sPre + \"reactFrameId=\" + this.get(\"sIFrameId\"));\n        },\n\n        _notifyEventListener: function _notifyEventListener(event) {\n            if (!a24Core.isEmpty(this.$(\"iframe\"))) {\n                this._postData({\n                    type: \"notify_event_listener\",\n                    data: {\n                        event: event\n                    }\n                });\n            }\n        },\n\n        _handleMessages: function _handleMessages(objData) {\n            var _this2 = this;\n\n            if (!this.get(\"_bReadyFired\") && (objData.type === \"app_ready\" || objData.type === \"router_ready\")) {\n                this.set(\"_bReadyFired\", true);\n                this._postData();\n            } else if (objData.type === \"check_parent_has_focus\") {\n                this._postData({\n                    type: objData.type + \"_response\",\n                    data: {\n                        hasFocus: window.document.hasFocus() || document.hasFocus()\n                    },\n                    requestId: objData.requestId\n                });\n            } else if (objData.type === \"add_event_listener\") {\n                if (objData.data.location === \"window\") {\n                    window.addEventListener(objData.data.event, function (event) {\n                        _this2._notifyEventListener(event);\n                    });\n                } else if (objData.data.location === \"document\") {\n                    document.addEventListener(objData.data.event, function (event) {\n                        _this2._notifyEventListener(event);\n                    });\n                }\n            } else if (objData.type === \"remove_event_listener\") {\n                if (objData.data.location === \"window\") {\n                    window.removeEventListener(objData.data.event, function (event) {\n                        _this2._notifyEventListener(event);\n                    });\n                } else if (objData.data.location === \"document\") {\n                    document.removeEventListener(objData.data.event, function (event) {\n                        _this2._notifyEventListener(event);\n                    });\n                }\n            } else if (objData.type === \"snackbar-message\") {\n                this.get(\"_objSnackbarService\").showSnackbarMessage(objData.data.message);\n            }\n\n            // handle navigation message\n            var objUrl = this.get(\"_objReactEmberNavigation\").handleNavigationMessage(objData);\n            if (!a24Core.isEmpty(objUrl)) {\n                this._postObjectData(objUrl);\n            }\n\n            if (!a24Core.isEmpty(this.get(\"onRecieveData\"))) {\n                this.get(\"onRecieveData\")(objData);\n            }\n        },\n\n        _onChangeData: Ember.observer(\"objData\", \"sIFrameUrl\", function () {\n            this._setFullUrl();\n            Ember.run.once(this, this._postData);\n        }),\n\n        _postData: function _postData() {\n            if (!a24Core.isEmpty(this.get(\"objData\"))) {\n                this._postObjectData(this.get(\"objData\"));\n            }\n        },\n\n        _postObjectData: function _postObjectData(objData) {\n            var objDataCopy = Ember.copy(objData, true);\n            if (objDataCopy.type === \"trigger_route\") {\n                if (a24Core.isEmpty(objDataCopy.data)) {\n                    objDataCopy.data = {};\n                }\n                objDataCopy.data.authResponse = Ember.copy(this.get(\"_objUserSession.objAuthData\"), true);\n                objDataCopy.data.contextResponse = Ember.copy(this.get(\"_objUserSession.objContextDetails\"), true);\n            }\n            this.get(\"_objChatterIframeComService\").postMessage(JSON.stringify(objDataCopy), this.get(\"sIFrameUrl\"), this.$(\"iframe\")[0].contentWindow);\n        }\n    });\n});","define(\"a24-ember-lib/components/react-widget\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/templates/components/react-widget\"], function (exports, _didRenderChangesMixin, _reactWidget) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _reactWidget.default,\n        classNames: [\"react-widget\"],\n\n        sIFrameId: null,\n        sIFrameUrl: null,\n        sIFrameLoader: null,\n        objPostIframeData: null,\n\n        _objChatterIframeComService: Ember.inject.service(\"chatter-iframe-com-base\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        // this relies on the react-ember-navigation having been created in the app\n        _objReactEmberNavigation: Ember.inject.service(\"react-ember-navigation\"),\n\n        _funcUnregister: null,\n        _sIFrameFullUrl: null,\n        _bReadyFired: false,\n        _objLayoutInfo: null,\n        _bForceLayoutPush: false,\n        _bFrameFullscreen: false,\n        _sAllowList: \"\",\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.set(\"_sAllowList\", \"clipboard-read; clipboard-write;\");\n            if (!a24Core.isEmpty(this.get(\"sIFrameUrl\"))) {\n                var env = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n                if (env.environment === \"test\") {\n                    this.set(\"sIFrameId\", \"testFrameIdhere1234\");\n                } else if (a24Core.isEmpty(this.get(\"sIFrameId\"))) {\n                    this.set(\"sIFrameId\", Ember.guidFor({}));\n                }\n                this.set(\"_funcUnregister\", this.get(\"_objChatterIframeComService\").receiveMessage(function (objMessage) {\n                    var objData = {};\n                    if (!a24Core.isEmpty(objMessage.data)) {\n                        objData = JSON.parse(objMessage.data);\n                    }\n                    if (a24Core.isEmpty(objData.frameId) || objData.frameId === _this.get(\"sIFrameId\")) {\n                        _this._handleMessages(objData);\n                    }\n                }, this.get(\"sIFrameUrl\")));\n            }\n\n            this.set(\"_objLayoutInfo\", {});\n\n            this._setFullUrl();\n        },\n\n        willDestroyElement: function willDestroyElement() {\n            if (!a24Core.isEmpty(this.get(\"_funcUnregister\"))) {\n                this.get(\"_funcUnregister\")();\n            }\n            this._super.apply(this, arguments);\n        },\n\n        _setFullUrl: function _setFullUrl() {\n            if (a24Core.isEmpty(this.get(\"sIFrameUrl\"))) {\n                this.set(\"_sIFrameFullUrl\", null);\n                return;\n            }\n            var sPre = \"?\";\n            if (this.get(\"sIFrameUrl\").indexOf(\"?\") !== -1) {\n                sPre = \"&\";\n            }\n            if (a24Core.isEmpty(this.get(\"sIFrameLoader\"))) {\n                // This will be the default\n                this.set(\"_sIFrameFullUrl\", \"\" + this.get(\"sIFrameUrl\") + sPre + \"reactLoaderType=modeNone&reactFrameId=\" + this.get(\"sIFrameId\"));\n            } else {\n                this.set(\"_sIFrameFullUrl\", \"\" + this.get(\"sIFrameUrl\") + sPre + \"reactLoaderType=\" + this.get(\"sIFrameLoader\") + \"&reactFrameId=\" + this.get(\"sIFrameId\"));\n            }\n        },\n\n        _funcPostLayoutData: function _funcPostLayoutData() {\n            if (a24Core.isEmpty(this) || !this.get(\"_bReadyFired\")) {\n                return;\n            }\n            var objRect = this.element.getBoundingClientRect();\n\n            var iRight = this.get(\"_objDomService.iPageWidth\") - objRect.right;\n            var iBottom = this.get(\"_objDomService.iPageHeight\") - objRect.bottom;\n\n            if (this.get(\"_bForceLayoutPush\") || this.get(\"_objLayoutInfo.layoutLeft\") !== objRect.left || this.get(\"_objLayoutInfo.layoutRight\") !== iRight || this.get(\"_objLayoutInfo.layoutTop\") !== objRect.top || this.get(\"_objLayoutInfo.layoutBottom\") !== iBottom || this.get(\"_objLayoutInfo.layoutHeight\") !== objRect.height || this.get(\"_objLayoutInfo.layoutWidth\") !== objRect.width) {\n                this.set(\"_bForceLayoutPush\", false);\n\n                if (!this.get(\"_bFrameFullscreen\")) {\n                    var objIframeEl = this.$(\".a24-iframe\");\n                    if (!a24Core.isEmpty(objIframeEl)) {\n                        objIframeEl.width(objRect.width);\n                        objIframeEl.height(objRect.height);\n                    }\n                }\n\n                var objLayoutInfo = {\n                    layoutLeft: objRect.left,\n                    layoutRight: iRight,\n                    layoutTop: objRect.top,\n                    layoutBottom: iBottom,\n                    layoutHeight: objRect.height,\n                    layoutWidth: objRect.width\n                };\n                this.set(\"_objLayoutInfo\", objLayoutInfo);\n                this._postData({\n                    type: \"layout_info\",\n                    data: objLayoutInfo\n                });\n            }\n        },\n\n        _onLayoutChange: Ember.observer(\"_objDidRenderService._iCountRender\", function () {\n            Ember.run.scheduleOnce(\"afterRender\", this, this._funcPostLayoutData);\n        }),\n\n        _onDataChange: Ember.observer(\"objPostIframeData\", function () {\n            Ember.run.once(this, this._postContextData);\n        }),\n\n        _postContextData: function _postContextData() {\n            if (!a24Core.isEmpty(this.get(\"objPostIframeData\"))) {\n                this._postData(this.get(\"objPostIframeData\"));\n            }\n        },\n\n        _postData: function _postData(objData) {\n            if (this.get(\"_bReadyFired\")) {\n                var objDataCopy = Ember.copy(objData, true);\n                if (objDataCopy.type === \"trigger_route\") {\n                    if (a24Core.isEmpty(objDataCopy.data)) {\n                        objDataCopy.data = {};\n                    }\n                    objDataCopy.data.authResponse = Ember.copy(this.get(\"_objUserSession.objAuthData\"), true);\n                    objDataCopy.data.contextResponse = Ember.copy(this.get(\"_objUserSession.objContextDetails\"), true);\n                }\n                this.get(\"_objChatterIframeComService\").postMessage(JSON.stringify(objDataCopy), this.get(\"sIFrameUrl\"), this.$(\"iframe\")[0].contentWindow);\n            }\n        },\n\n        _notifyEventListener: function _notifyEventListener(event) {\n            if (!a24Core.isEmpty(this.$(\"iframe\"))) {\n                this._postData({\n                    type: \"notify_event_listener\",\n                    data: {\n                        event: event\n                    }\n                });\n            }\n        },\n\n        _handleMessages: function _handleMessages(objData) {\n            var _this2 = this;\n\n            if (objData.type === \"router_ready\") {\n                this.set(\"_bReadyFired\", true);\n                this._onDataChange();\n            } else if (objData.type === \"app_ready\") {\n                this.set(\"_bForceLayoutPush\", true);\n                this._onLayoutChange();\n            } else if (objData.type === \"check_parent_has_focus\") {\n                this._postData({\n                    type: objData.type + \"_response\",\n                    data: {\n                        hasFocus: window.document.hasFocus() || document.hasFocus()\n                    },\n                    requestId: objData.requestId\n                });\n            } else if (objData.type === \"add_event_listener\") {\n                if (objData.data.location === \"window\") {\n                    window.addEventListener(objData.data.event, function (event) {\n                        _this2._notifyEventListener(event);\n                    });\n                } else if (objData.data.location === \"document\") {\n                    document.addEventListener(objData.data.event, function (event) {\n                        _this2._notifyEventListener(event);\n                    });\n                }\n            } else if (objData.type === \"remove_event_listener\") {\n                if (objData.data.location === \"window\") {\n                    window.removeEventListener(objData.data.event, function (event) {\n                        _this2._notifyEventListener(event);\n                    });\n                } else if (objData.data.location === \"document\") {\n                    document.removeEventListener(objData.data.event, function (event) {\n                        _this2._notifyEventListener(event);\n                    });\n                }\n            } else if (objData.type === \"snackbar-message\") {\n                this.get(\"_objSnackbarService\").showSnackbarMessage(objData.data.message);\n            } else if (objData.type === \"set_iframe_fullscreen\") {\n                if (objData.data) {\n                    this.set(\"_bFrameFullscreen\", true);\n                    var objIframeEl = this.$(\".a24-iframe\");\n                    if (!a24Core.isEmpty(objIframeEl)) {\n                        objIframeEl.css({\n                            position: \"fixed\",\n                            width: \"100%\",\n                            height: \"100%\",\n                            \"z-index\": 1503 //to be above left menu on mobile, snackbar is still above this\n                        });\n                    }\n                } else {\n                    this.set(\"_bFrameFullscreen\", false);\n                    var _objIframeEl = this.$(\".a24-iframe\");\n                    if (!a24Core.isEmpty(_objIframeEl)) {\n                        _objIframeEl.css({\n                            position: \"absolute\",\n                            width: this.get(\"_objLayoutInfo.layoutWidth\"),\n                            height: this.get(\"_objLayoutInfo.layoutHeight\"),\n                            \"z-index\": 0\n                        });\n                    }\n                }\n            }\n\n            // handle navigation message\n            var objUrlData = this.get(\"_objReactEmberNavigation\").handleNavigationMessage(objData);\n            if (!a24Core.isEmpty(objUrlData)) {\n                this._postData(objUrlData);\n            }\n\n            // This is for if we want to handle custom messages\n            if (!a24Core.isEmpty(this.get(\"onRecieveData\"))) {\n                this.get(\"onRecieveData\")(objData);\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/round-icon-component\", [\"exports\", \"a24-ember-lib/templates/components/round-icon-component\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _roundIconComponent, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _roundIconComponent.default,\n        // Default class names\n        classNames: [\"round-icon-component\"],\n        // Class names bound to the component\n        classNameBindings: [\"sBackgroundClass\", \"sRoundButtonSize\", \"bShowNotificationBell:show-notification\"],\n        // Background color class, See classNameBindings\n        sBackgroundClass: \"\",\n        // Icon color class\n        sIconClass: \"a24-grey-text-darken-1\",\n        // Round button size class, See classNameBindings\n        sRoundButtonSize: null,\n        // Icon size\n        sIconSizeClass: null,\n        // If the component is clickable\n        bClickable: true,\n        // If the component is disabled (this will override the clickable state if true)\n        bDisabled: false,\n        bOutlinedIcon: false,\n        // Pass on the waves to be light\n        bLightWaves: false,\n        // Properties to display\n        sLetter: null,\n        sIcon: null,\n        sIconFa: null,\n        sIconSvg: null,\n        sImageUrl: null,\n        // the tooltip text\n        sToolTipText: null,\n        // the tooltip position\n        sToolTipPosition: null,\n        sToolTipClass: null,\n        funcGetTooltipElementCallback: null,\n        bShowNotificationBell: false,\n\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            if (a24Core.isEmpty(this.get(\"sRoundButtonSize\"))) {\n                this.set(\"sRoundButtonSize\", this.get(\"_objLibConstants.ROUND_ICON_SIZE_MEDIUM\"));\n            }\n\n            if (a24Core.isEmpty(this.get(\"sIconSizeClass\"))) {\n                this.set(\"sIconSizeClass\", this.get(\"_objLibConstants.ROUND_ICON_CONTENT_SIZE_MEDIUM\"));\n            }\n\n            Ember.run.schedule(\"afterRender\", function () {\n                switch (_this.get(\"sRoundButtonSize\")) {\n                    case _this.get(\"_objLibConstants.ROUND_ICON_SIZE_SMALL\"):\n                    case _this.get(\"_objLibConstants.ROUND_ICON_SIZE_MEDIUM\"):\n                    case _this.get(\"_objLibConstants.ROUND_ICON_SIZE_LARGE\"):\n                    case _this.get(\"_objLibConstants.ROUND_ICON_SIZE_EXTRA_LARGE\"):\n                    case _this.get(\"_objLibConstants.ROUND_ICON_SIZE_JUMBO\"):\n                        break;\n                    default:\n                        _this.set(\"sRoundButtonSize\", _this.get(\"_objLibConstants.ROUND_ICON_SIZE_MEDIUM\"));\n                }\n\n                switch (_this.get(\"sIconSizeClass\")) {\n                    case _this.get(\"_objLibConstants.ROUND_ICON_CONTENT_SIZE_SMALL\"):\n                    case _this.get(\"_objLibConstants.ROUND_ICON_CONTENT_SIZE_MEDIUM\"):\n                    case _this.get(\"_objLibConstants.ROUND_ICON_CONTENT_SIZE_LARGE\"):\n                    case _this.get(\"_objLibConstants.ROUND_ICON_CONTENT_SIZE_JUMBO\"):\n                        break;\n                    default:\n                        _this.set(\"sIconSizeClass\", _this.get(\"_objLibConstants.ROUND_ICON_CONTENT_SIZE_MEDIUM\"));\n                }\n                _this.addTooltip();\n            });\n        },\n        willDestroyElement: function willDestroyElement() {\n            this._super.apply(this, arguments);\n\n            this.disposeOfTooltip();\n        },\n        // Computed, to see if the button is clickable\n        _bShowClickableState: Ember.computed(\"bClickable\", \"bDisabled\", function () {\n            return this.get(\"bClickable\") && !this.get(\"bDisabled\");\n        }),\n        _sIconSvgSafe: Ember.computed(\"sIconSvg\", function () {\n            if (a24Core.isEmpty(this.get(\"sIconSvg\"))) {\n                return null;\n            } else {\n                return new Ember.String.htmlSafe(this.get(\"sIconSvg\"));\n            }\n        }),\n        // This will act as the primary click action\n        click: function click(objEvent) {\n            if (this.get(\"_bShowClickableState\")) {\n                if (!a24Core.isEmpty(this.get(\"onRoundIconClick\"))) {\n                    this.get(\"onRoundIconClick\")(objEvent);\n                }\n            }\n        },\n        addTooltip: function addTooltip() {\n            // add a tooltip if tooltip text is set\n            var sToolTipText = this.get(\"sToolTipText\");\n            if (!a24Core.isEmpty(sToolTipText)) {\n                this.$().attr(\"data-toggle\", \"tooltip\");\n                this.$().attr(\"title\", sToolTipText);\n                var sToolTipPosition = this.get(\"sToolTipPosition\");\n                if (a24Core.isEmpty(sToolTipPosition)) {\n                    sToolTipPosition = \"bottom\";\n                }\n                var objTooltipConfig = {\n                    placement: sToolTipPosition,\n                    container: \"body\", // Check Overview point 4 on https://mdbootstrap.com/javascript/tooltips/\n                    trigger: \"hover\",\n                    delay: {\n                        \"show\": 350, \"hide\": 0\n                    }\n                };\n\n                if (!a24Core.isEmpty(this.get(\"sToolTipClass\"))) {\n                    var sToolTipClass = this.get(\"sToolTipClass\");\n                    objTooltipConfig.template = \"<div class=\\\"tooltip \" + sToolTipClass + \"\\\" role=\\\"tooltip\\\"><div class=\\\"arrow\\\"></div><div class=\\\"tooltip-inner\\\"></div></div>\";\n                }\n\n                $(this.$()).tooltip(objTooltipConfig);\n\n                if (!a24Core.isEmpty(this.get(\"funcGetTooltipElementCallback\"))) {\n                    this.get(\"funcGetTooltipElementCallback\")($(this.$()));\n                }\n            }\n        },\n        observeTooltip: Ember.observer(\"sToolTipText\", function () {\n            this.disposeOfTooltip();\n            this.addTooltip();\n        }),\n        disposeOfTooltip: function disposeOfTooltip() {\n            //Destroy the existing tooltip\n            try {\n                $(this.$()).tooltip(\"dispose\");\n            } catch (objErr) {\n                //This is temp fix till new bootstrap version fixes the tooltip error when calling dispose\n                //while transitioning\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/round-icon-header-component\", [\"exports\", \"a24-ember-lib/templates/components/round-icon-header-component\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _roundIconHeaderComponent, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _roundIconHeaderComponent.default,\n        // Header\n        sHeader: null,\n        sHeaderSizeClass: null,\n        sHeaderClass: null,\n        // Icon flag\n        bHasIcon: false,\n        // Icon details\n        sRoundButtonSize: null,\n        sLetter: null,\n        sIconSvg: null,\n        sIconName: null,\n        sIconFa: null,\n        sImageUrl: null,\n        sIconColor: null,\n        sIconClass: null,\n        sIconSizeClass: null,\n        // Actions\n        bApplyPaddingToYield: true,\n        objSpecialAction: null,\n        arrActionItems: null,\n        bHasBlock: false,\n        bOverrideDropdown: false,\n        bMobileView: false,\n        bEllipseHeader: true,\n        funcCallback: null,\n\n        _sActionsWidthClass: \"\",\n        _iVisibleActions: 3,\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        bActionsSpecified: Ember.computed(\"objSpecialAction\", \"arrActionItems\", function () {\n            return !a24Core.isEmpty(this.get(\"arrActionItems\")) || !a24Core.isEmpty(this.get(\"objSpecialAction\"));\n        }),\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            Ember.run.schedule(\"afterRender\", function () {\n\n                // Enforce round button size\n                switch (_this.get(\"sRoundButtonSize\")) {\n                    case _this.get(\"_objLibConstants.ROUND_ICON_SIZE_SMALL\"):\n                    case _this.get(\"_objLibConstants.ROUND_ICON_SIZE_MEDIUM\"):\n                    case _this.get(\"_objLibConstants.ROUND_ICON_SIZE_LARGE\"):\n                    case _this.get(\"_objLibConstants.ROUND_ICON_SIZE_EXTRA_LARGE\"):\n                        break;\n                    default:\n                        _this.set(\"sRoundButtonSize\", _this.get(\"_objLibConstants.ROUND_ICON_SIZE_MEDIUM\"));\n                }\n\n                // Enforce round icon size\n                switch (_this.get(\"sIconSizeClass\")) {\n                    case _this.get(\"_objLibConstants.ROUND_ICON_CONTENT_SIZE_SMALL\"):\n                    case _this.get(\"_objLibConstants.ROUND_ICON_CONTENT_SIZE_MEDIUM\"):\n                    case _this.get(\"_objLibConstants.ROUND_ICON_CONTENT_SIZE_LARGE\"):\n                        break;\n                    default:\n                        _this.set(\"sIconSizeClass\", _this.get(\"_objLibConstants.ROUND_ICON_CONTENT_SIZE_MEDIUM\"));\n                }\n\n                // Enforce the header size\n                switch (_this.get(\"sHeaderSizeClass\")) {\n                    case _this.get(\"_objLibConstants.ROUND_ICON_HEADER_SIZE_SMALL\"):\n                        if (a24Core.isEmpty(_this.get(\"sHeaderClass\"))) {\n                            _this.set(\"sHeaderClass\", \"heading-small-default\");\n                        }\n                        break;\n                    case _this.get(\"_objLibConstants.ROUND_ICON_HEADER_SIZE_MEDIUM\"):\n                    case _this.get(\"_objLibConstants.ROUND_ICON_HEADER_SIZE_LARGE\"):\n                        break;\n                    default:\n                        _this.set(\"sHeaderSizeClass\", _this.get(\"_objLibConstants.ROUND_ICON_HEADER_SIZE_LARGE\"));\n                }\n\n                if (a24Core.isEmpty(_this.get(\"arrActionItems\"))) {\n                    _this.set(\"arrActionItems\", []);\n                }\n                _this.setActionsMargin();\n            });\n        },\n        setActionsMargin: function setActionsMargin() {\n            this.set(\"_sActionsWidthClass\", a24.getCardActionsMarginStyle(this.get(\"arrActionItems\"), this.get(\"objSpecialAction\"), this.get(\"_iVisibleActions\")));\n        },\n        observeActions: Ember.observer(\"arrActionItems\", \"objSpecialAction\", function () {\n            Ember.run.once(this, this.setActionsMargin);\n        }),\n        actions: {\n            onCallbackClick: function onCallbackClick() {\n                if (!a24Core.isEmpty(this.get(\"funcCallback\"))) {\n                    return this.get(\"funcCallback\")();\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/saved-search-component\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/templates/components/saved-search-component\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _didRenderChangesMixin, _savedSearchComponent, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _savedSearchComponent.default,\n        classNames: [\"display-inline-block position-relative saved-search-component\"],\n\n        objSavedSearchService: null,\n        sSavedSearchRef: null,\n        sDatagridRoute: null,\n        bShowActions: null,\n        bShowSaveAction: true,\n        sSavedSearchKey: null,\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        _sReactGatewayUrl: Ember.computed.readOnly(\"_objEnv.sReactGatewayUrl\"),\n\n        _sSavedSearchRemoveId: null,\n        _sCustomTabIndex: null,\n\n        _bShowSaveAction: true,\n        _bShowAddSavedSearch: false,\n        _bShowUnsavedData: false,\n        _bPopupLoading: false,\n        _bShowDeleteConfirm: false,\n        _bPopupDeleteLoading: false,\n        _bInitDone: false,\n\n        _arrInitSavedSearch: null,\n\n        _objSelected: null,\n        _objGetSavedSearch: null,\n        _objCreateSavedSearch: null,\n        _objDeleteSavedSearch: null,\n        _objOriginalData: null,\n        _objSpecialAddPopupAction: null,\n\n        _objEmberLibString: Ember.inject.service(\"a24-strings-ember-lib\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objUrlTrickeryService: Ember.inject.service(\"url-trickery\"),\n        _objToolTipService: Ember.inject.service(\"tooltip\"),\n\n        _bShowReactFilterIframe: false,\n        _bReactFilterPopupLoading: true,\n        _objReactPopupPostData: null,\n        _sIFrameUrl: null,\n        _sSelectedSavedSearchId: null,\n        _sSelectedSavedSearchName: null,\n        _objEditData: null,\n\n        _bLoading: Ember.computed(\"_bInitDone\", function () {\n            if (this.get(\"_bInitDone\")) {\n                return false;\n            }\n            return true;\n        }),\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.set(\"_sInputId\", Ember.guidFor({}));\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", this.get(\"_sReactGatewayUrl\"));\n            }\n\n            var objValidationConfig = {};\n\n            objValidationConfig[\"objChildren.name\"] = function (objMixin) {\n                a24Validation.addRequired(objMixin, true);\n            };\n\n            this.set(\"objChildConfig\", objValidationConfig);\n\n            this.set(\"_objSpecialAddPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this.send(\"onPopupAddCancel\");\n                }\n            });\n\n            Ember.run.next(function () {\n                Ember.run.schedule(\"afterRender\", function () {\n                    if (a24Core.isEmpty(_this.get(\"bShowActions\"))) {\n                        _this.set(\"bShowActions\", true);\n                    }\n                });\n            });\n\n            this._getSavedSearch(null);\n        },\n\n        setInputBlur: function setInputBlur() {\n            var _this2 = this;\n\n            Ember.run.scheduleOnce(\"afterRender\", this, function () {\n                var objTextInput = $(\"#\" + _this2.get(\"_sInputId\"));\n\n                _this2.resetFloatingLabel(objTextInput);\n\n                objTextInput.on(\"blur\", function () {\n                    _this2.resetFloatingLabel(objTextInput);\n                });\n            });\n        },\n\n        resetFloatingLabel: function resetFloatingLabel(objTextInput) {\n            //If the input field has no value then the label should NOT have the active class and\n            //float at placeholder position\n            if (a24Core.isEmpty(objTextInput.val())) {\n                this.$(\"label\").removeClass(\"active\");\n            }\n        },\n\n        _filterSavedSearch: function _filterSavedSearch(sSearchFilter, arrData) {\n            var arrFilteredData = [];\n            for (var i = 0; i < arrData.length; i++) {\n                if (arrData[i].name.toLowerCase().includes(sSearchFilter.toLowerCase())) {\n                    arrFilteredData.push(arrData[i]);\n                }\n            }\n            return arrFilteredData;\n        },\n        _removeSavedSearchData: function _removeSavedSearchData(objRemovedSavedSearchData) {\n            var arrSavedSearch = this.get(\"_arrInitSavedSearch\");\n            for (var i = 0; i < arrSavedSearch.length; i++) {\n                if (arrSavedSearch[i]._id === objRemovedSavedSearchData._id) {\n                    this.get(\"_arrInitSavedSearch\").removeAt(i);\n                    break;\n                }\n            }\n\n            this.set(\"_arrInitSavedSearch\", arrSavedSearch);\n        },\n        _addSavedSearchData: function _addSavedSearchData(objAddedSavedSearchData) {\n            this.get(\"_arrInitSavedSearch\").pushObject(objAddedSavedSearchData);\n            this.set(\"_arrInitSavedSearch\", this.get(\"_arrInitSavedSearch\").sortBy(\"name\"));\n        },\n\n        /**\n         * Strips specified query params from a URL string.\n         * Used to remove view-specific params (e.g., view=classic) before comparisons.\n         * @param {string} sUrl - The URL to process\n         * @param {string[]} arrParamsToRemove - Array of query param keys to remove\n         * @returns {string} The URL with specified params removed\n         */\n        _stripQueryParams: function _stripQueryParams(sUrl, arrParamsToRemove) {\n            if (a24Core.isEmpty(arrParamsToRemove) || !sUrl.includes(\"?\")) {\n                return sUrl;\n            }\n\n            var arrParts = sUrl.split(\"?\");\n            var sPath = arrParts[0];\n            var objParams = new URLSearchParams(arrParts[1]);\n\n            arrParamsToRemove.forEach(function (sParam) {\n                objParams.delete(sParam);\n            });\n\n            var sNewQueryString = objParams.toString();\n            return sNewQueryString ? sPath + \"?\" + sNewQueryString : sPath;\n        },\n\n        /**\n         * Gets the current page URL (without origin) for use in comparisons.\n         * Handles different Ember URL formats (hash routing, emberViews prefix, test mode).\n         * @returns {string} The current URL path with query params\n         */\n        _getCurrentPageUrl: function _getCurrentPageUrl() {\n            var sCurrentUrl = window.location.href.replace(window.location.origin, \"\");\n            if (sCurrentUrl.startsWith(\"/#/\")) {\n                sCurrentUrl = sCurrentUrl.substring(\"/#/\".length - 1);\n            } else if (sCurrentUrl.startsWith(\"/emberViews#/\")) {\n                sCurrentUrl = sCurrentUrl.substring(\"/emberViews#/\".length - 1);\n            } else if (this.get(\"_objEnv\").environment === \"test\") {\n                sCurrentUrl = sCurrentUrl.slice(sCurrentUrl.indexOf(\"/tests/\") + 1, sCurrentUrl.length);\n            }\n            return sCurrentUrl;\n        },\n\n        /**\n         * Preserves the view param from current URL if it exists.\n         * @param {string} sUrl - The URL to potentially add view param to\n         * @returns {string} The URL with view param added if it existed in current URL\n         */\n        _preserveViewParam: function _preserveViewParam(sUrl) {\n            var sCurrentUrl = window.location.href;\n            if (!sCurrentUrl.includes(\"view=\")) {\n                return sUrl;\n            }\n\n            var objCurrentParams = new URLSearchParams(sCurrentUrl.split(\"?\")[1] || \"\");\n            var sViewParam = objCurrentParams.get(\"view\");\n            if (a24Core.isEmpty(sViewParam)) {\n                return sUrl;\n            }\n\n            var sSeparator = sUrl.includes(\"?\") ? \"&\" : \"?\";\n            return sUrl + sSeparator + \"view=\" + sViewParam;\n        },\n\n        _getSavedSearch: function _getSavedSearch(funcRefreshCallback) {\n            var _this3 = this;\n\n            var objQueryParams = {\n                type: {\n                    mValue: \"shared\",\n                    bEncode: true\n                },\n                reference: {\n                    mValue: this.get(\"sSavedSearchRef\"),\n                    bEncode: true\n                },\n                deleted: {\n                    mValue: false,\n                    bEncode: true\n                },\n                sortBy: {\n                    mValue: \"name\"\n                },\n                items_per_page: {\n                    mValue: 1000\n                }\n            };\n\n            this.get(\"objSavedSearchService\").getList(this, \"_objGetSavedSearch\", objQueryParams, function (arrData) {\n                if (a24Core.isEmpty(arrData)) {\n                    arrData = [];\n                }\n\n                _this3.set(\"_arrInitSavedSearch\", arrData);\n                _this3.set(\"_bInitDone\", true);\n                _this3.setInputBlur();\n                _this3._autoSelectSavedSearch();\n                if (!a24Core.isEmpty(funcRefreshCallback)) {\n                    funcRefreshCallback();\n                }\n\n                if (a24Core.isEmpty(_this3.get(\"bShowActions\"))) {\n                    _this3.set(\"bShowActions\", true);\n                }\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                // Call the callback with empty\n                _this3.set(\"_arrInitSavedSearch\", []);\n            }));\n        },\n\n        _autoSelectSavedSearch: function _autoSelectSavedSearch(sSavedSearchKey) {\n            var _this4 = this;\n\n            var arrSavedSearch = this.get(\"_arrInitSavedSearch\");\n            if (a24Core.isEmpty(sSavedSearchKey)) {\n                sSavedSearchKey = this.get(\"sSavedSearchKey\");\n            }\n            var sCurrentUrl = this._getCurrentPageUrl();\n            // Strip view param for comparison so view=classic doesn't prevent matching\n            var sCurrentUrlForComparison = this._stripQueryParams(sCurrentUrl, [\"view\"]);\n\n            for (var i = 0; i < arrSavedSearch.length; i++) {\n                var sUrl = null;\n                // Strip view param from saved search URL for comparison\n                var sSavedSearchUrlForComparison = this._stripQueryParams(arrSavedSearch[i].url, [\"view\"]);\n                if (!a24Core.isEmpty(sSavedSearchKey) && arrSavedSearch[i]._id === sSavedSearchKey || sCurrentUrlForComparison === sSavedSearchUrlForComparison) {\n                    sUrl = arrSavedSearch[i].url;\n                }\n\n                if (!a24Core.isEmpty(sUrl)) {\n                    this.set(\"_sSelectedSavedSearchId\", arrSavedSearch[i]._id);\n                    this.set(\"_sSelectedSavedSearchName\", arrSavedSearch[i].name);\n                    Ember.run.next(function () {\n                        var objTextInput = $(\"#\" + _this4.get(\"_sInputId\"));\n                        objTextInput.val(arrSavedSearch[i].name).trigger(\"change\");\n\n                        _this4.resetFloatingLabel(objTextInput);\n                        _this4.get(\"changeShowSaveAction\")(false);\n                    });\n                    // Preserve view param from current URL if it exists\n                    var sUrlToSet = this._preserveViewParam(sUrl);\n\n                    sCurrentUrl = window.location.href.replace(window.location.origin, \"\");\n                    if (sCurrentUrl.startsWith(\"/#/\") || this.get(\"_objEnv\").environment === \"test\") {\n                        this.get(\"_objUrlTrickeryService\").replaceBrowserUrl(window.location.origin + \"/#\" + sUrlToSet);\n                    } else if (sCurrentUrl.startsWith(\"/emberViews#/\")) {\n                        this.get(\"_objUrlTrickeryService\").replaceBrowserUrl(window.location.origin + \"/emberViews#\" + sUrlToSet);\n                    }\n                    return;\n                }\n            }\n            Ember.run.next(function () {\n                var objTextInput = $(\"#\" + _this4.get(\"_sInputId\"));\n                objTextInput.val(\"\").trigger(\"change\");\n                _this4.set(\"_sSelectedSavedSearchId\", null);\n                _this4.set(\"_sSelectedSavedSearchName\", null);\n\n                _this4.resetFloatingLabel(objTextInput);\n                _this4.get(\"changeShowSaveAction\")(true);\n            });\n        },\n\n        observeSavedSearchKey: Ember.observer(\"sSavedSearchKey\", function () {\n            var sSavedSearchKey = this.get(\"sSavedSearchKey\");\n            if (!a24Core.isEmpty(sSavedSearchKey)) {\n                this._autoSelectSavedSearch(sSavedSearchKey);\n            }\n        }),\n\n        observeShowAction: Ember.observer(\"bShowSaveAction\", function () {\n            var _this5 = this;\n\n            var bShowSaveAction = this.get(\"bShowSaveAction\");\n            if (bShowSaveAction) {\n                Ember.run.next(function () {\n                    var objTextInput = $(\"#\" + _this5.get(\"_sInputId\"));\n                    objTextInput.val(\"\").trigger(\"change\");\n                    _this5.set(\"_sSelectedSavedSearchId\", null);\n                    _this5.set(\"_sSelectedSavedSearchName\", null);\n\n                    _this5.resetFloatingLabel(objTextInput);\n                    _this5.get(\"changeShowSaveAction\")(true);\n                });\n            }\n            this.set(\"_bShowSaveAction\", bShowSaveAction);\n        }),\n\n        observeSavedSearchName: Ember.observer(\"_sSelectedSavedSearchName\", function () {\n            var _this6 = this;\n\n            var sSavedSearchName = this.get(\"_sSelectedSavedSearchName\");\n            Ember.run.next(function () {\n                var objElement = $(\".saved-search-input\");\n                _this6.get(\"_objToolTipService\").disposeOfTooltip(objElement);\n                if (!a24Core.isEmpty(sSavedSearchName)) {\n                    _this6.get(\"_objToolTipService\").addTooltip(objElement, sSavedSearchName, \"bottom\", \"a24-tooltip\", null);\n                }\n            });\n        }),\n\n        actions: {\n            changeShowSaveAction: function changeShowSaveAction(bValue) {\n                if (!a24Core.isEmpty(this.get(\"changeShowSaveAction\"))) {\n                    this.get(\"changeShowSaveAction\")(bValue);\n                }\n            },\n            showAlertAction: function showAlertAction(sText, sSeverity) {\n                if (!a24Core.isEmpty(this.get(\"showAlertAction\"))) {\n                    this.get(\"showAlertAction\")(sText, sSeverity);\n                }\n            },\n            saveActionClicked: function saveActionClicked() {\n                this.set(\"_bShowReactFilterIframe\", true);\n                var objData = {\n                    reference: this.get(\"sSavedSearchRef\")\n                };\n                if (!a24Core.isEmpty(this.get(\"_objEditData\"))) {\n                    objData.name = this.get(\"_objEditData.name\");\n                    objData.description = this.get(\"_objEditData.description\");\n                    objData.savedSearchId = this.get(\"_objEditData.savedSearchId\");\n                }\n                this.set(\"_objReactPopupPostData\", {\n                    type: \"trigger_route\",\n                    data: {\n                        route: \"datagrid/savedSearch/addEditPopup\",\n                        data: objData\n                    }\n                });\n            },\n            openViewPopupAction: function openViewPopupAction() {\n                this.set(\"_bShowReactFilterIframe\", true);\n                this.set(\"_objReactPopupPostData\", {\n                    type: \"trigger_route\",\n                    data: {\n                        route: \"datagrid/savedSearch/viewPopup\",\n                        data: {\n                            reference: this.get(\"sSavedSearchRef\"),\n                            emberRoute: this.get(\"sDatagridRoute\"),\n                            savedSearchData: this.get(\"_arrInitSavedSearch\"),\n                            selectedId: this.get(\"_sSelectedSavedSearchId\")\n                        }\n                    }\n                });\n            },\n            onRecieveReactFilterData: function onRecieveReactFilterData(objData) {\n                var _this7 = this;\n\n                if (!a24Core.isEmpty(objData)) {\n                    var sCurrentUrl = window.location.href.replace(window.location.origin, \"\");\n                    if (objData.type === \"app_ready\") {\n                        this.set(\"_bReactFilterPopupLoading\", false);\n                    } else if (objData.type === \"close\") {\n                        this.set(\"_bShowReactFilterIframe\", false);\n                    } else if (objData.type === \"getCurrentUrl\") {\n                        // Strip ember popup params and view param so saved searches are view-agnostic\n                        var sUrlToReturn = this._getCurrentPageUrl().replace(/[&?]ember\\d{1,}=r-pop/, \"\");\n                        sUrlToReturn = this._stripQueryParams(sUrlToReturn, [\"view\"]);\n\n                        this.set(\"_objReactPopupPostData\", {\n                            type: objData.type + \"_response\",\n                            data: {\n                                url: sUrlToReturn\n                            },\n                            requestId: objData.requestId\n                        });\n                    } else if (objData.type === \"refreshSavedSearch\") {\n                        this.set(\"_bInitDone\", false);\n                        // reseting the edit as this will trigger after a save\n                        this.set(\"_objEditData\", undefined);\n\n                        var funcRefreshCallback = function funcRefreshCallback() {\n                            _this7.set(\"_objReactPopupPostData\", {\n                                type: objData.type + \"_response\",\n                                data: {\n                                    savedSearchData: _this7.get(\"_arrInitSavedSearch\")\n                                },\n                                requestId: objData.requestId\n                            });\n                        };\n\n                        this._getSavedSearch(funcRefreshCallback);\n                    } else if (objData.type === \"applySavedSearchUrl\") {\n                        Ember.run.next(function () {\n                            var objTextInput = $(\"#\" + _this7.get(\"_sInputId\"));\n                            objTextInput.val(objData.data.name).trigger(\"change\");\n\n                            _this7.resetFloatingLabel(objTextInput);\n                            _this7.get(\"changeShowSaveAction\")(false);\n                        });\n\n                        var _objSavedSearch = this.get(\"_arrInitSavedSearch\").find(function (objSavedSearch) {\n                            return objSavedSearch.name === objData.data.name;\n                        });\n\n                        this.set(\"_sSelectedSavedSearchId\", _objSavedSearch._id);\n                        this.set(\"_sSelectedSavedSearchName\", _objSavedSearch.name);\n\n                        if (objData.data.isEdit) {\n                            this.get(\"showAlertAction\")(\"You can alter the filters and then click the save button next to the saved search input. This will allow you to save the currently applied filters.\", \"warning\");\n\n                            this.set(\"_objEditData\", {\n                                name: _objSavedSearch.name,\n                                description: _objSavedSearch.description,\n                                savedSearchId: _objSavedSearch._id\n                            });\n                        }\n\n                        // Preserve view param from current URL if it exists\n                        var sUrlToSet = this._preserveViewParam(objData.data.url);\n\n                        sCurrentUrl = window.location.href.replace(window.location.origin, \"\");\n                        if (sCurrentUrl.startsWith(\"/#/\") || this.get(\"_objEnv\").environment === \"test\") {\n                            this.get(\"_objUrlTrickeryService\").replaceBrowserUrl(window.location.origin + \"/#\" + sUrlToSet);\n                        } else if (sCurrentUrl.startsWith(\"/emberViews#/\")) {\n                            this.get(\"_objUrlTrickeryService\").replaceBrowserUrl(window.location.origin + \"/emberViews#\" + sUrlToSet);\n                        }\n                        this.set(\"_bShowReactFilterIframe\", false);\n                    }\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/shadow-scroller\", [\"exports\", \"a24-ember-lib/templates/components/shadow-scroller\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _shadowScroller, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _shadowScroller.default,\n        classNames: [\"position-relative\"],\n        iMaxHeight: -1,\n        //Only needed when component is used inside a popup, this is because the parent wont have a height\n        //until the popup is visible\n        bPopupOpen: false,\n        _bShowShadow: false,\n        _objDomEventService: Ember.inject.service(\"dom-event\"), // Dom event service\n        _objInputScrollTo: null,\n        _iOffset: null,\n        _bInternalResizeProcess: false,\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n            this.get(\"_objDomEventService\");\n\n            Ember.run.scheduleOnce(\"afterRender\", function () {\n                //Set the correct state\n                if (_this.get(\"iMaxHeight\") === -1) {\n                    _this.setResponsiveMaxHeight();\n                } else {\n                    _this.setMaxHeight();\n                }\n\n                var objThis = _this;\n                _this.$(\".shadow-scroller\").scroll(function () {\n                    Ember.run(function () {\n                        objThis.set(\"_bShowShadow\", objThis.$(\".shadow-scroller\").scrollTop() !== 0);\n                    });\n                });\n            });\n        },\n        setMaxHeight: Ember.observer(\"iMaxHeight\", function () {\n            this.$(\".shadow-scroller\").css({ maxHeight: this.get(\"iMaxHeight\") + \"px\" });\n        }),\n        setResponsiveMaxHeight: function setResponsiveMaxHeight() {\n            if (this.get(\"iMaxHeight\") === -1) {\n                //Reset max-height before calcs\n                this.$(\".shadow-scroller\").css({ maxHeight: this.$(\".shadow-scroller\").prop(\"scrollHeight\") + \"px\" });\n\n                var objScrollerParent = this.$().parent();\n                var iMaxHeight = Math.floor(objScrollerParent.height()) - (objScrollerParent.prop(\"scrollHeight\") - this.$(\".shadow-scroller\").prop(\"scrollHeight\"));\n\n                if (iMaxHeight < 0) {\n                    iMaxHeight = 0;\n                }\n                this.$(\".shadow-scroller\").css({ maxHeight: iMaxHeight + \"px\" });\n            }\n        },\n        onWindowResize: Ember.observer(\"_objDomEventService.iPageWidth\", \"_objDomEventService.iPageHeight\", \"bPopupOpen\", function () {\n            Ember.run.scheduleOnce(\"afterRender\", this, this.setResponsiveMaxHeight);\n        }),\n        updateMaxHeightPreserveScrollPosition: function updateMaxHeightPreserveScrollPosition() {\n            if (!this.get(\"_bInternalResizeProcess\")) {\n                this.set(\"_bInternalResizeProcess\", true);\n                // get scroll position\n                var iScrollTop = this.$(\".shadow-scroller\").scrollTop();\n\n                this.setResponsiveMaxHeight();\n\n                // restore scroll position\n                this.$(\".shadow-scroller\").scrollTop(iScrollTop);\n\n                this.set(\"_bInternalResizeProcess\", false);\n            }\n        },\n        onRender: Ember.observer(\"_objDidRenderService._iCountRender\", function () {\n            Ember.run.scheduleOnce(\"afterRender\", this, this.updateMaxHeightPreserveScrollPosition);\n        }),\n        // Scroll to object and offset then reset the scroll element and offset to null\n        scrollToObject: function scrollToObject() {\n            if (!a24Core.isEmpty(this.get(\"_objInputScrollTo\"))) {\n                this.$(\".shadow-scroller\").animate({\n                    scrollTop: this.get(\"_objInputScrollTo\").$().offset().top - this.$(\".shadow-scroller\").offset().top + this.$(\".shadow-scroller\").scrollTop() - this.get(\"_iOffset\")\n                }, 100);\n            }\n            this.set(\"_objInputScrollTo\", null);\n            this.set(\"_iOffset\", null);\n        },\n        actions: {\n            onScrollTo: function onScrollTo(objEmberItem, iOffset) {\n                if (a24Core.isEmpty(this.get(\"_objInputScrollTo\"))) {\n                    this.set(\"_objInputScrollTo\", objEmberItem);\n                    this.set(\"_iOffset\", iOffset);\n                }\n\n                Ember.run.once(this, this.scrollToObject);\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/shareable-link\", [\"exports\", \"a24-ember-lib/templates/components/shareable-link\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _shareableLink, _inputFormElement, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _shareableLink.default,\n        classNames: [\"display-inline-block position-relative\"],\n\n        bShowOnFailure: false,\n        _sShareableLinkId: \"shareableLinkDropdown\",\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _sCurrentUrl: \"\",\n        sToolTipPosition: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"_sShareableLinkId\", Ember.guidFor({}));\n\n            // set the tooltip position if not set\n            if (a24Core.isEmpty(this.get(\"sToolTipPosition\"))) {\n                this.set(\"sToolTipPosition\", \"bottom\");\n            }\n        },\n        copyToClipboard: function copyToClipboard(sValue) {\n            // Creates a input element off screen\n            var objTempElement = $(\"<input>\");\n            objTempElement.addClass(\"display-off-screen\");\n            // Add the value to the temp element.\n            $(\"body\").append(objTempElement);\n\n            // Select temp element.\n            objTempElement.val(sValue).select();\n\n            var bSuccess = a24Core.copySelected();\n\n            // Remove the input once copy is done\n            objTempElement.remove();\n\n            return bSuccess;\n        },\n        actions: {\n            closeShareDropdown: function closeShareDropdown() {\n                this.set(\"bShowOnFailure\", false);\n            },\n            shareButtonClicked: function shareButtonClicked() {\n                var _this = this;\n\n                var sCurrentUrl = a24Core.getCurrentUrl();\n                this.set(\"_sCurrentUrl\", sCurrentUrl);\n\n                //Run in next to allow the input to update with the new value in the DOM\n                Ember.run.next(function () {\n                    var bSuccessful = false;\n\n                    try {\n                        bSuccessful = _this.copyToClipboard(sCurrentUrl);\n                    } catch (objError) {\n                        bSuccessful = false;\n                    }\n\n                    if (bSuccessful) {\n                        _this.set(\"bShowOnFailure\", false);\n                        _this.get(\"_objSnackbarService\").showSnackbarMessage(_this.get(\"_objStringsService\").getString(\"copySuccess\"));\n                    } else {\n                        _this.set(\"bShowOnFailure\", true);\n                        _this.get(\"_objSnackbarService\").showSnackbarMessage(_this.get(\"_objStringsService\").getString(\"copyFailed\"));\n\n                        //Re-focus and select the input since it will lose focus when the dropdown becomes visible\n                        Ember.run.next(function () {\n                            var sShareUrlText = _this.get(\"objChildren.sShareLink\").$(\"input\");\n                            sShareUrlText.select();\n                        });\n                    }\n                });\n            }\n        }\n\n    });\n});","define(\"a24-ember-lib/components/size-limit-component\", [\"exports\", \"a24-ember-lib/templates/components/size-limit-component\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _sizeLimitComponent, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _sizeLimitComponent.default,\n        iMaxWidth: a24Constants.SIZE_LIMIT_COMPONENT_MAX_WIDTH, // This was decided by the designers\n        sStyleWidth: Ember.computed(\"iMaxWidth\", function () {\n            return Ember.String.htmlSafe(\"max-width: \" + this.get(\"iMaxWidth\") + \"px\");\n        })\n    });\n});","define(\"a24-ember-lib/components/snackbar-component\", [\"exports\", \"a24-ember-lib/templates/components/snackbar-component\", \"a24-ember-window/mixins/a24responsive\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _snackbarComponent, _a24responsive, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_a24responsive.default, _didRenderChangesMixin.default, {\n        layout: _snackbarComponent.default,\n        classNames: [\"a24-snackbar\"],\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objDomService: Ember.inject.service(\"dom-event\"),\n        _objWindowConstants: Ember.inject.service(\"a24-constants-window\"),\n        _objSnackbarTimer: null,\n        _iTimerStartTime: 0,\n        _iSlideTime: a24Constants.SNACKBAR_SLIDE_TIME,\n        _iShowTime: 8000,\n        _iShowTimeQuick: 1000,\n        _sMessage: \"\",\n        _funcActionCallback: null,\n        _sAction: \"\",\n        _sActionTextClass: \"\",\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n            this.get(\"_objSnackbarService\");\n            this.get(\"_objDomService\");\n            Ember.run.scheduleOnce(\"afterRender\", this, function () {\n                var objSnackbar = $(_this.$(\".a24-snackbar-inner\"));\n                objSnackbar.hammer().on(\"swipeleft\", function () {\n                    _this.dismissMessage();\n                });\n                objSnackbar.hammer().on(\"swiperight\", function () {\n                    _this.dismissMessage();\n                });\n            });\n        },\n        willDestroyElement: function willDestroyElement() {\n            var objSnackbar = $(this.$(\".a24-snackbar-inner\"));\n            objSnackbar.hammer().off(\"swipeleft\");\n            objSnackbar.hammer().off(\"swiperight\");\n        },\n        showSnackbarMessage: Ember.observer(\"_objSnackbarService._bHasNewMessage\", function () {\n            var _this2 = this;\n\n            if (this.get(\"_objSnackbarService._bHasNewMessage\")) {\n                this.set(\"_objSnackbarService._bHasNewMessage\", false);\n\n                if (this.get(\"_objSnackbarService.sSnackbarState\") === \"hideEnd\") {\n                    //If no messages are showing then just show the message\n                    this.handleCleanMessage();\n                } else if (this.get(\"_objSnackbarService.sSnackbarState\") === \"showEnd\") {\n                    //If one is already showing then cut down the time it should show\n                    Ember.run.cancel(this.get(\"_objSnackbarTimer\"));\n                    this.set(\"_objSnackbarTimer\", null);\n\n                    var iTimeElapsed = momentHelper.getTimezoneInMilli() - this.get(\"_iTimerStartTime\");\n                    if (iTimeElapsed > this.get(\"_iShowTimeQuick\")) {\n                        //Has already shown past the quick show time so just hide immediately\n                        this.funcHideStart();\n                    } else {\n                        //Has not shown past the quick show time yet, so update time with remainder of quick show time\n                        this.set(\"_objSnackbarTimer\", Ember.run.later(function () {\n                            _this2.funcHideStart();\n                        }, this.get(\"_iShowTimeQuick\") - iTimeElapsed));\n                    }\n                }\n            }\n        }),\n        handleCleanMessage: function handleCleanMessage() {\n            var _this3 = this;\n\n            var objMessage = this.get(\"_objSnackbarService._arrSnackbarMessages\").objectAt(0);\n            this.get(\"_objSnackbarService._arrSnackbarMessages\").removeAt(0);\n\n            this.set(\"_sMessage\", objMessage.sMessage);\n            this.set(\"_funcActionCallback\", objMessage.funcActionCallback);\n            this.set(\"_sAction\", objMessage.sAction);\n            this.set(\"_sActionTextClass\", objMessage.sActionTextClass);\n\n            //Need to run this in next to get the correct height since the message might or might not wrap depending on\n            //device and max width of snackbar. Also need to have a pre showStart status so that when 2 message get set\n            //in the same process that the que and not override one another.\n            this.set(\"_objSnackbarService.sSnackbarState\", \"beforeShowStart\");\n            Ember.run.next(function () {\n                Ember.run.scheduleOnce(\"afterRender\", _this3, _this3.funcShowStart);\n            });\n        },\n        funcShowStart: function funcShowStart() {\n            this.set(\"_objSnackbarService.sSnackbarState\", \"showStart\");\n\n            this.setSnackbarStyle();\n            this.animateIn();\n        },\n        funcShowEnd: function funcShowEnd() {\n            var _this4 = this;\n\n            this.set(\"_objSnackbarService.sSnackbarState\", \"showEnd\");\n\n            var iShowTime = this.get(\"_iShowTime\");\n            if (this.get(\"_objSnackbarService._arrSnackbarMessages\").length > 0) {\n                iShowTime = this.get(\"_iShowTimeQuick\");\n            }\n\n            this.set(\"_objSnackbarTimer\", Ember.run.later(function () {\n                _this4.funcHideStart();\n            }, iShowTime));\n\n            this.set(\"_iTimerStartTime\", momentHelper.getTimezoneInMilli());\n        },\n        funcHideStart: function funcHideStart() {\n            var _this5 = this;\n\n            this.set(\"_objSnackbarService.sSnackbarState\", \"hideStart\");\n            this.set(\"_objSnackbarTimer\", null);\n            this.set(\"_iTimerStartTime\", 0);\n\n            this.$().animate({\n                height: 0\n            }, this.get(\"_iSlideTime\"), function () {\n                Ember.run(function () {\n                    _this5.funcHideEnd();\n                });\n            });\n        },\n        funcHideEnd: function funcHideEnd() {\n            this.set(\"_objSnackbarService.sSnackbarState\", \"hideEnd\");\n\n            //Check if there are more messages\n            if (this.get(\"_objSnackbarService._arrSnackbarMessages\").length > 0) {\n                this.handleCleanMessage();\n            }\n        },\n        animateIn: function animateIn() {\n            var _this6 = this;\n\n            //Stop the current animation if there is one and create new one with the correct height\n            this.$().stop();\n            this.$().animate({\n                height: this.get(\"_objSnackbarService.iSnackbarHeight\")\n            }, this.get(\"_iSlideTime\"), function () {\n                Ember.run(function () {\n                    _this6.funcShowEnd();\n                });\n            });\n        },\n        setSnackbarStyle: function setSnackbarStyle() {\n            var sSize = this.get(\"sScreenSize\");\n            if (sSize === this.get(\"_objWindowConstants.MEDIA_SIZE_TABLET\") || sSize === this.get(\"_objWindowConstants.MEDIA_SIZE_DESKTOP\") || sSize === this.get(\"_objWindowConstants.MEDIA_SIZE_JUMBO\")) {\n                this.setTabletDesktopStyle();\n            } else {\n                this.setMobileStyle();\n            }\n            this.set(\"_objSnackbarService.iSnackbarHeight\", this.$(\".a24-snackbar-inner\").outerHeight());\n        },\n        setTabletDesktopStyle: function setTabletDesktopStyle() {\n            //Have to apply the left css here so that the first time around the full width of the page is available\n            //for the snackbar to use to get the correct width for the margin minus calc, otherwise only half the screen\n            //is available and that could be less than the max width\n            this.$().css({\n                marginLeft: -(this.$(\".a24-snackbar-inner\").outerWidth() / 2),\n                left: \"50%\"\n            });\n        },\n        setMobileStyle: function setMobileStyle() {\n            this.$().css({\n                marginLeft: 0,\n                left: \"0%\"\n            });\n        },\n        screenWidthObserve: Ember.observer(\"_objDomService.iPageWidth\", function () {\n            this.setSnackbarStyle();\n        }),\n        onHeightChange: Ember.observer(\"_objSnackbarService.iSnackbarHeight\", function () {\n            if (this.get(\"_objSnackbarService.sSnackbarState\") === \"showStart\") {\n                this.animateIn();\n            } else if (this.get(\"_objSnackbarService.sSnackbarState\") === \"showEnd\") {\n                //Just set the snackbar to the correct height\n                this.$().css({\n                    height: this.get(\"_objSnackbarService.iSnackbarHeight\")\n                });\n            }\n        }),\n        dismissMessage: function dismissMessage() {\n            if (this.get(\"_objSnackbarService.sSnackbarState\") === \"showEnd\") {\n                Ember.run.cancel(this.get(\"_objSnackbarTimer\"));\n                this.set(\"_objSnackbarTimer\", null);\n                this.funcHideStart();\n            }\n        },\n        actions: {\n            onActionClicked: function onActionClicked() {\n                this.get(\"_funcActionCallback\")();\n                this.dismissMessage();\n            },\n            onDismissMessage: function onDismissMessage() {\n                this.dismissMessage();\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/stepper-item\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/templates/components/stepper-item\"], function (exports, _didRenderChangesMixin, _stepperItem) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _stepperItem.default,\n        classNames: [\"a24-stepper-item\"],\n        classNameBindings: [\"bSelected:is-selected\", \"bCompleted:is-completed\", \"bEnabled::is-disabled\"],\n        sStepNumber: null,\n        sTitle: null,\n        sSubTitle: null,\n        bCompleted: false,\n        bSelected: false,\n        bEnabled: false,\n\n        _sItemId: null,\n\n        _onPropertiesChange: Ember.observer(\"sStepNumber\", \"sTitle\", \"sSubTitle\", \"bCompleted\", \"bSelected\", \"bEnabled\", function () {\n            if (!a24Core.isEmpty(this.get(\"onLinkActionItemStateChanged\"))) {\n                Ember.run.once(this, this._notifyPropertiesChange);\n            }\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            if (a24Core.isEmpty(this.get(\"_sItemId\"))) {\n                this.set(\"_sItemId\", Ember.guidFor({}));\n            }\n            this._onPropertiesChange();\n        },\n\n        _notifyPropertiesChange: function _notifyPropertiesChange() {\n            this.get(\"onLinkActionItemStateChanged\")(this.get(\"_sItemId\"), this.getProperties(\"sStepNumber\", \"sTitle\", \"sSubTitle\", \"bCompleted\", \"bSelected\", \"bEnabled\"));\n        },\n\n        actions: {\n            onLinkActionStepperItemClicked: function onLinkActionStepperItemClicked() {\n                if (!a24Core.isEmpty(this.get(\"onLinkActionStepperItemClicked\")) && this.get(\"bEnabled\") && !this.get(\"bSelected\")) {\n                    this.get(\"onLinkActionStepperItemClicked\")(this.get(\"sStepNumber\"), this.get(\"sTitle\"), this.get(\"_sItemId\"));\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/stepper-wrapper\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/templates/components/stepper-wrapper\"], function (exports, _didRenderChangesMixin, _stepperWrapper) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _stepperWrapper.default,\n        classNames: [\"a24-stepper-wrapper\"],\n        classNameBindings: [\"_bVerticalView:a24-stepper-wrapper-vertical:a24-stepper-wrapper-horizontal\"],\n        _objStepItems: null,\n        _bVerticalView: false,\n\n        _sStepStyle: Ember.computed(\"_objStepItems.@each\", function () {\n            var iNumOfSteps = Object.keys(this.get(\"_objStepItems\")).length;\n            var iWidth = 100 / iNumOfSteps;\n            return Ember.String.htmlSafe(\"width: \" + iWidth.toFixed(2) + \"%;\");\n        }),\n\n        _onReCalc: Ember.observer(\"_objDidRenderService._iCountRender\", function () {\n            Ember.run.scheduleOnce(\"afterRender\", this, this._setMobileView);\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            if (a24Core.isEmpty(this.get(\"_objStepItems\"))) {\n                this.set(\"_objStepItems\", {});\n            }\n        },\n\n        _setMobileView: function _setMobileView() {\n            if (this.$(\"table\").eq(0).width() > this.$().width()) {\n                this.set(\"_bVerticalView\", true);\n            } else {\n                this.set(\"_bVerticalView\", false);\n            }\n        },\n\n        actions: {\n            onStepperItemClicked: function onStepperItemClicked(sItemId, objStep) {\n                if (!a24Core.isEmpty(this.get(\"onStepperItemClicked\")) && objStep.bEnabled) {\n                    this.get(\"onStepperItemClicked\")(objStep.sStepNumber, objStep.sTitle, sItemId);\n                }\n            },\n\n            onLinkActionStepperItemClicked: function onLinkActionStepperItemClicked() {\n                if (!a24Core.isEmpty(this.get(\"onStepperItemClicked\"))) {\n                    this.get(\"onStepperItemClicked\").apply(undefined, arguments);\n                }\n            },\n\n            onLinkActionItemStateChanged: function onLinkActionItemStateChanged(sItemId, objItemData) {\n                this.set(\"_objStepItems.\" + sItemId, objItemData);\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/tag-component-shrink\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/templates/components/tag-component-shrink\"], function (exports, _didRenderChangesMixin, _tagComponentShrink) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tagComponentShrink.default,\n        classNames: [\"display-inline-block\"],\n        objData: null,\n        objActions: null\n    });\n});","define(\"a24-ember-lib/components/tag-component\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/templates/components/tag-component\"], function (exports, _didRenderChangesMixin, _tagComponent) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _tagComponent.default,\n        classNames: [\"display-inline-block\"],\n        sTitle: \"\",\n        mValue: null,\n        sColor: \"\",\n        sActionIcon: \"\",\n        sActionIconColor: \"\",\n        bHasClear: false,\n        sClearColor: \"\",\n\n        actions: {\n            onTagClicked: function onTagClicked(sTitle, mValue) {\n                if (!a24Core.isEmpty(this.get(\"onTagClicked\"))) {\n                    return this.get(\"onTagClicked\")(sTitle, mValue);\n                }\n            },\n\n            onClearTag: function onClearTag(sTitle, mValue) {\n                if (!a24Core.isEmpty(this.get(\"onClearTag\"))) {\n                    return this.get(\"onClearTag\")(sTitle, mValue);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/timeline-component\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/templates/components/timeline-component\"], function (exports, _didRenderChangesMixin, _timelineComponent) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _timelineComponent.default,\n        classNames: [\"timeline-component\"],\n        sHeader: \"\",\n        sEndText: \"\",\n        sNoDataText: \"\",\n        bHasMore: false,\n        bDisplayLoadMore: true,\n        bMoreLoading: false,\n        arrData: null,\n\n        _bHasNoData: Ember.computed.empty(\"arrData\").readOnly(),\n\n        _objStringsEmberLibService: Ember.inject.service(\"a24-strings-ember-lib\"),\n\n        actions: {\n            onSeeMore: function onSeeMore() {\n                if (!a24Core.isEmpty(this.get(\"onSeeMore\"))) {\n                    this.get(\"onSeeMore\")();\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/view-edit-section-content\", [\"exports\", \"a24-ember-lib/templates/components/view-edit-section-content\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _viewEditSectionContent, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _viewEditSectionContent.default,\n        arrData: null,\n        _sEmptyValue: \"-\",\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            if (this.get(\"arrData\") === null) {\n                this.set(\"arrData\", []);\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/view-more-component\", [\"exports\", \"a24-ember-lib/templates/components/view-more-component\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _viewMoreComponent, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _viewMoreComponent.default,\n        // header for the view more trigger\n        sViewMoreLabel: null,\n        // whether the component is initially expanded or collapsed\n        bExpanded: false,\n        // initial height of the component\n        iHeight: null,\n        // whether to display the horizontal line\n        bDisplayHorizRule: false,\n\n        _sViewMoreLabel: null,\n        _sItemId: null,\n        // whether to display the fadeout div\n        _bDisplayFadeOutDiv: true,\n        // Will keep track of whether the view-more should actually be shown\n        _bShouldViewMore: false,\n        _bDoHeightCalc: true,\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objWindowConstants: Ember.inject.service(\"a24-constants-window\"),\n        init: function init() {\n            this._super.apply(this, arguments);\n            // this is done so that the _sItemId can passed in during testing and\n            // we can test that it is set correct\n            if (a24Core.isEmpty(this.get(\"_sItemId\"))) {\n                this.set(\"_sItemId\", Ember.guidFor({}));\n            }\n            // set view more label to View More unless viewmore label is supplied\n            if (a24Core.isEmpty(this.get(\"sViewMoreLabel\"))) {\n                this.set(\"_sViewMoreLabel\", this.get(\"_objStringsService\").getString(\"viewMore\"));\n            } else {\n                this.set(\"_sViewMoreLabel\", this.get(\"sViewMoreLabel\"));\n            }\n        },\n        resizeBasedOnRenderCount: Ember.observer(\"_objDidRenderService._iCountRender\", function () {\n            var _this = this;\n\n            if (this.get(\"_bDoHeightCalc\")) {\n                Ember.run.next(function () {\n                    // Get the specified height in rem\n                    var iSectionHeight = _this.get(\"iHeight\");\n\n                    if (!a24Core.isEmpty(_this) && !a24Core.isEmpty(_this.$())) {\n                        // Compare the rem height with the px height\n                        var bShouldHaveViewMore = iSectionHeight * _this.get(\"_objWindowConstants.SCREEN_REM_BASE\") < _this.$().outerHeight();\n                        _this.set(\"_bShouldViewMore\", bShouldHaveViewMore);\n                        if (bShouldHaveViewMore) {\n\n                            Ember.run.scheduleOnce(\"afterRender\", function () {\n                                Ember.run.next(function () {\n                                    // set the styles\n                                    $(\"#\" + _this.get(\"_sItemId\")).css(\"height\", iSectionHeight + \"rem\");\n                                    $(\"#\" + _this.get(\"_sItemId\")).css(\"min-height\", iSectionHeight + \"rem\");\n                                });\n                            });\n                        }\n                    }\n                });\n            }\n        }),\n        actions: {\n            onCollapseExpandStart: function onCollapseExpandStart(sCollapseId) {\n                this.set(\"_bDoHeightCalc\", true);\n                if (!a24Core.isEmpty(this.get(\"onCollapseExpandStart\"))) {\n                    return this.get(\"onCollapseExpandStart\")(sCollapseId);\n                }\n            },\n            onCollapseExpandEnd: function onCollapseExpandEnd(sCollapseId) {\n                this.set(\"_bDoHeightCalc\", false);\n                // set view more label to View Less\n                this.set(\"_sViewMoreLabel\", this.get(\"_objStringsService\").getString(\"viewLess\"));\n                // hide the fadeout div\n                this.set(\"_bDisplayFadeOutDiv\", false);\n                if (!a24Core.isEmpty(this.get(\"onCollapseExpandEnd\"))) {\n                    return this.get(\"onCollapseExpandEnd\")(sCollapseId);\n                }\n            },\n            onCollapseCollapseStart: function onCollapseCollapseStart(sCollapseId) {\n                this.set(\"_bDoHeightCalc\", false);\n                // set view more label to View More unless viewmore label is supplied\n                if (a24Core.isEmpty(this.get(\"sViewMoreLabel\"))) {\n                    this.set(\"_sViewMoreLabel\", this.get(\"_objStringsService\").getString(\"viewMore\"));\n                } else {\n                    this.set(\"_sViewMoreLabel\", this.get(\"sViewMoreLabel\"));\n                }\n                // show the fadeout div\n                this.set(\"_bDisplayFadeOutDiv\", true);\n                if (!a24Core.isEmpty(this.get(\"onCollapseCollapseStart\"))) {\n                    return this.get(\"onCollapseCollapseStart\")(sCollapseId);\n                }\n            },\n            onCollapseCollapseEnd: function onCollapseCollapseEnd(sCollapseId) {\n                this.set(\"_bDoHeightCalc\", true);\n                if (!a24Core.isEmpty(this.get(\"onCollapseCollapseEnd\"))) {\n                    return this.get(\"onCollapseCollapseEnd\")(sCollapseId);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-lib/components/waves-inception-component\", [\"exports\", \"a24-ember-lib/templates/components/waves-inception-component\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _wavesInceptionComponent, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _wavesInceptionComponent.default,\n        // Used to determine if waves should be light or dark\n        bLight: false\n    });\n});","define(\"a24-ember-lib/config/environment\", [\"module\"], function (module) {\n    \"use strict\";\n\n    /* eslint-env node */\n\n    module.exports = function (environment) {\n        var ENV = {\n            modulePrefix: \"dummy\",\n            environment: environment,\n            rootURL: \"/\",\n            locationType: \"auto\",\n            EmberENV: {\n                FEATURES: {\n                    // Here you can enable experimental features on an ember canary build\n                    // e.g. \"with-controller\": true\n                }\n            },\n\n            APP: {\n                // Here you can pass flags/options to your application instance\n                // when it is created\n            }\n        };\n\n        if (environment === \"development\") {\n            // ENV.APP.LOG_RESOLVER = true;\n            // ENV.APP.LOG_ACTIVE_GENERATION = true;\n            // ENV.APP.LOG_TRANSITIONS = true;\n            // ENV.APP.LOG_TRANSITIONS_INTERNAL = true;\n            // ENV.APP.LOG_VIEW_LOOKUPS = true;\n        }\n\n        if (environment === \"test\") {\n            // Testem prefers this...\n            ENV.locationType = \"none\";\n\n            // keep test console output quieter\n            ENV.APP.LOG_ACTIVE_GENERATION = false;\n            ENV.APP.LOG_VIEW_LOOKUPS = false;\n\n            ENV.APP.rootElement = \"#ember-testing\";\n        }\n\n        return ENV;\n    };\n});","define(\"a24-ember-lib/helpers/array-filter\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.arrayFilter = arrayFilter;\n\n\n    /**\n     * This function will return a filtered array\n     *\n     * @param arrParams - The array of params sent to the helper\n     *\n     * @author Michael Barnard <michael.barnard@a24group.com>\n     * @since  03 September 2018\n     */\n    function arrayFilter(arrParams) {\n        var arrItems = arrParams[0];\n\n        if (a24Core.isEmpty(arrItems)) {\n            return arrItems;\n        }\n        var funcFilterFunc = arrParams[1];\n\n        if (arrItems.filter && funcFilterFunc) {\n            arrItems = arrItems.filter(funcFilterFunc);\n        }\n\n        var funcSortFunc = arrParams[2];\n        if (funcSortFunc) {\n            arrItems = funcSortFunc(arrItems);\n        }\n\n        return arrItems;\n    }\n\n    exports.default = Ember.Helper.helper(arrayFilter);\n});","define(\"a24-ember-lib/helpers/card-datagrid-table-get-custom-val\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.cardDatagridTableGetCustomVal = cardDatagridTableGetCustomVal;\n\n\n  /**\n   * Get the custom value for the datagrid row and header data passed in\n   *\n   * @param arrParams - The array of params sent to the helper\n   *\n   * @author Deon De Wet <deon.dewet@a24group.com>\n   * @since  30 November 2018\n   */\n  function cardDatagridTableGetCustomVal(arrParams) {\n    return arrParams[0].funcTableCustomVal(arrParams[0], arrParams[1]);\n  }\n\n  exports.default = Ember.Helper.helper(cardDatagridTableGetCustomVal);\n});","define(\"a24-ember-lib/helpers/card-datagrid-table-get-key\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.cardDatagridTableGetKey = cardDatagridTableGetKey;\n\n    var _slicedToArray = function () {\n        function sliceIterator(arr, i) {\n            var _arr = [];\n            var _n = true;\n            var _d = false;\n            var _e = undefined;\n\n            try {\n                for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n                    _arr.push(_s.value);\n\n                    if (i && _arr.length === i) break;\n                }\n            } catch (err) {\n                _d = true;\n                _e = err;\n            } finally {\n                try {\n                    if (!_n && _i[\"return\"]) _i[\"return\"]();\n                } finally {\n                    if (_d) throw _e;\n                }\n            }\n\n            return _arr;\n        }\n\n        return function (arr, i) {\n            if (Array.isArray(arr)) {\n                return arr;\n            } else if (Symbol.iterator in Object(arr)) {\n                return sliceIterator(arr, i);\n            } else {\n                throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n            }\n        };\n    }();\n\n    /**\n     * This function will return the key path for value of a table cell\n     *\n     * @param arrParams - The array of params sent to the helper\n     *\n     * @author Ahmed Onawale <ahmedonawale@gmail.com>\n     * @since 22 October 2018\n     */\n    function cardDatagridTableGetKey(_ref) {\n        var _ref2 = _slicedToArray(_ref, 1),\n            objHeader = _ref2[0];\n\n        var sProperty = objHeader.sProperty;\n\n        sProperty = sProperty.replace(\"___\", \".0.\").replace(\"__\", \".\");\n\n        if (objHeader.bHTML) {\n            sProperty = sProperty + \"HTML\";\n        }\n\n        return sProperty;\n    }\n\n    exports.default = Ember.Helper.helper(cardDatagridTableGetKey);\n});","define(\"a24-ember-lib/helpers/equals\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.equals = equals;\n\n\n  /**\n   * This function will return whether passed in params are equal\n   *\n   * @param arrParams - The array of params sent to the helper\n   *\n   * @author Ruan Naude <ruan.naude@a24group.com>\n   * @since 09 Aug 2016\n   */\n  function equals(arrParams) {\n    return arrParams[0] === arrParams[1];\n  }\n\n  exports.default = Ember.Helper.helper(equals);\n});","define(\"a24-ember-lib/helpers/equalsOr\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.equalsOr = equalsOr;\n\n\n    /**\n     * This function will return whether the first param passed in matches any other param\n     *\n     * @param arrParams - The array of params sent to the helper\n     *\n     * @author Deon De Wet<deon.dewet@a24group.com>\n     * @since  17 Sep 2019\n     */\n    function equalsOr(arrParams) {\n        for (var i = 1; i < arrParams.length; i++) {\n            if (arrParams[0] === arrParams[i]) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n\n    exports.default = Ember.Helper.helper(equalsOr);\n});","define(\"a24-ember-lib/helpers/format-date\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.formatDate = formatDate;\n\n\n    /**\n     * This function will return a formatted date\n     *\n     * @param arrParams - The array of params sent to the helper(See the first variables in the function for details)\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since 09 Aug 2016\n     */\n    function formatDate(arrParams) {\n        var sDate = arrParams[0]; //The date to format, either in DD MMMM YYYY HH:mm:ss ZZ or DD MMMM YYYY format\n        var sTimezone = arrParams[1]; //The timezone to use\n        var sFormat = arrParams[2]; //The format you want it back in(If null it will use the DD MMM YYYY format)\n        var bConvertToTimezone = arrParams[3]; // this is a flag to convert the time from utc to the timezone passed in\n        var sDisplayTimezone = arrParams[4];\n        var bShowTimezoneAbbr = arrParams[5];\n        var sConvertToTimezoneProp = arrParams[6];\n        var sFormattedDate = \"\";\n        // If the date is empty, we skip and return empty string\n        if (!a24Core.isEmpty(sDate)) {\n            if (a24Core.isEmpty(sTimezone)) {\n                sFormattedDate = \"No Timezone\";\n            } else {\n                if (a24Core.isEmpty(sFormat)) {\n                    sFormat = a24Constants.DATE_FORMAT;\n                }\n                /**\n                 * This checks if there is a \":\" in the string. If not, it\n                 * works on the assumption that it is a date in the \"DD MMMM YYYY\"\n                 * format and will format it accordingly.\n                 */\n                var objDate = a24DateManager.createDate(sConvertToTimezoneProp ? sConvertToTimezoneProp : sTimezone, sDisplayTimezone);\n                if (sDate.indexOf(\":\") === -1) {\n                    objDate.setDateFromBrowser(sDate, a24Constants.DATE_FORMAT_REST_FORMAT_DATE_ONLY);\n                } else if (!a24Core.isEmpty(sConvertToTimezoneProp) || bConvertToTimezone) {\n                    objDate.setDateFromRestAllowTimeAlter(sDate);\n                } else {\n                    objDate.setDateFromRest(sDate);\n                }\n\n                if (sFormat === a24Constants.DATE_FORMAT) {\n                    sFormattedDate = objDate.getDateFormat();\n                } else if (sFormat === a24Constants.DATE_TIME_FORMAT) {\n                    sFormattedDate = objDate.getDateTimeFormat();\n                } else if (sFormat === a24Constants.DATE_TIME_DASH_FORMAT) {\n                    sFormattedDate = objDate.getDateTimeDashFormat();\n                } else if (sFormat === a24Constants.TIME_FORMAT) {\n                    sFormattedDate = objDate.getTimeFormat();\n                }\n\n                if (bShowTimezoneAbbr) {\n                    sFormattedDate += \" \" + objDate.getTimezoneAbbreviation(bConvertToTimezone);\n                }\n            }\n        }\n        return sFormattedDate;\n    }\n\n    exports.default = Ember.Helper.helper(formatDate);\n});","define(\"a24-ember-lib/mixins/input-form-element\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n    var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n        return typeof obj;\n    } : function (obj) {\n        return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n\n    exports.default = Ember.Mixin.create({\n        // id for the component\n        _sInputId: null,\n        //Properties that can be overridden for the floating right side icon\n        sFloatRightIconName: \"info\",\n        sFloatRightIconColor: \"a24-grey-text-lighten-1\",\n        funcFloatRightIconClickCallback: null,\n        // This property allows adding additional info onto the field for later use e.g saving field ID for post data\n        // NOTE: Currently only works when bIsArrayProperty is true and items in array are objects\n        mExtraValue: null,\n        // The key that you want to map the above mExtraValue to when using functions like getPlainFormValueObject\n        mExtraValueKey: null,\n        // the selected item/input\n        mValue: null,\n        // If the field required and should get the * after field name\n        bRequired: false,\n        // if property is a ghost property thus not to be validated or returned\n        bGhostProperty: false,\n        // character limit for this component\n        iMaxCharacters: null,\n        // validation error for this input\n        sErrorMessage: null,\n        // the label/header\n        sFieldName: null,\n        //Placeholder\n        sPlaceholder: null,\n        //Whether to use a static header instead of floating label\n        bStaticHeader: false,\n        // the name of the input\n        sProperty: \"\",\n        // the type of mValue\n        sInputType: \"\",\n        // the order in which to validate this input\n        iOrder: null,\n        // whether the value of the property is an array\n        bIsArrayProperty: false,\n        // the order to validate the child inputs, if there is an array of child inputs\n        iArrayOrder: 0,\n        // the validation functions that will be called, populated by top level\n        arrValidation: null,\n        // the validation functions that will be called at a later stage, populated by top level\n        arrLateValidation: null,\n        // the children of this input\n        arrValidationOrder: null,\n        // instances of the child input fields\n        objChildren: null,\n        // Used to define the validation\n        objChildConfig: null,\n\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objPostCodeValidatorService: Ember.inject.service(\"post-code-validator\"),\n        // Keep track of when internal updates happen on the component\n        _bInternalMValueUpdate: false,\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n            // this is done so that the _sInputId can passed in during testing and\n            // we can test that it is set correct\n            if (a24Core.isEmpty(this.get(\"_sInputId\"))) {\n                this.set(\"_sInputId\", Ember.guidFor({}));\n            }\n            if (a24Core.isEmpty(this.get(\"arrValidation\"))) {\n                this.set(\"arrValidation\", []);\n            }\n            if (a24Core.isEmpty(this.get(\"arrLateValidation\"))) {\n                this.set(\"arrLateValidation\", []);\n            }\n            if (a24Core.isEmpty(this.get(\"arrValidationOrder\"))) {\n                this.set(\"arrValidationOrder\", []);\n            }\n            if (a24Core.isEmpty(this.get(\"objChildren\"))) {\n                this.set(\"objChildren\", {});\n            }\n            Ember.run.scheduleOnce(\"afterRender\", this, function () {\n                if (!a24Core.isEmpty(_this.get(\"sErrorMessage\"))) {\n                    _this.showErrorMessage();\n                }\n\n                if (!a24Core.isEmpty(_this.get(\"onInputValidationAdd\"))) {\n                    _this.get(\"onInputValidationAdd\")(_this);\n                }\n\n                //This has to happen after adding the child to the parent so that the validation can set the iMaxCharacters\n                if (!a24Core.isEmpty(_this.get(\"iMaxCharacters\"))) {\n                    $(\"#\" + _this.get(\"_sInputId\")).characterCounter();\n                }\n            });\n        },\n        didDestroyElement: function didDestroyElement() {\n            this._super.apply(this, arguments);\n            if (!a24Core.isEmpty(this.get(\"onInputValidationRemove\"))) {\n                this.get(\"onInputValidationRemove\")(this);\n            }\n        },\n        observeErrorMessage: Ember.observer(\"sErrorMessage\", function () {\n            // remove the error message div if sErrorMessage is empty\n            if (a24Core.isEmpty(this.get(\"sErrorMessage\"))) {\n                var objErrorMessage = this.$(\".a24ErrorMessage\");\n                objErrorMessage.remove();\n            }\n        }),\n        setMValueWithInternalFlag: function setMValueWithInternalFlag(mValue, bInternalUpdate) {\n            this.set(\"_bInternalMValueUpdate\", bInternalUpdate);\n            this.set(\"mValue\", mValue);\n            this.set(\"_bInternalMValueUpdate\", false);\n        },\n        onMValueChange: Ember.observer(\"mValue\", function () {\n            if (!this.get(\"_bInternalMValueUpdate\")) {\n                this._buildInputValueChangedPath([]);\n            }\n        }),\n        getPlainFormValueObject: function getPlainFormValueObject() {\n            // Create blank return object\n            var objValueObject = {};\n\n            var objFocused = this.$(\":focus\");\n            if (!a24Core.isEmpty(objFocused)) {\n                objFocused.blur();\n            }\n\n            // Get the object containing the children\n            var objChildren = this.get(\"objChildren\");\n            if (!this.isVisible()) {\n                return objValueObject;\n            }\n            if (this.get(\"bGhostProperty\")) {\n                return objValueObject;\n            }\n            // Iterate over each of the children\n            for (var sKey in objChildren) {\n\n                // Ensure object has key\n                if (objChildren.hasOwnProperty(sKey)) {\n                    // Make a reference to the child\n                    var mChild = objChildren[sKey];\n\n                    // Distinguish array of children from direct child\n                    if (mChild instanceof Array) {\n                        // Ensure array is not empty\n                        if (!a24Core.isEmpty(mChild)) {\n                            // Loop over the array\n                            for (var i = 0; i < mChild.length; i++) {\n                                // Add array child to main object\n                                objValueObject = this.addChildToObject(objValueObject, mChild[i], true);\n                            }\n                        }\n                    } else {\n                        // Add child to main object\n                        objValueObject = this.addChildToObject(objValueObject, mChild, false);\n                    }\n                }\n            }\n\n            // Return the populated object\n            return objValueObject;\n        },\n        addChildToObject: function addChildToObject(objValueObject, objChild, bIsArray) {\n            if (!objChild.isVisible()) {\n                return objValueObject;\n            }\n\n            if (objChild.get(\"bGhostProperty\")) {\n                return objValueObject;\n            }\n            // Get the property name of the object\n            var sProperty = objChild.sProperty;\n            // Define a nesting object\n            var objNest = objValueObject;\n\n            // Check if property is nested\n            if (sProperty.indexOf(\".\") !== -1) {\n                // The property is nested\n\n                // Split the name in to individual properties\n                var arrFields = objChild.sProperty.split(\".\");\n                // Get the last item of the array since this is the actual property\n                sProperty = arrFields.pop();\n\n                // Iterate over the remaining fields\n                for (var i = 0; i < arrFields.length; i++) {\n                    // Check if the object has this property\n                    if (!objNest.hasOwnProperty(arrFields[i])) {\n                        // Create the object if it has not been done\n                        objNest[arrFields[i]] = {};\n                    }\n                    // Redefine objNest as reference to embedded object\n                    objNest = objNest[arrFields[i]];\n                }\n            }\n\n            // Check if property is an array\n            if (bIsArray) {\n                // If the array is empty\n                if (a24Core.isEmpty(objNest[sProperty])) {\n                    // Create the array\n                    objNest[sProperty] = [];\n                }\n                var mArrayInputValue = this.getValueFromType(objChild);\n\n                if (mArrayInputValue !== null && (typeof mArrayInputValue === \"undefined\" ? \"undefined\" : _typeof(mArrayInputValue)) === \"object\") {\n                    if (!a24Core.isEmpty(objChild.get(\"mExtraValue\"))) {\n                        mArrayInputValue[objChild.get(\"mExtraValueKey\")] = objChild.get(\"mExtraValue\");\n                    }\n                }\n\n                // Push item in to array\n                objNest[sProperty].push(mArrayInputValue);\n            } else {\n                // Set the item on the property\n                objNest[sProperty] = this.getValueFromType(objChild);\n            }\n            // Return the newly modified value object\n            return objValueObject;\n        },\n\n        getValueFromType: function getValueFromType(objChild) {\n            var objResult = objChild.checkExtraTypes(objChild);\n            if (!a24Core.isEmpty(objResult) && objResult.bHandled) {\n                return objResult.mReturned;\n            } else {\n                return objChild.getValueTypeCheck(objChild);\n            }\n        },\n        checkExtraTypes: function checkExtraTypes() /*objChild*/{\n            // This function is for when there is extra types you want to add but is not generic to be placed in the lib\n            // This function is expected to return the following object\n            /*\n             {\n                bHandled: false/true,\n                mReturned: \"what ever the value is\"\n             }\n             */\n\n        },\n        getValueTypeCheck: function getValueTypeCheck(objChild) {\n            // Check type\n            if (objChild.sInputType === \"text\" || objChild.sInputType === \"date\" || objChild.sInputType === \"text-area\" || objChild.sInputType === \"tel\" || objChild.sInputType === \"html\" || objChild.sInputType === \"email\") {\n                if (a24Core.isEmpty(objChild.mValue)) {\n                    return null;\n                }\n                return objChild.mValue.trim();\n            } else if (objChild.sInputType === \"password\" || objChild.sInputType === \"time\" || objChild.sInputType === \"file\") {\n                if (objChild.mValue === \"\" || objChild.mValue === null) {\n                    return null;\n                }\n                return objChild.mValue;\n            } else if (objChild.sInputType === \"radio\") {\n                if (objChild.mValue == null) {\n                    return null;\n                }\n                var sValue = objChild.mValue[objChild.get(\"sOptionsValueKey\")];\n                if (a24Core.isEmpty(sValue)) {\n                    return null;\n                }\n                return sValue.trim();\n            } else if (objChild.sInputType === \"dropdown-single\") {\n                if (objChild.mValue == null) {\n                    return null;\n                }\n                var _sValue = objChild.mValue[objChild.get(\"sOptionsValueKey\")];\n                if (a24Core.isEmpty(_sValue)) {\n                    return null;\n                }\n                return _sValue.trim();\n            } else if (objChild.sInputType === \"dropdown-multi\") {\n                if (objChild.mValue == null) {\n                    return null;\n                }\n                var arrList = [];\n\n                for (var j = 0; j < objChild.mValue.length; j++) {\n                    arrList.push(Ember.copy(objChild.mValue[j][objChild.get(\"sOptionsValueKey\")], true));\n                }\n                return arrList;\n            } else if (objChild.sInputType === \"suggest\" || objChild.sInputType === \"address-suggest\") {\n                if (objChild.mValue == null) {\n                    return null;\n                }\n                var mValue = Ember.copy(objChild.mValue, true);\n                if (a24Core.isEmpty(mValue)) {\n                    return null;\n                }\n                return mValue;\n            } else if (objChild.sInputType === \"checkbox\") {\n                if (objChild.mValue == null) {\n                    return null;\n                }\n                var bValue = objChild.mValue.bValue;\n                if (a24Core.isEmpty(bValue)) {\n                    return null;\n                }\n                return bValue;\n            } else if (objChild.sInputType === \"tag\" || objChild.sInputType === \"week\") {\n                if (a24Core.isEmpty(objChild.mValue)) {\n                    return null;\n                }\n\n                var _arrList = [];\n                for (var i = 0; i < objChild.mValue.length; i++) {\n                    _arrList.push(Ember.copy(objChild.mValue[i], true));\n                }\n\n                return _arrList;\n            } else if (objChild.sInputType === \"number\") {\n                return objChild.mValue;\n            } else {\n\n                // Any unknown type will be treated as a nested object\n                return objChild.getPlainFormValueObject();\n            }\n        },\n        showErrorMessage: function showErrorMessage() {\n            if (!this.isVisible()) {\n                return;\n            }\n            var objInputElement = this.$(\".a24ErrorInputParent\");\n            if (objInputElement.length === 0) {\n                objInputElement = this.$();\n            }\n            var objErrorMessage = this.$(\"<div class='a24ErrorMessage'></div>\");\n            if (!a24Core.isEmpty(this.get(\"iMaxCharacters\"))) {\n                //if we have character counter then add right padding to error message so that they dont collide\n                objErrorMessage.css(\"padding-right\", \"3rem\");\n            }\n            var sErrorMessage = this.get(\"sErrorMessage\");\n\n            if (!a24Core.isEmpty(this.get(\"sErrorMessage\"))) {\n                objErrorMessage.html(sErrorMessage);\n                //This has to happen after the characterCounter else the character counter will display below the error\n                objInputElement.append(objErrorMessage);\n            }\n        },\n        _buildInputValueChangedPath: function _buildInputValueChangedPath(arrPathToInputMixin) {\n\n            this.onInputValueChanged(arrPathToInputMixin);\n\n            if (this.get(\"bIsArrayProperty\")) {\n                // add the array order if array property\n                arrPathToInputMixin.unshift(this.get(\"iArrayOrder\"));\n            }\n            // add sProperty to beginning of arrPathToInputMixin\n            arrPathToInputMixin.unshift(this.get(\"sProperty\"));\n            // add \"objChildren\" to beginning of arrPathToInputMixin\n            arrPathToInputMixin.unshift(\"objChildren\");\n\n            if (!a24Core.isEmpty(this.get(\"onInputValueChangedAction\"))) {\n                this.get(\"onInputValueChangedAction\")(arrPathToInputMixin);\n            }\n        },\n        _buildInputChildAddedPath: function _buildInputChildAddedPath(arrPathToInputMixin, objChildMixin) {\n            this.onAddChildValidation(arrPathToInputMixin, objChildMixin);\n\n            if (this.get(\"bIsArrayProperty\")) {\n                // add the array order if array property\n                arrPathToInputMixin.unshift(this.get(\"iArrayOrder\"));\n            }\n            // add sProperty to beginning of arrPathToInputMixin\n            arrPathToInputMixin.unshift(this.get(\"sProperty\"));\n\n            // add \"objChildren\" to beginning of arrPathToInputMixin\n            arrPathToInputMixin.unshift(\"objChildren\");\n\n            if (!a24Core.isEmpty(this.get(\"onAddChildValidationAction\"))) {\n                this.get(\"onAddChildValidationAction\")(arrPathToInputMixin, objChildMixin);\n            }\n        },\n\n        onAddChildValidation: function onAddChildValidation(arrPathToInputMixin, objChildMixin) {\n            var objChildConfig = this.get(\"objChildConfig\");\n\n            var arrFinalLookup = [];\n            for (var i = 0; i < arrPathToInputMixin.length; i++) {\n                var pathItem = arrPathToInputMixin[i];\n                if (typeof pathItem === \"number\") {\n                    arrFinalLookup.push(\"@each\");\n                } else {\n                    arrFinalLookup.push(pathItem);\n                }\n            }\n            var sLookup = arrFinalLookup.join(\".\");\n            if (!a24Core.isEmpty(objChildConfig) && objChildConfig.hasOwnProperty(sLookup)) {\n                objChildConfig[sLookup](objChildMixin);\n            }\n        },\n        isVisible: function isVisible() {\n            return this.$().is(\":visible\");\n        },\n        doValidation: function doValidation(bFullValidate) {\n            if (!this.isVisible()) {\n                return false;\n            }\n            this.set(\"sErrorMessage\", \"\");\n            // this is to lose focus on all fields so that the mValue could update instead of still being empty\n            // even if the field did change its value\n            var objFocused = this.$(\":focus\");\n            if (!a24Core.isEmpty(objFocused)) {\n                objFocused.blur();\n            }\n\n            var bHasError = false;\n            var objChildren = this.get(\"objChildren\");\n            if (!a24Core.isEmpty(objChildren)) {\n                var arrValidationOrder = this.get(\"arrValidationOrder\");\n                arrValidationOrder.sort(function (objOne, objTwo) {\n                    return objOne.iOrder - objTwo.iOrder;\n                });\n\n                for (var i = 0; i < arrValidationOrder.length; i++) {\n                    if (arrValidationOrder[i].bArrayProperty) {\n\n                        objChildren[arrValidationOrder[i].sProperty].sort(function (objOne, objTwo) {\n                            return objOne.iArrayOrder - objTwo.iArrayOrder;\n                        });\n\n                        for (var j = 0; j < objChildren[arrValidationOrder[i].sProperty].length; j++) {\n                            var bChildValidation = objChildren[arrValidationOrder[i].sProperty][j].doValidation(bFullValidate);\n\n                            if (bChildValidation) {\n                                bHasError = true;\n                            }\n                            //Dont break when we have error, we want all fields with errors to go red\n                        }\n                    } else {\n                        var _bChildValidation = objChildren[arrValidationOrder[i].sProperty].doValidation(bFullValidate);\n\n                        if (_bChildValidation) {\n                            bHasError = true;\n                        }\n                        //Dont break when we have error, we want all fields with errors to go red\n                    }\n                }\n            }\n\n            //loop over all arrValidation function and call then\n            var arrValidation = this.get(\"arrValidation\");\n            for (var k = 0; k < arrValidation.length; k++) {\n                var sErrorMessage = arrValidation[k]();\n                if (!a24Core.isEmpty(sErrorMessage)) {\n                    bHasError = true;\n                    this.setErrorState(sErrorMessage);\n                    break; //Only one error per input field so we break\n                }\n            }\n\n            var arrLateValidation = this.get(\"arrLateValidation\");\n            if (bFullValidate && !bHasError) {\n                for (var l = 0; l < arrLateValidation.length; l++) {\n                    var sLateErrorMessage = arrLateValidation[l]();\n                    if (!a24Core.isEmpty(sLateErrorMessage)) {\n                        bHasError = true;\n                        this.setErrorState(sLateErrorMessage);\n                    }\n                }\n            }\n\n            return bHasError;\n        },\n        doFullValidation: function doFullValidation() {\n            return this.doValidation(true);\n        },\n        setResponseError: function setResponseError(arrPath, sErrorMessageKey, bNoTokens, bUseKeyAsString, objStringService) {\n            var arrMixinPath = [];\n            for (var i = 0; i < arrPath.length; i++) {\n                if (!a24Core.isNumber(arrPath[i])) {\n                    arrMixinPath.push(\"objChildren\");\n                }\n                arrMixinPath.push(arrPath[i]);\n            }\n\n            var objChildMixin = this;\n\n            if (a24Core.isEmpty(objStringService)) {\n                objStringService = objChildMixin.get(\"_objStringsService\");\n            }\n\n            for (var _i = 0; _i < arrMixinPath.length; _i++) {\n                objChildMixin = objChildMixin[arrMixinPath[_i]];\n                if (a24Core.isEmpty(objChildMixin)) {\n                    break;\n                }\n            }\n\n            if (!a24Core.isEmpty(objChildMixin)) {\n                if (bNoTokens) {\n                    if (bUseKeyAsString) {\n                        objChildMixin.setErrorState(sErrorMessageKey);\n                    } else {\n                        objChildMixin.setErrorState(objStringService.getString(sErrorMessageKey));\n                    }\n                } else {\n                    objChildMixin.setErrorMessage(objStringService.getTokenString(sErrorMessageKey, objChildMixin.get(\"sFieldName\")));\n                }\n            }\n        },\n        clearAllErrorMessages: function clearAllErrorMessages() {\n            this.set(\"sErrorMessage\", \"\");\n\n            var objChildren = this.get(\"objChildren\");\n            if (!a24Core.isEmpty(objChildren)) {\n                for (var sKey in objChildren) {\n                    if (objChildren.hasOwnProperty(sKey)) {\n                        if (objChildren[sKey] instanceof Array) {\n                            for (var i = 0; i < objChildren[sKey].length; i++) {\n                                objChildren[sKey][i].clearAllErrorMessages();\n                            }\n                        } else {\n                            objChildren[sKey].clearAllErrorMessages();\n                        }\n                    }\n                }\n            }\n        },\n        clearForm: function clearForm() {\n\n            var objChildren = this.get(\"objChildren\");\n            if (!a24Core.isEmpty(objChildren)) {\n                for (var sKey in objChildren) {\n                    if (objChildren.hasOwnProperty(sKey)) {\n                        var objChild = objChildren[sKey];\n                        if (objChild instanceof Array) {\n                            for (var i = 0; i < objChild.length; i++) {\n                                objChild[i].clearForm();\n                            }\n                        } else {\n                            objChild.clearForm();\n                        }\n                    }\n                }\n            }\n\n            this.clear();\n        },\n        clear: function clear() {\n            // To be implemented by the children\n        },\n        setErrorMessage: function setErrorMessage(sErrorMessage) {\n            this.set(\"sErrorMessage\", sErrorMessage);\n            this.showErrorMessage();\n            if (!a24Core.isEmpty(sErrorMessage)) {\n                if (!a24Core.isEmpty(this.get(\"onErrorMessageSetAction\"))) {\n                    this.get(\"onErrorMessageSetAction\")(this, parseInt(this.$().css(\"margin-top\")));\n                }\n            }\n        },\n        setErrorState: function setErrorState(sMessage) {\n            // This is default behaviour. This can be overridden for custom error highlighting\n            this.setErrorMessage(sMessage);\n        },\n        onFocusOut: function onFocusOut() {},\n        onInputValueChanged: function onInputValueChanged() /*arrPathToInputMixin*/{\n            // This is defaultly empty, this can be overridden to listen to changes\n            // If you implement this in your component you first need to do an\n            // empty check on arrPathToInputMixin and if it is empty simply return\n        },\n        _onErrorMessageSet: function _onErrorMessageSet(objInputMixin, iScrollOffset) {\n            this.onErrorMessageSet(objInputMixin);\n            if (!a24Core.isEmpty(this.get(\"onErrorMessageSetAction\"))) {\n                this.get(\"onErrorMessageSetAction\")(objInputMixin, iScrollOffset);\n            }\n        },\n        onErrorMessageSet: function onErrorMessageSet() /*objInputMixin*/{\n            // This is defaultly empty, this can be overridden\n        },\n        actions: {\n            onFloatRightIconClicked: function onFloatRightIconClicked() {\n                if (!a24Core.isEmpty(this.get(\"funcFloatRightIconClickCallback\"))) {\n                    this.get(\"funcFloatRightIconClickCallback\")();\n                }\n            },\n            onInputValidationAdd: function onInputValidationAdd(objChild) {\n                if (objChild.get(\"bIsArrayProperty\")) {\n                    if (a24Core.isEmpty(this.get(\"objChildren\")[objChild.get(\"sProperty\")])) {\n                        this.get(\"objChildren\")[objChild.get(\"sProperty\")] = [objChild];\n                        this.get(\"arrValidationOrder\").push({\n                            bArrayProperty: true,\n                            iOrder: objChild.get(\"iOrder\"),\n                            sProperty: objChild.get(\"sProperty\")\n                        });\n                    } else {\n                        this.get(\"objChildren\")[objChild.get(\"sProperty\")].push(objChild);\n                    }\n                    this._buildInputChildAddedPath([\"objChildren\", objChild.get(\"sProperty\"), objChild.get(\"iArrayOrder\")], objChild);\n                } else {\n                    this.get(\"arrValidationOrder\").push({\n                        bArrayProperty: false,\n                        iOrder: objChild.get(\"iOrder\"),\n                        sProperty: objChild.get(\"sProperty\")\n                    });\n                    this.get(\"objChildren\")[objChild.get(\"sProperty\")] = objChild;\n\n                    this._buildInputChildAddedPath([\"objChildren\", objChild.get(\"sProperty\")], objChild);\n                }\n            },\n            onInputValidationRemove: function onInputValidationRemove(objChild) {\n                if (objChild.get(\"bIsArrayProperty\")) {\n\n                    var arrItems = this.get(\"objChildren\")[objChild.get(\"sProperty\")];\n                    for (var i = 0; i < arrItems.length; i++) {\n                        if (arrItems[i] === objChild) {\n                            this.get(\"objChildren\")[objChild.get(\"sProperty\")].splice(i, 1);\n                            break;\n                        }\n                    }\n\n                    if (this.get(\"objChildren\")[objChild.get(\"sProperty\")].length === 0) {\n                        for (var _i2 = 0; _i2 < this.get(\"arrValidationOrder\").length; _i2++) {\n                            if (this.get(\"arrValidationOrder\")[_i2].sProperty === objChild.get(\"sProperty\")) {\n                                this.get(\"arrValidationOrder\").splice(_i2, 1);\n                                break;\n                            }\n                        }\n                        delete this.get(\"objChildren\")[objChild.get(\"sProperty\")];\n                    }\n                } else {\n                    for (var _i3 = 0; _i3 < this.get(\"arrValidationOrder\").length; _i3++) {\n                        if (this.get(\"arrValidationOrder\")[_i3].sProperty === objChild.get(\"sProperty\")) {\n                            this.get(\"arrValidationOrder\").splice(_i3, 1);\n                            break;\n                        }\n                    }\n                    delete this.get(\"objChildren\")[objChild.get(\"sProperty\")];\n                }\n            },\n            onInputValueChangedAction: function onInputValueChangedAction(arrPathToInputMixin) {\n                this._buildInputValueChangedPath(arrPathToInputMixin);\n            },\n            onAddChildValidationAction: function onAddChildValidationAction(arrPathToInputMixin, objChildMixin) {\n                this._buildInputChildAddedPath(arrPathToInputMixin, objChildMixin);\n            },\n            onErrorMessageSetAction: function onErrorMessageSetAction(objInputMixin, iScrollOffset) {\n                this._onErrorMessageSet(objInputMixin, iScrollOffset);\n            }\n        }\n    });\n});","define(\"a24-ember-lib/mixins/outside-click-handler-mixin\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Mixin.create({\n        onOutsideClick: function onOutsideClick() {},\n        // Placeholder function\n        handleOutsideClick: function handleOutsideClick(objEvent) {\n            var _this = this;\n\n            Ember.run(function () {\n                var objElement = _this.$();\n                var objTarget = Ember.$(objEvent.target);\n\n                // Check if the click is inside the target\n                if (!objTarget.closest(objElement).length) {\n                    _this.onOutsideClick(objEvent); // Handle the click\n                }\n            });\n        },\n        didInsertElement: function didInsertElement() {\n            this._super.apply(this, arguments);\n            this.setupOutsideClickListener();\n        },\n        willDestroyElement: function willDestroyElement() {\n            this._super.apply(this, arguments);\n            this.removeOutsideClickListener();\n        },\n        setupOutsideClickListener: function setupOutsideClickListener() {\n            // Set up the click handler\n            var objClickHandler = this.get(\"handleOutsideClick\").bind(this);\n            return Ember.$(window).on(\"click touchstart\", objClickHandler);\n        },\n        removeOutsideClickListener: function removeOutsideClickListener() {\n            // remove the click handler\n            var objClickHandler = this.get(\"handleOutsideClick\").bind(this);\n            return Ember.$(window).off(\"click touchstart\", Ember.run.cancel(this, objClickHandler));\n        }\n    });\n});","define(\"a24-ember-lib/mixins/query-param-object-builder\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Mixin.create({\n        objQueryParams: null,\n        _sPageParam: null,\n        _objQueryParamBuilderService: Ember.inject.service(\"query-param-object-builder\"),\n        _funcObserverCallback: function _funcObserverCallback() {\n            Ember.run.once(this, this.createQueryParamObject);\n        },\n        _funcQueryParamsObserverCallback: function _funcQueryParamsObserverCallback() {\n            this.setQueryParams();\n        },\n        init: function init() {\n            this._super.apply(this, arguments);\n            //If the page param is going to be used(thus not unset) then check to see that is has a required default value\n            if (typeof this.get(\"page\") !== \"undefined\") {\n                if (a24Core.isEmpty(this.get(\"page\"))) {\n                    console.error( //eslint-disable-line no-console\n                    \"The url query param for 'page' cannot have a default value of empty\");\n                } else {\n                    this.set(\"_sPageParam\", this.get(\"page\"));\n                }\n            }\n\n            var objThis = this;\n            var arrQueryParams = this.get(\"queryParams\");\n\n            //Manually add observes since we want to control them so that they do not fire when the mixin is changing these\n            //values else you would end up with an infinite observe\n            this.addObserver(\"objQueryParams\", this, this.get(\"_funcQueryParamsObserverCallback\"));\n            for (var i = 0; i < arrQueryParams.length; i++) {\n                var sQueryParam = arrQueryParams[i];\n                //Add observer to each of the query params so that we can rebuild the objQueryParams when any params change\n                this.addObserver(sQueryParam, this, this.get(\"_funcObserverCallback\"));\n            }\n\n            this.set(\"objQueryParams\", this.get(\"_objQueryParamBuilderService\").createQueryParamObject(this.get(\"queryParams\"), this, null, true, false));\n\n            Ember.run.once(objThis, objThis.createQueryParamObject);\n        },\n        createQueryParamObject: function createQueryParamObject() {\n            //This function will fire when value of query params in the url changes\n\n            //Remove observer from objQueryParams while we build the new object for it so that it only triggers observes for\n            //outside components observing the objQueryParams\n            this.removeObserver(\"objQueryParams\", this, this.get(\"_funcQueryParamsObserverCallback\"));\n\n            //We copy the object here without using the ember copy since we want a clean object without any binding and not\n            //an ember object that would be returned by the ember copy\n            var objExistingQueryParams = JSON.parse(JSON.stringify(this.get(\"objQueryParams\")));\n\n            //Set the copy of the object back onto the property so that it triggers observe for entire object\n            //This is so that components only need to observe the object and not all the properties individually,\n            //since @each observe only works on arrays\n            this.set(\"objQueryParams\", this.get(\"_objQueryParamBuilderService\").createQueryParamObject(this.get(\"queryParams\"), this, objExistingQueryParams, false, true));\n\n            //Add the observer for the objQueryParams back\n            this.addObserver(\"objQueryParams\", this, this.get(\"_funcQueryParamsObserverCallback\"));\n        },\n        setQueryParams: function setQueryParams() {\n            //This function will listen for changes on the objQueryParams from outside and then update the url with the new\n            //values for the query params\n            var objQueryParams = this.get(\"objQueryParams\");\n            for (var sProperty in objQueryParams) {\n                this.removeObserver(sProperty, this, this.get(\"_funcObserverCallback\"));\n                this.set(sProperty, objQueryParams[sProperty].sValue);\n                this.addObserver(sProperty, this, this.get(\"_funcObserverCallback\"));\n            }\n        },\n        //We have to observe the page param separately since this is a special case for datagrids, since it is not part if\n        //the config in for the array of headers\n        //We observe the objQueryParams.page.sValue here and set that onto another property since the objQueryParams will\n        //get replaced completely each time and thus fire the observes each time regardless if the actual value for page\n        //changed\n        observeParamObjectPageParam: Ember.observer(\"objQueryParams.page.sValue\", function () {\n            this.set(\"_sPageParam\", this.get(\"objQueryParams.page.sValue\"));\n        }),\n        setPageParam: Ember.observer(\"_sPageParam\", function () {\n            this.removeObserver(\"page\", this, this.get(\"_funcObserverCallback\"));\n            this.set(\"page\", this.get(\"_sPageParam\"));\n            this.addObserver(\"page\", this, this.get(\"_funcObserverCallback\"));\n        })\n\n        //#### EXAMPLE OF WHAT CONTROLLER SHOULD LOOK LIKE\n\n        //Add all query param names the queryParams and make property for each in controller\n        //queryParams: [\"one\", \"two\", \"three\", \"four__one\", \"four___one\"],\n        //one: \"some default\", //Give filter default value, when param has this value it will not display in url\n        //two: \"\", //Set to empty string and give value in run next inside init if you want default value in url\n        //three: \"\", //Set all other params that do not have default values to empty string\n        //four__one: \"\", //Use \"__\" for nested objects\n        //four___one: \"\", //Use \"___\" for nested arrays\n        //init: function() {\n        //    this._super(...arguments);\n        //    var objThis = this;\n        //    //Set value in run next when you want it to display default value in url\n        //    Ember.run.next(function() {\n        //        objThis.set(\"two\", \"show default value two in url\");\n        //    });\n        //}\n    });\n});","define(\"a24-ember-lib/mixins/react-datagrid-query-param-builder\", [\"exports\", \"a24-ember-lib/mixins/query-param-object-builder\"], function (exports, _queryParamObjectBuilder) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Mixin.create({\n        queryParams: [\"datagrid_params\"],\n        datagrid_params: \"\"\n    }, _queryParamObjectBuilder.default);\n});","define(\"a24-ember-lib/mixins/react-query-param-builder\", [\"exports\", \"a24-ember-lib/mixins/query-param-object-builder\"], function (exports, _queryParamObjectBuilder) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Mixin.create({\n        queryParams: [\"react_query\"],\n        react_query: \"\"\n    }, _queryParamObjectBuilder.default);\n});","define(\"a24-ember-lib/mixins/template-left-column-resize\", [\"exports\", \"a24-ember-window/mixins/a24responsive\"], function (exports, _a24responsive) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Mixin.create(_a24responsive.default, {\n        iRightColumnWidth: null,\n        bRightColumnVisible: false,\n        _bColumnVisible: false,\n        _bShowRightColumn: false,\n        _iMaxTemplateWidth: null,\n        _bSmallDevice: false,\n        _objWindowConstants: Ember.inject.service(\"a24-constants-window\"),\n        didInsertElement: function didInsertElement() {\n            var _this = this;\n\n            Ember.run.scheduleOnce(\"afterRender\", function () {\n                _this.set(\"_iMaxTemplateWidth\", _this.get(\"_objWindowConstants.SCREEN_SIZE_TABLET_PX\"));\n\n                if (a24Core.isEmpty(_this.get(\"iRightColumnWidth\"))) {\n                    _this.set(\"iRightColumnWidth\", _this.get(\"_objWindowConstants.SCREEN_SIZE_TABLET_PX\") - _this.get(\"_objWindowConstants.SCREEN_SIZE_MOBILE_PX\"));\n                }\n\n                _this.setLeftColumn();\n            });\n        },\n        setLeftColumn: Ember.observer(\"_bColumnVisible\", \"_bSmallDevice\", \"bRightColumnVisible\", function () {\n            var _this2 = this;\n\n            if (!this.get(\"_bSmallDevice\") && this.get(\"bRightColumnVisible\")) {\n                this.set(\"_bShowRightColumn\", true);\n            } else {\n                this.set(\"_bShowRightColumn\", false);\n            }\n            Ember.run.next(function () {\n                Ember.run.scheduleOnce(\"afterRender\", _this2, function () {\n\n                    if (_this2.get(\"_bShowRightColumn\")) {\n                        _this2.$(\".left-Column\").css(\"margin-right\", _this2.get(\"iRightColumnWidth\") - _this2.get(\"_objWindowConstants.SCREEN_REM_BASE\") * 0.75 + 2 + \"px\");\n                        _this2.$(\".a24-right-column-style\").css(\"width\", _this2.get(\"iRightColumnWidth\") + \"px\");\n                    } else {\n                        _this2.$(\".left-Column\").css(\"margin-right\", \"0px\");\n                    }\n                });\n            });\n        }),\n        setSmallDevices: Ember.observer(\"sScreenSize\", function () {\n            if (this.get(\"sScreenSize\") === this.get(\"_objWindowConstants.MEDIA_SIZE_TINY\") || this.get(\"sScreenSize\") === this.get(\"_objWindowConstants.MEDIA_SIZE_MOBILE\")) {\n                this.setRightHandSmallDevice();\n            } else {\n                this.set(\"_bColumnVisible\", true);\n                this.set(\"_bSmallDevice\", false);\n            }\n        }),\n        sRightColumnStyle: Ember.computed(\"sRightStyleWidth\", function () {\n            return \"a24-right-column-style\";\n        }),\n        setRightHandSmallDevice: function setRightHandSmallDevice() {\n            // We are disabling the right side on mobile until it is decided on what is going to happen with the right column on mobile\n            this.set(\"_bSmallDevice\", true);\n            this.set(\"_bColumnVisible\", false);\n        }\n    });\n});","define(\"a24-ember-lib/services/a24-constants-ember-lib\", [\"exports\", \"a24-ember-lookup/services/a24-constants-base\"], function (exports, _a24ConstantsBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _a24ConstantsBase.default.extend({\n\n        //######### Should all go where all the date things will be\n        DATE_FORMAT: \"DD MMM YYYY\",\n        DATE_FORMAT_ISO_FORMAT: \"YYYY-MM-DDTHH:mm:ssZ\",\n        DATE_TIME_FORMAT: \"DD MMM YYYY HH:mm\",\n        DATE_TIME_DASH_FORMAT: \"DD MMM YYYY - HH:mm\",\n        TIME_FORMAT: \"HH:mm\",\n        YEAR_FORMAT: \"YYYY\",\n        MONTH_FORMAT: \"MMM\",\n        MONTH_YEAR_FORMAT: \"MMM YYYY\",\n        DAY_FORMAT: \"DD\",\n        DAY_DATE_FORMAT: \"ddd DD MMM YYYY\",\n\n        MILLISECONDS_1_SECOND: 1000,\n        MILLISECONDS_1_MINUTE: 60000,\n        MILLISECONDS_1_DAY: 86400000,\n\n        MOMENT_TIME_YEARS: \"years\",\n        MOMENT_TIME_MONTHS: \"months\",\n        MOMENT_TIME_WEEKS: \"weeks\",\n        MOMENT_TIME_DATE: \"date\",\n        MOMENT_TIME_DAYS: \"days\",\n        MOMENT_TIME_HOURS: \"hours\",\n        MOMENT_TIME_MINUTES: \"minutes\",\n        MOMENT_TIME_SECONDS: \"seconds\",\n\n        MOMENT_UNIT_ISO_WEEK: \"isoWeek\",\n        MOMENT_UNIT_YEAR: \"year\",\n        MOMENT_UNIT_MONTH: \"month\",\n        MOMENT_TIMEZONE_UTC: \"UTC\",\n\n        MAX_END_HOUR: 23,\n        MAX_END_MIN: 59,\n        MAX_END_SEC: 59,\n\n        //######### Should all go where the header and icons will go\n        // Round Icon Predefined Sizes\n        ROUND_ICON_SIZE_SMALL: \"round-icon-component-small\",\n        ROUND_ICON_SIZE_MEDIUM: \"round-icon-component-medium\",\n        ROUND_ICON_SIZE_LARGE: \"round-icon-component-large\",\n        ROUND_ICON_SIZE_EXTRA_LARGE: \"round-icon-component-extra-large\",\n        ROUND_ICON_SIZE_JUMBO: \"round-icon-component-jumbo\",\n        ROUND_ICON_SIZE_EXTRA_LARGE_PX: 60,\n        // Text/Icon Size\n        ROUND_ICON_CONTENT_SIZE_SMALL: \"round-icon-component-content-small\",\n        ROUND_ICON_CONTENT_SIZE_MEDIUM: \"round-icon-component-content-medium\",\n        ROUND_ICON_CONTENT_SIZE_LARGE: \"round-icon-component-content-large\",\n        ROUND_ICON_CONTENT_SIZE_JUMBO: \"round-icon-component-content-jumbo\",\n\n        //Font sizes\n        FONT_SIZE_H4_PX: 24,\n\n        //Round Icon Header Predefined Sizes\n        ROUND_ICON_HEADER_SIZE_SMALL: \"heading-small\",\n        ROUND_ICON_HEADER_SIZE_MEDIUM: \"heading-medium\",\n        ROUND_ICON_HEADER_SIZE_LARGE: \"heading-large\",\n\n        CARD_DATAGRID_FILTER_QUERY_TYPE_CONTAINS: \"contains\",\n        CARD_DATAGRID_FILTER_QUERY_TYPE_IS: \"is\",\n        CARD_DATAGRID_FILTER_QUERY_TYPE_IS_NOT: \"is_not\",\n        CARD_DATAGRID_FILTER_QUERY_TYPE_STARTS_WITH: \"starts_with\",\n        CARD_DATAGRID_FILTER_QUERY_TYPE_ENDS_WITH: \"ends_with\",\n        CARD_DATAGRID_FILTER_QUERY_TYPE_EMPTY: \"empty\",\n\n        //######### Generic ones, can move to related addons should they ever move to own addons\n        GOOGLE_ANALYTICS_PAGE_VIEW_ID_TOKEN: \"XXXXXX\",\n        URL_VALUE_POPUPS: \"r-pop\",\n\n        //######### Should all go where all the color codes things will be\n        COLOR_SUCCESS: \"#00C851\",\n        COLOR_WARNING: \"#ffbb33\"\n\n    });\n});","define(\"a24-ember-lib/services/a24-enums-ember-lib\", [\"exports\", \"a24-ember-lookup/services/a24-enums-base\"], function (exports, _a24EnumsBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _a24EnumsBase.default.extend({\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objConstantsLib: Ember.inject.service(\"a24-constants-ember-lib\"),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objStrings = this.get(\"_objStringsService\");\n            var objConstants = this.get(\"_objConstantsLib\");\n\n            this.set(\"dateFilterOptions\", {\n                \"DATE_FILTER_TODAY\": {\n                    \"backend\": \"dateFilterToday\",\n                    \"frontend\": objStrings.getString(\"dateFilterToday\")\n                },\n                \"DATE_FILTER_YESTERDAY\": {\n                    \"backend\": \"dateFilterYesterday\",\n                    \"frontend\": objStrings.getString(\"dateFilterYesterday\")\n                },\n                \"DATE_FILTER_THIS_WEEK_TODAY\": {\n                    \"backend\": \"dateFilterThisWeekToday\",\n                    \"frontend\": objStrings.getString(\"dateFilterThisWeekToday\")\n                },\n                \"DATE_FILTER_THIS_WEEK_TO_FRI\": {\n                    \"backend\": \"dateFilterThisWeekToFri\",\n                    \"frontend\": objStrings.getString(\"dateFilterThisWeekToFri\")\n                },\n                \"DATE_FILTER_THIS_WEEK_TO_SUN\": {\n                    \"backend\": \"dateFilterThisWeekToSun\",\n                    \"frontend\": objStrings.getString(\"dateFilterThisWeekToSun\")\n                },\n                \"DATE_FILTER_THIS_LAST_7_DAYS\": {\n                    \"backend\": \"dateFilterLast7Days\",\n                    \"frontend\": objStrings.getString(\"dateFilterLast7Days\")\n                },\n                \"DATE_FILTER_THIS_LAST_WEEK_TO_FRI\": {\n                    \"backend\": \"dateFilterLastWeekToFri\",\n                    \"frontend\": objStrings.getString(\"dateFilterLastWeekToFri\")\n                },\n                \"DATE_FILTER_THIS_LAST_WEEK_TO_SUN\": {\n                    \"backend\": \"dateFilterLastWeekToSun\",\n                    \"frontend\": objStrings.getString(\"dateFilterLastWeekToSun\")\n                },\n                \"DATE_FILTER_THIS_LAST_14_DAYS\": {\n                    \"backend\": \"dateFilterLast14Days\",\n                    \"frontend\": objStrings.getString(\"dateFilterLast14Days\")\n                },\n                \"DATE_FILTER_THIS_MONTH_TO_TODAY\": {\n                    \"backend\": \"dateFilterThisMonthToToday\",\n                    \"frontend\": objStrings.getString(\"dateFilterThisMonthToToday\")\n                },\n                \"DATE_FILTER_THIS_MONTH_TO_END\": {\n                    \"backend\": \"dateFilterThisMonthToEnd\",\n                    \"frontend\": objStrings.getString(\"dateFilterThisMonthToEnd\")\n                },\n                \"DATE_FILTER_THIS_LAST_30_DAYS\": {\n                    \"backend\": \"dateFilterLast30Days\",\n                    \"frontend\": objStrings.getString(\"dateFilterLast30Days\")\n                },\n                \"DATE_FILTER_THIS_LAST_MONTH\": {\n                    \"backend\": \"dateFilterLastMonth\",\n                    \"frontend\": objStrings.getString(\"dateFilterLastMonth\")\n                },\n                \"DATE_FILTER_WITHIN_THE_LAST\": {\n                    \"backend\": \"dateFilterWithinTheLast\",\n                    \"frontend\": objStrings.getString(\"dateFilterWithinTheLast\")\n                },\n                \"DATE_FILTER_WITHIN_THE_NEXT\": {\n                    \"backend\": \"dateFilterWithinTheNext\",\n                    \"frontend\": objStrings.getString(\"dateFilterWithinTheNext\")\n                },\n                \"DATE_FILTER_NOT_WITHIN_THE_LAST\": {\n                    \"backend\": \"dateFilterNotWithinTheLast\",\n                    \"frontend\": objStrings.getString(\"dateFilterNotWithinTheLast\")\n                },\n                \"DATE_FILTER_NOT_WITHIN_THE_NEXT\": {\n                    \"backend\": \"dateFilterNotWithinTheNext\",\n                    \"frontend\": objStrings.getString(\"dateFilterNotWithinTheNext\")\n                },\n                \"DATE_FILTER_CUSTOM_RANGE\": {\n                    \"backend\": \"dateFilterCustomRange\",\n                    \"frontend\": objStrings.getString(\"dateFilterCustomRange\")\n                }\n            });\n            this.set(\"dateFilterOptionsFutureDates\", {\n                \"DATE_FILTER_FUTURE_DATES_TODAY\": {\n                    \"backend\": \"dateFilterFutureDatesToday\",\n                    \"frontend\": objStrings.getString(\"dateFilterFutureDatesToday\")\n                },\n                \"DATE_FILTER_FUTURE_DATES_REST_OF_WEEK\": {\n                    \"backend\": \"dateFilterFutureDatesRestOfWeek\",\n                    \"frontend\": objStrings.getString(\"dateFilterFutureDatesRestOfWeek\")\n                },\n                \"DATE_FILTER_FUTURE_DATES_REST_OF_MONTH\": {\n                    \"backend\": \"dateFilterFutureDatesRestOfMonth\",\n                    \"frontend\": objStrings.getString(\"dateFilterFutureDatesRestOfMonth\")\n                },\n                \"DATE_FILTER_FUTURE_DATES_WITHIN_THE_NEXT\": {\n                    \"backend\": \"dateFilterFutureDatesWithinTheNext\",\n                    \"frontend\": objStrings.getString(\"dateFilterFutureDatesWithinTheNext\")\n                },\n                \"DATE_FILTER_FUTURE_DATES_CUSTOM\": {\n                    \"backend\": \"dateFilterFutureDatesCustomRange\",\n                    \"frontend\": objStrings.getString(\"dateFilterFutureDatesCustomRange\")\n                }\n            });\n\n            this.set(\"dateFilterOptionsBetween\", {\n                \"DATE_FILTER_BETWEEN\": {\n                    \"backend\": \"dateFilterBetween\",\n                    \"frontend\": objStrings.getString(\"dateFilterBetween\")\n                }\n            });\n\n            this.set(\"dateFilterOptionsExpiry\", {\n                \"DATE_FILTER_EXPIRY_NOT_EXPIRED\": {\n                    \"backend\": \"dateFilterExpiryNotExpired\",\n                    \"frontend\": objStrings.getString(\"dateFilterExpiryNotExpired\")\n                },\n                \"DATE_FILTER_EXPIRY_NOT_EXPIRED_GRACE\": {\n                    \"backend\": \"dateFilterExpiryNotExpiredGrace\",\n                    \"frontend\": objStrings.getString(\"dateFilterExpiryNotExpiredGrace\")\n                },\n                \"DATE_FILTER_EXPIRY_WILL_NOT_EXPIRE\": {\n                    \"backend\": \"dateFilterExpiryWillNotExpire\",\n                    \"frontend\": objStrings.getString(\"dateFilterExpiryWillNotExpire\")\n                },\n                \"DATE_FILTER_EXPIRY_AFTER\": {\n                    \"backend\": \"dateFilterExpiryAfter\",\n                    \"frontend\": objStrings.getString(\"dateFilterExpiryAfter\")\n                }\n            });\n\n            this.set(\"dateFilterOptionsObtained\", {\n                \"DATE_FILTER_OBTAINED_WITHIN_LAST\": {\n                    \"backend\": \"dateFilterObtainedWithinLast\",\n                    \"frontend\": objStrings.getString(\"dateFilterObtainedWithinLast\")\n                },\n                \"DATE_FILTER_OBTAINED_AT_LEAST\": {\n                    \"backend\": \"dateFilterObtainedAtLeast\",\n                    \"frontend\": objStrings.getString(\"dateFilterObtainedAtLeast\")\n                }\n            });\n\n            this.set(\"dateFilterOptionsNotEmpty\", {\n                \"DATE_FILTER_NOT_EMPTY\": {\n                    \"backend\": \"dateFilterNotEmpty\",\n                    \"frontend\": objStrings.getString(\"dateFilterNotEmpty\")\n                }\n            });\n\n            this.set(\"filterOptionsTextType\", {\n                \"IS\": {\n                    \"backend\": objConstants.CARD_DATAGRID_FILTER_QUERY_TYPE_IS,\n                    \"frontend\": objStrings.getString(\"is\")\n                },\n                \"IS_NOT\": {\n                    \"backend\": objConstants.CARD_DATAGRID_FILTER_QUERY_TYPE_IS_NOT,\n                    \"frontend\": objStrings.getString(\"isNot\")\n                },\n                \"STARTS_WITH\": {\n                    \"backend\": objConstants.CARD_DATAGRID_FILTER_QUERY_TYPE_STARTS_WITH,\n                    \"frontend\": objStrings.getString(\"startsWith\")\n                },\n                \"ENDS_WITH\": {\n                    \"backend\": objConstants.CARD_DATAGRID_FILTER_QUERY_TYPE_ENDS_WITH,\n                    \"frontend\": objStrings.getString(\"endsWith\")\n                }\n            });\n\n            this.set(\"filterOptionsType\", {\n                \"IS_NOT\": {\n                    \"backend\": objConstants.CARD_DATAGRID_FILTER_QUERY_TYPE_IS_NOT,\n                    \"frontend\": objStrings.getString(\"isNot\")\n                }\n            });\n\n            this.set(\"intFilterOptions\", {\n                \"EQUAL_TO\": {\n                    \"backend\": \"equal_to\",\n                    \"frontend\": objStrings.getString(\"equalTo\")\n                },\n                \"BIGGER_THAN\": {\n                    \"backend\": \"bigger_than\",\n                    \"frontend\": objStrings.getString(\"biggerThan\")\n                },\n                \"SMALLER_THAN\": {\n                    \"backend\": \"smaller_than\",\n                    \"frontend\": objStrings.getString(\"smallerThan\")\n                }\n            });\n        }\n    });\n});","define(\"a24-ember-lib/services/a24-strings-ember-lib\", [\"exports\", \"a24-ember-lookup/services/a24-strings-base\"], function (exports, _a24StringsBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n\n    /**\n     * The string service for the ember lib\n     *\n     * @author Ruan Naude <ruan.naude@a24group.com>\n     * @since  31 Oct 2018\n     */\n    var objStrings = {\n        _objStrings: {\n            alreadyHaveFilter: \"You already have a filter applied to this field, would you like to:\",\n            refine: \"Refine(AND)\",\n            expand: \"Expand(OR)\",\n            applyAndRefine: \"Apply and Refine(AND)\",\n            applyAndExpand: \"Apply and Expand(OR)\",\n            updateFilter: \"Update Filter\",\n            startOver: \"Start Over\",\n            datagridReload: \"Could not load data, please click the refresh icon at the top right of the table to retry\",\n            reload: \"Reload\",\n            seeMore: \"See more\",\n            suggestionEmpty: \"No Suggestions\",\n            empty: \"Empty\",\n            loading: \"Loading...\",\n\n            chooseImage: \"Choose Image\",\n            selectImage: \"Select Image\",\n            zoomIn: \"Zoom In\",\n            zoomOut: \"Zoom Out\",\n            rotateLeft: \"Rotate Left\",\n            rotateRight: \"Rotate Right\",\n            removeAvatarConfirmation: \"Are you sure you want to remove your profile picture?\",\n\n            between: \"Between\",\n            after: \"After\",\n            before: \"Before\",\n\n            many: \"Many\",\n\n            fileInputPlaceHolder: \"Please select a file...\",\n\n            savedSearch: \"Saved Search\",\n            saveSearch: \"Save Search\",\n            addSavedSearch: \"Add saved search\",\n            requiredPermission: \"You do not have the required permissions to perform this operation\",\n            selectSavedSearch: \"Select Saved Search...\",\n            nameAlreadyExists: \"Name already exists\",\n            exportData: \"Export Data\",\n            areYouSureYouWantToExport: \"Are you sure you want to export all the data?\",\n            dataWillBeEmailed: \"The data will be emailed to your email address on the system as a csv file.\",\n            largeDataExport: \"This is a large data export\",\n            tooManyResults: \"There are too many search results to export, please apply more search criteria.\",\n            dataHasBeenSent: \"The data has been sent to your email address.\",\n            somethingWentWrongTryAgain: \"Something went wrong. Please try again.\",\n            endOfResults: \"You have reached the end of your result set\",\n\n            validationFirstPartPostCodeTooManyCharacters: \"The first part of the postcode has too many characters. Max 4 characters is allowed\",\n            validationFirstPartPostCodeCannotHaveMoreThanTwoNumbers: \"The first part of the postcode cannot contain more than two numbers\",\n            validationFirstPartPostCodeMustAlwaysStartWithLetter: \"The first part of the postcode must always start with a letter\",\n            validationFirstPartPostCodeFirstLetter: \"The first letter of the first part may not contain one of the following letters. 'Q,V,X'\",\n            validationFirstPartPostCodeSecondLetter: \"The second letter of the first part may not contain one of the following letters. 'I,J,Z'\",\n            validationFirstPartPostCodeMustAlwaysContainNumber: \"The first part of the postcode must always contain a number\",\n            validationFirstPartPostCodeLastLetterA9A: \"The first part of the postcode must always end with the following letters 'A,B,C,D,E,F,G,H,J,K,P,S,T,U,W' when postcode structure is 'A9A'\",\n            validationFirstPartPostCodeLastLetterAA9A: \"The first part of the postcode must always end with the following letters 'A,B,E,H,M,N,P,R,V,W,X,Y' when postcode structure is 'AA9A'\",\n            validationFirstPartPostCodeMustEndWithNumber: \"The first part of the postcode must end with a number when postcode structures is 'A99, AA9, AA99'\",\n            validationFirstPartPostCode2CharStucture: \"The first part of the post code does not match the structure of 'A9'\",\n            validationFirstPartPostCode3CharStucture: \"The first part of the post code does not match the following structures. 'A99', 'A9A', 'AA9'\",\n            validationFirstPartPostCode4CharStucture: \"The first part of the post code does not match the following structures. 'AA9A', 'AA99'\",\n\n            validationSecondPartPostCodeHasInvalidCharacters: \"The second part of the post code can not contain any of the following characters 'C, I, K, M, O, V'\",\n            validationSecondPartPostCodeMustStartWithNumber: \"The second part of the post code must start with a number\",\n            validationSecondPartPostCodeCannotHaveMoreThanTwoNumbers: \"The second part of the post code cannot contain more than one number\",\n            validationSecondPartPostIsNotValidFormat: \"The second part of the post code does not match the structure of '9AA'\",\n            validationPostCodeHasSpecialCharacters: \"Postcode may only contain numbers and letters\",\n\n            validationUsPostCode: \"The Zip code is not Valid\",\n\n            validationAuPostCode: \"The Postcode is not Valid\",\n\n            moreWithIcon: \"More<span class='title-bar-more-dropdown-arrow cursor-clickable'></span>\"\n        }\n    };\n    exports.default = _a24StringsBase.default.extend(objStrings);\n});","define(\"a24-ember-lib/services/bread-crumb\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        arrBreadCrumbItems: null,\n        _arrCustomBreadCrumbItems: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n            if (this.get(\"arrBreadCrumbItems\") === null) {\n                this.set(\"arrBreadCrumbItems\", []);\n            }\n            if (this.get(\"_arrCustomBreadCrumbItems\") === null) {\n                this.set(\"_arrCustomBreadCrumbItems\", []);\n            }\n        },\n        /**\n         * This is used to set a page's breadcrumb bar items\n         *\n         * @param arrBreadCrumbItems - Array of bread crumb objects\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  26 May 2016\n         */\n        setBreadCrumbItems: function setBreadCrumbItems(arrBreadCrumbItems) {\n            if (!a24Core.isEmpty(this.get(\"_arrCustomBreadCrumbItems\"))) {\n                this.set(\"arrBreadCrumbItems\", this.get(\"_arrCustomBreadCrumbItems\"));\n                this.set(\"_arrCustomBreadCrumbItems\", []);\n            } else {\n                this.set(\"arrBreadCrumbItems\", arrBreadCrumbItems);\n            }\n        },\n        /**\n         * This is used to set a page's custom breadcrumb bar items\n         *\n         * @param arrBreadCrumbItems - Array of bread crumb objects\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  26 May 2016\n         */\n        setCustomBreadItems: function setCustomBreadItems(arrBreadCrumbItems) {\n            this.set(\"_arrCustomBreadCrumbItems\", arrBreadCrumbItems);\n        }\n    });\n});","define(\"a24-ember-lib/services/card-datagrid-filter-custom-base\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        funcFilterCustomPrimaryQuery: null,\n        // function(objHeaderItem, objHeaderSecondaries) {\n        //     //The returned object is the object that will be send to rest helper.\n        //     //Could contain only the primary value or add some secondaries depending how the custom filter\n        //     //for primary works\n        //     return {\n        //         bLike: true,\n        //         bEncode: true,\n        //         mValue: get(objHeaderItem, \"_sFilterCustomPropThingy\"), //pull this value from custom properties added to the objHeaderItem\n        //         // arSec: [\n        //         //     {\n        //         //         sProp: \"version\",\n        //         //         mValue: 23\n        //         //     }\n        //         // ]\n        //     };\n        // },\n        funcFilterCustomTag: null,\n        // function(objHeaderItem, objQuery, objHeadersSecondaries, bSkipTitle) {\n        //     //Here the custom properties added to the objHeaderItem would have been cleared so tag needs to be\n        //     //build up from the objQuery values\n        //\n        //     //Here we build up the tag for the custom item since this might be different for custom items.\n        //     //We can also make the _createAdvanceTagSingleProp public that is in the card datagrid filter service\n        //     //and then call it from here since I think that will still cover most scenarios\n        //\n        //     //The bSkipTitle caters for `AND` and `OR` tag buildup\n        //     //When bSkipTitle is true then the string returned should not start with the primary title e.g\n        //     //\"First Name contains bloep, Last name is Tom\" <--bSkipTitle = false (we lowercase the contains)\n        //     //\"Contains bloep, Last name is Tom\" <--bSkipTitle = false (we do NOT lowercase the contains)\n        //\n        //     NOTE: See how sTagSimple is the full/expanded version of the tag, no compressing values/groups\n        //     also the expanded values should be alphabetical and also only return sTagSimple if you had such\n        //     a case.\n        //\n        //     return {\n        //         sTag: \"Status is Multiple, First name is \" + objQuery.mValue,\n        //         sTagSimple: \"Status is (Active, Inactive, Other), First name is \" + objQuery.mValue\"\n        //     }\n        funcFilterCustomPrimaryReset: null,\n        // function(objHeaderItem) {\n        //     //Rest the state of the custom filter input\n        //     set(objHeaderItem, \"_sFilterCustomPropThingy\", null);\n        // }\n        funcFilterCustomFixupQuery: null,\n        // function(objHeader, objHeaderSecondaries) {\n        //     //Here you need to fix values that might not be correct or supported. You will need to loop throught all the\n        //     //items in the objHeader.mFilterValue to do this. Each item in there will look like what you returned inspect\n        //     //funcFilterCustomPrimaryQuery or future function funcFilterCustomSecondaryQuery\n        //     //We need to set the correct to and from date for dates that have a value like\n        //     //dateFilterYesterday since yesterday will have different dates depending when you execute it\n        //     //Currently we only have dates that work this way, so if you have something similar the fix it up here\n        //     //else in most cases this can just remain empty.\n        // }\n        funcFilterCustomSetEditState: null,\n        // function(objHeaderItem, iIndex) {\n        //     //Here you need to set back the filter values onto the objHeaderItem\n        //     //You can retrieve the filter values for the filter being edited by\n        //     //objHeaderItem.mFilterValue[iIndex];\n        //\n        // }\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            if (a24Core.isEmpty(this.get(\"funcFilterCustomPrimaryQuery\")) || a24Core.isEmpty(this.get(\"funcFilterCustomTag\")) || a24Core.isEmpty(this.get(\"funcFilterCustomPrimaryReset\")) || a24Core.isEmpty(this.get(\"funcFilterCustomFixupQuery\")) || a24Core.isEmpty(this.get(\"funcFilterCustomSetEditState\"))) {\n                //eslint-disable-next-line no-console\n                console.warn(\"Not all required functions were implemented for the service that extend \" + \"card-datagrid-filter-custom-base\");\n            }\n        }\n    });\n});","define(\"a24-ember-lib/services/card-datagrid-filter\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objEnumEmberLibService: Ember.inject.service(\"a24-enums-ember-lib\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objEmberLibStringsService: Ember.inject.service(\"a24-strings-ember-lib\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n\n        validateSecondaries: function validateSecondaries(arrSecondaries) {\n            for (var i = 0; i < arrSecondaries.length; i++) {\n                var objSecondary = arrSecondaries[i];\n                if (objSecondary._bEmptyEntriesOnly) {\n                    continue;\n                }\n                if (Ember.get(objSecondary, \"sFilterType\") === \"int\") {\n                    if (objSecondary.bFilterRequired) {\n                        if (a24Core.isEmpty(objSecondary._iFilterValue) || a24Core.isEmpty(objSecondary._objFilterValue)) {\n                            return true;\n                        }\n                    }\n                    if (!a24Core.isEmpty(objSecondary.funcFilterValidation)) {\n                        var mIntValidationReturn = objSecondary.funcFilterValidation();\n                        if (!a24Core.isEmpty(mIntValidationReturn)) {\n                            return mIntValidationReturn;\n                        }\n                    }\n                    if (!a24Core.isEmpty(objSecondary._objFilterValue) && a24Core.isEmpty(objSecondary._iFilterValue)) {\n                        return true;\n                    }\n                } else if (Ember.get(objSecondary, \"sFilterType\") === \"text\") {\n                    if (objSecondary.bFilterRequired) {\n                        if (a24Core.isEmpty(objSecondary._sFilterValue)) {\n                            return true;\n                        }\n                    }\n                    if (!a24Core.isEmpty(objSecondary.funcFilterValidation)) {\n                        var mTextValidationReturn = objSecondary.funcFilterValidation();\n                        if (!a24Core.isEmpty(mTextValidationReturn)) {\n                            return mTextValidationReturn;\n                        }\n                    }\n                } else if (Ember.get(objSecondary, \"sFilterType\") === \"bool\") {\n                    if (objSecondary.bFilterRequired) {\n                        if (a24Core.isEmpty(objSecondary._objFilterValue)) {\n                            return true;\n                        }\n                    }\n                    if (!a24Core.isEmpty(objSecondary.funcFilterValidation)) {\n                        var mBoolValidationReturn = objSecondary.funcFilterValidation();\n                        if (!a24Core.isEmpty(mBoolValidationReturn)) {\n                            return mBoolValidationReturn;\n                        }\n                    }\n                } else if (Ember.get(objSecondary, \"sFilterType\") === \"dropdown\") {\n                    if (objSecondary.bFilterRequired) {\n                        if (a24Core.isEmpty(objSecondary._objFilterValue)) {\n                            return true;\n                        }\n                    }\n                    if (!a24Core.isEmpty(objSecondary.funcFilterValidation)) {\n                        var mDropdownValidationReturn = objSecondary.funcFilterValidation();\n                        if (!a24Core.isEmpty(mDropdownValidationReturn)) {\n                            return mDropdownValidationReturn;\n                        }\n                    }\n                } else if (Ember.get(objSecondary, \"sFilterType\") === \"dropdownMulti\") {\n                    if (objSecondary.bFilterRequired) {\n                        if (a24Core.isEmpty(objSecondary._arrFilterValue)) {\n                            return true;\n                        }\n                    }\n                    if (!a24Core.isEmpty(objSecondary.funcFilterValidation)) {\n                        var mDropdownMultiValidationReturn = objSecondary.funcFilterValidation();\n                        if (!a24Core.isEmpty(mDropdownMultiValidationReturn)) {\n                            return mDropdownMultiValidationReturn;\n                        }\n                    }\n                } else if (Ember.get(objSecondary, \"sFilterType\") === \"date\") {\n                    if (objSecondary.bFilterRequired) {\n                        if (a24Core.isEmpty(objSecondary._sFromDate) && a24Core.isEmpty(objSecondary._sToDate)) {\n                            if (a24Core.isEmpty(objSecondary._iFilterValue) || objSecondary._iFilterValue === 0) {\n                                return true;\n                            }\n                        }\n                    }\n                    if (!a24Core.isEmpty(objSecondary._sFromDate) && !a24Core.isEmpty(objSecondary._sToDate)) {\n                        var objFromDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n                        objFromDate.setDateFromBrowser(objSecondary._sFromDate, this.get(\"_objLibConstants.DATE_FORMAT\"));\n\n                        var objToDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n                        objToDate.setDateFromBrowser(objSecondary._sToDate, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                        if (objToDate.isBefore(objFromDate)) {\n                            this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsService\").getTokenString(\"validationDateBefore\", \"To Date\", \"From Date\"));\n                            return true;\n                        }\n                    }\n                    if (!a24Core.isEmpty(objSecondary.funcFilterValidation)) {\n                        var mDateValidationReturn = objSecondary.funcFilterValidation();\n                        if (!a24Core.isEmpty(mDateValidationReturn)) {\n                            return mDateValidationReturn;\n                        }\n                    }\n                    if (!a24Core.isEmpty(objSecondary._objFilterValue) && a24Core.isEmpty(objSecondary._sFromDate) && a24Core.isEmpty(objSecondary._sToDate)) {\n                        if (a24Core.isEmpty(objSecondary._iFilterValue) || objSecondary._iFilterValue === 0) {\n                            return true;\n                        }\n                    }\n                }\n            }\n        },\n        setValuesForSecondariesFilter: function setValuesForSecondariesFilter(arrSecondaries, objFilterValue) {\n            if (!a24Core.isEmpty(arrSecondaries) && !a24Core.isEmpty(objFilterValue.arSec)) {\n                for (var i = 0; i < arrSecondaries.length; i++) {\n                    var objSecondary = arrSecondaries[i];\n                    for (var j = 0; j < objFilterValue.arSec.length; j++) {\n                        if (objSecondary.sProperty === objFilterValue.arSec[j].sProp) {\n                            var objSecondaryQuery = objFilterValue.arSec[j];\n                            if (objSecondaryQuery.mValue === \"null\") {\n                                Ember.set(objSecondary, \"_bEmptyEntriesOnly\", true);\n                            } else if (Ember.get(objSecondary, \"_bIntFilter\")) {\n                                Ember.set(objSecondary, \"_iFilterValue\", objSecondaryQuery.mValue);\n\n                                if (objSecondaryQuery.bAfter) {\n                                    Ember.set(objSecondary, \"_objFilterValue\", {\n                                        sValue: this.get(\"_objEnumEmberLibService.intFilterOptions.BIGGER_THAN.backend\")\n                                    });\n                                } else if (objSecondaryQuery.bBefore) {\n                                    Ember.set(objSecondary, \"_objFilterValue\", {\n                                        sValue: this.get(\"_objEnumEmberLibService.intFilterOptions.SMALLER_THAN.backend\")\n                                    });\n                                } else {\n                                    Ember.set(objSecondary, \"_objFilterValue\", {\n                                        sValue: this.get(\"_objEnumEmberLibService.intFilterOptions.EQUAL_TO.backend\")\n                                    });\n                                }\n                            } else if (Ember.get(objSecondary, \"_bTextFilter\")) {\n                                Ember.set(objSecondary, \"_sFilterValue\", objSecondaryQuery.mValue);\n                            } else if (Ember.get(objSecondary, \"_bBoolFilter\")) {\n                                Ember.set(objSecondary, \"_objFilterValue\", {\n                                    sValue: objSecondaryQuery.mValue + \"\"\n                                });\n                            } else if (Ember.get(objSecondary, \"_bDropDownFilter\")) {\n                                Ember.set(objSecondary, \"_objFilterValue\", {\n                                    sValue: objSecondaryQuery.mValue\n                                });\n                            } else if (Ember.get(objSecondary, \"_bDropDownMultiFilter\")) {\n                                var arrFilterValue = objSecondaryQuery.mValue.split(\"|\").map(function (sValue) {\n                                    return {\n                                        sValue: sValue\n                                    };\n                                });\n                                Ember.set(objSecondary, \"_arrFilterValue\", arrFilterValue);\n                            } else if (Ember.get(objSecondary, \"_bDateFilter\")) {\n                                Ember.set(objSecondary, \"_bInternalValueChange\", true);\n                                var objCurrentDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                                var objFromDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                                var objToDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                                if (!a24Core.isEmpty(objSecondaryQuery.sFilterValue) && objSecondaryQuery.sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_WITHIN_LAST.backend\"), 0) === 0) {\n                                    var sUnit = objSecondaryQuery.sFilterValue.split(\"_\")[1];\n\n                                    objFromDate.setDateFromRest(objSecondaryQuery.mValue.sFrom);\n                                    objToDate.setDateFromRest(objSecondaryQuery.mValue.sTo);\n                                    objFromDate.setTimeToStartOfDay();\n                                    objToDate.setTimeToStartOfDay();\n\n                                    Ember.set(objSecondary, \"_iFilterValue\", Math.round(objFromDate.difference(objToDate, sUnit, true)));\n\n                                    Ember.set(objSecondary, \"_sToDate\", objToDate.getDateFormat());\n                                    Ember.set(objSecondary, \"_sFromDate\", objFromDate.getDateFormat());\n                                } else if (!a24Core.isEmpty(objSecondaryQuery.sFilterValue) && objSecondaryQuery.sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_AT_LEAST.backend\"), 0) === 0) {\n                                    var _sUnit = objSecondaryQuery.sFilterValue.split(\"_\")[1];\n                                    objToDate.setDateFromRest(objSecondaryQuery.mValue);\n                                    objCurrentDate.setTimeToStartOfDay();\n                                    objToDate.setTimeToStartOfDay();\n\n                                    Ember.set(objSecondary, \"_iFilterValue\", Math.round(objCurrentDate.difference(objToDate, _sUnit, true)));\n\n                                    Ember.set(objSecondary, \"_sToDate\", objToDate.getDateFormat());\n                                    Ember.set(objSecondary, \"_sFromDate\", \"\");\n                                } else if (!a24Core.isEmpty(objSecondaryQuery.sFilterValue) && objSecondaryQuery.sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_WILL_NOT_EXPIRE.backend\"), 0) === 0) {\n                                    var _sUnit2 = objSecondaryQuery.sFilterValue.split(\"_\")[1];\n\n                                    objFromDate.setDateFromRest(objSecondaryQuery.mValue);\n                                    objFromDate.setTimeToStartOfDay();\n                                    objCurrentDate.setTimeToStartOfDay();\n\n                                    Ember.set(objSecondary, \"_iFilterValue\", Math.round(objFromDate.difference(objCurrentDate, _sUnit2, true)));\n\n                                    Ember.set(objSecondary, \"_sToDate\", \"\");\n                                    Ember.set(objSecondary, \"_sFromDate\", objFromDate.getDateFormat());\n                                } else if (!a24Core.isEmpty(objSecondaryQuery.sFilterValue) && objSecondaryQuery.sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED_GRACE.backend\"), 0) === 0) {\n                                    var _sUnit3 = objSecondaryQuery.sFilterValue.split(\"_\")[1];\n\n                                    objFromDate.setDateFromRest(objSecondaryQuery.mValue);\n                                    objFromDate.setTimeToStartOfDay();\n                                    objCurrentDate.setTimeToStartOfDay();\n\n                                    Ember.set(objSecondary, \"_iFilterValue\", Math.round(objCurrentDate.difference(objFromDate, _sUnit3, true)));\n\n                                    Ember.set(objSecondary, \"_sToDate\", \"\");\n                                    Ember.set(objSecondary, \"_sFromDate\", objFromDate.getDateFormat());\n                                } else if (!a24Core.isEmpty(objSecondaryQuery.sFilterValue) && objSecondaryQuery.sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsBetween.DATE_FILTER_BETWEEN.backend\"), 0) === 0) {\n                                    var arrExtraOptions = objSecondaryQuery.sFilterValue.split(\"_\");\n                                    Ember.set(objSecondary, \"_objBetweenOption\", arrExtraOptions[1]);\n                                    Ember.set(objSecondary, \"_iFilterValue\", arrExtraOptions[2]);\n                                    Ember.set(objSecondary, \"_iFilterValueTo\", arrExtraOptions[3]);\n\n                                    var iDays = parseInt(arrExtraOptions[2]);\n                                    var iDaysTo = parseInt(arrExtraOptions[3]);\n\n                                    var iHigh = iDays >= iDaysTo ? iDays : iDaysTo;\n                                    var iLow = iDays < iDaysTo ? iDays : iDaysTo;\n                                    if (arrExtraOptions[1] === \"ago\") {\n                                        objFromDate.setTimeToStartOfDay();\n                                        objFromDate.subtractTimeFromDate(this.get(\"_objLibConstants.MOMENT_TIME_DAYS\"), iHigh);\n                                        objToDate.setTimeToEndOfDay();\n                                        objToDate.subtractTimeFromDate(this.get(\"_objLibConstants.MOMENT_TIME_DAYS\"), iLow);\n                                    } else if (arrExtraOptions[1] === \"fromToday\") {\n                                        objFromDate.setTimeToStartOfDay();\n                                        objFromDate.addTimeToDate(this.get(\"_objLibConstants.MOMENT_TIME_DAYS\"), iLow);\n                                        objToDate.setTimeToEndOfDay();\n                                        objToDate.addTimeToDate(this.get(\"_objLibConstants.MOMENT_TIME_DAYS\"), iHigh);\n                                    }\n\n                                    Ember.set(objSecondary, \"_sToDate\", objToDate.getDateFormat());\n                                    Ember.set(objSecondary, \"_sFromDate\", objFromDate.getDateFormat());\n                                } else if (!a24Core.isEmpty(objSecondaryQuery.sFilterValue) && objSecondaryQuery.sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_EMPTY.backend\"), 0) === 0) {\n\n                                    Ember.set(objSecondary, \"_sToDate\", \"\");\n                                    Ember.set(objSecondary, \"_sFromDate\", momentHelper.timeStampTimezoneFormat(0, \"utc\", a24Constants.DATE_FORMAT));\n                                } else if (objSecondaryQuery.bFromAndTo || objSecondaryQuery.bNotWithinNext || objSecondaryQuery.bNotWithinLast) {\n                                    objFromDate.setDateFromRest(objSecondaryQuery.mValue.sFrom);\n                                    objToDate.setDateFromRest(objSecondaryQuery.mValue.sTo);\n                                    if (objSecondaryQuery.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_WITHIN_THE_LAST.backend\") || objSecondaryQuery.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_WITHIN_THE_NEXT.backend\") || objSecondaryQuery.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_WITHIN_THE_NEXT.backend\") || objSecondaryQuery.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_LAST.backend\") || objSecondaryQuery.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_NEXT.backend\")) {\n                                        objFromDate.setTimeToStartOfDay();\n                                        objToDate.setTimeToStartOfDay();\n                                        Ember.set(objSecondary, \"_iFilterValue\", Math.round(objFromDate.difference(objToDate, a24Constants.MOMENT_TIME_DAYS), true));\n                                    }\n                                    Ember.set(objSecondary, \"_sToDate\", objToDate.getDateFormat());\n                                    Ember.set(objSecondary, \"_sFromDate\", objFromDate.getDateFormat());\n                                } else if (objSecondaryQuery.bFrom) {\n                                    Ember.set(objSecondary, \"_sToDate\", \"\");\n                                    objCurrentDate.setDateFromRest(objSecondaryQuery.mValue);\n                                    Ember.set(objSecondary, \"_sFromDate\", objCurrentDate.getDateFormat());\n                                } else if (objSecondaryQuery.bTo) {\n                                    Ember.set(objSecondary, \"_sFromDate\", \"\");\n                                    objCurrentDate.setDateFromRest(objSecondaryQuery.mValue);\n                                    Ember.set(objSecondary, \"_sToDate\", objCurrentDate.getDateFormat());\n                                }\n                                Ember.set(objSecondary, \"_bInternalValueChange\", false);\n\n                                Ember.set(objSecondary, \"_objFilterValue\", {\n                                    sValue: objSecondaryQuery.sFilterValue\n                                });\n                            }\n                        }\n                    }\n                }\n            }\n        },\n        getDateFromAndToValues: function getDateFromAndToValues(sDateOption, iDays, iDaysTo) {\n            var sFromDate = \"\";\n            var sToDate = \"\";\n            var sFromTime = \"\";\n            var sToTime = \"\";\n            var bCustomRange = false;\n            var bNotInset = false;\n\n            //This code can be moved out to a different function later if we want to reuse it. For now it will be\n            //kept in this component\n            var objCurrentDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n            if (sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_TODAY.backend\") || sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_TODAY.backend\")) {\n                objCurrentDate.setTimeToStartOfDay();\n                sFromDate = objCurrentDate.getDateFormat();\n                sFromTime = objCurrentDate.getTimeFormat();\n                objCurrentDate.setTimeToEndOfDay();\n                sToDate = objCurrentDate.getDateFormat();\n                sToTime = objCurrentDate.getTimeFormat();\n            } else if (sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_YESTERDAY.backend\")) {\n                objCurrentDate.subtractTimeFromDate(this.get(\"_objLibConstants.MOMENT_TIME_DAYS\"), 1);\n                objCurrentDate.setTimeToStartOfDay();\n                sFromDate = objCurrentDate.getDateFormat();\n                sFromTime = objCurrentDate.getTimeFormat();\n                objCurrentDate.setTimeToEndOfDay();\n                sToDate = objCurrentDate.getDateFormat();\n                sToTime = objCurrentDate.getTimeFormat();\n            } else if (sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_THIS_WEEK_TODAY.backend\")) {\n                objCurrentDate.setTimeToEndOfDay();\n                sToDate = objCurrentDate.getDateFormat();\n                sToTime = objCurrentDate.getTimeFormat();\n                objCurrentDate.startOf(this.get(\"_objLibConstants.MOMENT_UNIT_ISO_WEEK\"));\n                objCurrentDate.setTimeToStartOfDay();\n                sFromDate = objCurrentDate.getDateFormat();\n                sFromTime = objCurrentDate.getTimeFormat();\n            } else if (sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_THIS_WEEK_TO_FRI.backend\")) {\n                objCurrentDate.startOf(this.get(\"_objLibConstants.MOMENT_UNIT_ISO_WEEK\"));\n                objCurrentDate.setTimeToStartOfDay();\n                sFromDate = objCurrentDate.getDateFormat();\n                sFromTime = objCurrentDate.getTimeFormat();\n                objCurrentDate.endOf(this.get(\"_objLibConstants.MOMENT_UNIT_ISO_WEEK\"));\n                objCurrentDate.subtractTimeFromDate(this.get(\"_objLibConstants.MOMENT_TIME_DAYS\"), 2);\n                objCurrentDate.setTimeToEndOfDay();\n                sToDate = objCurrentDate.getDateFormat();\n                sToTime = objCurrentDate.getTimeFormat();\n            } else if (sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_THIS_WEEK_TO_SUN.backend\")) {\n                objCurrentDate.startOf(this.get(\"_objLibConstants.MOMENT_UNIT_ISO_WEEK\"));\n                objCurrentDate.setTimeToStartOfDay();\n                sFromDate = objCurrentDate.getDateFormat();\n                sFromTime = objCurrentDate.getTimeFormat();\n                objCurrentDate.endOf(this.get(\"_objLibConstants.MOMENT_UNIT_ISO_WEEK\"));\n                objCurrentDate.setTimeToEndOfDay();\n                sToDate = objCurrentDate.getDateFormat();\n                sToTime = objCurrentDate.getTimeFormat();\n            } else if (sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_THIS_LAST_7_DAYS.backend\")) {\n                objCurrentDate.setTimeToEndOfDay();\n                sToDate = objCurrentDate.getDateFormat();\n                sToTime = objCurrentDate.getTimeFormat();\n                objCurrentDate.subtractTimeFromDate(this.get(\"_objLibConstants.MOMENT_TIME_DAYS\"), 7);\n                objCurrentDate.setTimeToStartOfDay();\n                sFromDate = objCurrentDate.getDateFormat();\n                sFromTime = objCurrentDate.getTimeFormat();\n            } else if (sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_THIS_LAST_WEEK_TO_FRI.backend\")) {\n                objCurrentDate.subtractTimeFromDate(this.get(\"_objLibConstants.MOMENT_TIME_WEEKS\"), 1);\n                objCurrentDate.startOf(this.get(\"_objLibConstants.MOMENT_UNIT_ISO_WEEK\"));\n                objCurrentDate.setTimeToStartOfDay();\n                sFromDate = objCurrentDate.getDateFormat();\n                sFromTime = objCurrentDate.getTimeFormat();\n                objCurrentDate.endOf(this.get(\"_objLibConstants.MOMENT_UNIT_ISO_WEEK\"));\n                objCurrentDate.subtractTimeFromDate(this.get(\"_objLibConstants.MOMENT_TIME_DAYS\"), 2);\n                objCurrentDate.setTimeToEndOfDay();\n                sToDate = objCurrentDate.getDateFormat();\n                sToTime = objCurrentDate.getTimeFormat();\n            } else if (sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_THIS_LAST_WEEK_TO_SUN.backend\")) {\n                objCurrentDate.subtractTimeFromDate(this.get(\"_objLibConstants.MOMENT_TIME_WEEKS\"), 1);\n                objCurrentDate.startOf(this.get(\"_objLibConstants.MOMENT_UNIT_ISO_WEEK\"));\n                objCurrentDate.setTimeToStartOfDay();\n                sFromDate = objCurrentDate.getDateFormat();\n                sFromTime = objCurrentDate.getTimeFormat();\n                objCurrentDate.endOf(this.get(\"_objLibConstants.MOMENT_UNIT_ISO_WEEK\"));\n                objCurrentDate.setTimeToEndOfDay();\n                sToDate = objCurrentDate.getDateFormat();\n                sToTime = objCurrentDate.getTimeFormat();\n            } else if (sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_THIS_LAST_14_DAYS.backend\")) {\n                objCurrentDate.setTimeToEndOfDay();\n                sToDate = objCurrentDate.getDateFormat();\n                sToTime = objCurrentDate.getTimeFormat();\n                objCurrentDate.subtractTimeFromDate(this.get(\"_objLibConstants.MOMENT_TIME_DAYS\"), 14);\n                objCurrentDate.setTimeToStartOfDay();\n                sFromDate = objCurrentDate.getDateFormat();\n                sFromTime = objCurrentDate.getTimeFormat();\n            } else if (sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_THIS_MONTH_TO_TODAY.backend\")) {\n                objCurrentDate.setTimeToEndOfDay();\n                sToDate = objCurrentDate.getDateFormat();\n                sToTime = objCurrentDate.getTimeFormat();\n                objCurrentDate.startOf(this.get(\"_objLibConstants.MOMENT_UNIT_MONTH\"));\n                objCurrentDate.setTimeToStartOfDay();\n                sFromDate = objCurrentDate.getDateFormat();\n                sFromTime = objCurrentDate.getTimeFormat();\n            } else if (sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_THIS_MONTH_TO_END.backend\")) {\n                objCurrentDate.endOf(this.get(\"_objLibConstants.MOMENT_UNIT_MONTH\"));\n                objCurrentDate.setTimeToEndOfDay();\n                sToDate = objCurrentDate.getDateFormat();\n                sToTime = objCurrentDate.getTimeFormat();\n                objCurrentDate.startOf(this.get(\"_objLibConstants.MOMENT_UNIT_MONTH\"));\n                objCurrentDate.setTimeToStartOfDay();\n                sFromDate = objCurrentDate.getDateFormat();\n                sFromTime = objCurrentDate.getTimeFormat();\n            } else if (sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_THIS_LAST_30_DAYS.backend\")) {\n                objCurrentDate.setTimeToEndOfDay();\n                sToDate = objCurrentDate.getDateFormat();\n                sToTime = objCurrentDate.getTimeFormat();\n                objCurrentDate.subtractTimeFromDate(this.get(\"_objLibConstants.MOMENT_TIME_DAYS\"), 30);\n                objCurrentDate.setTimeToStartOfDay();\n                sFromDate = objCurrentDate.getDateFormat();\n                sFromTime = objCurrentDate.getTimeFormat();\n            } else if (sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_THIS_LAST_MONTH.backend\")) {\n                objCurrentDate.subtractTimeFromDate(this.get(\"_objLibConstants.MOMENT_TIME_MONTHS\"), 1);\n                objCurrentDate.endOf(this.get(\"_objLibConstants.MOMENT_UNIT_MONTH\"));\n                objCurrentDate.setTimeToEndOfDay();\n                sToDate = objCurrentDate.getDateFormat();\n                sToTime = objCurrentDate.getTimeFormat();\n                objCurrentDate.startOf(this.get(\"_objLibConstants.MOMENT_UNIT_MONTH\"));\n                objCurrentDate.setTimeToStartOfDay();\n                sFromDate = objCurrentDate.getDateFormat();\n                sFromTime = objCurrentDate.getTimeFormat();\n            } else if (!a24Core.isEmpty(sDateOption) && (sDateOption.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED_GRACE.backend\"), 0) === 0 || sDateOption.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_WILL_NOT_EXPIRE.backend\"), 0) === 0 || sDateOption.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_WITHIN_LAST.backend\"), 0) === 0 || sDateOption.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_AT_LEAST.backend\"), 0) === 0)) {\n                var sUnit = sDateOption.split(\"_\")[1];\n                if (a24Core.isEmpty(iDays) || iDays === 0) {\n                    sToDate = null;\n                    sFromDate = null;\n                } else {\n                    if (sDateOption.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED_GRACE.backend\"), 0) === 0) {\n                        objCurrentDate.setTimeToStartOfDay();\n                        objCurrentDate.subtractTimeFromDate(sUnit, iDays);\n                        sFromDate = objCurrentDate.getDateFormat();\n                        sFromTime = objCurrentDate.getTimeFormat();\n                    } else if (sDateOption.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_WILL_NOT_EXPIRE.backend\"), 0) === 0) {\n                        objCurrentDate.setTimeToStartOfDay();\n                        objCurrentDate.addTimeToDate(sUnit, iDays);\n                        sFromDate = objCurrentDate.getDateFormat();\n                        sFromTime = objCurrentDate.getTimeFormat();\n                    } else if (sDateOption.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_WITHIN_LAST.backend\"), 0) === 0) {\n                        objCurrentDate.setTimeToEndOfDay();\n                        sToDate = objCurrentDate.getDateFormat();\n                        sToTime = objCurrentDate.getTimeFormat();\n                        objCurrentDate.setTimeToStartOfDay();\n                        objCurrentDate.subtractTimeFromDate(sUnit, iDays);\n                        sFromDate = objCurrentDate.getDateFormat();\n                        sFromTime = objCurrentDate.getTimeFormat();\n                    } else if (sDateOption.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_AT_LEAST.backend\"), 0) === 0) {\n                        objCurrentDate.setTimeToEndOfDay();\n                        objCurrentDate.subtractTimeFromDate(sUnit, iDays);\n                        sToDate = objCurrentDate.getDateFormat();\n                        sToTime = objCurrentDate.getTimeFormat();\n                    }\n                }\n            } else if (sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED.backend\")) {\n                objCurrentDate.setTimeToStartOfDay();\n                sFromDate = objCurrentDate.getDateFormat();\n                sFromTime = objCurrentDate.getTimeFormat();\n            } else if (sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_REST_OF_WEEK.backend\")) {\n                objCurrentDate.setTimeToStartOfDay();\n                sFromDate = objCurrentDate.getDateFormat();\n                sFromTime = objCurrentDate.getTimeFormat();\n                objCurrentDate.endOf(this.get(\"_objLibConstants.MOMENT_UNIT_ISO_WEEK\"));\n                objCurrentDate.setTimeToEndOfDay();\n                sToDate = objCurrentDate.getDateFormat();\n                sToTime = objCurrentDate.getTimeFormat();\n            } else if (sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_REST_OF_MONTH.backend\")) {\n                objCurrentDate.setTimeToStartOfDay();\n                sFromDate = objCurrentDate.getDateFormat();\n                sFromTime = objCurrentDate.getTimeFormat();\n                objCurrentDate.endOf(this.get(\"_objLibConstants.MOMENT_UNIT_MONTH\"));\n                objCurrentDate.setTimeToEndOfDay();\n                sToDate = objCurrentDate.getDateFormat();\n                sToTime = objCurrentDate.getTimeFormat();\n            } else if (!a24Core.isEmpty(sDateOption) && sDateOption.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsBetween.DATE_FILTER_BETWEEN.backend\"), 0) === 0) {\n                if (a24Core.isEmpty(iDays) && a24Core.isEmpty(iDaysTo)) {\n                    sToDate = null;\n                    sFromDate = null;\n                } else {\n                    var objFromDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                    var objToDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                    var arrExtraOptions = sDateOption.split(\"_\");\n                    iDays = parseInt(iDays);\n                    iDaysTo = parseInt(iDaysTo);\n                    var iHigh = iDays >= iDaysTo ? iDays : iDaysTo;\n                    var iLow = iDays < iDaysTo ? iDays : iDaysTo;\n                    if (arrExtraOptions[1] === \"ago\") {\n                        objFromDate.setTimeToStartOfDay();\n                        objFromDate.subtractTimeFromDate(this.get(\"_objLibConstants.MOMENT_TIME_DAYS\"), iHigh);\n                        objToDate.setTimeToEndOfDay();\n                        objToDate.subtractTimeFromDate(this.get(\"_objLibConstants.MOMENT_TIME_DAYS\"), iLow);\n                    } else if (arrExtraOptions[1] === \"fromToday\") {\n                        objFromDate.setTimeToStartOfDay();\n                        objFromDate.addTimeToDate(this.get(\"_objLibConstants.MOMENT_TIME_DAYS\"), iLow);\n                        objToDate.setTimeToEndOfDay();\n                        objToDate.addTimeToDate(this.get(\"_objLibConstants.MOMENT_TIME_DAYS\"), iHigh);\n                    }\n                    sFromDate = objFromDate.getDateFormat();\n                    sFromTime = objFromDate.getTimeFormat();\n                    sToDate = objToDate.getDateFormat();\n                    sToTime = objToDate.getTimeFormat();\n                }\n            } else if (sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_WITHIN_THE_LAST.backend\") || sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_WITHIN_THE_NEXT.backend\") || sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_WITHIN_THE_NEXT.backend\") || sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_LAST.backend\") || sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_NEXT.backend\")) {\n                if (a24Core.isEmpty(iDays) || iDays === 0) {\n                    sToDate = null;\n                    sFromDate = null;\n                } else {\n                    if (sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_WITHIN_THE_LAST.backend\") || sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_LAST.backend\")) {\n                        objCurrentDate.setTimeToEndOfDay();\n                        sToDate = objCurrentDate.getDateFormat();\n                        sToTime = objCurrentDate.getTimeFormat();\n                        objCurrentDate.subtractTimeFromDate(this.get(\"_objLibConstants.MOMENT_TIME_DAYS\"), iDays);\n                        objCurrentDate.setTimeToStartOfDay();\n                        sFromDate = objCurrentDate.getDateFormat();\n                        sFromTime = objCurrentDate.getTimeFormat();\n                    } else {\n                        objCurrentDate.setTimeToStartOfDay();\n                        sFromDate = objCurrentDate.getDateFormat();\n                        sFromTime = objCurrentDate.getTimeFormat();\n                        objCurrentDate.addTimeToDate(this.get(\"_objLibConstants.MOMENT_TIME_DAYS\"), iDays);\n                        objCurrentDate.setTimeToEndOfDay();\n                        sToDate = objCurrentDate.getDateFormat();\n                        sToTime = objCurrentDate.getTimeFormat();\n                    }\n                }\n            } else if (sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_CUSTOM_RANGE.backend\") || sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_AFTER.backend\") || sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_CUSTOM.backend\")) {\n                //We do not want to change the dates since the user could be altering a previous choice\n                bCustomRange = true;\n            } else if (sDateOption === this.get(\"_objEnumEmberLibService.dateFilterOptionsNotEmpty.DATE_FILTER_NOT_EMPTY.backend\")) {\n                sFromDate = momentHelper.timeStampTimezoneFormat(0, \"utc\", a24Constants.DATE_FORMAT);\n                sFromTime = \"00:00:00\";\n            } else if (\"null\" !== sDateOption) {\n                //null is also valid options to filter on empty dates\n                bNotInset = true;\n            }\n\n            return {\n                sFromDate: sFromDate,\n                sToDate: sToDate,\n                sFromTime: sFromTime,\n                sToTime: sToTime,\n                bCustomRange: bCustomRange,\n                bNotInset: bNotInset\n            };\n        },\n        createAdvanceTag: function createAdvanceTag(objHeaderItem, objHeadersSecondaries) {\n            var arrTag = [];\n            if (!a24Core.isEmpty(objHeaderItem.mFilterValue) && objHeaderItem.mFilterValue.length > 1) {\n                //the first item to have operation on it would be the second item.\n                var bAndPrio = false;\n                if (!a24Core.isEmpty(objHeaderItem.mFilterValue[1].bA) && objHeaderItem.mFilterValue[1].bA) {\n                    bAndPrio = true;\n                }\n\n                arrTag.push({\n                    sPreValue: \"\",\n                    sValue: objHeaderItem.sTitle + \": \",\n                    sValueClean: objHeaderItem.sTitle + \": \",\n                    sPostValue: \"\",\n                    iIndex: -1\n                });\n\n                var arrTagItems = [];\n                var iGroup = 0;\n                var bNeedsBrackets = false;\n\n                //First we group all the items based on the first operation the user chose\n                for (var i = 0; i < objHeaderItem.mFilterValue.length; i++) {\n                    var objTagItem = {\n                        iGroup: null,\n                        sTag: \"\",\n                        bAnd: objHeaderItem.mFilterValue[i].bA\n                    };\n                    if (i === 0) {\n                        iGroup = iGroup + 1;\n                        objTagItem.iGroup = iGroup;\n                    } else if (bAndPrio && objHeaderItem.mFilterValue[i].bA || !bAndPrio && objHeaderItem.mFilterValue[i].bO) {\n                        if (a24Core.isEmpty(arrTagItems[i - 1].iGroup)) {\n                            iGroup = iGroup + 1;\n                            objTagItem.iGroup = iGroup;\n                            arrTagItems[i - 1].iGroup = iGroup;\n                        } else {\n                            objTagItem.iGroup = arrTagItems[i - 1].iGroup;\n                        }\n                    } else {\n                        bNeedsBrackets = true;\n                    }\n\n                    var objSingleTagItem = this._createAdvanceTagSingleItem(objHeaderItem, objHeaderItem.mFilterValue[i], objHeadersSecondaries, true);\n                    objTagItem.sTag = objSingleTagItem.sTag;\n                    objTagItem.sTagClean = objSingleTagItem.sTagClean;\n\n                    arrTagItems.push(objTagItem);\n                }\n\n                var sAnd = this.get(\"_objStringsService\").getString(\"and\").toUpperCase();\n                var sOr = this.get(\"_objStringsService\").getString(\"or\").toUpperCase();\n\n                //Then we loop over the groups and determine where we need to add brackets.\n                for (var k = 0; k < arrTagItems.length; k++) {\n                    if (a24Core.isEmpty(arrTagItems[k].iGroup)) {\n                        arrTag.push({\n                            sPreValue: Ember.String.htmlSafe(\" <b>\" + (arrTagItems[k].bAnd ? sAnd : sOr) + \"</b> \"),\n                            sValue: Ember.String.htmlSafe(arrTagItems[k].sTag),\n                            sValueClean: arrTagItems[k].sTagClean,\n                            bAnd: arrTagItems[k].bAnd,\n                            sPostValue: \"\",\n                            iIndex: k\n                        });\n                    } else if (k === 0) {\n                        if (bNeedsBrackets && arrTagItems[k].iGroup === arrTagItems[k + 1].iGroup) {\n                            arrTag.push({\n                                sPreValue: Ember.String.htmlSafe(\"<b>(</b>\"),\n                                sValue: Ember.String.htmlSafe(arrTagItems[k].sTag),\n                                sValueClean: arrTagItems[k].sTagClean,\n                                bAnd: arrTagItems[k].bAnd,\n                                sPostValue: \"\",\n                                iIndex: k\n                            });\n                        } else {\n                            arrTag.push({\n                                sPreValue: \"\",\n                                sValue: Ember.String.htmlSafe(arrTagItems[k].sTag),\n                                sValueClean: arrTagItems[k].sTagClean,\n                                bAnd: arrTagItems[k].bAnd,\n                                sPostValue: \"\",\n                                iIndex: k\n                            });\n                        }\n                    } else if (k === arrTagItems.length - 1) {\n                        var objTaggy = {\n                            sPreValue: Ember.String.htmlSafe(\" <b>\" + (arrTagItems[k].bAnd ? sAnd : sOr) + \"</b> \"),\n                            sValue: Ember.String.htmlSafe(arrTagItems[k].sTag),\n                            sValueClean: arrTagItems[k].sTagClean,\n                            bAnd: arrTagItems[k].bAnd,\n                            sPostValue: \"\",\n                            iIndex: k\n                        };\n\n                        if (bNeedsBrackets && arrTagItems[k].iGroup === arrTagItems[k - 1].iGroup) {\n                            objTaggy.sPostValue = Ember.String.htmlSafe(\"<b>)</b>\");\n                        }\n\n                        arrTag.push(objTaggy);\n                    } else {\n                        if (arrTagItems[k].iGroup === arrTagItems[k - 1].iGroup && arrTagItems[k].iGroup === arrTagItems[k + 1].iGroup) {\n                            arrTag.push({\n                                sPreValue: Ember.String.htmlSafe(\" <b>\" + (arrTagItems[k].bAnd ? sAnd : sOr) + \"</b> \"),\n                                sValue: Ember.String.htmlSafe(arrTagItems[k].sTag),\n                                sValueClean: arrTagItems[k].sTagClean,\n                                bAnd: arrTagItems[k].bAnd,\n                                sPostValue: \"\",\n                                iIndex: k\n                            });\n                        } else if (arrTagItems[k].iGroup === arrTagItems[k - 1].iGroup) {\n                            arrTag.push({\n                                sPreValue: Ember.String.htmlSafe(\" <b>\" + (arrTagItems[k].bAnd ? sAnd : sOr) + \"</b> \"),\n                                sValue: Ember.String.htmlSafe(arrTagItems[k].sTag),\n                                sValueClean: arrTagItems[k].sTagClean,\n                                bAnd: arrTagItems[k].bAnd,\n                                sPostValue: Ember.String.htmlSafe(\"<b>)</b>\"),\n                                iIndex: k\n                            });\n                        } else if (arrTagItems[k].iGroup === arrTagItems[k + 1].iGroup) {\n                            arrTag.push({\n                                sPreValue: Ember.String.htmlSafe(\" <b>\" + (arrTagItems[k].bAnd ? sAnd : sOr) + \" (</b>\"),\n                                sValue: Ember.String.htmlSafe(arrTagItems[k].sTag),\n                                sValueClean: arrTagItems[k].sTagClean,\n                                bAnd: arrTagItems[k].bAnd,\n                                sPostValue: \"\",\n                                iIndex: k\n                            });\n                        }\n                    }\n                }\n            } else if (!a24Core.isEmpty(objHeaderItem.mFilterValue)) {\n                return {\n                    sTag: this._createAdvanceTagSingleItem(objHeaderItem, objHeaderItem.mFilterValue[0], objHeadersSecondaries, false).sTag\n                };\n            }\n\n            return { arrTag: arrTag };\n        },\n        _createAdvanceTagSingleItem: function _createAdvanceTagSingleItem(objHeaderItem, objQuery, objHeadersSecondaries, bSkipTitle) {\n            var sTag = \"\";\n            var sTagSimpleClean = null;\n            var bTagSimpleClean = false;\n            if (objHeaderItem.sFilterType === \"custom\") {\n                var objCustomTag = objHeaderItem.objFilterCustomService.funcFilterCustomTag(objHeaderItem, objQuery, objHeadersSecondaries, bSkipTitle);\n                sTag = objCustomTag.sTag;\n                if (!a24Core.isEmpty(objCustomTag.sTagSimple)) {\n                    bTagSimpleClean = true;\n                    sTagSimpleClean = objCustomTag.sTagSimple;\n                }\n            } else {\n                var objTag = this._createAdvanceTagSingleProp(objHeaderItem, objQuery, bSkipTitle, false);\n                sTag = objTag.sTag;\n                if (a24Core.isEmpty(objTag.sTagSimple)) {\n                    sTagSimpleClean = objTag.sTag;\n                } else {\n                    bTagSimpleClean = true;\n                    sTagSimpleClean = objTag.sTagSimple;\n                }\n\n                if (!a24Core.isEmpty(objQuery.arSec)) {\n                    var arrSecondaries = Ember.get(objHeadersSecondaries, \"arrFilterSecondary_\" + objHeaderItem.sProperty);\n                    var objFilterItem = null;\n                    for (var i = 0; i < objQuery.arSec.length; i++) {\n                        objFilterItem = null;\n                        for (var j = 0; j < arrSecondaries.length; j++) {\n                            if (objQuery.arSec[i].sProp === arrSecondaries[j].sProperty) {\n                                objFilterItem = arrSecondaries[j];\n                                break;\n                            }\n                        }\n                        var objTagSec = this._createAdvanceTagSingleProp(objFilterItem, objQuery.arSec[i], false, true);\n                        sTag += \", \" + objTagSec.sTag;\n                        if (a24Core.isEmpty(objTagSec.sTagSimple)) {\n                            sTagSimpleClean += \", \" + objTagSec.sTag;\n                        } else {\n                            bTagSimpleClean = true;\n                            sTagSimpleClean += \", \" + objTagSec.sTagSimple;\n                        }\n                    }\n                }\n            }\n\n            var objReturn = {\n                sTag: sTag,\n                sTagClean: sTag\n            };\n            if (bSkipTitle) {\n                objReturn.sTag = \"<span class='a24-grey-text-darken-3'>\" + sTag + \"</span>\";\n            }\n            if (bTagSimpleClean) {\n                objReturn.sTagSimpleClean = sTagSimpleClean;\n            }\n            return objReturn;\n        },\n        _createAdvanceTagSingleProp: function _createAdvanceTagSingleProp(objFilterItem, objQuery, bSkipTitle, bSecondary) {\n            var sHeaderFilterTag = objFilterItem.sTitle + \" \";\n            var sHeaderFilterTagSimple = objFilterItem.sTitle + \" \";\n            var bHeaderFilterTagSimple = false;\n            var sMiddleIsText = \"\";\n            var sMiddleInText = \"\";\n            var objFromDate = null;\n            var objToDate = null;\n\n            if (!bSecondary) {\n                if (objQuery.bDelimitedNot) {\n                    sMiddleIsText = this.get(\"_objStringsService\").getString(\"isNot\") + \" \";\n                    sMiddleInText = this.get(\"_objStringsService\").getString(\"notIn\") + \" \";\n                } else {\n                    sMiddleIsText = this.get(\"_objStringsService\").getString(\"is\") + \" \";\n                    sMiddleInText = this.get(\"_objStringsService\").getString(\"in\") + \" \";\n                }\n            }\n\n            if (bSkipTitle) {\n                sHeaderFilterTag = \"\";\n                sHeaderFilterTagSimple = \"\";\n            } else {\n                sMiddleIsText = sMiddleIsText.toLowerCase();\n                sMiddleInText = sMiddleInText.toLowerCase();\n            }\n\n            if (objQuery.mValue === \"null\") {\n                if (bSkipTitle) {\n                    sHeaderFilterTag += this.get(\"_objStringsService\").getString(\"isEmpty\");\n                } else {\n                    sHeaderFilterTag += this.get(\"_objStringsService\").getString(\"isEmpty\").toLowerCase();\n                }\n            } else if (\"text\" === objFilterItem.sFilterType) {\n                var sTextPart = \"\";\n                if (objQuery.bStartWith) {\n                    sTextPart = this.get(\"_objStringsService\").getString(\"startsWith\");\n                } else if (objQuery.bEndsWith) {\n                    sTextPart = this.get(\"_objStringsService\").getString(\"endsWith\");\n                } else if (objQuery.bLike) {\n                    sTextPart = this.get(\"_objStringsService\").getString(\"contains\");\n                } else if (objQuery.bDelimitedNot) {\n                    sTextPart = this.get(\"_objStringsService\").getString(\"isNot\");\n                } else {\n                    sTextPart = this.get(\"_objStringsService\").getString(\"is\");\n                }\n                if (!bSkipTitle) {\n                    sTextPart = sTextPart.toLowerCase();\n                }\n                sHeaderFilterTag += sTextPart + \" \" + objQuery.mValue;\n            } else if (\"bool\" === objFilterItem.sFilterType) {\n                var sTagValue = null;\n                for (var j = 0; j < objFilterItem.arrMappingData.length; j++) {\n                    if (objFilterItem.arrMappingData[j].sValue === objQuery.mValue + \"\") {\n                        sTagValue = objFilterItem.arrMappingData[j].sTitle;\n                        break;\n                    }\n                }\n                sHeaderFilterTag += sMiddleIsText + sTagValue;\n            } else if (\"dropdown\" === objFilterItem.sFilterType) {\n                var sDropdownTagValue = null;\n                for (var k = 0; k < objFilterItem.arrMappingData.length; k++) {\n                    if (objFilterItem.arrMappingData[k].sValue === objQuery.mValue) {\n                        sDropdownTagValue = objFilterItem.arrMappingData[k].sTitle;\n                        break;\n                    }\n                }\n                sHeaderFilterTag += sMiddleIsText + sDropdownTagValue;\n            } else if (\"dropdownMulti\" === objFilterItem.sFilterType) {\n                var sDropMultiTagValue = null;\n\n                var arrFilterItems = objQuery.mValue.split(\"|\");\n                if (arrFilterItems.length === 1) {\n                    for (var i = 0; i < objFilterItem.arrMappingData.length; i++) {\n                        if (objFilterItem.arrMappingData[i].sValue === arrFilterItems[0]) {\n                            sDropMultiTagValue = objFilterItem.arrMappingData[i].sTitle;\n                            break;\n                        }\n                    }\n                } else {\n                    sDropMultiTagValue = this.get(\"_objStringsService\").getString(\"multiple\");\n\n                    var arrValues = [];\n                    for (var m = 0; m < arrFilterItems.length; m++) {\n                        for (var n = 0; n < objFilterItem.arrMappingData.length; n++) {\n                            if (objFilterItem.arrMappingData[n].sValue === arrFilterItems[m]) {\n                                arrValues.push(objFilterItem.arrMappingData[n].sTitle);\n                                break;\n                            }\n                        }\n                    }\n                    arrValues = arrValues.sort(function (sItemA, sItemB) {\n                        if (sItemA < sItemB) {\n                            return -1;\n                        } else if (sItemA > sItemB) {\n                            return 1;\n                        } else {\n                            return 0;\n                        }\n                    });\n                    sHeaderFilterTagSimple += sMiddleIsText + \"(\" + arrValues.join(\", \") + \")\";\n                    bHeaderFilterTagSimple = true;\n                }\n\n                sHeaderFilterTag += sMiddleIsText + sDropMultiTagValue;\n            } else if (\"date\" === objFilterItem.sFilterType) {\n                if (objQuery.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED.backend\")) {\n                    sHeaderFilterTag = \"\" + this.get(\"_objStringsService\").getString(\"dateFilterExpiryNotExpired\");\n                } else if (!a24Core.isEmpty(objQuery.sFilterValue) && objQuery.sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED_GRACE.backend\"), 0) === 0) {\n                    var sUnit = objQuery.sFilterValue.split(\"_\")[1];\n\n                    sHeaderFilterTag = this.get(\"_objStringsService\").getString(\"dateFilterExpiryNotExpiredGrace\") + \" \" + objQuery.iDays + \" \" + sUnit;\n                } else if (!a24Core.isEmpty(objQuery.sFilterValue) && objQuery.sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_WILL_NOT_EXPIRE.backend\"), 0) === 0) {\n                    var _sUnit4 = objQuery.sFilterValue.split(\"_\")[1];\n\n                    sHeaderFilterTag = this.get(\"_objStringsService\").getString(\"dateFilterExpiryWillNotExpire\") + \" \" + objQuery.iDays + \" \" + _sUnit4;\n                } else if (!a24Core.isEmpty(objQuery.sFilterValue) && objQuery.sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_WITHIN_LAST.backend\"), 0) === 0) {\n                    var _sUnit5 = objQuery.sFilterValue.split(\"_\")[1];\n\n                    sHeaderFilterTag += this.get(\"_objStringsService\").getString(\"dateFilterObtainedWithinLast\") + \" \" + objQuery.iDays + \" \" + _sUnit5 + \" \" + this.get(\"_objStringsService\").getString(\"ago\").toLowerCase();\n                } else if (!a24Core.isEmpty(objQuery.sFilterValue) && objQuery.sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_AT_LEAST.backend\"), 0) === 0) {\n                    var _sUnit6 = objQuery.sFilterValue.split(\"_\")[1];\n\n                    sHeaderFilterTag += this.get(\"_objStringsService\").getString(\"dateFilterObtainedAtLeast\") + \" \" + objQuery.iDays + \" \" + _sUnit6 + \" \" + this.get(\"_objStringsService\").getString(\"ago\").toLowerCase();\n                } else if (objQuery.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_AFTER.backend\")) {\n                    objFromDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                    objFromDate.setDateFromBrowser(objQuery.mValue, this.get(\"_objLibConstants.DATE_FORMAT_ISO_FORMAT\"));\n                    var sFromString = \"\";\n\n                    if (objFilterItem.bFilterAllowTime) {\n                        sFromString = objFromDate.getDateTimeFormat();\n                    } else {\n                        sFromString = objFromDate.getDateFormat();\n                    }\n\n                    sHeaderFilterTag = this.get(\"_objStringsService\").getString(\"dateFilterExpiryAfter\") + \" \" + sFromString;\n                } else if (!a24Core.isEmpty(objQuery.sFilterValue) && objQuery.sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsBetween.DATE_FILTER_BETWEEN.backend\"), 0) === 0) {\n                    var arrExtraOptions = objQuery.sFilterValue.split(\"_\");\n                    sHeaderFilterTag += sMiddleIsText + \" between \" + arrExtraOptions[2] + \" and \" + arrExtraOptions[3] + \" days \" + this.get(\"_objStringsService\").getString(arrExtraOptions[1]).toLowerCase();\n                } else if (objQuery.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_WITHIN_THE_LAST.backend\") || objQuery.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_WITHIN_THE_NEXT.backend\") || objQuery.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_WITHIN_THE_NEXT.backend\") || objQuery.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_LAST.backend\") || objQuery.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_NEXT.backend\")) {\n                    objFromDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                    objToDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                    objFromDate.setDateFromBrowser(objQuery.mValue.sFrom, this.get(\"_objLibConstants.DATE_FORMAT_ISO_FORMAT\"));\n                    objToDate.setDateFromBrowser(objQuery.mValue.sTo, this.get(\"_objLibConstants.DATE_FORMAT_ISO_FORMAT\"));\n\n                    objFromDate.setTimeToStartOfDay();\n                    objToDate.setTimeToStartOfDay();\n\n                    var iDays = Math.round(objToDate.difference(objFromDate, a24Constants.MOMENT_TIME_DAYS, true));\n                    sHeaderFilterTag += sMiddleIsText + \" \" + this.get(\"_objStringsService\").getString(objQuery.sFilterValue) + \" \" + iDays + \" \" + this.get(\"_objStringsService\").getString(\"dateDays\");\n                } else if (objQuery.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_CUSTOM_RANGE.backend\") || objQuery.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_CUSTOM.backend\")) {\n                    objFromDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                    objToDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                    var _sFromString = \"\";\n                    var sToString = \"\";\n\n                    if (objQuery.bTo) {\n                        objToDate.setDateFromBrowser(objQuery.mValue, this.get(\"_objLibConstants.DATE_FORMAT_ISO_FORMAT\"));\n                        if (objFilterItem.bFilterAllowTime) {\n                            sToString = objToDate.getDateTimeFormat();\n                        } else {\n                            sToString = objToDate.getDateFormat();\n                        }\n                        sHeaderFilterTag += \" \" + this.get(\"_objStringsService\").getString(\"to\").toLowerCase() + \" \" + sToString;\n                    } else if (objQuery.bFrom) {\n                        objFromDate.setDateFromBrowser(objQuery.mValue, this.get(\"_objLibConstants.DATE_FORMAT_ISO_FORMAT\"));\n                        if (objFilterItem.bFilterAllowTime) {\n                            _sFromString = objFromDate.getDateTimeFormat();\n                        } else {\n                            _sFromString = objFromDate.getDateFormat();\n                        }\n\n                        if (objQuery.sFilterValue !== this.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_CUSTOM.backend\") || objQuery.sProp !== \"rule_output_change_date_compliant\") {\n                            sHeaderFilterTag += \" \" + this.get(\"_objStringsService\").getString(\"from\").toLowerCase();\n                        }\n                        sHeaderFilterTag += \" \" + _sFromString;\n                    } else {\n\n                        objFromDate.setDateFromBrowser(objQuery.mValue.sFrom, this.get(\"_objLibConstants.DATE_FORMAT_ISO_FORMAT\"));\n                        objToDate.setDateFromBrowser(objQuery.mValue.sTo, this.get(\"_objLibConstants.DATE_FORMAT_ISO_FORMAT\"));\n                        if (objFilterItem.bFilterAllowTime) {\n                            _sFromString = objFromDate.getDateTimeFormat();\n                            sToString = objToDate.getDateTimeFormat();\n                        } else {\n                            _sFromString = objFromDate.getDateFormat();\n                            sToString = objToDate.getDateFormat();\n                        }\n                        if (_sFromString.indexOf(\":\") !== 0 && sToString.indexOf(\":\") !== 0) {\n                            sHeaderFilterTag += sMiddleInText + this.get(\"_objEmberLibStringsService\").getString(\"between\").toLowerCase() + \" \" + _sFromString + \" \" + this.get(\"_objStringsService\").getString(\"and\").toLowerCase() + \" \" + sToString;\n                        } else {\n                            sHeaderFilterTag += sMiddleInText + this.get(\"_objEmberLibStringsService\").getString(\"between\").toLowerCase() + \" \" + objFromDate.getDateFormat() + \" \" + this.get(\"_objStringsService\").getString(\"and\").toLowerCase() + \" \" + objToDate.getDateFormat();\n                        }\n                    }\n                } else if (objQuery.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsNotEmpty.DATE_FILTER_NOT_EMPTY.backend\")) {\n\n                    sHeaderFilterTag += sMiddleIsText + this.get(\"_objStringsService\").getString(\"dateFilterNotEmpty\").toLowerCase();\n                } else {\n                    sHeaderFilterTag += sMiddleInText + this.get(\"_objStringsService\").getString(objQuery.sFilterValue);\n                }\n            } else if (\"int\" === objFilterItem.sFilterType) {\n                if (objQuery.bBefore) {\n                    sMiddleIsText = this.get(\"_objStringsService\").getString(\"smallerThan\").toLowerCase() + \" \";\n                }\n                if (objQuery.bAfter) {\n                    sMiddleIsText = this.get(\"_objStringsService\").getString(\"biggerThan\").toLowerCase() + \" \";\n                }\n\n                sHeaderFilterTag += sMiddleIsText + objQuery.mValue;\n            } else if (\"suggest\" === objFilterItem.sFilterType) {\n                sHeaderFilterTag += sMiddleIsText + objQuery.sFilterValue;\n            }\n\n            var objReturn = {\n                sTag: sHeaderFilterTag\n            };\n            if (bHeaderFilterTagSimple) {\n                objReturn.sTagSimple = sHeaderFilterTagSimple;\n            }\n\n            return objReturn;\n        },\n        buildAdvanceFilter: function buildAdvanceFilter(objSelectedFilterOption, bAndOrQuestionAnd, bAndOrQuestionOr, objSelectedQueryType, objHeaderSecondaries, iAdvanceFilterIndex) {\n            var objQuery = this.createQueryAndTag(objSelectedFilterOption, false, objHeaderSecondaries, objSelectedQueryType).objQuery;\n            if (bAndOrQuestionAnd) {\n                objQuery.bA = bAndOrQuestionAnd;\n            }\n            if (bAndOrQuestionOr) {\n                objQuery.bO = bAndOrQuestionOr;\n            }\n            if (!a24Core.isEmpty(objSelectedQueryType) && Ember.get(objSelectedQueryType, \"sValue\") === this.get(\"_objEnumEmberLibService.filterOptionsType.IS_NOT.backend\")) {\n                objQuery.bDelimitedNot = true;\n            }\n            //Special case for date, we need this value to build the correct tag and also select the correct date range if\n            //value for instance is \"Last 14 days\"\n            if (\"date\" === objSelectedFilterOption.sFilterType && objSelectedFilterOption.sFilterValue !== \"null\") {\n                objQuery.sFilterValue = objSelectedFilterOption.sFilterValue;\n            } else if (\"suggest\" === objSelectedFilterOption.sFilterType && objSelectedFilterOption.sFilterValue !== \"null\") {\n                objQuery.sFilterValue = objSelectedFilterOption.sFilterValue.split(\"||\")[1];\n            }\n\n            if (objSelectedFilterOption.bFilterSecondary && !objQuery.bDelimitedNot) {\n                var arrSecondaries = Ember.get(objHeaderSecondaries, \"arrFilterSecondary_\" + objSelectedFilterOption.sProperty);\n                if (a24Core.isEmpty(arrSecondaries)) {\n                    //eslint-disable-next-line no-console\n                    console.error(\"Datagrid filter config error, expected [\" + objSelectedFilterOption.sProperty + \"] to have a \" + \"non empty arrFilterSecondary_\" + objSelectedFilterOption.sProperty + \" property set on the config\");\n                }\n                for (var i = 0; i < arrSecondaries.length; i++) {\n                    var objSecondary = arrSecondaries[i];\n                    var objSecondaryQuery = null;\n                    if (Ember.get(objSecondary, \"_bEmptyEntriesOnly\")) {\n                        objSecondaryQuery = {\n                            sProp: Ember.get(objSecondary, \"sProperty\"),\n                            mValue: \"null\"\n                        };\n                    } else if (Ember.get(objSecondary, \"_bIntFilter\")) {\n                        if (!a24Core.isEmpty(Ember.get(objSecondary, \"_objFilterValue\")) && !a24Core.isEmpty(Ember.get(objSecondary, \"_iFilterValue\"))) {\n                            objSecondaryQuery = {\n                                sProp: Ember.get(objSecondary, \"sProperty\"),\n                                mValue: Ember.get(objSecondary, \"_iFilterValue\")\n                            };\n\n                            if (Ember.get(objSecondary, \"_objFilterValue.sValue\") === this.get(\"_objEnumEmberLibService.intFilterOptions.BIGGER_THAN.backend\")) {\n                                objSecondaryQuery.bAfter = true;\n                            } else if (Ember.get(objSecondary, \"_objFilterValue.sValue\") === this.get(\"_objEnumEmberLibService.intFilterOptions.SMALLER_THAN.backend\")) {\n                                objSecondaryQuery.bBefore = true;\n                            }\n                        }\n                    } else if (Ember.get(objSecondary, \"_bTextFilter\")) {\n                        if (!a24Core.isEmpty(Ember.get(objSecondary, \"_sFilterValue\"))) {\n\n                            objSecondaryQuery = {\n                                sProp: Ember.get(objSecondary, \"sProperty\"),\n                                mValue: Ember.get(objSecondary, \"_sFilterValue\"),\n                                bLike: true,\n                                bEncode: true\n                            };\n                        }\n                    } else if (Ember.get(objSecondary, \"_bBoolFilter\")) {\n                        if (!a24Core.isEmpty(Ember.get(objSecondary, \"_objFilterValue\"))) {\n                            objSecondaryQuery = {\n                                sProp: Ember.get(objSecondary, \"sProperty\"),\n                                mValue: Ember.get(objSecondary, \"_objFilterValue\").sValue === \"true\"\n                            };\n                        }\n                    } else if (Ember.get(objSecondary, \"_bDropDownFilter\")) {\n                        if (!a24Core.isEmpty(Ember.get(objSecondary, \"_objFilterValue\"))) {\n                            objSecondaryQuery = {\n                                sProp: Ember.get(objSecondary, \"sProperty\"),\n                                mValue: Ember.get(objSecondary, \"_objFilterValue\").sValue,\n                                bEncode: true\n                            };\n                        }\n                    } else if (Ember.get(objSecondary, \"_bDropDownMultiFilter\")) {\n                        var arrItems = Ember.get(objSecondary, \"_arrFilterValue\");\n                        var arrStatuses = [];\n                        if (!a24Core.isEmpty(arrItems)) {\n                            for (var j = 0; j < arrItems.length; j++) {\n                                arrStatuses.push(arrItems[j].sValue);\n                            }\n                        }\n                        var sQuery = arrStatuses.join(\"|\");\n                        if (a24Core.isEmpty(sQuery.trim())) {\n                            sQuery = null;\n                        }\n                        if (!a24Core.isEmpty(sQuery)) {\n                            objSecondaryQuery = {\n                                sProp: Ember.get(objSecondary, \"sProperty\"),\n                                mValue: sQuery,\n                                bDelimited: true,\n                                bEncode: true\n                            };\n                        }\n                    } else if (Ember.get(objSecondary, \"_bDateFilter\")) {\n                        if (!a24Core.isEmpty(Ember.get(objSecondary, \"_objFilterValue\"))) {\n                            var objDateQueryTag = this.createDateQueryAndTag(Ember.get(objSecondary, \"_objFilterValue\").sValue, Ember.get(objSecondary, \"_sFromDate\"), Ember.get(objSecondary, \"_sToDate\"), objSecondary, false);\n                            objSecondaryQuery = objDateQueryTag.objQuery;\n                            objSecondaryQuery.sProp = Ember.get(objSecondary, \"sProperty\");\n\n                            //Special case for date, we need this value to build the correct tag and also select the\n                            //correct date range if value for instance is \"Last 14 days\"\n                            objSecondaryQuery.sFilterValue = Ember.get(objSecondary, \"_objFilterValue\").sValue;\n                        }\n                    }\n\n                    if (!a24Core.isEmpty(objSecondaryQuery)) {\n                        if (a24Core.isEmpty(objQuery.arSec)) {\n                            objQuery.arSec = [objSecondaryQuery];\n                        } else {\n                            objQuery.arSec.push(objSecondaryQuery);\n                        }\n                    }\n                }\n            }\n\n            //If both are false we know that this is the first time the user is adding filter for this property OR the\n            //ser selected to reset the filter in which case both would be false aswell\n            if (!a24Core.isEmpty(iAdvanceFilterIndex)) {\n                Ember.set(objSelectedFilterOption, \"mFilterValue.\" + iAdvanceFilterIndex, objQuery);\n            } else if (!bAndOrQuestionAnd && !bAndOrQuestionOr) {\n                Ember.set(objSelectedFilterOption, \"mFilterValue\", [objQuery]);\n            } else {\n                Ember.get(objSelectedFilterOption, \"mFilterValue\").pushObject(objQuery);\n            }\n            //Example of what the complete mFilterValue would look like, new properties have short names to save\n            //space in the url.\n            // [\n            //     {                        --> First item wont have bA or bO, since both will always be false here\n            //         bEncode: true,\n            //         mValue: \"T&C\",\n            //         arSec: [\n            //             {\n            //                 sProp: \"version\",\n            //                 mValue: 23\n            //             },\n            //             ...\n            //         ]\n            //     },\n            //     {\n            //         bEncode: true,\n            //         mValue: \"Bloep\",\n            //         bA: true,\n            //         arSec: [\n            //             {\n            //                 sProp: \"version\",\n            //                 mValue: 56\n            //             },\n            //             ...\n            //         ]\n            //     }\n            //     ...\n            // ];\n\n            //reset the sFilterValue for the header since it now contains its value on the mFilterValue\n            Ember.set(objSelectedFilterOption, \"sFilterValue\", null);\n            if (objSelectedFilterOption.sFilterType === \"custom\") {\n                objSelectedFilterOption.objFilterCustomService.funcFilterCustomPrimaryReset(objSelectedFilterOption);\n            }\n        },\n        createQueryAndTag: function createQueryAndTag(objHeaderItem, bDoAdvanceCheck, objHeaderSecondaries, objQueryType) {\n            if (!a24Core.isEmpty(objHeaderItem.funcFilterParseFilterValue)) {\n                objHeaderItem = objHeaderItem.funcFilterParseFilterValue(objHeaderItem);\n            }\n\n            if (bDoAdvanceCheck && (objHeaderItem.bFilterSecondary || objHeaderItem.bFilterAnd || objHeaderItem.bFilterOr || objHeaderItem.sFilterType === \"custom\")) {\n                var objTag = this.createAdvanceTag(objHeaderItem, objHeaderSecondaries);\n\n                objTag.objQuery = objHeaderItem.mFilterValue;\n                return objTag;\n            }\n\n            //Build up the filter query param based on the selected filter option. Also build up tag value for item.\n            var objQueryObject = {};\n            var sHeaderFilterTag = null;\n            var sHeaderFilterTagSimple = null;\n            var mHeaderFilterValue = objHeaderItem.sFilterValue;\n\n            if (a24Core.isEmpty(objQueryType) && !a24Core.isEmpty(objHeaderItem.arrQueryType)) {\n                objQueryType = objHeaderItem.arrQueryType[0];\n            }\n\n            if (mHeaderFilterValue === \"null\" || !a24Core.isEmpty(objQueryType) && objQueryType.sValue === this.get(\"_objLibConstants\").CARD_DATAGRID_FILTER_QUERY_TYPE_EMPTY) {\n                sHeaderFilterTag = objHeaderItem.sTitle + \" \" + this.get(\"_objStringsService\").getString(\"isEmpty\").toLowerCase();\n            } else {\n                if (\"text\" === objHeaderItem.sFilterType) {\n                    objQueryObject.bEncode = true;\n\n                    // Empty will be the defualt setting of contains\n                    if (a24Core.isEmpty(objQueryType) || objQueryType.sValue === this.get(\"_objLibConstants.CARD_DATAGRID_FILTER_QUERY_TYPE_CONTAINS\")) {\n                        objQueryObject.bLike = true;\n                        sHeaderFilterTag = objHeaderItem.sTitle + \" \" + this.get(\"_objStringsService\").getString(\"contains\").toLowerCase() + \" \" + mHeaderFilterValue;\n                    } else if (objQueryType.sValue === this.get(\"_objLibConstants.CARD_DATAGRID_FILTER_QUERY_TYPE_IS\")) {\n                        sHeaderFilterTag = objHeaderItem.sTitle + \" \" + this.get(\"_objStringsService\").getString(\"is\").toLowerCase() + \" \" + mHeaderFilterValue;\n                    } else if (objQueryType.sValue === this.get(\"_objLibConstants.CARD_DATAGRID_FILTER_QUERY_TYPE_IS_NOT\")) {\n                        sHeaderFilterTag = objHeaderItem.sTitle + \" \" + this.get(\"_objStringsService\").getString(\"isNot\").toLowerCase() + \" \" + mHeaderFilterValue;\n                    } else if (objQueryType.sValue === this.get(\"_objLibConstants.CARD_DATAGRID_FILTER_QUERY_TYPE_STARTS_WITH\")) {\n                        objQueryObject.bStartWith = true;\n                        sHeaderFilterTag = objHeaderItem.sTitle + \" \" + this.get(\"_objStringsService\").getString(\"startsWith\").toLowerCase() + \" \" + mHeaderFilterValue;\n                    } else if (objQueryType.sValue === this.get(\"_objLibConstants.CARD_DATAGRID_FILTER_QUERY_TYPE_ENDS_WITH\")) {\n                        objQueryObject.bEndsWith = true;\n                        sHeaderFilterTag = objHeaderItem.sTitle + \" \" + this.get(\"_objStringsService\").getString(\"endsWith\").toLowerCase() + \" \" + mHeaderFilterValue;\n                    }\n                } else if (\"bool\" === objHeaderItem.sFilterType) {\n                    var sTagValue = null;\n                    for (var j = 0; j < objHeaderItem.arrMappingData.length; j++) {\n                        if (objHeaderItem.arrMappingData[j].sValue === mHeaderFilterValue) {\n                            sTagValue = objHeaderItem.arrMappingData[j].sTitle;\n                            break;\n                        }\n                    }\n                    sHeaderFilterTag = objHeaderItem.sTitle + \" \" + this.get(\"_objStringsService\").getString(\"is\").toLowerCase() + \" \" + sTagValue;\n                    mHeaderFilterValue = mHeaderFilterValue === \"true\";\n                } else if (\"dropdown\" === objHeaderItem.sFilterType) {\n                    objQueryObject.bEncode = true;\n                    var sDropdownTagValue = null;\n                    for (var k = 0; k < objHeaderItem.arrMappingData.length; k++) {\n                        if (objHeaderItem.arrMappingData[k].sValue === mHeaderFilterValue) {\n                            sDropdownTagValue = objHeaderItem.arrMappingData[k].sTitle;\n                            break;\n                        }\n                    }\n                    sHeaderFilterTag = objHeaderItem.sTitle + \" \" + this.get(\"_objStringsService\").getString(\"is\").toLowerCase() + \" \" + sDropdownTagValue;\n                } else if (\"dropdownMulti\" === objHeaderItem.sFilterType) {\n                    objQueryObject.bEncode = true;\n                    objQueryObject.bDelimited = true;\n\n                    var sDropMultiTagValue = null;\n\n                    var arrFilterItems = mHeaderFilterValue.split(\"|\");\n                    if (arrFilterItems.length === 1) {\n                        for (var i = 0; i < objHeaderItem.arrMappingData.length; i++) {\n                            if (objHeaderItem.arrMappingData[i].sValue === arrFilterItems[0]) {\n                                sDropMultiTagValue = objHeaderItem.arrMappingData[i].sTitle;\n                                break;\n                            }\n                        }\n                    } else {\n                        sDropMultiTagValue = this.get(\"_objStringsService\").getString(\"multiple\");\n                        var arrValues = [];\n                        for (var m = 0; m < arrFilterItems.length; m++) {\n                            for (var n = 0; n < objHeaderItem.arrMappingData.length; n++) {\n                                if (objHeaderItem.arrMappingData[n].sValue === arrFilterItems[m]) {\n                                    arrValues.push(objHeaderItem.arrMappingData[n].sTitle);\n                                    break;\n                                }\n                            }\n                        }\n                        arrValues = arrValues.sort(function (sItemA, sItemB) {\n                            if (sItemA < sItemB) {\n                                return -1;\n                            } else if (sItemA > sItemB) {\n                                return 1;\n                            } else {\n                                return 0;\n                            }\n                        });\n                        sHeaderFilterTagSimple = objHeaderItem.sTitle + \" \" + this.get(\"_objStringsService\").getString(\"is\").toLowerCase() + \" \" + arrValues.join(\", \");\n                    }\n\n                    sHeaderFilterTag = objHeaderItem.sTitle + \" \" + this.get(\"_objStringsService\").getString(\"is\").toLowerCase() + \" \" + sDropMultiTagValue;\n                } else if (\"date\" === objHeaderItem.sFilterType) {\n                    var objDateQueryTag = this.createDateQueryAndTag(objHeaderItem.sFilterValue, objHeaderItem.sFilterFromValue, objHeaderItem.sFilterToValue, objHeaderItem, false);\n                    objQueryObject = objDateQueryTag.objQuery;\n                    mHeaderFilterValue = objDateQueryTag.objQuery.mValue;\n                    sHeaderFilterTag = objDateQueryTag.sTag;\n                } else if (\"custom\" === objHeaderItem.sFilterType) {\n                    //here we know we are dealing with a advance filter so only need to return the objQuery\n                    return {\n                        objQuery: objHeaderItem.objFilterCustomService.funcFilterCustomPrimaryQuery(objHeaderItem, objHeaderSecondaries)\n                    };\n                } else if (\"suggest\" === objHeaderItem.sFilterType) {\n                    objQueryObject.bEncode = true;\n                    var arrSuggestItems = objHeaderItem.sFilterValue.split(\"||\"); //double pipe for safety.\n                    sHeaderFilterTag = objHeaderItem.sTitle + \" \" + this.get(\"_objStringsService\").getString(\"is\").toLowerCase() + \" \" + arrSuggestItems[1];\n                    mHeaderFilterValue = arrSuggestItems[0];\n                }\n            }\n            objQueryObject.mValue = mHeaderFilterValue;\n\n            var objReturn = {\n                objQuery: objQueryObject,\n                sTag: sHeaderFilterTag\n            };\n            if (!a24Core.isEmpty(sHeaderFilterTagSimple)) {\n                objReturn.sTagSimple = sHeaderFilterTagSimple;\n            }\n\n            return objReturn;\n        },\n        createDateQueryAndTag: function createDateQueryAndTag(sFilterValue, sFrom, sTo, objHeaderItem, bRestFormat) {\n            var sHeaderFilterTag = null;\n            var objQueryObject = null;\n            var objFromDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n            var objToDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n\n            var iDays = 0;\n            var iDaysTo = 0;\n            var sUnit = \"\";\n            if (!a24Core.isEmpty(sFilterValue) && sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED_GRACE.backend\"), 0) === 0) {\n                sUnit = sFilterValue.split(\"_\")[1];\n                objFromDate.setTimeToStartOfDay();\n                objToDate.setTimeToStartOfDay();\n\n                if (bRestFormat) {\n                    objFromDate.setDateFromRest(sFrom);\n                } else {\n                    objFromDate.setDateFromBrowser(sFrom, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                }\n                iDays = Math.round(objToDate.difference(objFromDate, sUnit, true));\n            } else if (!a24Core.isEmpty(sFilterValue) && sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_WILL_NOT_EXPIRE.backend\"), 0) === 0) {\n                sUnit = sFilterValue.split(\"_\")[1];\n                objFromDate.setTimeToStartOfDay();\n                objToDate.setTimeToStartOfDay();\n\n                if (bRestFormat) {\n                    objFromDate.setDateFromRest(sFrom);\n                } else {\n                    objFromDate.setDateFromBrowser(sFrom, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                }\n\n                iDays = Math.round(objFromDate.difference(objToDate, sUnit, true));\n            } else if (!a24Core.isEmpty(sFilterValue) && sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_WITHIN_LAST.backend\"), 0) === 0) {\n                sUnit = sFilterValue.split(\"_\")[1];\n                objFromDate.setTimeToStartOfDay();\n                objToDate.setTimeToStartOfDay();\n\n                if (bRestFormat) {\n                    objFromDate.setDateFromRest(sFrom);\n                    objToDate.setDateFromRest(sTo);\n                } else {\n                    objFromDate.setDateFromBrowser(sFrom, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                    objToDate.setDateFromBrowser(sTo, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                }\n\n                iDays = Math.round(objToDate.difference(objFromDate, sUnit, true));\n            } else if (!a24Core.isEmpty(sFilterValue) && sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_AT_LEAST.backend\"), 0) === 0) {\n                sUnit = sFilterValue.split(\"_\")[1];\n                objFromDate.setTimeToStartOfDay();\n                objToDate.setTimeToStartOfDay();\n\n                if (bRestFormat) {\n                    objToDate.setDateFromRest(sTo);\n                } else {\n                    objToDate.setDateFromBrowser(sTo, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                }\n\n                iDays = Math.round(objFromDate.difference(objToDate, sUnit, true));\n            } else if (!a24Core.isEmpty(sFilterValue) && sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsBetween.DATE_FILTER_BETWEEN.backend\"), 0) === 0) {\n                var arrExtraOptions = sFilterValue.split(\"_\");\n                iDays = arrExtraOptions[2];\n                iDaysTo = arrExtraOptions[3];\n            } else if (sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_WITHIN_THE_LAST.backend\") || sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_WITHIN_THE_NEXT.backend\") || sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_WITHIN_THE_NEXT.backend\") || sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_LAST.backend\") || sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_NEXT.backend\")) {\n                if (bRestFormat) {\n                    objFromDate.setDateFromRest(sFrom);\n                    objToDate.setDateFromRest(sTo);\n                } else {\n                    objFromDate.setDateFromBrowser(sFrom, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                    objToDate.setDateFromBrowser(sTo, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                }\n\n                objFromDate.setTimeToStartOfDay();\n                objToDate.setTimeToStartOfDay();\n                iDays = Math.round(objToDate.difference(objFromDate, a24Constants.MOMENT_TIME_DAYS, true));\n            }\n\n            var sFromValue = sFrom;\n            var sToValue = sTo;\n            var bChangedDate = false;\n            var objToAndFromDate = this.getDateFromAndToValues(sFilterValue, iDays, iDaysTo);\n            if (!objToAndFromDate.bCustomRange) {\n                bChangedDate = true;\n                if (objHeaderItem.bFilterAllowTime) {\n                    sFromValue = objToAndFromDate.sFromDate + \" \" + objToAndFromDate.sFromTime;\n                    sToValue = objToAndFromDate.sToDate + \" \" + objToAndFromDate.sToTime;\n                } else {\n                    sFromValue = objToAndFromDate.sFromDate;\n                    sToValue = objToAndFromDate.sToDate;\n                }\n            }\n            if (bRestFormat && !bChangedDate) {\n                //When dealing with the value from rest we assume that the time is\n                //already what is should be e.g start/end of day or custom time\n                if (!a24Core.isEmpty(sFromValue)) {\n                    objFromDate.setDateFromRest(sFromValue);\n                }\n                if (!a24Core.isEmpty(sToValue)) {\n                    objToDate.setDateFromRest(sToValue);\n                }\n            } else {\n                if (!a24Core.isEmpty(sFromValue)) {\n                    if (objHeaderItem.bFilterAllowTime) {\n                        objFromDate.setDateFromBrowser(sFromValue, this.get(\"_objLibConstants.DATE_TIME_FORMAT\"));\n                    } else {\n                        objFromDate.setDateFromBrowser(sFromValue, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                        objFromDate.setTimeToStartOfDay();\n                    }\n                }\n                if (!a24Core.isEmpty(sToValue)) {\n                    if (objHeaderItem.bFilterAllowTime) {\n                        objToDate.setDateFromBrowser(sToValue, this.get(\"_objLibConstants.DATE_TIME_FORMAT\"));\n                    } else {\n                        objToDate.setDateFromBrowser(sToValue, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                        objToDate.setTimeToEndOfDay();\n                    }\n                }\n            }\n\n            if (!a24Core.isEmpty(sFromValue) && !a24Core.isEmpty(sToValue)) {\n                //If both to and from dates have value we need to create a bFromAndTo query, so we set the\n                //from date time to the beginning of that day and the to date time to the end of that day.\n                objQueryObject = {\n                    bEncode: true\n                };\n                if (!a24Core.isEmpty(sFilterValue) && sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_WITHIN_LAST.backend\"), 0) === 0) {\n                    objQueryObject.bFromAndTo = true;\n                    objQueryObject.iDays = iDays;\n                } else if (!a24Core.isEmpty(sFilterValue) && sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsBetween.DATE_FILTER_BETWEEN.backend\"), 0) === 0) {\n                    objQueryObject = {\n                        bFromAndTo: true,\n                        iDays: iDays,\n                        iDaysTo: iDaysTo,\n                        bEncode: true\n                    };\n                } else if (sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_LAST.backend\")) {\n                    objQueryObject.bNotWithinLast = true;\n                } else if (sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_NEXT.backend\")) {\n                    objQueryObject.bNotWithinNext = true;\n                } else {\n                    objQueryObject.bFromAndTo = true;\n                }\n\n                var objFromAndTo = {};\n\n                if (objHeaderItem.bTimeless === true) {\n                    objFromAndTo.sFrom = objFromDate.getDateFormat();\n                    objFromAndTo.sTo = objToDate.getDateFormat();\n                } else {\n                    objFromAndTo.sFrom = objFromDate.getDateStringForRest();\n                    objFromAndTo.sTo = objToDate.getDateStringForRest();\n                }\n\n                objQueryObject.mValue = objFromAndTo;\n\n                if (!a24Core.isEmpty(sFilterValue) && sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_WITHIN_LAST.backend\"), 0) === 0) {\n                    sHeaderFilterTag = objHeaderItem.sTitle + \" \" + this.get(\"_objStringsService\").getString(\"dateFilterObtainedWithinLast\") + \" \" + iDays + \" \" + sUnit + \" \" + this.get(\"_objStringsService\").getString(\"ago\").toLowerCase();\n                } else if (sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_AFTER.backend\")) {\n                    var sFromString = \"\";\n\n                    if (objHeaderItem.bFilterAllowTime) {\n                        sFromString = objFromDate.getDateTimeFormat();\n                    } else {\n                        sFromString = objFromDate.getDateFormat();\n                    }\n\n                    sHeaderFilterTag = objHeaderItem.sTitle + \" \" + this.get(\"_objStringsService\").getString(\"dateFilterExpiryAfter\") + \" \" + sFromString;\n                } else if (sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED.backend\")) {\n                    sHeaderFilterTag = objHeaderItem.sTitle + \" \" + this.get(\"_objStringsService\").getString(\"dateFilterExpiryNotExpired\");\n                } else if (!a24Core.isEmpty(sFilterValue) && sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsBetween.DATE_FILTER_BETWEEN.backend\"), 0) === 0) {\n                    var _arrExtraOptions = sFilterValue.split(\"_\");\n                    sHeaderFilterTag = objHeaderItem.sTitle + \" is between \" + iDays + \" and \" + iDaysTo + \" days \" + this.get(\"_objStringsService\").getString(_arrExtraOptions[1]);\n                } else if (sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_WITHIN_THE_LAST.backend\") || sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_WITHIN_THE_NEXT.backend\") || sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_WITHIN_THE_NEXT.backend\") || sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_LAST.backend\") || sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_NOT_WITHIN_THE_NEXT.backend\")) {\n                    sHeaderFilterTag = objHeaderItem.sTitle + \" \" + this.get(\"_objStringsService\").getString(\"is\").toLowerCase() + \" \" + this.get(\"_objStringsService\").getString(sFilterValue) + \" \" + iDays + \" \" + this.get(\"_objStringsService\").getString(\"dateDays\");\n                } else if (sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_CUSTOM_RANGE.backend\") || sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_CUSTOM.backend\")) {\n                    if (objHeaderItem.bFilterAllowTime) {\n                        sHeaderFilterTag = objHeaderItem.sTitle + \" \" + this.get(\"_objStringsService\").getString(\"in\").toLowerCase() + \" \" + this.get(\"_objEmberLibStringsService\").getString(\"between\").toLowerCase() + \" \" + objFromDate.getDateTimeFormat() + \" \" + this.get(\"_objStringsService\").getString(\"and\").toLowerCase() + \" \" + objToDate.getDateTimeFormat();\n                    } else {\n                        sHeaderFilterTag = objHeaderItem.sTitle + \" \" + this.get(\"_objStringsService\").getString(\"in\").toLowerCase() + \" \" + this.get(\"_objEmberLibStringsService\").getString(\"between\").toLowerCase() + \" \" + objFromDate.getDateFormat() + \" \" + this.get(\"_objStringsService\").getString(\"and\").toLowerCase() + \" \" + objToDate.getDateFormat();\n                    }\n                } else {\n                    sHeaderFilterTag = objHeaderItem.sTitle + \" \" + this.get(\"_objStringsService\").getString(\"in\").toLowerCase() + \" \" + this.get(\"_objStringsService\").getString(sFilterValue);\n                }\n            } else if (!a24Core.isEmpty(sFromValue)) {\n                if (!a24Core.isEmpty(sFilterValue) && sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED_GRACE.backend\"), 0) === 0) {\n                    objQueryObject = {\n                        bEncode: true,\n                        bFrom: true,\n                        iDays: iDays\n                    };\n                } else if (!a24Core.isEmpty(sFilterValue) && sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_WILL_NOT_EXPIRE.backend\"), 0) === 0) {\n                    objQueryObject = {\n                        bEncode: true,\n                        bFrom: true,\n                        iDays: iDays\n                    };\n                } else if (sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED.backend\")) {\n                    objQueryObject = {\n                        bEncode: true,\n                        bFrom: true\n                    };\n                } else if (sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_AFTER.backend\")) {\n                    objQueryObject = {\n                        bEncode: true,\n                        bAfter: true\n                    };\n                } else {\n                    //If only the from date has a value then we set the time to the beginning of that day and create a\n                    //bFrom query\n                    objQueryObject = {\n                        bEncode: true,\n                        bFrom: true\n                    };\n                }\n\n                if (objHeaderItem.bTimeless === true) {\n                    objQueryObject.mValue = objFromDate.getDateFormat();\n                } else {\n                    objQueryObject.mValue = objFromDate.getDateStringForRest();\n                }\n\n                if (objHeaderItem.bFilterAllowTime) {\n                    sHeaderFilterTag = objHeaderItem.sTitle + \" \" + this.get(\"_objStringsService\").getString(\"is\").toLowerCase() + \" \" + this.get(\"_objEmberLibStringsService\").getString(\"after\").toLowerCase() + \" \" + objFromDate.getDateTimeFormat();\n                } else {\n                    sHeaderFilterTag = objHeaderItem.sTitle + \" \" + this.get(\"_objStringsService\").getString(\"is\").toLowerCase() + \" \" + this.get(\"_objEmberLibStringsService\").getString(\"after\").toLowerCase() + \" \" + objFromDate.getDateFormat();\n                }\n\n                if (!a24Core.isEmpty(sFilterValue) && sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED_GRACE.backend\"), 0) === 0) {\n                    sHeaderFilterTag = this.get(\"_objStringsService\").getString(\"dateFilterExpiryNotExpiredGrace\") + \" \" + iDays + \" \" + sUnit;\n                } else if (!a24Core.isEmpty(sFilterValue) && sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_WILL_NOT_EXPIRE.backend\"), 0) === 0) {\n                    sHeaderFilterTag = this.get(\"_objStringsService\").getString(\"dateFilterExpiryWillNotExpire\") + \" \" + iDays + \" \" + sUnit;\n                } else if (sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED.backend\")) {\n                    sHeaderFilterTag = objHeaderItem.sTitle + \" \" + this.get(\"_objStringsService\").getString(\"dateFilterExpiryNotExpired\");\n                } else if (sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_AFTER.backend\")) {\n                    var sDate = \"\";\n                    if (objHeaderItem.bFilterAllowTime) {\n                        sDate = objFromDate.getDateTimeFormat();\n                    } else {\n                        sDate = objFromDate.getDateFormat();\n                    }\n                    sHeaderFilterTag = objHeaderItem.sTitle + \" \" + this.get(\"_objStringsService\").getString(\"dateFilterExpiryAfter\") + \" \" + sDate;\n                } else if (sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsNotEmpty.DATE_FILTER_NOT_EMPTY.backend\")) {\n                    sHeaderFilterTag = this.get(\"_objStringsService\").getTokenString(\"isNotEmptyTag\", objHeaderItem.sTitle);\n                }\n            } else if (!a24Core.isEmpty(sToValue)) {\n                //If only the to date has a value then we set the time to the end of that day and create a\n                //bTo query\n                objQueryObject = {\n                    bEncode: true,\n                    bTo: true\n                };\n\n                if (!a24Core.isEmpty(sFilterValue) && sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_AT_LEAST.backend\"), 0) === 0) {\n                    objQueryObject.iDays = iDays;\n                }\n\n                if (objHeaderItem.bTimeless === true) {\n                    objQueryObject.mValue = objToDate.getDateFormat();\n                } else {\n                    objQueryObject.mValue = objToDate.getDateStringForRest();\n                }\n\n                if (objHeaderItem.bFilterAllowTime) {\n                    sHeaderFilterTag = objHeaderItem.sTitle + \" \" + this.get(\"_objStringsService\").getString(\"is\").toLowerCase() + \" \" + this.get(\"_objEmberLibStringsService\").getString(\"before\").toLowerCase() + \" \" + objToDate.getDateTimeFormat();\n                } else {\n                    sHeaderFilterTag = objHeaderItem.sTitle + \" \" + this.get(\"_objStringsService\").getString(\"is\").toLowerCase() + \" \" + this.get(\"_objEmberLibStringsService\").getString(\"before\").toLowerCase() + \" \" + objToDate.getDateFormat();\n                }\n                if (!a24Core.isEmpty(sFilterValue) && sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_AT_LEAST.backend\"), 0) === 0) {\n                    sHeaderFilterTag = objHeaderItem.sTitle + \" \" + this.get(\"_objStringsService\").getString(\"dateFilterObtainedAtLeast\") + \" \" + iDays + \" \" + sUnit + \" \" + this.get(\"_objStringsService\").getString(\"ago\").toLowerCase();\n                }\n            }\n\n            // This is the case where the primary filter is an array of objects and a date filter but there is\n            // no secondary filters. This will cause the date filter to not be wrapped in a contains and thus\n            // giving us undesired results. So now we set a flag to wrap it in a contains\n            if (!a24Core.isEmpty(objHeaderItem.sProperty) && objHeaderItem.sProperty.indexOf(\"___\") != -1 && !objHeaderItem.bFilterSecondary) {\n                objQueryObject.bApplyContains = true;\n            }\n\n            return {\n                objQuery: objQueryObject,\n                sTag: sHeaderFilterTag\n            };\n        },\n        fixupAdvanceQueryValues: function fixupAdvanceQueryValues(objHeader, objHeaderSecondaries) {\n            if (a24Core.isEmpty(objHeader.mFilterValue)) {\n                return;\n            }\n\n            if (objHeader.sFilterType === \"custom\") {\n                //It is up to the custom filter do fixup both primary and secondary filters in the one function.\n                objHeader.objFilterCustomService.funcFilterCustomFixupQuery(objHeader, objHeaderSecondaries);\n            } else {\n                for (var h = objHeader.mFilterValue.length - 1; h >= 0; h--) {\n                    //First we need to set the correct to and from date for dates that have a value like\n                    //dateFilterYesterday since yesterday will have different dates depending when you execute it\n                    //suggest input does not need any clean up on sFilterType value\n                    if (objHeader.sFilterType !== \"suggest\" && !a24Core.isEmpty(objHeader.mFilterValue[h].sFilterValue) && objHeader.mFilterValue[h].sFilterValue !== this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_CUSTOM_RANGE.backend\") && objHeader.mFilterValue[h].sFilterValue !== this.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_CUSTOM.backend\")) {\n\n                        var objQueryAndTag = {};\n                        if (objHeader.mFilterValue[h].sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED.backend\")) {\n                            var objCurrentDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n\n                            objQueryAndTag = this.createDateQueryAndTag(objHeader.mFilterValue[h].sFilterValue, objCurrentDate.getDateFormat(), \"\", objHeader, false);\n                        } else if (objHeader.mFilterValue[h].sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_AFTER.backend\")) {\n                            objQueryAndTag = this.createDateQueryAndTag(objHeader.mFilterValue[h].sFilterValue, objHeader.mFilterValue[h].mValue, \"\", objHeader, true);\n                        } else if (!a24Core.isEmpty(objHeader.mFilterValue[h].sFilterValue) && objHeader.mFilterValue[h].sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED_GRACE.backend\"), 0) === 0) {\n                            var _objCurrentDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                            _objCurrentDate.setTimeToStartOfDay();\n                            var sUnit = objHeader.mFilterValue[h].sFilterValue.split(\"_\")[1];\n                            _objCurrentDate.subtractTimeFromDate(sUnit, objHeader.mFilterValue[h].iDays);\n\n                            objQueryAndTag = this.createDateQueryAndTag(objHeader.mFilterValue[h].sFilterValue, _objCurrentDate.getDateFormat(), \"\", objHeader, false);\n                        } else if (!a24Core.isEmpty(objHeader.mFilterValue[h].sFilterValue) && objHeader.mFilterValue[h].sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_WILL_NOT_EXPIRE.backend\"), 0) === 0) {\n                            var _objCurrentDate2 = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                            _objCurrentDate2.setTimeToStartOfDay();\n                            var _sUnit7 = objHeader.mFilterValue[h].sFilterValue.split(\"_\")[1];\n                            _objCurrentDate2.addTimeToDate(_sUnit7, objHeader.mFilterValue[h].iDays);\n\n                            objQueryAndTag = this.createDateQueryAndTag(objHeader.mFilterValue[h].sFilterValue, _objCurrentDate2.getDateFormat(), \"\", objHeader, false);\n                        } else if (!a24Core.isEmpty(objHeader.mFilterValue[h].sFilterValue) && objHeader.mFilterValue[h].sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_WITHIN_LAST.backend\"), 0) === 0) {\n                            var _objCurrentDate3 = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                            var _sUnit8 = objHeader.mFilterValue[h].sFilterValue.split(\"_\")[1];\n                            _objCurrentDate3.setTimeToEndOfDay();\n                            var sToDate = _objCurrentDate3.getDateFormat();\n                            _objCurrentDate3.setTimeToStartOfDay();\n                            _objCurrentDate3.subtractTimeFromDate(_sUnit8, objHeader.mFilterValue[h].iDays);\n                            var sFromDate = _objCurrentDate3.getDateFormat();\n\n                            objQueryAndTag = this.createDateQueryAndTag(objHeader.mFilterValue[h].sFilterValue, sFromDate, sToDate, objHeader, false);\n                        } else if (!a24Core.isEmpty(objHeader.mFilterValue[h].sFilterValue) && objHeader.mFilterValue[h].sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_AT_LEAST.backend\"), 0) === 0) {\n                            var _objCurrentDate4 = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                            _objCurrentDate4.setTimeToEndOfDay();\n                            var _sUnit9 = objHeader.mFilterValue[h].sFilterValue.split(\"_\")[1];\n                            _objCurrentDate4.subtractTimeFromDate(_sUnit9, objHeader.mFilterValue[h].iDays);\n\n                            objQueryAndTag = this.createDateQueryAndTag(objHeader.mFilterValue[h].sFilterValue, \"\", _objCurrentDate4.getDateFormat(), objHeader, false);\n                        } else {\n                            //First we do the primary item\n                            objQueryAndTag = this.createDateQueryAndTag(objHeader.mFilterValue[h].sFilterValue, objHeader.mFilterValue[h].mValue.sFrom, objHeader.mFilterValue[h].mValue.sTo, objHeader, true);\n                        }\n\n                        if (a24Core.isEmpty(objQueryAndTag.objQuery)) {\n                            Ember.get(objHeader, \"mFilterValue\").removeAt(h);\n                            continue;\n                        } else {\n                            Ember.set(objHeader, \"mFilterValue.\" + h + \".mValue\", objQueryAndTag.objQuery.mValue);\n                        }\n                    }\n\n                    //Then we do the secondaries if they exist\n                    if (!a24Core.isEmpty(objHeader.mFilterValue[h].arSec)) {\n                        var arrSecondaries = Ember.get(objHeaderSecondaries, \"arrFilterSecondary_\" + objHeader.sProperty);\n                        if (a24Core.isEmpty(arrSecondaries)) {\n                            //eslint-disable-next-line no-console\n                            console.error(\"Datagrid filter config error, expected [\" + objHeader.sProperty + \"] to have a \" + \"non empty arrFilterSecondary_\" + objHeader.sProperty + \" property set on the config\");\n                            break;\n                        }\n\n                        //Loop in reverse so that we can remove items from the array without index out of bounds\n                        for (var x = objHeader.mFilterValue[h].arSec.length - 1; x >= 0; x--) {\n\n                            //If we cant find the secondary filter in the secondaries array on the objHeaderSecondaries\n                            //then we need to remove it from the query. This will be like a case where someone has the\n                            //url bookmarked and then we updated the datagrid to not support the particular secondary\n                            var objSecondaryHeader = null;\n                            for (var k = 0; k < arrSecondaries.length; k++) {\n                                if (arrSecondaries[k].sProperty === objHeader.mFilterValue[h].arSec[x].sProp) {\n                                    objSecondaryHeader = arrSecondaries[k];\n                                    break;\n                                }\n                            }\n                            if (a24Core.isEmpty(objSecondaryHeader)) {\n                                Ember.get(objHeader, \"mFilterValue.\" + h + \".arSec\").removeAt(x);\n                            } else {\n                                //NOTE for now only date items will have the \"sFilterValue\" set on the query object.\n                                // For now it should be safe to also do the !== \"suggest\" since ember side does not support\n                                // suggest on secondaries yet, but react side does.\n                                if (objSecondaryHeader.sFilterType !== \"suggest\" && !a24Core.isEmpty(objHeader.mFilterValue[h].arSec[x].sFilterValue) && objHeader.mFilterValue[h].arSec[x].sFilterValue !== this.get(\"_objEnumEmberLibService.dateFilterOptions.DATE_FILTER_CUSTOM_RANGE.backend\") && objHeader.mFilterValue[h].arSec[x].sFilterValue !== this.get(\"_objEnumEmberLibService.dateFilterOptionsFutureDates.DATE_FILTER_FUTURE_DATES_CUSTOM.backend\")) {\n                                    var _objQueryAndTag = {};\n                                    if (objHeader.mFilterValue[h].arSec[x].sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED.backend\")) {\n                                        var _objCurrentDate5 = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n\n                                        _objQueryAndTag = this.createDateQueryAndTag(objHeader.mFilterValue[h].arSec[x].sFilterValue, _objCurrentDate5.getDateFormat(), \"\", objSecondaryHeader, false);\n                                    } else if (objHeader.mFilterValue[h].arSec[x].sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_AFTER.backend\")) {\n                                        _objQueryAndTag = this.createDateQueryAndTag(objHeader.mFilterValue[h].arSec[x].sFilterValue, objHeader.mFilterValue[h].arSec[x].mValue, \"\", objSecondaryHeader, true);\n                                    } else if (!a24Core.isEmpty(objHeader.mFilterValue[h].arSec[x].sFilterValue) && objHeader.mFilterValue[h].arSec[x].sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED_GRACE.backend\"), 0) === 0) {\n                                        var _objCurrentDate6 = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                                        _objCurrentDate6.setTimeToStartOfDay();\n                                        var _sUnit10 = objHeader.mFilterValue[h].arSec[x].sFilterValue.split(\"_\")[1];\n                                        _objCurrentDate6.subtractTimeFromDate(_sUnit10, objHeader.mFilterValue[h].arSec[x].iDays);\n\n                                        _objQueryAndTag = this.createDateQueryAndTag(objHeader.mFilterValue[h].arSec[x].sFilterValue, _objCurrentDate6.getDateFormat(), \"\", objSecondaryHeader, false);\n                                    } else if (!a24Core.isEmpty(objHeader.mFilterValue[h].arSec[x].sFilterValue) && objHeader.mFilterValue[h].arSec[x].sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_WILL_NOT_EXPIRE.backend\"), 0) === 0) {\n                                        var _objCurrentDate7 = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                                        _objCurrentDate7.setTimeToStartOfDay();\n                                        var _sUnit11 = objHeader.mFilterValue[h].arSec[x].sFilterValue.split(\"_\")[1];\n                                        _objCurrentDate7.addTimeToDate(_sUnit11, objHeader.mFilterValue[h].arSec[x].iDays);\n\n                                        _objQueryAndTag = this.createDateQueryAndTag(objHeader.mFilterValue[h].arSec[x].sFilterValue, _objCurrentDate7.getDateFormat(), \"\", objSecondaryHeader, false);\n                                    } else if (!a24Core.isEmpty(objHeader.mFilterValue[h].arSec[x].sFilterValue) && objHeader.mFilterValue[h].arSec[x].sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_WITHIN_LAST.backend\"), 0) === 0) {\n                                        var _objCurrentDate8 = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                                        var _sUnit12 = objHeader.mFilterValue[h].arSec[x].sFilterValue.split(\"_\")[1];\n                                        _objCurrentDate8.setTimeToEndOfDay();\n                                        var _sToDate = _objCurrentDate8.getDateFormat();\n                                        _objCurrentDate8.setTimeToStartOfDay();\n                                        _objCurrentDate8.subtractTimeFromDate(_sUnit12, objHeader.mFilterValue[h].arSec[x].iDays);\n                                        var _sFromDate = _objCurrentDate8.getDateFormat();\n\n                                        _objQueryAndTag = this.createDateQueryAndTag(objHeader.mFilterValue[h].arSec[x].sFilterValue, _sFromDate, _sToDate, objSecondaryHeader, false);\n                                    } else if (!a24Core.isEmpty(objHeader.mFilterValue[h].arSec[x].sFilterValue) && objHeader.mFilterValue[h].arSec[x].sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_AT_LEAST.backend\"), 0) === 0) {\n                                        var _objCurrentDate9 = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                                        _objCurrentDate9.setTimeToEndOfDay();\n                                        var _sUnit13 = objHeader.mFilterValue[h].arSec[x].sFilterValue.split(\"_\")[1];\n                                        _objCurrentDate9.subtractTimeFromDate(_sUnit13, objHeader.mFilterValue[h].arSec[x].iDays);\n\n                                        _objQueryAndTag = this.createDateQueryAndTag(objHeader.mFilterValue[h].arSec[x].sFilterValue, \"\", _objCurrentDate9.getDateFormat(), objSecondaryHeader, false);\n                                    } else {\n                                        _objQueryAndTag = this.createDateQueryAndTag(objHeader.mFilterValue[h].arSec[x].sFilterValue, objHeader.mFilterValue[h].arSec[x].mValue.sFrom, objHeader.mFilterValue[h].arSec[x].mValue.sTo, objSecondaryHeader, true);\n                                    }\n\n                                    if (a24Core.isEmpty(_objQueryAndTag.objQuery)) {\n                                        Ember.get(objHeader, \"mFilterValue.\" + h + \".arSec\").removeAt(x);\n                                    } else {\n                                        Ember.set(objHeader, \"mFilterValue.\" + h + \".arSec.\" + x + \".mValue\", _objQueryAndTag.objQuery.mValue);\n                                    }\n                                }\n                            }\n                        }\n\n                        if (a24Core.isEmpty(objHeader.mFilterValue[h].arSec)) {\n                            delete Ember.get(objHeader, \"mFilterValue.\" + h).arSec;\n                        }\n                    }\n                }\n            }\n\n            if (a24Core.isEmpty(objHeader.mFilterValue)) {\n                Ember.set(objHeader, \"mFilterValue\", null);\n            }\n        },\n\n        /**\n         * Will update the values in the datagrid query param object with the values from the url string\n         *\n         * @author Ruan Naude <ruan.naude@a24group.com>\n         * @since  04 Jan 2021\n         *\n         * @param objDatagridQueryParamsObject - The `objQueryParams` from the card datagrid container\n         * @param sUrl - The query part of the url, for datagrids this is normally whatever follows `?` e.g\n         *               \"first_name=blah&last_name=%203453gffgg\"\n         * @param arrSkipProps - (Optional)A list of properties that should be ignored, thus those values will not be\n         *                      transplanted from the url to the query object\n         *\n         * @return A new copy of objDatagridQueryParamsObject with the updated values that can now be passed into\n         *    the card datagrid container to trigger the update.\n         */\n        transplantUrlValuesToDatagrid: function transplantUrlValuesToDatagrid(objDatagridQueryParamsObject, sUrl, arrSkipProps) {\n            var objParams = new URLSearchParams(sUrl);\n            var objReturn = Ember.copy(objDatagridQueryParamsObject, true);\n            if (a24Core.isEmpty(arrSkipProps)) {\n                arrSkipProps = [];\n            }\n\n            for (var sProp in objReturn) {\n                if (Object.prototype.hasOwnProperty.call(objReturn, sProp) && arrSkipProps.indexOf(sProp) === -1) {\n                    var sValue = objParams.get(sProp); //null if not in url\n                    if (sValue === null) {\n                        if (!a24Core.isEmpty(objReturn[sProp].sDefault)) {\n                            objReturn[sProp].sValue = objReturn[sProp].sDefault;\n                        } else {\n                            objReturn[sProp].sValue = \"\";\n                        }\n                    } else if (a24Core.isEmpty(sValue)) {\n                        objReturn[sProp].sValue = \"\";\n                    } else {\n                        objReturn[sProp].sValue = sValue;\n                    }\n                }\n            }\n\n            return objReturn;\n        },\n        /**\n         * Will generate the url part that represents the query filters for the datagrid from the objQueryParams in\n         * the card datagrid container\n         *\n         * @author Ruan Naude <ruan.naude@a24group.com>\n         * @since  05 Jan 2021\n         *\n         * @param objDatagridQueryParamsObject - The objQueryParams from the card datagrid container\n         * @param arrSkipProps - (Optional) A list of properties that should be ignored, thus not included in the url\n         *\n         * @return The query part of the url e.g \"first_name=blah&last_name=%203453gffgg\"\n         */\n        getDatagridUrlQueryString: function getDatagridUrlQueryString(objDatagridQueryParamsObject, arrSkipProps) {\n            var objParams = new URLSearchParams(\"\");\n            if (a24Core.isEmpty(arrSkipProps)) {\n                arrSkipProps = [];\n            }\n\n            for (var sProp in objDatagridQueryParamsObject) {\n                if (Object.prototype.hasOwnProperty.call(objDatagridQueryParamsObject, sProp) && arrSkipProps.indexOf(sProp) === -1) {\n                    if (objDatagridQueryParamsObject[sProp].sValue !== objDatagridQueryParamsObject[sProp].sDefault) {\n                        objParams.set(sProp, objDatagridQueryParamsObject[sProp].sValue);\n                    }\n                    //else do nothing since we dont want `empty default + empty value` in url and we also dont want\n                    //`default === value` in the url\n                }\n            }\n\n            return objParams.toString();\n        },\n\n        /**\n         * Will generate simple version of the datagrid tags from the datagrid headers.\n         * **NB** This fucntion assumes that the datagrid already generated the normal tags for each header.\n         *\n         * @author Ruan Naude <ruan.naude@a24group.com>\n         * @since  05 Jan 2021\n         *\n         * @param arrHeaders - The arrHeaders from the card datagrid container objDatagridConfig\n         *\n         * @return An array with simple tags in the structure of:\n         * [\n         *     {\n         *         \"title\": \"Gender is Female\"\n         *     },\n         *     {\n         *         \"title\": \"Skill Single is B Class, Status Verified, Years Of Experience bigger than 123\",\n         *     },\n         *     {\n         *         \"title\": \"Skill Multi: \",\n         *         \"tags\": [\n         *             {\n         *                 \"tag\": \"Is B Class, Status Verified, Years Of Experience bigger than 123\",\n         *                 \"isAnd\": false\n         *             },\n         *             {\n         *                 \"tag\": \"Is Heart Surgery, Status Verified, Years Of Experience 211\",\n         *                 \"isAnd\": true\n         *             }\n         *         ]\n         *     },\n         * ]\n         */\n        getSimpleTags: function getSimpleTags(arrHeaders) {\n            var arrSimpleTags = [];\n            for (var i = 0; i < arrHeaders.length; i++) {\n                var objHeader = arrHeaders[i];\n                var mValue = null;\n                if (!a24Core.isEmpty(objHeader.sFilterValue)) {\n                    mValue = objHeader.sFilterValue;\n                } else if (!a24Core.isEmpty(objHeader.mFilterValue)) {\n                    mValue = objHeader.mFilterValue;\n                }\n                if (!a24Core.isEmpty(objHeader.sTagValueSimple)) {\n                    arrSimpleTags.push({\n                        title: objHeader.sTagValueSimple,\n                        property: objHeader.sProperty,\n                        header: objHeader.sTitle,\n                        value: mValue\n                    });\n                } else if (!a24Core.isEmpty(objHeader.sTagValue)) {\n                    arrSimpleTags.push({\n                        title: objHeader.sTagValue,\n                        property: objHeader.sProperty,\n                        header: objHeader.sTitle,\n                        value: mValue\n                    });\n                } else if (!a24Core.isEmpty(objHeader.arrTagValue)) {\n                    var objMultiTag = {\n                        title: objHeader.arrTagValue[0].sValueClean,\n                        tags: [],\n                        property: objHeader.sProperty,\n                        header: objHeader.sTitle,\n                        value: mValue\n                    };\n                    for (var j = 1; j < objHeader.arrTagValue.length; j++) {\n                        objMultiTag.tags.push({\n                            tag: objHeader.arrTagValue[j].sValueClean,\n                            isAnd: objHeader.arrTagValue[j].bAnd === true\n                        });\n                    }\n                    arrSimpleTags.push(objMultiTag);\n                }\n            }\n            return arrSimpleTags;\n        }\n    });\n});","define(\"a24-ember-lib/services/card-datagrid-temporal-variable\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objEnumEmberLibService: Ember.inject.service(\"a24-enums-ember-lib\"),\n\n        _objUnitMap: null,\n\n        convertQueryToTemporalVariables: function convertQueryToTemporalVariables(objQuery, objDatagridConfig) {\n            if (a24Core.isEmpty(this.get(\"_objUnitMap\"))) {\n                this.set(\"_objUnitMap\", {\n                    days: \"d\",\n                    months: \"m\",\n                    years: \"y\"\n                });\n            }\n\n            this._convertQueryAndOrToTemporal(objQuery.and, objDatagridConfig);\n            return objQuery;\n        },\n\n        _convertQueryAndOrToTemporal: function _convertQueryAndOrToTemporal(arrQuery, objDatagridConfig) {\n            var _this = this;\n\n            $.each(arrQuery, function (iKey, objQueryItem) {\n                if (!a24Core.isEmpty(objQueryItem.and)) {\n                    _this._convertQueryAndOrToTemporal(objQueryItem.and, objDatagridConfig);\n                } else if (!a24Core.isEmpty(objQueryItem.or)) {\n                    _this._convertQueryAndOrToTemporal(objQueryItem.or, objDatagridConfig);\n                } else {\n                    _this._convertQueryItemToTemporal(objQueryItem, objDatagridConfig, iKey);\n                }\n            });\n        },\n\n        _convertQueryItemToTemporal: function _convertQueryItemToTemporal(objQueryItem, objDatagridConfig, iQueryIndex) {\n            var _this2 = this;\n\n            var arrQueryItemKeys = Object.keys(objQueryItem);\n            arrQueryItemKeys.forEach(function (sQueryItemProp, iItemIndex) {\n                $.each(objQueryItem[sQueryItemProp].contains, function (iQueryKey, objEachQuery) {\n                    var arrEachQueryKeys = Object.keys(objEachQuery);\n                    arrEachQueryKeys.forEach(function (sEachQueryProp) {\n                        $.each(objDatagridConfig.arrHeaderConfig, function (iKey, objHeaderItem) {\n                            var arrProps = objHeaderItem.sProperty.split(\"___\");\n                            if (sQueryItemProp === arrProps[0]) {\n                                if (sEachQueryProp === arrProps[1]) {\n                                    if (objHeaderItem.bTemporal) {\n                                        Ember.set(objEachQuery, sEachQueryProp, _this2._convertToTemporal(objHeaderItem, objEachQuery[sEachQueryProp], false));\n                                    }\n                                } else {\n                                    if (objHeaderItem.bFilterSecondary || objHeaderItem.bFilterAnd || objHeaderItem.bFilterOr || objHeaderItem.sFilterType === \"custom\") {\n                                        if (objHeaderItem.bFilterSecondary) {\n                                            var arrSecondaries = objDatagridConfig[\"arrFilterSecondary_\" + objHeaderItem.sProperty];\n                                            $.each(arrSecondaries, function (iSecKey, objSecondaryItem) {\n                                                if (objSecondaryItem.sProperty === sEachQueryProp && objSecondaryItem.bTemporal) {\n                                                    var iIndex = objHeaderItem.mFilterValue.length > 1 ? iQueryIndex : iItemIndex;\n\n                                                    var objFilterItem = objHeaderItem.mFilterValue[iIndex];\n                                                    $.each(objFilterItem.arSec, function (iFilterKey, objFilterItem) {\n                                                        if (!a24Core.isEmpty(objFilterItem) && objFilterItem.sProp === sEachQueryProp) {\n                                                            Ember.set(objEachQuery, sEachQueryProp, _this2._convertToTemporal(objFilterItem, objEachQuery[sEachQueryProp], true));\n                                                        }\n                                                    });\n                                                }\n                                            });\n                                        } else {\n                                            $.each(objHeaderItem.mFilterValue, function (iKey, objFilter) {\n                                                Ember.set(objEachQuery, sEachQueryProp, _this2._convertToTemporal(objFilter, objEachQuery[sEachQueryProp], true));\n                                            });\n                                        }\n                                    }\n                                }\n                            }\n                        });\n                    });\n                });\n            });\n        },\n\n        _convertToTemporal: function _convertToTemporal(objFilter, objQuery, bHasDays) {\n            var objUnitMap = null;\n            if (a24Core.isEmpty(this.get(\"_objUnitMap\"))) {\n                objUnitMap = {\n                    days: \"d\",\n                    months: \"m\",\n                    years: \"y\"\n                };\n                this.set(\"_objUnitMap\", objUnitMap);\n            } else {\n                objUnitMap = this.get(\"_objUnitMap\");\n            }\n            var sUnit = objFilter.sFilterValue.split(\"_\")[1];\n            var iDays = 0;\n            if (bHasDays) {\n                iDays = objFilter.iDays;\n            } else {\n                var objFromDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                var objToDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                if (objFilter.sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED_GRACE.backend\"), 0) === 0) {\n                    objFromDate.setDateFromBrowser(objFilter.sFilterFromValue, this.get(\"_objLibConstants.DATE_FORMAT\"));\n\n                    iDays = Math.round(objToDate.difference(objFromDate, sUnit, true));\n                } else if (objFilter.sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_WILL_NOT_EXPIRE.backend\"), 0) === 0) {\n                    objFromDate.setDateFromBrowser(objFilter.sFilterFromValue, this.get(\"_objLibConstants.DATE_FORMAT\"));\n\n                    iDays = Math.round(objFromDate.difference(objToDate, sUnit, true));\n                } else if (objFilter.sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_WITHIN_LAST.backend\"), 0) === 0) {\n                    objFromDate.setDateFromBrowser(objFilter.sFilterFromValue, this.get(\"_objLibConstants.DATE_FORMAT\"));\n                    objToDate.setDateFromBrowser(objFilter.sFilterToValue, this.get(\"_objLibConstants.DATE_FORMAT\"));\n\n                    iDays = Math.round(objToDate.difference(objFromDate, sUnit, true));\n                } else if (objFilter.sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_AT_LEAST.backend\"), 0) === 0) {\n                    objToDate.setDateFromBrowser(objFilter.sFilterToValue, this.get(\"_objLibConstants.DATE_FORMAT\"));\n\n                    iDays = Math.round(objFromDate.difference(objToDate, sUnit, true));\n                }\n            }\n            if (objFilter.sFilterValue === this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED.backend\")) {\n                Ember.set(objQuery, \"greater_than_equal\", \"{{CURRENT_DATE}}\");\n            } else if (objFilter.sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_NOT_EXPIRED_GRACE.backend\"), 0) === 0) {\n                Ember.set(objQuery, \"greater_than_equal\", \"{{CURRENT_DATE}} - \" + iDays + objUnitMap[sUnit]);\n            } else if (objFilter.sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsExpiry.DATE_FILTER_EXPIRY_WILL_NOT_EXPIRE.backend\"), 0) === 0) {\n                Ember.set(objQuery, \"greater_than_equal\", \"{{CURRENT_DATE}} + \" + iDays + objUnitMap[sUnit]);\n            } else if (objFilter.sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_WITHIN_LAST.backend\"), 0) === 0) {\n                Ember.set(objQuery, \"less_than_equal\", \"{{CURRENT_DATE}}\");\n                Ember.set(objQuery, \"greater_than_equal\", \"{{CURRENT_DATE}} - \" + iDays + objUnitMap[sUnit]);\n            } else if (objFilter.sFilterValue.lastIndexOf(this.get(\"_objEnumEmberLibService.dateFilterOptionsObtained.DATE_FILTER_OBTAINED_AT_LEAST.backend\"), 0) === 0) {\n                Ember.set(objQuery, \"less_than_equal\", \"{{CURRENT_DATE}} - \" + iDays + objUnitMap[sUnit]);\n            }\n\n            return objQuery;\n        }\n\n    });\n});","define(\"a24-ember-lib/services/chatter-iframe-com-base\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objLastNotification: null,\n\n        objIntervalTimer: null,\n        sLastHash: null,\n        iCacheBust: 0,\n\n        postMessage: function postMessage(sMessage, sTargetUrl, objTarget) {\n\n            if (!sTargetUrl) {\n                return;\n            }\n\n            sTargetUrl = window.location.protocol + sTargetUrl;\n\n            objTarget = objTarget || parent; // default to parent\n\n            if (window[\"postMessage\"]) {\n                // the browser supports window.postMessage, so call it with a targetOrigin\n                // set appropriately, based on the target_url parameter.\n                objTarget[\"postMessage\"](sMessage, sTargetUrl.replace(/([^:]+:\\/\\/[^/]+).*/, \"$1\"));\n            } else if (sTargetUrl) {\n                // the browser does not support window.postMessage, so set the location\n                // of the objTarget to sTargetUrl#sMessage. A bit ugly, but it works! A cache\n                // bust parameter is added to ensure that repeat messages trigger the callback.\n                this.set(\"iCacheBust\", this.get(\"iCacheBust\") + 1);\n                objTarget.location = sTargetUrl.replace(/#.*$/, \"\") + \"#\" + +new Date() + this.get(\"iCacheBust\") + \"&\" + sMessage;\n            }\n        },\n\n        receiveMessage: function receiveMessage(funcCallback, mSourceOrigin) {\n            var _this = this;\n\n            // browser supports window.postMessage\n            if (window[\"postMessage\"]) {\n                var funcUnregister = null;\n                var objCallbackWrapper = function objCallbackWrapper(objEvent) {\n                    if (typeof mSourceOrigin === \"string\" && objEvent.origin !== window.location.protocol + mSourceOrigin || Object.prototype.toString.call(mSourceOrigin) === \"[object Function]\" && mSourceOrigin(objEvent.origin) === !1) {\n                        return !1;\n                    }\n                    funcCallback(objEvent);\n                };\n\n                if (window[\"addEventListener\"]) {\n                    window[\"addEventListener\"](\"message\", objCallbackWrapper, !1);\n                    funcUnregister = function funcUnregister() {\n                        window[\"removeEventListener\"](\"message\", objCallbackWrapper, !1);\n                    };\n                    return funcUnregister;\n                } else {\n                    window[\"attachEvent\"](\"onmessage\", objCallbackWrapper);\n                    funcUnregister = function funcUnregister() {\n                        window[\"detachEvent\"](\"onmessage\", objCallbackWrapper);\n                    };\n                    return funcUnregister;\n                }\n            } else {\n                // a polling loop is started & callback is called whenever the location.hash changes\n                var funcUnregisterPoller = function funcUnregisterPoller() {\n                    if (!a24Core.isEmpty(_this.get(\"objIntervalTimer\"))) {\n                        Ember.run.cancel(_this.get(\"objIntervalTimer\"));\n                        _this.set(\"objIntervalTimer\", null);\n                    }\n                };\n                funcUnregisterPoller();\n\n                if (!a24Core.isEmpty(funcCallback)) {\n                    this._funcPoll(funcCallback);\n                }\n\n                return funcUnregisterPoller;\n            }\n        },\n\n        openDesktopNotification: function openDesktopNotification(sIframeUrl, objTarget, objNotificationData) {\n            var objThis = this;\n            if (\"Notification\" in window) {\n                if (Notification.permission !== \"granted\") {\n                    Notification.requestPermission();\n                } else {\n                    if (!objNotificationData.hasOwnProperty(\"forceSingleton\")) {\n                        objNotificationData.forceSingleton = true;\n                    }\n                    if (objNotificationData.forceSingleton && !a24Core.isEmpty(this.get(\"_objLastNotification\"))) {\n                        this.get(\"_objLastNotification\").close();\n                    }\n                    var objNotification = new Notification(objNotificationData.title, {\n                        body: objNotificationData.body,\n                        icon: objNotificationData.icon,\n                        badge: objNotificationData.badge\n                    });\n\n                    if (!a24Core.isEmpty(objNotificationData.callbackId)) {\n                        objNotification.onclick = function () {\n                            var objData = {\n                                type: \"callback_by_id\",\n                                data: {\n                                    callbackId: objNotificationData.callbackId\n                                }\n                            };\n\n                            objThis.postMessage(JSON.stringify(objData), sIframeUrl, objTarget);\n\n                            window.focus();\n                        };\n                    }\n\n                    this.set(\"_objLastNotification\", objNotification);\n                }\n            }\n        },\n\n        _funcPoll: function _funcPoll(funcCallback) {\n            var _this2 = this;\n\n            this.set(\"objIntervalTimer\", Ember.run.later(this, function () {\n                if (!a24Core.isEmpty(_this2.get(\"objIntervalTimer\"))) {\n                    Ember.run.cancel(_this2.get(\"objIntervalTimer\"));\n                }\n                var sHash = document.location.hash;\n                var sRegex = /^#?\\d+&/;\n                if (sHash !== _this2.get(\"sLastHash\") && sRegex.test(sHash)) {\n                    _this2.set(\"sLastHash\", sHash);\n                    funcCallback({ data: sHash.replace(sRegex, \"\") });\n                }\n                _this2._funcPoll();\n            }, 100));\n        }\n    });\n});","define(\"a24-ember-lib/services/component-sort\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        filterAndSortComponents: function filterAndSortComponents(arrComponents, arrGroupings, sFilterProperty, sFilterValue, sInnerSortProperty) {\n            var arrComponentsFiltered = null;\n\n            if (!a24Core.isEmpty(sFilterProperty) && !a24Core.isEmpty(sFilterValue)) {\n                arrComponentsFiltered = arrComponents.filter(function (objComponent) {\n                    return Ember.get(objComponent, sFilterProperty).toLowerCase().indexOf(sFilterValue.toLowerCase()) !== -1;\n                });\n            } else {\n                arrComponentsFiltered = arrComponents;\n            }\n\n            var arrGroups = [];\n            var iGroupingsLength = arrGroupings.length;\n\n            for (var i = 0; i < iGroupingsLength; i++) {\n                var objGroup = arrGroupings[i];\n\n                var arrItems = arrComponentsFiltered.filter(function (objComponent) {\n                    return objGroup.funcGroupFilter(objComponent);\n                });\n\n                if (!a24Core.isEmpty(arrItems)) {\n                    arrGroups.push({\n                        sTitle: objGroup.sTitle,\n                        arrItems: arrItems.sortBy(sInnerSortProperty)\n                    });\n                }\n            }\n\n            return arrGroups;\n        }\n    });\n});","define(\"a24-ember-lib/services/fab-button\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _arrFabActions: null,\n        _bHasNewAction: false,\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        init: function init() {\n            this._super.apply(this, arguments);\n            this.set(\"_arrFabActions\", []);\n            this.get(\"_objNavigationService\");\n            this.get(\"_objStringsService\");\n        },\n        observeRouteChange: Ember.observer(\"_objNavigationService.sCurrentRouteName\", function () {\n            this.hideFabButton();\n        }),\n        showFabButton: function showFabButton(funcFabAction, sIconName, sTooltip, sButtonColor, sIconColor, bLightWaves, sIconFaName, sIconSvg) {\n            var _this = this;\n\n            var objFabData = {\n                funcFabAction: funcFabAction,\n                sIconName: sIconName,\n                sIconFaName: sIconFaName,\n                sIconSvg: sIconSvg,\n                sTooltip: sTooltip,\n                sButtonColor: sButtonColor,\n                sIconColor: sIconColor,\n                bLightWaves: bLightWaves\n            };\n\n            if (a24Core.isEmpty(objFabData.sIconName) && a24Core.isEmpty(objFabData.sIconFaName) && a24Core.isEmpty(objFabData.sIconSvg)) {\n                objFabData.sIconName = \"add\";\n            }\n            if (a24Core.isEmpty(objFabData.sTooltip)) {\n                objFabData.sTooltip = this.get(\"_objStringsService\").getString(\"add\");\n            }\n            if (a24Core.isEmpty(objFabData.sButtonColor)) {\n                objFabData.sButtonColor = \"\";\n            }\n            if (a24Core.isEmpty(objFabData.sIconColor)) {\n                objFabData.sIconColor = \"white-text\";\n            }\n            if (a24Core.isEmpty(objFabData.bLightWaves)) {\n                objFabData.bLightWaves = true;\n            }\n\n            //We do this in a next so that the route change code can run first\n            Ember.run.next(function () {\n                _this.get(\"_arrFabActions\").pushObject(objFabData);\n                _this.set(\"_bHasNewAction\", true);\n            });\n        },\n        hideFabButton: function hideFabButton() {\n            this.get(\"_arrFabActions\").clear();\n            //Yes this should be true, so that if fires the observe in the fab component to let it know it should clear the\n            //fab button from the screen. The fab component observes the _bHasNewAction and will set it back to false each\n            //time it goes to true\n            this.set(\"_bHasNewAction\", true);\n        }\n    });\n});","define(\"a24-ember-lib/services/google-analytics\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            //Only create the google analytics if it is configured for the current environment\n            if (!a24Core.isEmpty(this._getGoogleAnalyticsConfig())) {\n                this._gaWrapper(\"create\", this._getGoogleAnalyticsConfig().sWebPropertyId, \"auto\");\n            }\n        },\n        doPageViewHit: function doPageViewHit(sPage, bUseIds, bUseQueryParams) {\n            //Only do screen hit if it is configured for the current environment\n            if (!a24Core.isEmpty(this._getGoogleAnalyticsConfig())) {\n                var sPageHit = sPage;\n                if (!bUseQueryParams) {\n                    if (sPage.indexOf(\"?\") !== -1) {\n                        sPageHit = sPage.slice(0, sPage.indexOf(\"?\"));\n                    }\n                }\n\n                var sUpdatedPage = sPageHit;\n                if (!bUseIds) {\n                    var objRegex = /[a-zA-Z0-9]{24}/g;\n                    sUpdatedPage = sPageHit.replace(objRegex, this.get(\"_objLibConstants.GOOGLE_ANALYTICS_PAGE_VIEW_ID_TOKEN\"));\n                }\n\n                this._gaWrapper(\"send\", \"pageview\", sUpdatedPage);\n            }\n        },\n        _getGoogleAnalyticsConfig: function _getGoogleAnalyticsConfig() {\n            var objConfig = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n            return objConfig.objGoogleAnalytics;\n        },\n        _gaWrapper: function _gaWrapper(sAction, sActionValue, mPayload) {\n            ga(sAction, sActionValue, mPayload);\n        }\n    });\n});","define(\"a24-ember-lib/services/input-form-file-service\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        /**\n         * Get file for an input\n         *\n         * @param objFileInput - The input element\n         * @param bReturnName - True if only the file name should be returned\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  1 November 2019\n         */\n        getFileObject: function getFileObject(objFileInput, bReturnName) {\n            if (a24Core.isEmpty(objFileInput.get(0).files) || a24Core.isEmpty(objFileInput.get(0).files[0])) {\n                return \"\";\n            } else {\n                if (bReturnName) {\n                    return objFileInput.get(0).files[0].name;\n                } else {\n                    return objFileInput.get(0).files[0];\n                }\n            }\n        },\n\n\n        /**\n         * Get file input id\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  1 November 2019\n         */\n        getFileInputId: function getFileInputId() {\n            return Ember.guidFor({});\n        }\n    });\n});","define(\"a24-ember-lib/services/post-code-validator\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objEmberLibStringService: Ember.inject.service(\"a24-strings-ember-lib\"),\n\n        validatePostCode: function validatePostCode(sPostCode, sCountryCode) {\n            if (a24Core.isEmpty(sCountryCode)) {\n                sCountryCode = \"GB\";\n            }\n\n            switch (sCountryCode.toLowerCase()) {\n                case \"uk\":\n                case \"gb\":\n                    return this.validateUkPostCode(sPostCode);\n                case \"us\":\n                    return this.validateUsPostCode(sPostCode);\n                case \"au\":\n                    return this.validateAuPostCode(sPostCode);\n                default:\n                    return true;\n            }\n        },\n\n        validateUsPostCode: function validateUsPostCode(sPostCode) {\n            var objRegex = /(^\\d{5}$)|(^\\d{5}-\\d{4}$)/;\n\n            if (objRegex.test(sPostCode)) {\n                return true;\n            } else {\n                return this.get(\"_objEmberLibStringService\").getString(\"validationUsPostCode\");\n            }\n        },\n\n        validateAuPostCode: function validateAuPostCode(sPostCode) {\n            var objRegex = /^\\d{4}$/;\n\n            if (objRegex.test(sPostCode)) {\n                return true;\n            } else {\n                return this.get(\"_objEmberLibStringService\").getString(\"validationAuPostCode\");\n            }\n        },\n\n        validateUkPostCode: function validateUkPostCode(sPostCode) {\n            //Change All Characters to Upper\n            sPostCode = String(sPostCode).trim().toUpperCase();\n\n            //First Checks for Special Characters\n            if (!this.checkSpecialCharacters(sPostCode)) {\n                //Split PostCode into Part 1 and Part 2\n                var arrPostCodeParts = sPostCode.split(/[ ]+/); // You can make this better if you like\n                var sPostCode2 = \"\";\n                var sPostCode1 = \"\";\n\n                if (arrPostCodeParts.length > 1) {\n                    sPostCode2 = arrPostCodeParts[1];\n                    sPostCode1 = arrPostCodeParts[0];\n                } else {\n                    sPostCode2 = sPostCode.substring(sPostCode.length - 3, sPostCode.length);\n                    sPostCode1 = sPostCode.substring(0, sPostCode.length - 3);\n                }\n\n                if (sPostCode1.length > 4) {\n                    return this.get(\"_objEmberLibStringService\").getString(\"validationFirstPartPostCodeTooManyCharacters\");\n                }\n\n                var sValidPostCode1 = this.validateFirstPartPostcode(sPostCode1);\n                var sValidPostCode2 = this.validateSecondPartPostcode(sPostCode2);\n                //Check Error and validation for first part of post code\n                if (sValidPostCode1 === sPostCode1) {\n                    //Check Error and validation for P2\n                    if (sValidPostCode2 === sPostCode2) {\n                        //Return true if both Parts of PostCode contains no Errors\n                        return true;\n                    } else {\n                        //Return Error message for P2 cause P1 passed\n                        return sValidPostCode2;\n                    }\n                } else {\n                    //Return Error message for P1\n                    return sValidPostCode1;\n                }\n            } else {\n                //Display Error message for Special Characters\n                return this.get(\"_objEmberLibStringService\").getString(\"validationPostCodeHasSpecialCharacters\");\n            }\n        },\n\n        checkSpecialCharacters: function checkSpecialCharacters(sPostCode) {\n            //Regex Expression for Special characters\n            var objRegex = /[!@#$%^&*(),.?\":{}|<>]/g;\n\n            //Testing Expression with PostCode to Check for Special Characters\n            if (objRegex.test(sPostCode)) {\n                return true;\n            } else {\n                return false;\n            }\n        },\n\n        validateFirstPartPostcode: function validateFirstPartPostcode(sPostCode1) {\n            var sErrorMessage = \"\";\n\n            var objRegex1 = /^[A-Z][0-9][A-Z]$/;\n            if (objRegex1.test(sPostCode1)) {\n                // Regex Format below\n                // /^[ABCDEFGHIJKLMNOPRSTUWYZ][0-9][ABCDEFGHJKSTUW]$/\n                if (RegExp(/^[ABCDEFGHIJKLMNOPRSTUWYZ]/).test(sPostCode1)) {\n                    if (RegExp(/[0-9]{1}/).test(sPostCode1)) {\n                        if (RegExp(/[ABCDEFGHJKSTUW]$/).test(sPostCode1)) {\n                            return sPostCode1;\n                        } else {\n                            sErrorMessage = this.get(\"_objEmberLibStringService\").getString(\"validationFirstPartPostCodeLastLetterA9A\");\n                        }\n                    } else {\n                        sErrorMessage = this.get(\"_objEmberLibStringService\").getString(\"validationFirstPartPostCodeMustAlwaysContainNumber\");\n                    }\n                } else {\n                    sErrorMessage = this.get(\"_objEmberLibStringService\").getString(\"validationFirstPartPostCodeFirstLetter\");\n                }\n                return sErrorMessage;\n            }\n\n            var objRegex2 = /^[A-Z][0-9]{1,2}$/;\n            if (objRegex2.test(sPostCode1)) {\n                // Regex Format below\n                // /^[ABCDEFGHIJKLMNOPRSTUWYZ][0-9]{1,2}$/\n                if (RegExp(/^[ABCDEFGHIJKLMNOPRSTUWYZ]/).test(sPostCode1)) {\n                    if (RegExp(/[0-9]{1,2}$/).test(sPostCode1)) {\n                        return sPostCode1;\n                    } else {\n                        sErrorMessage = this.get(\"_objEmberLibStringService\").getString(\"validationFirstPartPostCodeMustEndWithNumber\");\n                    }\n                } else {\n                    sErrorMessage = this.get(\"_objEmberLibStringService\").getString(\"validationFirstPartPostCodeFirstLetter\");\n                }\n\n                return sErrorMessage;\n            }\n\n            var objRegex3 = /^[A-Z][A-Z][0-9]{1,2}$/;\n            if (objRegex3.test(sPostCode1)) {\n                // Regex Format below\n                // /^[ABCDEFGHIJKLMNOPRSTUWYZ][ABCDEFGHKLMNOPQRSTUVWXY][0-9]{1,2}$/\n                if (RegExp(/^[ABCDEFGHIJKLMNOPRSTUWYZ][ABCDEFGHKLMNOPQRSTUVWXY]/).test(sPostCode1)) {\n                    if (RegExp(/[0-9]{1,2}$/).test(sPostCode1)) {\n                        return sPostCode1;\n                    } else {\n                        sErrorMessage = this.get(\"_objEmberLibStringService\").getString(\"validationFirstPartPostCodeMustEndWithNumber\");\n                    }\n                } else {\n                    if (RegExp(/^[QVX]/).test(sPostCode1)) {\n                        sErrorMessage = this.get(\"_objEmberLibStringService\").getString(\"validationFirstPartPostCodeFirstLetter\");\n                    }\n                    if (RegExp(/^.[IJZ]/).test(sPostCode1)) {\n                        sErrorMessage = this.get(\"_objEmberLibStringService\").getString(\"validationFirstPartPostCodeSecondLetter\");\n                    }\n                }\n\n                return sErrorMessage;\n            }\n\n            var objRegex4 = /^[A-Z][A-Z][0-9][A-Z]$/;\n            if (objRegex4.test(sPostCode1)) {\n                // Regex Format below\n                // /^[ABCDEFGHIJKLMNOPRSTUWYZ][ABCDEFGHKLMNOPQRSTUVWXY][0-9][ABEHMNPRVWXY]$/\n                if (RegExp(/^[ABCDEFGHIJKLMNOPRSTUWYZ][ABCDEFGHKLMNOPQRSTUVWXY]/).test(sPostCode1)) {\n                    if (RegExp(/[0-9]{1,2}/).test(sPostCode1)) {\n                        if (RegExp(/[ABEHMNPRVWXY]$/).test(sPostCode1)) {\n                            return sPostCode1;\n                        } else {\n                            sErrorMessage = this.get(\"_objEmberLibStringService\").getString(\"validationFirstPartPostCodeLastLetterAA9A\");\n                        }\n                    } else {\n                        sErrorMessage = this.get(\"_objEmberLibStringService\").getString(\"validationFirstPartPostCodeMustAlwaysContainNumber\");\n                    }\n                } else {\n                    if (RegExp(/^[QVX]/).test(sPostCode1)) {\n                        sErrorMessage = this.get(\"_objEmberLibStringService\").getString(\"validationFirstPartPostCodeFirstLetter\");\n                    }\n                    if (RegExp(/^.[IJZ]/).test(sPostCode1)) {\n                        sErrorMessage = this.get(\"_objEmberLibStringService\").getString(\"validationFirstPartPostCodeSecondLetter\");\n                    }\n                }\n\n                return sErrorMessage;\n            }\n\n            var objPostcodeStandardA9 = /^[A-Z][0-9]$/;\n            var objPostcodeStandardA99 = /^[A-Z][0-9][0-9]$/;\n            var objPostcodeStandardA9A = /^[A-Z][0-9][A-Z]$/;\n            var objPostcodeStandardAA9 = /^[A-Z][A-Z][0-9]$/;\n            var objPostcodeStandardAA99 = /^[A-Z][A-Z][0-9][0-9]$/;\n            var objPostcodeStandardAA9A = /^[A-Z][A-Z][0-9][A-Z]$/;\n\n            var objNumberCheck = /[0-9]{1,2}/;\n            var objAplhaCheck = /^[A-Z]{1,2}/;\n\n            if (!objAplhaCheck.test(sPostCode1)) {\n                sErrorMessage = this.get(\"_objEmberLibStringService\").getString(\"validationFirstPartPostCodeMustAlwaysStartWithLetter\");\n            } else if (!objNumberCheck.test(sPostCode1)) {\n                sErrorMessage = this.get(\"_objEmberLibStringService\").getString(\"validationFirstPartPostCodeMustAlwaysContainNumber\");\n            } else {\n                var rNumberRegex = RegExp(/[0-9]/g);\n                var iCount = 0;\n\n                // This is used instead of the matchAll function since browser support is more for current browser versions\n                while (rNumberRegex.exec(sPostCode1) !== null) {\n                    iCount++;\n                }\n\n                if (iCount > 2) {\n                    sErrorMessage = this.get(\"_objEmberLibStringService\").getString(\"validationFirstPartPostCodeCannotHaveMoreThanTwoNumbers\");\n                } else {\n                    if (sPostCode1.length === 2 && !objPostcodeStandardA9.test(sPostCode1)) {\n                        sErrorMessage = this.get(\"_objEmberLibStringService\").getString(\"validationFirstPartPostCode2CharStucture\");\n                    } else if (sPostCode1.length === 3 && (!objPostcodeStandardA99.test(sPostCode1) || !objPostcodeStandardA9A.test(sPostCode1) || !objPostcodeStandardAA9.test(sPostCode1))) {\n                        sErrorMessage = this.get(\"_objEmberLibStringService\").getString(\"validationFirstPartPostCode3CharStucture\");\n                    } else if (sPostCode1.length === 4 && (!objPostcodeStandardAA99.test(sPostCode1) || !objPostcodeStandardAA9A.test(sPostCode1))) {\n                        sErrorMessage = this.get(\"_objEmberLibStringService\").getString(\"validationFirstPartPostCode4CharStucture\");\n                    } else {\n                        sErrorMessage = sPostCode1;\n                    }\n                }\n            }\n\n            return sErrorMessage;\n        },\n\n        validateSecondPartPostcode: function validateSecondPartPostcode(sPostCode2) {\n            //Split PostCode\n            var sPart1 = sPostCode2.substring(0, 1);\n            var sPart2 = sPostCode2.substring(1, 3);\n            var sErrorMessages = \"\";\n            //Regex for 1st Character to be a number\n            var objNumberCheckStart = /^[0-9]{1}/i;\n            var objNumberCheck = /[0-9]/g;\n            //Format for Part 2 to be two alpha characters\n            var objAplhaCheck = /^[ABD-HJLNP-UW-Z]{2}$/i;\n\n            var objPostcodeStandard9AA = /^[0-9][A-Z][A-Z]$/;\n\n            if (sPostCode2.length === 3) {\n                //Check if PostCode start with a number\n                if (objNumberCheckStart.test(sPart1)) {\n                    //Check PostCode contains all needed characters\n                    if (objAplhaCheck.test(sPart2)) {\n                        sErrorMessages = sPostCode2;\n                    } else {\n                        if (objNumberCheck.test(sPart2)) {\n                            sErrorMessages = this.get(\"_objEmberLibStringService\").getString(\"validationSecondPartPostCodeCannotHaveMoreThanTwoNumbers\");\n                        } else {\n                            sErrorMessages = this.get(\"_objEmberLibStringService\").getString(\"validationSecondPartPostCodeHasInvalidCharacters\");\n                        }\n                    }\n                } else {\n                    sErrorMessages = this.get(\"_objEmberLibStringService\").getString(\"validationSecondPartPostCodeMustStartWithNumber\");\n                }\n            } else {\n                if (!objPostcodeStandard9AA.test(sPostCode2)) {\n                    sErrorMessages = this.get(\"_objEmberLibStringService\").getString(\"validationSecondPartPostIsNotValidFormat\");\n                }\n            }\n            return sErrorMessages;\n        }\n    });\n});","define(\"a24-ember-lib/services/query-param-object-builder\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n\n        /**\n         * Builds a object that can be used to get/update/observe query params in the url\n         *\n         * @param arrQueryParamsKeys - The array of query params from the queryParams in the controller\n         * @param objSetupContext - The controller/object that contains the queryParams and the rest of the query params with default values\n         * @param objExistingQueryObject - The existing objQueryParams or null if first time calling\n         * @param bDoDefault - Whether to create/update the sDefault on query params\n         * @param bDoValues - Whether to create/update the sValue on query params\n         */\n        createQueryParamObject: function createQueryParamObject(arrQueryParamsKeys, objSetupContext, objExistingQueryObject, bDoDefault, bDoValues) {\n            if (a24Core.isEmpty(arrQueryParamsKeys)) {\n                arrQueryParamsKeys = [];\n            }\n            if (a24Core.isEmpty(objExistingQueryObject)) {\n                objExistingQueryObject = {};\n            }\n\n            for (var i = 0; i < arrQueryParamsKeys.length; i++) {\n                var sQueryParam = arrQueryParamsKeys[i];\n\n                if (a24Core.isEmpty(objExistingQueryObject[sQueryParam])) {\n                    objExistingQueryObject[sQueryParam] = {};\n                }\n                if (bDoDefault) {\n                    objExistingQueryObject[sQueryParam].sDefault = objSetupContext.get(sQueryParam);\n                }\n                if (bDoValues) {\n                    objExistingQueryObject[sQueryParam].sValue = objSetupContext.get(sQueryParam);\n                }\n            }\n\n            return objExistingQueryObject;\n        }\n    });\n});","define(\"a24-ember-lib/services/snackbar\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        //For things such as the FAB button that needs to react on the height and animation of the snackbar will need\n        //to observe the sSnackbarState to animate along with it AND also the iSnackbarHeight since this might change at\n        //any time during the showing of the snackbar due to device rotation or resizing\n        sSnackbarState: \"hideEnd\", //beforeShowStart, showStart, showEnd, hideStart, hideEnd\n        iSnackbarHeight: 0,\n        _bHasNewMessage: false,\n        _arrSnackbarMessages: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n            if (a24Core.isEmpty(this.get(\"_arrSnackbarMessages\"))) {\n                this.set(\"_arrSnackbarMessages\", []);\n            }\n        },\n        showSnackbarMessage: function showSnackbarMessage(sMessage, sAction, funcActionCallback, sActionColor) {\n            this.get(\"_arrSnackbarMessages\").pushObject({\n                sMessage: sMessage,\n                sAction: sAction,\n                funcActionCallback: funcActionCallback,\n                sActionTextClass: sActionColor\n            });\n            this.set(\"_bHasNewMessage\", true);\n        }\n    });\n});","define(\"a24-ember-lib/services/ss-utils\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        sortObjectArrayOnText: function sortObjectArrayOnText(arrData, sKey, bAsc) {\n            if (a24Core.isEmpty(arrData)) {\n                return [];\n            }\n            var objX = null;\n            var objY = null;\n            return arrData.toArray().sort(function (objA, objB) {\n                if (bAsc) {\n                    objX = objA[sKey].toLowerCase();\n                    objY = objB[sKey].toLowerCase();\n                } else {\n                    objX = objB[sKey].toLowerCase();\n                    objY = objA[sKey].toLowerCase();\n                }\n                if (objX < objY) {\n                    return -1;\n                }\n                if (objX > objY) {\n                    return 1;\n                }\n                return 0;\n            });\n        },\n        sortObjectArrayOnDate: function sortObjectArrayOnDate(sTimezone, arrData, sKey, bAsc) {\n            if (a24Core.isEmpty(arrData)) {\n                return [];\n            }\n            var objDateA = a24DateManager.createDate(sTimezone);\n            var objDateB = a24DateManager.createDate(sTimezone);\n            return arrData.toArray().sort(function (objA, objB) {\n                if (bAsc) {\n                    objDateA.setDateFromRest(objA[sKey]);\n                    objDateB.setDateFromRest(objB[sKey]);\n                } else {\n                    objDateA.setDateFromRest(objB[sKey]);\n                    objDateB.setDateFromRest(objA[sKey]);\n                }\n\n                if (objDateA.isBefore(objDateB)) {\n                    return -1;\n                }\n                if (objDateA.isAfter(objDateB)) {\n                    return 1;\n                }\n                return 0;\n            });\n        }\n    });\n});","define(\"a24-ember-lib/services/tooltip\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n\n        /**\n         * This is used to add a toolip to an element\n         *\n         * @param objElement - the element\n         * @param sToolTipText - the tooltip text\n         * @param sToolTipPosition - the tooltip position\n         * @param sToolTipClass - the tooltip class\n         * @param funcGetTooltipElementCallback - the tooltip callback function\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  16 June 2016\n         */\n        addTooltip: function addTooltip(objElement, sToolTipText, sToolTipPosition, sToolTipClass, funcGetTooltipElementCallback) {\n            // add a tooltip if tooltip text is set\n            if (!a24Core.isEmpty(sToolTipText)) {\n                objElement.attr(\"data-toggle\", \"tooltip\");\n                objElement.attr(\"title\", sToolTipText);\n                if (a24Core.isEmpty(sToolTipPosition)) {\n                    sToolTipPosition = \"bottom\";\n                }\n                var objTooltipConfig = {\n                    placement: sToolTipPosition,\n                    container: \"body\", // Check Overview point 4 on https://mdbootstrap.com/javascript/tooltips/\n                    trigger: \"hover\",\n                    delay: {\n                        \"show\": 350, \"hide\": 0\n                    }\n                };\n\n                if (!a24Core.isEmpty(sToolTipClass)) {\n                    objTooltipConfig.template = \"<div class=\\\"tooltip \" + sToolTipClass + \"\\\" role=\\\"tooltip\\\"><div class=\\\"arrow\\\"></div><div class=\\\"tooltip-inner\\\"></div></div>\";\n                }\n\n                $(objElement).tooltip(objTooltipConfig);\n\n                if (!a24Core.isEmpty(funcGetTooltipElementCallback)) {\n                    funcGetTooltipElementCallback(objElement);\n                }\n            }\n        },\n\n        /**\n         * This is used to dispose a toolip of an element\n         *\n         * @param objElement - the element\n         * @param sToolTipText - the tooltip text\n         * @param sToolTipPosition - the tooltip position\n         * @param sToolTipClass - the tooltip class\n         * @param funcGetTooltipElementCallback - the tooltip callback function\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  16 June 2016\n         */\n        disposeOfTooltip: function disposeOfTooltip(objElement) {\n            //Destroy the existing tooltip\n            try {\n                $(objElement).tooltip(\"dispose\");\n            } catch (objErr) {\n                //This is temp fix till new bootstrap version fixes the tooltip error when calling dispose\n                //while transitioning\n            }\n        }\n    });\n});","define(\"a24-ember-lib/services/url-trickery\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        sCurrentHash: \"\",\n        _funcHashChange: null,\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            //Trim any existing ember ids from the url before adding the listeners\n            var sTrimmed = a24Core.stripEmberIdsFromUrl(this.get(\"_objLibConstants.URL_VALUE_POPUPS\"));\n            if (sTrimmed !== window.location.href) {\n                this.replaceBrowserUrl(sTrimmed);\n            }\n\n            var objThis = this;\n            var funcHashChange = function funcHashChange() {\n                objThis.set(\"sCurrentHash\", window.location.hash);\n            };\n            this.set(\"_funcHashChange\", funcHashChange);\n            $(window).on(\"hashchange\", funcHashChange);\n        },\n        willDestroy: function willDestroy() {\n            this._super.apply(this, arguments);\n            $(window).off(\"hashchange\", this.get(\"_funcHashChange\"));\n        },\n        /**\n         * This function will add a param to the url\n         *\n         * @param sParam - The param name\n         * @param sValue - The value of the param\n         */\n        addUrlParam: function addUrlParam(sParam, sValue) {\n            var sNewUrl = window.location.href;\n            if (window.location.hash.indexOf(\"?\") !== -1) {\n                sNewUrl += \"&\" + sParam + \"=\" + encodeURI(sValue);\n            } else {\n                sNewUrl += \"?\" + sParam + \"=\" + encodeURI(sValue);\n            }\n            this.changeBrowserUrl(sNewUrl);\n        },\n        /**\n         * This function will go back on the history\n         */\n        goBack: function goBack() {\n            window.history.back();\n        },\n        /**\n         * This function will change the browser url to the given one\n         *\n         * @param sNewUrl - The new url the browser should have\n         */\n        changeBrowserUrl: function changeBrowserUrl(sNewUrl) {\n            window.location = sNewUrl;\n        },\n        /**\n         * This function will change the browser url to the given one without adding a history item\n         *\n         * @param sNewUrl - The new url the browser should have\n         */\n        replaceBrowserUrl: function replaceBrowserUrl(sNewUrl) {\n            window.location.replace(sNewUrl);\n        }\n    });\n});","define(\"a24-ember-lib/templates/components/accordion-item-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"4djM1Ris\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[4,\\\"collapse-trigger-component\\\",null,[[\\\"sCollapseSectionId\\\",\\\"bDisplayArrow\\\",\\\"bDisplayWaves\\\",\\\"onAccordionMouseLeave\\\",\\\"onAccordionMouseClick\\\"],[[22,[\\\"_sItemId\\\"]],[23,1],[26,\\\"if\\\",[[22,[\\\"funcOnItemClicked\\\"]],true,[26,\\\"if\\\",[[23,1],true,false],null]],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAccordionMouseLeave\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAccordionMouseClick\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-small padding-bottom-small padding-left-normal padding-right-small\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[[26,\\\"if\\\",[[22,[\\\"sExtraInfo\\\"]],\\\"col-md-6 col-12\\\",\\\"col-12\\\"],null]]]],[8],[0,\\\"\\\\n\\\"],[4,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"sHeaderSizeClass\\\",\\\"sHeaderClass\\\",\\\"bHasIcon\\\",\\\"sRoundButtonSize\\\",\\\"sLetter\\\",\\\"sIconSvg\\\",\\\"sIconFa\\\",\\\"sIconName\\\",\\\"sImageUrl\\\",\\\"sIconColor\\\",\\\"sIconClass\\\",\\\"sIconSizeClass\\\",\\\"arrActionItems\\\",\\\"objSpecialAction\\\",\\\"bHasBlock\\\",\\\"bOverrideDropdown\\\"],[[22,[\\\"sHeader\\\"]],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_HEADER_SIZE_SMALL\\\",[22,[\\\"_objLibConstants\\\"]]],null],[22,[\\\"sHeaderClass\\\"]],[22,[\\\"bHasIcon\\\"]],[22,[\\\"sRoundButtonSize\\\"]],[22,[\\\"sLetter\\\"]],[22,[\\\"sIconSvg\\\"]],[22,[\\\"sIconFa\\\"]],[22,[\\\"sIconName\\\"]],[22,[\\\"sImageUrl\\\"]],[22,[\\\"sIconColor\\\"]],[22,[\\\"sIconClass\\\"]],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_CONTENT_SIZE_SMALL\\\",[22,[\\\"_objLibConstants\\\"]]],null],[26,\\\"if\\\",[[22,[\\\"_bHeaderActionItems\\\"]],[22,[\\\"arrActionItems\\\"]]],null],[26,\\\"if\\\",[[22,[\\\"_bHeaderActionItems\\\"]],[22,[\\\"objSpecialAction\\\"]]],null],[26,\\\"if\\\",[[22,[\\\"sSubHeader\\\"]],true,false],null],[22,[\\\"bOverrideDropdown\\\"]]]],{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"sHeaderSizeClass\\\",\\\"sHeaderClass\\\"],[[22,[\\\"sSubHeader\\\"]],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_HEADER_SIZE_SMALL\\\",[22,[\\\"_objLibConstants\\\"]]],null],[22,[\\\"sSubHeaderClass\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"            \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"sExtraInfo\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-6 col-12 accordion-extra-item-height\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"sHeaderSizeClass\\\",\\\"sHeaderClass\\\",\\\"arrActionItems\\\",\\\"objSpecialAction\\\"],[[22,[\\\"sExtraInfo\\\"]],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_HEADER_SIZE_SMALL\\\",[22,[\\\"_objLibConstants\\\"]]],null],[22,[\\\"sHeaderClass\\\"]],[26,\\\"unless\\\",[[22,[\\\"_bHeaderActionItems\\\"]],[22,[\\\"_arrExtraInfoActions\\\"]]],null],[26,\\\"unless\\\",[[22,[\\\"_bHeaderActionItems\\\"]],[22,[\\\"_objExtraInfoSpecialAction\\\"]]],null]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"collapse-section-component\\\",null,[[\\\"sCollapseGroupParent\\\",\\\"sCollapseSectionId\\\",\\\"bExpanded\\\",\\\"onCollapseExpandStart\\\",\\\"onCollapseExpandEnd\\\",\\\"onCollapseCollapseStart\\\",\\\"onCollapseCollapseEnd\\\"],[[22,[\\\"sParentComponentId\\\"]],[22,[\\\"_sItemId\\\"]],[22,[\\\"bExpanded\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onCollapseExpandStart\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onCollapseExpandEnd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onCollapseCollapseStart\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onCollapseCollapseEnd\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[13,1],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/accordion-item-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/alert-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"dlwutg7F\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bShowAlert\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"full-width \\\",[20,\\\"sSeverity\\\"],\\\"-alert\\\"]]],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"alert-component-text padding-top-small padding-bottom-small padding-left-normal padding-right-normal\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sRoundButtonSize\\\",\\\"sIconSizeClass\\\",\\\"sIcon\\\",\\\"bClickable\\\",\\\"sIconClass\\\"],[[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_SIZE_SMALL\\\",[22,[\\\"_objLibConstants\\\"]]],null],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_CONTENT_SIZE_SMALL\\\",[22,[\\\"_objLibConstants\\\"]]],null],[22,[\\\"_sIcon\\\"]],false,[22,[\\\"_sIconColor\\\"]]]]],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-left-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[20,\\\"sText\\\"],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bHasClear\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"alert-component-clear-action\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sRoundButtonSize\\\",\\\"sIconSizeClass\\\",\\\"sIcon\\\",\\\"bClickable\\\",\\\"sIconClass\\\",\\\"onRoundIconClick\\\"],[[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_SIZE_SMALL\\\",[22,[\\\"_objLibConstants\\\"]]],null],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_CONTENT_SIZE_SMALL\\\",[22,[\\\"_objLibConstants\\\"]]],null],\\\"close\\\",true,[22,[\\\"_sIconColor\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"triggerHideAlertButtonAction\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/alert-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/bread-crumb-bar-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"J5EZIgyQ\", \"block\": \"{\\\"symbols\\\":[\\\"objBreadCrumbItem\\\",\\\"iIndex\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-bread-crumb-bar-component\\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"bread-crumb-bar\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bShowBreadCrumbEllipsis\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"bread-crumb-ellipsis\\\"],[8],[0,\\\"\\\\n                ...\\\\n                \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"bread-crumb-item-splitter\\\"],[8],[0,\\\"/\\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"each\\\",[[22,[\\\"_arrDisplayItems\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"bread-crumb-item\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[21,2,[]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"bread-crumb-item-splitter\\\"],[8],[0,\\\"/\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[6,\\\"a\\\"],[11,\\\"href\\\",[27,[[21,1,[\\\"sLink\\\"]]]]],[8],[0,\\\"\\\\n                    \\\"],[1,[21,1,[\\\"sTitle\\\"]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1,2]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"],[9]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/bread-crumb-bar-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/card-actions-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"KNb6ux6Z\", \"block\": \"{\\\"symbols\\\":[\\\"objSelect\\\",\\\"objSelect\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"display-inline-block normal-actions\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"arrVisibleItems\\\"]]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[22,[\\\"arrVisibleItems\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[21,2,[\\\"bLoader\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"actions-loader\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[20,\\\"loading-component\\\"],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sToolTipText\\\",\\\"sToolTipPosition\\\",\\\"sToolTipClass\\\",\\\"funcGetTooltipElementCallback\\\",\\\"bOutlinedIcon\\\",\\\"sIconClass\\\",\\\"sIcon\\\",\\\"sIconFa\\\",\\\"sIconSvg\\\",\\\"bLightWaves\\\",\\\"bShowNotificationBell\\\",\\\"onRoundIconClick\\\"],[[21,2,[\\\"sTitle\\\"]],[21,2,[\\\"sToolTipPosition\\\"]],[21,2,[\\\"sToolTipClass\\\"]],[21,2,[\\\"funcGetTooltipElement\\\"]],[21,2,[\\\"bOutlinedIcon\\\"]],[21,2,[\\\"sIconClass\\\"]],[21,2,[\\\"sIcon\\\"]],[21,2,[\\\"sIconFa\\\"]],[21,2,[\\\"sIconSvg\\\"]],[21,2,[\\\"bLightWaves\\\"]],[21,2,[\\\"bShowNotification\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"executeCardAction\\\",[21,2,[]]],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"arrMoreItems\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"display-inline-block center-text-vertical\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"dropdown-trigger\\\",null,[[\\\"sDropdownContentId\\\"],[[22,[\\\"_sCardActionDropdownContentId\\\"]]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sIcon\\\",\\\"sToolTipText\\\",\\\"sToolTipPosition\\\",\\\"sToolTipClass\\\",\\\"funcGetTooltipElementCallback\\\"],[\\\"more_vert\\\",[26,\\\"lookup-string\\\",[\\\"moreActions\\\"],null],[22,[\\\"_sDropDownToolTipPosition\\\"]],[22,[\\\"objSelect\\\",\\\"sToolTipClass\\\"]],[22,[\\\"objSelect\\\",\\\"funcGetTooltipElement\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"dropdown-content\\\",null,[[\\\"bShow\\\",\\\"sAlign\\\",\\\"sDropdownContentId\\\"],[[22,[\\\"bShowDropdown\\\"]],\\\"right\\\",[22,[\\\"_sCardActionDropdownContentId\\\"]]]],{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"card-action-dropdown-content\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"arrMoreItems\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"card-action-dropdown-item waves-effect waves-dark\\\"],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"executeCardDropdownAction\\\",[21,1,[]]],null],null],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[21,1,[\\\"bLoader\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"actions-loader\\\"],[8],[0,\\\"\\\\n                                    \\\"],[1,[20,\\\"loading-component\\\"],false],[0,\\\"\\\\n                                \\\"],[9],[0,\\\"\\\\n                                \\\"],[1,[26,\\\"lookup-string\\\",[\\\"loading\\\",[22,[\\\"_objEmberLibString\\\"]]],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                                \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sIcon\\\",\\\"sIconFa\\\",\\\"sIconSvg\\\",\\\"bClickable\\\",\\\"sBackgroundClass\\\"],[[21,1,[\\\"sIcon\\\"]],[21,1,[\\\"sIconFa\\\"]],[21,1,[\\\"sIconSvg\\\"]],false,\\\"padding-right-normal\\\"]]],false],[0,\\\"\\\\n                                \\\"],[1,[21,1,[\\\"sTitle\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"                        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"                \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"objSpecialAction\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"display-inline-block center-text-vertical special-actions\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sToolTipText\\\",\\\"sToolTipPosition\\\",\\\"sIcon\\\",\\\"sIconFa\\\",\\\"sIconSvg\\\",\\\"onRoundIconClick\\\"],[[22,[\\\"objSpecialAction\\\",\\\"sTitle\\\"]],[22,[\\\"objSpecialAction\\\",\\\"sToolTipPosition\\\"]],[22,[\\\"objSpecialAction\\\",\\\"sIcon\\\"]],[22,[\\\"objSpecialAction\\\",\\\"sIconFa\\\"]],[22,[\\\"objSpecialAction\\\",\\\"sIconSvg\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"executeCardAction\\\",[22,[\\\"objSpecialAction\\\"]]],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/card-actions-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/card-datagrid-column-toggle\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"fCVE0FFw\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"dropdown-trigger\\\",null,[[\\\"sDropdownContentId\\\"],[[22,[\\\"_sColumnSelected\\\"]]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sIcon\\\",\\\"sToolTipText\\\",\\\"sToolTipPosition\\\",\\\"onRoundIconClick\\\"],[\\\"view_column\\\",[26,\\\"lookup-string\\\",[\\\"showHideColumns\\\"],null],\\\"bottom\\\",[26,\\\"action\\\",[[21,0,[]],\\\"columnToggleOptionClicked\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"dropdown-content\\\",null,[[\\\"sDropdownContentId\\\",\\\"bShow\\\",\\\"bAutoShow\\\",\\\"sAlign\\\",\\\"a24DropdownBlockerClicked\\\"],[[22,[\\\"_sColumnSelected\\\"]],[22,[\\\"_bShowColumnsDropdown\\\"]],false,\\\"right\\\",[26,\\\"action\\\",[[21,0,[]],\\\"closeFilterDropdown\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"cardDatagridColumnSelector\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"input-dropdown\\\",null,[[\\\"id\\\",\\\"sFieldName\\\",\\\"sOptionsPrompt\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"bMultiSelect\\\",\\\"arrValues\\\",\\\"onChangeOptions\\\"],[[22,[\\\"_sColumnOptionsDropdownId\\\"]],[26,\\\"lookup-string\\\",[\\\"selectHeaderText\\\"],null],[26,\\\"lookup-string\\\",[\\\"selectHeaderText\\\"],null],[26,\\\"array-filter\\\",[[22,[\\\"_arrHeaders\\\"]],null,[22,[\\\"_funcSortFilterOptions\\\"]]],null],\\\"sProperty\\\",\\\"sTitle\\\",true,[22,[\\\"_arrSelectedHeaders\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"toggleColumns\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/card-datagrid-column-toggle.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/card-datagrid-container\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"6Ou6ulOu\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"cardDatagridContainer\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bShowAlert\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"alert-component\\\",null,[[\\\"sText\\\",\\\"sSeverity\\\",\\\"bHasClear\\\",\\\"iShowAlertTrigger\\\"],[[22,[\\\"_sAlertText\\\"]],[22,[\\\"_sAlertSeverity\\\"]],true,[22,[\\\"_iShowAlertTrigger\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"filterAndPagerContainer\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"card-datagrid-filter\\\",null,[[\\\"bDisableKeyboardShortcuts\\\",\\\"arrHeaderConfig\\\",\\\"objHeaderSecondaries\\\",\\\"objReactFilterExtraData\\\",\\\"bShowShareButton\\\",\\\"sDatagridHeader\\\",\\\"bShareableLink\\\",\\\"bShowSaveAction\\\",\\\"bHasReloadButton\\\",\\\"cardDatagridFilterDropdownOpenEvent\\\",\\\"cardDatagridFilterDropdownCloseEvent\\\",\\\"cardDatagridFilterInitEvent\\\",\\\"cardDatagridFilterParamChangeEvent\\\",\\\"cardDatagridFilterChangeEvent\\\",\\\"cardDatagridColumnToggleChangeEvent\\\",\\\"cardDatagridColumnToggleChangeProjectionEvent\\\",\\\"cardDatagridReloadButtonClickEvent\\\",\\\"bCustomiseColumns\\\",\\\"bCustomiseColumnsProjection\\\",\\\"bShowColumnToggles\\\",\\\"arrAllowedHeaders\\\",\\\"objSavedSearchService\\\",\\\"sSavedSearchRef\\\",\\\"bSavedSearchShowActions\\\",\\\"sReactIFrameUrl\\\",\\\"sDatagridRoute\\\",\\\"arrExtraActions\\\",\\\"iVisibleActions\\\",\\\"sSavedSearchKey\\\",\\\"showAlertAction\\\"],[[22,[\\\"bDisableFilterKeyboardShortcuts\\\"]],[22,[\\\"objDatagridConfig\\\",\\\"arrHeaderConfig\\\"]],[22,[\\\"objDatagridConfig\\\"]],[22,[\\\"objDatagridConfig\\\"]],[22,[\\\"bShowShareButton\\\"]],[22,[\\\"objDatagridConfig\\\",\\\"sDatagridHeader\\\"]],[22,[\\\"bShareableLink\\\"]],[22,[\\\"bShowSaveAction\\\"]],[22,[\\\"objDatagridConfig\\\",\\\"bHasReloadButton\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridFilterDropdownOpenEvent\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridFilterDropdownCloseEvent\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridFilterInitEvent\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridFilterParamChangeEvent\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridFilterChangeEvent\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridColumnToggleChangeEvent\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridColumnToggleChangeProjectionEvent\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridReloadButtonClickEvent\\\"],null],[22,[\\\"bAllowHiddenColumns\\\"]],[22,[\\\"bAllowHiddenColumnsProjection\\\"]],[22,[\\\"bShowColumnToggles\\\"]],[22,[\\\"arrAllowedHeaders\\\"]],[22,[\\\"objDatagridConfig\\\",\\\"objSavedSearchService\\\"]],[22,[\\\"objDatagridConfig\\\",\\\"sSavedSearchRef\\\"]],[22,[\\\"objDatagridConfig\\\",\\\"bSavedSearchShowActions\\\"]],[22,[\\\"objDatagridConfig\\\",\\\"sReactIFrameUrl\\\"]],[22,[\\\"objDatagridConfig\\\",\\\"sDatagridRoute\\\"]],[22,[\\\"arrExtraActions\\\"]],[22,[\\\"iVisibleActions\\\"]],[22,[\\\"sSavedSearchKey\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"showAlertAction\\\"],null]]]],false],[0,\\\"\\\\n\\\\n        \\\"],[1,[26,\\\"card-datagrid-selected-item\\\",null,[[\\\"arrSelectedItems\\\",\\\"arrActionItems\\\"],[[22,[\\\"_arrSelectedItems\\\"]],[22,[\\\"_arrActionItems\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"card-datagrid-table\\\",null,[[\\\"bDisableKeyboardShortcuts\\\",\\\"objDatagridConfig\\\",\\\"iRowHeight\\\",\\\"iMaxHeight\\\",\\\"iMinWidth\\\",\\\"iMinColWidthDefault\\\",\\\"bSelectColumn\\\",\\\"arrHeaders\\\",\\\"arrHeadersLength\\\",\\\"arrData\\\",\\\"bLoading\\\",\\\"bDontUseVirtualization\\\",\\\"cardDatagridTableInitSort\\\",\\\"cardDatagridTableNoneSelected\\\",\\\"cardDatagridTableOneSelected\\\",\\\"cardDatagridTableMultiSelected\\\",\\\"cardDatagridTableSort\\\",\\\"cardDatagridTableCell\\\"],[[22,[\\\"bDisableTableKeyboardShortcuts\\\"]],[22,[\\\"objDatagridConfig\\\"]],[22,[\\\"objDatagridConfig\\\",\\\"iRowHeight\\\"]],[22,[\\\"objDatagridConfig\\\",\\\"iMaxHeight\\\"]],[22,[\\\"objDatagridConfig\\\",\\\"iMinWidth\\\"]],[22,[\\\"objDatagridConfig\\\",\\\"iMinColWidthDefault\\\"]],[22,[\\\"objDatagridConfig\\\",\\\"bSelectColumn\\\"]],[22,[\\\"objDatagridConfig\\\",\\\"arrHeaderConfig\\\"]],[22,[\\\"objDatagridConfig\\\",\\\"arrHeaderConfig\\\",\\\"length\\\"]],[22,[\\\"_arrTableData\\\"]],[22,[\\\"_bDatagridLoading\\\"]],[22,[\\\"objDatagridConfig\\\",\\\"bDontUseVirtualization\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableInitSort\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableNoneSelected\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableOneSelected\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableMultiSelected\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableSort\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableCell\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-small\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"card-datagrid-pager\\\",null,[[\\\"iResultCount\\\",\\\"iPage\\\",\\\"iPerPage\\\",\\\"iResultsForCurrentPage\\\",\\\"iResultCountLimit\\\",\\\"bPagerLoading\\\",\\\"bResultCountReturned\\\",\\\"cardDatagridPagerInitEvent\\\",\\\"cardDatagridPagerEvent\\\",\\\"cardDatagridPagerManyClicked\\\"],[[22,[\\\"objDatagridConfig\\\",\\\"iResultCount\\\"]],[22,[\\\"objDatagridConfig\\\",\\\"iPage\\\"]],[22,[\\\"objDatagridConfig\\\",\\\"iPerPage\\\"]],[22,[\\\"objDatagridConfig\\\",\\\"iResultsReturned\\\"]],[22,[\\\"objDatagridConfig\\\",\\\"iResultCountLimit\\\"]],[22,[\\\"_bPagerLoading\\\"]],[22,[\\\"_bResultCountReturned\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridPagerInitEvent\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridPagerEvent\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridPagerManyClicked\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/card-datagrid-container.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/card-datagrid-filter\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"s/2YsS5N\", \"block\": \"{\\\"symbols\\\":[\\\"objHeader\\\",\\\"objTagValue\\\",\\\"objSecondary\\\",\\\"objAction\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"cardDatagridFiltersContainer\\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"cardDatagridFilterButtonContainer\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bShowSavedSearch\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[26,\\\"saved-search-component\\\",null,[[\\\"objSavedSearchService\\\",\\\"sSavedSearchRef\\\",\\\"bShowSaveAction\\\",\\\"bShowActions\\\",\\\"changeShowSaveAction\\\",\\\"sReactIFrameUrl\\\",\\\"sDatagridRoute\\\",\\\"sSavedSearchKey\\\",\\\"showAlertAction\\\"],[[22,[\\\"objSavedSearchService\\\"]],[22,[\\\"sSavedSearchRef\\\"]],[22,[\\\"bShowSaveAction\\\"]],[22,[\\\"bSavedSearchShowActions\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"changeShowSaveAction\\\"],null],[22,[\\\"sReactIFrameUrl\\\"]],[22,[\\\"sDatagridRoute\\\"]],[22,[\\\"sSavedSearchKey\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"showAlertAction\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"bHasReloadButton\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sIcon\\\",\\\"onRoundIconClick\\\",\\\"sToolTipText\\\",\\\"sToolTipPosition\\\"],[\\\"refresh\\\",[26,\\\"action\\\",[[21,0,[]],\\\"reloadActionClicked\\\"],null],[26,\\\"lookup-string\\\",[\\\"reload\\\",[22,[\\\"_objStringsEmberLibService\\\"]]],null],\\\"left\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"bShareableLink\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[20,\\\"shareable-link\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"bCustomiseColumns\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[26,\\\"card-datagrid-column-toggle\\\",null,[[\\\"arrAllowedHeaders\\\",\\\"cardDatagridColumnToggleChangeEvent\\\"],[[22,[\\\"arrAllowedHeaders\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridColumnToggleChangeEvent\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"bCustomiseColumnsProjection\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sIcon\\\",\\\"sToolTipText\\\",\\\"sToolTipPosition\\\",\\\"onRoundIconClick\\\"],[\\\"view_column\\\",[26,\\\"lookup-string\\\",[\\\"showHideColumns\\\"],null],\\\"bottom\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onShowReactColumnProjection\\\"],null]]]],false],[0,\\\"\\\\n        \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[4,\\\"if\\\",[[26,\\\"array-filter\\\",[[22,[\\\"arrHeaderConfig\\\"]],[22,[\\\"_funcHeaderFilter\\\"]]],null]],null,{\\\"statements\\\":[[4,\\\"dropdown-trigger\\\",null,[[\\\"sDropdownContentId\\\"],[[22,[\\\"_sFilterOptionsPopupId\\\"]]]],{\\\"statements\\\":[[0,\\\"                \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sIcon\\\",\\\"onRoundIconClick\\\",\\\"sToolTipText\\\",\\\"sToolTipPosition\\\"],[\\\"filter_list\\\",[26,\\\"action\\\",[[21,0,[]],\\\"filterOptionsClicked\\\"],null],[26,\\\"lookup-string\\\",[\\\"filtersCanbeApplied\\\"],null],\\\"left\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"arrCustomActions\\\"]]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[22,[\\\"arrCustomActions\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sIcon\\\",\\\"sIconFa\\\",\\\"sIconSvg\\\",\\\"onRoundIconClick\\\",\\\"sToolTipText\\\",\\\"sToolTipPosition\\\"],[[21,4,[\\\"sIcon\\\"]],[21,4,[\\\"sIconFa\\\"]],[21,4,[\\\"sIconSvg\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"customActionClicked\\\",[21,4,[]]],null],[21,4,[\\\"sTooltipText\\\"]],\\\"left\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[4]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"arrExtraActions\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[26,\\\"card-actions-component\\\",null,[[\\\"class\\\",\\\"arrActionItems\\\",\\\"iVisibleActions\\\"],[\\\"display-inline-block\\\",[22,[\\\"arrExtraActions\\\"]],[22,[\\\"iVisibleActions\\\"]]]]],false],[0,\\\"\\\\n        \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[4,\\\"dropdown-content\\\",null,[[\\\"sDropdownContentId\\\",\\\"bShow\\\",\\\"bAutoShow\\\",\\\"sAlign\\\",\\\"a24DropdownBlockerClicked\\\"],[[22,[\\\"_sFilterOptionsPopupId\\\"]],[22,[\\\"_bDisplayFilterChoices\\\"]],false,\\\"right\\\",[26,\\\"action\\\",[[21,0,[]],\\\"closeFilterDropdown\\\"],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"cardDatagridFilterOptions\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-left-normal padding-right-normal padding-top-normal\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[8],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"input-dropdown\\\",null,[[\\\"id\\\",\\\"sFieldName\\\",\\\"sOptionsPrompt\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"objValue\\\"],[[22,[\\\"_sFilterOptionsDropdownId\\\"]],[22,[\\\"_sFilterHeaderText\\\"]],[22,[\\\"_sFilterOptionPrompt\\\"]],[26,\\\"array-filter\\\",[[22,[\\\"arrHeaderConfig\\\"]],[22,[\\\"_funcHeaderFilter\\\"]],[22,[\\\"_funcSortFilterOptions\\\"]]],null],\\\"sProperty\\\",\\\"sTitle\\\",[22,[\\\"_objSelectedFilterOption\\\"]]]]],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bShowAddOrQuestion\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"div\\\"],[8],[0,\\\"\\\\n                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-bottom-small\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"alreadyHaveFilter\\\",[22,[\\\"_objStringsEmberLibService\\\"]]],null],false],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_objSelectedFilterOption\\\",\\\"bFilterAnd\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right\\\"],[8],[0,\\\"\\\\n                                    \\\"],[6,\\\"button\\\"],[10,\\\"class\\\",\\\"cardDatagridFilterButton cardDatagridFilterOptionsButton waves-effect waves-dark\\\"],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"setAndOrChoice\\\",true,false],null],null],[8],[0,\\\"\\\\n                                        \\\"],[6,\\\"span\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"refine\\\",[22,[\\\"_objStringsEmberLibService\\\"]]],null],false],[9],[0,\\\"\\\\n                                    \\\"],[9],[0,\\\"\\\\n                                \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"_objSelectedFilterOption\\\",\\\"bFilterOr\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right\\\"],[8],[0,\\\"\\\\n                                    \\\"],[6,\\\"button\\\"],[10,\\\"class\\\",\\\"cardDatagridFilterButton cardDatagridFilterOptionsButton waves-effect waves-dark\\\"],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"setAndOrChoice\\\",false,true],null],null],[8],[0,\\\"\\\\n                                        \\\"],[6,\\\"span\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"expand\\\",[22,[\\\"_objStringsEmberLibService\\\"]]],null],false],[9],[0,\\\"\\\\n                                    \\\"],[9],[0,\\\"\\\\n                                \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right\\\"],[8],[0,\\\"\\\\n                                \\\"],[6,\\\"button\\\"],[10,\\\"class\\\",\\\"cardDatagridFilterButton cardDatagridFilterOptionsButton waves-effect waves-dark\\\"],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"setAndOrChoice\\\",false,false],null],null],[8],[0,\\\"\\\\n                                    \\\"],[6,\\\"span\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"startOver\\\",[22,[\\\"_objStringsEmberLibService\\\"]]],null],false],[9],[0,\\\"\\\\n                                \\\"],[9],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bShowSelectedQueryType\\\"]]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[1,[26,\\\"input-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sOptionsPrompt\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"objValue\\\",\\\"class\\\"],[\\\"\\\",[22,[\\\"_sQueryTypeOptionPrompt\\\"]],[22,[\\\"_arrQueryType\\\"]],\\\"sValue\\\",\\\"sTitle\\\",[22,[\\\"_objSelectedQueryType\\\"]],\\\"cardDatagridFilterSaveSpaceTop cardDatagridFilterSaveSpaceBottom\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"_objSelectedFilterOption\\\"]]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[[26,\\\"if\\\",[[22,[\\\"_bHideEmptyCheck\\\"]],\\\"display-none\\\"],null],[26,\\\"if\\\",[[22,[\\\"_bShowSelectedQueryType\\\"]],\\\" padding-top-normal padding-bottom-normal-minus\\\"],null]]]],[8],[0,\\\"\\\\n                                \\\"],[1,[26,\\\"input-checkbox\\\",null,[[\\\"sFieldName\\\",\\\"bValue\\\"],[[22,[\\\"_sEmptyOnlyText\\\"]],[22,[\\\"_bEmptyEntriesOnly\\\"]]]]],false],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[11,\\\"id\\\",[20,\\\"_sFilterOptionsContainerId\\\"],null],[10,\\\"class\\\",\\\"padding-left-normal padding-right-normal padding-bottom-normal\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[26,\\\"if\\\",[[22,[\\\"_objSelectedFilterOption\\\"]],[26,\\\"if\\\",[[22,[\\\"_bShowAddOrQuestion\\\"]],false,true],null]],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bEmptyEntriesOnly\\\"]]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal\\\"],[8],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"div\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bCustomFilter\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                    \\\"],[1,[26,\\\"component\\\",[[22,[\\\"_objSelectedFilterOption\\\",\\\"sFilterCustomComponentName\\\"]]],[[\\\"objHeaderItem\\\",\\\"customFilterDisplayAddButtonEvent\\\"],[[22,[\\\"_objSelectedFilterOption\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"customFilterDisplayAddButtonEvent\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"_bTextFilter\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                    \\\"],[1,[26,\\\"input-text\\\",null,[[\\\"id\\\",\\\"sFieldName\\\",\\\"sValue\\\"],[[22,[\\\"_sFilterOptionsTextId\\\"]],[22,[\\\"_sFilterInputPlaceHolder\\\"]],[22,[\\\"_sFilterValue\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"_bBoolFilter\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                    \\\"],[1,[26,\\\"input-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sOptionsPrompt\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"objValue\\\"],[[22,[\\\"_sIsLabel\\\"]],[22,[\\\"_sFilterInputPlaceHolder\\\"]],[22,[\\\"_arrFilterInputArray\\\"]],\\\"sValue\\\",\\\"sTitle\\\",[22,[\\\"_objFilterValue\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"_bDropDownFilter\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                    \\\"],[1,[26,\\\"input-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sOptionsPrompt\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"objValue\\\"],[[22,[\\\"_sIsLabel\\\"]],[22,[\\\"_sFilterInputPlaceHolder\\\"]],[22,[\\\"_arrFilterInputArray\\\"]],\\\"sValue\\\",\\\"sTitle\\\",[22,[\\\"_objFilterValue\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"_bDropDownMultiFilter\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                    \\\"],[1,[26,\\\"input-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sOptionsPrompt\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"bMultiSelect\\\",\\\"arrValues\\\"],[[22,[\\\"_sIsLabel\\\"]],[22,[\\\"_sFilterInputPlaceHolder\\\"]],[22,[\\\"_arrFilterInputArray\\\"]],\\\"sValue\\\",\\\"sTitle\\\",true,[22,[\\\"_arrFilterValue\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"_bDateFilter\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                    \\\"],[1,[26,\\\"input-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sOptionsPrompt\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"objValue\\\"],[[22,[\\\"_sIsInLabel\\\"]],[22,[\\\"_sFilterInputPlaceHolder\\\"]],[22,[\\\"_arrFilterInputArray\\\"]],\\\"sValue\\\",\\\"sTitle\\\",[22,[\\\"_objFilterValue\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_objFilterValue\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[26,\\\"equalsOr\\\",[[22,[\\\"_objFilterValue\\\",\\\"sValue\\\"]],[22,[\\\"_objEnumEmberLibService\\\",\\\"dateFilterOptions\\\",\\\"DATE_FILTER_WITHIN_THE_LAST\\\",\\\"backend\\\"]],[22,[\\\"_objEnumEmberLibService\\\",\\\"dateFilterOptions\\\",\\\"DATE_FILTER_WITHIN_THE_NEXT\\\",\\\"backend\\\"]],[22,[\\\"_objEnumEmberLibService\\\",\\\"dateFilterOptions\\\",\\\"DATE_FILTER_NOT_WITHIN_THE_LAST\\\",\\\"backend\\\"]],[22,[\\\"_objEnumEmberLibService\\\",\\\"dateFilterOptions\\\",\\\"DATE_FILTER_NOT_WITHIN_THE_NEXT\\\",\\\"backend\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"                                            \\\"],[1,[26,\\\"input-number\\\",null,[[\\\"sFieldName\\\",\\\"iValue\\\",\\\"class\\\"],[[26,\\\"concat\\\",[[26,\\\"lookup-string\\\",[\\\"enterValue\\\"],null],\\\"...\\\"],null],[22,[\\\"_iFilterValue\\\"]],\\\"cardDatagridFilterSaveSpaceTop cardDatagridFilterSaveSpaceBottom\\\"]]],false],[0,\\\"\\\\n                                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-sm padding-bottom-normal\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"dateDays\\\"],null],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[26,\\\"equalsOr\\\",[[22,[\\\"_objFilterValue\\\",\\\"sValue\\\"]],[22,[\\\"_objEnumEmberLibService\\\",\\\"dateFilterOptionsBetween\\\",\\\"DATE_FILTER_BETWEEN\\\",\\\"backend\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"                                            \\\"],[1,[26,\\\"input-number\\\",null,[[\\\"sFieldName\\\",\\\"iValue\\\",\\\"class\\\"],[[26,\\\"concat\\\",[[26,\\\"lookup-string\\\",[\\\"enterValue\\\"],null],\\\"...\\\"],null],[22,[\\\"_iFilterValue\\\"]],\\\"cardDatagridFilterSaveSpaceTop cardDatagridFilterSaveSpaceBottom\\\"]]],false],[0,\\\"\\\\n                                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-sm padding-bottom-normal padding-top-normal\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"and\\\"],null],false],[9],[0,\\\"\\\\n                                            \\\"],[1,[26,\\\"input-number\\\",null,[[\\\"sFieldName\\\",\\\"iValue\\\",\\\"class\\\"],[[26,\\\"concat\\\",[[26,\\\"lookup-string\\\",[\\\"enterValue\\\"],null],\\\"...\\\"],null],[22,[\\\"_iFilterValueTo\\\"]],\\\"cardDatagridFilterSaveSpaceTop cardDatagridFilterSaveSpaceBottom\\\"]]],false],[0,\\\"\\\\n                                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-sm padding-top-normal\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"dateDays\\\"],null],false],[9],[0,\\\"\\\\n                                            \\\"],[1,[26,\\\"input-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sOptionsPrompt\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"objValue\\\"],[\\\"\\\",[22,[\\\"_sFilterInputPlaceHolder\\\"]],[22,[\\\"_arrFilterBetweenArray\\\"]],\\\"sValue\\\",\\\"sTitle\\\",[22,[\\\"_objBetweenOption\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bDateTimeFilter\\\"]]],null,{\\\"statements\\\":[[4,\\\"unless\\\",[[26,\\\"equals\\\",[[22,[\\\"_objFilterValue\\\",\\\"sValue\\\"]],\\\"dateFilterNotEmpty\\\"],null]],null,{\\\"statements\\\":[[0,\\\"                                                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                                                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-6\\\"],[8],[0,\\\"\\\\n                                                            \\\"],[1,[26,\\\"input-date-picker\\\",null,[[\\\"sFieldName\\\",\\\"sSelectedDate\\\"],[[22,[\\\"_sFilterDateFrom\\\"]],[22,[\\\"_sFromDate\\\"]]]]],false],[0,\\\"\\\\n                                                        \\\"],[9],[0,\\\"\\\\n                                                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-6\\\"],[8],[0,\\\"\\\\n                                                            \\\"],[1,[26,\\\"input-form-time-picker\\\",null,[[\\\"sProperty\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[\\\"sDateTimeFrom\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n                                                        \\\"],[9],[0,\\\"\\\\n                                                    \\\"],[9],[0,\\\"\\\\n                                                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                                                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-6\\\"],[8],[0,\\\"\\\\n                                                            \\\"],[1,[26,\\\"input-date-picker\\\",null,[[\\\"sFieldName\\\",\\\"sSelectedDate\\\"],[[22,[\\\"_sFilterDateTo\\\"]],[22,[\\\"_sToDate\\\"]]]]],false],[0,\\\"\\\\n                                                        \\\"],[9],[0,\\\"\\\\n                                                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-6\\\"],[8],[0,\\\"\\\\n                                                            \\\"],[1,[26,\\\"input-form-time-picker\\\",null,[[\\\"sProperty\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[\\\"sDateTimeTo\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n                                                        \\\"],[9],[0,\\\"\\\\n                                                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"unless\\\",[[26,\\\"equals\\\",[[22,[\\\"_objFilterValue\\\",\\\"sValue\\\"]],\\\"dateFilterNotEmpty\\\"],null]],null,{\\\"statements\\\":[[0,\\\"                                                    \\\"],[1,[26,\\\"input-date-picker\\\",null,[[\\\"sFieldName\\\",\\\"sSelectedDate\\\"],[[22,[\\\"_sFilterDateFrom\\\"]],[22,[\\\"_sFromDate\\\"]]]]],false],[0,\\\"\\\\n                                                    \\\"],[1,[26,\\\"input-date-picker\\\",null,[[\\\"sFieldName\\\",\\\"sSelectedDate\\\"],[[22,[\\\"_sFilterDateTo\\\"]],[22,[\\\"_sToDate\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"                                        \\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bSuggestFilter\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                    \\\"],[1,[26,\\\"input-form-suggest\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"sOptionsLabelKey\\\",\\\"iSuggestAt\\\",\\\"iSuggestDelay\\\",\\\"bShowLoaderDuringSuggest\\\",\\\"bAlwaysShowOnFocus\\\",\\\"funcGetSuggestions\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[22,[\\\"_sFilterInputPlaceHolder\\\"]],\\\"sSuggestInput\\\",[22,[\\\"_objSelectedFilterOption\\\",\\\"sFilterOptionsLabelKey\\\"]],[22,[\\\"_objSelectedFilterOption\\\",\\\"iFilterSuggestAt\\\"]],[22,[\\\"_objSelectedFilterOption\\\",\\\"iFilterSuggestDelay\\\"]],[22,[\\\"_objSelectedFilterOption\\\",\\\"bFilterShowLoaderDuringSuggest\\\"]],[22,[\\\"_objSelectedFilterOption\\\",\\\"bFilterAlwaysShowOnFocus\\\"]],[22,[\\\"_objSelectedFilterOption\\\",\\\"funcFilterGetSuggestions\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[4,\\\"if\\\",[[22,[\\\"_bDisplayAddButton\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[26,\\\"if\\\",[[22,[\\\"_objSelectedFilterOption\\\",\\\"bFilterSecondary\\\"]],[26,\\\"if\\\",[[22,[\\\"_bShowSecondaryFilters\\\"]],true],null]],null]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[26,\\\"get\\\",[[22,[\\\"objHeaderSecondaries\\\"]],[26,\\\"concat\\\",[\\\"arrFilterSecondary_\\\",[22,[\\\"_objSelectedFilterOption\\\",\\\"sProperty\\\"]]],null]],null]],null,{\\\"statements\\\":[[0,\\\"                                    \\\"],[6,\\\"div\\\"],[8],[0,\\\"\\\\n                                        \\\"],[1,[26,\\\"horizontal-line-component\\\",null,[[\\\"sCustomClassName\\\"],[\\\"padding-bottom-small padding-left-normal-minus padding-right-normal-minus\\\"]]],false],[0,\\\"\\\\n                                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-xs a24-grey-text-darken-2\\\"],[8],[1,[26,\\\"concat\\\",[[26,\\\"lookup-string\\\",[\\\"and\\\"],null],\\\" \\\",[21,3,[\\\"sTitle\\\"]],\\\" \\\",[26,\\\"lookup-string\\\",[\\\"is\\\"],null],\\\":\\\"],null],false],[9],[0,\\\"\\\\n                                        \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"padding-top-normal \\\",[26,\\\"if\\\",[[21,3,[\\\"bHideEmptyCheck\\\"]],\\\"display-none\\\"],null]]]],[8],[0,\\\"\\\\n                                            \\\"],[1,[26,\\\"input-checkbox\\\",null,[[\\\"sFieldName\\\",\\\"bValue\\\"],[[22,[\\\"_sEmptyOnlyText\\\"]],[21,3,[\\\"_bEmptyEntriesOnly\\\"]]]]],false],[0,\\\"\\\\n                                        \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[21,3,[\\\"_bEmptyEntriesOnly\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[21,3,[\\\"_bIntFilter\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                                \\\"],[1,[26,\\\"input-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sOptionsPrompt\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"objValue\\\",\\\"class\\\"],[\\\"\\\",[21,3,[\\\"_sFilterPrompt\\\"]],[21,3,[\\\"arrMappingData\\\"]],\\\"sValue\\\",\\\"sTitle\\\",[21,3,[\\\"_objFilterValue\\\"]],\\\"cardDatagridFilterSaveSpaceTop\\\"]]],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[21,3,[\\\"_objFilterValue\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                                    \\\"],[1,[26,\\\"input-number\\\",null,[[\\\"sFieldName\\\",\\\"iValue\\\",\\\"bAllowFloat\\\",\\\"iFloatPlaces\\\",\\\"class\\\"],[[26,\\\"concat\\\",[[26,\\\"lookup-string\\\",[\\\"enterValue\\\"],null],\\\"...\\\"],null],[21,3,[\\\"_iFilterValue\\\"]],[21,3,[\\\"bFilterAllowFloat\\\"]],[21,3,[\\\"iFilterFloatPlaces\\\"]],\\\"cardDatagridFilterSaveSpaceTop\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[21,3,[\\\"_bTextFilter\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                                \\\"],[1,[26,\\\"input-text\\\",null,[[\\\"sFieldName\\\",\\\"sValue\\\"],[[26,\\\"concat\\\",[[26,\\\"lookup-string\\\",[\\\"enterValue\\\"],null],\\\"...\\\"],null],[21,3,[\\\"_sFilterValue\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[21,3,[\\\"_bBoolFilter\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                                \\\"],[1,[26,\\\"input-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sOptionsPrompt\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"objValue\\\",\\\"class\\\"],[\\\"\\\",[21,3,[\\\"_sFilterPrompt\\\"]],[21,3,[\\\"arrMappingData\\\"]],\\\"sValue\\\",\\\"sTitle\\\",[21,3,[\\\"_objFilterValue\\\"]],\\\"cardDatagridFilterSaveSpaceTop\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[21,3,[\\\"_bDropDownFilter\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                                \\\"],[1,[26,\\\"input-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sOptionsPrompt\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"objValue\\\",\\\"class\\\"],[\\\"\\\",[21,3,[\\\"_sFilterPrompt\\\"]],[21,3,[\\\"arrMappingData\\\"]],\\\"sValue\\\",\\\"sTitle\\\",[21,3,[\\\"_objFilterValue\\\"]],\\\"cardDatagridFilterSaveSpaceTop\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[21,3,[\\\"_bDropDownMultiFilter\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                                \\\"],[1,[26,\\\"input-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sOptionsPrompt\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"bMultiSelect\\\",\\\"arrValues\\\",\\\"class\\\"],[\\\"\\\",[21,3,[\\\"_sFilterPrompt\\\"]],[21,3,[\\\"arrMappingData\\\"]],\\\"sValue\\\",\\\"sTitle\\\",true,[21,3,[\\\"_arrFilterValue\\\"]],\\\"cardDatagridFilterSaveSpaceTop\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[21,3,[\\\"_bDateFilter\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                                \\\"],[1,[26,\\\"input-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sOptionsPrompt\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"objValue\\\",\\\"class\\\"],[\\\"\\\",[21,3,[\\\"_sFilterPrompt\\\"]],[21,3,[\\\"arrMappingData\\\"]],\\\"sValue\\\",\\\"sTitle\\\",[21,3,[\\\"_objFilterValue\\\"]],\\\"cardDatagridFilterSaveSpaceTop\\\"]]],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[21,3,[\\\"_objFilterValue\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[26,\\\"equalsOr\\\",[[21,3,[\\\"_objFilterValue\\\",\\\"sValue\\\"]],[22,[\\\"_objEnumEmberLibService\\\",\\\"dateFilterOptions\\\",\\\"DATE_FILTER_WITHIN_THE_LAST\\\",\\\"backend\\\"]],[22,[\\\"_objEnumEmberLibService\\\",\\\"dateFilterOptions\\\",\\\"DATE_FILTER_WITHIN_THE_NEXT\\\",\\\"backend\\\"]],[22,[\\\"_objEnumEmberLibService\\\",\\\"dateFilterOptions\\\",\\\"DATE_FILTER_NOT_WITHIN_THE_LAST\\\",\\\"backend\\\"]],[22,[\\\"_objEnumEmberLibService\\\",\\\"dateFilterOptions\\\",\\\"DATE_FILTER_NOT_WITHIN_THE_NEXT\\\",\\\"backend\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"                                                        \\\"],[1,[26,\\\"input-number\\\",null,[[\\\"sFieldName\\\",\\\"iValue\\\",\\\"class\\\"],[[26,\\\"concat\\\",[[26,\\\"lookup-string\\\",[\\\"enterValue\\\"],null],\\\"...\\\"],null],[21,3,[\\\"_iFilterValue\\\"]],\\\"cardDatagridFilterSaveSpaceTop cardDatagridFilterSaveSpaceBottom\\\"]]],false],[0,\\\"\\\\n                                                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-sm padding-bottom-normal\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"dateDays\\\"],null],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[26,\\\"equalsOr\\\",[[22,[\\\"_objFilterValue\\\",\\\"sValue\\\"]],[22,[\\\"_objEnumEmberLibService\\\",\\\"dateFilterOptionsBetween\\\",\\\"DATE_FILTER_BETWEEN\\\",\\\"backend\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"                                                        \\\"],[1,[26,\\\"input-number\\\",null,[[\\\"sFieldName\\\",\\\"iValue\\\",\\\"class\\\"],[[26,\\\"concat\\\",[[26,\\\"lookup-string\\\",[\\\"enterValue\\\"],null],\\\"...\\\"],null],[21,3,[\\\"_iFilterValue\\\"]],\\\"cardDatagridFilterSaveSpaceTop cardDatagridFilterSaveSpaceBottom\\\"]]],false],[0,\\\"\\\\n                                                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-sm padding-bottom-normal padding-top-normal\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"and\\\"],null],false],[9],[0,\\\"\\\\n                                                        \\\"],[1,[26,\\\"input-number\\\",null,[[\\\"sFieldName\\\",\\\"iValue\\\",\\\"class\\\"],[[26,\\\"concat\\\",[[26,\\\"lookup-string\\\",[\\\"enterValue\\\"],null],\\\"...\\\"],null],[21,3,[\\\"_iFilterValueTo\\\"]],\\\"cardDatagridFilterSaveSpaceTop cardDatagridFilterSaveSpaceBottom\\\"]]],false],[0,\\\"\\\\n                                                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-sm padding-top-normal\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"dateDays\\\"],null],false],[9],[0,\\\"\\\\n                                                        \\\"],[1,[26,\\\"input-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sOptionsPrompt\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"sOptionsLabelKey\\\",\\\"objValue\\\"],[\\\"\\\",[22,[\\\"_sFilterInputPlaceHolder\\\"]],[22,[\\\"_arrFilterBetweenArray\\\"]],\\\"sValue\\\",\\\"sTitle\\\",[21,3,[\\\"_objBetweenOption\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"unless\\\",[[26,\\\"equals\\\",[[21,3,[\\\"_objFilterValue\\\",\\\"sValue\\\"]],\\\"dateFilterNotEmpty\\\"],null]],null,{\\\"statements\\\":[[0,\\\"                                                            \\\"],[1,[26,\\\"input-date-picker\\\",null,[[\\\"sFieldName\\\",\\\"sSelectedDate\\\"],[[22,[\\\"_sFilterDateFrom\\\"]],[21,3,[\\\"_sFromDate\\\"]]]]],false],[0,\\\"\\\\n                                                            \\\"],[1,[26,\\\"input-date-picker\\\",null,[[\\\"sFieldName\\\",\\\"sSelectedDate\\\"],[[22,[\\\"_sFilterDateTo\\\"]],[21,3,[\\\"_sToDate\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                                                    \\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"                                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"                                \\\"],[1,[26,\\\"horizontal-line-component\\\",null,[[\\\"sCustomClassName\\\"],[\\\"padding-bottom-small padding-left-normal-minus padding-right-normal-minus\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"_bSecondariesValid\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-top-small\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[26,\\\"equals\\\",[[22,[\\\"_iAdvanceFilterEdit\\\"]],null],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_objSelectedFilterOption\\\",\\\"bFilterAnd\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                            \\\"],[6,\\\"button\\\"],[10,\\\"class\\\",\\\"cardDatagridFilterButton cardDatagridFilterOptionsButton waves-effect waves-dark\\\"],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"addFilterAction\\\",true,false],null],null],[8],[0,\\\"\\\\n                                                \\\"],[6,\\\"span\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"applyAndRefine\\\",[22,[\\\"_objStringsEmberLibService\\\"]]],null],false],[9],[0,\\\"\\\\n                                            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"_objSelectedFilterOption\\\",\\\"bFilterOr\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                            \\\"],[6,\\\"button\\\"],[10,\\\"class\\\",\\\"cardDatagridFilterButton cardDatagridFilterOptionsButton waves-effect waves-dark\\\"],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"addFilterAction\\\",false,true],null],null],[8],[0,\\\"\\\\n                                                \\\"],[6,\\\"span\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"applyAndExpand\\\",[22,[\\\"_objStringsEmberLibService\\\"]]],null],false],[9],[0,\\\"\\\\n                                            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                                        \\\"],[6,\\\"button\\\"],[10,\\\"class\\\",\\\"cardDatagridFilterButton cardDatagridFilterOptionsButton waves-effect waves-dark\\\"],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"addFilterAction\\\",false,false],null],null],[8],[0,\\\"\\\\n                                            \\\"],[6,\\\"span\\\"],[8],[1,[20,\\\"_sFilterAddButtonText\\\"],false],[9],[0,\\\"\\\\n                                        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                                        \\\"],[6,\\\"button\\\"],[10,\\\"class\\\",\\\"cardDatagridFilterButton cardDatagridFilterOptionsButton waves-effect waves-dark\\\"],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"addFilterAction\\\",false,false],null],null],[8],[0,\\\"\\\\n                                            \\\"],[6,\\\"span\\\"],[8],[1,[20,\\\"_sFilterUpdateButtonText\\\"],false],[9],[0,\\\"\\\\n                                        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"                                \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"cardDatagridFilterHeader\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[20,\\\"sDatagridHeader\\\"],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"arrHeaderConfig\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[21,1,[\\\"sTagValue\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"cardDatagridFilterChipSingle\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"filterTagClicked\\\",[21,1,[]]]],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[8],[1,[21,1,[\\\"sTagValue\\\"]],false],[9],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[21,1,[\\\"bFilterBlockRemove\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"i\\\"],[10,\\\"class\\\",\\\"material-icons cursor-clickable\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"removeFilterAction\\\",[21,1,[\\\"sProperty\\\"]]],[[\\\"bubbles\\\"],[false]]],[8],[0,\\\"cancel\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[21,1,[\\\"arrTagValue\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"cardDatagridFilterChipMulti\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[21,1,[\\\"arrTagValue\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[21,2,[\\\"sPreValue\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[1,[21,2,[\\\"sPreValue\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                    \\\"],[6,\\\"span\\\"],[11,\\\"class\\\",[27,[[26,\\\"if\\\",[[26,\\\"equals\\\",[[21,2,[\\\"iIndex\\\"]],-1],null],\\\"cardDatagridFilterChipMultiLabel\\\",\\\"cardDatagridFilterChipMultiItem\\\"],null]]]],[3,\\\"action\\\",[[21,0,[]],\\\"filterTagClicked\\\",[21,1,[]],[21,2,[\\\"iIndex\\\"]]]],[8],[0,\\\"\\\\n                        \\\"],[1,[21,2,[\\\"sValue\\\"]],false],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[26,\\\"equals\\\",[[21,2,[\\\"iIndex\\\"]],-1],null]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"i\\\"],[10,\\\"class\\\",\\\"material-icons cursor-clickable\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"removeFilterAction\\\",[21,1,[\\\"sProperty\\\"]],[21,2,[\\\"iIndex\\\"]]],[[\\\"bubbles\\\"],[false]]],[8],[0,\\\"\\\\n                                cancel\\\\n                            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                    \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[21,2,[\\\"sPostValue\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[1,[21,2,[\\\"sPostValue\\\"]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null],[0,\\\"            \\\"],[9],[0,\\\"\\\\n        \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[1]},null],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"sReactIFrameUrl\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"react-popup\\\",null,[[\\\"bShow\\\",\\\"sIFrameUrl\\\",\\\"bLoading\\\",\\\"objData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_bShowReactFilterIframe\\\"]],[22,[\\\"sReactIFrameUrl\\\"]],[22,[\\\"_bReactFilterPopupLoading\\\"]],[22,[\\\"_objReactPopupPostData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecieveReactFilterData\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/card-datagrid-filter.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/card-datagrid-pager\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"IyJZxPLa\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"cardDatagridPager\\\"],[8],[0,\\\"\\\\n\\\"],[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"textDisplay\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[20,\\\"_iFromPageDisplay\\\"],false],[0,\\\" - \\\"],[1,[20,\\\"_iToPageDisplay\\\"],false],[0,\\\" \\\"],[1,[20,\\\"sOfSeparator\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bPagerLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"pager-loader\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"pager-loader-position\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[20,\\\"loading-component\\\"],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bPagerClickable\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"clickableItem\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"pagerClicked\\\"]],[8],[0,\\\"\\\\n                    \\\"],[1,[20,\\\"_sResultCount\\\"],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                \\\"],[1,[20,\\\"_sResultCount\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"],[0,\\\"    \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"bDisabled\\\",\\\"sIcon\\\",\\\"sToolTipText\\\",\\\"sToolTipPosition\\\",\\\"onRoundIconClick\\\"],[[22,[\\\"_bIsFirstPage\\\"]],\\\"navigate_before\\\",[26,\\\"lookup-string\\\",[\\\"previousPage\\\"],null],\\\"bottom\\\",[26,\\\"action\\\",[[21,0,[]],\\\"previousPageClick\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[0,\\\"    \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"bDisabled\\\",\\\"sIcon\\\",\\\"sToolTipText\\\",\\\"sToolTipPosition\\\",\\\"onRoundIconClick\\\"],[[22,[\\\"_bIsLastPage\\\"]],\\\"navigate_next\\\",[26,\\\"lookup-string\\\",[\\\"nextPage\\\"],null],\\\"left\\\",[26,\\\"action\\\",[[21,0,[]],\\\"nextPageClick\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/card-datagrid-pager.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/card-datagrid-selected-item\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"lYGYF62f\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"arrSelectedItems\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"card-datagrid-selected-item padding-small center-text-vertical\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"center-text-vertical padding-small card-datagrid-selected-item-text\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[20,\\\"sSelected\\\"],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"card-datagrid-selected-item-clear\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sIconClass\\\",\\\"sIcon\\\",\\\"sToolTipText\\\",\\\"sToolTipPosition\\\",\\\"onRoundIconClick\\\"],[\\\"a24-secondary-color-text-accent\\\",\\\"clear\\\",[26,\\\"lookup-string\\\",[\\\"clearSelection\\\"],null],\\\"right\\\",[26,\\\"action\\\",[[21,0,[]],\\\"clearSelected\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"card-datagrid-selected-item-actions\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"card-actions-component\\\",null,[[\\\"arrActionItems\\\"],[[22,[\\\"arrActionItems\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/card-datagrid-selected-item.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/card-datagrid-table\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"twdyHFbT\", \"block\": \"{\\\"symbols\\\":[\\\"objRowData\\\",\\\"iIndex\\\",\\\"objHeader\\\",\\\"sHBSCellValue\\\",\\\"objMapSet\\\",\\\"sHBSCellHTMLValue\\\",\\\"objHeader\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[11,\\\"id\\\",[20,\\\"_sTableInnerContainerId\\\"],null],[10,\\\"class\\\",\\\"cardDatagridTableInner\\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"table\\\"],[10,\\\"class\\\",\\\"table table-hover table-condensed\\\"],[11,\\\"style\\\",[20,\\\"_sMinWidth\\\"],null],[8],[0,\\\"\\\\n        \\\"],[6,\\\"thead\\\"],[8],[0,\\\"\\\\n\\\"],[0,\\\"            \\\"],[6,\\\"tr\\\"],[11,\\\"style\\\",[20,\\\"_sRowHeight\\\"],null],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bSelectColumn\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"th\\\"],[10,\\\"class\\\",\\\"tableCheckHeaderCont\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"tableCheckHeader\\\"],[8],[0,\\\"\\\\n\\\"],[0,\\\"                            \\\"],[1,[26,\\\"input-checkbox\\\",null,[[\\\"mValue\\\",\\\"bValue\\\",\\\"hasErrorMessageSpace\\\",\\\"onCheckBoxClicked\\\"],[[22,[\\\"_sSelectAllConstant\\\"]],[22,[\\\"_bAllSelected\\\"]],false,[26,\\\"action\\\",[[21,0,[]],\\\"onCheckBoxClicked\\\",-1],null]]]],false],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"each\\\",[[22,[\\\"arrHeaders\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[21,7,[\\\"bShowHeader\\\"]]],null,{\\\"statements\\\":[[4,\\\"unless\\\",[[21,7,[\\\"bSilent\\\"]]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"th\\\"],[11,\\\"class\\\",[27,[\\\"tableHeader \\\",[26,\\\"if\\\",[[21,7,[\\\"bStopColumnSort\\\"]],\\\"cursorDefault\\\"],null],\\\" \\\",[26,\\\"if\\\",[[22,[\\\"bAllowSorting\\\"]],\\\"\\\",\\\"cursorDefault\\\"],null]]]],[17,\\\"style\\\",[26,\\\"if\\\",[[21,7,[\\\"bWrapText\\\"]],[26,\\\"concat\\\",[[21,7,[\\\"sCalcWidth\\\"]],\\\" \\\",[21,7,[\\\"sCalcMaxWidth\\\"]]],null]],null]],[3,\\\"action\\\",[[21,0,[]],\\\"columnHeaderClicked\\\",[21,7,[\\\"sProperty\\\"]],[21,7,[\\\"sAsc\\\"]]]],[8],[0,\\\"\\\\n                                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"tableHeaderCont\\\"],[11,\\\"style\\\",[21,7,[\\\"sCalcWidth\\\"]],null],[11,\\\"title\\\",[21,7,[\\\"sTitle\\\"]],null],[8],[0,\\\"\\\\n                                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"tableHeaderText\\\"],[11,\\\"style\\\",[21,7,[\\\"sCalcMaxWidth\\\"]],null],[8],[0,\\\"\\\\n                                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"tableHeaderGlyph\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[21,7,[\\\"bAsc\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                                \\\"],[6,\\\"i\\\"],[10,\\\"class\\\",\\\"material-icons font-sm\\\"],[8],[0,\\\"arrow_upward\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[21,7,[\\\"bDesc\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                                \\\"],[6,\\\"i\\\"],[10,\\\"class\\\",\\\"material-icons font-sm\\\"],[8],[0,\\\"arrow_downward\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                                        \\\"],[9],[0,\\\"\\\\n                                        \\\"],[6,\\\"span\\\"],[11,\\\"class\\\",[27,[[26,\\\"if\\\",[[26,\\\"if\\\",[[21,7,[\\\"bAsc\\\"]],true,[26,\\\"if\\\",[[21,7,[\\\"bDesc\\\"]],true,false],null]],null],\\\"sortedHeading\\\",\\\"\\\"],null]]]],[8],[1,[21,7,[\\\"sTitle\\\"]],false],[9],[0,\\\"\\\\n                                    \\\"],[9],[0,\\\"\\\\n                                \\\"],[9],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[7]},null],[0,\\\"            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[11,\\\"id\\\",[20,\\\"_sTableContentContainerId\\\"],null],[8],[0,\\\"\\\\n        \\\"],[6,\\\"table\\\"],[10,\\\"class\\\",\\\"table table-hover table-condensed\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"tbody\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"tr\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"cardDatagridTableSpacer\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[11,\\\"id\\\",[20,\\\"_sTableContentTopSpacerId\\\"],null],[8],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"_arrVisibleRecords\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"tr\\\"],[11,\\\"class\\\",[27,[[26,\\\"if\\\",[[21,1,[\\\"bSelected\\\"]],\\\"highlight\\\"],null]]]],[11,\\\"style\\\",[20,\\\"_sRowHeight\\\"],null],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bSelectColumn\\\"]]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"tableCheckCont\\\"],[8],[0,\\\"\\\\n                                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"tableCheck\\\"],[8],[0,\\\"\\\\n                                    \\\"],[1,[26,\\\"input-checkbox\\\",null,[[\\\"mValue\\\",\\\"bValue\\\",\\\"onCheckBoxClicked\\\"],[[21,1,[]],[21,1,[\\\"bSelected\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onCheckBoxClicked\\\",[21,2,[]]],null]]]],false],[0,\\\"\\\\n                                \\\"],[9],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"each\\\",[[22,[\\\"arrHeaders\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[21,3,[\\\"bShowHeader\\\"]]],null,{\\\"statements\\\":[[4,\\\"unless\\\",[[21,3,[\\\"bSilent\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                    \\\"],[6,\\\"td\\\"],[8],[0,\\\"\\\\n\\\"],[0,\\\"                                        \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"cellWrapper \\\",[26,\\\"if\\\",[[21,3,[\\\"sAlign\\\"]],[21,3,[\\\"sAlign\\\"]]],null],\\\" \\\",[26,\\\"if\\\",[[21,3,[\\\"bIsClickable\\\"]],\\\"clickableItem\\\"],null],[26,\\\"if\\\",[[21,3,[\\\"bWrapText\\\"]],\\\" cellWrapperWrap tableEllipseUndo\\\"],null]]]],[11,\\\"style\\\",[26,\\\"unless\\\",[[21,3,[\\\"bWrapText\\\"]],[21,3,[\\\"sCalcWidth\\\"]]],null],null],[3,\\\"action\\\",[[21,0,[]],\\\"cellClicked\\\",[21,3,[\\\"sProperty\\\"]],[21,1,[]]]],[8],[0,\\\"\\\\n\\\"],[4,\\\"with\\\",[[26,\\\"if\\\",[[26,\\\"if\\\",[[21,3,[\\\"bText\\\"]],[21,3,[\\\"bCastToString\\\"]],false],null],[26,\\\"concat\\\",[\\\"\\\",[26,\\\"get\\\",[[21,1,[]],[26,\\\"card-datagrid-table-get-key\\\",[[21,3,[]]],null]],null]],null],[26,\\\"if\\\",[[26,\\\"get\\\",[[21,1,[]],[26,\\\"card-datagrid-table-get-key\\\",[[21,3,[]]],null]],null],[26,\\\"get\\\",[[21,1,[]],[26,\\\"card-datagrid-table-get-key\\\",[[21,3,[]]],null]],null],[26,\\\"if\\\",[[21,3,[\\\"sTableCustomComponent\\\"]],\\\"sTableCustomComponent\\\",\\\"\\\"],null]],null]],null]],null,{\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[21,3,[\\\"bCustom\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[21,3,[\\\"sTableCustomComponent\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                                        \\\"],[1,[26,\\\"component\\\",[[21,3,[\\\"sTableCustomComponent\\\"]]],[[\\\"objHeaderItem\\\",\\\"objRowData\\\"],[[21,3,[]],[21,1,[]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                                                        \\\"],[1,[26,\\\"card-datagrid-table-get-custom-val\\\",[[21,3,[]],[21,1,[]],[21,4,[]]],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[21,3,[\\\"bText\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[21,4,[]]],null,{\\\"statements\\\":[[0,\\\"                                                        \\\"],[6,\\\"span\\\"],[11,\\\"title\\\",[21,4,[]],null],[8],[0,\\\"\\\\n                                                            \\\"],[1,[21,4,[]],false],[0,\\\"\\\\n                                                        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                                                         \\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[21,3,[\\\"bHTML\\\"]]],null,{\\\"statements\\\":[[4,\\\"with\\\",[[26,\\\"get\\\",[[21,1,[]],[26,\\\"card-datagrid-table-get-key\\\",[[21,3,[]]],null]],null]],null,{\\\"statements\\\":[[0,\\\"                                                        \\\"],[1,[21,6,[]],true],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[6]},{\\\"statements\\\":[[0,\\\"                                                         \\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[21,3,[\\\"bBool\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[26,\\\"equals\\\",[[21,4,[]],true],null]],null,{\\\"statements\\\":[[0,\\\"                                                        \\\"],[6,\\\"i\\\"],[10,\\\"class\\\",\\\"material-icons\\\"],[8],[0,\\\"check\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                                                         \\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[21,3,[\\\"bDate\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[21,4,[]]],null,{\\\"statements\\\":[[0,\\\"                                                        \\\"],[6,\\\"span\\\"],[11,\\\"title\\\",[26,\\\"format-date\\\",[[21,4,[]],[22,[\\\"_sContextTimezone\\\"]],[26,\\\"if\\\",[[21,3,[\\\"bFilterAllowTime\\\"]],[22,[\\\"_objLibConstants\\\",\\\"DATE_TIME_FORMAT\\\"]]],null],[22,[\\\"objDatagridConfig\\\",\\\"bFormatDatesToContextTimezone\\\"]],[22,[\\\"_sDisplayTimezone\\\"]],[21,3,[\\\"bShowTimezoneAbbreviation\\\"]],[26,\\\"get\\\",[[21,1,[]],[21,3,[\\\"sConvertToTimezoneProp\\\"]]],null]],null],null],[8],[0,\\\"\\\\n                                                            \\\"],[1,[26,\\\"format-date\\\",[[21,4,[]],[22,[\\\"_sContextTimezone\\\"]],[26,\\\"if\\\",[[21,3,[\\\"bFilterAllowTime\\\"]],[22,[\\\"_objLibConstants\\\",\\\"DATE_TIME_FORMAT\\\"]]],null],[22,[\\\"objDatagridConfig\\\",\\\"bFormatDatesToContextTimezone\\\"]],[22,[\\\"_sDisplayTimezone\\\"]],false,[26,\\\"get\\\",[[21,1,[]],[21,3,[\\\"sConvertToTimezoneProp\\\"]]],null]],null],false],[0,\\\"\\\\n                                                        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                                                         \\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[21,3,[\\\"bImage\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                                    \\\"],[1,[26,\\\"default-image-component\\\",null,[[\\\"sSrc\\\",\\\"sWidth\\\"],[[21,3,[\\\"sImageUrl\\\"]],[21,3,[\\\"sImageWidth\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[21,3,[\\\"bMapping\\\"]]],null,{\\\"statements\\\":[[4,\\\"each\\\",[[21,3,[\\\"arrMappingData\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[26,\\\"equals\\\",[[21,4,[]],[21,5,[\\\"sValue\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"                                                            \\\"],[6,\\\"span\\\"],[11,\\\"title\\\",[21,5,[\\\"sTitle\\\"]],null],[8],[0,\\\"\\\\n                                                                \\\"],[1,[21,5,[\\\"sTitle\\\"]],false],[0,\\\"\\\\n                                                            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[5]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[4]},{\\\"statements\\\":[[0,\\\"                                                 \\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"                                        \\\"],[9],[0,\\\"\\\\n                                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[3]},null],[0,\\\"                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1,2]},null],[0,\\\"                \\\"],[6,\\\"tr\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"cardDatagridTableSpacer\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[11,\\\"id\\\",[20,\\\"_sTableContentBottomSpacerId\\\"],null],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bRenderLoad\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"loaderContainer\\\"],[8],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                        \\\"],[9],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[22,[\\\"bLoading\\\"]]],null,{\\\"statements\\\":[[4,\\\"unless\\\",[[22,[\\\"arrData\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"noDataText\\\"],[8],[1,[20,\\\"_sNoDataMessage\\\"],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bRenderLoad\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"scrollLoaderContainer\\\"],[8],[1,[20,\\\"loading-component\\\"],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"bLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"loaderContainer\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"loaderContainerCenter\\\"],[8],[1,[20,\\\"loading-component\\\"],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/card-datagrid-table.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/card-heading-and-content-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"FdENF9fL\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[4,\\\"card-style-component\\\",null,[[\\\"bApplyDefaultPadding\\\",\\\"bHideOverFlow\\\"],[[22,[\\\"bApplyDefaultPadding\\\"]],[22,[\\\"bHideOverFlow\\\"]]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[[26,\\\"if\\\",[[22,[\\\"sHeaderClass\\\"]],\\\"\\\",\\\"padding-bottom-micro\\\"],null]]]],[8],[0,\\\"\\\\n\\\"],[4,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"sHeaderSizeClass\\\",\\\"sHeaderClass\\\",\\\"bHasIcon\\\",\\\"sRoundButtonSize\\\",\\\"sLetter\\\",\\\"sIconName\\\",\\\"sIconFa\\\",\\\"sIconSvg\\\",\\\"sImageUrl\\\",\\\"sIconColor\\\",\\\"sIconClass\\\",\\\"sIconSizeClass\\\",\\\"arrActionItems\\\",\\\"objSpecialAction\\\",\\\"bHasBlock\\\"],[[22,[\\\"sHeading\\\"]],[22,[\\\"sHeaderSizeClass\\\"]],[22,[\\\"sHeaderClass\\\"]],[22,[\\\"bHasIcon\\\"]],[22,[\\\"sRoundButtonSize\\\"]],[22,[\\\"sLetter\\\"]],[22,[\\\"sIcon\\\"]],[22,[\\\"sIconFa\\\"]],[22,[\\\"sIconSvg\\\"]],[22,[\\\"sImageUrl\\\"]],[22,[\\\"sIconColor\\\"]],[22,[\\\"sIconClass\\\"]],[22,[\\\"sIconSizeClass\\\"]],[22,[\\\"arrActionItems\\\"]],[22,[\\\"objSpecialAction\\\"]],[26,\\\"if\\\",[[22,[\\\"sSubHeading\\\"]],true,false],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"sHeaderSizeClass\\\",\\\"sHeaderClass\\\"],[[22,[\\\"sSubHeading\\\"]],[22,[\\\"sSubHeaderSizeClass\\\"]],[22,[\\\"sSubHeaderClass\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\",\\\"sBlackOutClass\\\"],[[22,[\\\"bLoading\\\"]],[26,\\\"if\\\",[[22,[\\\"bApplyDefaultPadding\\\"]],\\\"padding-left-normal-minus padding-right-normal-minus padding-bottom-normal-minus\\\",\\\"\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[13,1],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/card-heading-and-content-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/card-style-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"EbQnnehq\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[11,\\\"class\\\",[27,[[26,\\\"if\\\",[[22,[\\\"bApplyDefaultPadding\\\"]],\\\"a24-card-default-padding\\\",\\\"\\\"],null]]]],[8],[0,\\\"\\\\n    \\\"],[13,1],[0,\\\"\\\\n\\\"],[9]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/card-style-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/chart-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"EX7+FFq6\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"canvas\\\"],[11,\\\"id\\\",[20,\\\"_sCanvasId\\\"],null],[8],[9]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/chart-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/collapse-section-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"hLnZ5Pw4\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[13,1]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/collapse-section-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/collapse-trigger-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"av6F3Zk/\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[6,\\\"a\\\"],[11,\\\"class\\\",[27,[[26,\\\"if\\\",[[22,[\\\"bDisplayArrow\\\"]],\\\"collapse-trigger outline-none has-arrow\\\",\\\"collapse-trigger outline-none\\\"],null],[26,\\\"if\\\",[[22,[\\\"bShouldShowCollapsed\\\"]],\\\" collapsed\\\"],null],[26,\\\"if\\\",[[22,[\\\"bDisplayWaves\\\"]],\\\" waves-effect\\\"],null]]]],[11,\\\"aria-controls\\\",[27,[[20,\\\"sCollapseSectionId\\\"]]]],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onTriggerClicked\\\"],null],null],[8],[0,\\\"\\\\n    \\\"],[13,1],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bDisplayArrow\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"i\\\"],[10,\\\"class\\\",\\\"collapse-trigger-arrow material-icons\\\"],[8],[0,\\\"expand_less\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/collapse-trigger-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/component-sort\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"/LM0wb8R\", \"block\": \"{\\\"symbols\\\":[\\\"objGroup\\\",\\\"objItem\\\"],\\\"statements\\\":[[4,\\\"each\\\",[[22,[\\\"_arrGroups\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[20,\\\"sGroupTitleStyle\\\"],null],[8],[1,[21,1,[\\\"sTitle\\\"]],false],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[21,1,[\\\"arrItems\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[26,\\\"component\\\",[[21,2,[\\\"sComponent\\\"]]],[[\\\"objData\\\",\\\"objActions\\\"],[[21,2,[\\\"objData\\\"]],[21,2,[\\\"objActions\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/component-sort.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/default-image-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"ltGEDGdM\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bShowDefault\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[13,1],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[6,\\\"img\\\"],[11,\\\"src\\\",[27,[[20,\\\"_sImageSrc\\\"]]]],[11,\\\"class\\\",[27,[[20,\\\"_sImageClassNames\\\"]]]],[8],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/default-image-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/dropdown-content\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"zwgxfbun\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bShowBackdrop\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-dropdown-backdrop\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onBackdropClick\\\"]],[8],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[6,\\\"div\\\"],[11,\\\"id\\\",[27,[[20,\\\"sDropdownContentId\\\"]]]],[11,\\\"class\\\",[27,[\\\"a24-dropdown-menu \\\",[20,\\\"sAlign\\\"],\\\" \\\",[20,\\\"sDropdownClass\\\"],[26,\\\"if\\\",[[22,[\\\"bShow\\\"]],\\\"\\\",\\\" display-none\\\"],null]]]],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-dropdown-content-spacer\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onBackdropClick\\\"]],[8],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-dropdown-content-box z-depth-1\\\"],[8],[0,\\\"\\\\n        \\\"],[13,1],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/dropdown-content.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/dropdown-trigger\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"ATIhhJCz\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[13,1]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/dropdown-trigger.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/export-popup-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"f6khV6KD\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\"],\\\"statements\\\":[[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"bDismissible\\\",\\\"onPopupResponsiveDismiss\\\"],[[22,[\\\"bShow\\\"]],[22,[\\\"bLoading\\\"]],false,false,[26,\\\"action\\\",[[21,0,[]],\\\"onExportPopupCancel\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"class\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[[26,\\\"lookup-string\\\",[\\\"exportData\\\",[22,[\\\"_objEmberLibStringsService\\\"]]],null],\\\"padding-double grey lighten-3\\\",false,[21,1,[]],[22,[\\\"_objExportPopupSpecialAction\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-double font-sm\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bTooManyResults\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"a24-string-html-icon-warning\\\",[22,[\\\"_objStringsService\\\"]]],null],false],[0,\\\" \\\"],[1,[26,\\\"lookup-string\\\",[\\\"tooManyResults\\\",[22,[\\\"_objEmberLibStringsService\\\"]]],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            \\\"],[1,[26,\\\"lookup-string\\\",[\\\"areYouSureYouWantToExport\\\",[22,[\\\"_objEmberLibStringsService\\\"]]],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bDataWarning\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-double padding-left-double font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"a24-string-html-icon-warning\\\",[22,[\\\"_objStringsService\\\"]]],null],false],[0,\\\" \\\"],[1,[26,\\\"lookup-string\\\",[\\\"largeDataExport\\\",[22,[\\\"_objEmberLibStringsService\\\"]]],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"unless\\\",[[22,[\\\"_bTooManyResults\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-double padding-left-double font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"a24-string-html-icon-grey\\\",[22,[\\\"_objStringsService\\\"]],\\\"info\\\"],null],false],[0,\\\" \\\"],[1,[26,\\\"lookup-string\\\",[\\\"dataWillBeEmailed\\\",[22,[\\\"_objEmberLibStringsService\\\"]]],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onExportPopupCancel\\\"]],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bTooManyResults\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[1,[26,\\\"lookup-string\\\",[\\\"close\\\"],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                \\\"],[1,[26,\\\"lookup-string\\\",[\\\"no\\\"],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[22,[\\\"_bTooManyResults\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onExportPopupConfirm\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"yes\\\"],null],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/export-popup-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/fab-button\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"M7TOq64r\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-fab-button-container display-none\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onFabClick\\\"]],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"class\\\",\\\"sRoundButtonSize\\\",\\\"sBackgroundClass\\\",\\\"sIconClass\\\",\\\"sIconSizeClass\\\",\\\"sIcon\\\",\\\"sIconFa\\\",\\\"sIconSvg\\\",\\\"bClickable\\\",\\\"bLightWaves\\\",\\\"sToolTipText\\\",\\\"sToolTipPosition\\\"],[\\\"a24-fab-button-main\\\",[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_SIZE_EXTRA_LARGE\\\",[22,[\\\"_objLibConstants\\\"]]],null],[26,\\\"if\\\",[[22,[\\\"_objFabCurrent\\\",\\\"sButtonColor\\\"]],[22,[\\\"_objFabCurrent\\\",\\\"sButtonColor\\\"]],\\\"\\\"],null],[22,[\\\"_objFabCurrent\\\",\\\"sIconColor\\\"]],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_CONTENT_SIZE_MEDIUM\\\",[22,[\\\"_objLibConstants\\\"]]],null],[22,[\\\"_objFabCurrent\\\",\\\"sIconName\\\"]],[22,[\\\"_objFabCurrent\\\",\\\"sIconFaName\\\"]],[22,[\\\"_objFabCurrent\\\",\\\"sIconSvg\\\"]],true,[22,[\\\"_objFabCurrent\\\",\\\"bLightWaves\\\"]],[22,[\\\"_objFabCurrent\\\",\\\"sTooltip\\\"]],\\\"left\\\"]]],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/fab-button.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/horizontal-line-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"rFPw4Psp\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/horizontal-line-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/icon-label-value-row-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"AJvwTS/7\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"td\\\"],[11,\\\"class\\\",[27,[[20,\\\"sIconPadding\\\"]]]],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sRoundButtonSize\\\",\\\"sIconSizeClass\\\",\\\"sIcon\\\",\\\"sIconFa\\\",\\\"sIconSvg\\\",\\\"sLetter\\\",\\\"sImageUrl\\\",\\\"bClickable\\\"],[[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_SIZE_SMALL\\\",[22,[\\\"_objLibConstants\\\"]]],null],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_CONTENT_SIZE_SMALL\\\",[22,[\\\"_objLibConstants\\\"]]],null],[22,[\\\"sIcon\\\"]],[22,[\\\"sIconFa\\\"]],[22,[\\\"sIconSvg\\\"]],[22,[\\\"sLetter\\\"]],[22,[\\\"sImageUrl\\\"]],false]]],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"a24-grey-text-darken-4\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[20,\\\"sValue\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"sLabel\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-grey-text-darken-2\\\"],[8],[0,\\\"\\\\n            • \\\"],[1,[20,\\\"sLabel\\\"],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"sRightLabel\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"td\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right a24-grey-text-darken-2\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[20,\\\"sRightLabel\\\"],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/icon-label-value-row-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/icon-label-value-table-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"aM/ygf2o\", \"block\": \"{\\\"symbols\\\":[\\\"objEntry\\\"],\\\"statements\\\":[[6,\\\"table\\\"],[10,\\\"class\\\",\\\"full-width\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"arrValueEntries\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"icon-label-value-row-component\\\",null,[[\\\"sIcon\\\",\\\"sIconFa\\\",\\\"sIconSvg\\\",\\\"sValue\\\",\\\"sLabel\\\",\\\"sRightLabel\\\",\\\"bEmail\\\",\\\"bPhone\\\",\\\"bLink\\\",\\\"bExternalLink\\\",\\\"bAddress\\\"],[[21,1,[\\\"sIcon\\\"]],[21,1,[\\\"sIconFa\\\"]],[21,1,[\\\"sIconSvg\\\"]],[21,1,[\\\"sValue\\\"]],[21,1,[\\\"sLabel\\\"]],[21,1,[\\\"sRightLabel\\\"]],[21,1,[\\\"bEmail\\\"]],[21,1,[\\\"bPhone\\\"]],[21,1,[\\\"bLink\\\"]],[21,1,[\\\"bExternalLink\\\"]],[21,1,[\\\"bAddress\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/icon-label-value-table-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/iframe-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"r2HEG4bv\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\",\\\"sBlackOutClass\\\"],[[22,[\\\"bLoading\\\"]],\\\"grey lighten-3\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[[26,\\\"if\\\",[[22,[\\\"bPadHeader\\\"]],\\\"padding-top-double padding-right-normal padding-left-normal\\\",\\\"\\\"],null]]]],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\"],[[22,[\\\"sHeading\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n        \\\"],[6,\\\"iframe\\\"],[11,\\\"name\\\",[20,\\\"_sIFrameName\\\"],null],[10,\\\"class\\\",\\\"a24-iframe\\\"],[11,\\\"src\\\",[27,[[20,\\\"sIFrameUrl\\\"]]]],[11,\\\"allow\\\",[27,[[20,\\\"sAllowList\\\"]]]],[8],[9],[0,\\\"\\\\n        \\\"],[13,1],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/iframe-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/iframe-sourceless\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"0woeFfrc\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"iframe\\\"],[10,\\\"frameborder\\\",\\\"0\\\"],[10,\\\"scrolling\\\",\\\"no\\\"],[8],[9]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/iframe-sourceless.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/image-cropper-modal\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"sHzyGrHd\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objParentScroller\\\"],\\\"statements\\\":[[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"onPopupResponsiveDismiss\\\",\\\"bDismissible\\\"],[[22,[\\\"bShowPopup\\\"]],[22,[\\\"bLoading\\\"]],false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupCancel\\\"],null],false]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[[22,[\\\"sHeader\\\"]],\\\"padding-double popup-header-gray\\\",false,[21,1,[]],[22,[\\\"_objSpecialPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"bShowPopup\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"container\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12 padding-top-normal\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"image-cropper-container\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"image-cropper-image\\\",[26,\\\"unless\\\",[[22,[\\\"_bImageSet\\\"]],\\\" display-none\\\"],null]]]],[8],[0,\\\"\\\\n                            \\\"],[6,\\\"img\\\"],[10,\\\"class\\\",\\\"image-cropper-image\\\"],[8],[9],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"image-cropper-placeholder cursor-clickable waves-effect waves-dark\\\",[26,\\\"if\\\",[[22,[\\\"_bImageSet\\\"]],\\\" display-none\\\"],null]]]],[3,\\\"action\\\",[[21,0,[]],\\\"onFileInputClick\\\"]],[8],[0,\\\"\\\\n                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"image-cropper-placeholder-inside a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n                                \\\"],[6,\\\"div\\\"],[8],[0,\\\"\\\\n                                    \\\"],[6,\\\"i\\\"],[10,\\\"class\\\",\\\"material-icons\\\"],[8],[0,\\\"camera_alt\\\"],[9],[0,\\\"\\\\n                                \\\"],[9],[0,\\\"\\\\n                                \\\"],[6,\\\"div\\\"],[8],[0,\\\"\\\\n                                    \\\"],[1,[20,\\\"_sChooseImage\\\"],false],[0,\\\"\\\\n                                \\\"],[9],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bImageSet\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"image-cropper-toolbar-container padding-top-normal\\\"],[8],[0,\\\"\\\\n                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"image-cropper-toolbar a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n                                \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sIcon\\\",\\\"sToolTipText\\\",\\\"onRoundIconClick\\\"],[\\\"image\\\",[26,\\\"lookup-string\\\",[\\\"selectImage\\\",[22,[\\\"_objEmberLibStringService\\\"]]],null],[26,\\\"action\\\",[[21,0,[]],\\\"onFileInputClick\\\"],null]]]],false],[0,\\\"\\\\n                                \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sIcon\\\",\\\"sToolTipText\\\",\\\"onRoundIconClick\\\"],[\\\"zoom_in\\\",[26,\\\"lookup-string\\\",[\\\"zoomIn\\\",[22,[\\\"_objEmberLibStringService\\\"]]],null],[26,\\\"action\\\",[[21,0,[]],\\\"zoomInAction\\\"],null]]]],false],[0,\\\"\\\\n                                \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sIcon\\\",\\\"sToolTipText\\\",\\\"onRoundIconClick\\\"],[\\\"zoom_out\\\",[26,\\\"lookup-string\\\",[\\\"zoomOut\\\",[22,[\\\"_objEmberLibStringService\\\"]]],null],[26,\\\"action\\\",[[21,0,[]],\\\"zoomOutAction\\\"],null]]]],false],[0,\\\"\\\\n                                \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sIcon\\\",\\\"sToolTipText\\\",\\\"onRoundIconClick\\\"],[\\\"rotate_left\\\",[26,\\\"lookup-string\\\",[\\\"rotateLeft\\\",[22,[\\\"_objEmberLibStringService\\\"]]],null],[26,\\\"action\\\",[[21,0,[]],\\\"rotateLeftAction\\\"],null]]]],false],[0,\\\"\\\\n                                \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sIcon\\\",\\\"sToolTipText\\\",\\\"onRoundIconClick\\\"],[\\\"rotate_right\\\",[26,\\\"lookup-string\\\",[\\\"rotateRight\\\",[22,[\\\"_objEmberLibStringService\\\"]]],null],[26,\\\"action\\\",[[21,0,[]],\\\"rotateRightAction\\\"],null]]]],false],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12 display-none\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-file\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"file\\\"],null],\\\"file\\\",1,true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupCancel\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"sAvatar\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupRemove\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"remove\\\"],null],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"_bImageSet\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupConfirm\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"save\\\"],null],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowUnsavedData\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupUnsavedConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"unsavedData\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"bLoading\\\",\\\"onPopupConfirmationCancel\\\",\\\"onPopupBackdropClick\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowDeleteConfirm\\\"]],false,[22,[\\\"_bPopupLoading\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupDeletePopupClose\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupDeletePopupClose\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupDeleteConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"removeAvatarConfirmation\\\",[22,[\\\"_objEmberLibStringService\\\"]]],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/image-cropper-modal.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/input-checkbox\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"DXq8fCzq\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[26,\\\"input\\\",null,[[\\\"placeholder\\\",\\\"type\\\",\\\"id\\\",\\\"class\\\",\\\"checked\\\",\\\"disabled\\\"],[\\\"\\\",\\\"checkbox\\\",[22,[\\\"_sInputId\\\"]],\\\"filled-in\\\",[22,[\\\"bValue\\\"]],[22,[\\\"bDisabled\\\"]]]]],false],[0,\\\"\\\\n\\\"],[6,\\\"label\\\"],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onClick\\\"],null],null],[11,\\\"for\\\",[27,[[20,\\\"_sInputId\\\"]]]],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"sFieldName\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[20,\\\"sFieldName\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"         \\\\n\\\"]],\\\"parameters\\\":[]}],[9]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/input-checkbox.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/input-date-picker\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"Xujiutr9\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[26,\\\"input\\\",null,[[\\\"placeholder\\\",\\\"type\\\",\\\"id\\\",\\\"class\\\"],[\\\"\\\",\\\"text\\\",[22,[\\\"_sInputId\\\"]],\\\"form-control datepicker\\\"]]],false],[0,\\\"\\\\n\\\"],[6,\\\"label\\\"],[11,\\\"for\\\",[27,[[20,\\\"_sInputId\\\"]]]],[8],[1,[20,\\\"sFieldName\\\"],false],[9]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/input-date-picker.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/input-dropdown\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"HLj8h5X4\", \"block\": \"{\\\"symbols\\\":[\\\"objOption\\\",\\\"objOption\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"bMultiSelect\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"select\\\"],[11,\\\"id\\\",[20,\\\"_sInputId\\\"],null],[10,\\\"class\\\",\\\"mdb-select\\\"],[10,\\\"multiple\\\",\\\"\\\"],[11,\\\"onchange\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onChangeOption\\\"],null],null],[8],[0,\\\"\\\\n        \\\"],[6,\\\"option\\\"],[10,\\\"value\\\",\\\"\\\"],[10,\\\"disabled\\\",\\\"\\\"],[10,\\\"selected\\\",\\\"\\\"],[8],[1,[20,\\\"sOptionsPrompt\\\"],false],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"arrOptions\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[21,2,[\\\"bDisabled\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"option\\\"],[11,\\\"value\\\",[27,[[26,\\\"get\\\",[[21,2,[]],[22,[\\\"sOptionsValueKey\\\"]]],null]]]],[10,\\\"disabled\\\",\\\"\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"get\\\",[[21,2,[]],[22,[\\\"sOptionsLabelKey\\\"]]],null],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"option\\\"],[11,\\\"value\\\",[27,[[26,\\\"get\\\",[[21,2,[]],[22,[\\\"sOptionsValueKey\\\"]]],null]]]],[8],[1,[26,\\\"get\\\",[[21,2,[]],[22,[\\\"sOptionsLabelKey\\\"]]],null],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"select\\\"],[11,\\\"id\\\",[20,\\\"_sInputId\\\"],null],[10,\\\"class\\\",\\\"mdb-select\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"option\\\"],[10,\\\"value\\\",\\\"\\\"],[10,\\\"selected\\\",\\\"\\\"],[8],[1,[20,\\\"sOptionsPrompt\\\"],false],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"arrOptions\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"option\\\"],[11,\\\"value\\\",[27,[[26,\\\"get\\\",[[21,1,[]],[22,[\\\"sOptionsValueKey\\\"]]],null]]]],[8],[1,[26,\\\"get\\\",[[21,1,[]],[22,[\\\"sOptionsLabelKey\\\"]]],null],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[6,\\\"label\\\"],[8],[1,[20,\\\"sFieldName\\\"],false],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/input-dropdown.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/input-form-address\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"Gbjn925c\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"bRequired\\\",\\\"sValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\"],[[26,\\\"lookup-string\\\",[\\\"addressLine1\\\"],null],\\\"sAddressLine1\\\",true,[22,[\\\"_objAddressDetailsUnbound\\\",\\\"sAddressLine1\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"sValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\"],[[26,\\\"lookup-string\\\",[\\\"addressLine2\\\"],null],\\\"sAddressLine2\\\",[22,[\\\"_objAddressDetailsUnbound\\\",\\\"sAddressLine2\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"bRequired\\\",\\\"sValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\"],[[26,\\\"lookup-string\\\",[\\\"cityTown\\\"],null],\\\"sCityTown\\\",true,[22,[\\\"_objAddressDetailsUnbound\\\",\\\"sCityTown\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"sValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\"],[[26,\\\"lookup-string\\\",[\\\"postCode\\\"],null],\\\"sPostCode\\\",[22,[\\\"_objAddressDetailsUnbound\\\",\\\"sPostCode\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"bRequired\\\",\\\"arrOptions\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\"],[[26,\\\"lookup-string\\\",[\\\"country\\\"],null],\\\"sCountryCode\\\",true,[22,[\\\"arrCountry\\\"]],[22,[\\\"_objCountrySelectedValue\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[[26,\\\"if\\\",[[22,[\\\"bDisplayCounty\\\"]],\\\"col-md-12\\\",\\\"col-md-12 display-none\\\"],null]]]],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"arrOptions\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\"],[[26,\\\"lookup-string\\\",[\\\"county\\\"],null],\\\"sCounty\\\",[22,[\\\"arrCounty\\\"]],[22,[\\\"_objCountySelectedValue\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[[26,\\\"if\\\",[[22,[\\\"bDisplayPeriod\\\"]],\\\"col-md-12\\\",\\\"col-md-12 display-none\\\"],null]]]],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n\\\"],[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-6\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"bRequired\\\",\\\"arrOptions\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\"],[[26,\\\"lookup-string\\\",[\\\"dateFrom\\\"],null],\\\"sDateFromMonth\\\",true,[22,[\\\"_arrFromDateMonth\\\"]],[22,[\\\"_objFromDateMonthSelected\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-6\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sProperty\\\",\\\"arrOptions\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\"],[\\\"sDateFromYear\\\",[22,[\\\"_arrFromDateYear\\\"]],[22,[\\\"_objFromDateYearSelected\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[0,\\\"    \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[[26,\\\"if\\\",[[22,[\\\"_bShouldDisplayToDate\\\"]],\\\"row\\\",\\\"row display-none\\\"],null]]]],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-6\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"bRequired\\\",\\\"arrOptions\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\"],[[26,\\\"lookup-string\\\",[\\\"dateTo\\\"],null],\\\"sDateToMonth\\\",true,[22,[\\\"_arrToDateMonth\\\"]],[22,[\\\"_objToDateMonthSelected\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-6\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sProperty\\\",\\\"arrOptions\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\"],[\\\"sDateToYear\\\",[22,[\\\"_arrToDateYear\\\"]],[22,[\\\"_objToDateYearSelected\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[[26,\\\"if\\\",[[22,[\\\"bDisplayCurrent\\\"]],\\\"col-md-12\\\",\\\"col-md-12 display-none\\\"],null]]]],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"input-form-checkbox\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"bValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\"],[[26,\\\"lookup-string\\\",[\\\"currentAddress\\\"],null],\\\"bCurrent\\\",[22,[\\\"_objAddressDetailsUnbound\\\",\\\"bCurrent\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/input-form-address.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/input-form-checkbox\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"CTxfeuRs\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"funcFloatRightIconClickCallback\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"float-right-icon\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onFloatRightIconClicked\\\"]],[8],[0,\\\"\\\\n        \\\"],[6,\\\"i\\\"],[11,\\\"class\\\",[27,[\\\"material-icons \\\",[20,\\\"sFloatRightIconColor\\\"]]]],[8],[1,[20,\\\"sFloatRightIconName\\\"],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"form-inline\\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"form-group\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"input\\\",null,[[\\\"placeholder\\\",\\\"type\\\",\\\"id\\\",\\\"class\\\",\\\"checked\\\",\\\"disabled\\\"],[\\\"\\\",\\\"checkbox\\\",[22,[\\\"_sInputId\\\"]],\\\"filled-in\\\",[22,[\\\"_bUIValue\\\"]],[22,[\\\"bDisabled\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[6,\\\"label\\\"],[11,\\\"for\\\",[27,[[20,\\\"_sInputId\\\"]]]],[11,\\\"class\\\",[26,\\\"if\\\",[[22,[\\\"bDisabled\\\"]],\\\"disabled\\\"],null],null],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"sFieldName\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[1,[20,\\\"sFieldName\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bRequired\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                 \\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/input-form-checkbox.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/input-form-date-picker\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"HytA6VDp\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"funcFloatRightIconClickCallback\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"float-right-icon\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onFloatRightIconClicked\\\"]],[8],[0,\\\"\\\\n        \\\"],[6,\\\"i\\\"],[11,\\\"class\\\",[27,[\\\"material-icons \\\",[20,\\\"sFloatRightIconColor\\\"]]]],[8],[1,[20,\\\"sFloatRightIconName\\\"],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"bIsOutline\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"i\\\"],[10,\\\"class\\\",\\\"material-icons icon-right\\\"],[8],[0,\\\"calendar_today\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[1,[26,\\\"input\\\",null,[[\\\"placeholder\\\",\\\"type\\\",\\\"id\\\",\\\"disabled\\\",\\\"class\\\"],[\\\"\\\",\\\"text\\\",[22,[\\\"_sInputId\\\"]],[22,[\\\"bDisabled\\\"]],[26,\\\"if\\\",[[22,[\\\"sErrorMessage\\\"]],\\\"form-control datepicker invalid\\\",\\\"form-control datepicker\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[6,\\\"label\\\"],[11,\\\"for\\\",[27,[[20,\\\"_sInputId\\\"]]]],[8],[0,\\\"\\\\n    \\\"],[1,[20,\\\"sFieldName\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bRequired\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/input-form-date-picker.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/input-form-dropdown\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"afFDVfuR\", \"block\": \"{\\\"symbols\\\":[\\\"objOption\\\",\\\"objOption\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"funcFloatRightIconClickCallback\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"float-right-icon\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onFloatRightIconClicked\\\"]],[8],[0,\\\"\\\\n        \\\"],[6,\\\"i\\\"],[11,\\\"class\\\",[27,[\\\"material-icons \\\",[20,\\\"sFloatRightIconColor\\\"]]]],[8],[1,[20,\\\"sFloatRightIconName\\\"],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bMultiSelect\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"select\\\"],[11,\\\"id\\\",[20,\\\"_sInputId\\\"],null],[10,\\\"class\\\",\\\"mdb-select\\\"],[10,\\\"multiple\\\",\\\"\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"option\\\"],[10,\\\"value\\\",\\\"\\\"],[10,\\\"disabled\\\",\\\"\\\"],[10,\\\"selected\\\",\\\"\\\"],[8],[1,[20,\\\"sOptionsPrompt\\\"],false],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"arrOptions\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"option\\\"],[11,\\\"value\\\",[27,[[26,\\\"get\\\",[[21,2,[]],[22,[\\\"sOptionsValueKey\\\"]]],null]]]],[8],[1,[26,\\\"get\\\",[[21,2,[]],[22,[\\\"sOptionsLabelKey\\\"]]],null],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"select\\\"],[11,\\\"id\\\",[20,\\\"_sInputId\\\"],null],[10,\\\"class\\\",\\\"mdb-select\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"option\\\"],[10,\\\"value\\\",\\\"\\\"],[10,\\\"selected\\\",\\\"\\\"],[8],[1,[20,\\\"sOptionsPrompt\\\"],false],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"arrOptions\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"option\\\"],[11,\\\"value\\\",[27,[[26,\\\"get\\\",[[21,1,[]],[22,[\\\"sOptionsValueKey\\\"]]],null]]]],[8],[1,[26,\\\"get\\\",[[21,1,[]],[22,[\\\"sOptionsLabelKey\\\"]]],null],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[6,\\\"label\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[20,\\\"sFieldName\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bRequired\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"loader-container\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"d-flex justify-content-center loader-inner-container\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"progress a24-primary-color-accent-force progress-bar\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"indeterminate\\\"],[8],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/input-form-dropdown.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/input-form-file\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"lcKpwxTu\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"bStaticHeader\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24InputHeader a24InputHeaderStatic\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[20,\\\"sFieldName\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bRequired\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"funcFloatRightIconClickCallback\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"float-right-icon\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onFloatRightIconClicked\\\"]],[8],[0,\\\"\\\\n        \\\"],[6,\\\"i\\\"],[11,\\\"class\\\",[27,[\\\"material-icons \\\",[20,\\\"sFloatRightIconColor\\\"]]]],[8],[1,[20,\\\"sFloatRightIconName\\\"],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[6,\\\"input\\\"],[11,\\\"id\\\",[20,\\\"_sUploadInputId\\\"],null],[10,\\\"class\\\",\\\"display-none\\\"],[10,\\\"type\\\",\\\"file\\\"],[8],[9],[0,\\\"\\\\n\\\"],[6,\\\"input\\\"],[11,\\\"placeholder\\\",[27,[[20,\\\"sPlaceholder\\\"]]]],[11,\\\"id\\\",[20,\\\"_sInputId\\\"],null],[11,\\\"class\\\",[27,[\\\"form-control\\\",[26,\\\"if\\\",[[22,[\\\"sErrorMessage\\\"]],\\\" invalid\\\"],null]]]],[10,\\\"type\\\",\\\"text\\\"],[8],[9],[0,\\\"\\\\n\\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"float-right-clear-button\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onClearAction\\\"]],[8],[0,\\\"\\\\n    \\\"],[6,\\\"i\\\"],[10,\\\"class\\\",\\\"material-icons\\\"],[8],[0,\\\"clear\\\"],[9],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[22,[\\\"bStaticHeader\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"label\\\"],[11,\\\"for\\\",[27,[[20,\\\"_sInputId\\\"]]]],[8],[0,\\\"\\\\n        \\\"],[1,[20,\\\"sFieldName\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bRequired\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/input-form-file.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/input-form-header\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"2BQ8RQXK\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"a24InputHeader\\\",[26,\\\"if\\\",[[22,[\\\"sHeaderClass\\\"]],[26,\\\"concat\\\",[\\\" \\\",[22,[\\\"sHeaderClass\\\"]]],null]],null]]]],[8],[0,\\\"\\\\n    \\\"],[1,[20,\\\"sFieldName\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bRequired\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"funcFloatRightIconClickCallback\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"float-right-icon\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onFloatRightIconClicked\\\"]],[8],[0,\\\"\\\\n            \\\"],[6,\\\"i\\\"],[11,\\\"class\\\",[27,[\\\"material-icons \\\",[20,\\\"sFloatRightIconColor\\\"]]]],[8],[1,[20,\\\"sFloatRightIconName\\\"],false],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9],[0,\\\"\\\\n\\\"],[13,1,[[21,0,[]]]],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/input-form-header.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/input-form-html\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"GVBOwPi9\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24InputHeader a24InputHeaderStatic\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[20,\\\"sFieldName\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bRequired\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"funcFloatRightIconClickCallback\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"float-right-icon\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onFloatRightIconClicked\\\"]],[8],[0,\\\"\\\\n        \\\"],[6,\\\"i\\\"],[11,\\\"class\\\",[27,[\\\"material-icons \\\",[20,\\\"sFloatRightIconColor\\\"]]]],[8],[1,[20,\\\"sFloatRightIconName\\\"],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[6,\\\"input\\\"],[11,\\\"placeholder\\\",[27,[[20,\\\"sTextFiller\\\"]]]],[11,\\\"id\\\",[20,\\\"_sInputId\\\"],null],[10,\\\"readonly\\\",\\\"\\\"],[11,\\\"onClick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onTextboxClick\\\"],null],null],[11,\\\"class\\\",[27,[\\\"form-control\\\",[26,\\\"if\\\",[[22,[\\\"sErrorMessage\\\"]],\\\" invalid\\\"],null]]]],[10,\\\"type\\\",\\\"text\\\"],[8],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"bShowPopup\\\",\\\"sModalSize\\\",\\\"bLoading\\\",\\\"bDismissible\\\",\\\"bAutoClose\\\",\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"onPopupConfirmationConfirm\\\",\\\"onPopupConfirmationCancel\\\"],[[22,[\\\"_bShowPopup\\\"]],\\\"modal-lg\\\",false,true,false,[26,\\\"lookup-string\\\",[\\\"apply\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupConfirmationConfirm\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupConfirmationCancel\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[20,\\\"sFieldName\\\"],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal padding-bottom-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"textarea\\\"],[11,\\\"id\\\",[27,[[20,\\\"_sInputId\\\"],\\\"-input\\\"]]],[8],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bDismissible\\\",\\\"bAutoClose\\\",\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"onPopupConfirmationConfirm\\\"],[[22,[\\\"_bConfirmationPopup\\\"]],false,true,true,[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onUnsavedPopupConfirmationConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"unsavedData\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/input-form-html.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/input-form-password\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"xZuffdEF\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"funcFloatRightIconClickCallback\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"float-right-icon\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onFloatRightIconClicked\\\"]],[8],[0,\\\"\\\\n        \\\"],[6,\\\"i\\\"],[11,\\\"class\\\",[27,[\\\"material-icons \\\",[20,\\\"sFloatRightIconColor\\\"]]]],[8],[1,[20,\\\"sFloatRightIconName\\\"],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[6,\\\"input\\\"],[10,\\\"placeholder\\\",\\\"\\\"],[11,\\\"id\\\",[20,\\\"_sInputId\\\"],null],[11,\\\"name\\\",[27,[[20,\\\"sName\\\"]]]],[11,\\\"length\\\",[27,[[20,\\\"iMaxCharacters\\\"]]]],[11,\\\"class\\\",[27,[\\\"form-control\\\",[26,\\\"if\\\",[[22,[\\\"sErrorMessage\\\"]],\\\" invalid\\\"],null]]]],[11,\\\"onchange\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onInputChange\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]],null],[10,\\\"type\\\",\\\"password\\\"],[8],[9],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"label\\\"],[11,\\\"for\\\",[27,[[20,\\\"_sInputId\\\"]]]],[8],[0,\\\"\\\\n    \\\"],[1,[20,\\\"sFieldName\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bRequired\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/input-form-password.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/input-form-radio-group\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"0uhuYFra\", \"block\": \"{\\\"symbols\\\":[\\\"objRadioButtonItem\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24InputHeader\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[20,\\\"sFieldName\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bRequired\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"funcFloatRightIconClickCallback\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"float-right-icon\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onFloatRightIconClicked\\\"]],[8],[0,\\\"\\\\n            \\\"],[6,\\\"i\\\"],[11,\\\"class\\\",[27,[\\\"material-icons \\\",[20,\\\"sFloatRightIconColor\\\"]]]],[8],[1,[20,\\\"sFloatRightIconName\\\"],false],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"form-inline\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"arrRadioButtonItems\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"fieldset\\\"],[10,\\\"class\\\",\\\"form-group\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"input\\\"],[11,\\\"name\\\",[20,\\\"_sGroupName\\\"],null],[11,\\\"id\\\",[21,1,[\\\"_sItemId\\\"]],null],[10,\\\"class\\\",\\\"with-gap\\\"],[11,\\\"checked\\\",[26,\\\"get\\\",[[21,1,[]],[22,[\\\"sOptionsSelectedKey\\\"]]],null],null],[11,\\\"onchange\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onItemSelected\\\",[21,1,[]]],null],null],[10,\\\"type\\\",\\\"radio\\\"],[8],[9],[0,\\\"\\\\n            \\\"],[6,\\\"label\\\"],[11,\\\"for\\\",[27,[[21,1,[\\\"_sItemId\\\"]]]]],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"get\\\",[[21,1,[]],[22,[\\\"sOptionsLabelKey\\\"]]],null],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[9]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/input-form-radio-group.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/input-form-search\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"VRIQUAFJ\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"funcFloatRightIconClickCallback\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"float-right-icon\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onFloatRightIconClicked\\\"]],[8],[0,\\\"\\\\n        \\\"],[6,\\\"i\\\"],[11,\\\"class\\\",[27,[\\\"material-icons \\\",[20,\\\"sFloatRightIconColor\\\"]]]],[8],[1,[20,\\\"sFloatRightIconName\\\"],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[6,\\\"input\\\"],[10,\\\"placeholder\\\",\\\"\\\"],[11,\\\"name\\\",[27,[[20,\\\"sName\\\"]]]],[11,\\\"id\\\",[20,\\\"_sInputId\\\"],null],[11,\\\"class\\\",[27,[\\\"form-control\\\",[26,\\\"if\\\",[[22,[\\\"sErrorMessage\\\"]],\\\" invalid\\\"],null]]]],[11,\\\"onchange\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onInputChange\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]],null],[10,\\\"type\\\",\\\"text\\\"],[8],[9],[0,\\\"\\\\n\\\"],[6,\\\"i\\\"],[10,\\\"class\\\",\\\"material-icons icon-left\\\"],[8],[0,\\\"search\\\"],[9],[0,\\\"\\\\n\\\"],[6,\\\"label\\\"],[11,\\\"for\\\",[27,[[20,\\\"_sInputId\\\"]]]],[8],[0,\\\"\\\\n    \\\"],[1,[20,\\\"sFieldName\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bRequired\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/input-form-search.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/input-form-suggest\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"m/aP6DR7\", \"block\": \"{\\\"symbols\\\":[\\\"objItem\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"input\\\"],[11,\\\"placeholder\\\",[20,\\\"sPlaceHolder\\\"],null],[11,\\\"id\\\",[20,\\\"_sInputId\\\"],null],[11,\\\"length\\\",[27,[[20,\\\"iMaxCharacters\\\"]]]],[11,\\\"class\\\",[27,[\\\"form-control\\\",[26,\\\"if\\\",[[22,[\\\"sErrorMessage\\\"]],\\\" invalid\\\"],null]]]],[10,\\\"autocomplete\\\",\\\"off\\\"],[11,\\\"tabindex\\\",[26,\\\"if\\\",[[22,[\\\"sCustomTabIndex\\\"]],[22,[\\\"sCustomTabIndex\\\"]],\\\"\\\"],null],null],[10,\\\"type\\\",\\\"text\\\"],[8],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"input-form-suggest-dropdown-placeholder\\\"],[8],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"dropdown-content\\\",null,[[\\\"bShow\\\",\\\"bAutoShow\\\",\\\"sDropdownClass\\\",\\\"class\\\",\\\"a24DropdownBlockerClicked\\\"],[[22,[\\\"_bDropdownShow\\\"]],false,[22,[\\\"_sDropdownClass\\\"]],\\\"input-form-suggest-dropdown-container\\\",[26,\\\"action\\\",[[21,0,[]],\\\"closeSuggestDropdown\\\"],null]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\"],[[22,[\\\"_bLoading\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n        \\\"],[6,\\\"ul\\\"],[10,\\\"class\\\",\\\"input-form-suggest-content-list\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"_arrSuggestions\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[1,[26,\\\"line-item-component\\\",null,[[\\\"sCustomClassName\\\",\\\"arrActions\\\",\\\"sOptionsLabel\\\",\\\"sOptionsLink\\\",\\\"onActionClick\\\",\\\"sToolTipText\\\",\\\"setSelectedItemAction\\\",\\\"onLinkAction\\\"],[[26,\\\"if\\\",[[26,\\\"get\\\",[[21,1,[]],\\\"_bSuggestionSelected\\\"],null],\\\"hover\\\",\\\"\\\"],null],[26,\\\"get\\\",[[21,1,[]],\\\"arrActions\\\"],null],[26,\\\"get\\\",[[21,1,[]],[22,[\\\"sOptionsLabelKey\\\"]]],null],[26,\\\"get\\\",[[21,1,[]],[22,[\\\"sOptionsLinkKey\\\"]]],null],[26,\\\"action\\\",[[21,0,[]],\\\"onActionClick\\\"],null],[26,\\\"get\\\",[[21,1,[]],[22,[\\\"sToolTipKey\\\"]]],null],[26,\\\"action\\\",[[21,0,[]],\\\"setSelectedItemAction\\\",[21,1,[]]],null],[26,\\\"action\\\",[[21,0,[]],\\\"onLinkAction\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},{\\\"statements\\\":[[4,\\\"unless\\\",[[22,[\\\"_bLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"input-form-suggest-empty\\\"],[8],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"suggestionEmpty\\\",[22,[\\\"_objEmberLibStringService\\\"]]],null],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"objPermanentItem\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[20,\\\"horizontal-line-component\\\"],false],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"input-form-suggest-content-permanent-item\\\"],[11,\\\"onmousedown\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onPermanentItemAction\\\",[22,[\\\"objPermanentItem\\\"]]],null],null],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"get\\\",[[22,[\\\"objPermanentItem\\\"]],[22,[\\\"sPermanentLabelKey\\\"]]],null],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[6,\\\"label\\\"],[11,\\\"for\\\",[27,[[20,\\\"_sInputId\\\"]]]],[8],[0,\\\"\\\\n        \\\"],[1,[20,\\\"sFieldName\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bRequired\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/input-form-suggest.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/input-form-tag\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"5jnKipww\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24InputHeader\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[20,\\\"sFieldName\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bRequired\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"funcFloatRightIconClickCallback\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"float-right-icon\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onFloatRightIconClicked\\\"]],[8],[0,\\\"\\\\n            \\\"],[6,\\\"i\\\"],[11,\\\"class\\\",[27,[\\\"material-icons \\\",[20,\\\"sFloatRightIconColor\\\"]]]],[8],[1,[20,\\\"sFloatRightIconName\\\"],false],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[11,\\\"id\\\",[27,[[20,\\\"_sInputId\\\"]]]],[11,\\\"class\\\",[27,[[20,\\\"_sChipStyle\\\"],[26,\\\"if\\\",[[22,[\\\"sErrorMessage\\\"]],\\\" invalid\\\"],null]]]],[8],[0,\\\"\\\\n\\\"],[9]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/input-form-tag.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/input-form-text-area\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"FiG+5JcN\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"bStaticHeader\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24InputHeader a24InputHeaderStatic\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[20,\\\"sFieldName\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bRequired\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"funcFloatRightIconClickCallback\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"float-right-icon\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onFloatRightIconClicked\\\"]],[8],[0,\\\"\\\\n        \\\"],[6,\\\"i\\\"],[11,\\\"class\\\",[27,[\\\"material-icons \\\",[20,\\\"sFloatRightIconColor\\\"]]]],[8],[1,[20,\\\"sFloatRightIconName\\\"],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[6,\\\"textarea\\\"],[11,\\\"placeholder\\\",[27,[[20,\\\"sPlaceholder\\\"]]]],[11,\\\"id\\\",[20,\\\"_sInputId\\\"],null],[11,\\\"class\\\",[27,[\\\"md-textarea\\\",[26,\\\"if\\\",[[22,[\\\"sErrorMessage\\\"]],\\\" invalid\\\"],null]]]],[11,\\\"onchange\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onInputChange\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]],null],[8],[9],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[22,[\\\"bStaticHeader\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"label\\\"],[11,\\\"for\\\",[27,[[20,\\\"_sInputId\\\"]]]],[8],[0,\\\"\\\\n        \\\"],[1,[20,\\\"sFieldName\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bRequired\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/input-form-text-area.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/input-form-text\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"uwd8EjNo\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"funcFloatRightIconClickCallback\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"float-right-icon\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onFloatRightIconClicked\\\"]],[8],[0,\\\"\\\\n        \\\"],[6,\\\"i\\\"],[11,\\\"class\\\",[27,[\\\"material-icons \\\",[20,\\\"sFloatRightIconColor\\\"]]]],[8],[1,[20,\\\"sFloatRightIconName\\\"],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[6,\\\"input\\\"],[10,\\\"placeholder\\\",\\\"\\\"],[11,\\\"name\\\",[27,[[20,\\\"sName\\\"]]]],[11,\\\"id\\\",[20,\\\"_sInputId\\\"],null],[11,\\\"class\\\",[27,[\\\"form-control\\\",[26,\\\"if\\\",[[22,[\\\"sErrorMessage\\\"]],\\\" invalid\\\"],null]]]],[11,\\\"onchange\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onInputChange\\\"],[[\\\"value\\\"],[\\\"target.value\\\"]]],null],[10,\\\"type\\\",\\\"text\\\"],[8],[9],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"label\\\"],[11,\\\"for\\\",[27,[[20,\\\"_sInputId\\\"]]]],[8],[0,\\\"\\\\n    \\\"],[1,[20,\\\"sFieldName\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bRequired\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/input-form-text.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/input-form-time-picker\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"Mu3Ysr3d\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"funcFloatRightIconClickCallback\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"float-right-icon\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onFloatRightIconClicked\\\"]],[8],[0,\\\"\\\\n        \\\"],[6,\\\"i\\\"],[11,\\\"class\\\",[27,[\\\"material-icons \\\",[20,\\\"sFloatRightIconColor\\\"]]]],[8],[1,[20,\\\"sFloatRightIconName\\\"],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[1,[26,\\\"input\\\",null,[[\\\"placeholder\\\",\\\"type\\\",\\\"id\\\",\\\"class\\\"],[\\\"\\\",\\\"text\\\",[22,[\\\"_sInputId\\\"]],[26,\\\"if\\\",[[22,[\\\"sErrorMessage\\\"]],\\\"form-control timepicker invalid\\\",\\\"form-control timepicker\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[6,\\\"label\\\"],[11,\\\"for\\\",[27,[[20,\\\"_sInputId\\\"]]]],[8],[0,\\\"\\\\n    \\\"],[1,[20,\\\"sFieldName\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bRequired\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/input-form-time-picker.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/input-form-week\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"Q0YovQ9k\", \"block\": \"{\\\"symbols\\\":[\\\"objWeekItem\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24InputHeader\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[20,\\\"sFieldName\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bRequired\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"funcFloatRightIconClickCallback\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"float-right-icon\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onFloatRightIconClicked\\\"]],[8],[0,\\\"\\\\n            \\\"],[6,\\\"i\\\"],[11,\\\"class\\\",[27,[\\\"material-icons \\\",[20,\\\"sFloatRightIconColor\\\"]]]],[8],[1,[20,\\\"sFloatRightIconName\\\"],false],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9],[0,\\\"\\\\n\\\\n\\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"form-inline\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"arrWeekItems\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"tabindex\\\",\\\"0\\\"],[11,\\\"class\\\",[27,[\\\"week-item waves-effect \\\",[26,\\\"if\\\",[[26,\\\"get\\\",[[21,1,[]],[22,[\\\"sOptionsSelectedKey\\\"]]],null],\\\"a24-primary-color-hue-1 waves-light\\\",\\\"grey lighten-2 waves-dark\\\"],null]]]],[11,\\\"onkeypress\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onItemSelected\\\",[21,1,[]]],null],null],[3,\\\"action\\\",[[21,0,[]],\\\"onItemSelected\\\",[21,1,[]]]],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"get\\\",[[21,1,[]],[22,[\\\"sOptionsLabelKey\\\"]]],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/input-form-week.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/input-number\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"q7ByymkG\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[26,\\\"input\\\",null,[[\\\"placeholder\\\",\\\"type\\\",\\\"id\\\",\\\"class\\\",\\\"value\\\"],[\\\"\\\",\\\"text\\\",[22,[\\\"_sInputId\\\"]],\\\"form-control\\\",[22,[\\\"_sValue\\\"]]]]],false],[0,\\\"\\\\n\\\"],[6,\\\"label\\\"],[11,\\\"for\\\",[27,[[20,\\\"_sInputId\\\"]]]],[8],[1,[20,\\\"sFieldName\\\"],false],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/input-number.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/input-text\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"OEN++M/d\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[26,\\\"input\\\",null,[[\\\"placeholder\\\",\\\"type\\\",\\\"id\\\",\\\"class\\\",\\\"value\\\"],[\\\"\\\",\\\"text\\\",[22,[\\\"_sInputId\\\"]],\\\"form-control\\\",[22,[\\\"sValue\\\"]]]]],false],[0,\\\"\\\\n\\\"],[6,\\\"label\\\"],[11,\\\"for\\\",[27,[[20,\\\"_sInputId\\\"]]]],[8],[1,[20,\\\"sFieldName\\\"],false],[9]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/input-text.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/line-item-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"7Ep9vtwP\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"display-inline-block\\\",[26,\\\"if\\\",[[22,[\\\"arrActions\\\"]],\\\" input-form-suggest-action\\\",\\\"\\\"],null]]]],[8],[0,\\\"\\\\n    \\\"],[1,[20,\\\"sOptionsLabel\\\"],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"arrActions\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"input-form-suggest-content-link\\\"],[11,\\\"onmousedown\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onActionClick\\\"],null],null],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"card-actions-component\\\",null,[[\\\"arrActionItems\\\"],[[22,[\\\"arrActions\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"input-form-suggest-content-link\\\"],[11,\\\"onmousedown\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onLinkAction\\\"],null],null],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"sOptionsLink\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sToolTipText\\\",\\\"sToolTipPosition\\\",\\\"sToolTipClass\\\",\\\"sIcon\\\"],[[26,\\\"lookup-string\\\",[\\\"navigateToSection\\\"],null],\\\"left\\\",\\\"a24-tooltip\\\",\\\"open_in_new\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/line-item-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/loader-blackout\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"+aca2RR1\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"bLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"loading-blackout\\\",[26,\\\"if\\\",[[22,[\\\"sBlackOutClass\\\"]],[26,\\\"concat\\\",[\\\" \\\",[22,[\\\"sBlackOutClass\\\"]]],null]],null]]]],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"loading-center\\\"],[8],[1,[20,\\\"loading-component\\\"],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/loader-blackout.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/loading-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"/hBMzonm\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"preloader-wrapper small active\\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"spinner-layer spinner-blue-only\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"circle-clipper left\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"circle\\\"],[8],[9],[0,\\\"\\\\n        \\\"],[9],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"gap-patch\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"circle\\\"],[8],[9],[0,\\\"\\\\n        \\\"],[9],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"circle-clipper right\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"circle\\\"],[8],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[9]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/loading-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/popup-modal\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"6+/SLlNq\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-modal-backdrop\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupBackdropClick\\\"]],[8],[9],[0,\\\"\\\\n\\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"modal-dialog\\\",[26,\\\"if\\\",[[22,[\\\"sModalSize\\\"]],[26,\\\"concat\\\",[\\\" \\\",[22,[\\\"sModalSize\\\"]]],null]],null]]]],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"modal-content padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[13,1],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bHasDefaultButtons\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"sCancelButtonText\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupConfirmationCancel\\\"]],[8],[1,[20,\\\"sCancelButtonText\\\"],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupConfirmationConfirm\\\"]],[8],[1,[20,\\\"sConfirmButtonText\\\"],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\"],[[22,[\\\"bLoading\\\"]]]]],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/popup-modal.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/popup-responsive-modal\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"MV3OeOV8\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-modal-backdrop\\\"],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onPopupBackdropClick\\\"],null],null],[8],[9],[0,\\\"\\\\n\\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"modal-dialog\\\",[26,\\\"if\\\",[[22,[\\\"bMobileView\\\"]],\\\" popup-responsive-mobile\\\"],null],[26,\\\"if\\\",[[22,[\\\"sModalSize\\\"]],[26,\\\"concat\\\",[\\\" \\\",[22,[\\\"sModalSize\\\"]]],null]],null]]]],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onPopupBackdropClick\\\"],null],null],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"modal-content\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\"],[[22,[\\\"bLoading\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[13,1,[[22,[\\\"bMobileView\\\"]]]],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/popup-responsive-modal.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/popup-trigger\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"qQulGUzD\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[6,\\\"a\\\"],[11,\\\"data-target\\\",[27,[\\\"#\\\",[20,\\\"sModalId\\\"]]]],[8],[13,1],[9]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/popup-trigger.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/progress-loader-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"sOO6lToT\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"loading-blackout d-flex justify-content-center\\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"loading-center\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"loading-text text-center padding-normal\\\"],[8],[1,[20,\\\"sLoaderText\\\"],false],[9],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"progress\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"progress-bar a24-primary-color-accent-force\\\"],[10,\\\"role\\\",\\\"progressbar\\\"],[11,\\\"style\\\",[20,\\\"_sProgressStyle\\\"],null],[11,\\\"aria-valuenow\\\",[27,[[20,\\\"iProgress\\\"]]]],[10,\\\"aria-valuemin\\\",\\\"0\\\"],[10,\\\"aria-valuemax\\\",\\\"100\\\"],[8],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/progress-loader-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/react-page-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"76zFgaIz\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"react-iframe-wrapper\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"iframe-component\\\",null,[[\\\"bFullscreen\\\",\\\"sIFrameUrl\\\",\\\"sAllowList\\\"],[true,[22,[\\\"_sIFrameFullUrl\\\"]],[22,[\\\"_sAllowList\\\"]]]]],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[1,[26,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"bDismissible\\\",\\\"onPopupResponsiveDismiss\\\"],[[22,[\\\"_bShowPopup\\\"]],false,false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupClose\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/react-page-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/react-page-datagrid-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"AP0E81mo\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"react-iframe-wrapper\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"iframe-component\\\",null,[[\\\"bFullscreen\\\",\\\"sIFrameUrl\\\",\\\"sAllowList\\\"],[true,[22,[\\\"_sIFrameFullUrl\\\"]],[22,[\\\"_sAllowList\\\"]]]]],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[1,[26,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"bDismissible\\\",\\\"onPopupResponsiveDismiss\\\"],[[22,[\\\"_bShowPopup\\\"]],false,false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupClose\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/react-page-datagrid-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/react-popup\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"1Bf7kwiF\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"react-iframe-wrapper\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"iframe-component\\\",null,[[\\\"bFullscreen\\\",\\\"sIFrameUrl\\\",\\\"sAllowList\\\"],[true,[22,[\\\"_sIFrameFullUrl\\\"]],[22,[\\\"_sAllowList\\\"]]]]],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[1,[26,\\\"popup-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"bDismissible\\\",\\\"bLoading\\\"],[[22,[\\\"bLoading\\\"]],false,false,true]]],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/react-popup.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/react-widget\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"4GValsTa\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[26,\\\"iframe-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"sAllowList\\\"],[[22,[\\\"_sIFrameFullUrl\\\"]],[22,[\\\"_sAllowList\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/react-widget.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/round-icon-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"LNO4MMoI\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bShowClickableState\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"waves-inception-component\\\",null,[[\\\"bLight\\\"],[[22,[\\\"bLightWaves\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"round-icon-content \\\",[20,\\\"sIconSizeClass\\\"],\\\" \\\",[20,\\\"sIconClass\\\"],\\\" \\\",[26,\\\"if\\\",[[22,[\\\"bDisabled\\\"]],\\\"round-icon-disabled\\\"],null]]]],[8],[0,\\\"\\\\n\\\"],[4,\\\"default-image-component\\\",null,[[\\\"sSrc\\\",\\\"sWidth\\\",\\\"sHeight\\\"],[[22,[\\\"sImageUrl\\\"]],\\\"100%\\\",\\\"100%\\\"]],{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"sLetter\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[20,\\\"sLetter\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"sIcon\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"i\\\"],[11,\\\"class\\\",[27,[[26,\\\"if\\\",[[22,[\\\"bOutlinedIcon\\\"]],\\\"material-icons-outlined\\\",\\\"material-icons\\\"],null]]]],[8],[1,[20,\\\"sIcon\\\"],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"sIconFa\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"i\\\"],[11,\\\"class\\\",[27,[\\\"fa \\\",[20,\\\"sIconFa\\\"]]]],[10,\\\"aria-hidden\\\",\\\"true\\\"],[8],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"_sIconSvgSafe\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[20,\\\"_sIconSvgSafe\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bShowNotificationBell\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"notification-bell\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"notification-bell-icon\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"i\\\"],[10,\\\"class\\\",\\\"material-icons\\\"],[8],[0,\\\"notifications\\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/round-icon-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/round-icon-header-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"+mhCPCCI\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"round-icon-header-component \\\",[26,\\\"if\\\",[[22,[\\\"bHasIcon\\\"]],[22,[\\\"sRoundButtonSize\\\"]],\\\"no-image\\\"],null],[26,\\\"if\\\",[[22,[\\\"bHasBlock\\\"]],\\\" has-yield\\\",\\\" no-yield\\\"],null],[26,\\\"if\\\",[[22,[\\\"bActionsSpecified\\\"]],\\\" has-actions\\\"],null]]]],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bMobileView\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"bActionsSpecified\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"top-heading-actions\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"card-actions-component\\\",null,[[\\\"arrActionItems\\\",\\\"objSpecialAction\\\",\\\"bShowDropdown\\\",\\\"bMobileView\\\"],[[22,[\\\"arrActionItems\\\"]],[22,[\\\"objSpecialAction\\\"]],[22,[\\\"bOverrideDropdown\\\"]],true]]],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[1,[26,\\\"horizontal-line-component\\\",null,[[\\\"sCustomClassName\\\"],[\\\"mobile-horizontal-line\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"bHasIcon\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"round-icon-header-component-image\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sRoundButtonSize\\\",\\\"sBackgroundClass\\\",\\\"sIconClass\\\",\\\"sIconSizeClass\\\",\\\"sIcon\\\",\\\"sIconFa\\\",\\\"sLetter\\\",\\\"sIconSvg\\\",\\\"sImageUrl\\\",\\\"bClickable\\\"],[[22,[\\\"sRoundButtonSize\\\"]],[22,[\\\"sIconColor\\\"]],[22,[\\\"sIconClass\\\"]],[22,[\\\"sIconSizeClass\\\"]],[22,[\\\"sIconName\\\"]],[22,[\\\"sIconFa\\\"]],[22,[\\\"sLetter\\\"]],[22,[\\\"sIconSvg\\\"]],[22,[\\\"sImageUrl\\\"]],false]]],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"round-icon-header-component-right\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"round-icon-header-component-header\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"heading-text \\\",[26,\\\"if\\\",[[22,[\\\"bEllipseHeader\\\"]],\\\"text-ellipse \\\",\\\"\\\"],null],[26,\\\"if\\\",[[22,[\\\"bHasIcon\\\"]],\\\"padding-left-small \\\"],null],[20,\\\"sHeaderSizeClass\\\"],[26,\\\"if\\\",[[26,\\\"if\\\",[[22,[\\\"bActionsSpecified\\\"]],[26,\\\"if\\\",[[22,[\\\"bMobileView\\\"]],false,true],null],false],null],[26,\\\"concat\\\",[\\\" \\\",[22,[\\\"_sActionsWidthClass\\\"]]],null]],null],[26,\\\"if\\\",[[22,[\\\"sHeaderClass\\\"]],[26,\\\"concat\\\",[\\\" \\\",[22,[\\\"sHeaderClass\\\"]]],null]],null]]]],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"funcCallback\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"cursor-clickable\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onCallbackClick\\\"]],[8],[0,\\\"\\\\n                        \\\"],[1,[20,\\\"sHeader\\\"],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[20,\\\"sHeader\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"            \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bActionsSpecified\\\"]]],null,{\\\"statements\\\":[[4,\\\"unless\\\",[[22,[\\\"bMobileView\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"heading-actions\\\"],[8],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"card-actions-component\\\",null,[[\\\"iVisibleActions\\\",\\\"arrActionItems\\\",\\\"objSpecialAction\\\",\\\"bShowDropdown\\\"],[[22,[\\\"_iVisibleActions\\\"]],[22,[\\\"arrActionItems\\\"]],[22,[\\\"objSpecialAction\\\"]],[22,[\\\"bOverrideDropdown\\\"]]]]],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bHasBlock\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"round-icon-header-component-yield\\\",[26,\\\"if\\\",[[26,\\\"if\\\",[[22,[\\\"bActionsSpecified\\\"]],[22,[\\\"bApplyPaddingToYield\\\"]],false],null],[26,\\\"concat\\\",[\\\" \\\",[22,[\\\"_sActionsWidthClass\\\"]]],null]],null],[26,\\\"if\\\",[[26,\\\"if\\\",[[22,[\\\"bHasIcon\\\"]],[22,[\\\"bApplyPaddingToYield\\\"]],false],null],\\\" icon-margin\\\"],null]]]],[8],[0,\\\"\\\\n                \\\"],[13,1],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/round-icon-header-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/saved-search-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"iDE4sDEp\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"saved-search-loader\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"saved-search-loader-position\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[20,\\\"loading-component\\\"],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"saved-search-input\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24ErrorInputParent md-form\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"input\\\"],[10,\\\"placeholder\\\",\\\"\\\"],[11,\\\"id\\\",[20,\\\"_sInputId\\\"],null],[10,\\\"name\\\",\\\"savedSearch\\\"],[10,\\\"class\\\",\\\"form-control\\\"],[11,\\\"tabindex\\\",[20,\\\"_sCustomTabIndex\\\"],null],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"openViewPopupAction\\\"],null],null],[10,\\\"type\\\",\\\"text\\\"],[8],[9],[0,\\\"\\\\n            \\\"],[6,\\\"label\\\"],[11,\\\"for\\\",[27,[[20,\\\"_sInputId\\\"]]]],[8],[0,\\\"\\\\n                Select Saved Search...\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"saved-search-round-icon\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bShowActions\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sToolTipText\\\",\\\"sToolTipPosition\\\",\\\"sIcon\\\",\\\"bDisabled\\\",\\\"onRoundIconClick\\\"],[[26,\\\"lookup-string\\\",[\\\"saveSearch\\\",[22,[\\\"_objEmberLibString\\\"]]],null],\\\"left\\\",\\\"save\\\",[26,\\\"if\\\",[[22,[\\\"_bShowSaveAction\\\"]],false,true],null],[26,\\\"action\\\",[[21,0,[]],\\\"saveActionClicked\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"],[1,[26,\\\"react-popup\\\",null,[[\\\"bShow\\\",\\\"sIFrameUrl\\\",\\\"bLoading\\\",\\\"objData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_bShowReactFilterIframe\\\"]],[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_bReactFilterPopupLoading\\\"]],[22,[\\\"_objReactPopupPostData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecieveReactFilterData\\\"],null]]]],false]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/saved-search-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/shadow-scroller\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"K1Vbt/iM\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bShowShadow\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"shadow-scroller-shadow\\\"],[8],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"shadow-scroller\\\"],[8],[0,\\\"\\\\n    \\\"],[13,1,[[21,0,[]]]],[0,\\\"\\\\n\\\"],[9]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/shadow-scroller.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/shareable-link\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"BlYm/xuJ\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"dropdown-trigger\\\",null,[[\\\"sDropdownContentId\\\"],[[22,[\\\"_sShareableLinkId\\\"]]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sIcon\\\",\\\"onRoundIconClick\\\",\\\"sToolTipText\\\",\\\"sToolTipPosition\\\"],[\\\"link\\\",[26,\\\"action\\\",[[21,0,[]],\\\"shareButtonClicked\\\"],null],[26,\\\"lookup-string\\\",[\\\"shareLink\\\"],null],[22,[\\\"sToolTipPosition\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"dropdown-content\\\",null,[[\\\"sAlign\\\",\\\"sDropdownContentId\\\",\\\"bShow\\\",\\\"bAutoShow\\\",\\\"a24DropdownBlockerClicked\\\"],[\\\"right\\\",[22,[\\\"_sShareableLinkId\\\"]],[22,[\\\"bShowOnFailure\\\"]],false,[26,\\\"action\\\",[[21,0,[]],\\\"closeShareDropdown\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"shareable-link-container\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"shareable-link-content\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"sValue\\\",\\\"iOrder\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\"],[[26,\\\"lookup-string\\\",[\\\"linkSharingOn\\\"],null],\\\"sShareLink\\\",[22,[\\\"_sCurrentUrl\\\"]],1,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/shareable-link.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/size-limit-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"9wjoL2UU\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-size-limit-component\\\"],[11,\\\"style\\\",[20,\\\"sStyleWidth\\\"],null],[8],[0,\\\"\\\\n    \\\"],[13,1],[0,\\\"\\\\n\\\"],[9]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/size-limit-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/snackbar-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"Jowi0M0l\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-snackbar-inner\\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"table\\\"],[10,\\\"class\\\",\\\"full-width\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"tr\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"td\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"a24-snackbar-message\\\",[26,\\\"if\\\",[[22,[\\\"_sAction\\\"]],\\\"\\\",\\\" padding-right-double\\\"],null]]]],[3,\\\"action\\\",[[21,0,[]],\\\"onDismissMessage\\\"]],[8],[0,\\\"\\\\n                    \\\"],[1,[20,\\\"_sMessage\\\"],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_sAction\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"td\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"a24-snackbar-action\\\",[26,\\\"if\\\",[[22,[\\\"_sActionTextClass\\\"]],[26,\\\"concat\\\",[\\\" \\\",[22,[\\\"_sActionTextClass\\\"]]],null]],null]]]],[3,\\\"action\\\",[[21,0,[]],\\\"onActionClicked\\\"]],[8],[0,\\\"\\\\n                        \\\"],[1,[20,\\\"_sAction\\\"],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[9]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/snackbar-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/stepper-item\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"hGOVUkPC\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[6,\\\"table\\\"],[10,\\\"class\\\",\\\"a24-stepper-item-table\\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"tbody\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"tr\\\"],[11,\\\"class\\\",[27,[\\\"stepper-item-row-header \\\",[26,\\\"if\\\",[[22,[\\\"bEnabled\\\"]],[26,\\\"unless\\\",[[22,[\\\"bSelected\\\"]],\\\"waves-effect waves-dark\\\"],null]],null]]]],[3,\\\"action\\\",[[21,0,[]],\\\"onLinkActionStepperItemClicked\\\"]],[8],[0,\\\"\\\\n            \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"stepper-item-row-header-left\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"stepper-item-row-header-circle\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bCompleted\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"i\\\"],[10,\\\"class\\\",\\\"material-icons font-sm\\\"],[8],[0,\\\"check\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"font-sm\\\"],[8],[1,[20,\\\"sStepNumber\\\"],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"stepper-item-row-header-right padding-right-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"stepper-item-row-header-title\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[20,\\\"sTitle\\\"],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"stepper-item-row-header-subtitle\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[20,\\\"sSubTitle\\\"],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n        \\\"],[6,\\\"tr\\\"],[10,\\\"class\\\",\\\"stepper-item-row-content\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"stepper-item-row-content-left position-relative\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"stepper-item-row-content-line\\\"],[8],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"stepper-item-row-content-right\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"stepper-item-row-content-data\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[[26,\\\"if\\\",[[22,[\\\"bSelected\\\"]],\\\"\\\",\\\"display-none\\\"],null]]]],[8],[0,\\\"\\\\n                        \\\"],[13,1],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/stepper-item.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/stepper-wrapper\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"Jm96DIRP\", \"block\": \"{\\\"symbols\\\":[\\\"sItemId\\\",\\\"objStep\\\",\\\"&default\\\"],\\\"statements\\\":[[6,\\\"table\\\"],[10,\\\"class\\\",\\\"a24-stepper-wrapper-table\\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"tbody\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"tr\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[26,\\\"-each-in\\\",[[22,[\\\"_objStepItems\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"td\\\"],[11,\\\"class\\\",[27,[\\\"stepper-wrapper-step \\\",[26,\\\"if\\\",[[21,2,[\\\"bEnabled\\\"]],\\\"waves-effect waves-dark\\\",\\\"is-disabled\\\"],null],\\\" \\\",[26,\\\"if\\\",[[21,2,[\\\"bCompleted\\\"]],\\\"is-completed\\\"],null],\\\"  \\\",[26,\\\"if\\\",[[21,2,[\\\"bSelected\\\"]],\\\"is-selected\\\"],null]]]],[11,\\\"style\\\",[20,\\\"_sStepStyle\\\"],null],[3,\\\"action\\\",[[21,0,[]],\\\"onStepperItemClicked\\\",[21,1,[]],[21,2,[]]]],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"table\\\"],[10,\\\"class\\\",\\\"stepper-wrapper-step-table\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"tbody\\\"],[8],[0,\\\"\\\\n                            \\\"],[6,\\\"tr\\\"],[10,\\\"class\\\",\\\"stepper-wrapper-step-row\\\"],[8],[0,\\\"\\\\n                                \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"stepper-wrapper-step-row-data-line-left\\\"],[8],[0,\\\"\\\\n                                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"stepper-wrapper-step-row-line-left\\\"],[8],[9],[0,\\\"\\\\n                                \\\"],[9],[0,\\\"\\\\n                                \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"stepper-wrapper-step-row-data-circle\\\"],[8],[0,\\\"\\\\n                                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"stepper-wrapper-step-row-circle\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[21,2,[\\\"bCompleted\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                            \\\"],[6,\\\"i\\\"],[10,\\\"class\\\",\\\"material-icons font-sm\\\"],[8],[0,\\\"check\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                                            \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"font-sm\\\"],[8],[1,[21,2,[\\\"sStepNumber\\\"]],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"                                    \\\"],[9],[0,\\\"\\\\n                                \\\"],[9],[0,\\\"\\\\n                                \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"stepper-wrapper-step-row-data-header\\\"],[8],[0,\\\"\\\\n                                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-left-normal\\\"],[8],[0,\\\"\\\\n                                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"stepper-wrapper-step-row-header\\\"],[8],[0,\\\"\\\\n                                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"stepper-wrapper-step-row-header-title\\\"],[8],[0,\\\"\\\\n                                                \\\"],[1,[21,2,[\\\"sTitle\\\"]],false],[0,\\\"\\\\n                                            \\\"],[9],[0,\\\"\\\\n                                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"stepper-wrapper-step-row-header-subtitle\\\"],[8],[0,\\\"\\\\n                                                \\\"],[1,[21,2,[\\\"sSubTitle\\\"]],false],[0,\\\"\\\\n                                            \\\"],[9],[0,\\\"\\\\n                                        \\\"],[9],[0,\\\"\\\\n                                    \\\"],[9],[0,\\\"\\\\n                                \\\"],[9],[0,\\\"\\\\n                                \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"stepper-wrapper-step-row-data-line-right\\\"],[8],[0,\\\"\\\\n                                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"stepper-wrapper-step-row-line-right\\\"],[8],[9],[0,\\\"\\\\n                                \\\"],[9],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1,2]},null],[0,\\\"        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[13,3,[[21,0,[]]]]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/stepper-wrapper.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/tag-component-shrink\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"Z5ffW/Dv\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[26,\\\"tag-component\\\",null,[[\\\"sTitle\\\",\\\"mValue\\\",\\\"sColor\\\",\\\"sActionIcon\\\",\\\"sActionIconColor\\\",\\\"bHasClear\\\",\\\"sClearColor\\\",\\\"onTagClicked\\\",\\\"onClearTag\\\"],[[22,[\\\"objData\\\",\\\"sTitle\\\"]],[22,[\\\"objData\\\",\\\"mValue\\\"]],[22,[\\\"objData\\\",\\\"sColor\\\"]],[22,[\\\"objData\\\",\\\"sActionIcon\\\"]],[22,[\\\"objData\\\",\\\"sActionIconColor\\\"]],[22,[\\\"objData\\\",\\\"bHasClear\\\"]],[22,[\\\"objData\\\",\\\"sClearColor\\\"]],[22,[\\\"objActions\\\",\\\"onTagClicked\\\"]],[22,[\\\"objActions\\\",\\\"onClearTag\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/tag-component-shrink.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/tag-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"nS084Rfc\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"a24-chip \\\",[20,\\\"sColor\\\"],\\\" \\\",[26,\\\"if\\\",[[22,[\\\"onTagClicked\\\"]],\\\" cursor-clickable\\\"],null],[26,\\\"if\\\",[[22,[\\\"sActionIcon\\\"]],\\\" a24-chip-with-action-icon\\\"],null],[26,\\\"if\\\",[[22,[\\\"bHasClear\\\"]],\\\"\\\",\\\" a24-chip-without-clear-icon\\\"],null]]]],[3,\\\"action\\\",[[21,0,[]],\\\"onTagClicked\\\",[22,[\\\"sTitle\\\"]],[22,[\\\"mValue\\\"]]]],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"sActionIcon\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"i\\\"],[11,\\\"class\\\",[27,[\\\"material-icons a24-chip-left-icon \\\",[20,\\\"sActionIconColor\\\"],[26,\\\"if\\\",[[22,[\\\"onTagClicked\\\"]],\\\"\\\",\\\" un-selectable-text\\\"],null]]]],[8],[1,[20,\\\"sActionIcon\\\"],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[1,[20,\\\"sTitle\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bHasClear\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"i\\\"],[11,\\\"class\\\",[27,[\\\"material-icons cursor-clickable \\\",[20,\\\"sClearColor\\\"]]]],[3,\\\"action\\\",[[21,0,[]],\\\"onClearTag\\\",[22,[\\\"sTitle\\\"]],[22,[\\\"mValue\\\"]]],[[\\\"bubbles\\\"],[false]]],[8],[0,\\\"cancel\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/tag-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/timeline-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"LbnEFzvW\", \"block\": \"{\\\"symbols\\\":[\\\"objItem\\\"],\\\"statements\\\":[[6,\\\"table\\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"tbody\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"tr\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"timeline-header-date\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"font-sm\\\"],[8],[1,[20,\\\"sEndText\\\"],false],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"timeline-header-date-border\\\"],[8],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"timeline-header-text\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[20,\\\"sHeader\\\"],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"arrData\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"tr\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"timeline-row-data-line\\\"],[8],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"timeline-row-data-circle \\\",[21,1,[\\\"sDotColor\\\"]]]]],[8],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"td\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal\\\"],[8],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"component\\\",[[21,1,[\\\"sComponent\\\"]]],[[\\\"objData\\\",\\\"objActions\\\"],[[21,1,[\\\"objData\\\"]],[21,1,[\\\"objActions\\\"]]]]],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n        \\\"],[6,\\\"tr\\\"],[10,\\\"class\\\",\\\"timeline-footer\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bDisplayLoadMore\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"bHasMore\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"timeline-footer-line\\\"],[8],[9],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                    \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"text-center\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bMoreLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[1,[20,\\\"loading-component\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button-outlined waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onSeeMore\\\"]],[8],[0,\\\"\\\\n                                \\\"],[1,[26,\\\"lookup-string\\\",[\\\"seeMore\\\",[22,[\\\"_objStringsEmberLibService\\\"]]],null],false],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"timeline-footer-line-no-more\\\"],[8],[9],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"timeline-footer-line-bar\\\"],[8],[9],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bHasNoData\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n                            \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"timeline-footer-no-data \\\",[26,\\\"if\\\",[[22,[\\\"sNoDataText\\\"]],\\\"\\\",\\\"no-data\\\"],null]]]],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"sNoDataText\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                    \\\"],[1,[20,\\\"sNoDataText\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                                    \\\"],[1,[26,\\\"lookup-string\\\",[\\\"noData\\\"],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"                            \\\"],[9],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"timeline-footer-line-no-more\\\"],[8],[9],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"timeline-footer-line-bar\\\"],[8],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bHasNoData\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"timeline-footer-no-data \\\",[26,\\\"if\\\",[[22,[\\\"sNoDataText\\\"]],\\\"\\\",\\\"no-data\\\"],null]]]],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"sNoDataText\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[1,[20,\\\"sNoDataText\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                                \\\"],[1,[26,\\\"lookup-string\\\",[\\\"noData\\\"],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"                        \\\"],[9],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[9]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/timeline-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/view-edit-section-content\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"ScwZxAl+\", \"block\": \"{\\\"symbols\\\":[\\\"objGroup\\\",\\\"iIndex\\\",\\\"objField\\\"],\\\"statements\\\":[[4,\\\"each\\\",[[22,[\\\"arrData\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[21,2,[]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[20,\\\"horizontal-line-component\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[21,1,[\\\"sSubHeader\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-small\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"sHeaderSizeClass\\\",\\\"class\\\"],[[21,1,[\\\"sSubHeader\\\"]],\\\"heading-small\\\",[21,1,[\\\"sSubHeaderClass\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[6,\\\"table\\\"],[10,\\\"class\\\",\\\"view-edit-section-content-table a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[21,1,[\\\"arrItems\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[26,\\\"if\\\",[[21,3,[\\\"bHideEmpty\\\"]],[21,3,[\\\"sValue\\\"]],true],null]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"tr\\\"],[10,\\\"class\\\",\\\"view-edit-section-content-table-row\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"view-edit-section-content-table-cell-label\\\"],[8],[0,\\\"\\\\n                        \\\"],[1,[21,3,[\\\"sLabel\\\"]],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                    \\\"],[6,\\\"td\\\"],[11,\\\"class\\\",[27,[\\\"view-edit-section-content-table-cell-value\\\",[26,\\\"if\\\",[[21,3,[\\\"sStyleName\\\"]],[26,\\\"concat\\\",[\\\" \\\",[21,3,[\\\"sStyleName\\\"]]],null],\\\"\\\"],null]]]],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[21,3,[\\\"bText\\\"]]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[1,[26,\\\"if\\\",[[21,3,[\\\"sValue\\\"]],[21,3,[\\\"sValue\\\"]],[22,[\\\"_sEmptyValue\\\"]]],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[21,3,[\\\"bDate\\\"]]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[1,[26,\\\"if\\\",[[21,3,[\\\"sValue\\\"]],[21,3,[\\\"sValue\\\"]],[22,[\\\"_sEmptyValue\\\"]]],null],false],[0,\\\"\\\\n                        \\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"                    \\\"],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[3]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1,2]},{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"view-edit-section-content-no-data\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"noData\\\"],null],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/view-edit-section-content.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/view-more-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"FIexEWZf\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bShouldViewMore\\\"]]],null,{\\\"statements\\\":[[4,\\\"collapse-section-component\\\",null,[[\\\"sCollapseGroupParent\\\",\\\"sCollapseSectionId\\\",\\\"bExpanded\\\",\\\"class\\\",\\\"onCollapseExpandStart\\\",\\\"onCollapseExpandEnd\\\",\\\"onCollapseCollapseStart\\\",\\\"onCollapseCollapseEnd\\\"],[[22,[\\\"sParentComponentId\\\"]],[22,[\\\"_sItemId\\\"]],[22,[\\\"bExpanded\\\"]],\\\"view-more-section\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onCollapseExpandStart\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onCollapseExpandEnd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onCollapseCollapseStart\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onCollapseCollapseEnd\\\"],null]]],{\\\"statements\\\":[[0,\\\"        \\\"],[13,1],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bDisplayFadeOutDiv\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"fading-effect\\\"],[8],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[4,\\\"collapse-trigger-component\\\",null,[[\\\"sCollapseSectionId\\\",\\\"class\\\"],[[22,[\\\"_sItemId\\\"]],\\\"view-more-trigger padding-left-normal-minus padding-right-normal-minus\\\"]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"view-more-trigger-heading padding-normal\\\"],[8],[1,[20,\\\"_sViewMoreLabel\\\"],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"bDisplayHorizRule\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"horizontal-line-component\\\",null,[[\\\"sCustomClassName\\\"],[\\\"padding-left-normal-minus padding-right-normal-minus\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[13,1],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/view-more-component.hbs\" } });\n});","define(\"a24-ember-lib/templates/components/waves-inception-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"PsdwZQOn\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-waves-inception-div\\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[[26,\\\"if\\\",[[22,[\\\"bLight\\\"]],\\\"waves-effect waves-light\\\",\\\"waves-effect\\\"],null]]]],[8],[9],[0,\\\"\\\\n\\\"],[9]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-lib/templates/components/waves-inception-component.hbs\" } });\n});","define(\"a24-ember-lookup/helpers/lookup-constant\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Helper.extend({\n        _objA24Constants: Ember.inject.service(\"a24-constants\"),\n\n        compute: function compute(arrParams) {\n            var sKey = arrParams[0];\n            var objService = arrParams[1] || this.get(\"_objA24Constants\");\n\n            return objService[sKey];\n        }\n    });\n});","define(\"a24-ember-lookup/helpers/lookup-enum-list\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Helper.extend({\n        _objA24Enums: Ember.inject.service(\"a24-enums\"),\n\n        compute: function compute(arrParams) {\n            var sKey = arrParams[0];\n            var objService = arrParams[1] || this.get(\"_objA24Enums\");\n\n            return objService.getList(sKey);\n        }\n    });\n});","define(\"a24-ember-lookup/helpers/lookup-localised-string\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Helper.extend({\n        _objA24Strings: Ember.inject.service(\"a24-strings\"),\n\n        compute: function compute(arrParams) {\n            var sKey = arrParams[0];\n            var sCountryCode = arrParams[1];\n            var objService = arrParams[2] || this.get(\"_objA24Strings\");\n\n            return objService.getLocalisedString(sKey, sCountryCode.toLowerCase());\n        }\n    });\n});","define(\"a24-ember-lookup/helpers/lookup-string-html\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Helper.extend({\n        _objA24Strings: Ember.inject.service(\"a24-strings\"),\n\n        compute: function compute(arrParams) {\n            // Pull service or default\n            var objService = arrParams[1] || this.get(\"_objA24Strings\");\n\n            // Remove service argument\n            var arrCopiedParams = Ember.copy(arrParams);\n            arrCopiedParams.splice(1, 1);\n\n            return objService.getHTMLTokenString.apply(objService, arrCopiedParams);\n        }\n    });\n});","define(\"a24-ember-lookup/helpers/lookup-string-token\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Helper.extend({\n        _objA24Strings: Ember.inject.service(\"a24-strings\"),\n\n        compute: function compute(arrParams) {\n            // Pull service or default\n            var objService = arrParams[1] || this.get(\"_objA24Strings\");\n\n            // Remove service argument\n            var arrCopiedParams = Ember.copy(arrParams);\n            arrCopiedParams.splice(1, 1);\n\n            return objService.getTokenString.apply(objService, arrCopiedParams);\n        }\n    });\n});","define(\"a24-ember-lookup/helpers/lookup-string\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Helper.extend({\n        _objA24Strings: Ember.inject.service(\"a24-strings\"),\n\n        compute: function compute(arrParams) {\n            var sKey = arrParams[0];\n            var objService = arrParams[1] || this.get(\"_objA24Strings\");\n\n            return objService.getString(sKey);\n        }\n    });\n});","define(\"a24-ember-lookup/services/a24-constants-base\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Service.extend({\n    /**\n     * This file is an abstraction of any constant lookup files.\n     * This file is currently empty as there is no shared behaviour between constant files\n     */\n  });\n});","define(\"a24-ember-lookup/services/a24-constants\", [\"exports\", \"a24-ember-lookup/services/a24-constants-base\"], function (exports, _a24ConstantsBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _a24ConstantsBase.default.extend({\n        // This will one day contain a truly abstract set of constants.\n    });\n});","define(\"a24-ember-lookup/services/a24-enums-base\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        /**\n         * This function will get you the backend equivalent when you have the frontend value\n         *\n         * @param sEnum - The name of the enum to use\n         * @param sValue - The display value\n         * @param sDefault - The default to return if the desired one was not found\n         * @param bReturnEnumListItem - Returns the enum item as a list item\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  22 January 2018\n         *\n         * @return The backend value that you can send to api\n         */\n        getBackendValue: function getBackendValue(sEnum, sValue, sDefault, bReturnEnumListItem) {\n            return this.getCustomValue(sEnum, \"frontend\", sValue, \"backend\", sDefault, bReturnEnumListItem);\n        },\n\n        /**\n         * This function will get you the frontend equivalent when you have the api value\n         *\n         * @param sEnum - The name of the enum to use\n         * @param sValue - The value from the api\n         * @param sDefault - The default to return if the desired one was not found\n         * @param bReturnEnumListItem - Returns the enum item as a list item\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  22 January 2018\n         *\n         * @return The frontend value that you can display on the UI\n         */\n        getFrontendValue: function getFrontendValue(sEnum, sValue, sDefault, bReturnEnumListItem) {\n            return this.getCustomValue(sEnum, \"backend\", sValue, \"frontend\", sDefault, bReturnEnumListItem);\n        },\n\n        /**\n         * This function will get you the value from a enum based on the search and return key you want\n         *\n         * @param sEnum - The name of the enum to use\n         * @param sSearchKey - The key to compare the value with\n         * @param sSearchValue - The value to compare on the sSearchKey\n         * @param sReturnKey - The key of the property value you want to be returned\n         * @param sDefault - The default to return if the desired one was not found\n         * @param bReturnEnumListItem - Returns the enum item as a list item\n         *\n         * @author Ruan Naude <ruan.naude@gmail.com>\n         * @since  24 July 2020\n         *\n         * @return The custom key value matching the search\n         */\n        getCustomValue: function getCustomValue(sEnum, sSearchKey, sSearchValue, sReturnKey, sDefault, bReturnEnumListItem) {\n            var objEnum = this[sEnum];\n\n            if (a24Core.isEmpty(objEnum)) {\n                return null;\n            }\n\n            var arrKeys = Object.keys(objEnum);\n            var mDefaultReturn = null;\n            for (var i = 0; i < arrKeys.length; i++) {\n                if (objEnum[arrKeys[i]][sSearchKey] === sSearchValue) {\n                    if (bReturnEnumListItem) {\n                        return this._getListItemFromEnum(objEnum[arrKeys[i]]);\n                    } else {\n                        return objEnum[arrKeys[i]][sReturnKey];\n                    }\n                } else if (!a24Core.isEmpty(sDefault) && objEnum[arrKeys[i]][sSearchKey] === sDefault) {\n                    if (bReturnEnumListItem) {\n                        mDefaultReturn = this._getListItemFromEnum(objEnum[arrKeys[i]]);\n                    } else {\n                        mDefaultReturn = objEnum[arrKeys[i]][sReturnKey];\n                    }\n                }\n            }\n\n            return mDefaultReturn;\n        },\n\n        /**\n         * This function will get you dropdown friendly list of items that are supported\n         *\n         * @param sEnum - The name of the enum to use\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  22 January 2018\n         *\n         * @return This method will return a dropdown key value list\n         */\n        getList: function getList(sEnum) {\n            var _this = this;\n\n            var objEnum = this[sEnum];\n\n            if (a24Core.isEmpty(objEnum)) {\n                return null;\n            }\n\n            return Object.keys(objEnum).map(function (sKey) {\n                return _this._getListItemFromEnum(objEnum[sKey]);\n            });\n        },\n\n        _getListItemFromEnum: function _getListItemFromEnum(objEnumItem) {\n            var obListItem = {\n                sValue: objEnumItem.backend,\n                sLabel: objEnumItem.frontend\n            };\n            Object.keys(objEnumItem).map(function (sKey) {\n                if (sKey !== \"backend\" && sKey !== \"frontend\") {\n                    obListItem[sKey] = objEnumItem[sKey];\n                }\n            });\n            return obListItem;\n        }\n    });\n});","define(\"a24-ember-lookup/services/a24-enums\", [\"exports\", \"a24-ember-lookup/services/a24-enums-base\"], function (exports, _a24EnumsBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _a24EnumsBase.default.extend({\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objStrings = this.get(\"_objStringsService\");\n\n            this.set(\"emailTypes\", {\n                \"HOME\": {\n                    \"backend\": \"home\",\n                    \"frontend\": objStrings.getString(\"home\")\n                },\n                \"OTHER\": {\n                    \"backend\": \"other\",\n                    \"frontend\": objStrings.getString(\"other\")\n                },\n                \"WORK\": {\n                    \"backend\": \"work\",\n                    \"frontend\": objStrings.getString(\"work\")\n                }\n            });\n\n            this.set(\"gender\", {\n                \"MALE\": {\n                    \"backend\": \"male\",\n                    \"frontend\": objStrings.getString(\"male\")\n                },\n                \"FEMALE\": {\n                    \"backend\": \"female\",\n                    \"frontend\": objStrings.getString(\"female\")\n                },\n                \"OTHER\": {\n                    \"backend\": \"other\",\n                    \"frontend\": objStrings.getString(\"other\")\n                }\n            });\n\n            this.set(\"disabled\", {\n                \"YES\": {\n                    \"backend\": \"yes\",\n                    \"frontend\": objStrings.getString(\"yes\")\n                },\n                \"NO\": {\n                    \"backend\": \"no\",\n                    \"frontend\": objStrings.getString(\"no\")\n                }\n            });\n\n            this.set(\"yesNo\", {\n                \"YES\": {\n                    \"backend\": \"Yes\",\n                    \"frontend\": objStrings.getString(\"yes\")\n                },\n                \"NO\": {\n                    \"backend\": \"No\",\n                    \"frontend\": objStrings.getString(\"no\")\n                }\n            });\n\n            this.set(\"country\", {\n                \"AFGHANISTAN\": {\n                    \"backend\": \"AF\",\n                    \"frontend\": \"Afghanistan\",\n                    \"code\": \"004\"\n                },\n                \"ALBANIA\": {\n                    \"backend\": \"AL\",\n                    \"frontend\": \"Albania\",\n                    \"code\": \"008\"\n                },\n                \"ALGERIA\": {\n                    \"backend\": \"DZ\",\n                    \"frontend\": \"Algeria\",\n                    \"code\": \"012\"\n                },\n                \"AMERICAN_SAMOA\": {\n                    \"backend\": \"AS\",\n                    \"frontend\": \"American Samoa\",\n                    \"code\": \"016\"\n                },\n                \"ANDORRA\": {\n                    \"backend\": \"AD\",\n                    \"frontend\": \"Andorra\",\n                    \"code\": \"020\"\n                },\n                \"ANGOLA\": {\n                    \"backend\": \"AO\",\n                    \"frontend\": \"Angola\",\n                    \"code\": \"024\"\n                },\n                \"ANGUILLA\": {\n                    \"backend\": \"AI\",\n                    \"frontend\": \"Anguilla\",\n                    \"code\": \"660\"\n                },\n                \"ANTARCTICA\": {\n                    \"backend\": \"AQ\",\n                    \"frontend\": \"Antarctica\",\n                    \"code\": \"010\"\n                },\n                \"ANTIGUA_AND_BARBUDA\": {\n                    \"backend\": \"AG\",\n                    \"frontend\": \"Antigua and Barbuda\",\n                    \"code\": \"028\"\n                },\n                \"ARGENTINA\": {\n                    \"backend\": \"AR\",\n                    \"frontend\": \"Argentina\",\n                    \"code\": \"032\"\n                },\n                \"ARMENIA\": {\n                    \"backend\": \"AM\",\n                    \"frontend\": \"Armenia\",\n                    \"code\": \"051\"\n                },\n                \"ARUBA\": {\n                    \"backend\": \"AW\",\n                    \"frontend\": \"Aruba\",\n                    \"code\": \"533\"\n                },\n                \"AUSTRALIA\": {\n                    \"backend\": \"AU\",\n                    \"frontend\": \"Australia\",\n                    \"code\": \"036\"\n                },\n                \"AUSTRIA\": {\n                    \"backend\": \"AT\",\n                    \"frontend\": \"Austria\",\n                    \"code\": \"040\"\n                },\n                \"AZERBAIJAN\": {\n                    \"backend\": \"AZ\",\n                    \"frontend\": \"Azerbaijan\",\n                    \"code\": \"031\"\n                },\n                \"BAHAMAS\": {\n                    \"backend\": \"BS\",\n                    \"frontend\": \"Bahamas\",\n                    \"code\": \"044\"\n                },\n                \"BAHRAIN\": {\n                    \"backend\": \"BH\",\n                    \"frontend\": \"Bahrain\",\n                    \"code\": \"048\"\n                },\n                \"BANGLADESH\": {\n                    \"backend\": \"BD\",\n                    \"frontend\": \"Bangladesh\",\n                    \"code\": \"050\"\n                },\n                \"BARBADOS\": {\n                    \"backend\": \"BB\",\n                    \"frontend\": \"Barbados\",\n                    \"code\": \"052\"\n                },\n                \"BELARUS\": {\n                    \"backend\": \"BY\",\n                    \"frontend\": \"Belarus\",\n                    \"code\": \"112\"\n                },\n                \"BELGIUM\": {\n                    \"backend\": \"BE\",\n                    \"frontend\": \"Belgium\",\n                    \"code\": \"056\"\n                },\n                \"BELIZE\": {\n                    \"backend\": \"BZ\",\n                    \"frontend\": \"Belize\",\n                    \"code\": \"084\"\n                },\n                \"BENIN\": {\n                    \"backend\": \"BJ\",\n                    \"frontend\": \"Benin\",\n                    \"code\": \"204\"\n                },\n                \"BERMUDA\": {\n                    \"backend\": \"BM\",\n                    \"frontend\": \"Bermuda\",\n                    \"code\": \"060\"\n                },\n                \"BHUTAN\": {\n                    \"backend\": \"BT\",\n                    \"frontend\": \"Bhutan\",\n                    \"code\": \"064\"\n                },\n                \"BOLIVIA\": {\n                    \"backend\": \"BO\",\n                    \"frontend\": \"Bolivia\",\n                    \"code\": \"068\"\n                },\n                \"BOSNIA_AND_HERZEGOVINA\": {\n                    \"backend\": \"BA\",\n                    \"frontend\": \"Bosnia and Herzegovina\",\n                    \"code\": \"070\"\n                },\n                \"BOTSWANA\": {\n                    \"backend\": \"BW\",\n                    \"frontend\": \"Botswana\",\n                    \"code\": \"072\"\n                },\n                \"BOUVET_ISLAND\": {\n                    \"backend\": \"BV\",\n                    \"frontend\": \"Bouvet Island\",\n                    \"code\": \"074\"\n                },\n                \"BRAZIL\": {\n                    \"backend\": \"BR\",\n                    \"frontend\": \"Brazil\",\n                    \"code\": \"076\"\n                },\n                \"BRITISH_INDIAN_OCEAN_TERRITORY\": {\n                    \"backend\": \"IO\",\n                    \"frontend\": \"British Indian Ocean Territory\",\n                    \"code\": \"086\"\n                },\n                \"BRUNEI_DARUSSALAM\": {\n                    \"backend\": \"BN\",\n                    \"frontend\": \"Brunei Darussalam\",\n                    \"code\": \"096\"\n                },\n                \"BULGARIA\": {\n                    \"backend\": \"BG\",\n                    \"frontend\": \"Bulgaria\",\n                    \"code\": \"100\"\n                },\n                \"BURKINA_FASO\": {\n                    \"backend\": \"BF\",\n                    \"frontend\": \"Burkina Faso\",\n                    \"code\": \"854\"\n                },\n                \"BURUNDI\": {\n                    \"backend\": \"BI\",\n                    \"frontend\": \"Burundi\",\n                    \"code\": \"108\"\n                },\n                \"CAMBODIA\": {\n                    \"backend\": \"KH\",\n                    \"frontend\": \"Cambodia\",\n                    \"code\": \"116\"\n                },\n                \"CAMEROON\": {\n                    \"backend\": \"CM\",\n                    \"frontend\": \"Cameroon\",\n                    \"code\": \"120\"\n                },\n                \"CANADA\": {\n                    \"backend\": \"CA\",\n                    \"frontend\": \"Canada\",\n                    \"code\": \"124\"\n                },\n                \"CAPE_VERDE\": {\n                    \"backend\": \"CV\",\n                    \"frontend\": \"Cape Verde\",\n                    \"code\": \"132\"\n                },\n                \"CAYMAN_ISLANDS\": {\n                    \"backend\": \"KY\",\n                    \"frontend\": \"Cayman Islands\",\n                    \"code\": \"136\"\n                },\n                \"CENTRAL_AFRICAN_REPUBLIC\": {\n                    \"backend\": \"CF\",\n                    \"frontend\": \"Central African Republic\",\n                    \"code\": \"140\"\n                },\n                \"CHAD\": {\n                    \"backend\": \"TD\",\n                    \"frontend\": \"Chad\",\n                    \"code\": \"148\"\n                },\n                \"CHILE\": {\n                    \"backend\": \"CL\",\n                    \"frontend\": \"Chile\",\n                    \"code\": \"152\"\n                },\n                \"CHINA\": {\n                    \"backend\": \"CN\",\n                    \"frontend\": \"China\",\n                    \"code\": \"156\"\n                },\n                \"CHRISTMAS_ISLAND\": {\n                    \"backend\": \"CX\",\n                    \"frontend\": \"Christmas Island\",\n                    \"code\": \"162\"\n                },\n                \"COCOS_KEELING_ISLANDS\": {\n                    \"backend\": \"CC\",\n                    \"frontend\": \"Cocos (Keeling) Islands\",\n                    \"code\": \"166\"\n                },\n                \"COLOMBIA\": {\n                    \"backend\": \"CO\",\n                    \"frontend\": \"Colombia\",\n                    \"code\": \"170\"\n                },\n                \"COMOROS\": {\n                    \"backend\": \"KM\",\n                    \"frontend\": \"Comoros\",\n                    \"code\": \"174\"\n                },\n                \"CONGO\": {\n                    \"backend\": \"CG\",\n                    \"frontend\": \"Congo\",\n                    \"code\": \"178\"\n                },\n                \"CONGO_THE_DEMOCRATIC_REPUBLIC_OF_THE\": {\n                    \"backend\": \"CD\",\n                    \"frontend\": \"Congo, The Democratic Republic of the\",\n                    \"code\": \"180\"\n                },\n                \"COOK_ISLANDS\": {\n                    \"backend\": \"CK\",\n                    \"frontend\": \"Cook Islands\",\n                    \"code\": \"184\"\n                },\n                \"COSTA_RICA\": {\n                    \"backend\": \"CR\",\n                    \"frontend\": \"Costa Rica\",\n                    \"code\": \"188\"\n                },\n                \"COTE_D.IVOIRE\": {\n                    \"backend\": \"CI\",\n                    \"frontend\": \"Cote D.Ivoire\",\n                    \"code\": \"384\"\n                },\n                \"CROATIA\": {\n                    \"backend\": \"HR\",\n                    \"frontend\": \"Croatia\",\n                    \"code\": \"191\"\n                },\n                \"CUBA\": {\n                    \"backend\": \"CU\",\n                    \"frontend\": \"Cuba\",\n                    \"code\": \"192\"\n                },\n                \"CYPRUS\": {\n                    \"backend\": \"CY\",\n                    \"frontend\": \"Cyprus\",\n                    \"code\": \"196\"\n                },\n                \"CZECH_REPUBLIC\": {\n                    \"backend\": \"CZ\",\n                    \"frontend\": \"Czech Republic\",\n                    \"code\": \"203\"\n                },\n                \"DENMARK\": {\n                    \"backend\": \"DK\",\n                    \"frontend\": \"Denmark\",\n                    \"code\": \"208\"\n                },\n                \"DJIBOUTI\": {\n                    \"backend\": \"DJ\",\n                    \"frontend\": \"Djibouti\",\n                    \"code\": \"262\"\n                },\n                \"DOMINICA\": {\n                    \"backend\": \"DM\",\n                    \"frontend\": \"Dominica\",\n                    \"code\": \"212\"\n                },\n                \"DOMINICAN_REPUBLIC\": {\n                    \"backend\": \"DO\",\n                    \"frontend\": \"Dominican Republic\",\n                    \"code\": \"214\"\n                },\n                \"EAST_TIMOR\": {\n                    \"backend\": \"TP\",\n                    \"frontend\": \"East Timor\"\n                },\n                \"ECUADOR\": {\n                    \"backend\": \"EC\",\n                    \"frontend\": \"Ecuador\",\n                    \"code\": \"218\"\n                },\n                \"EGYPT\": {\n                    \"backend\": \"EG\",\n                    \"frontend\": \"Egypt\",\n                    \"code\": \"818\"\n                },\n                \"EL_SALVADOR\": {\n                    \"backend\": \"SV\",\n                    \"frontend\": \"El Salvador\",\n                    \"code\": \"222\"\n                },\n                \"EQUATORIAL_GUINEA\": {\n                    \"backend\": \"GQ\",\n                    \"frontend\": \"Equatorial Guinea\",\n                    \"code\": \"226\"\n                },\n                \"ERITREA\": {\n                    \"backend\": \"ER\",\n                    \"frontend\": \"Eritrea\",\n                    \"code\": \"232\"\n                },\n                \"ESTONIA\": {\n                    \"backend\": \"EE\",\n                    \"frontend\": \"Estonia\",\n                    \"code\": \"233\"\n                },\n                \"ETHIOPIA\": {\n                    \"backend\": \"ET\",\n                    \"frontend\": \"Ethiopia\",\n                    \"code\": \"231\"\n                },\n                \"FALKLAND_ISLANDS_MALVINAS\": {\n                    \"backend\": \"FK\",\n                    \"frontend\": \"Falkland Islands (Malvinas)\",\n                    \"code\": \"238\"\n                },\n                \"FAROE_ISLANDS\": {\n                    \"backend\": \"FO\",\n                    \"frontend\": \"Faroe Islands\",\n                    \"code\": \"234\"\n                },\n                \"FIJI\": {\n                    \"backend\": \"FJ\",\n                    \"frontend\": \"Fiji\",\n                    \"code\": \"242\"\n                },\n                \"FINLAND\": {\n                    \"backend\": \"FI\",\n                    \"frontend\": \"Finland\",\n                    \"code\": \"246\"\n                },\n                \"FRANCE\": {\n                    \"backend\": \"FR\",\n                    \"frontend\": \"France\",\n                    \"code\": \"250\"\n                },\n                \"FRENCH_GUIANA\": {\n                    \"backend\": \"GF\",\n                    \"frontend\": \"French Guiana\",\n                    \"code\": \"254\"\n                },\n                \"FRENCH_POLYNESIA\": {\n                    \"backend\": \"PF\",\n                    \"frontend\": \"French Polynesia\",\n                    \"code\": \"258\"\n                },\n                \"FRENCH_SOUTHERN_TERRITORIES\": {\n                    \"backend\": \"TF\",\n                    \"frontend\": \"French Southern Territories\",\n                    \"code\": \"260\"\n                },\n                \"GABON\": {\n                    \"backend\": \"GA\",\n                    \"frontend\": \"Gabon\",\n                    \"code\": \"266\"\n                },\n                \"GAMBIA\": {\n                    \"backend\": \"GM\",\n                    \"frontend\": \"Gambia\",\n                    \"code\": \"270\"\n                },\n                \"GEORGIA\": {\n                    \"backend\": \"GE\",\n                    \"frontend\": \"Georgia\",\n                    \"code\": \"268\"\n                },\n                \"GERMANY\": {\n                    \"backend\": \"DE\",\n                    \"frontend\": \"Germany\",\n                    \"code\": \"276\"\n                },\n                \"GHANA\": {\n                    \"backend\": \"GH\",\n                    \"frontend\": \"Ghana\",\n                    \"code\": \"288\"\n                },\n                \"GIBRALTAR\": {\n                    \"backend\": \"GI\",\n                    \"frontend\": \"Gibraltar\",\n                    \"code\": \"292\"\n                },\n                \"GREECE\": {\n                    \"backend\": \"GR\",\n                    \"frontend\": \"Greece\",\n                    \"code\": \"300\"\n                },\n                \"GREENLAND\": {\n                    \"backend\": \"GL\",\n                    \"frontend\": \"Greenland\",\n                    \"code\": \"304\"\n                },\n                \"GRENADA\": {\n                    \"backend\": \"GD\",\n                    \"frontend\": \"Grenada\",\n                    \"code\": \"308\"\n                },\n                \"GUADELOUPE\": {\n                    \"backend\": \"GP\",\n                    \"frontend\": \"Guadeloupe\",\n                    \"code\": \"312\"\n                },\n                \"GUAM\": {\n                    \"backend\": \"GU\",\n                    \"frontend\": \"Guam\",\n                    \"code\": \"316\"\n                },\n                \"GUATEMALA\": {\n                    \"backend\": \"GT\",\n                    \"frontend\": \"Guatemala\",\n                    \"code\": \"320\"\n                },\n                \"GUINEA\": {\n                    \"backend\": \"GN\",\n                    \"frontend\": \"Guinea\",\n                    \"code\": \"324\"\n                },\n                \"GUINEA_BISSAU\": {\n                    \"backend\": \"GW\",\n                    \"frontend\": \"Guinea-Bissau\",\n                    \"code\": \"624\"\n                },\n                \"GUYANA\": {\n                    \"backend\": \"GY\",\n                    \"frontend\": \"Guyana\",\n                    \"code\": \"328\"\n                },\n                \"HAITI\": {\n                    \"backend\": \"HT\",\n                    \"frontend\": \"Haiti\",\n                    \"code\": \"332\"\n                },\n                \"HEARD_ISLAND_AND_MCDONALD_ISLANDS\": {\n                    \"backend\": \"HM\",\n                    \"frontend\": \"Heard Island and McDonald Islands\",\n                    \"code\": \"334\"\n                },\n                \"HOLY_SEE_VATICAN_CITY_STATE\": {\n                    \"backend\": \"VA\",\n                    \"frontend\": \"Holy See (Vatican City State)\",\n                    \"code\": \"336\"\n                },\n                \"HONDURAS\": {\n                    \"backend\": \"HN\",\n                    \"frontend\": \"Honduras\",\n                    \"code\": \"340\"\n                },\n                \"HONG_KONG\": {\n                    \"backend\": \"HK\",\n                    \"frontend\": \"Hong Kong\",\n                    \"code\": \"344\"\n                },\n                \"HUNGARY\": {\n                    \"backend\": \"HU\",\n                    \"frontend\": \"Hungary\",\n                    \"code\": \"348\"\n                },\n                \"ICELAND\": {\n                    \"backend\": \"IS\",\n                    \"frontend\": \"Iceland\",\n                    \"code\": \"352\"\n                },\n                \"INDIA\": {\n                    \"backend\": \"IN\",\n                    \"frontend\": \"India\",\n                    \"code\": \"356\"\n                },\n                \"INDONESIA\": {\n                    \"backend\": \"ID\",\n                    \"frontend\": \"Indonesia\",\n                    \"code\": \"360\"\n                },\n                \"IRAN_ISLAMIC_REPUBLIC_OF\": {\n                    \"backend\": \"IR\",\n                    \"frontend\": \"Iran (Islamic Republic of)\",\n                    \"code\": \"364\"\n                },\n                \"IRAQ\": {\n                    \"backend\": \"IQ\",\n                    \"frontend\": \"Iraq\",\n                    \"code\": \"368\"\n                },\n                \"IRELAND\": {\n                    \"backend\": \"IE\",\n                    \"frontend\": \"Ireland\",\n                    \"code\": \"372\"\n                },\n                \"ISRAEL\": {\n                    \"backend\": \"IL\",\n                    \"frontend\": \"Israel\",\n                    \"code\": \"376\"\n                },\n                \"ITALY\": {\n                    \"backend\": \"IT\",\n                    \"frontend\": \"Italy\",\n                    \"code\": \"380\"\n                },\n                \"JAMAICA\": {\n                    \"backend\": \"JM\",\n                    \"frontend\": \"Jamaica\",\n                    \"code\": \"388\"\n                },\n                \"JAPAN\": {\n                    \"backend\": \"JP\",\n                    \"frontend\": \"Japan\",\n                    \"code\": \"392\"\n                },\n                \"JORDAN\": {\n                    \"backend\": \"JO\",\n                    \"frontend\": \"Jordan\",\n                    \"code\": \"400\"\n                },\n                \"KAZAKHSTAN\": {\n                    \"backend\": \"KZ\",\n                    \"frontend\": \"Kazakhstan\",\n                    \"code\": \"398\"\n                },\n                \"KENYA\": {\n                    \"backend\": \"KE\",\n                    \"frontend\": \"Kenya\",\n                    \"code\": \"404\"\n                },\n                \"KIRIBATI\": {\n                    \"backend\": \"KI\",\n                    \"frontend\": \"Kiribati\",\n                    \"code\": \"296\"\n                },\n                \"KOREA_DEMOCRATIC_PEOPLES_REPUBLIC_OF\": {\n                    \"backend\": \"KP\",\n                    \"frontend\": \"Korea, Democratic People`s Republic of\",\n                    \"code\": \"408\"\n                },\n                \"KOREA_REPUBLIC_OF\": {\n                    \"backend\": \"KR\",\n                    \"frontend\": \"Korea, Republic of\",\n                    \"code\": \"410\"\n                },\n                \"KUWAIT\": {\n                    \"backend\": \"KW\",\n                    \"frontend\": \"Kuwait\",\n                    \"code\": \"414\"\n                },\n                \"KYRGYZSTAN\": {\n                    \"backend\": \"KG\",\n                    \"frontend\": \"Kyrgyzstan\",\n                    \"code\": \"417\"\n                },\n                \"LAO_PEOPLES_DEMOCRATIC_REPUBLIC\": {\n                    \"backend\": \"LA\",\n                    \"frontend\": \"Lao People`s Democratic Republic\",\n                    \"code\": \"418\"\n                },\n                \"LATVIA\": {\n                    \"backend\": \"LV\",\n                    \"frontend\": \"Latvia\",\n                    \"code\": \"428\"\n                },\n                \"LEBANON\": {\n                    \"backend\": \"LB\",\n                    \"frontend\": \"Lebanon\",\n                    \"code\": \"422\"\n                },\n                \"LESOTHO\": {\n                    \"backend\": \"LS\",\n                    \"frontend\": \"Lesotho\",\n                    \"code\": \"426\"\n                },\n                \"LIBERIA\": {\n                    \"backend\": \"LR\",\n                    \"frontend\": \"Liberia\",\n                    \"code\": \"430\"\n                },\n                \"LIBYAN_ARAB_JAMAHIRIYA\": {\n                    \"backend\": \"LY\",\n                    \"frontend\": \"Libyan Arab Jamahiriya\",\n                    \"code\": \"434\"\n                },\n                \"LIECHTENSTEIN\": {\n                    \"backend\": \"LI\",\n                    \"frontend\": \"Liechtenstein\",\n                    \"code\": \"438\"\n                },\n                \"LITHUANIA\": {\n                    \"backend\": \"LT\",\n                    \"frontend\": \"Lithuania\",\n                    \"code\": \"440\"\n                },\n                \"LUXEMBOURG\": {\n                    \"backend\": \"LU\",\n                    \"frontend\": \"Luxembourg\",\n                    \"code\": \"442\"\n                },\n                \"MACAU\": {\n                    \"backend\": \"MO\",\n                    \"frontend\": \"Macau\",\n                    \"code\": \"446\"\n                },\n                \"MACEDONIA_THE_FORMER_YUGOSLAV_REPUBLIC_OF\": {\n                    \"backend\": \"MK\",\n                    \"frontend\": \"Macedonia, The Former Yugoslav Republic of\",\n                    \"code\": \"807\"\n                },\n                \"MADAGASCAR\": {\n                    \"backend\": \"MG\",\n                    \"frontend\": \"Madagascar\",\n                    \"code\": \"450\"\n                },\n                \"MALAWI\": {\n                    \"backend\": \"MW\",\n                    \"frontend\": \"Malawi\",\n                    \"code\": \"454\"\n                },\n                \"MALAYSIA\": {\n                    \"backend\": \"MY\",\n                    \"frontend\": \"Malaysia\",\n                    \"code\": \"458\"\n                },\n                \"MALDIVES\": {\n                    \"backend\": \"MV\",\n                    \"frontend\": \"Maldives\",\n                    \"code\": \"462\"\n                },\n                \"MALI\": {\n                    \"backend\": \"ML\",\n                    \"frontend\": \"Mali\",\n                    \"code\": \"466\"\n                },\n                \"MALTA\": {\n                    \"backend\": \"MT\",\n                    \"frontend\": \"Malta\",\n                    \"code\": \"470\"\n                },\n                \"MARSHALL_ISLANDS\": {\n                    \"backend\": \"MH\",\n                    \"frontend\": \"Marshall Islands\",\n                    \"code\": \"584\"\n                },\n                \"MARTINIQUE\": {\n                    \"backend\": \"MQ\",\n                    \"frontend\": \"Martinique\",\n                    \"code\": \"474\"\n                },\n                \"MAURITANIA\": {\n                    \"backend\": \"MR\",\n                    \"frontend\": \"Mauritania\",\n                    \"code\": \"478\"\n                },\n                \"MAURITIUS\": {\n                    \"backend\": \"MU\",\n                    \"frontend\": \"Mauritius\",\n                    \"code\": \"480\"\n                },\n                \"MAYOTTE\": {\n                    \"backend\": \"YT\",\n                    \"frontend\": \"Mayotte\",\n                    \"code\": \"175\"\n                },\n                \"MEXICO\": {\n                    \"backend\": \"MX\",\n                    \"frontend\": \"Mexico\",\n                    \"code\": \"484\"\n                },\n                \"MICRONESIA_FEDERATED_STATES_OF\": {\n                    \"backend\": \"FM\",\n                    \"frontend\": \"Micronesia (Federated States of)\",\n                    \"code\": \"583\"\n                },\n                \"MOLDOVA_REPUBLIC_OF\": {\n                    \"backend\": \"MD\",\n                    \"frontend\": \"Moldova, Republic of\",\n                    \"code\": \"498\"\n                },\n                \"MONACO\": {\n                    \"backend\": \"MC\",\n                    \"frontend\": \"Monaco\",\n                    \"code\": \"492\"\n                },\n                \"MONGOLIA\": {\n                    \"backend\": \"MN\",\n                    \"frontend\": \"Mongolia\",\n                    \"code\": \"496\"\n                },\n                \"MONTSERRAT\": {\n                    \"backend\": \"MS\",\n                    \"frontend\": \"Montserrat\",\n                    \"code\": \"500\"\n                },\n                \"MOROCCO\": {\n                    \"backend\": \"MA\",\n                    \"frontend\": \"Morocco\",\n                    \"code\": \"504\"\n                },\n                \"MOZAMBIQUE\": {\n                    \"backend\": \"MZ\",\n                    \"frontend\": \"Mozambique\",\n                    \"code\": \"508\"\n                },\n                \"MYANMAR\": {\n                    \"backend\": \"MM\",\n                    \"frontend\": \"Myanmar\",\n                    \"code\": \"104\"\n                },\n                \"NAMIBIA\": {\n                    \"backend\": \"NA\",\n                    \"frontend\": \"Namibia\",\n                    \"code\": \"516\"\n                },\n                \"NAURU\": {\n                    \"backend\": \"NR\",\n                    \"frontend\": \"Nauru\",\n                    \"code\": \"520\"\n                },\n                \"NEPAL\": {\n                    \"backend\": \"NP\",\n                    \"frontend\": \"Nepal\",\n                    \"code\": \"524\"\n                },\n                \"NETHERLANDS\": {\n                    \"backend\": \"NL\",\n                    \"frontend\": \"Netherlands\",\n                    \"code\": \"528\"\n                },\n                \"NETHERLANDS_ANTILLES\": {\n                    \"backend\": \"AN\",\n                    \"frontend\": \"Netherlands Antilles\"\n                },\n                \"NEW_CALEDONIA\": {\n                    \"backend\": \"NC\",\n                    \"frontend\": \"New Caledonia\",\n                    \"code\": \"540\"\n                },\n                \"NEW_ZEALAND\": {\n                    \"backend\": \"NZ\",\n                    \"frontend\": \"New Zealand\",\n                    \"code\": \"554\"\n                },\n                \"NICARAGUA\": {\n                    \"backend\": \"NI\",\n                    \"frontend\": \"Nicaragua\",\n                    \"code\": \"558\"\n                },\n                \"NIGER\": {\n                    \"backend\": \"NE\",\n                    \"frontend\": \"Niger\",\n                    \"code\": \"562\"\n                },\n                \"NIGERIA\": {\n                    \"backend\": \"NG\",\n                    \"frontend\": \"Nigeria\",\n                    \"code\": \"566\"\n                },\n                \"NIUE\": {\n                    \"backend\": \"NU\",\n                    \"frontend\": \"Niue\",\n                    \"code\": \"570\"\n                },\n                \"NORFOLK_ISLAND\": {\n                    \"backend\": \"NF\",\n                    \"frontend\": \"Norfolk Island\",\n                    \"code\": \"574\"\n                },\n                \"NORTHERN_MARIANA_ISLANDS\": {\n                    \"backend\": \"MP\",\n                    \"frontend\": \"Northern Mariana Islands\",\n                    \"code\": \"580\"\n                },\n                \"NORWAY\": {\n                    \"backend\": \"NO\",\n                    \"frontend\": \"Norway\",\n                    \"code\": \"578\"\n                },\n                \"OBSOLETE_SEE_FR_TERRITORY\": {\n                    \"backend\": \"FX\",\n                    \"frontend\": \"Obsolete see FR territory\"\n                },\n                \"OMAN\": {\n                    \"backend\": \"OM\",\n                    \"frontend\": \"Oman\",\n                    \"code\": \"512\"\n                },\n                \"PAKISTAN\": {\n                    \"backend\": \"PK\",\n                    \"frontend\": \"Pakistan\",\n                    \"code\": \"586\"\n                },\n                \"PALAU\": {\n                    \"backend\": \"PW\",\n                    \"frontend\": \"Palau\",\n                    \"code\": \"585\"\n                },\n                \"PALESTINIAN_TERRITORY_OCCUPIED\": {\n                    \"backend\": \"PS\",\n                    \"frontend\": \"Palestinian Territory,Occupied\",\n                    \"code\": \"275\"\n                },\n                \"PANAMA\": {\n                    \"backend\": \"PA\",\n                    \"frontend\": \"Panama\",\n                    \"code\": \"591\"\n                },\n                \"PAPUA_NEW_GUINEA\": {\n                    \"backend\": \"PG\",\n                    \"frontend\": \"Papua New Guinea\",\n                    \"code\": \"598\"\n                },\n                \"PARAGUAY\": {\n                    \"backend\": \"PY\",\n                    \"frontend\": \"Paraguay\",\n                    \"code\": \"600\"\n                },\n                \"PERU\": {\n                    \"backend\": \"PE\",\n                    \"frontend\": \"Peru\",\n                    \"code\": \"604\"\n                },\n                \"PHILIPPINES\": {\n                    \"backend\": \"PH\",\n                    \"frontend\": \"Philippines\",\n                    \"code\": \"608\"\n                },\n                \"PITCAIRN\": {\n                    \"backend\": \"PN\",\n                    \"frontend\": \"Pitcairn\",\n                    \"code\": \"612\"\n                },\n                \"POLAND\": {\n                    \"backend\": \"PL\",\n                    \"frontend\": \"Poland\",\n                    \"code\": \"616\"\n                },\n                \"PORTUGAL\": {\n                    \"backend\": \"PT\",\n                    \"frontend\": \"Portugal\",\n                    \"code\": \"620\"\n                },\n                \"PUERTO_RICO\": {\n                    \"backend\": \"PR\",\n                    \"frontend\": \"Puerto Rico\",\n                    \"code\": \"630\"\n                },\n                \"QATAR\": {\n                    \"backend\": \"QA\",\n                    \"frontend\": \"Qatar\",\n                    \"code\": \"634\"\n                },\n                \"REUNION\": {\n                    \"backend\": \"RE\",\n                    \"frontend\": \"Reunion\",\n                    \"code\": \"638\"\n                },\n                \"ROMANIA\": {\n                    \"backend\": \"RO\",\n                    \"frontend\": \"Romania\",\n                    \"code\": \"642\"\n                },\n                \"RUSSIAN_FEDERATION\": {\n                    \"backend\": \"RU\",\n                    \"frontend\": \"Russian Federation\",\n                    \"code\": \"643\"\n                },\n                \"RWANDA\": {\n                    \"backend\": \"RW\",\n                    \"frontend\": \"Rwanda\",\n                    \"code\": \"646\"\n                },\n                \"SAINT_HELENA\": {\n                    \"backend\": \"SH\",\n                    \"frontend\": \"Saint Helena\",\n                    \"code\": \"654\"\n                },\n                \"SAINT_KITTS_AND_NEVIS\": {\n                    \"backend\": \"KN\",\n                    \"frontend\": \"Saint Kitts and Nevis\",\n                    \"code\": \"659\"\n                },\n                \"SAINT_LUCIA\": {\n                    \"backend\": \"LC\",\n                    \"frontend\": \"Saint Lucia\",\n                    \"code\": \"662\"\n                },\n                \"SAINT_PIERRE_AND_MIQUELON\": {\n                    \"backend\": \"PM\",\n                    \"frontend\": \"Saint Pierre and Miquelon\",\n                    \"code\": \"666\"\n                },\n                \"SAINT_VINCENT_AND_THE_GRENADINES\": {\n                    \"backend\": \"VC\",\n                    \"frontend\": \"Saint Vincent and the Grenadines\",\n                    \"code\": \"670\"\n                },\n                \"SAMOA\": {\n                    \"backend\": \"WS\",\n                    \"frontend\": \"Samoa\",\n                    \"code\": \"882\"\n                },\n                \"SAN_MARINO\": {\n                    \"backend\": \"SM\",\n                    \"frontend\": \"San Marino\",\n                    \"code\": \"674\"\n                },\n                \"SAO_TOME_AND_PRINCIPE\": {\n                    \"backend\": \"ST\",\n                    \"frontend\": \"Sao Tome and Principe\",\n                    \"code\": \"678\"\n                },\n                \"SAUDI_ARABIA\": {\n                    \"backend\": \"SA\",\n                    \"frontend\": \"Saudi Arabia\",\n                    \"code\": \"682\"\n                },\n                \"SENEGAL\": {\n                    \"backend\": \"SN\",\n                    \"frontend\": \"Senegal\",\n                    \"code\": \"686\"\n                },\n                \"SEYCHELLES\": {\n                    \"backend\": \"SC\",\n                    \"frontend\": \"Seychelles\",\n                    \"code\": \"690\"\n                },\n                \"SIERRA_LEONE\": {\n                    \"backend\": \"SL\",\n                    \"frontend\": \"Sierra Leone\",\n                    \"code\": \"694\"\n                },\n                \"SINGAPORE\": {\n                    \"backend\": \"SG\",\n                    \"frontend\": \"Singapore\",\n                    \"code\": \"702\"\n                },\n                \"SLOVAKIA\": {\n                    \"backend\": \"SK\",\n                    \"frontend\": \"Slovakia\",\n                    \"code\": \"703\"\n                },\n                \"SLOVENIA\": {\n                    \"backend\": \"SI\",\n                    \"frontend\": \"Slovenia\",\n                    \"code\": \"705\"\n                },\n                \"SOLOMON_ISLANDS\": {\n                    \"backend\": \"SB\",\n                    \"frontend\": \"Solomon Islands\",\n                    \"code\": \"090\"\n                },\n                \"SOMALIA\": {\n                    \"backend\": \"SO\",\n                    \"frontend\": \"Somalia\",\n                    \"code\": \"706\"\n                },\n                \"SOUTH_AFRICA\": {\n                    \"backend\": \"ZA\",\n                    \"frontend\": \"South Africa\",\n                    \"code\": \"710\"\n                },\n                \"SOUTH_GEORGIA_AND_THE_SOUTH_SANDWICH_ISLAND\": {\n                    \"backend\": \"GS\",\n                    \"frontend\": \"South Georgia and the South Sandwich Island\",\n                    \"code\": \"239\"\n                },\n                \"SPAIN\": {\n                    \"backend\": \"ES\",\n                    \"frontend\": \"Spain\",\n                    \"code\": \"724\"\n                },\n                \"SRI_LANKA\": {\n                    \"backend\": \"LK\",\n                    \"frontend\": \"Sri Lanka\",\n                    \"code\": \"144\"\n                },\n                \"SUDAN\": {\n                    \"backend\": \"SD\",\n                    \"frontend\": \"Sudan\",\n                    \"code\": \"729\"\n                },\n                \"SURINAME\": {\n                    \"backend\": \"SR\",\n                    \"frontend\": \"Suriname\",\n                    \"code\": \"740\"\n                },\n                \"SVALBARD_AND_JAN_MAYEN_ISLANDS\": {\n                    \"backend\": \"SJ\",\n                    \"frontend\": \"Svalbard and Jan Mayen Islands\",\n                    \"code\": \"744\"\n                },\n                \"SWAZILAND\": {\n                    \"backend\": \"SZ\",\n                    \"frontend\": \"Swaziland\",\n                    \"code\": \"748\"\n                },\n                \"SWEDEN\": {\n                    \"backend\": \"SE\",\n                    \"frontend\": \"Sweden\",\n                    \"code\": \"752\"\n                },\n                \"SWITZERLAND\": {\n                    \"backend\": \"CH\",\n                    \"frontend\": \"Switzerland\",\n                    \"code\": \"756\"\n                },\n                \"SYRIAN_ARAB_REPUBLIC\": {\n                    \"backend\": \"SY\",\n                    \"frontend\": \"Syrian Arab Republic\",\n                    \"code\": \"760\"\n                },\n                \"TAIWAN\": {\n                    \"backend\": \"TW\",\n                    \"frontend\": \"Taiwan\",\n                    \"code\": \"158\"\n                },\n                \"TAJIKISTAN\": {\n                    \"backend\": \"TJ\",\n                    \"frontend\": \"Tajikistan\",\n                    \"code\": \"762\"\n                },\n                \"TANZANIA_UNITED_REPUBLIC_OF\": {\n                    \"backend\": \"TZ\",\n                    \"frontend\": \"Tanzania, United Republic of\",\n                    \"code\": \"834\"\n                },\n                \"THAILAND\": {\n                    \"backend\": \"TH\",\n                    \"frontend\": \"Thailand\",\n                    \"code\": \"764\"\n                },\n                \"TOGO\": {\n                    \"backend\": \"TG\",\n                    \"frontend\": \"Togo\",\n                    \"code\": \"768\"\n                },\n                \"TOKELAU\": {\n                    \"backend\": \"TK\",\n                    \"frontend\": \"Tokelau\",\n                    \"code\": \"772\"\n                },\n                \"TONGA\": {\n                    \"backend\": \"TO\",\n                    \"frontend\": \"Tonga\",\n                    \"code\": \"776\"\n                },\n                \"TRINIDAD_AND_TOBAGO\": {\n                    \"backend\": \"TT\",\n                    \"frontend\": \"Trinidad and Tobago\",\n                    \"code\": \"780\"\n                },\n                \"TUNISIA\": {\n                    \"backend\": \"TN\",\n                    \"frontend\": \"Tunisia\",\n                    \"code\": \"788\"\n                },\n                \"TURKEY\": {\n                    \"backend\": \"TR\",\n                    \"frontend\": \"Turkey\",\n                    \"code\": \"792\"\n                },\n                \"TURKMENISTAN\": {\n                    \"backend\": \"TM\",\n                    \"frontend\": \"Turkmenistan\",\n                    \"code\": \"795\"\n                },\n                \"TURKS_AND_CAICOS_ISLANDS\": {\n                    \"backend\": \"TC\",\n                    \"frontend\": \"Turks and Caicos Islands\",\n                    \"code\": \"796\"\n                },\n                \"TUVALU\": {\n                    \"backend\": \"TV\",\n                    \"frontend\": \"Tuvalu\",\n                    \"code\": \"798\"\n                },\n                \"UGANDA\": {\n                    \"backend\": \"UG\",\n                    \"frontend\": \"Uganda\",\n                    \"code\": \"800\"\n                },\n                \"UKRAINE\": {\n                    \"backend\": \"UA\",\n                    \"frontend\": \"Ukraine\",\n                    \"code\": \"804\"\n                },\n                \"UNITED_ARAB_EMIRATES\": {\n                    \"backend\": \"AE\",\n                    \"frontend\": \"United Arab Emirates\",\n                    \"code\": \"784\"\n                },\n                \"UNITED_KINGDOM\": {\n                    \"backend\": \"GB\",\n                    \"frontend\": \"United Kingdom\",\n                    \"code\": \"826\"\n                },\n                \"UNITED_STATES\": {\n                    \"backend\": \"US\",\n                    \"frontend\": \"United States\",\n                    \"code\": \"840\"\n                },\n                \"UNITED_STATES_MINOR_OUTLYING_ISLANDS\": {\n                    \"backend\": \"UM\",\n                    \"frontend\": \"United States Minor Outlying Islands\",\n                    \"code\": \"581\"\n                },\n                \"UNKNOWN\": {\n                    \"backend\": \"ZZ\",\n                    \"frontend\": \"Unknown\"\n                },\n                \"URUGUAY\": {\n                    \"backend\": \"UY\",\n                    \"frontend\": \"Uruguay\",\n                    \"code\": \"858\"\n                },\n                \"UZBEKISTAN\": {\n                    \"backend\": \"UZ\",\n                    \"frontend\": \"Uzbekistan\",\n                    \"code\": \"860\"\n                },\n                \"VANUATU\": {\n                    \"backend\": \"VU\",\n                    \"frontend\": \"Vanuatu\",\n                    \"code\": \"548\"\n                },\n                \"VENEZUELA\": {\n                    \"backend\": \"VE\",\n                    \"frontend\": \"Venezuela\",\n                    \"code\": \"862\"\n                },\n                \"VIET_NAM\": {\n                    \"backend\": \"VN\",\n                    \"frontend\": \"Viet Nam\",\n                    \"code\": \"704\"\n                },\n                \"VIRGIN_ISLANDS_BRITISH\": {\n                    \"backend\": \"VG\",\n                    \"frontend\": \"Virgin Islands, British\",\n                    \"code\": \"092\"\n                },\n                \"VIRGIN_ISLANDS_U.S.\": {\n                    \"backend\": \"VI\",\n                    \"frontend\": \"Virgin Islands, U.S.\",\n                    \"code\": \"850\"\n                },\n                \"WALLIS_AND_FUTUNA\": {\n                    \"backend\": \"WF\",\n                    \"frontend\": \"Wallis and Futuna\",\n                    \"code\": \"876\"\n                },\n                \"WESTERN_SAHARA\": {\n                    \"backend\": \"EH\",\n                    \"frontend\": \"Western Sahara\",\n                    \"code\": \"732\"\n                },\n                \"YEMEN\": {\n                    \"backend\": \"YE\",\n                    \"frontend\": \"Yemen\",\n                    \"code\": \"887\"\n                },\n                \"YUGOSLAVIA\": {\n                    \"backend\": \"YU\",\n                    \"frontend\": \"Yugoslavia\"\n                },\n                \"ZAMBIA\": {\n                    \"backend\": \"ZM\",\n                    \"frontend\": \"Zambia\",\n                    \"code\": \"894\"\n                },\n                \"ZIMBABWE\": {\n                    \"backend\": \"ZW\",\n                    \"frontend\": \"Zimbabwe\",\n                    \"code\": \"716\"\n                }\n            });\n        },\n        /**\n         * Get the enum entry for the country based on numerical country code\n         * Returns null if no matching country is found\n         * \n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  05 Feb 2019\n         * \n         * @param string sCode - The numerical country code as a string\n         */\n        getCountryObjectByCode: function getCountryObjectByCode(sCode) {\n            // Get the country enum\n            var objCountryEnum = this.get(\"country\");\n            // Get the key list\n            var arrKeys = Object.keys(objCountryEnum);\n\n            // Loop over keys\n            for (var i = 0; i < arrKeys.length; i++) {\n                // Get and compare \n                var objCountry = objCountryEnum[arrKeys[i]];\n                if (objCountry.code === sCode) {\n                    // Return country if the code matches\n                    return objCountry;\n                }\n            }\n            // In case no country is found by code\n            return null;\n        }\n    });\n});","define(\"a24-ember-lookup/services/a24-strings-base\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objStrings: null,\n\n        /**\n         * This function will get you a string for a given key\n         *\n         * @param sKey - The unique key of the string\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  8 January 2018\n         *\n         * @return The un-escaped string\n         */\n        getString: function getString(sKey) {\n            return this.get(\"_objStrings\")[sKey] || null;\n        },\n\n        /**\n         * This function will get you a localised string for the key and which locale\n         *\n         * @param sKey - The unique key of the string\n         * @param sCountryCode - The country code of the locale you want the string in\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  01 September 2023\n         *\n         * @return The un-escaped string\n         */\n        getLocalisedString: function getLocalisedString(sKey, sCountryCode) {\n            var objLocale = this.get(\"_objStrings\")[sKey + \"_localised\"] || undefined;\n\n            // returns null if we could not get the specified string locale object\n            if (!objLocale) {\n                return null;\n            }\n\n            var sString = objLocale[\"en_\" + sCountryCode.toLowerCase()] || null;\n\n            // returns the string if we found the specified locale\n            if (sString) {\n                return sString;\n            }\n\n            // Returns the other option if there is something we want to return of other locales else we return null\n            return objLocale.other || null;\n        },\n\n        /**\n         * This function will get you a string with all tokens replaced\n         *\n         * @param sKey - The unique locale string key\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  8 January 2018\n         *\n         * @return The string with all tokens replaced\n         */\n        getTokenString: function getTokenString(sKey /*,sToken, sToken2 ...*/) {\n            var sLocaleString = this.getString(sKey);\n\n            var arrTokens = [].slice.call(arguments, 1);\n\n            return a24Core.replaceTokensInString(sLocaleString, arrTokens);\n        },\n\n        /**\n         * This function will get you an un-escaped version of the html string with all\n         * tokens replaced.\n         * Note that this string will render in the browser.\n         *\n         * @param sKey - The unique locale string key\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  8 January 2018\n         *\n         * @return The un-escaped locale html string\n         */\n        getHTMLTokenString: function getHTMLTokenString() /*sKey, sToken, sToken2 ...*/{\n            return new Ember.String.htmlSafe(this.getTokenString.apply(this, arguments) // Call getTokenString function with the arguments\n            );\n        }\n    });\n});","define(\"a24-ember-lookup/services/a24-strings\", [\"exports\", \"a24-ember-lookup/services/a24-strings-base\"], function (exports, _a24StringsBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n\n    /**\n     * A service that contains the base strings\n     *\n     * @author Ahmed Onawale <ahmedonawale@gmail.com>\n     * @since  8 January 2018\n     */\n    var objStrings = {\n        _objStrings: {\n\n            //===== STRINGS START =====\n\n            home: \"Home\",\n            work: \"Work\",\n\n            dayMonLetter: \"M\",\n            dayTueLetter: \"T\",\n            dayWedLetter: \"W\",\n            dayThuLetter: \"T\",\n            dayFriLetter: \"F\",\n            daySatLetter: \"S\",\n            daySunLetter: \"S\",\n\n            dayMonShort: \"Mon\",\n            dayTueShort: \"Tue\",\n            dayWedShort: \"Wed\",\n            dayThuShort: \"Thu\",\n            dayFriShort: \"Fri\",\n            daySatShort: \"Sat\",\n            daySunShort: \"Sun\",\n\n            dayMonLong: \"Monday\",\n            dayTueLong: \"Tuesday\",\n            dayWedLong: \"Wednesday\",\n            dayThuLong: \"Thursday\",\n            dayFriLong: \"Friday\",\n            daySatLong: \"Saturday\",\n            daySunLong: \"Sunday\",\n\n            monthJanShort: \"Jan\",\n            monthFebShort: \"Feb\",\n            monthMarShort: \"Mar\",\n            monthAprShort: \"Apr\",\n            monthMayShort: \"May\",\n            monthJunShort: \"Jun\",\n            monthJulShort: \"Jul\",\n            monthAugShort: \"Aug\",\n            monthSepShort: \"Sep\",\n            monthOctShort: \"Oct\",\n            monthNovShort: \"Nov\",\n            monthDecShort: \"Dec\",\n\n            monthJanLong: \"January\",\n            monthFebLong: \"February\",\n            monthMarLong: \"March\",\n            monthAprLong: \"April\",\n            monthMayLong: \"May\",\n            monthJunLong: \"June\",\n            monthJulLong: \"July\",\n            monthAugLong: \"August\",\n            monthSepLong: \"September\",\n            monthOctLong: \"October\",\n            monthNovLong: \"November\",\n            monthDecLong: \"December\",\n\n            ok: \"Ok\",\n            clear: \"Clear\",\n\n            yes: \"Yes\",\n            no: \"No\",\n\n            noData: \"No Data\",\n\n            close: \"Close\",\n\n            nextMonth: \"Next month\",\n            previousMonth: \"Previous month\",\n            monthSelect: \"Select a month\",\n            yearSelect: \"Select a year\",\n\n            selectOption: \"Select an option...\",\n\n            dateFilterToday: \"Today\",\n            dateFilterYesterday: \"Yesterday\",\n            dateFilterThisWeekToday: \"This week (Mon - Today)\",\n            dateFilterThisWeekToFri: \"This week (Mon - Fri)\",\n            dateFilterThisWeekToSun: \"This week (Mon - Sun)\",\n            dateFilterLast7Days: \"Last 7 days\",\n            dateFilterLastWeekToFri: \"Last week (Mon - Fri)\",\n            dateFilterLastWeekToSun: \"Last week (Mon - Sun)\",\n            dateFilterLast14Days: \"Last 14 days\",\n            dateFilterThisMonthToToday: \"This month (1 - Today)\",\n            dateFilterThisMonthToEnd: \"This month (1 - Last Day)\",\n            dateFilterLast30Days: \"Last 30 days\",\n            dateFilterLastMonth: \"Last month\",\n            dateFilterCustomRange: \"Custom range\",\n            dateFilterWithinTheLast: \"Within the last\",\n            dateFilterWithinTheNext: \"Within the next\",\n            dateFilterNotWithinTheLast: \"Not within the last\",\n            dateFilterNotWithinTheNext: \"Not within the next\",\n            dateDays: \"days\",\n            dateFilterNotEmpty: \"Not Empty\",\n\n            dateFilterFutureDatesToday: \"During the Rest of Today\",\n            dateFilterFutureDatesRestOfWeek: \"During the Rest of this Week\",\n            dateFilterFutureDatesRestOfMonth: \"During the Rest of this Month\",\n            dateFilterFutureDatesWithinTheNext: \"Within the Next\",\n            dateFilterFutureDatesCustomRange: \"During Custom\",\n\n            dateFilterExpiryNotExpired: \"Not Expired\",\n            dateFilterExpiryNotExpiredGrace: \"Not Expired with grace of\",\n            dateFilterExpiryWillNotExpire: \"Not Expired and will not expire in\",\n            dateFilterExpiryAfter: \"Expiry is greater than\",\n\n            dateFilterObtainedWithinLast: \"no longer than\",\n            dateFilterObtainedAtLeast: \"at least\",\n\n            dateFilterBetween: \"Between\",\n            ago: \"Ago\",\n            fromToday: \"From Today\",\n\n            filterResults: \"Filter Results\",\n            showAllResultsWhere: \"Show all results where\",\n            selectFilter: \"Select a filter\",\n            emptyEntries: \"Empty Entries\",\n            addFilter: \"Add Filter\",\n            from: \"From\",\n            to: \"To\",\n            of: \"Of\",\n            enterValue: \"Enter a value\",\n            selectValue: \"Select a value\",\n            isEmpty: \"Is empty\",\n            contains: \"Contains\",\n            is: \"Is\",\n            isNot: \"Is not\",\n            startsWith: \"Starts with\",\n            endsWith: \"Ends with\",\n            multiple: \"Multiple\",\n            in: \"In\",\n            notIn: \"Not in\",\n            isIn: \"Is in\",\n            equalTo: \"Equal to\",\n            biggerThan: \"Bigger than\",\n            smallerThan: \"Smaller than\",\n            and: \"And\",\n            or: \"Or\",\n            any: \"Any\",\n\n            noResultsFound: \"No results found\",\n\n            itemsSelected: \"Item/s Selected\",\n\n            viewMore: \"View more\",\n            viewLess: \"View less\",\n            viewAllEntries: \"View all entries\",\n\n            cancel: \"Cancel\",\n            apply: \"Apply\",\n            save: \"Save\",\n            back: \"Back\",\n            okay: \"Okay\",\n            confirm: \"Confirm\",\n            edit: \"Edit\",\n            remove: \"Remove\",\n            next: \"Next\",\n            manage: \"Manage\",\n            username: \"Username\",\n            login: \"Login\",\n            signOut: \"Sign out\",\n            mobileNumber: \"Mobile Number\",\n            usernameUnavailable: \"The Username you have chosen is unavailable\",\n\n            clickHereToEdit: \"Click here to edit\",\n            dataEnteredSuccessfullyClickToPreview: \"data entered successfully, click here to preview or edit\",\n\n            unsavedData: \"You have unsaved data. Do you want to continue?\",\n\n            typeHere: \"Type Here\",\n            other: \"Other\",\n            profile: \"Profile\",\n\n            firstName: \"First Name\",\n            lastName: \"Last Name\",\n            otherNames: \"Other names\",\n            phoneOptOut: \"Phone Opt Out\",\n            emailOptOut: \"Email Opt Out\",\n\n            sourceType: \"Source Type\",\n            sourceDetails: \"Source Details\",\n            sourceDate: \"Source Date\",\n\n            addressLine1: \"Address Line 1\",\n            addressLine2: \"Address Line 2\",\n            cityTown: \"City/Town\",\n            postCode: \"Postcode\",\n            country: \"Country\",\n            countryCode: \"Country Code\",\n            county: \"County\",\n            dateFrom: \"Date From\",\n            dateTo: \"Date To\",\n            currentAddress: \"The above address is my current address\",\n            province: \"Province\",\n            poBox: \"Po Box\",\n            building: \"Building\",\n            street: \"Street\",\n            region: \"Region\",\n            postal: \"postal\",\n            provinceCountry: \"Province/County\",\n            postalCode: \"Postal Code\",\n\n            linkSharingOn: \"Link sharing on\",\n\n            industry: \"Industry\",\n\n            a24RequiredFieldsMarked: \"Required fields are marked with \",\n            emptyEntriesMessage: \"Empty entries are not allowed\",\n\n            serverError: \"The server encountered an error!\",\n            a24group: \"A24 Group\",\n            expires: \"Expires\",\n            comingSoon: \"Coming soon\",\n            availableSoon: \"We are working on some new features that will be available to you soon\",\n            update: \"Update\",\n            dateOfBirth: \"Date of Birth\",\n            continue: \"Continue\",\n            gender: \"Gender\",\n            nationality: \"Nationality\",\n            contactNumber: \"Contact Number\",\n            extension: \"Extension\",\n            male: \"Male\",\n            female: \"Female\",\n\n            language: \"Language\",\n            attention: \"Attention\",\n            address: \"Address\",\n            latitude: \"Latitude\",\n            longitude: \"Longitude\",\n            name: \"Name\",\n\n            email: \"Email\",\n            password: \"Password\",\n            rememberMe: \"Remember Me\",\n            signIn: \"Sign in\",\n            submit: \"Submit\",\n\n            welcome: \"Welcome\",\n\n            selectHeaderText: \"Select Columns to display\",\n\n            copySuccess: \"Copied Successfully\",\n            copyFailed: \"Copy Failed! Manually copy the highlighted text\",\n            showHideColumns: \"Show/hide columns\",\n            clearSelection: \"Clear selection\",\n            filtersCanbeApplied: \"Filter results\",\n            shareLink: \"Shareable link\",\n            previousPage: \"Previous page\",\n            nextPage: \"Next page\",\n            moreActions: \"More actions\",\n            navigateToSection: \"Navigate to section\",\n\n            website: \"Website\",\n            add: \"Add\",\n            status: \"Status\",\n            effectiveAt: \"Effective at\",\n            active: \"Active\",\n            inactive: \"Inactive\",\n            title: \"Title\",\n            description: \"Description\",\n            comment: \"Comment\",\n            executingUser: \"Executing User\",\n            createdBy: \"Created By\",\n\n            download: \"Download\",\n            downloadPdfPreview: \"Download pdf preview\",\n            downloadPdf: \"Downloading pdf...\",\n            downloadPdfFinish: \"Finished downloading pdf\",\n            downloadPdfFailed: \"Failed to download pdf\",\n\n            mainDetails: \"Main Details\",\n            emails: \"Emails\",\n            phoneNumbers: \"Phone Numbers\",\n            addresses: \"Addresses\",\n            primaryContactNumber: \"Primary Contact Number\",\n            primaryEmailAddress: \"Primary Email Address\",\n            primaryAddress: \"Primary Address\",\n\n            primary: \"Primary\",\n            dateModified: \"Date Modified\",\n            dateCreated: \"Date Created\",\n\n            disabled: \"Disabled\",\n            enable: \"Enable\",\n            disable: \"Disable\",\n\n            file: \"File\",\n            fileDownload: \"Download File\",\n            documents: \"Documents\",\n            upload: \"Upload\",\n            uploadedBy: \"Uploaded By\",\n            addDocument: \"Add Document\",\n            documentName: \"Document Name\",\n\n            location: \"Location\",\n            headOffice: \"Head Office\",\n            subOffice: \"Sub Office\",\n\n            organisation: \"Organisation\",\n            organisationType: \"Organisation Type\",\n            organisationDetails: \"Organisation Details\",\n            organisations: \"Organisations\",\n            editOrg: \"Edit organisation\",\n            viewOrganisation: \"View Organisation\",\n            removeOrganisation: \"Remove Organisation\",\n\n            addPhoneNumber: \"Add phone number\",\n            editPhoneNumber: \"Edit phone number\",\n            addEmail: \"Add email\",\n            editEmail: \"Edit email\",\n\n            makePrimary: \"Make Primary\",\n            removeConfirmation: \"Are you sure you want to remove this item?\",\n            primaryConfirmation: \"Are you sure you want to set this item as your primary?\",\n\n            addAddress: \"Add Address\",\n            editAddress: \"Edit Address\",\n            timezone: \"Timezone\",\n\n            users: \"Users\",\n            createUser: \"Create User\",\n            editUser: \"Edit User\",\n            accessgroup: \"Access Group\",\n            retypePassword: \"Retype Password\",\n            passwordsDoNotMatch: \"Passwords do not match\",\n            changePassword: \"Change Password\",\n            enableConfirm: \"Are you sure you want to enable this user?\",\n            disableConfirm: \"Are you sure you want to disable this user?\",\n\n            selectTitle: \"Select Title\",\n            forename: \"Forename\",\n            surname: \"Surname\",\n            tips: \"Tips\",\n\n            unhandledAddRestError: \"Failed to add item, something unexpected has happened\",\n            unhandledUpdateRestError: \"Failed to update item, something unexpected has happened\",\n            unhandledRemoveRestError: \"Failed to remove item, something unexpected has happened\",\n            queryMustBeAnObject: \"Query must be an object, thus start with {\",\n            queryMustNotContain: \"Query must not contain 'page', 'items_per_page', or 'sort'\",\n            queryMustContainAtLeastOne: \"Query must contain at least one property\",\n            //===== STRINGS END   =====\n\n            //===== SAFE STRINGS START =====\n\n            removeFailedRefreshPage: \"Failed to remove item.\\nThe data might have changed. Please refresh the page and try again\",\n            updateFailedRefreshPage: \"Failed to update item.\\nThe data might have changed. Please refresh the page and try again\",\n\n            //===== SAFE STRINGS END   =====\n\n            //===== TOKEN STRINGS START =====\n\n            editItem: \"Edit {0}\",\n            addItem: \"Add {0}\",\n            removeItem: \"Remove {0}\",\n\n            addingItem: \"Adding {0}...\",\n            updatingItem: \"Updating {0}...\",\n            removingItem: \"Removing {0}...\",\n\n            successAddItem: \"Successfully added {0}\",\n            successUpdateItem: \"Successfully updated {0}\",\n            successRemoveItem: \"Successfully removed {0}\",\n\n            failAddItem: \"Failed to add {0}\",\n            failUpdateItem: \"Failed to update {0}\",\n            failRemoveItem: \"Failed to remove {0}\",\n\n            validationMaxLength: \"{0} is not allowed to be more than {1} characters\",\n            validationMaxLengthMulti: \"The items in {0} are not allowed to be more than {1} characters each\",\n            validationMinLength: \"{0} is not allowed to be less than {1} characters\",\n            validationMinLengthMulti: \"The items in {0} are not allowed to be less than {1} characters each\",\n            validationMaxFileSize: \"{0} is not allowed to be more than {1}\",\n            validationMinFileSize: \"{0} is not allowed to be less than {1}\",\n            validationFileAllowedMimeTypes: \"{0} should be one of the following file types: {1}\",\n            validationFileAllowedAllMimeTypes: \"Can`t read file type of {0}. Make sure {0} has a file type.\",\n            validationRequired: \"{0} is a required field\",\n            validationSuggestionRequired: \"{0} is a required field and must be selected from the suggested options\",\n            validationDateInFuture: \"{0} is not allowed to be in the future\",\n            validationDateInPast: \"{0} is not allowed to be in the past\",\n            validationDateBefore: \"{0} is not allowed to be before {1}\",\n            validationDateOfBirthTooOld: \"The {0} should not succeed more that {1} years(older than age {1})\",\n            validationDateOfBirthTooYoung: \"The {0} should not precede back less than {1} years(younger than age {1})\",\n            validationDateOfBirthInconsistent: \"{0} does not match the existing date of birth\",\n            validationDateOfBirthCantBeBefore: \"The {0} should not be prior to Date of Birth\",\n            validationWholeNumber: \"{0} must be a whole number\",\n            validationPasswordRequirement: \"{0} must be between 6 and 100 characters long and not contain any spaces.\",\n\n            validationRestMinAge: \"{0} is younger than the minimum allowed age\",\n            validationRestMaxAge: \"{0} is older than the maximum allowed age\",\n            validationRestMaxLength: \"{0} has more than the maximum allowed characters\",\n            validationRestMaxLengthMulti: \"One or more of the items in {0} have more than the maximum allowed characters\",\n            validationRestMinLength: \"{0} has less than the minimum allowed characters\",\n            validationRestMinLengthMulti: \"One or more of the items in {0} have less than the minimum allowed characters\",\n            validationRestInvalidChar: \"{0} has invalid characters\",\n            validationRestInvalidCharMulti: \"One or more of the items in {0} have invalid characters\",\n            validationRestMax: \"{0} is bigger that the maximum allowed size\",\n            validationRestMin: \"{0} is smaller that the minimum allowed size\",\n\n            validationRestNotSupportedOption: \"The option you have chosen for {0} is not of the supported options.\",\n            validationRestInvalidFormat: \"{0} is not in the correct format.\",\n            validationRestUnsupportedValue: \"The value for {0} is not supported.\",\n            isNotEmptyTag: \"{0} is not empty.\",\n            \"a24-string-html-span\": \"{0}<span class='a24-strings-html-item-1'>{1}</span>\",\n            \"a24-string-html-dot-value\": \"<span class='a24-strings-html-black-text'>{0}</span>&nbsp;•&nbsp;\" + \"<span class='a24-strings-html-grey-text'>{1}</span>\",\n            \"a24-string-html-colon-value\": \"<span class='a24-strings-html-grey-text'>{0}</span>:&nbsp;\" + \"<span class='a24-strings-html-black-text'>{1}</span>\",\n\n            \"a24-string-html-icon-grey\": \"<i class='a24-material-text-icons material-icons a24-grey-text-lighten-1'>\" + \"{0}</i>\",\n            \"a24-string-html-icon-grey-normal\": \"<i class='a24-material-text-icons material-icons grey-text'>{0}</i>\",\n            \"a24-string-html-icon-secondary\": \"<i class='a24-material-text-icons material-icons \" + \"a24-secondary-color-text-accent-force font-h4-force'>{0}</i>\",\n\n            \"a24-string-html-icon-warning\": \"<i class='a24-material-text-icons material-icons warning-color-text'>warning</i>\",\n\n            //===== TOKEN STRINGS END   =====\n\n            //===== LOCALE STRINGS START =====\n\n            province_localised: {\n                en_gb: \"County\",\n                en_uk: \"County\",\n                en_za: \"Province\",\n                en_us: \"State\",\n                en_au: \"State/Territory\",\n                other: \"County\"\n            },\n\n            postCode_localised: {\n                en_gb: \"Post Code\",\n                en_uk: \"Post Code\",\n                en_za: \"Post Code\",\n                en_us: \"Zip Code\",\n                en_au: \"Postcode\",\n                other: \"Post Code\"\n            }\n\n            //===== LOCALE STRINGS END   =====\n        }\n    };\n\n    exports.default = _a24StringsBase.default.extend(objStrings);\n});","define(\"a24-ember-menu/components/collapsible-left-menu-item\", [\"exports\", \"a24-ember-menu/templates/components/collapsible-left-menu-item\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _collapsibleLeftMenuItem, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        /*\n         * Default values\n        */\n        layout: _collapsibleLeftMenuItem.default,\n        classNames: [\"collapsible-left-menu-item\"],\n\n        /*\n         * An object holding the data for the menu item\n        */\n        objMenuItem: null,\n\n        /*\n         * True if this menu item has a parent menu item\n        */\n        bIsSubmenuItem: false,\n\n        /*\n         * True if this menu item is expanded\n        */\n        bIsExpanded: false,\n\n        /*\n         * Inline computed properties\n         *\n         * True if this menu item has submenu items\n        */\n        bHasSubmenuItems: Ember.computed.notEmpty(\"objMenuItem.arrSubMenuItems\"),\n\n        /**\n         * The animation time for a single menu item in ms\n         */\n        _iMenuAnimationTime: 50,\n\n        /*\n         * Lifecycle\n        */\n        init: function init() {\n            this._super.apply(this, arguments);\n            Ember.set(this, \"sCollapseId\", Ember.guidFor({}));\n        },\n        didReceiveAttrs: function didReceiveAttrs() {\n            this._super.apply(this, arguments);\n            this._setExpansionState();\n        },\n        didUpdateAttrs: function didUpdateAttrs() {\n            this._super.apply(this, arguments);\n            this._setExpansionState();\n        },\n\n\n        /*\n         * Actions\n        */\n        actions: {\n            onClickMenuItem: function onClickMenuItem() {\n                if (Ember.get(this, \"bHasSubmenuItems\")) {\n                    this.toggleProperty(\"bIsExpanded\");\n\n                    // Animate the sub menu items to the open or closed state\n                    var height = 0;\n                    if (this.get(\"bIsExpanded\")) {\n                        // Set the height of the submenu\n                        height = this.$(\".submenu\").get(0).scrollHeight;\n                    }\n                    this.$(\".submenu\").stop().animate({\n                        height: height + \"px\"\n                    },\n                    // _iMenuAnimationTime per item in the menu\n                    this.get(\"_iMenuAnimationTime\") * this.get(\"objMenuItem.arrSubMenuItems.length\"));\n\n                    var objMenuItem = Ember.get(this, \"objMenuItem\");\n                    Ember.set(objMenuItem, \"bIsSelected\", Ember.get(objMenuItem, \"arrSubMenuItems\").isAny(\"bIsSelected\") && !Ember.get(this, \"bIsExpanded\"));\n                } else {\n                    this.get(\"onClick\").apply(undefined, arguments);\n                }\n            }\n        },\n\n        _setExpansionState: function _setExpansionState() {\n            var _this = this;\n\n            var objMenuItem = Ember.get(this, \"objMenuItem\");\n            var arrSubMenuItems = Ember.A(Ember.get(objMenuItem, \"arrSubMenuItems\") || []);\n            Ember.set(this, \"bIsExpanded\", arrSubMenuItems.isAny(\"bIsSelected\") || Ember.get(objMenuItem, \"bIsSelected\"));\n\n            // If the menu has submenus\n            if (arrSubMenuItems.length > 0) {\n\n                // Set the height after render to ensure submenu exists\n                Ember.run.schedule(\"afterRender\", function () {\n                    var height = 0;\n\n                    if (_this.get(\"bIsExpanded\")) {\n                        // if the menu is expanded, set the calculated height.\n                        height = _this.$(\".submenu\").get(0).scrollHeight;\n                    }\n\n                    _this.$(\".submenu\").height(height + \"px\");\n                });\n            }\n        }\n    });\n});","define(\"a24-ember-menu/components/left-menu-item\", [\"exports\", \"a24-ember-menu/templates/components/left-menu-item\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _leftMenuItem, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        /*\n         * Default values.\n        */\n        layout: _leftMenuItem.default,\n        classNames: [\"left-menu-item\", \"py-2\", \"px-3\", \"d-flex\", \"waves-effect\", \"align-items-center\"],\n        tagName: \"a\",\n        attributeBindings: ['sRouteName:href'],\n\n        classNameBindings: [\"bIsSelected:selected\"],\n\n        /*\n         * An icon name.\n        */\n        sIcon: null,\n\n        /*\n         * A menu title\n        */\n        sTitle: null,\n\n        /*\n         * True if it is selected\n        */\n        bIsSelected: false,\n\n        /*\n         * An icon to display to the right\n        */\n        sRightIcon: null,\n\n        /*\n         * The route this menu item will link to\n        */\n        sRouteName: null,\n\n        _objToolTipService: Ember.inject.service(\"tooltip\"),\n\n        willDestroyElement: function willDestroyElement() {\n            this._super.apply(this, arguments);\n            var objElement = this.$(\".title\");\n            this.get(\"_objToolTipService\").disposeOfTooltip(objElement);\n        },\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n            Ember.run.next(function () {\n                var objElement = _this.$(\".title\");\n                _this.get(\"_objToolTipService\").disposeOfTooltip(objElement);\n                if (!a24Core.isEmpty(_this.get(\"sTitle\"))) {\n                    _this.get(\"_objToolTipService\").addTooltip(objElement, _this.get(\"sTitle\"), \"bottom\", \"a24-tooltip\", null);\n                }\n            });\n        }\n    });\n});","define(\"a24-ember-menu/components/left-menu-with-title-bar-wrapper\", [\"exports\", \"a24-ember-menu/templates/components/left-menu-with-title-bar-wrapper\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _leftMenuWithTitleBarWrapper, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n    function _defineProperty(obj, key, value) {\n        if (key in obj) {\n            Object.defineProperty(obj, key, {\n                value: value,\n                enumerable: true,\n                configurable: true,\n                writable: true\n            });\n        } else {\n            obj[key] = value;\n        }\n\n        return obj;\n    }\n\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        /*\n         * Services\n         */\n        sLeftMenuService: \"left-menu-service\",\n        sPageLoadingService: null,\n\n        objLeftMenuService: Ember.computed(\"sLeftMenuService\", function () {\n            return Ember.getOwner(this).lookup(\"service:\" + this.get(\"sLeftMenuService\"));\n        }),\n\n        objNavigation: Ember.computed(\"sPageLoadingService\", function () {\n            if (a24Core.isEmpty(this.get(\"sPageLoadingService\"))) {\n                return null;\n            }\n            return Ember.getOwner(this).lookup(\"service:\" + this.get(\"sPageLoadingService\"));\n        }),\n\n        bPageLoading: Ember.computed(\"objNavigation.bPageLoading\", function () {\n            if (a24Core.isEmpty(this.get(\"objNavigation\"))) {\n                return false;\n            }\n\n            return !!this.get(\"objNavigation.bPageLoading\");\n        }),\n        /*\n         * Default values\n         */\n        layout: _leftMenuWithTitleBarWrapper.default,\n        classNames: [\"left-menu-with-title-bar-wrapper\"],\n\n        /*\n         * @property sNavbarImageUrl\n         * The navbar image url\n         */\n        sNavbarImageUrl: null,\n\n        /*\n         * @property sNavbarRightComponent\n         * The component to render on the right of the navbar\n         */\n        sNavbarRightComponent: null,\n\n        /*\n         * @property sLeftMenuLoaderComponent\n         * The component to render when the left menu is loading\n         */\n        sLeftMenuLoaderComponent: \"loading-component\",\n\n        /*\n         * @private @property _bIsLeftMenuOpen\n         * True if the left menu is opened\n         */\n        _bIsLeftMenuOpen: false,\n\n        /*\n         * @private @property _bIsRightPanelOpen\n         * True if the right panel is opened\n         */\n        _bIsRightPanelOpen: false,\n\n        /*\n         * Computed properties\n         */\n        _bIsDesktop: Ember.computed.or(\"media.isDesktop\", \"media.isJumbo\"),\n        sTopBarComponent: Ember.computed(\"objLeftMenuService.sTopBarComponent\", function () {\n            return Ember.get(this, \"objLeftMenuService.sTopBarComponent\");\n        }),\n        _iTopStyle: 0,\n        _iTopStyleOffset: 0,\n        _sTopStyleSafe: Ember.computed(\"_iTopStyle\", function () {\n            return Ember.String.htmlSafe(\"top: \" + Ember.get(this, \"_iTopStyle\") + \"px\");\n        }),\n        _bIsPanelOpen: Ember.computed.or(\"_bIsLeftMenuOpen\", \"_bIsRightPanelOpen\"),\n\n        sRightPanelComponent: \"\",\n        _sIcon: \"\",\n        /*\n         * Observers\n         */\n        _onRightPanelChange: Ember.observer(\"objLeftMenuService.sRightPanelComponent\", \"objLeftMenuService.iRightPanelComponentWidth\", \"objLeftMenuService.iRightPanelCollapsedWidth\", function () {\n            if (a24Core.isEmpty(this.get(\"sRightPanelComponent\"))) {\n                Ember.set(this, \"objLeftMenuService.mRightPanelComponentData\", null);\n                Ember.set(this, \"objLeftMenuService.iRightPanelComponentWidth\", 300);\n                Ember.set(this, \"objLeftMenuService.sRightPanelState\", \"\");\n                Ember.set(this, \"objLeftMenuService.iRightPanelCollapsedWidth\", 50);\n                Ember.set(this, \"objLeftMenuService.iRightPanelWidth\", 0);\n            }\n\n            this.set(\"sRightPanelComponent\", Ember.get(this, \"objLeftMenuService.sRightPanelComponent\"));\n            this.set(\"iRightPanelComponentWidth\", Ember.get(this, \"objLeftMenuService.iRightPanelComponentWidth\"));\n\n            Ember.run.scheduleOnce(\"afterRender\", this, this._setDefaultLayout);\n        }),\n        _onRightPanelOpenCountChange: Ember.observer(\"objLeftMenuService._iRigthPanelOpenCounter\", function () {\n            if (!Ember.get(this, \"_bIsRightPanelOpen\")) {\n                this._toggleRightPanelInner();\n            }\n        }),\n        _onRightPanelCloseCountChange: Ember.observer(\"objLeftMenuService._iRigthPanelCloseCounter\", function () {\n            if (Ember.get(this, \"_bIsRightPanelOpen\")) {\n                this._toggleRightPanelInner();\n            }\n        }),\n\n        _onRightConfigChange: Ember.observer(\"media.isDesktop\", \"media.isJumbo\", function () {\n            Ember.run.debounce(this, this._setDefaultLayout, 100);\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            Ember.get(this, \"objLeftMenuService\");\n        },\n\n        didInsertElement: function didInsertElement() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            Ember.run.schedule(\"afterRender\", function () {\n                _this._setDefaultLayout();\n            });\n        },\n        _hideLeftMenu: function _hideLeftMenu() {\n            var _ref = [$(\"#main\"), $(\"#sidebar\")],\n                objMain = _ref[0],\n                objSidebar = _ref[1];\n\n            this._animate(objMain, \"marginLeft\", 0, \"fast\");\n            var iLeftMenuMargin = 240 - parseInt(objSidebar.css(\"marginLeft\"));\n            this._animate(objSidebar, \"left\", 0 - iLeftMenuMargin, \"fast\", Ember.get(this, \"objLeftMenuService.afterMenuAnimation\"));\n            if (Ember.get(this, \"_bIsDesktop\")) {\n                objSidebar.removeClass(\"light-box-shadow\");\n            }\n        },\n        _collapseRightPanel: function _collapseRightPanel() {\n            var _this2 = this;\n\n            var _ref2 = [$(\"#main\"), $(\"#rightPanelContainer\"), $(\"#rightPanelContainer .right-panel-fader\")],\n                objMain = _ref2[0],\n                objRightPanelContainer = _ref2[1],\n                objRightPanelFader = _ref2[2];\n\n            var iRightPanelComponentWidth = Ember.get(this, \"objLeftMenuService.iRightPanelComponentWidth\");\n            var iRightPanelCollapsedWidth = Ember.get(this, \"objLeftMenuService.iRightPanelCollapsedWidth\");\n\n            if (Ember.get(this, \"_bIsDesktop\")) {\n                this._animate(objMain, \"marginRight\", iRightPanelCollapsedWidth, \"fast\");\n                Ember.set(this, \"objLeftMenuService.iRightPanelWidth\", iRightPanelComponentWidth + iRightPanelCollapsedWidth);\n            }\n            Ember.set(this, \"objLeftMenuService.sRightPanelState\", \"hideStart\");\n\n            if (Ember.get(this, \"_bIsDesktop\")) {\n                //This is not correct but we are doing it like this currently so that other\n                //components can know what size to animate to along with the right side.\n                Ember.set(this, \"objLeftMenuService.iRightPanelWidth\", iRightPanelCollapsedWidth);\n            }\n\n            objRightPanelFader.css({ \"width\": \"100%\" });\n            this._animate(objRightPanelFader, \"opacity\", 1, \"fast\");\n            this._animate(objRightPanelContainer, \"width\", iRightPanelCollapsedWidth, \"fast\", function () {\n                Ember.run(function () {\n                    Ember.get(_this2, \"_objDidRenderService\").countRendered();\n                });\n                $(window).trigger(\"resize\");\n                if (Ember.get(_this2, \"_bIsDesktop\")) {\n                    Ember.set(_this2, \"objLeftMenuService.iRightPanelWidth\", iRightPanelCollapsedWidth);\n                }\n                Ember.set(_this2, \"objLeftMenuService.sRightPanelState\", \"hideEnd\");\n            });\n        },\n        _toggleRightPanelInner: function _toggleRightPanelInner() {\n            var _this3 = this;\n\n            var _ref3 = [$(\"#main\"), $(\"#rightPanelContainer\"), $(\"#rightPanelContainer .right-panel-fader\")],\n                objMain = _ref3[0],\n                objRightPanelContainer = _ref3[1],\n                objRightPanelFader = _ref3[2];\n\n            var iRightPanelComponentWidth = Ember.get(this, \"objLeftMenuService.iRightPanelComponentWidth\");\n            var iRightPanelCollapsedWidth = Ember.get(this, \"objLeftMenuService.iRightPanelCollapsedWidth\");\n            if (Ember.get(this, \"_bIsRightPanelOpen\")) {\n                // closing the right panel\n                Ember.set(this, \"_sIcon\", \"chevron_left\");\n                this._collapseRightPanel();\n            } else {\n                // expanding the right panel\n                Ember.set(this, \"_sIcon\", \"chevron_right\");\n\n                if (Ember.get(this, \"_bIsDesktop\")) {\n                    this._animate(objMain, \"marginRight\", iRightPanelComponentWidth + iRightPanelCollapsedWidth, \"fast\");\n                    Ember.set(this, \"objLeftMenuService.iRightPanelWidth\", iRightPanelCollapsedWidth);\n                }\n\n                Ember.set(this, \"objLeftMenuService.sRightPanelState\", \"showStart\");\n\n                if (Ember.get(this, \"_bIsDesktop\")) {\n                    //This is not correct but we are doing it like this currently so that other\n                    //components can know what size to animate to along with the right side.\n                    Ember.set(this, \"objLeftMenuService.iRightPanelWidth\", iRightPanelComponentWidth + iRightPanelCollapsedWidth);\n                }\n\n                this._animate(objRightPanelFader, \"opacity\", 0, \"fast\");\n                this._animate(objRightPanelContainer, \"width\", iRightPanelComponentWidth + iRightPanelCollapsedWidth, \"fast\", function () {\n                    objRightPanelFader.css({ \"width\": \"0%\" });\n                    Ember.run(function () {\n                        Ember.get(_this3, \"_objDidRenderService\").countRendered();\n                    });\n                    $(window).trigger(\"resize\");\n\n                    if (Ember.get(_this3, \"_bIsDesktop\")) {\n                        Ember.set(_this3, \"objLeftMenuService.iRightPanelWidth\", iRightPanelComponentWidth + iRightPanelCollapsedWidth);\n                    }\n                    Ember.set(_this3, \"objLeftMenuService.sRightPanelState\", \"showEnd\");\n                });\n            }\n\n            this.toggleProperty(\"_bIsRightPanelOpen\");\n        },\n\n\n        /*\n         * Actions\n         */\n        actions: {\n            toggleMenu: function toggleMenu() {\n                var _ref4 = [$(\"#main\"), $(\"#sidebar\")],\n                    objMain = _ref4[0],\n                    objSidebar = _ref4[1];\n\n\n                if (Ember.get(this, \"_bIsLeftMenuOpen\")) {\n\n                    this._hideLeftMenu();\n                } else {\n                    if (Ember.get(this, \"_bIsDesktop\")) {\n                        this._animate(objMain, \"marginLeft\", 240, \"fast\");\n                        objSidebar.addClass(\"light-box-shadow\");\n                    }\n                    this._animate(objSidebar, \"left\", 0, \"fast\", Ember.get(this, \"objLeftMenuService.afterMenuAnimation\"));\n                }\n\n                this.toggleProperty(\"_bIsLeftMenuOpen\");\n            },\n            closePanel: function closePanel() {\n                if (Ember.get(this, \"_bIsLeftMenuOpen\")) {\n                    this._hideLeftMenu();\n                    this.toggleProperty(\"_bIsLeftMenuOpen\");\n                } else if (Ember.get(this, \"_bIsRightPanelOpen\")) {\n                    this._collapseRightPanel();\n                    Ember.set(this, \"_sIcon\", \"chevron_left\");\n                    this.toggleProperty(\"_bIsRightPanelOpen\");\n                }\n            },\n            onMenuItemClick: function onMenuItemClick() {\n                if (Ember.get(this, \"_bIsLeftMenuOpen\") && !Ember.get(this, \"_bIsDesktop\")) {\n                    var _ref5 = [$(\"#main\"), $(\"#sidebar\")],\n                        objMain = _ref5[0],\n                        objSidebar = _ref5[1];\n\n\n                    this._animate(objMain, \"marginLeft\", 0, \"fast\");\n                    var iLeftMenuMargin = 240 - parseInt(objSidebar.css(\"marginLeft\"));\n                    this._animate(objSidebar, \"left\", 0 - iLeftMenuMargin, \"fast\", Ember.get(this, \"objLeftMenuService.afterMenuAnimation\"));\n\n                    this.toggleProperty(\"_bIsLeftMenuOpen\");\n                }\n            },\n            toggleRightPanel: function toggleRightPanel() {\n                this._toggleRightPanelInner();\n            }\n        },\n\n        _observeRenderCount: Ember.observer(\"_objDidRenderService._iCountRender\", function () {\n            Ember.run.once(this, \"_setMainContainerTop\");\n        }),\n\n        _setMainContainerTop: function _setMainContainerTop() {\n            if (a24Core.isEmpty(this.get(\"objLeftMenuService.sTopBarComponent\"))) {\n                this.set(\"_iTopStyle\", 0);\n                this.set(\"_iTopStyleOffset\", 0);\n            } else {\n                this.set(\"_iTopStyle\", this.$(\".top-bar\").height() + 2);\n                this.set(\"_iTopStyleOffset\", -2);\n            }\n        },\n\n        /*\n         * Private functions\n         */\n        _animate: function _animate(objElement, sProp, iValue, sDuration, funcComplete) {\n            objElement.animate(_defineProperty({}, sProp, iValue), {\n                duration: sDuration,\n                complete: funcComplete\n            });\n        },\n        _setDefaultLayout: function _setDefaultLayout() {\n            var _ref6 = [$(\"#main\"), $(\"#sidebar\"), $(\"#rightPanel\"), $(\"#rightPanelContainer\"), $(\"#rightPanelContainer .right-panel-fader\")],\n                objMain = _ref6[0],\n                objSidebar = _ref6[1],\n                objRightPanel = _ref6[2],\n                objRightPanelComponent = _ref6[3],\n                objRightPanelFader = _ref6[4];\n\n            var bIsDesktop = Ember.get(this, \"_bIsDesktop\");\n            var iRightPanelComponentWidth = Ember.get(this, \"objLeftMenuService.iRightPanelComponentWidth\");\n            var iRightPanelCollapsedWidth = Ember.get(this, \"objLeftMenuService.iRightPanelCollapsedWidth\");\n\n            if (bIsDesktop) {\n                objMain.css({ \"marginLeft\": 240 });\n                objSidebar.css({ \"left\": 0 });\n                objSidebar.addClass(\"light-box-shadow\");\n\n                if (!a24Core.isEmpty(this.get(\"sRightPanelComponent\")) && !a24Core.isEmpty(objRightPanelComponent)) {\n                    if (Ember.get(this, \"objLeftMenuService.bRightPanelInitClosed\")) {\n                        // set right panel component to collapsed\n                        objMain.css({ \"marginRight\": iRightPanelCollapsedWidth });\n                        objRightPanelComponent.css({ \"width\": iRightPanelCollapsedWidth });\n                        objRightPanel.css({ \"width\": iRightPanelComponentWidth + iRightPanelCollapsedWidth });\n                        objRightPanelFader.css({ width: \"100%\", opacity: 1 });\n                        Ember.set(this, \"_sIcon\", \"chevron_left\");\n                        Ember.set(this, \"objLeftMenuService.iRightPanelWidth\", iRightPanelCollapsedWidth);\n                        Ember.set(this, \"objLeftMenuService.sRightPanelState\", \"hideEnd\");\n                    } else {\n                        // set right panel component to expanded\n                        objMain.css({ \"marginRight\": iRightPanelComponentWidth + iRightPanelCollapsedWidth });\n                        objRightPanelComponent.css({ \"width\": iRightPanelComponentWidth + iRightPanelCollapsedWidth });\n                        objRightPanel.css({ \"width\": iRightPanelComponentWidth + iRightPanelCollapsedWidth });\n                        objRightPanelFader.css({ width: \"0%\", opacity: 0 });\n                        Ember.set(this, \"_sIcon\", \"chevron_right\");\n                        Ember.set(this, \"objLeftMenuService.iRightPanelWidth\", iRightPanelComponentWidth + iRightPanelCollapsedWidth);\n                        Ember.set(this, \"objLeftMenuService.sRightPanelState\", \"showEnd\");\n                    }\n                } else {\n                    objMain.css({ \"marginRight\": 0 });\n                    Ember.set(this, \"objLeftMenuService.iRightPanelWidth\", 0);\n                    Ember.set(this, \"objLeftMenuService.sRightPanelState\", \"\");\n                }\n            } else {\n                objMain.css({ \"marginLeft\": 0 });\n                objSidebar.css({ \"left\": -240 });\n                if (!a24Core.isEmpty(this.get(\"sRightPanelComponent\")) && !a24Core.isEmpty(objRightPanelComponent)) {\n                    // set right panel component to collapsed\n                    objMain.css({ \"marginRight\": iRightPanelCollapsedWidth });\n                    objRightPanelComponent.css({ \"width\": iRightPanelCollapsedWidth });\n                    objRightPanel.css({ \"width\": iRightPanelComponentWidth + iRightPanelCollapsedWidth });\n                    objRightPanelFader.css({ width: \"100%\", opacity: 1 });\n                    Ember.set(this, \"_sIcon\", \"chevron_left\");\n                    Ember.set(this, \"objLeftMenuService.iRightPanelWidth\", iRightPanelCollapsedWidth);\n                    Ember.set(this, \"objLeftMenuService.sRightPanelState\", \"hideEnd\");\n                } else {\n                    objMain.css({ \"marginRight\": 0 });\n                    Ember.set(this, \"objLeftMenuService.iRightPanelWidth\", 0);\n                    Ember.set(this, \"objLeftMenuService.sRightPanelState\", \"\");\n                }\n            }\n\n            Ember.set(this, \"_bIsLeftMenuOpen\", bIsDesktop);\n            Ember.set(this, \"_bIsRightPanelOpen\", bIsDesktop ? !Ember.get(this, \"objLeftMenuService.bRightPanelInitClosed\") : false);\n        }\n    });\n});","define(\"a24-ember-menu/components/left-menu\", [\"exports\", \"a24-ember-menu/templates/components/left-menu\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _leftMenu, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        /*\n         * Services\n        */\n        objMenuService: Ember.inject.service(\"left-menu-service\"),\n\n        /*\n         * Default values\n        */\n        layout: _leftMenu.default,\n\n        classNames: [\"left-menu\"],\n\n        /*\n         * @property sLoaderComponent\n         * The loader component to render if this component is in a loading state\n        */\n        sLoaderComponent: null,\n\n        /*\n         * Computed properties\n        */\n        /*\n         * @property bLoading\n         * True if this component is in a loading state\n        */\n        bLoading: Ember.computed.readOnly(\"objMenuService.bLoading\"),\n\n        arrMenuItems: Ember.computed(\"objMenuService.arrMenuItems.[]\", function () {\n            return this._sortMenuItems(Ember.get(this, \"objMenuService.arrMenuItems\"));\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            this.set(\"objMenuService.objLeftMenuUIComponent\", this);\n        },\n\n        /*\n         * Actions\n        */\n        actions: {\n            onClickMenuItem: function onClickMenuItem() {\n                var _EmberGet;\n\n                Ember.get(this, \"onMenuItemClick\").apply(undefined, arguments);\n                (_EmberGet = Ember.get(this, \"objMenuService\")).onClickMenuItem.apply(_EmberGet, arguments);\n            }\n        },\n\n        _sortMenuItems: function _sortMenuItems(arrMenuItems) {\n            if (a24Core.isEmpty(arrMenuItems)) {\n                return [];\n            }\n            var funcSorter = function funcSorter(objMenuItem1, objMenuItem2) {\n                return Ember.get(objMenuItem1, \"iOrder\") - Ember.get(objMenuItem2, \"iOrder\");\n            };\n\n            arrMenuItems.sort(funcSorter);\n\n            arrMenuItems.forEach(function (objMenuItem) {\n                var arrSubMenuItems = Ember.get(objMenuItem, \"arrSubMenuItems\");\n                if (!a24Core.isEmpty(arrSubMenuItems)) {\n                    arrSubMenuItems.sort(funcSorter);\n                }\n            });\n\n            return arrMenuItems;\n        }\n    });\n});","define(\"a24-ember-menu/components/navigation-bar\", [\"exports\", \"a24-ember-menu/templates/components/navigation-bar\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _navigationBar, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        /*\n          Default values\n        */\n        layout: _navigationBar.default,\n        tagName: \"nav\",\n\n        classNames: [\"navigation-bar\", \"d-flex\", \"align-items-center\", \"z-depth-1\", \"py-1\"],\n\n        /*\n          @property sImageUrl\n          The navbar image url.\n        */\n        sImageUrl: null,\n\n        /*\n          @property sRightComponent\n          The component to render on the right of the navbar.\n        */\n        sRightComponent: null,\n\n        /*\n          Actions\n        */\n        actions: {\n            onClickMenu: function onClickMenu() {\n                Ember.get(this, \"onClickMenu\").apply(undefined, arguments);\n            }\n        }\n    });\n});","define(\"a24-ember-menu/components/sticky-header-component\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-menu/templates/components/sticky-header-component\"], function (exports, _didRenderChangesMixin, _stickyHeaderComponent) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _stickyHeaderComponent.default,\n        classNames: [\"sticky-header-component\"],\n        sStickyHeaderScrollElementSelector: null,\n        iTopOffset: 0,\n\n        _objStickyHeaderService: Ember.inject.service(\"sticky-header-service\"),\n        _bShowStickyHeader: false,\n        _funcOnScroll: null,\n\n        didInsertElement: function didInsertElement() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n            var funcOnScroll = function funcOnScroll() {\n                Ember.run(function () {\n                    Ember.run.once(_this, _this._funcOnScrollOnce);\n                });\n            };\n\n            this.set(\"_funcOnScroll\", funcOnScroll);\n            if (!a24Core.isEmpty(this.get(\"sStickyHeaderScrollElementSelector\"))) {\n                var objScrollElement = Ember.$(this.get(\"sStickyHeaderScrollElementSelector\"));\n                if (!a24Core.isEmpty(objScrollElement)) {\n                    objScrollElement.on(\"scroll wheel DOMMouseScroll mousewheel touchmove\", funcOnScroll);\n                }\n            }\n        },\n\n        willDestroyElement: function willDestroyElement() {\n            this._super.apply(this, arguments);\n            this.set(\"_bShowStickyHeader\", false);\n            if (!a24Core.isEmpty(this.get(\"sStickyHeaderScrollElementSelector\"))) {\n                var objScrollElement = Ember.$(this.get(\"sStickyHeaderScrollElementSelector\"));\n                if (!a24Core.isEmpty(objScrollElement)) {\n                    objScrollElement.off(\"scroll wheel DOMMouseScroll mousewheel touchmove\", this.get(\"_funcOnScroll\"));\n                }\n            }\n        },\n\n        _funcOnScrollOnce: function _funcOnScrollOnce() {\n            var _this2 = this;\n\n            if (a24Core.isEmpty(this.get(\"sStickyHeaderScrollElementSelector\"))) {\n                this.set(\"_bShowStickyHeader\", false);\n                return;\n            }\n\n            var sStickyHeaderItemSelector = this.get(\"sStickyHeaderScrollElementSelector\") + \" .sticky-header-item\";\n            var objStickyHeaderItems = Ember.$(sStickyHeaderItemSelector);\n\n            if (!a24Core.isEmpty(objStickyHeaderItems)) {\n                var objContainer = Ember.$(this.get(\"sStickyHeaderScrollElementSelector\"));\n                if (a24Core.isEmpty(objContainer)) {\n                    this.set(\"_bShowStickyHeader\", false);\n                    return;\n                }\n\n                if (objContainer.offset().top > objStickyHeaderItems.eq(0).offset().top) {\n                    this.set(\"_bShowStickyHeader\", true);\n\n                    Ember.run.schedule(\"afterRender\", function () {\n                        var objStickyHeader = _this2.$(\".sticky-header-component-float\");\n                        Ember.$(sStickyHeaderItemSelector).each(function (iIndex, objItem) {\n                            var iOffset = objStickyHeader.offset().top + objStickyHeader.height();\n\n                            if (Ember.$(objItem).offset().top < iOffset) {\n                                //In future we can update this to instead of pulling the text from the sticky item manually\n                                //we trigger an event on that header e.g EmberJquery(objItem).trigger(\"sticky-item-show\")\n                                //and then the component that has that item can handle it and set things onto the sticky\n                                //service that can then show on the sticky header. Such a thing would allow us to easily\n                                //put round icon header component in the sticky header hbs and then we can put actions etc\n                                //onto the sticky header\n\n                                Ember.run.once(_this2, _this2._setHeader, Ember.$(objItem).text().trim());\n                            }\n                        });\n                    });\n                } else {\n                    this.set(\"_bShowStickyHeader\", false);\n                }\n            } else {\n                this.set(\"_bShowStickyHeader\", false);\n            }\n        },\n\n        _setHeader: function _setHeader(sValue) {\n            this.set(\"_objStickyHeaderService.sHeader\", sValue);\n        },\n\n        _setPositionStickyHeader: function _setPositionStickyHeader() {\n            this._funcOnScrollOnce();\n\n            var objStickyHeaderFloat = this.$(\".sticky-header-component-float\");\n            var objScrollElement = Ember.$(this.get(\"sStickyHeaderScrollElementSelector\"));\n\n            if (!a24Core.isEmpty(objStickyHeaderFloat) && !a24Core.isEmpty(objScrollElement)) {\n                objStickyHeaderFloat.css(\"top\", objScrollElement.offset().top + this.get(\"iTopOffset\") + \"px\");\n                objStickyHeaderFloat.width(this.$().outerWidth(true) + \"px\");\n            }\n        },\n\n        _observeRenderCount: Ember.observer(\"_objDidRenderService._iCountRender\", function () {\n            Ember.run.once(this, this._setPositionStickyHeader);\n        })\n    });\n});","define('a24-ember-menu/services/left-menu-service', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Service.extend({\n    /*\n     * Default values\n    */\n    /*\n     * @property sImageLogoUrl\n     * True if menu items are loading\n    */\n    bLoading: false,\n\n    /*\n     * @property sImageLogoUrl\n     * An array holding the list of menu items\n    */\n    arrMenuItems: null,\n\n    /*\n     * @property sTopBarComponent\n     * String holding the top bar component name\n    */\n    sTopBarComponent: null,\n\n    /*\n     * @property iTopBarComponentHeight\n     * Number(Integer) holding the top bar component height in px\n    */\n    iTopBarComponentHeight: 0,\n    objLeftMenuUIComponent: null,\n\n    /*\n     * @property sRightPanelComponent\n     * String holding the name of the component that will load in the right panel\n     */\n    sRightPanelComponent: null,\n\n    /*\n     * @property sRightPanelComponentData\n     * Mixed var holding the data to pass on to the right panel\n     */\n    mRightPanelComponentData: null,\n\n    mRightPanelComponentHideOverflow: false,\n\n    /*\n     * @property iRightPanelComponentWidth\n     * Integer holding the width of the right panel\n     */\n    iRightPanelComponentWidth: 300,\n\n    /**\n     * @property bRightPanelInitClosed\n     * Boolean to set whether the right side should be open on init\n     */\n    bRightPanelInitClosed: false,\n\n    /*\n     * @property iRightPanelWidth\n     * Integer holding the actial width of the right panel\n     */\n    iRightPanelWidth: 0,\n\n    /*\n     * @property sRightPanelState\n     * String saves the current right panel animation state\n     */\n    sRightPanelState: '',\n\n    /*\n     * @property iRightPanelCollapsedWidth\n     * Integer saves the width of the right panel in the collapsed state\n     */\n    iRightPanelCollapsedWidth: 50,\n\n    /**\n     * Function to trigger the right panel to open or close\n     *\n     * @param bOpen - Whether the panel should be open\n     */\n    funcRigthPanelOpen: function funcRigthPanelOpen(bOpen) {\n      if (bOpen) {\n        this.set(\"_iRigthPanelOpenCounter\", this.get(\"_iRigthPanelOpenCounter\") + 1);\n      } else {\n        this.set(\"_iRigthPanelCloseCounter\", this.get(\"_iRigthPanelCloseCounter\") + 1);\n      }\n    },\n    _iRigthPanelOpenCounter: 0,\n    _iRigthPanelCloseCounter: 0,\n\n    /**\n     * This function is used to get an array of menu items\n     * This function needs to be overriden by a subclass\n     *\n     * @param funcOnComplete - A function to call with the menu items\n     *\n     * @author Ahmed Onawale <ahmedonawale@gmail.com>\n     * @since  3 November 2017\n     */\n    getMenuItems: function getMenuItems() {\n      (true && !(false) && Ember.assert(\"The `getMenuItems` function in `left-menu-service` needs to be overridden by a subclass\"));\n    },\n\n\n    /**\n     * This function is invoked when a menu item is clicked\n     *\n     * @param objMenuItem - The clicked menu item\n     *\n     * @author Ahmed Onawale <ahmedonawale@gmail.com>\n     * @since  6 November 2017\n     */\n    onClickMenuItem: function onClickMenuItem() /* objMenuItem */{/* noop */},\n\n\n    /**\n     * This function is invoked after left menu animation is completed\n     *\n     * @author Ahmed Onawale <ahmedonawale@gmail.com>\n     * @since  16 November 2017\n     */\n    afterMenuAnimation: function afterMenuAnimation() {/* noop */}\n  });\n});","define(\"a24-ember-menu/services/sticky-header-service\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Service.extend({\n    sHeader: null\n  });\n});","define(\"a24-ember-menu/templates/components/collapsible-left-menu-item\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"4PBZn6RO\", \"block\": \"{\\\"symbols\\\":[\\\"objSubMenuItem\\\"],\\\"statements\\\":[[1,[26,\\\"left-menu-item\\\",null,[[\\\"sIcon\\\",\\\"sTitle\\\",\\\"sRouteName\\\",\\\"sRightIcon\\\",\\\"bIsSelected\\\",\\\"class\\\",\\\"click\\\"],[[22,[\\\"objMenuItem\\\",\\\"sIcon\\\"]],[22,[\\\"objMenuItem\\\",\\\"sTitle\\\"]],[22,[\\\"objMenuItem\\\",\\\"sRouteName\\\"]],[26,\\\"if\\\",[[22,[\\\"bHasSubmenuItems\\\"]],[26,\\\"if\\\",[[22,[\\\"bIsExpanded\\\"]],\\\"expand_less\\\",\\\"expand_more\\\"],null]],null],[22,[\\\"objMenuItem\\\",\\\"bIsSelected\\\"]],[26,\\\"if\\\",[[22,[\\\"bIsSubmenuItem\\\"]],\\\"sub-menu-item\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onClickMenuItem\\\",[22,[\\\"objMenuItem\\\"]]],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bHasSubmenuItems\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"submenu\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"objMenuItem\\\",\\\"arrSubMenuItems\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[26,\\\"collapsible-left-menu-item\\\",null,[[\\\"objMenuItem\\\",\\\"bIsSubmenuItem\\\",\\\"onClick\\\"],[[21,1,[]],true,[22,[\\\"onClick\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-menu/templates/components/collapsible-left-menu-item.hbs\" } });\n});","define(\"a24-ember-menu/templates/components/left-menu-item\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"9ikASK24\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"left-icon-wrapper\\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"i\\\"],[10,\\\"class\\\",\\\"menu-icon material-icons left-icon\\\"],[8],[1,[20,\\\"sIcon\\\"],false],[9],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"ml-2 text-ellipse title\\\"],[8],[1,[20,\\\"sTitle\\\"],false],[9],[0,\\\"\\\\n\\\"],[6,\\\"i\\\"],[10,\\\"class\\\",\\\"material-icons ml-auto pl-1 right-icon\\\"],[8],[1,[20,\\\"sRightIcon\\\"],false],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-menu/templates/components/left-menu-item.hbs\" } });\n});","define(\"a24-ember-menu/templates/components/left-menu-with-title-bar-wrapper\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"JxK0E01b\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[1,[26,\\\"navigation-bar\\\",null,[[\\\"sImageUrl\\\",\\\"onClickMenu\\\",\\\"sRightComponent\\\"],[[22,[\\\"sNavbarImageUrl\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"toggleMenu\\\"],null],[22,[\\\"sNavbarRightComponent\\\"]]]]],false],[0,\\\"\\\\n\\\"],[6,\\\"div\\\"],[10,\\\"id\\\",\\\"sidebar\\\"],[11,\\\"class\\\",[27,[\\\"left-menu-slider \\\",[26,\\\"if\\\",[[22,[\\\"_bIsDesktop\\\"]],\\\"desktop\\\",\\\"mobile\\\"],null]]]],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"left-menu\\\",null,[[\\\"objMenuService\\\",\\\"sLoaderComponent\\\",\\\"onMenuItemClick\\\"],[[22,[\\\"objLeftMenuService\\\"]],[22,[\\\"sLeftMenuLoaderComponent\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onMenuItemClick\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"],[6,\\\"div\\\"],[10,\\\"id\\\",\\\"main\\\"],[11,\\\"class\\\",[27,[\\\"main-page \\\",[26,\\\"if\\\",[[22,[\\\"_bIsDesktop\\\"]],\\\"desktop\\\",\\\"mobile\\\"],null]]]],[8],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[22,[\\\"_bIsDesktop\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bIsPanelOpen\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"main-page-overlay\\\"],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"closePanel\\\"],null],null],[8],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"sTopBarComponent\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"component\\\",[[22,[\\\"sTopBarComponent\\\"]]],[[\\\"class\\\"],[\\\"top-bar\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"main-container\\\"],[11,\\\"style\\\",[20,\\\"_sTopStyleSafe\\\"],null],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"sticky-header-component\\\",null,[[\\\"sStickyHeaderScrollElementSelector\\\",\\\"iTopOffset\\\"],[\\\".main-container\\\",[22,[\\\"_iTopStyleOffset\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[13,1],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bPageLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"page-loader\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[20,\\\"loading-component\\\"],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"sRightPanelComponent\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"id\\\",\\\"rightPanelContainer\\\"],[11,\\\"class\\\",[27,[\\\"right-panel-container \\\",[26,\\\"if\\\",[[22,[\\\"_bIsRightPanelOpen\\\"]],\\\"\\\",\\\"light-box-shadow\\\"],null],\\\" \\\",[26,\\\"if\\\",[[22,[\\\"_bIsDesktop\\\"]],\\\"desktop\\\",\\\"mobile\\\"],null],\\\" \\\",[22,[\\\"objLeftMenuService\\\",\\\"sRightPanelState\\\"]]]]],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"id\\\",\\\"rightPanel\\\"],[11,\\\"class\\\",[27,[\\\"right-panel \\\",[26,\\\"if\\\",[[22,[\\\"_bIsDesktop\\\"]],\\\"desktop\\\",\\\"mobile\\\"],null]]]],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"right-panel-main\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"right-panel-component\\\",[26,\\\"if\\\",[[22,[\\\"objLeftMenuService\\\",\\\"mRightPanelComponentHideOverflow\\\"]],\\\" right-panel-component-no-overflow\\\",\\\"\\\"],null]]]],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"component\\\",[[22,[\\\"sRightPanelComponent\\\"]]],[[\\\"mData\\\"],[[22,[\\\"objLeftMenuService\\\",\\\"mRightPanelComponentData\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"right-panel-fader cursor-clickable\\\"],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"toggleRightPanel\\\"],null],null],[8],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"right-panel-devider\\\"],[8],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"right-panel-buttons\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sIcon\\\",\\\"bClickable\\\",\\\"sBackgroundClass\\\",\\\"onRoundIconClick\\\"],[[22,[\\\"_sIcon\\\"]],true,[26,\\\"if\\\",[[22,[\\\"_bIsRightPanelOpen\\\"]],\\\"white light-box-shadow\\\",\\\"white\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"toggleRightPanel\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[22,[\\\"_bIsDesktop\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bIsLeftMenuOpen\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"main-page-overlay\\\"],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"toggleMenu\\\"],null],null],[8],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"bPageLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"page-loader-right\\\"],[8],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-menu/templates/components/left-menu-with-title-bar-wrapper.hbs\" } });\n});","define(\"a24-ember-menu/templates/components/left-menu\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"jzcHf9n5\", \"block\": \"{\\\"symbols\\\":[\\\"objMenuItem\\\"],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"bLoading\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"sLoaderComponent\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"component\\\",[[22,[\\\"sLoaderComponent\\\"]]],[[\\\"class\\\"],[\\\"left-menu-loader\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"each\\\",[[22,[\\\"arrMenuItems\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"collapsible-left-menu-item\\\",null,[[\\\"objMenuItem\\\",\\\"onClick\\\"],[[21,1,[]],[26,\\\"action\\\",[[21,0,[]],\\\"onClickMenuItem\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-menu/templates/components/left-menu.hbs\" } });\n});","define(\"a24-ember-menu/templates/components/navigation-bar\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"sjk1cRLi\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"i\\\"],[10,\\\"class\\\",\\\"material-icons p-2 rounded-circle cursor-clickable waves-effect white-text\\\"],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onClickMenu\\\"],null],null],[8],[0,\\\"menu\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"sImageUrl\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"img\\\"],[11,\\\"src\\\",[20,\\\"sImageUrl\\\"],null],[10,\\\"class\\\",\\\"navigation-bar-logo padding-right-small\\\"],[8],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"sRightComponent\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"component\\\",[[22,[\\\"sRightComponent\\\"]]],[[\\\"class\\\"],[\\\"navigation-bar-right-component\\\"]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-menu/templates/components/navigation-bar.hbs\" } });\n});","define(\"a24-ember-menu/templates/components/sticky-header-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"DKl1qDH4\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bShowStickyHeader\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"sticky-header-component-float\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"sticky-header-component-header padding-left-double full-height font-lg a24-grey-text-darken-1 center-vertical-flex\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[22,[\\\"_objStickyHeaderService\\\",\\\"sHeader\\\"]],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-menu/templates/components/sticky-header-component.hbs\" } });\n});","define(\"a24-ember-policy-library/components/candidate-policy\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-policy-library/templates/components/candidate-policy\"], function (exports, _didRenderChangesMixin, _candidatePolicy) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _candidatePolicy.default,\n        classNames: [\"candidate-policy\"],\n        sCandidateId: null,\n        objPolicyGroupService: null,\n        _bLoading: false,\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objBreadcrumb: Ember.inject.service(\"bread-crumb\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objPolicyStringsService: Ember.inject.service(\"a24-strings-policy-library\"),\n        _objPolicyEnumsService: Ember.inject.service(\"a24-enums-policy-library\"),\n        _objPolicyRestService: Ember.inject.service(\"rest-agency-group-policy\"),\n        _objAgencyGroupCandidatePolicyRestService: Ember.inject.service(\"rest-agency-group-candidate-policy-type\"),\n        _objConstantsEmberLibService: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objRestCandidatePolicyGroupServiceProperty: null,\n        _arrResponseData: null,\n        _arrItems: null,\n        _sEmptyPoliciesMessage: null,\n        _arrFilterConfig: null,\n        _sHeaderPostfix: \"\",\n        _objQueryParams: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            // Call the breadcrumb item change\n            this.onBreadCrumbItemChange();\n            this.observeObjPolicyGroupService();\n        },\n        _bIsAgencyGroup: Ember.computed(\"objPolicyGroupService.sContext\", function () {\n            return this.get(\"objPolicyGroupService.sContext\") === this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\");\n        }),\n        onBreadCrumbItemChange: Ember.observer(\"_objBreadcrumb.arrBreadCrumbItems\", function () {\n            var arrBreadCrumbItems = this.get(\"_objBreadcrumb.arrBreadCrumbItems\");\n            if (!a24Core.isEmpty(arrBreadCrumbItems) && !this.get(\"_bIsAgencyGroup\")) {\n                this.set(\"_sHeaderPostfix\", \" - \" + arrBreadCrumbItems[arrBreadCrumbItems.length - 1].sTitle);\n            }\n        }),\n        observeObjPolicyGroupService: Ember.observer(\"objPolicyGroupService\", function () {\n            //Only do the service call if the current instance is not busy destroying\n            if (!a24Core.isEmpty(this)) {\n                this.setupPage();\n            }\n        }),\n        setupPage: function setupPage() {\n            this.set(\"_arrFilterConfig\", [{\n                sTitle: this.get(\"_objPolicyStringsService\").getString(\"policies\"),\n                sProperty: \"action\",\n                sFilterType: \"dropdown\",\n                arrMappingData: this.get(\"_objPolicyEnumsService\").getList(\"policies\").map(function (objEnum) {\n                    return {\n                        sTitle: objEnum.sLabel,\n                        sValue: objEnum.sValue\n                    };\n                }),\n                bHideEmptyCheck: true,\n                bMapping: true,\n                sFilterValue: this.get(\"_objPolicyEnumsService.policies.NOT_ACKNOWLEDGED.backend\")\n            }]);\n\n            this.set(\"_objQueryParams\", {\n                action: {\n                    bEncode: true,\n                    mValue: this.get(\"_objPolicyEnumsService.policies.NOT_ACKNOWLEDGED.backend\")\n                }\n            });\n\n            this.doServiceCall();\n        },\n        setEmptyPoliciesMessage: function setEmptyPoliciesMessage() {\n            var objQueryParams = this.get(\"_objQueryParams\");\n            if (!a24Core.isEmpty(objQueryParams.action)) {\n                this.set(\"_sEmptyPoliciesMessage\", this.get(\"_objPolicyStringsService\").getString(\"noPoliciesMatchFilterCriteria\"));\n            } else {\n                this.set(\"_sEmptyPoliciesMessage\", this.get(\"_objPolicyStringsService\").getString(\"noPoliciesAvailable\"));\n            }\n        },\n        doServiceCall: function doServiceCall() {\n            var _this = this;\n\n            var objSort = {\n                policy_type_title: {\n                    mValue: \"asc\",\n                    bSortBy: true\n                },\n                items_per_page: {\n                    mValue: 1000\n                }\n            };\n\n            // Set loading true\n            this.set(\"_bLoading\", true);\n\n            if (this.get(\"objPolicyGroupService.sContext\") === this.get(\"_objStaffshiftCoreConstants.CONTEXT_CANDIDATE\")) {\n                this.get(\"objPolicyGroupService\").getPolicyGroupDetails(this, \"_objRestCandidatePolicyGroupServiceProperty\", this.get(\"_objNavigationService\").get(\"objRouteParams\")[\"candidate.policy-group-list\"].policy_group_type, this.get(\"_objNavigationService\").get(\"objRouteParams\")[\"candidate.policy-group-list\"].policy_group_id, function (arrData) {\n                    _this.set(\"_arrResponseData\", arrData);\n                    _this.parseResponseData();\n                }, null, objSort);\n            } else {\n                this.get(\"objPolicyGroupService\").getPolicyGroupDetails(this, \"_objRestCandidatePolicyGroupServiceProperty\", this.get(\"sCandidateId\"), function (arrData) {\n                    _this.set(\"_arrResponseData\", arrData);\n                    _this.parseResponseData();\n                }, null, objSort);\n            }\n        },\n        parseResponseData: function parseResponseData() {\n            var arrData = this.get(\"_arrResponseData\");\n            var objQuery = this.get(\"_objQueryParams\");\n\n            var arrFinalData = [];\n            if (!a24Core.isEmpty(arrData)) {\n                for (var i = 0; i < arrData.length; i++) {\n                    var objItem = arrData[i];\n                    if (a24Core.isEmpty(objQuery.action) || objQuery.action.mValue === this.get(\"_objPolicyEnumsService.policies.READ_ONLY.backend\") && objItem.policy_type_classification === \"viewable\" || objQuery.action.mValue === this.get(\"_objPolicyEnumsService.policies.ACKNOWLEDGED.backend\") && objItem.policy_type_classification === \"acknowledgeable\" && !a24Core.isEmpty(objItem.acknowledged_policy) || objQuery.action.mValue === this.get(\"_objPolicyEnumsService.policies.NOT_ACKNOWLEDGED.backend\") && objItem.policy_type_classification === \"acknowledgeable\" && !a24Core.isEmpty(objItem.latest_policy)) {\n                        //These are all fine and allowed to be shown\n                    } else {\n                        //This means the item is filtered out.\n                        continue;\n                    }\n\n                    var objFormattedItem = {};\n\n                    if (!a24Core.isEmpty(objItem.latest_policy)) {\n                        // Latest Policy is present\n                        objFormattedItem.sTitle = objItem.policy_type_title;\n                        objFormattedItem.sDescription = objItem.policy_type_description;\n                        objFormattedItem.sIcon = \"priority_high\";\n                        objFormattedItem.sColor = \"warning-color\";\n                        objFormattedItem.sPolicyTypeId = objItem.policy_type_id;\n                        objFormattedItem.sVersion = objItem.latest_policy.version;\n                        if (!a24Core.isEmpty(objItem.acknowledged_policy)) {\n                            objFormattedItem.bHasSignedOutdated = true;\n                            objFormattedItem.sVersion = objItem.acknowledged_policy.version;\n                        }\n                    } else {\n                        // Latest Policy is not present\n                        objFormattedItem.sTitle = objItem.policy_type_title;\n                        objFormattedItem.sDescription = objItem.policy_type_description;\n                        objFormattedItem.sIcon = \"check\";\n                        objFormattedItem.sColor = \"success-color\";\n                        objFormattedItem.bAccepted = true;\n                        objFormattedItem.sPolicyTypeId = objItem.policy_type_id;\n                        objFormattedItem.sVersion = objItem.acknowledged_policy.version;\n                    }\n\n                    objFormattedItem.funcHeaderClickCallback = this.onHistoricItemClicked(objItem);\n\n                    if (objItem.policy_type_classification === \"viewable\") {\n                        objFormattedItem.sIcon = \"check\";\n                        objFormattedItem.sColor = \"grey\";\n                        objFormattedItem.bAccepted = false;\n                        objFormattedItem.bHasSignedOutdated = false;\n                        objFormattedItem.bReadOnly = true;\n                    }\n\n                    arrFinalData.push(objFormattedItem);\n                }\n            }\n\n            this.set(\"_arrItems\", arrFinalData);\n\n            // Set loading false\n            this.set(\"_bLoading\", false);\n\n            // Set empty message\n            if (a24Core.isEmpty(arrFinalData)) {\n                this.setEmptyPoliciesMessage();\n            }\n        },\n        onHistoricItemClicked: function onHistoricItemClicked(objItem) {\n            var objThis = this;\n            return function () {\n                var sVersion = \"\";\n                if (!a24Core.isEmpty(objItem.latest_policy)) {\n                    if (objThis.get(\"objPolicyGroupService.sContext\") === objThis.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\")) {\n                        sVersion = objItem.latest_policy.version;\n                    } else {\n                        sVersion = \"latest\";\n                    }\n                } else {\n                    sVersion = objItem.acknowledged_policy.version;\n                }\n\n                if (objThis.get(\"objPolicyGroupService.sContext\") === objThis.get(\"_objStaffshiftCoreConstants.CONTEXT_CANDIDATE\")) {\n                    var objParams = {\n                        \"policy-view\": [objThis.get(\"_objNavigationService\").get(\"objRouteParams\")[\"candidate.policy-group-list\"].policy_group_type, objThis.get(\"_objNavigationService\").get(\"objRouteParams\")[\"candidate.policy-group-list\"].policy_group_id, objItem.policy_type_id, sVersion]\n                    };\n                    objThis.get(\"_objNavigationService\").navigateWithinContext(\"policy-view\", objParams);\n                } else if (objThis.get(\"objPolicyGroupService.sContext\") === objThis.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\")) {\n                    objThis.get(\"_objSnackbarService\").showSnackbarMessage(objThis.get(\"_objStringsService\").getString(\"downloadPdf\"));\n\n                    if (!a24Core.isEmpty(objItem.acknowledged_policy)) {\n                        // This is to download the signed policy. We dont care about the latest policy in this case\n                        objThis.get(\"_objAgencyGroupCandidatePolicyRestService\").downloadPdfByGET(objItem.policy_type_id, objThis.get(\"sCandidateId\"), objItem.acknowledged_policy.version, function () {\n                            objThis.get(\"_objSnackbarService\").showSnackbarMessage(objThis.get(\"_objStringsService\").getString(\"downloadPdfFinish\"));\n                        }, function () {\n                            objThis.get(\"_objSnackbarService\").showSnackbarMessage(objThis.get(\"_objStringsService\").getString(\"downloadPdfFailed\"));\n                        });\n                    } else {\n                        // This is to download just the latest version\n                        objThis.get(\"_objPolicyRestService\").downloadPdfByGET(objItem.policy_type_id, sVersion, function () {\n                            objThis.get(\"_objSnackbarService\").showSnackbarMessage(objThis.get(\"_objStringsService\").getString(\"downloadPdfFinish\"));\n                        }, function () {\n                            objThis.get(\"_objSnackbarService\").showSnackbarMessage(objThis.get(\"_objStringsService\").getString(\"downloadPdfFailed\"));\n                        });\n                    }\n                }\n            };\n        },\n        buildFilterParams: function buildFilterParams(objFilterParams) {\n            if (a24Core.isEmpty(objFilterParams.action)) {\n                return objFilterParams;\n            }\n\n            if (objFilterParams.action.mValue === \"read_only\") {\n                delete objFilterParams.action;\n                objFilterParams.policy_type_classification = {\n                    mValue: \"viewable\"\n                };\n            } else {\n                objFilterParams.policy_type_classification = {\n                    mValue: \"acknowledgeable\"\n                };\n            }\n\n            return objFilterParams;\n        },\n        actions: {\n            cardDatagridFilterChangeEvent: function cardDatagridFilterChangeEvent(sProperty, objValue) {\n                this.set(\"_objQueryParams\", Ember.copy(objValue, true));\n                this.parseResponseData();\n            },\n            onOutdatedClick: function onOutdatedClick(objClickedItem) {\n                var _this2 = this;\n\n                if (this.get(\"objPolicyGroupService.sContext\") === this.get(\"_objStaffshiftCoreConstants.CONTEXT_CANDIDATE\")) {\n                    var objParams = {\n                        \"policy-view\": [this.get(\"_objNavigationService\").get(\"objRouteParams\")[\"candidate.policy-group-list\"].policy_group_type, this.get(\"_objNavigationService\").get(\"objRouteParams\")[\"candidate.policy-group-list\"].policy_group_id, objClickedItem.sPolicyTypeId, objClickedItem.sVersion]\n                    };\n                    this.get(\"_objNavigationService\").navigateWithinContext(\"policy-view\", objParams);\n                } else if (this.get(\"objPolicyGroupService.sContext\") === this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\")) {\n                    this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsService\").getString(\"downloadPdf\"));\n\n                    // This is to download the signed policy. We dont care about the latest policy in this case\n                    this.get(\"_objAgencyGroupCandidatePolicyRestService\").downloadPdfByGET(objClickedItem.sPolicyTypeId, this.get(\"sCandidateId\"), objClickedItem.sVersion, function () {\n                        _this2.get(\"_objSnackbarService\").showSnackbarMessage(_this2.get(\"_objStringsService\").getString(\"downloadPdfFinish\"));\n                    }, function () {\n                        _this2.get(\"_objSnackbarService\").showSnackbarMessage(_this2.get(\"_objStringsService\").getString(\"downloadPdfFailed\"));\n                    });\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-policy-library/components/page-candidate-policy-group-list\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-policy-library/templates/components/page-candidate-policy-group-list\"], function (exports, _didRenderChangesMixin, _pageCandidatePolicyGroupList) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _pageCandidatePolicyGroupList.default,\n        classNames: [\"page-candidate-policy-group-list\"],\n        _sCandidateId: null,\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objUserPolicyGroup: Ember.inject.service(\"rest-user-policy-group\"),\n        _objCandidatePolicyGroup: Ember.inject.service(\"rest-candidate-policy-group\"),\n        _objRestCandidatePolicyGroupService: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.observeRouteParams();\n        },\n        //We have to observe the route param. Since all policy groups are on the same route ember wont reload the component\n        //since ember only reloads the needed bits that change during route changes\n        observeRouteParams: Ember.observer(\"_objNavigationService.objRouteParams\", function () {\n            //Only do the service call if the current instance is not busy destroying and if we have\n            //a candidate policy group route\n            if (!a24Core.isEmpty(this) && !a24Core.isEmpty(this.get(\"_objNavigationService.objRouteParams\")[\"candidate.policy-group-list\"])) {\n                if (this.get(\"_objNavigationService\").get(\"objRouteParams\")[\"candidate.policy-group-list\"].policy_group_type === \"staffshift\") {\n                    this.set(\"_sCandidateId\", this.get(\"_objUserSession\").objAuthData.context.sUserId);\n                    this.set(\"_objRestCandidatePolicyGroupService\", this.get(\"_objUserPolicyGroup\"));\n                } else {\n                    this.set(\"_sCandidateId\", this.get(\"_objUserSession\").getUserContextReference().mId);\n                    this.set(\"_objRestCandidatePolicyGroupService\", this.get(\"_objCandidatePolicyGroup\"));\n                }\n            }\n        })\n    });\n});","define(\"a24-ember-policy-library/components/page-candidate-policy-view\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-policy-library/templates/components/page-candidate-policy-view\"], function (exports, _didRenderChangesMixin, _pageCandidatePolicyView) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _pageCandidatePolicyView.default,\n        classNames: [\"page-candidate-policy-view\"],\n\n        _objAjax: $.ajax,\n\n        _bLoading: false,\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objBreadCrumbService: Ember.inject.service(\"bread-crumb\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objPolicyStringsService: Ember.inject.service(\"a24-strings-policy-library\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objPolicyRestService: Ember.inject.service(\"rest-candidate-policy\"),\n        _objConstantsEmberLibService: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objUserPolicyRest: Ember.inject.service(\"rest-user-policy\"),\n        _objCandidatePolicyRest: Ember.inject.service(\"rest-candidate-policy\"),\n        _objRestCandidatePolicyServiceProperty: null,\n        _sTitle: \"\",\n        _sPolicyGroupType: \"\",\n        _sPolicyGroupId: \"\",\n        _sPolicyTypeId: \"\",\n        _sVersion: \"\",\n        _objData: null,\n        _bLatest: true,\n        _objDownloadAction: null,\n        _sContent: null,\n        _sPrompt: null,\n        _sContentCss: null,\n        _sPromptCss: null,\n        _sViewMoreText: null,\n        _bDisplayConfirmButton: false,\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"_sViewMoreText\", this.get(\"_objPolicyStringsService\").getString(\"clickHereViewPolicy\").toUpperCase());\n\n            this.observeRouteParams();\n        },\n        observeRouteParams: Ember.observer(\"_objNavigationService.objRouteParams\", function () {\n            //Only do the service call if the current instance is not busy destroying and if we have\n            //a candidate policy group route\n            if (!a24Core.isEmpty(this) && !a24Core.isEmpty(this.get(\"_objNavigationService.objRouteParams\")[\"candidate.policy-view\"])) {\n                var objPolicyViewParams = this.get(\"_objNavigationService.objRouteParams\")[\"candidate.policy-view\"];\n\n                this.set(\"_sPolicyGroupType\", objPolicyViewParams.policy_group_type);\n                this.set(\"_sPolicyGroupId\", objPolicyViewParams.policy_group_id);\n                this.set(\"_sPolicyTypeId\", objPolicyViewParams.policy_type_id);\n\n                if (objPolicyViewParams.policy_group_type === \"staffshift\") {\n                    this.set(\"_objPolicyRestService\", this.get(\"_objUserPolicyRest\"));\n                } else {\n                    this.set(\"_objPolicyRestService\", this.get(\"_objCandidatePolicyRest\"));\n                }\n                this.setupPage();\n            }\n        }),\n        setupPage: function setupPage() {\n            this.doServiceCall();\n        },\n        setAllData: function setAllData(objData) {\n            var _this = this;\n\n            Ember.run.schedule(\"afterRender\", function () {\n                Ember.run.next(function () {\n                    _this.set(\"_sVersion\", objData.version);\n\n                    var arrBreadCrumbItems = _this.get(\"_objBreadCrumbService.arrBreadCrumbItems\");\n                    var objThis = _this;\n\n                    _this.set(\"_bLatest\", objData.latest);\n\n                    // Set the content and prompt text\n                    _this.set(\"_sContent\", objData.content);\n                    if (objData.policy_type.classification === \"acknowledgeable\") {\n                        _this.set(\"_sPrompt\", objData.prompt);\n                    }\n\n                    if (!a24Core.isEmpty(objData.content_css)) {\n                        _this.set(\"_sContentCss\", objData.content_css);\n                    } else {\n                        // Blank out style for safety\n                        _this.set(\"_sContentCss\", \"\");\n                    }\n                    if (!a24Core.isEmpty(objData.prompt_css)) {\n                        _this.set(\"_sPromptCss\", objData.prompt_css);\n                    } else {\n                        // Blank out style for safety\n                        _this.set(\"_sPromptCss\", \"\");\n                    }\n\n                    // Set the confirm button if needed\n                    if (objData.latest && objData.action) {\n                        var bIsAcknowledged = objData.action.isAny(\"action_type\", \"acknowledged\");\n                        var bIsAcknowledgeable = objData.policy_type.classification === \"acknowledgeable\";\n                        _this.set(\"_bDisplayConfirmButton\", !bIsAcknowledged && bIsAcknowledgeable);\n                    }\n\n                    _this.set(\"_objDownloadAction\", {\n                        sTitle: _this.get(\"_objStringsService\").getString(\"download\"),\n                        sIcon: \"get_app\",\n                        executeCardAction: function executeCardAction() {\n                            objThis.get(\"_objSnackbarService\").showSnackbarMessage(objThis.get(\"_objStringsService\").getString(\"downloadPdf\"));\n\n                            objThis.get(\"_objPolicyRestService\").downloadPdfByGET(objThis.get(\"_sPolicyTypeId\"), objThis.get(\"_sVersion\"), objData.policy_type.title + \".pdf\", function () {\n                                objThis.get(\"_objSnackbarService\").showSnackbarMessage(objThis.get(\"_objStringsService\").getString(\"downloadPdfFinish\"));\n                            }, function () {\n                                objThis.get(\"_objSnackbarService\").showSnackbarMessage(objThis.get(\"_objStringsService\").getString(\"downloadPdfFailed\"));\n                            });\n                        }\n                    });\n\n                    // Set the Title\n                    _this.set(\"_sTitle\", _this.get(\"_objStringsService\").getHTMLTokenString(\"a24-string-html-span\", objData.policy_type.title, \"(\" + objData.display_version + \")\"));\n\n                    // Set the breadcrumb\n                    var arrCurrentBreadCrumb = [{\n                        sLink: _this.get(\"_objNavigationService\").navigateWithinContext(\"policy-group-list\", {\n                            \"policy-group-list\": [_this.get(\"_sPolicyGroupType\"), _this.get(\"_sPolicyGroupId\")]\n                        }, null, true),\n                        sTitle: _this.get(\"_objPolicyStringsService\").getString(\"policies\")\n                    }, {\n                        sLink: _this.get(\"_objNavigationService\").navigateWithinContext(\"policy-group-list\", {\n                            \"policy-group-list\": [_this.get(\"_sPolicyGroupType\"), _this.get(\"_sPolicyGroupId\")]\n                        }, null, true),\n                        sTitle: arrBreadCrumbItems[arrBreadCrumbItems.length - 1].sTitle\n                    }, {\n                        sLink: _this.get(\"_objNavigationService\").navigateWithinContext(\"policy-view\", {\n                            \"policy-view\": [_this.get(\"_sPolicyGroupType\"), _this.get(\"_sPolicyGroupId\"), _this.get(\"_sPolicyTypeId\"), _this.get(\"_objNavigationService\").get(\"objRouteParams\")[\"candidate.policy-view\"].version]\n                        }, null, true),\n                        sTitle: objData.policy_type.title\n                    }];\n\n                    _this.get(\"_objBreadCrumbService\").setCustomBreadItems(arrCurrentBreadCrumb);\n\n                    // Set the default items so that the custom can be applied\n                    _this.get(\"_objBreadCrumbService\").setBreadCrumbItems();\n                });\n            });\n        },\n        doServiceCall: function doServiceCall() {\n            var _this2 = this;\n\n            // Set loading true\n            this.set(\"_bLoading\", true);\n\n            this.get(\"_objPolicyRestService\").getPolicyDetails(this, \"_objRestCandidatePolicyServiceProperty\", this.get(\"_objNavigationService\").get(\"objRouteParams\")[\"candidate.policy-view\"].policy_type_id, this.get(\"_objNavigationService\").get(\"objRouteParams\")[\"candidate.policy-view\"].version, function (objData) {\n                _this2.setAllData(objData);\n                _this2.set(\"_bLoading\", false);\n            });\n        },\n\n        getIpAddress: function getIpAddress(funcCallback) {\n            this.get(\"_objAjax\")({\n                url: \"https://api.ipify.org?format=json\",\n                cache: true,\n                dataType: \"json\"\n            }).always(function (sResponse) {\n                funcCallback(sResponse);\n            });\n        },\n\n        actions: {\n            backButtonAction: function backButtonAction() {\n                this.get(\"_objNavigationService\").navigateWithinContext(\"policy-group-list\", {\n                    \"policy-group-list\": [this.get(\"_sPolicyGroupType\"), this.get(\"_sPolicyGroupId\")]\n                });\n            },\n            confirmButtonAction: function confirmButtonAction() {\n                var _this3 = this;\n\n                this.set(\"_bLoading\", true);\n\n                this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objPolicyStringsService\").getString(\"updatingPolicy\"));\n\n                var funcDownloadPdf = function funcDownloadPdf(objResponse) {\n\n                    var sIpAddress = null;\n                    if (!a24Core.isEmpty(objResponse.ip)) {\n                        sIpAddress = objResponse.ip;\n                    }\n                    var objBody = _this3.get(\"_objPolicyRestService\").getConfirmationPostBody(\"acknowledged\", sIpAddress);\n\n                    _this3.get(\"_objPolicyRestService\").postPolicyDetailsAction(_this3, \"_objRestCandidatePolicyServiceProperty\", _this3.get(\"_objNavigationService\").get(\"objRouteParams\")[\"candidate.policy-view\"].policy_type_id, _this3.get(\"_sVersion\"), function () /*objData*/{\n                        _this3.get(\"_objSnackbarService\").showSnackbarMessage(_this3.get(\"_objPolicyStringsService\").getString(\"acceptedPolicy\"));\n                        _this3.get(\"_objNavigationService\").navigateWithinContext(\"policy-group-list\", {\n                            \"policy-group-list\": [_this3.get(\"_sPolicyGroupType\"), _this3.get(\"_sPolicyGroupId\")]\n                        });\n                    }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () {\n                        _this3.set(\"_bLoading\", false);\n                        _this3.get(\"_objSnackbarService\").showSnackbarMessage(_this3.get(\"_objPolicyStringsService\").getString(\"failurePolicy\"));\n                    }), objBody);\n                };\n\n                this.getIpAddress(funcDownloadPdf);\n            }\n        }\n    });\n});","define(\"a24-ember-policy-library/components/page-policy-add-edit\", [\"exports\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-policy-library/templates/components/page-policy-add-edit\"], function (exports, _inputFormElement, _didRenderChangesMixin, _pagePolicyAddEdit) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _pagePolicyAddEdit.default,\n        sPolicyId: null,\n        sPolicyRestService: \"rest-agency-group-policy\",\n        sPolicyTypeRestService: \"rest-agency-group-policy-type\",\n\n        _objAjax: $.ajax,\n\n        _bLoading: true,\n        _bShowUnsavedData: false,\n        _objOriginalData: null,\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objBreadCrumbService: Ember.inject.service(\"bread-crumb\"),\n        _objPolicyRestService: Ember.computed(\"sPolicyRestService\", function () {\n            return Ember.getOwner(this).lookup(\"service:\" + this.get(\"sPolicyRestService\"));\n        }),\n        _objPolicyTypeRestService: Ember.computed(\"sPolicyTypeRestService\", function () {\n            return Ember.getOwner(this).lookup(\"service:\" + this.get(\"sPolicyTypeRestService\"));\n        }),\n        _objRestAgencyGroupPolicyProperty: null,\n        _objRestAgencyGroupPolicyTypeProperty: null,\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objPolicyStringsService: Ember.inject.service(\"a24-strings-policy-library\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objConstantsEmberLibService: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _iNewVersion: 1,\n        _arrAdditionalCssFiles: null,\n\n        // The starting values of the inputs.\n\n        _bPromptVisible: true,\n        //The starting values of the inputs\n        _sContentValue: null,\n        _sPromptValue: null,\n        _sEffectiveFromValue: null,\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.set(\"_arrAdditionalCssFiles\", [\"/assets/custom_policy.css\"]);\n\n            this.set(\"_arrActions\", [{\n                sTitle: this.get(\"_objStringsService\").getString(\"add\"),\n                sIcon: \"add\",\n                executeCardAction: function executeCardAction() {\n                    //Clean up the popup input before showing\n                    _this.set(\"_sInputPolicyTitle\", null);\n                    _this.set(\"_sInputPolicyDesc\", null);\n                    _this.set(\"_bAddPopupLoading\", false);\n\n                    _this.clearAllErrorMessages();\n\n                    _this.set(\"_bAddPopupShow\", true);\n                }\n            }]);\n\n            // Set up the form children\n            this.set(\"objChildConfig\", {\n                \"objChildren.content.html\": function objChildrenContentHtml(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                },\n                \"objChildren.prompt.html\": function objChildrenPromptHtml(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                },\n                \"objChildren.effective_at\": function objChildrenEffective_at(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                }\n            });\n\n            var objDoGetLatestPolicy = this.doGetLatestPolicy();\n            var funcGetPolicyTypeDetailsCallback = function funcGetPolicyTypeDetailsCallback() {\n                // Handled in RSVP\n            };\n            var objDoGetPolicyTypeDetailsCall = this.doGetPolicyTypeDetailsCall(funcGetPolicyTypeDetailsCallback);\n\n            if (a24Core.isEmpty(this.get(\"sPolicyId\"))) {\n                a24RSVP.configure(this, {\n                    \"_objDoGetLatestPolicy\": objDoGetLatestPolicy,\n                    \"_objDoGetPolicyTypeDetailsCall\": objDoGetPolicyTypeDetailsCall\n                }, [{\n                    arrRequiredResponses: [\"_objDoGetLatestPolicy\", \"_objDoGetPolicyTypeDetailsCall\"],\n                    funcOnComplete: function funcOnComplete(objPromiseResponse) {\n                        Ember.run.next(function () {\n                            _this.setupFormData(objPromiseResponse[\"_objDoGetLatestPolicy\"].objResponse);\n                        });\n\n                        if (!a24Core.isEmpty(objPromiseResponse[\"_objDoGetPolicyTypeDetailsCall\"].objResponse)) {\n                            _this.setPageBreadCrumbItems(objPromiseResponse[\"_objDoGetPolicyTypeDetailsCall\"].objResponse);\n                            _this.setClassificationFields(objPromiseResponse[\"_objDoGetPolicyTypeDetailsCall\"].objResponse);\n                        }\n                        _this.set(\"_bLoading\", false);\n                    }\n                }]);\n            } else {\n                //Here we can start doing things related to the edit state of this page\n                funcGetPolicyTypeDetailsCallback = function funcGetPolicyTypeDetailsCallback(objResponse) {\n                    _this.setPageBreadCrumbItems(objResponse);\n                    _this.setClassificationFields(objResponse);\n                    _this.set(\"_bLoading\", false);\n                };\n                this.doGetPolicyTypeDetailsCall(funcGetPolicyTypeDetailsCallback);\n            }\n        },\n        doGetLatestPolicy: function doGetLatestPolicy() {\n            var sPolicyTypeId = this.get(\"_objPolicyRestService\").getPolicyTypeAddId();\n            if (!a24Core.isEmpty(sPolicyTypeId)) {\n                return this.get(\"_objPolicyRestService\").getPoliciesForPolicyType(this, \"_objRestAgencyGroupPolicyProperty\", this.get(\"_objUserSession\").getUserContextReference().mId, sPolicyTypeId, function () /*objResponse*/{\n                    // handled in RSVP\n                }, null, {\n                    items_per_page: {\n                        mValue: \"1\"\n                    }\n                }, false);\n            }\n        },\n        doGetPolicyTypeDetailsCall: function doGetPolicyTypeDetailsCall(funcSuccessCallback) {\n            var sPolicyTypeId = this.get(\"_objPolicyRestService\").getPolicyTypeAddId();\n            if (!a24Core.isEmpty(sPolicyTypeId)) {\n                return this.get(\"_objPolicyTypeRestService\").getPolicyType(this, \"_objRestAgencyGroupPolicyTypeProperty\", this.get(\"_objUserSession\").getUserContextReference().mId, sPolicyTypeId, funcSuccessCallback);\n            }\n        },\n        setPageBreadCrumbItems: function setPageBreadCrumbItems(objResponse) {\n            var _this2 = this;\n\n            Ember.run.scheduleOnce(\"afterRender\", function () {\n                var sPolicyTypeId = _this2.get(\"_objPolicyRestService\").getPolicyTypeAddId();\n                if (a24Core.isEmpty(sPolicyTypeId)) {\n                    return;\n                }\n                var arrCurrentBreadCrumb = [{\n                    sLink: _this2.get(\"_objNavigationService\").navigateWithinContext(\"policy-type-list\", null, null, true),\n                    sTitle: _this2.get(\"_objPolicyStringsService\").getString(\"policies\")\n                }, {\n                    sLink: _this2.get(\"_objNavigationService\").navigateWithinContext(\"policy-type-view\", {\n                        \"policy-type-view\": [sPolicyTypeId]\n                    }, null, true),\n                    sTitle: objResponse.title\n                }, {\n                    sLink: _this2.get(\"_objNavigationService\").navigateWithinContext(\"policy-add\", {\n                        \"policy-add\": [sPolicyTypeId]\n                    }, null, true),\n                    sTitle: _this2.get(\"_objPolicyStringsService\").getString(\"createPolicyVersion\")\n                }];\n\n                _this2.get(\"_objBreadCrumbService\").setCustomBreadItems(arrCurrentBreadCrumb);\n\n                // Set the default items so that the custom can be applied\n                _this2.get(\"_objBreadCrumbService\").setBreadCrumbItems();\n            });\n        },\n        setClassificationFields: function setClassificationFields(objData) {\n            if (objData.classification !== \"acknowledgeable\") {\n                this.set(\"_bPromptVisible\", false);\n            } else {\n                this.set(\"_bPromptVisible\", true);\n            }\n        },\n        setupFormData: function setupFormData(arrData) {\n            var _this3 = this;\n\n            var objData = null;\n            if (!a24Core.isEmpty(arrData)) {\n                // The first item will be the latest since the getPoliciesForPolicyType does sort by on version\n                objData = arrData[0];\n                this.set(\"_iNewVersion\", objData.version + 1);\n            }\n\n            if (!a24Core.isEmpty(objData)) {\n                //Format data for rest post\n                var objDateManager = a24DateManager.createDate(this.get(\"_objUserSession\").get(\"objContextDetails.sTimezone\"));\n                objDateManager.setDateFromRest(objData.effective_at);\n\n                this.set(\"_sContentValue\", objData.content.html);\n\n                if (!a24Core.isEmpty(objData.prompt)) {\n                    this.set(\"_sPromptValue\", objData.prompt.html);\n                }\n\n                this.set(\"_sEffectiveFromValue\", objDateManager.getDateFormat());\n            }\n\n            this.set(\"_bLoading\", false);\n\n            Ember.run.next(function () {\n                Ember.run.schedule(\"afterRender\", function () {\n                    _this3.set(\"_objOriginalData\", _this3.getPlainFormValueObject());\n                });\n            });\n        },\n        formatPayload: function formatPayload() {\n            var objPayload = this.getPlainFormValueObject();\n            var sPolicyTypeId = this.get(\"_objPolicyRestService\").getPolicyTypeAddId();\n            if (a24Core.isEmpty(sPolicyTypeId)) {\n                return;\n            }\n            objPayload.policy_type_id = sPolicyTypeId;\n\n            //Format data for rest post\n            var objDateManager = a24DateManager.createDate(this.get(\"_objUserSession\").get(\"objContextDetails.sTimezone\"));\n            objDateManager.setDateFromBrowser(objPayload.effective_at, this.get(\"_objConstantsEmberLibService\").DATE_FORMAT);\n            objPayload.effective_at = objDateManager.getDateStringForRest();\n\n            return objPayload;\n        },\n        navigateToViewPage: function navigateToViewPage() {\n            var sPolicyTypeId = this.get(\"_objPolicyRestService\").getPolicyTypeAddId();\n            if (a24Core.isEmpty(sPolicyTypeId)) {\n                return;\n            }\n            //policy-type-view\n            this.get(\"_objNavigationService\").navigateWithinContext(\"policy-type-view\", {\n                \"policy-type-view\": [sPolicyTypeId]\n            });\n        },\n        getCSSPayload: function getCSSPayload(funcCallback, funcError) {\n            $.ajax(this.get(\"_arrAdditionalCssFiles\")[0]).then(function (sContent) {\n                funcCallback(sContent);\n            }, function (objErr) {\n                funcError(objErr);\n            });\n        },\n\n        getIpAddress: function getIpAddress(funcCallback) {\n            this.get(\"_objAjax\")({\n                url: \"https://api.ipify.org?format=json\",\n                cache: true,\n                dataType: \"json\"\n            }).always(function (sResponse) {\n                funcCallback(sResponse);\n            });\n        },\n\n        actions: {\n            onSave: function onSave() {\n                var _this4 = this;\n\n                if (!this.doFullValidation()) {\n                    this.set(\"_bLoading\", true);\n\n                    this.getCSSPayload(function (sCssContent) {\n                        var objPayload = _this4.formatPayload();\n                        objPayload.content.css = sCssContent;\n                        if (_this4.get(\"_bPromptVisible\")) {\n                            objPayload.prompt.css = sCssContent;\n                        }\n\n                        _this4.get(\"_objSnackbarService\").showSnackbarMessage(_this4.get(\"_objPolicyStringsService\").getString(\"creatingPolicyVersion\"));\n                        _this4.get(\"_objPolicyRestService\").createPolicy(_this4, \"_objRestAgencyGroupPolicyTypeProperty\", _this4.get(\"_objUserSession\").getUserContextReference().mId, function () {\n                            _this4.get(\"_objSnackbarService\").showSnackbarMessage(_this4.get(\"_objPolicyStringsService\").getString(\"creatingPolicyVersionSuccess\"));\n                            _this4.navigateToViewPage();\n                        }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode, sStatus, objErrorThrown, objError) {\n                            if (objError.arrPath[objError.arrPath.length - 1] === \"html\") {\n                                objError.arrPath = [objError.arrPath.join(\".\")];\n                            }\n\n                            if (sCode === \"EFFECTIVE_AT_BEFORE_PREVIOUS_VERSION\") {\n                                _this4.setResponseError(objError.arrPath, \"validationEffectiveAtBeforePrev\", false, false, _this4.get(\"_objPolicyStringsService\"));\n                            } else if (sCode === \"EFFECTIVE_AT_IN_THE_PAST\") {\n                                _this4.setResponseError(objError.arrPath, \"validationDateInPast\");\n                            } else if (sCode === \"MIN_LENGTH\") {\n                                _this4.setResponseError(objError.arrPath, \"validationRestMinLength\");\n                            } else if (sCode === \"MAX_LENGTH\") {\n                                _this4.setResponseError(objError.arrPath, \"validationRestMaxLength\");\n                            } else if (sCode === \"PATTERN\") {\n                                _this4.setResponseError(objError.arrPath, \"validationRestInvalidChar\");\n                            } else if (sCode === \"POLICY_TYPE_ALREADY_IN_USE\") {\n                                _this4.get(\"_objSnackbarService\").showSnackbarMessage(_this4.get(\"_objPolicyStringsService\").getString(\"createPolicyVersionClassificationDiffers\"));\n                            } else {\n                                _this4.get(\"_objSnackbarService\").showSnackbarMessage(_this4.get(\"_objPolicyStringsService\").getString(\"creatingPolicyVersionFailed\"));\n                            }\n\n                            _this4.set(\"_bLoading\", false);\n                        }), objPayload);\n                    }, function () {\n\n                        _this4.get(\"_objSnackbarService\").showSnackbarMessage(_this4.get(\"_objPolicyStringsService\").getString(\"creatingPolicyVersionFailed\"));\n\n                        _this4.set(\"_bLoading\", false);\n                    });\n                }\n            },\n            onCancel: function onCancel() {\n\n                // Check if the form has any unsaved data\n                var bDataMatches = a24Core.compareObjects(Ember, this.getPlainFormValueObject(), this.get(\"_objOriginalData\"));\n\n                if (bDataMatches) {\n                    this.navigateToViewPage();\n                } else {\n                    this.set(\"_bShowUnsavedData\", true);\n                }\n            },\n            onDownloadPDFPreview: function onDownloadPDFPreview() {\n                var _this5 = this;\n\n                if (!this.doFullValidation()) {\n                    this.getCSSPayload(function (sCssContent) {\n\n                        _this5.get(\"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objStringsService\").getString(\"downloadPdf\"));\n                        var objPayload = _this5.formatPayload();\n\n                        var sFullName = _this5.get(\"_objUserSession\").getUserFullName();\n                        var sEmailAddress = _this5.get(\"_objUserSession\").getUserEmail();\n                        var sCurrentDateTime = momentHelper.getCurrentDateString(_this5.get(\"_objConstantsEmberLibService\").DATE_FORMAT_ISO_FORMAT);\n\n                        // get ip here and pass it along\n                        var funcDownloadPdf = function funcDownloadPdf(objResponse) {\n                            var sIpAddress = \"\";\n                            if (!a24Core.isEmpty(objResponse.ip)) {\n                                sIpAddress = objResponse.ip;\n                            }\n                            // payload to send to the pdf preview function call\n                            var objPayloadForPdf = {\n                                content: objPayload.content.html,\n                                content_css: sCssContent,\n                                prompt_css: sCssContent,\n                                tokens: {\n                                    effective_at: objPayload.effective_at,\n                                    actioned_at: sCurrentDateTime,\n                                    candidate_full_name: sFullName,\n                                    candidate_email: sEmailAddress,\n                                    ip_address: sIpAddress\n                                }\n                            };\n\n                            if (_this5.get(\"_bPromptVisible\")) {\n                                objPayloadForPdf.prompt = objPayload.prompt.html;\n                            }\n\n                            _this5.get(\"_objPolicyRestService\").downloadPdfByPOST(objPayload.policy_type_id, _this5.get(\"_iNewVersion\"), function () {\n                                _this5.get(\"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objStringsService\").getString(\"downloadPdfFinish\"));\n                            }, function () {\n                                _this5.get(\"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objStringsService\").getString(\"downloadPdfFailed\"));\n                            }, objPayloadForPdf);\n                        };\n\n                        _this5.getIpAddress(funcDownloadPdf);\n                    }, function () {\n                        _this5.get(\"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objStringsService\").getString(\"downloadPdfFailed\"));\n                    });\n                }\n            },\n            onPopupUnsavedConfirm: function onPopupUnsavedConfirm() {\n                this.navigateToViewPage();\n            }\n        }\n    });\n});","define(\"a24-ember-policy-library/components/page-policy-type-list\", [\"exports\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-policy-library/templates/components/page-policy-type-list\"], function (exports, _inputFormElement, _didRenderChangesMixin, _pagePolicyTypeList) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _pagePolicyTypeList.default,\n        classNames: [\"page-agency-group-policy-type-list\"],\n        objSelectedClassification: null,\n        sPolicyTypeRestService: \"rest-agency-group-policy-type\",\n        sPolicyRestService: \"rest-agency-group-policy\",\n\n        _bLoading: false,\n        _arrActions: null,\n        _bAddPopupShow: false,\n        _bAddPopupLoading: false,\n        _bShowUnsavedData: false,\n        _arrItems: null,\n        _sInputPolicyTitle: null,\n        _sInputPolicyDesc: null,\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objPolicyTypeRestService: Ember.computed(\"sPolicyTypeRestService\", function () {\n            return Ember.getOwner(this).lookup(\"service:\" + this.get(\"sPolicyTypeRestService\"));\n        }),\n        _objPolicyRestService: Ember.computed(\"sPolicyRestService\", function () {\n            return Ember.getOwner(this).lookup(\"service:\" + this.get(\"sPolicyRestService\"));\n        }),\n        _objRestAgencyGroupPolicyTypeProperty: null,\n        _objRestAgencyGroupPolicyProperty: null,\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objPolicyStringsService: Ember.inject.service(\"a24-strings-policy-library\"),\n        _objPolicyEnumsService: Ember.inject.service(\"a24-enums-policy-library\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objFabButtonService: Ember.inject.service(\"fab-button\"),\n        _objConstantsEmberLibService: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objOriginalData: null,\n        _objQueryParams: null,\n        _arrClassificationDropdown: null,\n        _arrPolicyVersionData: null,\n        _arrFilterConfig: null,\n        _iResultCount: 0,\n        _iPage: 1,\n        _iPerPage: 25,\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.set(\"_arrFilterConfig\", [{\n                sTitle: \"Classification\",\n                sProperty: \"classification\",\n                sFilterType: \"dropdown\",\n                arrMappingData: [{\n                    sValue: \"acknowledgeable\",\n                    sTitle: this.get(\"_objPolicyEnumsService\").getFrontendValue(\"classification\", \"acknowledgeable\")\n                }, {\n                    sValue: \"viewable\",\n                    sTitle: this.get(\"_objPolicyEnumsService\").getFrontendValue(\"classification\", \"viewable\")\n                }],\n                bHideEmptyCheck: true,\n                bMapping: true\n            }]);\n\n            this.get(\"_objFabButtonService\").showFabButton(function () {\n                _this.showAddPopup();\n            });\n\n            this.setInitialDropdownPopupData();\n\n            // Set up the form children\n            this.set(\"objChildConfig\", {\n                \"objChildren.title\": function objChildrenTitle(objMixin) {\n                    a24Validation.addMinLength(objMixin, 3);\n                    a24Validation.addMaxLength(objMixin, 255);\n                    a24Validation.addRequired(objMixin, true);\n                },\n                \"objChildren.description\": function objChildrenDescription(objMixin) {\n                    a24Validation.addMinLength(objMixin, 3);\n                    a24Validation.addMaxLength(objMixin, 1000);\n                    a24Validation.addRequired(objMixin, true);\n                },\n                \"objChildren.classification\": function objChildrenClassification(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                }\n            });\n\n            this.set(\"_objSpecialAddPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this.send(\"onPopupAddCancel\");\n                }\n            });\n\n            this.doPolicyTypeListServiceCall();\n        },\n        doPolicyTypeListServiceCall: function doPolicyTypeListServiceCall(objQueryParams) {\n            var _this2 = this;\n\n            if (a24Core.isEmpty(objQueryParams)) {\n                objQueryParams = {\n                    page: { mValue: this.get(\"_iPage\") },\n                    items_per_page: { mValue: this.get(\"_iPerPage\") }\n                };\n            }\n\n            // Save the current query params for later use\n            this.set(\"_objQueryParams\", Ember.copy(objQueryParams, true));\n\n            this.set(\"_bLoading\", true);\n\n            this.get(\"_objPolicyTypeRestService\").getPolicyTypes(this, \"_objRestAgencyGroupPolicyTypeProperty\", this.get(\"_objUserSession\").getUserContextReference().mId, function (arrData, sStatus, objXHR) {\n                if (!a24Core.isEmpty(arrData)) {\n                    _this2.formatResponseData(arrData);\n                } else {\n                    _this2.formatResponseData([]);\n                }\n\n                // Set the result count\n                _this2.set(\"_iResultCount\", a24RestCallHelper.getXResultCount(objXHR));\n\n                _this2.set(\"_bLoading\", false);\n            }, null, objQueryParams);\n        },\n        setInitialDropdownPopupData: function setInitialDropdownPopupData() {\n            this.set(\"_arrClassificationDropdown\", this.get(\"_objPolicyEnumsService\").getList(\"classification\"));\n        },\n\n        formatResponseData: function formatResponseData(arrData) {\n            var sPolicyTypeId = null;\n            var objThis = this;\n            var funcCardActionExecute = function funcCardActionExecute(sId) {\n                return function () {\n                    objThis.get(\"_objNavigationService\").navigateWithinContext(\"policy-type-view\", {\n                        \"policy-type-view\": [sId]\n                    });\n                };\n            };\n            for (var i = 0; i < arrData.length; i++) {\n                sPolicyTypeId = arrData[i]._id;\n                arrData[i].sItemCollapseId = Ember.guidFor({});\n                arrData[i].bPoliciesCallStarted = false;\n                arrData[i].arrCollapseActions = [{\n                    sTitle: this.get(\"_objStringsService\").getString(\"edit\"),\n                    sIcon: \"mode_edit\",\n                    executeCardAction: funcCardActionExecute(sPolicyTypeId)\n                }];\n\n                arrData[i].sOptionList = \"\";\n                var arrOptions = [];\n                if (!a24Core.isEmpty(arrData[i].options)) {\n                    if (!a24Core.isEmpty(arrData[i].options.public_policy) && arrData[i].options.public_policy) {\n                        arrOptions.push(this.get(\"_objPolicyStringsService\").getString(\"public\"));\n                    }\n                    if (!a24Core.isEmpty(arrData[i].options.registration_policy) && arrData[i].options.registration_policy) {\n                        arrOptions.push(this.get(\"_objPolicyStringsService\").getString(\"registration\"));\n                    }\n                }\n                arrData[i].sOptionList = arrOptions.join(\", \");\n            }\n            this.set(\"_arrItems\", arrData);\n        },\n        getPolicyTypeVersions: function getPolicyTypeVersions(objPolicyType) {\n            var _this3 = this;\n\n            Ember.set(objPolicyType, \"bPoliciesCallStarted\", true);\n\n            this.get(\"_objPolicyRestService\").getPoliciesForPolicyType(this, \"_objRestAgencyGroupPolicyProperty\", this.get(\"_objUserSession\").getUserContextReference().mId, objPolicyType._id, function (arrData) {\n                var arrPolicies = [];\n                var sStatus = \"\";\n\n                if (!a24Core.isEmpty(arrData)) {\n\n                    var funcGetDownloadActionCallback = function funcGetDownloadActionCallback(iPolicyTypeId, iVersion) {\n                        return function () {\n                            _this3.downloadPDFPreview(iPolicyTypeId, iVersion);\n                        };\n                    };\n                    for (var i = 0; i < arrData.length; i++) {\n\n                        sStatus = arrData[i].active ? _this3.get(\"_objStringsService\").getString(\"active\") : _this3.get(\"_objStringsService\").getString(\"inactive\");\n                        var iVersion = arrData[i].version;\n                        var objDate = a24DateManager.createDate(_this3.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                        objDate.setDateFromRest(arrData[i].effective_at, true);\n\n                        arrPolicies.push({\n                            sSubHeader: arrData[i].display_version,\n                            iVersion: iVersion,\n                            iPolicyTypeId: objPolicyType._id,\n                            arrExtraData: [{\n                                arrItems: [{\n                                    sLabel: _this3.get(\"_objStringsService\").getString(\"status\"),\n                                    sValue: sStatus,\n                                    bText: true\n                                }, {\n                                    sLabel: _this3.get(\"_objStringsService\").getString(\"effectiveAt\"),\n                                    sValue: objDate.getDateFormat(),\n                                    bDate: true\n                                }]\n                            }],\n                            arrActions: [{\n                                sTitle: _this3.get(\"_objStringsService\").getString(\"downloadPdfPreview\"),\n                                sIcon: \"get_app\",\n                                executeCardAction: funcGetDownloadActionCallback(objPolicyType._id, iVersion)\n                            }]\n                        });\n                    }\n                }\n\n                Ember.set(objPolicyType, \"arrPolicies\", arrPolicies);\n                Ember.set(objPolicyType, \"bPoliciesCallDone\", true);\n            });\n        },\n        downloadPDFPreview: function downloadPDFPreview(iPolicyTypeId, iVersion) {\n            var _this4 = this;\n\n            this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsService\").getString(\"downloadPdf\"));\n\n            this.get(\"_objPolicyRestService\").downloadPdfByGET(iPolicyTypeId, iVersion, function () {\n                _this4.get(\"_objSnackbarService\").showSnackbarMessage(_this4.get(\"_objStringsService\").getString(\"downloadPdfFinish\"));\n            }, function () {\n                _this4.get(\"_objSnackbarService\").showSnackbarMessage(_this4.get(\"_objStringsService\").getString(\"downloadPdfFailed\"));\n            });\n        },\n        showAddPopup: function showAddPopup() {\n            var _this5 = this;\n\n            this.set(\"_bAddPopupShow\", true);\n\n            Ember.run.next(function () {\n                //Clean up the popup input before showing\n                _this5.clearForm();\n                _this5.clearAllErrorMessages();\n                _this5.set(\"_bAddPopupLoading\", false);\n\n                Ember.run.next(function () {\n                    Ember.run.schedule(\"afterRender\", function () {\n                        _this5.set(\"_objOriginalData\", _this5.getPlainFormValueObject());\n                    });\n                });\n            });\n        },\n        actions: {\n            onPopupAddConfirm: function onPopupAddConfirm() {\n                var _this6 = this;\n\n                if (!this.doFullValidation()) {\n                    this.set(\"_bAddPopupLoading\", true);\n\n                    this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objPolicyStringsService\").getString(\"creatingPolicy\"));\n                    this.get(\"_objPolicyTypeRestService\").createPolicyType(this, \"_objRestAgencyGroupPolicyTypeProperty\", this.get(\"_objUserSession\").getUserContextReference().mId, function () {\n                        _this6.doPolicyTypeListServiceCall(_this6.get(\"_objQueryParams\"));\n                        _this6.set(\"_bAddPopupShow\", false);\n                        _this6.get(\"_objSnackbarService\").showSnackbarMessage(_this6.get(\"_objPolicyStringsService\").getString(\"creatingPolicySuccess\"));\n                    }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode, sStatus, objErrorThrown, objError) {\n                        if (sCode === \"MIN_LENGTH\") {\n                            _this6.setResponseError(objError.arrPath, \"validationRestMinLength\");\n                        } else if (sCode === \"MAX_LENGTH\") {\n                            _this6.setResponseError(objError.arrPath, \"validationRestMaxLength\");\n                        } else if (sCode === \"PATTERN\") {\n                            _this6.setResponseError(objError.arrPath, \"validationRestInvalidChar\");\n                        } else {\n                            _this6.get(\"_objSnackbarService\").showSnackbarMessage(_this6.get(\"_objPolicyStringsService\").getString(\"creatingPolicyFailed\"));\n                        }\n                        _this6.set(\"_bAddPopupLoading\", false);\n                    }), this.getPlainFormValueObject());\n                }\n            },\n            onPopupAddCancel: function onPopupAddCancel() {\n                // Check if the form has any unsaved data\n                var bDataMatches = a24Core.compareObjects(Ember, this.getPlainFormValueObject(), this.get(\"_objOriginalData\"));\n\n                if (bDataMatches) {\n                    this.set(\"_bAddPopupShow\", false);\n                } else {\n                    this.set(\"_bShowUnsavedData\", true);\n                }\n            },\n            onPopupUnsavedConfirm: function onPopupUnsavedConfirm() {\n                this.set(\"_bAddPopupShow\", false);\n                this.set(\"_bShowUnsavedData\", false);\n            },\n            onCollapseExpandStart: function onCollapseExpandStart(sCollapseId) {\n                var arrPolicyTypesData = this.get(\"_arrItems\");\n                var objPolicyType = null;\n                for (var i = 0; i < arrPolicyTypesData.length; i++) {\n                    if (arrPolicyTypesData[i].sItemCollapseId === sCollapseId) {\n                        objPolicyType = arrPolicyTypesData[i];\n                    }\n                }\n                if (!objPolicyType.bPoliciesCallStarted) {\n                    this.getPolicyTypeVersions(objPolicyType);\n                }\n            },\n            onDownloadPDFPreview: function onDownloadPDFPreview(iPolicyTypeId, iVersion) {\n                this.downloadPDFPreview(iPolicyTypeId, iVersion);\n            },\n            cardDatagridFilterChangeEvent: function cardDatagridFilterChangeEvent(sProperty, objValue) {\n                var objParams = Ember.copy(objValue, true);\n                this.set(\"_iPage\", 1);\n                objParams.page = { mValue: 1 };\n                objParams.items_per_page = { mValue: this.get(\"_iPerPage\") };\n                this.doPolicyTypeListServiceCall(objParams);\n            },\n            cardDatagridPagerEvent: function cardDatagridPagerEvent(objPageQuery) {\n                objPageQuery = Ember.copy(objPageQuery, true);\n\n                var objQueryParams = this.get(\"_objQueryParams\");\n                objQueryParams.page = objPageQuery.page;\n                objQueryParams.items_per_page = objPageQuery.per_page;\n\n                this.doPolicyTypeListServiceCall(objQueryParams);\n            }\n        }\n    });\n});","define(\"a24-ember-policy-library/components/page-policy-type-view\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-policy-library/templates/components/page-policy-type-view\"], function (exports, _didRenderChangesMixin, _pagePolicyTypeView) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _pagePolicyTypeView.default,\n        sPolicyTypeRestService: \"rest-agency-group-policy-type\",\n        sPolicyRestService: \"rest-agency-group-policy\",\n\n        _objBreadCrumbService: Ember.inject.service(\"bread-crumb\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objPolicyStringsService: Ember.inject.service(\"a24-strings-policy-library\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n\n        _objPolicyRestService: Ember.computed(\"sPolicyRestService\", function () {\n            return Ember.getOwner(this).lookup(\"service:\" + this.get(\"sPolicyRestService\"));\n        }),\n        _objRestAgencyGroupPolicyProperty: null,\n\n        _arrPolicyVersionData: null,\n        _bPolicyVersionsLoading: false,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.doPolicyTypeVersionsListServiceCall();\n        },\n        doPolicyTypeVersionsListServiceCall: function doPolicyTypeVersionsListServiceCall() {\n            var _this = this;\n\n            this.set(\"_bPolicyVersionsLoading\", true);\n\n            var sPolicyTypeId = this.get(\"_objPolicyRestService\").getPolicyTypeViewId();\n            //sPolicyTypeId read from route params that will be null during transition\n            if (a24Core.isEmpty(sPolicyTypeId)) {\n                return;\n            }\n\n            this.get(\"_objPolicyRestService\").getPoliciesForPolicyType(this, \"_objRestAgencyGroupPolicyProperty\", this.get(\"_objUserSession\").getUserContextReference().mId, sPolicyTypeId, function (arrResponse) {\n                if (a24Core.isEmpty(arrResponse)) {\n                    arrResponse = [];\n                }\n                _this.set(\"_arrPolicyVersionData\", arrResponse);\n                _this.set(\"_bPolicyVersionsLoading\", false);\n            });\n        },\n        actions: {\n            breadcrumbTitleEvent: function breadcrumbTitleEvent(sTitle) {\n                var _this2 = this;\n\n                // 2 run next loops with an afterRender are used here because the menu code causes the breadcrumb to reset\n                // when opening a popup, this code has to execute after that\n                Ember.run.next(function () {\n                    Ember.run.next(function () {\n                        Ember.run.scheduleOnce(\"afterRender\", function () {\n                            var sPolicyTypeId = _this2.get(\"_objPolicyRestService\").getPolicyTypeViewId();\n\n                            //sPolicyTypeId read from route params that will be null during transition\n                            if (a24Core.isEmpty(sPolicyTypeId)) {\n                                return;\n                            }\n\n                            var arrCurrentBreadCrumb = [{\n                                sLink: _this2.get(\"_objNavigationService\").navigateWithinContext(\"policy-type-list\", null, null, true),\n                                sTitle: _this2.get(\"_objPolicyStringsService\").getString(\"policies\")\n                            }, {\n                                sLink: _this2.get(\"_objNavigationService\").navigateWithinContext(\"policy-type-view\", {\n                                    \"policy-type-view\": [sPolicyTypeId]\n                                }, null, true),\n                                sTitle: sTitle\n                            }];\n\n                            _this2.get(\"_objBreadCrumbService\").setCustomBreadItems(arrCurrentBreadCrumb);\n\n                            // Set the default items so that the custom can be applied\n                            _this2.get(\"_objBreadCrumbService\").setBreadCrumbItems();\n                        });\n                    });\n                });\n            }\n        }\n    });\n});","define(\"a24-ember-policy-library/components/policy-details\", [\"exports\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-policy-library/templates/components/policy-details\"], function (exports, _inputFormElement, _didRenderChangesMixin, _policyDetails) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _policyDetails.default,\n        arrPolicyVersionData: null,\n        bPolicyVersionsLoading: true,\n        sPolicyTypeRestService: \"rest-agency-group-policy-type\",\n\n        _arrPolicyData: null,\n        _bLoading: false,\n        _arrHeaderActions: null,\n        _bShowUnsavedData: false,\n        _bEditPopupShow: false,\n        _bEditPopupLoading: false,\n        _objSelectedClassification: null,\n        _bRegistration: false,\n        _bPublic: false,\n        _objRestAgencyGroupPolicyProperty: null,\n        _objPolicyTypeRestService: Ember.computed(\"sPolicyTypeRestService\", function () {\n            return Ember.getOwner(this).lookup(\"service:\" + this.get(\"sPolicyTypeRestService\"));\n        }),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objPolicyStringsService: Ember.inject.service(\"a24-strings-policy-library\"),\n        _objPolicyEnumsService: Ember.inject.service(\"a24-enums-policy-library\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objConstantsEmberLibService: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _arrClassificationDropdown: null,\n        _objOriginalData: null,\n        _bClassificationVisible: true,\n        _objSpecialEditPopupAction: null,\n        _sTitle: null,\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.setInitialDropdownPopupData();\n\n            this.set(\"objChildConfig\", {\n                \"objChildren.title\": function objChildrenTitle(objMixin) {\n                    a24Validation.addMinLength(objMixin, 3);\n                    a24Validation.addMaxLength(objMixin, 255);\n                    a24Validation.addRequired(objMixin, true);\n                },\n                \"objChildren.description\": function objChildrenDescription(objMixin) {\n                    a24Validation.addMinLength(objMixin, 3);\n                    a24Validation.addMaxLength(objMixin, 1000);\n                    a24Validation.addRequired(objMixin, true);\n                },\n                \"objChildren.classification\": function objChildrenClassification(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                }\n            });\n\n            this.set(\"_objSpecialEditPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this.send(\"onPopupEditCancel\");\n                }\n            });\n\n            this.set(\"_bLoading\", true);\n        },\n        setClassificationVisibility: Ember.observer(\"bPolicyVersionsLoading\", function () {\n            if (!a24Core.isEmpty(this.get(\"arrPolicyVersionData\"))) {\n                this.set(\"_bClassificationVisible\", false);\n            } else {\n                this.set(\"_bClassificationVisible\", true);\n            }\n\n            this.doServiceCall();\n        }),\n        doServiceCall: function doServiceCall() {\n            var _this2 = this;\n\n            this.set(\"_bLoading\", true);\n\n            var sPolicyTypeId = this.get(\"_objPolicyTypeRestService\").getPolicyTypeViewId();\n            //sPolicyTypeId read from route params that will be null during transition\n            if (a24Core.isEmpty(sPolicyTypeId)) {\n                return;\n            }\n\n            this.get(\"_objPolicyTypeRestService\").getPolicyType(this, \"_objRestAgencyGroupPolicyProperty\", this.get(\"_objUserSession\").getUserContextReference().mId, sPolicyTypeId, function (objResponse) {\n                _this2.setPolicyDetails(objResponse);\n\n                if (!a24Core.isEmpty(_this2.get(\"breadcrumbTitleEvent\"))) {\n                    _this2.get(\"breadcrumbTitleEvent\")(objResponse.title);\n                }\n\n                _this2.set(\"_sTitle\", objResponse.title);\n                _this2.set(\"_bLoading\", false);\n            });\n        },\n        setInitialDropdownPopupData: function setInitialDropdownPopupData() {\n            this.set(\"_arrClassificationDropdown\", this.get(\"_objPolicyEnumsService\").getList(\"classification\"));\n        },\n\n        setPolicyDetails: function setPolicyDetails(objData) {\n            var _this3 = this;\n\n            if (!a24Core.isEmpty(objData.options)) {\n                if (a24Core.isEmpty(objData.options.public_policy)) {\n                    objData.options.public_policy = false;\n                }\n\n                if (a24Core.isEmpty(objData.options.registration_policy)) {\n                    objData.options.registration_policy = false;\n                }\n            } else {\n                objData.options = {\n                    public_policy: false,\n                    registration_policy: false\n                };\n            }\n\n            this.set(\"_arrPolicyData\", [{\n                arrItems: [{\n                    sLabel: this.get(\"_objStringsService\").getString(\"title\"),\n                    sValue: objData.title,\n                    bText: true\n                }, {\n                    sLabel: this.get(\"_objStringsService\").getString(\"description\"),\n                    sValue: objData.description,\n                    bText: true\n                }, {\n                    sLabel: this.get(\"_objPolicyStringsService\").getString(\"classification\"),\n                    sValue: this.get(\"_objPolicyEnumsService\").getFrontendValue(\"classification\", objData.classification),\n                    bText: true\n                }, {\n                    sLabel: this.get(\"_objPolicyStringsService\").getString(\"public\"),\n                    sValue: objData.options.public_policy ? this.get(\"_objStringsService\").getString(\"yes\") : this.get(\"_objStringsService\").getString(\"no\"),\n                    bText: true\n                }, {\n                    sLabel: this.get(\"_objPolicyStringsService\").getString(\"registration\"),\n                    sValue: objData.options.registration_policy ? this.get(\"_objStringsService\").getString(\"yes\") : this.get(\"_objStringsService\").getString(\"no\"),\n                    bText: true\n                }]\n            }]);\n            this.set(\"_arrHeaderActions\", [{\n                sTitle: this.get(\"_objStringsService\").getString(\"edit\"),\n                sIcon: \"mode_edit\",\n                executeCardAction: function executeCardAction() {\n                    Ember.run.next(function () {\n                        _this3.get(\"objChildren.title\").setValueFromOutside(objData.title);\n                        _this3.get(\"objChildren.description\").setValueFromOutside(objData.description);\n                        _this3.set(\"_objSelectedClassification\", {\n                            \"sValue\": objData.classification,\n                            \"sLabel\": _this3.get(\"_objPolicyEnumsService\").getFrontendValue(\"classification\", objData.classification)\n                        });\n\n                        if (!a24Core.isEmpty(objData.options)) {\n                            _this3.set(\"_bRegistration\", objData.options.registration_policy);\n                            _this3.set(\"_bPublic\", objData.options.public_policy);\n                        }\n\n                        _this3.set(\"_bEditPopupLoading\", false);\n                        _this3.set(\"_bEditPopupShow\", true);\n\n                        _this3.clearAllErrorMessages();\n\n                        Ember.run.next(function () {\n                            Ember.run.schedule(\"afterRender\", function () {\n                                // reset breadcrumb\n                                if (!a24Core.isEmpty(_this3.get(\"breadcrumbTitleEvent\"))) {\n                                    _this3.get(\"breadcrumbTitleEvent\")(_this3.get(\"_sTitle\"));\n                                }\n\n                                _this3.set(\"_objOriginalData\", _this3.getPlainFormValueObject());\n                            });\n                        });\n                    });\n                }\n            }]);\n        },\n        actions: {\n            onPopupEditConfirm: function onPopupEditConfirm() {\n                var _this4 = this;\n\n                if (!this.doFullValidation()) {\n                    var objData = this.getPlainFormValueObject();\n                    if (a24Core.isEmpty(objData.classification)) {\n                        objData.classification = this.get(\"_objSelectedClassification\").sValue;\n                    }\n                    this.set(\"_bEditPopupLoading\", true);\n                    this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objPolicyStringsService\").getString(\"updatingPolicyDetails\"));\n                    var sPolicyTypeId = this.get(\"_objPolicyTypeRestService\").getPolicyTypeViewId();\n                    //sPolicyTypeId read from route params that will be null during transition\n                    if (a24Core.isEmpty(sPolicyTypeId)) {\n                        return;\n                    }\n\n                    this.get(\"_objPolicyTypeRestService\").updatePolicyType(this, \"_objRestAgencyGroupPolicyProperty\", this.get(\"_objUserSession\").getUserContextReference().mId, sPolicyTypeId, function () {\n                        _this4.doServiceCall();\n                        _this4.set(\"_bEditPopupShow\", false);\n                        _this4.get(\"_objSnackbarService\").showSnackbarMessage(_this4.get(\"_objPolicyStringsService\").getString(\"updatingPolicySuccess\"));\n                    }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode, sStatus, objErrorThrown, objError) {\n                        if (sCode === \"MIN_LENGTH\") {\n                            _this4.setResponseError(objError.arrPath, \"validationRestMinLength\");\n                        } else if (sCode === \"MAX_LENGTH\") {\n                            _this4.setResponseError(objError.arrPath, \"validationRestMaxLength\");\n                        } else if (sCode === \"PATTERN\") {\n                            _this4.setResponseError(objError.arrPath, \"validationRestInvalidChar\");\n                        } else if (sCode === \"POLICY_TYPE_ALREADY_IN_USE\") {\n                            _this4.setResponseError([\"classification\"], \"updatingPolicyTypeAlreadyInUse\", true, false, _this4.get(\"_objPolicyStringsService\"));\n                        } else {\n                            _this4.get(\"_objSnackbarService\").showSnackbarMessage(_this4.get(\"_objPolicyStringsService\").getString(\"updatingPolicyFailed\"));\n                        }\n                        _this4.set(\"_bEditPopupLoading\", false);\n                    }), objData);\n                }\n            },\n            onPopupEditCancel: function onPopupEditCancel() {\n\n                // Check if the form has any unsaved data\n                var bDataMatches = a24Core.compareObjects(Ember, this.getPlainFormValueObject(), this.get(\"_objOriginalData\"));\n\n                if (bDataMatches) {\n                    this.set(\"_bEditPopupShow\", false);\n                } else {\n                    this.set(\"_bShowUnsavedData\", true);\n                }\n            },\n            onPopupUnsavedConfirm: function onPopupUnsavedConfirm() {\n                this.set(\"_bEditPopupShow\", false);\n                this.set(\"_bShowUnsavedData\", false);\n            }\n        }\n    });\n});","define(\"a24-ember-policy-library/components/policy-versions\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-policy-library/templates/components/policy-versions\"], function (exports, _didRenderChangesMixin, _policyVersions) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _policyVersions.default,\n        arrPolicyVersionData: null,\n        sPolicyRestService: \"rest-agency-group-policy\",\n\n        _arrPolicyData: null,\n        _bLoading: false,\n        _arrHeaderActions: null,\n        _arrItemActions: null, // This is for when we want the versions to also have actions on\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objPolicyRestService: Ember.computed(\"sPolicyRestService\", function () {\n            return Ember.getOwner(this).lookup(\"service:\" + this.get(\"sPolicyRestService\"));\n        }),\n        _objPolicyStringsService: Ember.inject.service(\"a24-strings-policy-library\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objConstantsEmberLibService: Ember.inject.service(\"a24-constants-ember-lib\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.set(\"_arrHeaderActions\", [{\n                sTitle: this.get(\"_objStringsService\").getString(\"add\"),\n                sIcon: \"add\",\n                executeCardAction: function executeCardAction() {\n                    _this.get(\"_objNavigationService\").navigateWithinContext(\"policy-add\", {\n                        \"policy-add\": [_this.get(\"_objPolicyRestService\").getPolicyTypeViewId()]\n                    });\n                }\n            }]);\n\n            this.set(\"_bLoading\", true);\n        },\n        setPolicyVersionData: Ember.observer(\"arrPolicyVersionData\", function () {\n            var arrPolicyVersionData = this.get(\"arrPolicyVersionData\");\n            this.setPolicyVersions(arrPolicyVersionData);\n            this.set(\"_bLoading\", false);\n        }),\n        setPolicyVersions: function setPolicyVersions(arrData) {\n            var _this2 = this;\n\n            var arrDisplay = [];\n            if (!a24Core.isEmpty(arrData)) {\n                var funcGetDownloadActionCallback = function funcGetDownloadActionCallback(iVersion) {\n                    return function () {\n                        _this2.downloadPDFPreview(iVersion);\n                    };\n                };\n                for (var i = 0; i < arrData.length; i++) {\n                    var objDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                    objDate.setDateFromRest(arrData[i].effective_at, true);\n                    var iVersion = arrData[i].version;\n                    var sExtraInfo = this.get(\"_objStringsService\").getHTMLTokenString(\"a24-string-html-colon-value\", this.get(\"_objStringsService\").getString(\"effectiveAt\"), objDate.getDateFormat());\n                    arrDisplay.push({\n                        sName: arrData[i].display_version,\n                        bExpanded: arrData[i].active,\n                        sExtraInfo: sExtraInfo,\n                        arrItems: [{\n                            arrItems: [{\n                                sLabel: this.get(\"_objStringsService\").getString(\"status\"),\n                                sValue: arrData[i].active ? this.get(\"_objStringsService\").getString(\"active\") : this.get(\"_objStringsService\").getString(\"inactive\"),\n                                bText: true\n                            }, {\n                                sLabel: this.get(\"_objStringsService\").getString(\"effectiveAt\"),\n                                sValue: objDate.getDateFormat(),\n                                bText: true\n                            }]\n                        }],\n                        arrActions: [{\n                            sTitle: this.get(\"_objStringsService\").getString(\"downloadPdfPreview\"),\n                            sIcon: \"get_app\",\n                            executeCardAction: funcGetDownloadActionCallback(iVersion)\n                        }]\n                    });\n                }\n            }\n            this.set(\"_arrPolicyData\", arrDisplay);\n        },\n        downloadPDFPreview: function downloadPDFPreview(iVersion) {\n            var _this3 = this;\n\n            this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsService\").getString(\"downloadPdf\"));\n\n            var sPolicyTypeId = this.get(\"_objPolicyRestService\").getPolicyTypeViewId();\n            //sPolicyTypeId read from route params that will be null during transition\n            if (a24Core.isEmpty(sPolicyTypeId)) {\n                return;\n            }\n\n            this.get(\"_objPolicyRestService\").downloadPdfByGET(sPolicyTypeId, iVersion, function () {\n                _this3.get(\"_objSnackbarService\").showSnackbarMessage(_this3.get(\"_objStringsService\").getString(\"downloadPdfFinish\"));\n            }, function () {\n                _this3.get(\"_objSnackbarService\").showSnackbarMessage(_this3.get(\"_objStringsService\").getString(\"downloadPdfFailed\"));\n            });\n        }\n    });\n});","define(\"a24-ember-policy-library/services/a24-enums-policy-library\", [\"exports\", \"a24-ember-lookup/services/a24-enums-base\"], function (exports, _a24EnumsBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _a24EnumsBase.default.extend({\n        _objPolicyStringsService: Ember.inject.service(\"a24-strings-policy-library\"),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"policies\", {\n                \"ACKNOWLEDGED\": {\n                    \"backend\": \"acknowledged\",\n                    \"frontend\": this.get(\"_objPolicyStringsService\").getString(\"accepted\")\n                },\n                \"NOT_ACKNOWLEDGED\": {\n                    \"backend\": \"not_acknowledged\",\n                    \"frontend\": this.get(\"_objPolicyStringsService\").getString(\"notAccepted\")\n                },\n                \"READ_ONLY\": {\n                    \"backend\": \"read_only\",\n                    \"frontend\": this.get(\"_objPolicyStringsService\").getString(\"readOnly\")\n                }\n            });\n\n            this.set(\"classification\", {\n                \"VIEWABLE\": {\n                    \"backend\": \"viewable\",\n                    \"frontend\": this.get(\"_objPolicyStringsService\").getString(\"viewable\")\n                },\n                \"ACKNOWLEDGEABLE\": {\n                    \"backend\": \"acknowledgeable\",\n                    \"frontend\": this.get(\"_objPolicyStringsService\").getString(\"acknowledgeable\")\n                }\n            });\n        }\n    });\n});","define(\"a24-ember-policy-library/services/a24-strings-policy-library\", [\"exports\", \"a24-ember-lookup/services/a24-strings-base\"], function (exports, _a24StringsBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _a24StringsBase.default.extend({\n        _objStrings: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"_objStrings\", {\n\n                //===== STRINGS START =====\n\n                noPoliciesMatchFilterCriteria: \"No Policies match your filter criteria. You can change the filter criteria above\",\n                policyContent: \"Policy content\",\n                policyAcknowledgement: \"Policy acknowledgement\",\n\n                createPolicyVersion: \"Create policy version\",\n                creatingPolicyVersion: \"Creating policy version...\",\n                creatingPolicyVersionSuccess: \"Successfully created policy version\",\n                creatingPolicyVersionFailed: \"Failed to create policy version\",\n                createPolicy: \"Create policy\",\n                creatingPolicy: \"Creating policy...\",\n                creatingPolicySuccess: \"Successfully created policy\",\n                creatingPolicyFailed: \"Failed to create policy\",\n                policies: \"Policies\",\n                policyVersions: \"Policy versions\",\n                policiesDescription: \"Please view the below policies.<br/>\" + \"For some of the policies we require you to explicitly acknowledge that it has been read. Please note \" + \"that all policies will be kept up to date and will require you to read and acknowledge again if \" + \"appropriate\",\n                accepted: \"Accepted\",\n                reAccept: \"Re-accept\",\n                view: \"View\",\n                awaitingAcceptance: \"Awaiting Acceptance\",\n                noPoliciesAvailable: \"No Policies Available\",\n                outdatedSignedVersion: \"Outdated signed version\",\n                notAccepted: \"Not Accepted\",\n\n                updatePolicy: \"Update policy\",\n                updatingPolicyDetails: \"Updating policy...\",\n                updatingPolicySuccess: \"Successfully updated policy\",\n                updatingPolicyFailed: \"Failed to update policy\",\n                policyDetails: \"Policy Details\",\n                updatingPolicyTypeAlreadyInUse: \"The data has changed, the classification for the policy you are updating cannot be changed because it already has policy versions linked to it. Please refresh the screen to see the changes.\",\n                createPolicyVersionClassificationDiffers: \"The classification for the policy version differs from the policy type. The policy type may have been updated, please refresh and try agaion.\",\n\n                outdatedMessage: \"Please note that this is an outdated version and that there is an updated one available for you to acknowledge!\",\n                updatingPolicy: \"Updating policy status...\",\n                acceptedPolicy: \"Successfully accepted policy\",\n                failurePolicy: \"Failed to update policy status\",\n                classification: \"Classification\",\n                acknowledgeable: \"Acknowledgeable\",\n                viewable: \"Viewable\",\n                readOnly: \"Read Only\",\n                registration: \"Registration\",\n                public: \"Public\",\n\n                clickHereViewPolicy: \"Click Here to View full Policy\",\n                //===== STRINGS END   =====\n\n                //===== TOKEN STRINGS START =====\n\n                validationEffectiveAtBeforePrev: \"{0} is not allowed to be before the previous versions Effective at date\"\n\n                //===== TOKEN STRINGS END   =====\n\n            });\n        }\n    });\n});","define(\"a24-ember-policy-library/services/rest-agency-group-candidate-policy-group\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        sContext: null,\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\"));\n        },\n\n        /**\n         * This service method will be used to retrieve all policy\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objQueryParams - Any extra query params for the get list\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  28 May 2018\n         */\n        getPolicyGroupDetails: function getPolicyGroupDetails(objCaller, sProperty, sCandidateId, funcSuccess, objFailure, objQueryParams) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            var sUrl = this.get(\"_sRestApiBaseUrl\") + \"/v1/agency-group/\" + sAgencyGroupId + \"/\" + \"candidate\" + \"/\" + sCandidateId + \"/policy\";\n\n            a24RestUrlConstruct.setBaseUrlSwagger(sUrl);\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-policy-library/services/rest-agency-group-candidate-policy-type\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * This function download pdf for the agency group candidate policy\n         *\n         * @param sPolicyTypeId - The policy type id\n         * @param sCandidateId - The candidate id\n         * @param iVersion - The version\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param funcFailure - The callback function to execute when the service call is a failure\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  11 July 2018\n         */\n        downloadPdfByGET: function downloadPdfByGET(sPolicyTypeId, sCandidateId, iVersion, funcSuccess, funcFailure) {\n            var sUrl = this.get(\"sRestApiBaseUrl\") + \"/v1\" + \"/agency-group/\" + this.get(\"_objUserSession\").getUserContextReference().mId + \"/candidate/\" + sCandidateId + \"/policy-type/\" + sPolicyTypeId + \"/version/\" + iVersion;\n\n            a24RestCallHelper.downloadPdfByGET(sUrl, \"PolicyVersionPreview.pdf\", funcSuccess, funcFailure, {\n                Authorization: \"Bearer \" + this.get(\"_objUserSession.objAuthData.accessToken\"),\n                Context: \"AgencyGroup \" + this.get(\"_objUserSession\").getUserContextReference().mId\n            });\n        }\n    });\n});","define(\"a24-ember-policy-library/services/rest-agency-group-policy-type\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * This service return get current policy id\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  15 August 2018\n         */\n        getPolicyTypeViewId: function getPolicyTypeViewId() {\n            if (!a24Core.isEmpty(this.get(\"_objNavigation.objRouteParams\")[\"agency-group.policy-type-view\"])) {\n                return this.get(\"_objNavigation.objRouteParams\")[\"agency-group.policy-type-view\"].policy_type_id;\n            }\n        },\n\n        /**\n         * This service method will be used to retrieve all policy types\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sAgencyGroupId - The id of the agency group\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objQueryParams - The query param object\n         *\n         * @author Ruan Naude<ruan.naude@a24group.com>\n         * @since  06 July 2017\n         */\n        getPolicyTypes: function getPolicyTypes(objCaller, sProperty, sAgencyGroupId, funcSuccess, objFailure, objQueryParams) {\n            var sUrl = Ember.get(this, \"sRestApiBaseUrl\") + \"/v1/agency-group/\" + sAgencyGroupId + \"/policy-type\";\n            a24RestUrlConstruct.setBaseUrlSwagger(sUrl);\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n        /**\n         * This service method will be used to retrieve one policy type\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sAgencyGroupId - The id of the agency group\n         * @param sPolicyTypeId - The id of the policy type\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  11 July 2017\n         */\n        getPolicyType: function getPolicyType(objCaller, sProperty, sAgencyGroupId, sPolicyTypeId, funcSuccess, objFailure) {\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", Ember.get(this, \"sRestApiBaseUrl\") + \"/v1/agency-group/\" + sAgencyGroupId + \"/policy-type/\" + sPolicyTypeId, funcSuccess, objFailure));\n        },\n        /**\n         * This service method will post to the policy type route\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sAgencyGroupId - The id of the agency group\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objPayload - The new policy type details\n         *\n         * @author Ruan Naude<ruan.naude@a24group.com>\n         * @since  07 July 2017\n         */\n        createPolicyType: function createPolicyType(objCaller, sProperty, sAgencyGroupId, funcSuccess, objFailure, objPayload) {\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", Ember.get(this, \"sRestApiBaseUrl\") + \"/v1/agency-group/\" + sAgencyGroupId + \"/policy-type\", funcSuccess, objFailure, objPayload));\n        },\n        /**\n         * This service method will post to the policy type route for a specific policy type\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sAgencyGroupId - The id of the agency group\n         * @param sPolicyTypeId - The id of the policy type\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objPayload - The new policy type details\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  11 July 2017\n         */\n        updatePolicyType: function updatePolicyType(objCaller, sProperty, sAgencyGroupId, sPolicyTypeId, funcSuccess, objFailure, objPayload) {\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", Ember.get(this, \"sRestApiBaseUrl\") + \"/v1/agency-group/\" + sAgencyGroupId + \"/policy-type/\" + sPolicyTypeId, funcSuccess, objFailure, objPayload));\n        }\n    });\n});","define(\"a24-ember-policy-library/services/rest-agency-group-policy\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * This service return get current policy id\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  22 May 2018\n         */\n        getPolicyTypeViewId: function getPolicyTypeViewId() {\n            if (!a24Core.isEmpty(this.get(\"_objNavigation.objRouteParams\")[\"agency-group.policy-type-view\"])) {\n                return this.get(\"_objNavigation.objRouteParams\")[\"agency-group.policy-type-view\"].policy_type_id;\n            }\n        },\n\n        /**\n         * This service return get current policy id\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  22 May 2018\n         */\n        getPolicyTypeAddId: function getPolicyTypeAddId() {\n            if (!a24Core.isEmpty(this.get(\"_objNavigation.objRouteParams\")[\"agency-group.policy-add\"])) {\n                return this.get(\"_objNavigation.objRouteParams\")[\"agency-group.policy-add\"].policy_type_id;\n            }\n        },\n\n        /**\n         * This function download pdf by get for a policy version\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  23 May 2018\n         */\n        downloadPdfByGET: function downloadPdfByGET(sPolicyTypeId, iVersion, funcSuccess, funcFailure) {\n            var sUrl = this.get(\"sRestApiBaseUrl\") + \"/v1\" + \"/agency-group/\" + this.get(\"_objUserSession\").getUserContextReference().mId + \"/policy-type/\" + sPolicyTypeId + \"/version/\" + iVersion;\n\n            a24RestCallHelper.downloadPdfByGET(sUrl, \"PolicyVersionPreview.pdf\", funcSuccess, funcFailure, {\n                Authorization: \"Bearer \" + this.get(\"_objUserSession.objAuthData.accessToken\"),\n                Context: \"AgencyGroup \" + this.get(\"_objUserSession\").getUserContextReference().mId\n            });\n        },\n\n        /**\n         * This function download pdf by post for a policy version\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  23 May 2018\n         */\n        downloadPdfByPOST: function downloadPdfByPOST(sPolicyTypeId, iVersion, funcSuccess, funcFailure, objPdfPayload) {\n            var sUrl = this.get(\"sRestApiBaseUrl\") + \"/v1\" + \"/agency-group/\" + this.get(\"_objUserSession\").getUserContextReference().mId + \"/policy-type/\" + sPolicyTypeId + \"/version/\" + iVersion + \"/preview\";\n\n            a24RestCallHelper.downloadPdfByPOST(sUrl, objPdfPayload, \"PolicyVersionPreview.pdf\", funcSuccess, funcFailure, {\n                Authorization: \"Bearer \" + this.get(\"_objUserSession.objAuthData.accessToken\"),\n                Context: \"AgencyGroup \" + this.get(\"_objUserSession\").getUserContextReference().mId\n            });\n        },\n\n        /**\n         * This service method will be used to retrieve all policy types\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sAgencyGroupId - The id of the agency group\n         * @param sPolicyTypeId - The id of the policy type that you want policies for\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objQueryParams - Any extra query params for the get list\n         * @param bRetrieveAll - Whether to retrieve all pages\n         *\n         * @author Ruan Naude<ruan.naude@a24group.com>\n         * @since  06 July 2017\n         */\n        getPoliciesForPolicyType: function getPoliciesForPolicyType(objCaller, sProperty, sAgencyGroupId, sPolicyTypeId, funcSuccess, objFailure, objQueryParams, bRetrieveAll) {\n\n            if (a24Core.isEmpty(bRetrieveAll)) {\n                bRetrieveAll = true;\n            }\n\n            var objQueryParamsInternal = {\n                version: {\n                    bSortBy: true,\n                    mValue: \"desc\"\n                },\n                policy_type_id: {\n                    mValue: sPolicyTypeId\n                }\n            };\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency-group/\" + sAgencyGroupId + \"/policy\");\n            a24RestUrlConstruct.addQueryParamObject(objQueryParamsInternal);\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", Ember.get(this, \"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, null, null, bRetrieveAll);\n        },\n\n        /**\n         * This service method will post to the policy route\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sAgencyGroupId - The id of the agency group\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objPayload - The new policy type details\n         *\n         * @author Ruan Naude<ruan.naude@a24group.com>\n         * @since  13 July 2017\n         */\n        createPolicy: function createPolicy(objCaller, sProperty, sAgencyGroupId, funcSuccess, objFailure, objPayload) {\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", Ember.get(this, \"sRestApiBaseUrl\") + \"/v1/agency-group/\" + sAgencyGroupId + \"/policy\", funcSuccess, objFailure, objPayload));\n        }\n    });\n});","define(\"a24-ember-policy-library/services/rest-candidate-policy-group\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        sContext: null,\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_CANDIDATE\"));\n        },\n\n        /**\n         * This service method will be used to retrieve all policy\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sPolicyGroupType - The type of the policy group\n         * @param sPolicyGroupId - The id of the policy group\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objQueryParams - Any extra query params for the get list\n         *\n         * @author Ruan Naude<ruan.naude@a24group.com>\n         * @since  22 June 2017\n         */\n        getPolicyGroupDetails: function getPolicyGroupDetails(objCaller, sProperty, sPolicyGroupType, sPolicyGroupId, funcSuccess, objFailure, objQueryParams) {\n            var sCandidateId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            var sUrl = Ember.get(this, \"_sRestApiBaseUrl\") + \"/v1/candidate/\" + sCandidateId + \"/\" + sPolicyGroupType + \"/\" + sPolicyGroupId + \"/policy\";\n\n            a24RestUrlConstruct.setBaseUrlSwagger(sUrl);\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-policy-library/services/rest-candidate-policy\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * This service method will be used to retrieve all policy\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sPolicyTypeId - The id of the policy type\n         * @param sVersion - The version of the policy\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         *\n         * @author Junior van Wyk<johannes.vanwyk@a24group.com>\n         * @since  29 June 2017\n         */\n        getPolicyDetails: function getPolicyDetails(objCaller, sProperty, sPolicyTypeId, sVersion, funcSuccess, objFailure) {\n\n            var sCandidateId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            var sUrl = Ember.get(this, \"_sRestApiBaseUrl\") + \"/v1/candidate/\" + sCandidateId + \"/policy-type/\" + sPolicyTypeId + \"/version/\" + sVersion;\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", sUrl, funcSuccess, objFailure));\n        },\n\n        /**\n         * This service method will be used to retrieve all policy\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sPolicyTypeId - The id of the policy type\n         * @param sVersion - The version of the policy\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objBody - The policy payload\n         *\n         * @author Junior van Wyk<johannes.vanwyk@a24group.com>\n         * @since  29 June 2017\n         */\n        postPolicyDetailsAction: function postPolicyDetailsAction(objCaller, sProperty, sPolicyTypeId, sVersion, funcSuccess, objFailure, objBody) {\n\n            var sCandidateId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            var sUrl = Ember.get(this, \"_sRestApiBaseUrl\") + \"/v1/candidate/\" + sCandidateId + \"/policy-type/\" + sPolicyTypeId + \"/version/\" + sVersion + \"/action\";\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", sUrl, funcSuccess, objFailure, objBody));\n        },\n\n        /**\n         * This service method will return the post request body\n         *\n         * @param sActionType - The action type\n         * @param sIpAddress - The IP address of the candidate\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  28 May 2018\n         */\n        getConfirmationPostBody: function getConfirmationPostBody(sActionType, sIpAddress) {\n            var objUserDetails = this.get(\"_objUserSession.objAuthData.identity\");\n            var objTokens = {\n                \"candidate_full_name\": objUserDetails.sFirstName + \" \" + objUserDetails.sLastName,\n                \"candidate_email\": objUserDetails.sEmailAddress\n            };\n            if (!a24Core.isEmpty(sIpAddress)) {\n                objTokens.ip_address = sIpAddress;\n            }\n            return {\n                \"action_type\": sActionType,\n                \"tokens\": objTokens\n            };\n        },\n\n        /**\n         * This function download pdf by get for a policy version\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  28 May 2018\n         */\n        downloadPdfByGET: function downloadPdfByGET(sPolicyTypeId, sVersion, sPDFFileName, funcSuccess, funcFailure) {\n            var sUrl = this.get(\"_sRestApiBaseUrl\") + \"/v1\" + \"/candidate/\" + this.get(\"_objUserSession\").getUserContextReference().mId + \"/policy-type/\" + sPolicyTypeId + \"/version/\" + sVersion;\n\n            a24RestCallHelper.downloadPdfByGET(sUrl, sPDFFileName, funcSuccess, funcFailure, {\n                Authorization: \"Bearer \" + this.get(\"_objUserSession.objAuthData.accessToken\"),\n                Context: \"Candidate\"\n            });\n        }\n    });\n});","define(\"a24-ember-policy-library/services/rest-system-admin-policy-type\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * This function return get current policy id\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  15 August 2018\n         */\n        getPolicyTypeViewId: function getPolicyTypeViewId() {\n            if (!a24Core.isEmpty(this.get(\"_objNavigation\").get(\"objRouteParams\")[\"index.policy-type-view\"])) {\n                return this.get(\"_objNavigation\").get(\"objRouteParams\")[\"index.policy-type-view\"].policy_type_id;\n            }\n        },\n\n        /**\n         * This service method will be used to retrieve all policy types\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sSystemAdminId - The id of the system admin\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objQueryParams - The query param object\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  22 May 2018\n         */\n        getPolicyTypes: function getPolicyTypes(objCaller, sProperty, sSystemAdminId, funcSuccess, objFailure, objQueryParams) {\n            var sUrl = this.get(\"_sRestApiBaseUrl\") + \"/v1/staffshift/web/policy-type\";\n            a24RestUrlConstruct.setBaseUrlSwagger(sUrl);\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n        /**\n         * This service method will be used to retrieve one policy type\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sSystemAdminId - The id of the system admin\n         * @param sPolicyTypeId - The id of the policy type\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  22 May 2018\n         */\n        getPolicyType: function getPolicyType(objCaller, sProperty, sSystemAdminId, sPolicyTypeId, funcSuccess, objFailure) {\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + \"/v1/staffshift/web/policy-type/\" + sPolicyTypeId, funcSuccess, objFailure));\n        },\n        /**\n         * This service method will post to the policy type route\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sSystemAdminId - The id of the system admin\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objPayload - The new policy type details\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  07 July 2017\n         */\n        createPolicyType: function createPolicyType(objCaller, sProperty, sSystemAdminId, funcSuccess, objFailure, objPayload) {\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"_sRestApiBaseUrl\") + \"/v1/staffshift/web/policy-type\", funcSuccess, objFailure, objPayload));\n        },\n        /**\n         * This service method will post to the policy type route for a specific policy type\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sSystemAdminId - The id of the system admin\n         * @param sPolicyTypeId - The id of the policy type\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objPayload - The new policy type details\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  22 May 2018\n         */\n        updatePolicyType: function updatePolicyType(objCaller, sProperty, sSystemAdminId, sPolicyTypeId, funcSuccess, objFailure, objPayload) {\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"_sRestApiBaseUrl\") + \"/v1/staffshift/web/policy-type/\" + sPolicyTypeId, funcSuccess, objFailure, objPayload));\n        }\n    });\n});","define(\"a24-ember-policy-library/services/rest-system-admin-policy\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * This function return get current policy id\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  22 May 2018\n         */\n        getPolicyTypeViewId: function getPolicyTypeViewId() {\n            if (!a24Core.isEmpty(this.get(\"_objNavigation\").get(\"objRouteParams\")[\"index.policy-type-view\"])) {\n                return this.get(\"_objNavigation\").get(\"objRouteParams\")[\"index.policy-type-view\"].policy_type_id;\n            }\n        },\n\n        /**\n         * This function return get current policy id\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  22 May 2018\n         */\n        getPolicyTypeAddId: function getPolicyTypeAddId() {\n            if (!a24Core.isEmpty(this.get(\"_objNavigation\").get(\"objRouteParams\")[\"index.policy-add\"])) {\n                return this.get(\"_objNavigation\").get(\"objRouteParams\")[\"index.policy-add\"].policy_type_id;\n            }\n        },\n\n        /**\n         * This function download pdf by get for a policy version\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  23 May 2018\n         */\n        downloadPdfByGET: function downloadPdfByGET(sPolicyTypeId, iVersion, funcSuccess, funcFailure) {\n            var sUrl = this.get(\"_sRestApiBaseUrl\") + \"/v1\" + \"/staffshift/web/policy-type/\" + sPolicyTypeId + \"/version/\" + iVersion;\n\n            a24RestCallHelper.downloadPdfByGET(sUrl, \"PolicyVersionPreview.pdf\", funcSuccess, funcFailure, {\n                Authorization: \"Bearer \" + this.get(\"_objUserSession.objAuthData.accessToken\"),\n                Context: \"SystemAdmin\"\n            });\n        },\n\n        /**\n         * This function download pdf by post for a policy version\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  23 May 2018\n         */\n        downloadPdfByPOST: function downloadPdfByPOST(sPolicyTypeId, iVersion, funcSuccess, funcFailure, objPdfPayload) {\n            var sUrl = this.get(\"_sRestApiBaseUrl\") + \"/v1\" + \"/staffshift/web/policy-type/\" + sPolicyTypeId + \"/version/\" + iVersion + \"/preview\";\n\n            a24RestCallHelper.downloadPdfByPOST(sUrl, objPdfPayload, \"PolicyVersionPreview.pdf\", funcSuccess, funcFailure, {\n                Authorization: \"Bearer \" + this.get(\"_objUserSession.objAuthData.accessToken\"),\n                Context: \"SystemAdmin\"\n            });\n        },\n\n        /**\n         * This service method will be used to retrieve all policy types\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sSystemAdminId - The id of the system admin\n         * @param sPolicyTypeId - The id of the policy type that you want policies for\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objQueryParams - Any extra query params for the get list\n         * @param bRetrieveAll - Whether to retrieve all pages\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  22 May 2018\n         */\n        getPoliciesForPolicyType: function getPoliciesForPolicyType(objCaller, sProperty, sSystemAdminId, sPolicyTypeId, funcSuccess, objFailure, objQueryParams, bRetrieveAll) {\n\n            if (a24Core.isEmpty(bRetrieveAll)) {\n                bRetrieveAll = true;\n            }\n\n            var objQueryParamsInternal = {\n                version: {\n                    bSortBy: true,\n                    mValue: \"desc\"\n                },\n                policy_type_id: {\n                    mValue: sPolicyTypeId\n                }\n            };\n\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/staffshift/web/policy\");\n            a24RestUrlConstruct.addQueryParamObject(objQueryParamsInternal);\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, null, null, bRetrieveAll);\n        },\n\n        /**\n         * This service method will post to the policy route\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sSystemAdminId - The id of the system admin\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objPayload - The new policy type details\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  22 May 2018\n         */\n        createPolicy: function createPolicy(objCaller, sProperty, sSystemAdminId, funcSuccess, objFailure, objPayload) {\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"_sRestApiBaseUrl\") + \"/v1/staffshift/web/policy\", funcSuccess, objFailure, objPayload));\n        }\n    });\n});","define(\"a24-ember-policy-library/services/rest-user-policy-group\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        sContext: null,\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_CANDIDATE\"));\n        },\n\n        /**\n         * This service method will be used to retrieve all policy\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sPolicyGroupType - The type of the policy group\n         * @param sPolicyGroupId - The id of the policy group\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objQueryParams - Any extra query params for the get list\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  28 May 2018\n         */\n        getPolicyGroupDetails: function getPolicyGroupDetails(objCaller, sProperty, sPolicyGroupType, sPolicyGroupId, funcSuccess, objFailure, objQueryParams) {\n            var sUserId = this.get(\"_objUserSession\").objAuthData.context.sUserId;\n\n            var sUrl = Ember.get(this, \"_sRestApiBaseUrl\") + \"/v1/user/\" + sUserId + \"/\" + sPolicyGroupType + \"/\" + sPolicyGroupId + \"/policy\";\n\n            a24RestUrlConstruct.setBaseUrlSwagger(sUrl);\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-policy-library/services/rest-user-policy\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * This service method will be used to retrieve all policy\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sPolicyTypeId - The id of the policy type\n         * @param sVersion - The version of the policy\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  28 May 2018\n         */\n        getPolicyDetails: function getPolicyDetails(objCaller, sProperty, sPolicyTypeId, sVersion, funcSuccess, objFailure) {\n            var sUserId = this.get(\"_objUserSession.objAuthData.context.sUserId\");\n\n            var sUrl = Ember.get(this, \"_sRestApiBaseUrl\") + \"/v1/user/\" + sUserId + \"/policy-type/\" + sPolicyTypeId + \"/version/\" + sVersion;\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", sUrl, funcSuccess, objFailure));\n        },\n\n        /**\n         * This service method will be used to retrieve all policy\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sPolicyTypeId - The id of the policy type\n         * @param sVersion - The version of the policy\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objBody - The policy payload\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  28 May 2018\n         */\n        postPolicyDetailsAction: function postPolicyDetailsAction(objCaller, sProperty, sPolicyTypeId, sVersion, funcSuccess, objFailure, objBody) {\n            var sUserId = this.get(\"_objUserSession.objAuthData.context.sUserId\");\n\n            var sUrl = Ember.get(this, \"_sRestApiBaseUrl\") + \"/v1/user/\" + sUserId + \"/policy-type/\" + sPolicyTypeId + \"/version/\" + sVersion + \"/action\";\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", sUrl, funcSuccess, objFailure, objBody));\n        },\n\n        /**\n         * This service method will return the post request body\n         *\n         * @param sActionType - The action type\n         * @param sIpAddress - The IP address of the user\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  28 May 2018\n         */\n        getConfirmationPostBody: function getConfirmationPostBody(sActionType, sIpAddress) {\n            var objUserDetails = this.get(\"_objUserSession.objAuthData.identity\");\n            var objTokens = {\n                \"user_full_name\": objUserDetails.sFirstName + \" \" + objUserDetails.sLastName,\n                \"user_email\": objUserDetails.sEmailAddress\n            };\n            if (!a24Core.isEmpty(sIpAddress)) {\n                objTokens.ip_address = sIpAddress;\n            }\n            return {\n                \"action_type\": sActionType,\n                \"tokens\": objTokens\n            };\n        },\n\n        /**\n         * This function download pdf by get for a policy version\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  28 May 2018\n         */\n        downloadPdfByGET: function downloadPdfByGET(sPolicyTypeId, sVersion, sPDFFileName, funcSuccess, funcFailure) {\n            var sUrl = this.get(\"_sRestApiBaseUrl\") + \"/v1\" + \"/user/\" + this.get(\"_objUserSession.objAuthData.context.sUserId\") + \"/policy-type/\" + sPolicyTypeId + \"/version/\" + sVersion;\n\n            a24RestCallHelper.downloadPdfByGET(sUrl, sPDFFileName, funcSuccess, funcFailure, {\n                Authorization: \"Bearer \" + this.get(\"_objUserSession.objAuthData.accessToken\"),\n                Context: \"Candidate\"\n            });\n        }\n    });\n});","define(\"a24-ember-policy-library/templates/components/candidate-policy\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"zpjTYcLz\", \"block\": \"{\\\"symbols\\\":[\\\"objGroup\\\",\\\"iIndex\\\"],\\\"statements\\\":[[4,\\\"card-style-component\\\",null,[[\\\"bApplyDefaultPadding\\\",\\\"bHideOverFlow\\\"],[false,false]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"filter-header\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"card-datagrid-filter\\\",null,[[\\\"class\\\",\\\"arrHeaderConfig\\\",\\\"sDatagridHeader\\\",\\\"cardDatagridFilterChangeEvent\\\"],[\\\"card-datagrid-filter\\\",[26,\\\"if\\\",[[22,[\\\"_bLoading\\\"]],false,[22,[\\\"_arrFilterConfig\\\"]]],null],[26,\\\"concat\\\",[[26,\\\"lookup-string\\\",[\\\"policies\\\",[22,[\\\"_objPolicyStringsService\\\"]]],null],[22,[\\\"_sHeaderPostfix\\\"]]],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridFilterChangeEvent\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"card-content\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\"],[[22,[\\\"_bLoading\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"page-description padding-bottom-normal font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"policiesDescription\\\",[22,[\\\"_objPolicyStringsService\\\"]]],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n        \\\"],[1,[20,\\\"horizontal-line-component\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"iMaxHeight\\\"],[500]],{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-bottom-normal padding-left-normal padding-right-normal\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"_arrItems\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[21,2,[]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[1,[20,\\\"horizontal-line-component\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal\\\"],[8],[0,\\\"\\\\n\\\\n                        \\\"],[6,\\\"table\\\"],[10,\\\"class\\\",\\\"full-width\\\"],[8],[0,\\\"\\\\n                            \\\"],[6,\\\"tr\\\"],[8],[0,\\\"\\\\n                                \\\"],[6,\\\"td\\\"],[8],[0,\\\"\\\\n                                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"section-heading\\\"],[8],[0,\\\"\\\\n                                        \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"class\\\",\\\"sHeader\\\",\\\"sHeaderSizeClass\\\",\\\"sHeaderClass\\\",\\\"bHasIcon\\\",\\\"sRoundButtonSize\\\",\\\"sIconName\\\",\\\"sIconClass\\\",\\\"sIconSizeClass\\\",\\\"bHasBlock\\\",\\\"bEllipseHeader\\\",\\\"funcCallback\\\"],[\\\"padding-left-small-minus\\\",[21,1,[\\\"sTitle\\\"]],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_HEADER_SIZE_SMALL\\\",[22,[\\\"_objConstantsEmberLibService\\\"]]],null],\\\"font-sm a24-grey-text-darken-3 text-bold\\\",true,[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_SIZE_SMALL\\\",[22,[\\\"_objConstantsEmberLibService\\\"]]],null],[21,1,[\\\"sIcon\\\"]],[26,\\\"concat\\\",[[21,1,[\\\"sColor\\\"]],\\\"-text\\\"],null],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_CONTENT_SIZE_MEDIUM\\\",[22,[\\\"_objConstantsEmberLibService\\\"]]],null],false,false,[21,1,[\\\"funcHeaderClickCallback\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[21,1,[\\\"bHasSignedOutdated\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"singed-outdated\\\"],[8],[0,\\\"\\\\n                                                \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sToolTipText\\\",\\\"sRoundButtonSize\\\",\\\"sIconSizeClass\\\",\\\"sIcon\\\",\\\"onRoundIconClick\\\"],[[26,\\\"lookup-string\\\",[\\\"outdatedSignedVersion\\\",[22,[\\\"_objPolicyStringsService\\\"]]],null],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_SIZE_SMALL\\\",[22,[\\\"_objConstantsEmberLibService\\\"]]],null],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_CONTENT_SIZE_MEDIUM\\\",[22,[\\\"_objConstantsEmberLibService\\\"]]],null],\\\"update\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onOutdatedClick\\\",[21,1,[]]],null]]]],false],[0,\\\"\\\\n                                            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                                    \\\"],[9],[0,\\\"\\\\n                                \\\"],[9],[0,\\\"\\\\n                                \\\"],[6,\\\"td\\\"],[8],[0,\\\"\\\\n                                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"action-text text-align-right font-sm a24-grey-text-darken-1 cursor-clickable\\\"],[3,\\\"action\\\",[[21,0,[]],[21,1,[\\\"funcHeaderClickCallback\\\"]]]],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[21,1,[\\\"bAccepted\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bIsAgencyGroup\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                                \\\"],[1,[26,\\\"lookup-string\\\",[\\\"download\\\"],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                                                \\\"],[1,[26,\\\"lookup-string\\\",[\\\"accepted\\\",[22,[\\\"_objPolicyStringsService\\\"]]],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[21,1,[\\\"bHasSignedOutdated\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bIsAgencyGroup\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                                    \\\"],[1,[26,\\\"lookup-string\\\",[\\\"download\\\"],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                                                    \\\"],[1,[26,\\\"lookup-string\\\",[\\\"reAccept\\\",[22,[\\\"_objPolicyStringsService\\\"]]],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[21,1,[\\\"bReadOnly\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bIsAgencyGroup\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                                        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"download\\\"],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                                                        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"view\\\",[22,[\\\"_objPolicyStringsService\\\"]]],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bIsAgencyGroup\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                                        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"download\\\"],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                                                        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"awaitingAcceptance\\\",[22,[\\\"_objPolicyStringsService\\\"]]],null],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"\\\\n                                    \\\"],[9],[0,\\\"\\\\n                                \\\"],[9],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"view-more-component\\\",null,[[\\\"iHeight\\\"],[3.7]],{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-sm a24-grey-text-darken-1 padding-bottom-normal\\\"],[8],[0,\\\"\\\\n                                \\\"],[1,[21,1,[\\\"sDescription\\\"]],false],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1,2]},{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-sm a24-grey-text-darken-1 padding-top-normal\\\"],[8],[0,\\\"\\\\n                        \\\"],[1,[20,\\\"_sEmptyPoliciesMessage\\\"],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-policy-library/templates/components/candidate-policy.hbs\" } });\n});","define(\"a24-ember-policy-library/templates/components/page-candidate-policy-group-list\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"mfIdq4CL\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"candidate-policy\\\",null,[[\\\"sCandidateId\\\",\\\"objPolicyGroupService\\\"],[[22,[\\\"_sCandidateId\\\"]],[22,[\\\"_objRestCandidatePolicyGroupService\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-policy-library/templates/components/page-candidate-policy-group-list.hbs\" } });\n});","define(\"a24-ember-policy-library/templates/components/page-candidate-policy-view\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"zj1WLXU4\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[4,\\\"card-style-component\\\",null,[[\\\"bApplyDefaultPadding\\\",\\\"bHideOverFlow\\\"],[false,true]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"page-header\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\"],[[22,[\\\"_bLoading\\\"]]]]],false],[0,\\\"\\\\n            \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"class\\\",\\\"objSpecialAction\\\",\\\"bEllipseHeader\\\"],[[22,[\\\"_sTitle\\\"]],\\\"padding-bottom-micro\\\",[22,[\\\"_objDownloadAction\\\"]],false]]],false],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[22,[\\\"_bLatest\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"policy-view-outdated grey lighten-3\\\"],[8],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"class\\\",\\\"sHeader\\\",\\\"sHeaderSizeClass\\\",\\\"sHeaderClass\\\",\\\"bEllipseHeader\\\",\\\"sIconClass\\\",\\\"sIconSizeClass\\\",\\\"sIconName\\\",\\\"bHasIcon\\\"],[\\\"padding-left-normal\\\",[26,\\\"lookup-string\\\",[\\\"outdatedMessage\\\",[22,[\\\"_objPolicyStringsService\\\"]]],null],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_HEADER_SIZE_SMALL\\\",[22,[\\\"_objConstantsEmberLibService\\\"]]],null],\\\"text-bold a24-grey-text-darken-1\\\",false,\\\"text-darken-1 grey-text\\\",[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_SIZE_SMALL\\\",[22,[\\\"_objConstantsEmberLibService\\\"]]],null],\\\"priority_high\\\",true]]],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal\\\"],[8],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"view-more-component\\\",null,[[\\\"iHeight\\\",\\\"bDisplayHorizRule\\\",\\\"sViewMoreLabel\\\"],[10,true,[22,[\\\"_sViewMoreText\\\"]]]],{\\\"statements\\\":[[0,\\\"                        \\\"],[1,[26,\\\"iframe-sourceless\\\",null,[[\\\"sContent\\\",\\\"sStyles\\\"],[[22,[\\\"_sContent\\\"]],[22,[\\\"_sContentCss\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_sPrompt\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[26,\\\"iframe-sourceless\\\",null,[[\\\"sContent\\\",\\\"sStyles\\\"],[[22,[\\\"_sPrompt\\\"]],[22,[\\\"_sPromptCss\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"            \\\"],[9],[0,\\\"\\\\n\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-bottom-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"backButtonAction\\\"]],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"lookup-string\\\",[\\\"back\\\"],null],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bDisplayConfirmButton\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button-blue waves-effect waves-light\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"confirmButtonAction\\\"]],[8],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-policy-library/templates/components/page-candidate-policy-view.hbs\" } });\n});","define(\"a24-ember-policy-library/templates/components/page-policy-add-edit\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"BKq8Qiit\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\"],[[26,\\\"lookup-string\\\",[\\\"createPolicyVersion\\\",[22,[\\\"_objPolicyStringsService\\\"]]],null],[22,[\\\"_bLoading\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"input-form-html\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"bRequired\\\",\\\"iOrder\\\",\\\"sValue\\\",\\\"arrAdditionalCssFiles\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\"],[[26,\\\"lookup-string\\\",[\\\"policyContent\\\",[22,[\\\"_objPolicyStringsService\\\"]]],null],\\\"content.html\\\",true,1,[22,[\\\"_sContentValue\\\"]],[22,[\\\"_arrAdditionalCssFiles\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[[26,\\\"if\\\",[[22,[\\\"_bPromptVisible\\\"]],\\\"col-md-12\\\",\\\"col-md-12 display-none\\\"],null]]]],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"input-form-html\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"sValue\\\",\\\"arrAdditionalCssFiles\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"policyAcknowledgement\\\",[22,[\\\"_objPolicyStringsService\\\"]]],null],\\\"prompt.html\\\",2,true,[22,[\\\"_sPromptValue\\\"]],[22,[\\\"_arrAdditionalCssFiles\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"input-form-date-picker\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"sSelectedDate\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"effectiveAt\\\"],null],\\\"effective_at\\\",3,true,[22,[\\\"_sEffectiveFromValue\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string\\\",[\\\"a24RequiredFieldsMarked\\\"],null],false],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onCancel\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[9],[0,\\\"\\\\n            \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onDownloadPDFPreview\\\"]],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"lookup-string\\\",[\\\"downloadPdfPreview\\\"],null],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button-blue waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onSave\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"save\\\"],null],false],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowUnsavedData\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupUnsavedConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"unsavedData\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-policy-library/templates/components/page-policy-add-edit.hbs\" } });\n});","define(\"a24-ember-policy-library/templates/components/page-policy-type-list\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"ZF9ddKhP\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objParentScroller\\\",\\\"objGroup\\\",\\\"iIndex\\\",\\\"objPolicy\\\"],\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[4,\\\"card-style-component\\\",null,[[\\\"bApplyDefaultPadding\\\"],[false]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"filter-header\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"card-datagrid-filter\\\",null,[[\\\"class\\\",\\\"arrHeaderConfig\\\",\\\"sDatagridHeader\\\",\\\"cardDatagridFilterChangeEvent\\\"],[\\\"card-datagrid-filter\\\",[26,\\\"if\\\",[[22,[\\\"_bLoading\\\"]],false,[22,[\\\"_arrFilterConfig\\\"]]],null],[26,\\\"lookup-string\\\",[\\\"policies\\\",[22,[\\\"_objPolicyStringsService\\\"]]],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridFilterChangeEvent\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"card-content\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\",\\\"sBlackOutClass\\\"],[[22,[\\\"_bLoading\\\"]],\\\"padding-right-normal padding-left-normal\\\"]]],false],[0,\\\"\\\\n            \\\"],[1,[20,\\\"horizontal-line-component\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"iMaxHeight\\\"],[500]],{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative showActionsOnCollapseHover\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"_arrItems\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[21,4,[]]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[1,[20,\\\"horizontal-line-component\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"collapse-trigger-component\\\",null,[[\\\"sCollapseSectionId\\\"],[[21,3,[\\\"sItemCollapseId\\\"]]]],{\\\"statements\\\":[[0,\\\"                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-6\\\"],[8],[0,\\\"\\\\n                                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal padding-left-normal\\\"],[8],[0,\\\"\\\\n                                        \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"class\\\",\\\"sHeader\\\",\\\"sHeaderSizeClass\\\",\\\"sHeaderClass\\\"],[\\\"padding-bottom-normal\\\",[21,3,[\\\"title\\\"]],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_HEADER_SIZE_SMALL\\\",[22,[\\\"_objConstantsEmberLibService\\\"]]],null],\\\"text-bold a24-grey-text-darken-3\\\"]]],false],[0,\\\"\\\\n\\\\n                                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-bottom-normal font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n                                            \\\"],[1,[21,3,[\\\"description\\\"]],false],[0,\\\"\\\\n                                        \\\"],[9],[0,\\\"\\\\n                                    \\\"],[9],[0,\\\"\\\\n                                \\\"],[9],[0,\\\"\\\\n                                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-6\\\"],[8],[0,\\\"\\\\n                                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal padding-left-normal\\\"],[8],[0,\\\"\\\\n                                        \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"class\\\",\\\"sHeader\\\",\\\"sHeaderSizeClass\\\",\\\"sHeaderClass\\\",\\\"arrActionItems\\\"],[\\\"padding-bottom-normal\\\",[21,3,[\\\"sOptionList\\\"]],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_HEADER_SIZE_SMALL\\\",[22,[\\\"_objConstantsEmberLibService\\\"]]],null],\\\"heading-text text-ellipse heading-small a24-grey-text-darken-3\\\",[21,3,[\\\"arrCollapseActions\\\"]]]]],false],[0,\\\"\\\\n                                    \\\"],[9],[0,\\\"\\\\n                                \\\"],[9],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"collapse-section-component\\\",null,[[\\\"sCollapseSectionId\\\",\\\"onCollapseExpandStart\\\"],[[21,3,[\\\"sItemCollapseId\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onCollapseExpandStart\\\"],null]]],{\\\"statements\\\":[[0,\\\"                            \\\"],[1,[20,\\\"horizontal-line-component\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[21,3,[\\\"arrPolicies\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-normal grey lighten-4 showActionsOnCollapseHover\\\"],[8],[0,\\\"\\\\n                                    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"class\\\",\\\"sHeader\\\",\\\"sHeaderSizeClass\\\",\\\"sHeaderClass\\\"],[\\\"padding-bottom-small padding-left-normal padding-top-normal\\\",[26,\\\"lookup-string\\\",[\\\"policyVersions\\\",[22,[\\\"_objPolicyStringsService\\\"]]],null],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_HEADER_SIZE_SMALL\\\",[22,[\\\"_objConstantsEmberLibService\\\"]]],null],\\\"text-bold a24-grey-text-darken-3\\\"]]],false],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[21,3,[\\\"arrPolicies\\\"]]],null,{\\\"statements\\\":[[4,\\\"collapse-trigger-component\\\",null,[[\\\"bDisplayArrow\\\",\\\"click\\\",\\\"bShouldShowCollapsed\\\"],[false,[26,\\\"action\\\",[[21,0,[]],\\\"onDownloadPDFPreview\\\",[21,5,[\\\"iPolicyTypeId\\\"]],[21,5,[\\\"iVersion\\\"]]],null],true]],{\\\"statements\\\":[[0,\\\"                                            \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"sHeaderSizeClass\\\",\\\"sHeaderClass\\\",\\\"class\\\",\\\"arrActionItems\\\"],[[21,5,[\\\"sSubHeader\\\"]],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_HEADER_SIZE_SMALL\\\",[22,[\\\"_objConstantsEmberLibService\\\"]]],null],\\\"text-bold a24-grey-text-darken-1\\\",\\\"padding-normal\\\",[21,5,[\\\"arrActions\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                                        \\\"],[1,[26,\\\"view-edit-section-content\\\",null,[[\\\"class\\\",\\\"arrData\\\"],[\\\"padding-left-normal\\\",[21,5,[\\\"arrExtraData\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[5]},null],[0,\\\"                                \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[21,3,[\\\"bPoliciesCallDone\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-normal grey lighten-4 no-data\\\"],[8],[0,\\\"\\\\n                                        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"noData\\\"],null],false],[0,\\\"\\\\n                                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n                                        \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\",\\\"sBlackOutClass\\\"],[true,\\\"grey lighten-4\\\"]]],false],[0,\\\"\\\\n                                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3,4]},{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal font-sm a24-grey-text-darken-1 text-center\\\"],[8],[0,\\\"\\\\n                            \\\"],[1,[26,\\\"lookup-string\\\",[\\\"noPoliciesAvailable\\\",[22,[\\\"_objPolicyStringsService\\\"]]],null],false],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"                \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[9],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-small\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"card-datagrid-pager\\\",null,[[\\\"iResultCount\\\",\\\"iPage\\\",\\\"iPerPage\\\",\\\"cardDatagridPagerEvent\\\"],[[22,[\\\"_iResultCount\\\"]],[22,[\\\"_iPage\\\"]],[22,[\\\"_iPerPage\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridPagerEvent\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"bDismissible\\\",\\\"onPopupBackdropClick\\\",\\\"onPopupResponsiveDismiss\\\"],[[22,[\\\"_bAddPopupShow\\\"]],[22,[\\\"_bAddPopupLoading\\\"]],false,false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupAddCancel\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupAddCancel\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"sHeaderSizeClass\\\",\\\"class\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[[26,\\\"lookup-string\\\",[\\\"createPolicy\\\",[22,[\\\"_objPolicyStringsService\\\"]]],null],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_HEADER_SIZE_LARGE\\\",[22,[\\\"_objConstantsEmberLibService\\\"]]],null],\\\"padding-double popup-header-gray\\\",[21,1,[]],[22,[\\\"_objSpecialAddPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-left-double padding-right-double padding-top-double\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"bRequired\\\",\\\"iOrder\\\",\\\"sValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"title\\\"],null],\\\"title\\\",true,1,[22,[\\\"_sInputPolicyTitle\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text-area\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"bStaticHeader\\\",\\\"sValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"description\\\"],null],\\\"description\\\",2,true,true,[22,[\\\"_sInputPolicyDesc\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"arrOptions\\\",\\\"bRequired\\\",\\\"iOrder\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"classification\\\",[22,[\\\"_objPolicyStringsService\\\"]]],null],\\\"classification\\\",[22,[\\\"_arrClassificationDropdown\\\"]],true,3,[22,[\\\"objSelectedClassification\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-checkbox\\\",null,[[\\\"sProperty\\\",\\\"sFieldName\\\",\\\"bRequired\\\",\\\"iOrder\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\",\\\"onErrorMessageSetAction\\\"],[\\\"options.public_policy\\\",[26,\\\"lookup-string\\\",[\\\"public\\\",[22,[\\\"_objPolicyStringsService\\\"]]],null],false,4,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-checkbox\\\",null,[[\\\"sProperty\\\",\\\"sFieldName\\\",\\\"bRequired\\\",\\\"iOrder\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\",\\\"onErrorMessageSetAction\\\"],[\\\"options.registration_policy\\\",[26,\\\"lookup-string\\\",[\\\"registration\\\",[22,[\\\"_objPolicyStringsService\\\"]]],null],false,5,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-left-double padding-right-double padding-top-normal font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"a24RequiredFieldsMarked\\\"],null],false],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupAddCancel\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupAddConfirm\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"save\\\"],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowUnsavedData\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupUnsavedConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"unsavedData\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-policy-library/templates/components/page-policy-type-list.hbs\" } });\n});","define(\"a24-ember-policy-library/templates/components/page-policy-type-view\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"rAPLnaez\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"policy-details\\\",null,[[\\\"breadcrumbTitleEvent\\\",\\\"bPolicyVersionsLoading\\\",\\\"arrPolicyVersionData\\\",\\\"sPolicyTypeRestService\\\"],[[26,\\\"action\\\",[[21,0,[]],\\\"breadcrumbTitleEvent\\\"],null],[22,[\\\"_bPolicyVersionsLoading\\\"]],[22,[\\\"_arrPolicyVersionData\\\"]],[22,[\\\"sPolicyTypeRestService\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[1,[26,\\\"policy-versions\\\",null,[[\\\"arrPolicyVersionData\\\",\\\"sPolicyRestService\\\"],[[22,[\\\"_arrPolicyVersionData\\\"]],[22,[\\\"sPolicyRestService\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-policy-library/templates/components/page-policy-type-view.hbs\" } });\n});","define(\"a24-ember-policy-library/templates/components/policy-details\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"brjjVzJH\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objParentScroller\\\"],\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"arrActionItems\\\",\\\"bLoading\\\"],[[26,\\\"lookup-string\\\",[\\\"policyDetails\\\",[22,[\\\"_objPolicyStringsService\\\"]]],null],[22,[\\\"_arrHeaderActions\\\"]],[22,[\\\"_bLoading\\\"]]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"view-edit-section-content\\\",null,[[\\\"arrData\\\"],[[22,[\\\"_arrPolicyData\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"bDismissible\\\",\\\"onPopupBackdropClick\\\"],[[22,[\\\"_bEditPopupShow\\\"]],[22,[\\\"_bEditPopupLoading\\\"]],false,false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupEditCancel\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"sHeaderSizeClass\\\",\\\"class\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[[26,\\\"lookup-string\\\",[\\\"updatePolicy\\\",[22,[\\\"_objPolicyStringsService\\\"]]],null],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_HEADER_SIZE_LARGE\\\",[22,[\\\"_objConstantsEmberLibService\\\"]]],null],\\\"padding-double popup-header-gray\\\",[21,1,[]],[22,[\\\"_objSpecialEditPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-left-double padding-right-double padding-top-double\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"bRequired\\\",\\\"iOrder\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"title\\\"],null],\\\"title\\\",true,1,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text-area\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"bStaticHeader\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"description\\\"],null],\\\"description\\\",2,true,true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[[26,\\\"if\\\",[[22,[\\\"_bClassificationVisible\\\"]],\\\"col-md-12\\\",\\\"col-md-12 display-none\\\"],null]]]],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"arrOptions\\\",\\\"bRequired\\\",\\\"iOrder\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"classification\\\",[22,[\\\"_objPolicyStringsService\\\"]]],null],\\\"classification\\\",[22,[\\\"_arrClassificationDropdown\\\"]],true,3,[22,[\\\"_objSelectedClassification\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-checkbox\\\",null,[[\\\"sProperty\\\",\\\"sFieldName\\\",\\\"bRequired\\\",\\\"bValue\\\",\\\"iOrder\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\",\\\"onErrorMessageSetAction\\\"],[\\\"options.public_policy\\\",[26,\\\"lookup-string\\\",[\\\"public\\\",[22,[\\\"_objPolicyStringsService\\\"]]],null],false,[22,[\\\"_bPublic\\\"]],4,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-checkbox\\\",null,[[\\\"sProperty\\\",\\\"sFieldName\\\",\\\"bRequired\\\",\\\"bValue\\\",\\\"iOrder\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\",\\\"onErrorMessageSetAction\\\"],[\\\"options.registration_policy\\\",[26,\\\"lookup-string\\\",[\\\"registration\\\",[22,[\\\"_objPolicyStringsService\\\"]]],null],false,[22,[\\\"_bRegistration\\\"]],5,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-left-double padding-right-double padding-top-normal font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"a24RequiredFieldsMarked\\\"],null],false],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupEditCancel\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupEditConfirm\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"save\\\"],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowUnsavedData\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupUnsavedConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"unsavedData\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-policy-library/templates/components/policy-details.hbs\" } });\n});","define(\"a24-ember-policy-library/templates/components/policy-versions\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"0HHi+uHD\", \"block\": \"{\\\"symbols\\\":[\\\"objPolicy\\\",\\\"iIndex\\\"],\\\"statements\\\":[[4,\\\"card-style-component\\\",null,[[\\\"bApplyDefaultPadding\\\"],[false]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"sHeaderSizeClass\\\",\\\"arrActionItems\\\",\\\"class\\\"],[[26,\\\"lookup-string\\\",[\\\"policyVersions\\\",[22,[\\\"_objPolicyStringsService\\\"]]],null],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_HEADER_SIZE_LARGE\\\",[22,[\\\"_objConstantsEmberLibService\\\"]]],null],[22,[\\\"_arrHeaderActions\\\"]],\\\"padding-left-normal padding-right-small padding-top-double padding-bottom-normal\\\"]]],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"iMaxHeight\\\"],[500]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative showActionsOnCollapseHover\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\"],[[22,[\\\"_bLoading\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"_arrPolicyData\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[1,[20,\\\"horizontal-line-component\\\"],false],[0,\\\"\\\\n\\\"],[4,\\\"accordion-item-component\\\",null,[[\\\"sHeader\\\",\\\"sHeaderClass\\\",\\\"sIconName\\\",\\\"sIconClass\\\",\\\"sExtraInfo\\\",\\\"arrActionItems\\\",\\\"bExpanded\\\"],[[21,1,[\\\"sName\\\"]],\\\"a24-grey-text-darken-3\\\",\\\"library_books\\\",\\\"grey-text\\\",[21,1,[\\\"sExtraInfo\\\"]],[21,1,[\\\"arrActions\\\"]],[21,1,[\\\"bExpanded\\\"]]]],{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-left-normal padding-bottom-normal padding-right-normal\\\"],[8],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"view-edit-section-content\\\",null,[[\\\"arrData\\\"],[[21,1,[\\\"arrItems\\\"]]]]],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[1,2]},{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"no-data padding-bottom-normal\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"noData\\\"],null],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-policy-library/templates/components/policy-versions.hbs\" } });\n});","define(\"a24-ember-staffshift-candidate-availability/components/agency-day-view\", [\"exports\", \"a24-ember-staffshift-candidate-availability/templates/components/agency-day-view\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _agencyDayView, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _agencyDayView.default,\n        classNames: [\"day-view\"],\n\n        sDate: null,\n        sCandidateEmail: null,\n\n        bDayIsLoading: false,\n        bAvailabilityLoading: false,\n        bBookingLoading: false,\n        _bNumbersLoading: true,\n        bEditMode: false,\n\n        objBookedShiftData: null,\n        objAvailData: null,\n        objBookingPromise: null,\n        objStoredData: null,\n        objEditData: null,\n\n        arrAvailabilityActions: null,\n\n        objAvailabilityService: null,\n        objBookedShiftsService: null,\n        objEmailRestService: null,\n        objSaveAvailability: null,\n        arrNumbers: null,\n        _bHasMobileNumber: null,\n        _bShowUnsavedData: false,\n        _arrBookings: null,\n        _arrEntityActions: null,\n\n        _objAvailabilityPromise: null,\n        _objEntityActionShiftPromise: null,\n\n        _bReactPopupOpen: false,\n        _sIFrameUrl: \"\",\n        _bReactPopupLoading: false,\n        _objReactPopupPostData: null,\n\n        _ENV: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n        _sReactGatewayUrl: Ember.computed.readOnly(\"_ENV.sReactGatewayUrl\"),\n\n        //TODO fix hard coded string in hbs for Shifts\n\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objAvailabilityStrings: Ember.inject.service(\"a24-strings-staffshift-availability\"),\n        _objStrings: Ember.inject.service(\"a24-strings\"),\n        _objSSCoreStrings: Ember.inject.service(\"a24-strings-staffshift-core\"),\n        _objConstantsEmberLibService: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objStaffingShiftDetailsService: Ember.inject.service(\"rest-staffing-shift-details\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objRestEntityActionShift: Ember.inject.service(\"rest-entity-action-shift\"),\n        _bBookingOrNumbersLoading: Ember.computed(\"bBookingLoading\", \"_bNumbersLoading\", function () {\n            return Ember.get(this, \"bBookingLoading\") || Ember.get(this, \"_bNumbersLoading\");\n        }),\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"_sIFrameUrl\", this.get(\"_sReactGatewayUrl\"));\n\n            this.onDateChange();\n            this.onLoadingChange();\n            this.onNumbersChange();\n        },\n        onAvailabilityActionsChange: Ember.observer(\"sDate\", \"bDayIsLoading\", function () {\n            if (Ember.get(this, \"bDayIsLoading\")) {\n                Ember.set(this, \"arrAvailabilityActions\", null);\n            } else {\n                var objDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n                objDate.setDateFromRest(Ember.get(this, \"sDate\"), true);\n                objDate.setTimeToStartOfDay();\n\n                var objTodayDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n                objTodayDate.setTimeToStartOfDay();\n\n                var objThis = this;\n\n                if (!objDate.isBefore(objTodayDate)) {\n                    Ember.set(this, \"arrAvailabilityActions\", [{\n                        sTitle: Ember.get(this, \"_objStrings\").getString(\"edit\"),\n                        sIcon: \"mode_edit\",\n                        executeCardAction: function executeCardAction() {\n                            objThis.onEditState();\n                        }\n                    }]);\n                } else {\n                    Ember.set(this, \"arrAvailabilityActions\", null);\n                }\n            }\n        }),\n        onEditState: function onEditState() {\n            this.set(\"objStoredData\", Ember.copy(Ember.get(this, \"objAvailData\"), true));\n            this.set(\"objEditData\", Ember.copy(Ember.get(this, \"objAvailData\"), true));\n\n            Ember.set(this, \"bEditMode\", true);\n        },\n        onNumbersChange: Ember.observer(\"arrNumbers\", function () {\n            this.set(\"_bHasMobileNumber\", false);\n            var arrNumbers = this.get(\"arrNumbers\");\n            if (arrNumbers !== null) {\n                for (var i = 0; i < arrNumbers.length; i++) {\n                    if ((arrNumbers[i].type === \"mobile\" || arrNumbers[i].type === \"whatsapp\") && !a24Core.isEmpty(arrNumbers[i].number)) {\n                        this.set(\"_bHasMobileNumber\", true);\n                    }\n                }\n\n                this.set(\"_bNumbersLoading\", false);\n            }\n        }),\n        onDateChange: Ember.observer(\"sDate\", function () {\n            var _this = this;\n\n            var objDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n            objDate.setDateFromRest(Ember.get(this, \"sDate\"), true);\n\n            Ember.set(this, \"sHeader\", objDate.getDateFormat() + \" | \" + Ember.get(this, \"_objAvailabilityStrings\").getString(\"availability\"));\n\n            objDate.setTimeToStartOfDay();\n            var sTodayStart = objDate.getDateStringForRest();\n            objDate.setTimeToEndOfDay();\n            var sTodayEnd = objDate.getDateStringForRest();\n\n            var sTodayDateOnly = objDate.getDateStringForRest(true);\n\n            var objYesterday = $.extend(true, objDate);\n            objYesterday.subtractTimeFromDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_DAYS, 1);\n            objYesterday.setTimeToStartOfDay();\n            var sYesterdayStart = objYesterday.getDateStringForRest();\n\n            var sCandidateId = \"\";\n            if (Ember.get(this, \"objAvailabilityService.sContext\") === Ember.get(this, \"_objStaffshiftCoreConstants.CONTEXT_CANDIDATE\")) {\n                sCandidateId = this.get(\"_objUserSession\").getUserContextReference().mId;\n            } else {\n                var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n                sCandidateId = objCandidateSearchViewParams.candidate_id;\n            }\n\n            var objAvailabilityService = Ember.get(this, \"objAvailabilityService\").getAvailability(this, \"_objAvailabilityPromise\", sCandidateId, function () {}, null, {\n                dAvailabilityDate: {\n                    mValue: sTodayDateOnly\n                }\n            });\n\n            /**\n             * The singular day query can be done by taking any booking that starts either\n             * the current day or the day before and not ending the day before. Due to\n             * the max shift length of 24 hours, this is a fine approach. A default order\n             * can be placed on dtStart\n             */\n            var objBookingService = Ember.get(this, \"objBookedShiftsService\").getShifts(this, \"objBookedShiftData\", {\n                start_date: {\n                    bEncode: true,\n                    bFromAndTo: true,\n                    mValue: {\n                        sFrom: sYesterdayStart,\n                        sTo: sTodayEnd\n                    }\n                },\n                end_date: {\n                    bEncode: true,\n                    bFrom: true,\n                    mValue: sTodayStart\n                },\n                candidate_id: {\n                    bEncode: true,\n                    mValue: sCandidateId\n                }\n            }, { start_date: { mValue: \"asc\", bSortBy: true } }, 1, 1000, function () {}, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () {\n                Ember.set(_this, \"_arrBookings\", []);\n                Ember.set(_this, \"bBookingLoading\", false);\n            }));\n\n            var objPromiseList = {\n                _objAvailabilityProperty: objAvailabilityService,\n                _objBookingPromise: objBookingService\n            };\n\n            Ember.set(this, \"bDayIsLoading\", true);\n            Ember.set(this, \"bAvailabilityLoading\", true);\n            Ember.set(this, \"bBookingLoading\", true);\n\n            var objThis = this;\n\n            Ember.copy(a24RSVP).configure(this, objPromiseList, [{\n                arrRequiredResponses: [\"_objAvailabilityProperty\", \"_objBookingPromise\"],\n                funcOnComplete: function funcOnComplete(objResponses) {\n\n                    if (!a24Core.isEmpty(objResponses._objAvailabilityProperty) && !a24Core.isEmpty(objResponses._objAvailabilityProperty.objHeaders) && objResponses._objAvailabilityProperty.objHeaders.statusText === \"abort\") {\n                        return;\n                    }\n                    if (!a24Core.isEmpty(objResponses._objBookingPromise) && !a24Core.isEmpty(objResponses._objBookingPromise.objHeaders) && objResponses._objBookingPromise.objHeaders.statusText === \"abort\") {\n                        return;\n                    }\n\n                    if (!a24Core.isEmpty(objResponses._objAvailabilityProperty)) {\n                        var objData = objResponses._objAvailabilityProperty.objResponse;\n\n                        if (a24Core.isEmpty(objData) || a24Core.isEmpty(objData[0])) {\n                            objData = [{}];\n                        }\n\n                        var sEarly = objData[0].sEarly || Ember.get(_this, \"_objAvailabilityStrings\").getString(\"unknown\");\n                        var sLate = objData[0].sLate || Ember.get(_this, \"_objAvailabilityStrings\").getString(\"unknown\");\n                        var sNight = objData[0].sNight || Ember.get(_this, \"_objAvailabilityStrings\").getString(\"unknown\");\n\n                        var objParsedData = {\n                            objEarly: {\n                                sState: sEarly,\n                                sLabel: sEarly\n                            },\n                            objLate: {\n                                sState: sLate,\n                                sLabel: sLate\n                            },\n                            objNight: {\n                                sState: sNight,\n                                sLabel: sNight\n                            }\n                        };\n\n                        Ember.set(_this, \"objAvailData\", objParsedData);\n\n                        Ember.set(_this, \"bAvailabilityLoading\", false);\n                    }\n\n                    if (!a24Core.isEmpty(objResponses._objBookingPromise)) {\n                        var arrData = objResponses._objBookingPromise.objResponse;\n                        if (a24Core.isEmpty(arrData)) {\n                            arrData = [];\n                        }\n                        Ember.set(_this, \"_arrBookings\", arrData);\n                        Ember.set(_this, \"bBookingLoading\", false);\n                        _this.getBookedShiftsEntityAction(arrData);\n                    } else {\n                        Ember.set(_this, \"_arrBookings\", []);\n                        Ember.set(_this, \"bBookingLoading\", false);\n                        _this.set(\"_arrEntityActions\", []);\n                    }\n\n                    Ember.set(objThis, \"bDayIsLoading\", false);\n                }\n            }]);\n        }),\n        getBookedShiftsEntityAction: function getBookedShiftsEntityAction(arrBookings) {\n            var _this2 = this;\n\n            var arrShiftIds = [];\n            for (var i = 0; i < arrBookings.length; i++) {\n                arrShiftIds.push(arrBookings[i].shift_id);\n            }\n\n            var objQuery = {\n                shift_ids: { mValue: arrShiftIds.join(\",\") }\n            };\n\n            this.get(\"_objRestEntityActionShift\").getShiftsEntityActions(this, \"_objEntityActionShiftPromise\", objQuery, function (arrResponse) {\n                _this2.set(\"_arrEntityActions\", arrResponse);\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode , sStatus, objErrorThrown, objError*/{\n                _this2.set(\"_arrEntityActions\", []);\n            }));\n        },\n        onLoadingChange: Ember.observer(\"bDayIsLoading\", function () {\n            var _this3 = this;\n\n            Ember.run.next(function () {\n                if (!a24Core.isEmpty(_this3.get(\"onLoadingStateChange\"))) {\n                    _this3.get(\"onLoadingStateChange\")(Ember.get(_this3, \"bDayIsLoading\"));\n                }\n            });\n        }),\n\n        lookupNextAvailabilityState: function lookupNextAvailabilityState(sState) {\n            var arrOrder = [Ember.get(this, \"_objAvailabilityStrings\").getString(\"unknown\"), Ember.get(this, \"_objAvailabilityStrings\").getString(\"available\"), Ember.get(this, \"_objAvailabilityStrings\").getString(\"unavailable\"), Ember.get(this, \"_objAvailabilityStrings\").getString(\"unknown\")];\n\n            return arrOrder[arrOrder.indexOf(sState) + 1];\n        },\n\n        cancelChangesWithUnsavedCheck: function cancelChangesWithUnsavedCheck() {\n            var objStoredData = Ember.get(this, \"objStoredData\");\n            var objEditData = Ember.get(this, \"objEditData\");\n\n            var bDataUnchanged = objStoredData.objEarly.sState === objEditData.objEarly.sState && objStoredData.objLate.sState === objEditData.objLate.sState && objStoredData.objNight.sState === objEditData.objNight.sState;\n\n            if (bDataUnchanged) {\n                Ember.set(this, \"bEditMode\", false);\n            } else {\n                Ember.set(this, \"_bShowUnsavedData\", true);\n            }\n        },\n\n        onSave: function onSave() {\n            var _this4 = this;\n\n            Ember.set(this, \"bEditPopupLoading\", true);\n\n            this.get(\"_objSnackbarService\").showSnackbarMessage(Ember.get(this, \"_objAvailabilityStrings\").getString(\"updatingAvailability\"));\n\n            var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n            var sCandidateId = objCandidateSearchViewParams.candidate_id;\n\n            var objDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n            objDate.setDateFromRest(Ember.get(this, \"sDate\"), true);\n\n            var sDate = objDate.getDateStringForRest(true);\n\n            var objEdited = Ember.get(this, \"objEditData\");\n\n            var objPayload = {\n                arrAvailability: [{\n                    dAvailabilityDate: sDate,\n                    sEarly: objEdited.objEarly.sState,\n                    sLate: objEdited.objLate.sState,\n                    sNight: objEdited.objNight.sState\n                }]\n            };\n\n            Ember.get(this, \"objAvailabilityService\").updateAvailability(this, \"objSaveAvailability\", sCandidateId, function (objData) {\n                if (!a24Core.isEmpty(objData.arrWarnings)) {\n                    _this4.onDateChange();\n                    _this4.get(\"_objSnackbarService\").showSnackbarMessage(Ember.get(_this4, \"_objAvailabilityStrings\").getString(\"availabilityPartiallyUpdated\"));\n                } else {\n                    Ember.set(_this4, \"objAvailData\", Ember.get(_this4, \"objEditData\"));\n\n                    _this4.get(\"_objSnackbarService\").showSnackbarMessage(Ember.get(_this4, \"_objAvailabilityStrings\").getString(\"availabilityUpdated\"));\n                }\n                Ember.set(_this4, \"bEditPopupLoading\", false);\n                Ember.set(_this4, \"bEditMode\", false);\n            }, null, objPayload);\n        },\n\n        actions: {\n            onShiftClick: function onShiftClick(sPeriod, objHash) {\n                var sState = objHash.sState;\n                sState = this.lookupNextAvailabilityState(sState);\n\n                Ember.set(this, \"objEditData.\" + sPeriod + \".sState\", sState);\n                Ember.set(this, \"objEditData.\" + sPeriod + \".sLabel\", sState);\n            },\n            onPopupUnsavedConfirm: function onPopupUnsavedConfirm() {\n                Ember.set(this, \"bEditMode\", false);\n            },\n            onEditPopupConfirm: function onEditPopupConfirm() {\n                this.onSave();\n            },\n            onPopupEditCancel: function onPopupEditCancel() {\n                this.cancelChangesWithUnsavedCheck();\n            },\n            onCancelShiftAction: function onCancelShiftAction(arrShifts) {\n                if (!a24Core.isEmpty(arrShifts)) {\n                    // The cancel route's payload names this `site_timezone`, but no api returns a\n                    // field by that name. The shift search returns the order's timezone as\n                    // `order_timezone`, and the route's other two callers map it the same way.\n                    // Copies rather than the shifts themselves, since those are the bookings the\n                    // cards are rendering.\n                    var arrPayloadShifts = arrShifts.map(function (objShift) {\n                        return Object.assign({}, objShift, {\n                            site_timezone: objShift.order_timezone\n                        });\n                    });\n\n                    // open react popup\n                    this.set(\"_bReactPopupOpen\", true);\n                    this.set(\"_objReactPopupPostData\", {\n                        type: \"trigger_route\",\n                        data: {\n                            route: \"agency/cancelShift/cancelShiftPopup\",\n                            data: {\n                                shifts: arrPayloadShifts\n                            }\n                        }\n                    });\n                }\n            },\n            onRecieveReactData: function onRecieveReactData(objData) {\n                if (objData.type === \"app_ready\" || objData.type === \"router_ready\") {\n                    this.set(\"_bReactPopupLoading\", false);\n                } else if (objData.type === \"refresh\") {\n                    this.onDateChange();\n                    Ember.get(this, \"_objSnackbarService\").showSnackbarMessage(Ember.get(this, \"_objSSCoreStrings\").getHTMLTokenString(\"updateItemDelay\"));\n                } else if (objData.type === \"close\") {\n                    this.set(\"_bReactPopupOpen\", false);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-candidate-availability/components/availability-card\", [\"exports\", \"a24-ember-staffshift-candidate-availability/templates/components/availability-card\", \"a24-ember-lib/components/card-style-component\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _availabilityCard, _cardStyleComponent, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _cardStyleComponent.default.extend(_didRenderChangesMixin.default, {\n        /*\n          Services.\n        */\n        objShiftEmail: Ember.inject.service(\"shift-email\"),\n        objRetrieveShiftPdf: Ember.inject.service(\"retrieve-shift-pdf\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objAvailabilityStrings: Ember.inject.service(\"a24-strings-staffshift-availability\"),\n        _objConstantsEmberLibService: Ember.inject.service(\"a24-constants-ember-lib\"),\n        objEmailServicePromise: null,\n\n        /*\n          Default values\n        */\n        layout: _availabilityCard.default,\n        classNames: [\"availability-card\", \"p-3\"],\n\n        /*\n          Store the default icon size for the header.\n        */\n        sIconSizeClass: null,\n\n        /*\n          @property arrData\n          An array of objects each specifying the information to display on the card.\n        */\n        arrData: null,\n\n        /*\n          @property sImageUrl\n          The header left image url.\n        */\n        sImageUrl: null,\n\n        /*\n          @property sHeader\n          The header displayed.\n        */\n        sHeader: null,\n\n        /*\n          @property sSubHeader\n          The sSubHeader displayed.\n        */\n        sSubHeader: null,\n\n        /*\n          @property sEmail\n          The email to send shift information to.\n        */\n        sEmail: null,\n\n        /*\n          @property sShiftId\n          The shift ID.\n        */\n        sShiftId: null,\n\n        /*\n          @property bShowEmailPopup\n          Used to determine if the email popup should be shown.\n        */\n        bShowEmailPopup: false,\n\n        /*\n          @property bSendingEmail\n          True if shift information is currently being sent to the provided `sEmail` value.\n        */\n        bSendingEmail: false,\n\n        /*\n          Inline computed properties\n        */\n        bHasImage: Ember.computed.bool(\"sImageUrl\").readOnly(),\n        bHasSubHeader: Ember.computed.bool(\"sSubHeader\").readOnly(),\n\n        /*\n          Multiline computed properties\n        */\n        /*\n          @computed arrActions\n          An array of objects each specifying their google material icon name and an action that is invoked when the icon is clicked on.\n        */\n        arrActions: Ember.computed(function () {\n            var objThis = this;\n\n            return [{\n                sIcon: \"email\",\n                executeCardAction: function executeCardAction() {\n                    objThis._showEmailPopup();\n                }\n            }, {\n                sIcon: \"print\",\n                executeCardAction: function executeCardAction() {\n                    objThis._downloadPDF();\n                }\n            }];\n        }).readOnly(),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            if (a24Core.isEmpty(this.get(\"sIconSizeClass\"))) {\n                this.set(\"sIconSizeClass\", this.get(\"_objConstantsEmberLibService\").ROUND_ICON_CONTENT_SIZE_SMALL);\n            }\n        },\n\n        /*\n          Private functions\n        */\n        _showEmailPopup: function _showEmailPopup() {\n            // Set the candidate email\n            Ember.set(this, \"sEmail\", Ember.get(this, \"_objUserSession\").getUserEmail());\n\n            Ember.set(this, \"bShowEmailPopup\", true);\n        },\n\n\n        /*\n          Sends request to download shift pdf\n        */\n        _downloadPDF: function _downloadPDF() {\n            var _this = this;\n\n            var sShiftId = Ember.get(this, \"sShiftId\");\n            Ember.get(this, \"_objSnackbarService\").showSnackbarMessage(Ember.get(this, \"_objAvailabilityStrings\").getString(\"downloadingTimesheet\"));\n            Ember.get(this, \"objRetrieveShiftPdf\").downloadCandidateShift(sShiftId, sShiftId + \".pdf\", function () {\n                Ember.get(_this, \"_objSnackbarService\").showSnackbarMessage(Ember.get(_this, \"_objAvailabilityStrings\").getString(\"successfullyDownloadedTimesheet\"));\n            }, function () {\n                Ember.get(_this, \"_objSnackbarService\").showSnackbarMessage(Ember.get(_this, \"_objAvailabilityStrings\").getString(\"failedDownloadedTimesheet\"));\n            }, null, {\n                Authorization: \"Bearer \" + this.get(\"_objUserSession.objAuthData.accessToken\"),\n                Context: \"Candidate\"\n            });\n        },\n\n\n        actions: {\n            /*\n              Gets called after the user clicks SEND on popup shift email request\n            */\n            emailShiftConfirm: function emailShiftConfirm() {\n                var _this2 = this;\n\n                var sShiftId = Ember.get(this, \"sShiftId\");\n                var sEmailAddress = Ember.get(this, \"sEmail\");\n\n                Ember.set(this, \"bSendingEmail\", true);\n\n                Ember.get(this, \"objShiftEmail\").postShiftEmail(this, \"objEmailServicePromise\", sEmailAddress, sShiftId, function () {\n                    Ember.set(_this2, \"bShowEmailPopup\", false);\n                    Ember.set(_this2, \"bSendingEmail\", false);\n                    Ember.get(_this2, \"_objSnackbarService\").showSnackbarMessage(Ember.get(_this2, \"_objAvailabilityStrings\").getString(\"emailSentSuccess\"));\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*CODE\"], function () {\n                    Ember.set(_this2, \"bShowEmailPopup\", false);\n                    Ember.set(_this2, \"bSendingEmail\", false);\n                    Ember.get(_this2, \"_objSnackbarService\").showSnackbarMessage(Ember.get(_this2, \"_objAvailabilityStrings\").getString(\"emailSentFailure\"));\n                }));\n            },\n            /*\n              Gets called after the user clicks CANCEL on popup shift email request\n            */\n            emailShiftCancel: function emailShiftCancel() {\n                Ember.set(this, \"bShowEmailPopup\", false);\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-candidate-availability/components/availability-shift-editor\", [\"exports\", \"a24-ember-staffshift-candidate-availability/templates/components/availability-shift-editor\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _availabilityShiftEditor, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _availabilityShiftEditor.default,\n\n        /*\n          @property objDay\n          The data object this component represents.\n        */\n        objData: null,\n\n        classNames: [\"availability-shift-editor\"],\n\n        actions: {\n            selectAvailability: function selectAvailability(sPeriod, objHash) {\n                if (!a24Core.isEmpty(this.get(\"onShiftClick\"))) {\n                    this.get(\"onShiftClick\")(sPeriod, objHash);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-candidate-availability/components/booked-shift-card-agency\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-candidate-availability/templates/components/booked-shift-card-agency\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _didRenderChangesMixin, _bookedShiftCardAgency, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _bookedShiftCardAgency.default,\n\n        objData: null,\n        arrEntityActions: null,\n        objEmailRestService: null,\n\n        _ENV: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n        bHasMobileNumber: false,\n        objStaffingOrderData: null,\n        _objShiftTimesheetEmail: Ember.inject.service(\"shift-email\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objConstantsSSCore: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objEnumsService: Ember.inject.service(\"a24-enums\"),\n        _objSSCoreEnums: Ember.inject.service(\"a24-enums-staffshift-core\"),\n        _objSSCoreStrings: Ember.inject.service(\"a24-strings-staffshift-core\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objStrings: Ember.inject.service(\"a24-strings\"),\n        _objAvailabilityStrings: Ember.inject.service(\"a24-strings-staffshift-availability\"),\n        _objFormInputStrings: Ember.inject.service(\"a24-strings-form-inputs\"),\n        _objStaffingOrderService: Ember.inject.service(\"rest-agency-staffing-order\"),\n        _arrHeaderActions: null,\n        _sShiftDetails: null,\n        _bShiftConfirmation: false,\n        _sCandidateId: null,\n        _sShiftId: null,\n        _sOrderId: null,\n        _sAgencyId: null,\n        _bOrderDataLoading: true,\n        _arrOrderCache: null,\n        _sReportTo: null,\n        _bShowSendTimesheet: false,\n        _bSendTimesheetLoading: false,\n        _objEmailGetPromise: null,\n        _objEmailTimesheetServicePromise: null,\n        _objEmail: null,\n        _bEmailGetDone: false,\n        _sSpacer: \"| \",\n        _sHeader: Ember.computed(\"objData.{start_date,end_date}\", function () {\n            if (a24Core.isEmpty(this.get(\"objData.start_date\")) || a24Core.isEmpty(this.get(\"objData.end_date\"))) {\n                return \"-\";\n            }\n            var objDateInstance = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n            objDateInstance.setDateFromRest(this.get(\"objData.end_date\"));\n            var sEndTime = objDateInstance.getTimeFormat();\n            objDateInstance.setDateFromRest(this.get(\"objData.start_date\"));\n            var sStartTime = objDateInstance.getTimeFormat();\n\n            //TODO cater for overlap to next day\n\n            return new Ember.String.htmlSafe(\"<div class= 'booked-shift-card-agency-float-text'>\" + \"<b>\" + sStartTime + \" - \" + sEndTime + \"&nbsp;</b>\" + \"</div>\" + \"<div class='booked-shift-card-agency-float-text'>\" + \"| \" + objDateInstance.getCustomFormat(this.get(\"_objLibConstants.DAY_DATE_FORMAT\")) + \"</div>\");\n        }).readOnly(),\n\n        _sFirstLetter: Ember.computed(\"objData.site_name\", function () {\n            return this.get(\"objData.site_name\") ? this.get(\"objData.site_name\")[0].toUpperCase() : \"?\";\n        }).readOnly(),\n        _sAvatar: Ember.computed(\"objData.organisation_avatar\", function () {\n            return a24.getUserContextAvatarUrl(this.get(\"_ENV.sTriageBaseUrl\"), this.get(\"_objConstantsSSCore\"), this.get(\"objData.organisation_avatar\"));\n        }).readOnly(),\n        _sSiteName: Ember.computed(\"objData.site_name\", function () {\n            return this._checkNull(this.get(\"objData.site_name\"));\n        }).readOnly(),\n        _sSiteLink: Ember.computed(\"objData.site_id\", function () {\n            var sLink = this.get(\"_objNavigation\").navigateWithinContext(\"agency-client-site-view\", {\n                \"agency-client-site-view\": [this.get(\"objData.site_id\")]\n            }, null, true);\n\n            return sLink;\n        }).readOnly(),\n        _sWardName: Ember.computed(\"objData.ward_name\", function () {\n            if (a24Core.isEmpty(this.get(\"objData.ward_name\"))) {\n                return \"\";\n            } else {\n                return this.get(\"objData.ward_name\");\n            }\n        }).readOnly(),\n        _sWardLink: Ember.computed(\"objData.ward_id\", function () {\n            var sLink = this.get(\"_objNavigation\").navigateWithinContext(\"agency-client-ward-view\", {\n                \"agency-client-ward-view\": [this.get(\"objData.ward_id\")]\n            }, null, true);\n            return sLink;\n        }).readOnly(),\n        _sOrgName: Ember.computed(\"objData.organisation_name\", function () {\n            return this._checkNull(this.get(\"objData.organisation_name\"));\n        }).readOnly(),\n        _sOrderRef: Ember.computed(\"objData.order_reference\", function () {\n            if (a24Core.isEmpty(this.get(\"objData.order_reference\"))) {\n                return \"####\";\n            } else {\n                return \"#\" + this.get(\"objData.order_reference\");\n            }\n        }).readOnly(),\n        _sOrderRefLink: Ember.computed(\"objData.order_id\", function () {\n            return this.get(\"_ENV.sTriageBaseUrl\") + \"/views#agency-staffing-order-details;cId=\" + this.get(\"objData.agency_id\") + \";orderId=\" + this.get(\"objData.order_id\");\n        }).readOnly(),\n        _sJobFamily: Ember.computed(\"objData.job_family_name\", function () {\n            return this._checkNull(this.get(\"objData.job_family_name\"));\n        }).readOnly(),\n        _sJobTitle: Ember.computed(\"objData.job_title_name\", function () {\n            return this._checkNull(this.get(\"objData.job_title_name\"));\n        }).readOnly(),\n        _sPayCurrency: Ember.computed(\"objData.contract_currency\", function () {\n            return this._checkNull(this.get(\"objData.contract_currency\"));\n        }).readOnly(),\n        _sPay: Ember.computed(\"objData.contract_currency\", function () {\n            var sPayRate = \"\";\n            var arrContract = this.get(\"objData.contract_breakdown\");\n            var arrPayRates = [];\n            if (!a24Core.isEmpty(arrContract)) {\n                for (var i = 0; i < arrContract.length; i++) {\n                    arrPayRates.push(arrContract[i].pay_rate);\n                }\n                arrPayRates.sort(function (a, b) {\n                    return a - b;\n                });\n\n                var sFirstRate = arrPayRates[0].toFixed(2);\n                var sLastRate = arrPayRates[arrPayRates.length - 1].toFixed(2);\n                var sUnit = this.get(\"objData.contract_unit\") === \"hourly\" ? this.get(\"_objAvailabilityStrings\").getString(\"perhour\").toLowerCase() : \"\";\n\n                sPayRate += sFirstRate;\n\n                if (sFirstRate !== sLastRate) {\n                    sPayRate += \" - \" + sLastRate;\n                }\n                sPayRate += \" \" + sUnit;\n\n                return sPayRate;\n            }\n\n            return \"-\";\n        }).readOnly(),\n        _sDirectionsText: Ember.computed(\"objData.{candidate_geo_location,candidate_address_line1,site_geo_location,address_line1}\", function () {\n            if (a24Core.isEmpty(this.get(\"objData.candidate_geo_location\")) && a24Core.isEmpty(this.get(\"objData.candidate_address_line1\")) || a24Core.isEmpty(this.get(\"objData.site_geo_location\")) && a24Core.isEmpty(this.get(\"objData.address_line1\"))) {\n                return \"-\";\n            } else {\n                return this.get(\"_objAvailabilityStrings\").getString(\"directions\");\n            }\n        }).readOnly(),\n        _sDirectionsLink: Ember.computed(\"objData.{candidate_geo_location,candidate_address_line1,site_geo_location,address_line1}\", function () {\n            if (a24Core.isEmpty(this.get(\"objData.candidate_geo_location\")) && a24Core.isEmpty(this.get(\"objData.candidate_address_line1\")) || a24Core.isEmpty(this.get(\"objData.site_geo_location\")) && a24Core.isEmpty(this.get(\"objData.address_line1\"))) {\n                return null;\n            } else {\n                return \"https://www.google.com/maps/dir/?api=1\" + \"&origin=\" + encodeURIComponent(this._getCandidateAddressString()) + \"&destination=\" + encodeURIComponent(this._getSiteAddressString());\n            }\n        }).readOnly(),\n        _sDirectionsPostCode: Ember.computed(\"objData.{city,post_code}\", function () {\n            if (!a24Core.isEmpty(this.get(\"objData.city\")) && !a24Core.isEmpty(this.get(\"objData.post_code\"))) {\n                return this.get(\"objData.city\") + \", \" + this.get(\"objData.post_code\");\n            } else if (!a24Core.isEmpty(this.get(\"objData.city\"))) {\n                return this.get(\"objData.city\");\n            } else if (!a24Core.isEmpty(this.get(\"objData.post_code\"))) {\n                return this.get(\"objData.post_code\");\n            } else {\n                return \"-\";\n            }\n        }).readOnly(),\n        _sDescription: Ember.computed(\"objData.position_description\", function () {\n            return this._checkNull(this.get(\"objData.position_description\"));\n        }).readOnly(),\n        _sInstructions: Ember.computed(\"objData.staffing_instructions\", function () {\n            return this._checkNull(this.get(\"objData.staffing_instructions\"));\n        }).readOnly(),\n        _sSiteAddress: Ember.computed(\"objData.{site_geo_location,address_line1}\", function () {\n            if (a24Core.isEmpty(this.get(\"objData.address_line1\"))) {\n                return \"-\";\n            } else {\n                return a24Core.getSafeStringLink(Ember, this._getSiteAddressString(true), this._getSiteAddressString(), \"address\");\n            }\n        }).readOnly(),\n        _sShiftRef: Ember.computed(\"objData.shift_reference_number\", function () {\n            return this._checkNull(this.get(\"objData.shift_reference_number\"));\n        }).readOnly(),\n        _bHasContract: Ember.computed(\"objData.contract_breakdown\", function () {\n            return !a24Core.isEmpty(this.get(\"objData.contract_breakdown\"));\n        }).readOnly(),\n        _sCurrency: Ember.computed(\"objData.contract_currency\", function () {\n            if (!a24Core.isEmpty(this.get(\"objData.contract_currency\"))) {\n                return this.get(\"objData.contract_currency\");\n            }\n            return \"\";\n        }).readOnly(),\n        _arrContractBreakdown: Ember.computed(\"objData.contract_breakdown\", function () {\n            var arrContract = this.get(\"objData.contract_breakdown\");\n            var arrContractBreakdown = [];\n            if (!a24Core.isEmpty(arrContract)) {\n                // loop over contact data\n                for (var i = 0; i < arrContract.length; i++) {\n                    var objContractBreakdownEntry = {};\n                    var objDateInstance = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                    objDateInstance.setDateFromRest(arrContract[i].start_date);\n                    objContractBreakdownEntry.sStartDate = objDateInstance.getDateTimeFormat();\n                    var objEndDateInstance = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                    objEndDateInstance.setDateFromRest(arrContract[i].end_date);\n                    objContractBreakdownEntry.sEndDate = objEndDateInstance.getDateTimeFormat();\n                    var sTime = momentHelper.formatTimeDuration(arrContract[i].duration_minutes);\n                    var sTimeHtml = Ember.String.htmlSafe(\"<span title=\\\"\" + sTime + \"\\\">\" + sTime + \"</span>\");\n                    objContractBreakdownEntry.sTotal = sTimeHtml;\n                    objContractBreakdownEntry.sPay = arrContract[i].pay_rate;\n                    objContractBreakdownEntry.sTotalPay = arrContract[i].total_line_pay;\n                    arrContractBreakdown.push(objContractBreakdownEntry);\n                }\n            }\n            return arrContractBreakdown;\n        }).readOnly(),\n        _sContractPay: Ember.computed(\"objData.contract_pay\", function () {\n            return this._checkNull(this.get(\"objData.contract_pay\"));\n        }).readOnly(),\n        _sContractTotalPayLabel: Ember.computed(\"objData.contract_pay\", function () {\n            return this.get(\"_objAvailabilityStrings\").getString(\"totalTotalPayAmount\").toUpperCase();\n        }).readOnly(),\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            var objValidationConfig = {};\n\n            objValidationConfig[\"objChildren.email\"] = function (objMixin) {\n                a24Validation.addRequired(objMixin, true);\n            };\n\n            this.set(\"_objSpecialSendTimesheetPopupAction\", {\n                sTitle: this.get(\"_objStrings\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this.send(\"onPopupSendTimesheetCancel\");\n                }\n            });\n\n            this.set(\"objChildConfig\", objValidationConfig);\n\n            // this.set(\"objData\", {\n            //     \"_id\": \"5ebd4c6c37a3f159770aa674\",\n            //     \"county\": \"Greater Manchester\",\n            //     \"city\": \"Manchester\",\n            //     \"site_geo_location\": {\n            //         \"coordinates\": [\n            //             -2.18212,\n            //             53.4877\n            //         ],\n            //         \"type\": \"Point\"\n            //     },\n            //     \"address_line1\": \"4 Rushbrooke Avenue\",\n            //     \"country_code\": \"GB\",\n            //     \"post_code\": \"M11 4JW\",\n            //     \"agency_id\": \"5b16b824e8a73a752c42d848\",\n            //     \"shift_id\": \"5ebd4c5fe8a73a71d96caf72\",\n            //     \"shift_reference_number\": \"34534ffgfgxcw43\",\n            //     \"order_id\": \"5ebd4c60e8a73a71d96caf74\",\n            //     \"contract_id\": \"5df0be18e8a73a04940e0372\",\n            //     \"contract_name\": \"Black Contract New New\",\n            //     \"contract_version\": 8,\n            //     \"contract_link\": \"5df0bfcae8a73a0845603aa2\",\n            //     \"contract_vat_applicable\": true,\n            //     \"contract_unit\": \"hourly\",\n            //     \"contract_initial_start_date\": \"1969-12-31T22:00:00.000Z\",\n            //     \"contract_final_end_date\": \"2020-05-30T17:52:00.000Z\",\n            //     \"contract_currency\": \"$\",\n            //     \"start_date\": \"2020-05-22T08:00:00+02:00\",\n            //     \"end_date\": \"2020-05-22T14:00:00+02:00\",\n            //     \"status_code\": \"Accepted\",\n            //     \"date_created\": \"2020-05-14T15:49:20+02:00\",\n            //     \"job_title_id\": \"51fbba14cebdc3176a000001\",\n            //     \"job_title_name\": \"Band 2 Care Assistant - Community\",\n            //     \"job_family_id\": \"51fbba14cebdc3176a000000\",\n            //     \"job_family_name\": \"Adults & Community - Care\",\n            //     \"order_reference\": \"HE14\",\n            //     \"po_number\": \"PO 1\",\n            //     \"organisation_id\": \"5b16b6b1e8a73a176211c1b2\",\n            //     \"organisation_name\": \"Black Org\",\n            //     \"site_id\": \"5b16b719e8a73a63f0031ff2\",\n            //     \"site_name\": \"Black Site 1\",\n            //     \"ward_name\": \"Black Ward Ex\",\n            //     \"staffing_instructions\": \"Please arrive in your work clothes, bring your own lunch. \\n Please arrive in your work clothes, bring your own lunch.\",\n            //     \"position_description\": \"Need to assist with all the assistant tasks.\",\n            //     \"candidate_id\": \"5ebd414be8a73a2af26f2bb2\",\n            //     \"contract_breakdown\": [\n            //         {\n            //             \"start_date\": \"2020-05-22T06:00:00.000Z\",\n            //             \"end_date\": \"2020-05-22T12:00:00.000Z\",\n            //             \"duration_minutes\": 360,\n            //             \"contract_job_code\": \"ILHA\",\n            //             \"pay_rate\": 31.95,\n            //             \"charge_rate\": 46.04,\n            //             \"total_line_pay\": 191.7,\n            //             \"total_line_charge\": 276.24,\n            //             \"total_line_vat\": 41.44\n            //         }\n            //     ],\n            //     \"contract_charge\": 276.24,\n            //     \"contract_pay\": 191.7,\n            //     \"contract_vat\": 41.44,\n            //     \"contract_charge_incl_vat\": 317.68,\n            //     \"candidate_full_name\": \"fandi man\",\n            //     \"created_at\": \"2020-05-14T13:49:32.168Z\",\n            //     \"updated_at\": \"2020-05-14T13:49:58.790Z\",\n            //     \"__v\": 2,\n            //     \"candidate_address_line1\" : \"12A Lowman Rd\",\n            //     \"candidate_address_line2\" : \"Holloway\",\n            //     \"candidate_city\" : \"london\",\n            //     \"candidate_country_code\" : \"GB\",\n            //     \"candidate_post_code\" : \"N7 6DD\",\n            //     \"candidate_post_code_low\" : \"n7 6dd\",\n            //     \"candidate_province\" : \"Greater London\",\n            //     \"candidate_geo_location\" : {\n            //         // \"coordinates\" : [\n            //         //     -0.113922,\n            //         //     51.555467\n            //         // ],\n            //         \"type\" : \"Point\"\n            //     }\n            // });\n            this.onDataChanged();\n        },\n\n        _openSendTimesheetPopup: function _openSendTimesheetPopup() {\n            var _this2 = this;\n\n            this.clearAllErrorMessages();\n            this.clearForm();\n\n            this.set(\"_sShiftId\", this.get(\"objData.shift_id\"));\n            if (this.get(\"_bEmailGetDone\")) {\n                if (!a24Core.isEmpty(this.get(\"_objEmail\"))) {\n                    this.get(\"objChildren.email\").setValueFromOutside(this.get(\"_objEmail\").email);\n                }\n                this.set(\"_bSendTimesheetLoading\", false);\n            } else {\n                this.set(\"_bSendTimesheetLoading\", true);\n\n                this.get(\"objEmailRestService\").getEmails(this, \"_objEmailGetPromise\", this.get(\"objData.candidate_id\"), function (arrData) {\n                    _this2.set(\"_bEmailGetDone\", true);\n                    if (!a24Core.isEmpty(arrData)) {\n                        var objEmail = arrData.find(function (objEmail) {\n                            if (objEmail.status === \"primary\") {\n                                return true;\n                            } else {\n                                return false;\n                            }\n                        });\n\n                        if (!a24Core.isEmpty(objEmail)) {\n                            _this2.get(\"objChildren.email\").setValueFromOutside(objEmail.email);\n                            _this2.set(\"_objEmail\", objEmail);\n                        }\n                    } else {\n                        _this2.set(\"_objEmail\", null);\n                    }\n\n                    _this2.set(\"_bSendTimesheetLoading\", false);\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                    // Just setting the input to empty as it is no use throwing a error just dont populate the input\n                    _this2.set(\"_bEmailGetDone\", true);\n                    _this2.set(\"_objEmail\", null);\n                    _this2.set(\"_bSendTimesheetLoading\", false);\n                }));\n            }\n\n            this.set(\"_bShowSendTimesheet\", true);\n        },\n\n        openLink: function openLink(sLink) {\n            window.open(sLink);\n        },\n\n        onDataChanged: Ember.observer(\"objData.order_id\", function () {\n            var _this3 = this;\n\n            if (!a24Core.isEmpty(this.get(\"objData\"))) {\n                var arrHeaderActions = [{\n                    sTitle: this.get(\"_objAvailabilityStrings\").getString(\"openShiftInNewTab\"),\n                    sIcon: \"open_in_new\",\n                    bLightWaves: true,\n                    executeCardAction: function executeCardAction() {\n                        var sLink = _this3.get(\"_objNavigation\").navigateWithinContext(\"agency-search-shift\", {}, {\n                            shift_id: _this3.get(\"objData.shift_id\"),\n                            order_id: _this3.get(\"objData.order_id\")\n                        }, true);\n\n                        _this3.openLink(sLink);\n                    }\n                }];\n                if (this.get(\"bHasMobileNumber\")) {\n                    var objDateCurrent = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n\n                    var objEndDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                    objEndDate.setDateFromRest(this.get(\"objData.end_date\"));\n\n                    if (objEndDate.difference(objDateCurrent, a24Constants.MOMENT_TIME_SECONDS) > 0 && this.get(\"objData.status_code\") !== this.get(\"_objSSCoreEnums.assignmentStatus.CLOSED.backend\")) {\n                        arrHeaderActions.push({\n                            sTitle: this.get(\"_objAvailabilityStrings\").getString(\"sendShiftConfirmation\"),\n                            sIcon: \"chat_bubble\",\n                            bLightWaves: true,\n                            executeCardAction: function executeCardAction() {\n                                var objDateInstance = a24DateManager.createDate(_this3.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                                objDateInstance.setDateFromRest(_this3.get(\"objData.end_date\"));\n                                var sEndTime = objDateInstance.getTimeFormat();\n                                objDateInstance.setDateFromRest(_this3.get(\"objData.start_date\"));\n                                var sStartTime = objDateInstance.getTimeFormat();\n\n                                //TODO cater for overlap to next day\n                                var sShiftDateTime = objDateInstance.getDateFormat() + \", \" + sStartTime + \"-\" + sEndTime + \", \";\n                                var sSiteWard = _this3.get(\"objData.site_name\");\n                                if (_this3.get(\"objData.ward_name\")) {\n                                    sSiteWard += \" - \" + _this3.get(\"objData.ward_name\");\n                                }\n                                sSiteWard += \", \";\n\n                                var sAddress = \"\";\n                                if (!a24Core.isEmpty(_this3.get(\"objData.address_line1\"))) {\n                                    sAddress += _this3.get(\"objData.address_line1\");\n                                }\n                                if (!a24Core.isEmpty(_this3.get(\"objData.city\"))) {\n                                    sAddress += \", \" + _this3.get(\"objData.city\");\n                                }\n                                if (!a24Core.isEmpty(_this3.get(\"objData.post_code\"))) {\n                                    sAddress += \", \" + _this3.get(\"objData.post_code\");\n                                }\n\n                                _this3.set(\"_sShiftDetails\", sShiftDateTime + sSiteWard + sAddress);\n                                _this3.set(\"_bShiftConfirmation\", true);\n                                _this3.set(\"_sCandidateId\", _this3.get(\"objData.candidate_id\"));\n                                _this3.set(\"_sShiftId\", _this3.get(\"objData.shift_id\"));\n                                _this3.set(\"_sOrderId\", _this3.get(\"objData.order_id\"));\n                                _this3.set(\"_sAgencyId\", _this3.get(\"objData.agency_id\"));\n                                _this3.set(\"_sAssignmentId\", _this3.get(\"objData.assignment_id\"));\n                            }\n                        });\n                    }\n                }\n                arrHeaderActions.push({\n                    sTitle: this.get(\"_objAvailabilityStrings\").getString(\"sendTimesheet\"),\n                    sIcon: \"next_week\",\n                    bOutlinedIcon: true,\n                    bLightWaves: true,\n                    executeCardAction: function executeCardAction() {\n                        _this3._openSendTimesheetPopup();\n                    }\n                });\n\n                arrHeaderActions.push({\n                    bLoader: true,\n                    sTitle: this.get(\"_objAvailabilityStrings\").getString(\"cancelShift\"),\n                    sIcon: \"not_interested\",\n                    bLightWaves: true,\n                    executeCardAction: function executeCardAction() {\n                        _this3._cancelShifts([_this3.get(\"objData\")]);\n                    }\n                });\n                this.set(\"_arrHeaderActions\", arrHeaderActions);\n            }\n        }),\n        onEntityActions: Ember.observer(\"arrEntityActions\", function () {\n            var arrHeaderActions = Ember.copy(this.get(\"_arrHeaderActions\"), true);\n            var arrEntityActions = this.get(\"arrEntityActions\");\n            // get the header action for the cancel shift to switch loader out or remove\n            var objHeaderAction = arrHeaderActions.find(function (objHeaderAction) {\n                return objHeaderAction.sIcon === \"not_interested\";\n            });\n            var objBooking = this.get(\"objData\");\n\n            if (!a24Core.isEmpty(arrEntityActions)) {\n                var sAssignmentAccepted = this.get(\"_objSSCoreEnums\").getBackendValue(\"assignmentStatus\", this.get(\"_objSSCoreStrings\").getString(\"accepted\"));\n\n                var objEntityAction = arrEntityActions.find(function (objEntityAction) {\n                    var objCancelAction = objEntityAction.actions.find(function (objAction) {\n                        return objAction.action === \"Cancel\";\n                    });\n\n                    if (!a24Core.isEmpty(objCancelAction) && objEntityAction.entity_id === objBooking.shift_id && objBooking.status_code === sAssignmentAccepted && objCancelAction.reason_code === \"STATUS_DISALLOWS_ACTION\" && !objCancelAction.allowed) {\n                        return true;\n                    }\n                    return false;\n                });\n\n                if (!a24Core.isEmpty(objHeaderAction) && !a24Core.isEmpty(objEntityAction)) {\n                    objHeaderAction.bLoader = false;\n                } else {\n                    arrHeaderActions.removeObject(objHeaderAction);\n                }\n            } else {\n                arrHeaderActions.removeObject(objHeaderAction);\n            }\n\n            this.set(\"_arrHeaderActions\", arrHeaderActions);\n        }),\n        _cancelShifts: function _cancelShifts(arrShifts) {\n            this.get(\"onCancelShiftAction\")(arrShifts);\n        },\n        _checkNull: function _checkNull(mValue, bReturnNull) {\n            if (a24Core.isEmpty(mValue)) {\n                if (bReturnNull) {\n                    return null;\n                } else {\n                    return \"-\";\n                }\n            } else {\n                return mValue;\n            }\n        },\n        _getCandidateAddressString: function _getCandidateAddressString() {\n            var sAddressLink = \"\";\n            var sCountryCode = \"\";\n\n            if (this.get(\"objData.candidate_country_code\") === \"UK\") {\n                sCountryCode = \"GB\";\n            } else {\n                sCountryCode = this.get(\"objData.candidate_country_code\");\n            }\n            var objCountry = this.get(\"_objEnumsService\").getList(\"country\").findBy(\"sValue\", sCountryCode);\n\n            if (!a24Core.isEmpty(this.get(\"objData.candidate_geo_location\")) && !a24Core.isEmpty(this.get(\"objData.candidate_geo_location.coordinates\"))) {\n                sAddressLink = this.get(\"objData.candidate_geo_location.coordinates\").slice().reverse().join(\",\");\n            } else {\n                if (!a24Core.isEmpty(this.get(\"objData.candidate_address_line1\"))) {\n                    sAddressLink = this.get(\"objData.candidate_address_line1\");\n                }\n                if (!a24Core.isEmpty(this.get(\"objData.candidate_address_line2\"))) {\n                    sAddressLink = sAddressLink + \", \" + this.get(\"objData.candidate_address_line2\");\n                }\n                if (!a24Core.isEmpty(this.get(\"objData.candidate_city\"))) {\n                    sAddressLink = sAddressLink + \", \" + this.get(\"objData.candidate_city\");\n                }\n                if (!a24Core.isEmpty(this.get(\"objData.candidate_province\"))) {\n                    sAddressLink = sAddressLink + \", \" + this.get(\"objData.candidate_province\");\n                }\n                if (!a24Core.isEmpty(this.get(\"objData.candidate_country_code\"))) {\n                    sAddressLink = sAddressLink + \", \" + objCountry.sLabel;\n                }\n                if (!a24Core.isEmpty(this.get(\"objData.candidate_post_code\"))) {\n                    sAddressLink = sAddressLink + \", \" + this.get(\"objData.candidate_post_code\");\n                }\n            }\n\n            return sAddressLink;\n        },\n        _getSiteAddressString: function _getSiteAddressString(bNoCoords) {\n            var sAddressLink = \"\";\n            var sCountryCode = \"\";\n\n            if (this.get(\"objData.country_code\") === \"UK\") {\n                sCountryCode = \"GB\";\n            } else {\n                sCountryCode = this.get(\"objData.country_code\");\n            }\n            var objCountry = this.get(\"_objEnumsService\").getList(\"country\").findBy(\"sValue\", sCountryCode);\n\n            if (!bNoCoords && !a24Core.isEmpty(this.get(\"objData.site_geo_location\")) && !a24Core.isEmpty(this.get(\"objData.site_geo_location.coordinates\"))) {\n                sAddressLink = this.get(\"objData.site_geo_location.coordinates\").slice().reverse().join(\",\");\n            } else {\n                if (!a24Core.isEmpty(this.get(\"objData.address_line1\"))) {\n                    sAddressLink = this.get(\"objData.address_line1\");\n                }\n                if (!a24Core.isEmpty(this.get(\"objData.address_line2\"))) {\n                    sAddressLink = sAddressLink + \", \" + this.get(\"objData.address_line2\");\n                }\n                if (!a24Core.isEmpty(this.get(\"objData.city\"))) {\n                    sAddressLink = sAddressLink + \", \" + this.get(\"objData.city\");\n                }\n                if (!a24Core.isEmpty(this.get(\"objData.county\"))) {\n                    sAddressLink = sAddressLink + \", \" + this.get(\"objData.county\");\n                }\n                if (!a24Core.isEmpty(this.get(\"objData.country_code\"))) {\n                    sAddressLink = sAddressLink + \", \" + objCountry.sLabel;\n                }\n                if (!a24Core.isEmpty(this.get(\"objData.post_code\"))) {\n                    sAddressLink = sAddressLink + \", \" + this.get(\"objData.post_code\");\n                }\n            }\n\n            return sAddressLink;\n        },\n        actions: {\n            onPopupCancel: function onPopupCancel() {\n                this.set(\"_bShiftConfirmation\", false);\n            },\n            onCollapseExpandStart: function onCollapseExpandStart() {\n                var _this4 = this;\n\n                if (a24Core.isEmpty(this.get(\"_sReportTo\"))) {\n                    this.get(\"_objStaffingOrderService\").getOrder(this, \"objStaffingOrderData\", this.get(\"objData.order_id\"), function (arrData) {\n                        if (!a24Core.isEmpty(arrData.sReportsToName)) {\n                            // set report to for order\n                            _this4.set(\"_sReportTo\", arrData.sReportsToName);\n                        } else {\n                            _this4.set(\"_sReportTo\", \"-\");\n                        }\n\n                        _this4.set(\"_bOrderDataLoading\", false);\n                    }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () {\n                        _this4.set(\"_sReportTo\", \"-\");\n\n                        _this4.set(\"_bOrderDataLoading\", false);\n                    }));\n                }\n            },\n            onPopupSendTimesheetCancel: function onPopupSendTimesheetCancel() {\n                if (this.get(\"_bSendTimesheetLoading\")) {\n                    return;\n                }\n                this.set(\"_bShowSendTimesheet\", false);\n            },\n            onPopupSendTimesheetConfirm: function onPopupSendTimesheetConfirm() {\n                var _this5 = this;\n\n                if (!this.doFullValidation()) {\n                    var objPayload = a24Core.removeNullsFromValue(Ember, this.getPlainFormValueObject());\n                    this.set(\"_bSendTimesheetLoading\", true);\n                    this.get(\"_objShiftTimesheetEmail\").postShiftEmail(this, \"_objEmailTimesheetServicePromise\", objPayload.email, this.get(\"_sShiftId\"), function () {\n                        _this5.set(\"_bShowSendTimesheet\", false);\n                        _this5.get(\"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objAvailabilityStrings\").getString(\"emailSentSuccess\"));\n                    }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () {\n                        _this5.set(\"_bSendTimesheetLoading\", false);\n                        _this5.get(\"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objAvailabilityStrings\").getString(\"emailSentFailure\"));\n                    }));\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-candidate-availability/components/bulk-availability-update-popup\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-staffshift-candidate-availability/templates/components/bulk-availability-update-popup\"], function (exports, _didRenderChangesMixin, _inputFormElement, _bulkAvailabilityUpdatePopup) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _bulkAvailabilityUpdatePopup.default,\n        bShowPopup: null,\n        bPopupLoading: false,\n        iNumberOfMonths: 6,\n        iMonth: null,\n        iYear: null,\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objAvailabilityStrings: Ember.inject.service(\"a24-strings-staffshift-availability\"),\n        _objFormInputStringsService: Ember.inject.service(\"a24-strings-form-inputs\"),\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _bShowUnsavedData: false,\n        _objSpecialPopupAction: null,\n        _sCurrentDate: null,\n        _objAvailabilityFormData: null,\n        _objAvailabilityData: null,\n        _bDisplayDates: false,\n        _objMinDate: null,\n        _objMaxDate: null,\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.set(\"_objAvailabilityData\", {\n                objEarly: {\n                    sState: this.get(\"_objAvailabilityStrings\").getString(\"unknown\"),\n                    sLabel: this.get(\"_objAvailabilityStrings\").getString(\"unknown\")\n                },\n                objLate: {\n                    sState: this.get(\"_objAvailabilityStrings\").getString(\"unknown\"),\n                    sLabel: this.get(\"_objAvailabilityStrings\").getString(\"unknown\")\n                },\n                objNight: {\n                    sState: this.get(\"_objAvailabilityStrings\").getString(\"unknown\"),\n                    sLabel: this.get(\"_objAvailabilityStrings\").getString(\"unknown\")\n                }\n            });\n\n            this._setMaxMinRange();\n\n            this.set(\"_objSpecialPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this._popupCancel();\n                }\n            });\n\n            this.set(\"objChildConfig\", {\n                \"objChildren.dStart\": function objChildrenDStart(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                },\n                \"objChildren.dEnd\": function objChildrenDEnd(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                    objMixin.get(\"arrValidation\").pushObject(function () {\n                        if (!a24Core.isEmpty(_this.get(\"objChildren.dStart.mValue\")) && !a24Core.isEmpty(_this.get(\"objChildren.dEnd.mValue\"))) {\n                            var objStartDate = a24DateManager.createDate(_this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                            var objEndDate = a24DateManager.createDate(_this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n                            objStartDate.setDateFromBrowser(_this.get(\"objChildren.dStart.mValue\"), _this.get(\"_objLibConstants.DATE_FORMAT\"));\n                            objEndDate.setDateFromBrowser(objMixin.get(\"mValue\"), _this.get(\"_objLibConstants.DATE_FORMAT\"));\n\n                            if (objStartDate.isAfter(objEndDate)) {\n                                return _this.get(\"_objStringsService\").getTokenString(\"validationDateBefore\", _this.get(\"objChildren.dEnd.sFieldName\"), _this.get(\"objChildren.dStart.sFieldName\"));\n                            }\n                        }\n                    });\n                },\n                \"objChildren.weekItems\": function objChildrenWeekItems(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                }\n            });\n        },\n        lookupNextAvailabilityState: function lookupNextAvailabilityState(sState) {\n            var arrOrder = [this.get(\"_objAvailabilityStrings\").getString(\"unknown\"), this.get(\"_objAvailabilityStrings\").getString(\"available\"), this.get(\"_objAvailabilityStrings\").getString(\"unavailable\"), this.get(\"_objAvailabilityStrings\").getString(\"unknown\")];\n\n            return arrOrder[arrOrder.indexOf(sState) + 1];\n        },\n        _onDateChange: Ember.observer(\"iMonth\", \"iYear\", function () {\n            Ember.run.once(this, this._setMaxMinRange);\n        }),\n        _setMaxMinRange: function _setMaxMinRange() {\n            var _this2 = this;\n\n            this.set(\"_bDisplayDates\", false);\n\n            var objCurrentDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n            var sCurrentDate = objCurrentDate.getDateFormat();\n\n            if (!a24Core.isEmpty(this.get(\"iMonth\"))) {\n                objCurrentDate.setTimeOnDate(this.get(\"_objLibConstants.MOMENT_TIME_MONTHS\"), this.get(\"iMonth\"));\n            }\n            if (!a24Core.isEmpty(this.get(\"iYear\"))) {\n                objCurrentDate.setTimeOnDate(this.get(\"_objLibConstants.MOMENT_TIME_YEARS\"), this.get(\"iYear\"));\n            }\n\n            //If month and year is not the current month then set to first day of month\n            if (sCurrentDate !== objCurrentDate.getDateFormat()) {\n                objCurrentDate.setTimeOnDate(this.get(\"_objLibConstants.MOMENT_TIME_DATE\"), 1);\n            }\n\n            this.set(\"_sCurrentDate\", objCurrentDate.getDateFormat());\n\n            var objMaxDate = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n            objMaxDate.setDateFromBrowser(objCurrentDate.getDateFormat(), a24Constants.DATE_FORMAT);\n            objMaxDate.addTimeToDate(a24Constants.MOMENT_TIME_MONTHS, this.get(\"iNumberOfMonths\"));\n\n            this.set(\"_objMinDate\", objCurrentDate);\n            this.set(\"_objMaxDate\", objMaxDate);\n\n            //unfortunatly needed to update the max and min ranges of the date picker\n            Ember.run.next(function () {\n                Ember.run.schedule(\"afterRender\", function () {\n                    _this2.set(\"_bDisplayDates\", true);\n                });\n            });\n        },\n        _getAvailabilityFormData: function _getAvailabilityFormData() {\n            var objAvailabilityFormData = this.getPlainFormValueObject();\n            objAvailabilityFormData.objAvailability = this.get(\"_objAvailabilityData\");\n            return objAvailabilityFormData;\n        },\n        _popupCancel: function _popupCancel() {\n            this.get(\"onPopupCloseAction\")();\n        },\n        actions: {\n            onPopupCancel: function onPopupCancel() {\n                this._popupCancel();\n            },\n            onPopupConfirm: function onPopupConfirm() {\n                this.clearAllErrorMessages();\n                if (!this.doFullValidation()) {\n                    var objAvailabilityFormData = this._getAvailabilityFormData();\n                    this.get(\"onPreview\")(objAvailabilityFormData);\n                }\n            },\n            onPopupUnsavedConfirm: function onPopupUnsavedConfirm() {\n                this.set(\"_bShowUnsavedData\", false);\n                this.get(\"onPopupCloseAction\")();\n            },\n            onShiftClick: function onShiftClick(sPeriod, objHash) {\n                var sState = objHash.sState;\n                sState = this.lookupNextAvailabilityState(sState);\n                var objNewState = {\n                    sState: sState,\n                    sLabel: sState\n                };\n                this.set(\"_objAvailabilityData.\" + sPeriod, objNewState);\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-candidate-availability/components/calendar-card\", [\"exports\", \"a24-ember-staffshift-candidate-availability/templates/components/calendar-card\", \"a24-ember-lib/components/card-style-component\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _calendarCard, _cardStyleComponent, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _cardStyleComponent.default.extend(_didRenderChangesMixin.default, {\n        /*\n          Default values\n        */\n        layout: _calendarCard.default,\n        classNames: [\"padding-top-double\", \"padding-bottom-double\", \"calendar-card\"],\n\n        /*\n          @property arrActions\n          An array of objects each specifying their google material icon name and an action that is invoked when the icon is clicked on.\n        */\n        arrActions: null,\n\n        /*\n          @property iYear\n          The year of the month being displayed.\n        */\n        iYear: null,\n\n        /*\n          @property iMonth\n          The month (0-11) the component should display.\n        */\n        iMonth: null,\n\n        // Services\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objConstantsEmberLibService: Ember.inject.service(\"a24-constants-ember-lib\"),\n\n        /*\n          @property iOffset\n          The number of days the week days will be offset by.\n        */\n        iOffset: 0,\n\n        /*\n          @property bLoading\n          It is true when the month days data is loading.\n        */\n        bLoading: false,\n\n        /*\n          @property bShowWeekHeading\n          It is true when the week heading is displayed.\n        */\n        bShowWeekHeading: true,\n\n        /*\n          @property objMonthDays\n          The list of days data that will be displayed for the specified month.\n        */\n        objMonthDays: null,\n\n        objMonthTwoDays: null,\n\n        objMonthThreeDays: null,\n\n        /*\n          @property objPrevMonthDays\n          The list of days data that will be displayed for the previous month.\n        */\n        objPrevMonthDays: null,\n\n        /*\n          @property objNextMonthDays\n          The list of days data that will be displayed for the next month.\n        */\n        objNextMonthDays: null,\n\n        /*\n          @property onDayAction\n          A generic action that is triggered in the event of any action on a day component. The first argument is the type (String) of the action followed by any number of arguments.\n        */\n        onDayAction: null,\n\n        /*\n          @property sDayComponent\n          The name of the component that will render inside each day block of the current month.\n        */\n        sDayComponent: \"calendar-day\",\n\n        bShowPreview: false,\n\n        /*\n          Inline computed properties\n        */\n        /*\n          @property sPrevMonthDayComponent\n          The name of the component that will render inside each day block of the previous month.\n        */\n        sPrevMonthDayComponent: Ember.computed.reads(\"sDayComponent\"),\n\n        /*\n          @property sNextMonthDayComponent\n          The name of the component that will render inside each day block of the next month.\n        */\n        sNextMonthDayComponent: Ember.computed.reads(\"sPrevMonthDayComponent\"),\n\n        /*\n          Inline computed properties\n        */\n        bNotDesktop: Ember.computed.not(\"bIsDesktop\"),\n        bIsDesktop: Ember.computed.or(\"media.isDesktop\", \"media.isJumbo\"),\n        bIsMobile: Ember.computed.or(\"media.isMobile\", \"media.isTiny\", \"media.isTablet\"),\n        bIsMobileOnly: Ember.computed.and(\"bNotDesktop\", \"bIsMobile\"),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n\n            // Default year if empty\n            if (a24Core.isEmpty(Ember.get(this, \"iYear\"))) {\n                Ember.set(this, \"iYear\", objDate.getTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_YEARS));\n            }\n\n            // Default month if empty\n            if (a24Core.isEmpty(Ember.get(this, \"iMonth\"))) {\n                Ember.set(this, \"iMonth\", objDate.getTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS));\n            }\n        },\n\n        iMonthPlus1: Ember.computed(\"iMonth\", \"iYear\", function () {\n            var objDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n            objDate.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_YEARS, Ember.get(this, \"iYear\"));\n            objDate.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS, Ember.get(this, \"iMonth\"));\n            objDate.addTimeToDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS, 1);\n            return objDate.getTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS);\n        }),\n        iMonthPlus2: Ember.computed(\"iMonth\", \"iYear\", function () {\n            var objDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n            objDate.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_YEARS, Ember.get(this, \"iYear\"));\n            objDate.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS, Ember.get(this, \"iMonth\"));\n            objDate.addTimeToDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS, 2);\n            return objDate.getTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS);\n        }),\n        iYearPlus1: Ember.computed(\"iMonth\", \"iYear\", function () {\n            var objDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n            objDate.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_YEARS, Ember.get(this, \"iYear\"));\n            objDate.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS, Ember.get(this, \"iMonth\"));\n            objDate.addTimeToDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS, 1);\n            return objDate.getTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_YEARS);\n        }),\n        iYearPlus2: Ember.computed(\"iMonth\", \"iYear\", function () {\n            var objDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n            objDate.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_YEARS, Ember.get(this, \"iYear\"));\n            objDate.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS, Ember.get(this, \"iMonth\"));\n            objDate.addTimeToDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS, 2);\n            return objDate.getTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_YEARS);\n        }),\n\n        /*\n          Multiline computed properties\n        */\n        /*\n          A textual representation of the year.\n          @computed sYear\n          @return {String} year.\n        */\n        sMonthYear: Ember.computed(\"iYear\", \"iMonth\", function () {\n            var objDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n            objDate.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_YEARS, Ember.get(this, \"iYear\"));\n            objDate.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS, Ember.get(this, \"iMonth\"));\n            return objDate.getMonthYearFormat();\n        }).readOnly(),\n\n        sMonthTwoYear: Ember.computed(\"iYear\", \"iMonth\", function () {\n            var objDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n            objDate.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_YEARS, Ember.get(this, \"iYear\"));\n            objDate.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS, Ember.get(this, \"iMonth\") + 1);\n            return objDate.getMonthYearFormat();\n        }).readOnly(),\n\n        sMonthThreeYear: Ember.computed(\"iYear\", \"iMonth\", function () {\n            var objDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n            objDate.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_YEARS, Ember.get(this, \"iYear\"));\n            objDate.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS, Ember.get(this, \"iMonth\") + 2);\n            return objDate.getMonthYearFormat();\n        }).readOnly()\n    });\n});","define(\"a24-ember-staffshift-candidate-availability/components/day-availability\", [\"exports\", \"a24-ember-staffshift-candidate-availability/templates/components/day-availability\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _dayAvailability, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        /*\n          Default values\n        */\n        layout: _dayAvailability.default,\n        classNames: [\"day-availability\"],\n        classNameBindings: [\"objDay.bIsToday:today\", \"objDay.bIsFuture:future\", \"objDay.bIsNextMonthDay:next\", \"objDay.bIsPast:past\", \"objDay.bIsPrevMonthDay:previous\", \"bIsDesktop:desktop\", \"bIsMobileOnly:mobile\", \"bClickable:cursor-clickable\"],\n\n        /*\n          @property objDay\n          The day object this component represents.\n        */\n        objDay: null,\n\n        /*\n          Inline computed properties\n        */\n        bNotDesktop: Ember.computed.not(\"bIsDesktop\"),\n        bIsDesktop: Ember.computed.or(\"media.isDesktop\", \"media.isJumbo\"),\n        bIsMobile: Ember.computed.or(\"media.isMobile\", \"media.isTiny\", \"media.isTablet\"),\n        bIsMobileOnly: Ember.computed.and(\"bNotDesktop\", \"bIsMobile\"),\n\n        bEdit: Ember.computed(\"objDay\", \"objDay.{bEdit,bIsPast,bIsPrevMonthDay,bIsNextMonthDay}\", \"bIsMobileOnly\", function () {\n\n            return Ember.get(this, \"objDay.bEdit\") && !Ember.get(this, \"bIsMobileOnly\") && !Ember.get(this, \"objDay.bIsPast\") && !Ember.get(this, \"objDay.bIsPrevMonthDay\") && !Ember.get(this, \"objDay.bIsNextMonthDay\");\n        }),\n\n        bClickable: Ember.computed.not(\"objDay.bEdit\"),\n\n        click: function click() {\n            if (Ember.get(this, \"bClickable\")) {\n                if (!a24Core.isEmpty(this.get(\"onDayAction\"))) {\n                    this.get(\"onDayAction\")(\"onDaySelect\", Ember.get(this, \"objDay\"));\n                }\n            }\n        },\n        actions: {\n            selectAvailability: function selectAvailability(sPeriod, objAvailability, objEvent) {\n                if (!a24Core.isEmpty(this.get(\"onDayAction\"))) {\n                    this.get(\"onDayAction\")(\"selectAvailability\", objAvailability, Ember.get(this, \"objDay\"), sPeriod, objEvent);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-candidate-availability/components/day-overview\", [\"exports\", \"a24-ember-staffshift-candidate-availability/templates/components/day-overview\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _dayOverview, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        /*\n            Default values\n        */\n        layout: _dayOverview.default,\n        classNames: [\"day-overview\", \"py-1\"],\n\n        /*\n         * Default values\n        */\n        classNameBindings: [\"bIsDesktop:desktop\", \"bIsMobileOnly:mobile\"],\n\n        /*\n          Inline computed properties\n        */\n        bNotDesktop: Ember.computed.not(\"bIsDesktop\"),\n        bIsDesktop: Ember.computed.or(\"media.isDesktop\", \"media.isJumbo\"),\n        bIsMobile: Ember.computed.or(\"media.isMobile\", \"media.isTiny\", \"media.isTablet\"),\n        bIsMobileOnly: Ember.computed.and(\"bNotDesktop\", \"bIsMobile\"),\n\n        /*\n          Stores the loading state of the card\n         */\n        bLoading: false,\n\n        /*\n            @property arrActions\n            An array of objects each specifying their google material icon name and an action that is invoked when the icon is clicked.\n        */\n        arrActions: null,\n\n        /*\n            @property arrData\n            The day availability object this component represents.\n        */\n        arrData: null,\n\n        /*\n            @property sDayMonthYear\n            Current selected day.\n            @TODO Maybe need to add computed here\n        */\n        sDayMonthYear: null,\n\n        // @TODO Move underlying code to mixin\n\n        actions: {\n            selectOverviewAvailability: function selectOverviewAvailability(sPeriod, objAvailability, objEvent) {\n                if (!a24Core.isEmpty(this.get(\"onDayOverviewAction\"))) {\n                    this.get(\"onDayOverviewAction\")(\"selectAvailability\", objAvailability, sPeriod, objEvent);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-candidate-availability/components/day-view\", [\"exports\", \"a24-ember-staffshift-candidate-availability/templates/components/day-view\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _dayView, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        objAvailabilityService: null,\n        objBookedShiftsService: null,\n        /*\n          Services\n        */\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objAvailabilityStrings: Ember.inject.service(\"a24-strings-staffshift-availability\"),\n        _objEnums: Ember.inject.service(\"a24-enums\"),\n        _objStrings: Ember.inject.service(\"a24-strings\"),\n        _objConstantsEmberLibService: Ember.inject.service(\"a24-constants-ember-lib\"),\n\n        /*\n          Default values\n        */\n        layout: _dayView.default,\n        classNames: [\"day-view\"],\n\n        /*\n          @property sDate\n          The current date.\n        */\n        sDate: null,\n\n        /*\n          @property objBookedShiftData\n          A single booked shift data.\n          Gets setup on onDateChange().\n        */\n        objBookedShiftData: null,\n\n        /*\n          @property arrBookedData\n          Array of all booked shifts data.\n          Gets setup on onDateChange().\n        */\n        arrBookedData: null,\n\n        /*\n          @property objAvailData\n          Availability data for the current day.\n        */\n        objAvailData: null,\n\n        /*\n          Promises.\n          TODO describe better\n        */\n        objAvailabilityPromise: null,\n        objBookingPromise: null,\n\n        /*\n          @property bDayIsLoading\n          @property bAvailabilityLoading\n          @property bBookingLoading\n          Set of booleans to handle loading status.\n        */\n        bDayIsLoading: false,\n        bAvailabilityLoading: false,\n        bBookingLoading: false,\n\n        /*\n          @property _bShowUnsavedData\n          TODO describe better\n        */\n        _bShowUnsavedData: false,\n\n        /*\n          @property bEditMode\n          true while editing current day shifts.\n        */\n        bEditMode: false,\n\n        /*\n          @property objStoredData\n          @property objEditData\n          Data before going on edit mode (objEditData) and new data (objEditData).\n        */\n        objStoredData: null,\n        objEditData: null,\n\n        /*\n          @property arrAvailabilityActions\n          An array of objects each specifying their google material icon name and an action that is invoked when the icon is clicked on.\n        */\n        arrAvailabilityActions: null,\n\n        objSaveAvailability: null,\n\n        /*\n          @property sCandidateEmail\n          TODO describe better\n        */\n        sCandidateEmail: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.onDateChange();\n            this.onLoadingChange();\n        },\n        onAvailabilityActionsChange: Ember.observer(\"sDate\", \"bDayIsLoading\", function () {\n            if (Ember.get(this, \"bDayIsLoading\")) {\n                Ember.set(this, \"arrAvailabilityActions\", null);\n            } else {\n                var objDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n                objDate.setDateFromRest(Ember.get(this, \"sDate\"), true);\n                objDate.setTimeToStartOfDay();\n\n                var objTodayDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n                objTodayDate.setTimeToStartOfDay();\n\n                var objThis = this;\n\n                if (!objDate.isBefore(objTodayDate)) {\n                    Ember.set(this, \"arrAvailabilityActions\", [{\n                        sTitle: Ember.get(this, \"_objStrings\").getString(\"edit\"),\n                        sIcon: \"mode_edit\",\n                        executeCardAction: function executeCardAction() {\n                            objThis.onEditState();\n                        }\n                    }]);\n                } else {\n                    Ember.set(this, \"arrAvailabilityActions\", null);\n                }\n            }\n        }),\n        onEditState: function onEditState() {\n            this.set(\"objStoredData\", Ember.copy(Ember.get(this, \"objAvailData\"), true));\n            this.set(\"objEditData\", Ember.copy(Ember.get(this, \"objAvailData\"), true));\n\n            Ember.set(this, \"bEditMode\", true);\n        },\n        onDateChange: Ember.observer(\"sDate\", function () {\n            var _this = this;\n\n            var objDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n            objDate.setDateFromRest(Ember.get(this, \"sDate\"), true);\n\n            Ember.set(this, \"sHeader\", objDate.getDateFormat());\n\n            objDate.setTimeToStartOfDay();\n            var sTodayStart = objDate.getDateAsISOWithoutMiliFormat();\n            objDate.setTimeToEndOfDay();\n            var sTodayEnd = objDate.getDateAsISOWithoutMiliFormat();\n\n            var sTodayDateOnly = objDate.getDateStringForRest(true);\n\n            var objYesterday = $.extend(true, objDate);\n            objYesterday.subtractTimeFromDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_DAYS, 1);\n            objYesterday.setTimeToStartOfDay();\n            var sYesterdayStart = objYesterday.getDateAsISOWithoutMiliFormat();\n\n            var sCandidateId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            var objAvailabilityService = Ember.get(this, \"objAvailabilityService\").getAvailability(this, \"arrAvailabilityData\", sCandidateId, function (objData) {\n                if (a24Core.isEmpty(objData) || a24Core.isEmpty(objData[0])) {\n                    objData = [{}];\n                }\n\n                var sEarly = objData[0].sEarly || Ember.get(_this, \"_objAvailabilityStrings\").getString(\"unknown\");\n                var sLate = objData[0].sLate || Ember.get(_this, \"_objAvailabilityStrings\").getString(\"unknown\");\n                var sNight = objData[0].sNight || Ember.get(_this, \"_objAvailabilityStrings\").getString(\"unknown\");\n\n                var objParsedData = {\n                    objEarly: {\n                        sState: sEarly,\n                        sLabel: sEarly\n                    },\n                    objLate: {\n                        sState: sLate,\n                        sLabel: sLate\n                    },\n                    objNight: {\n                        sState: sNight,\n                        sLabel: sNight\n                    }\n                };\n\n                Ember.set(_this, \"objAvailData\", objParsedData);\n\n                Ember.set(_this, \"bAvailabilityLoading\", false);\n            }, null, {\n                dAvailabilityDate: {\n                    mValue: sTodayDateOnly\n                }\n            });\n\n            /**\n             * The singular day query can be done by taking any booking that starts either\n             * the current day or the day before and not ending the day before. Due to\n             * the max shift length of 24 hours, this is a fine approach. A default order\n             * can be placed on dtStart\n             */\n            var objBookingService = Ember.get(this, \"objBookedShiftsService\").getBookedShifts(this, \"objBookedShiftData\", sCandidateId, function (arrData) {\n                if (a24Core.isEmpty(arrData)) {\n                    arrData = [];\n                }\n                _this.setBookingDataFromResponse(arrData);\n                Ember.set(_this, \"bBookingLoading\", false);\n            }, null, {\n                \"from-dtStart\": {\n                    mValue: encodeURIComponent(sYesterdayStart) // start of yesterday\n                },\n                \"to-dtStart\": {\n                    mValue: encodeURIComponent(sTodayEnd) // end of today\n                },\n                \"from-dtEnd\": {\n                    mValue: encodeURIComponent(sTodayStart) // start of today\n                },\n                bExtraData: {\n                    mValue: true\n                },\n                sortBy: {\n                    mValue: \"dtStart\"\n                }\n            });\n\n            var objPromiseList = {\n                objAvailabilityPromise: objAvailabilityService,\n                objBookingPromise: objBookingService\n            };\n\n            Ember.set(this, \"bDayIsLoading\", true);\n            Ember.set(this, \"bAvailabilityLoading\", true);\n            Ember.set(this, \"bBookingLoading\", true);\n\n            var objThis = this;\n\n            a24RSVP.configure(this, objPromiseList, [{\n                arrRequiredResponses: [\"objAvailabilityPromise\", \"objBookingPromise\"],\n                funcOnComplete: function funcOnComplete() {\n                    Ember.set(objThis, \"bDayIsLoading\", false);\n                }\n            }]);\n        }),\n        onLoadingChange: Ember.observer(\"bDayIsLoading\", function () {\n            var _this2 = this;\n\n            Ember.run.next(function () {\n                if (!a24Core.isEmpty(_this2.get(\"onLoadingStateChange\"))) {\n                    _this2.get(\"onLoadingStateChange\")(Ember.get(_this2, \"bDayIsLoading\"));\n                }\n            });\n        }),\n        setBookingDataFromResponse: function setBookingDataFromResponse(arrData) {\n            var arrBookedData = [];\n\n            for (var i = 0; i < arrData.length; i++) {\n                arrBookedData.push(this.createBookingDataConfigFromDataItem(arrData[i]));\n            }\n\n            Ember.set(this, \"arrBookedData\", arrBookedData);\n        },\n        createBookingDataConfigFromDataItem: function createBookingDataConfigFromDataItem(objShiftData) {\n            var objDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n            objDate.setDateFromRest(objShiftData.dtStart);\n\n            var objEndDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n            objEndDate.setDateFromRest(objShiftData.dtEnd);\n\n            var sTime = objDate.getTimeFormat() + \" - \" + objEndDate.getTimeFormat();\n\n            var arrBookingItem = [{\n                sIcon: \"access_time\",\n                sValue: objDate.getDateFormat()\n            }, {\n                sIcon: \"alarm\",\n                sValue: sTime\n            }];\n\n            if (!a24Core.isEmpty(objShiftData.sJobTitleName)) {\n                arrBookingItem.push({\n                    sIcon: \"folder\",\n                    sValue: objShiftData.sJobTitleName\n                });\n            }\n\n            if (!a24Core.isEmpty(objShiftData.arrClientAddress)) {\n                // At the time of implementation, it was discussed and no one could find any reason\n                // to not use just the first item on the array of addresses.\n                var objAddress = objShiftData.arrClientAddress[0];\n\n                var arrAddressParts = [objAddress.sAddressLine1, objAddress.sAddressLine2, objAddress.sCityTown, objAddress.sPostalCode, objAddress.sProvince, this.get(\"_objEnums\").getFrontendValue(\"country\", objAddress.sCountryCode)];\n\n                arrAddressParts = arrAddressParts.filter(function (objItem) {\n                    return !a24Core.isEmpty(objItem);\n                });\n\n                if (!a24Core.isEmpty(arrAddressParts)) {\n                    var sAddress = arrAddressParts.join(\", \");\n\n                    arrBookingItem.push({\n                        sIcon: \"location_on\",\n                        sValue: sAddress\n                    });\n                }\n            }\n\n            if (!a24Core.isEmpty(objShiftData.sBookedAgencyName)) {\n                arrBookingItem.push({\n                    sLabel: Ember.get(this, \"_objAvailabilityStrings\").getString(\"agency\"),\n                    sValue: objShiftData.sBookedAgencyName\n                });\n            }\n\n            if (!a24Core.isEmpty(objShiftData.sReportsToName)) {\n                arrBookingItem.push({\n                    sLabel: Ember.get(this, \"_objAvailabilityStrings\").getString(\"reportsTo\"),\n                    sValue: objShiftData.sReportsToName\n                });\n            }\n\n            if (!a24Core.isEmpty(objShiftData.sPositionDescription)) {\n                arrBookingItem.push({\n                    sLabel: Ember.get(this, \"_objAvailabilityStrings\").getString(\"descriptionOfPosition\"),\n                    sValue: objShiftData.sPositionDescription,\n                    bWrap: true\n                });\n            }\n\n            if (!a24Core.isEmpty(objShiftData.sStaffingInstruction)) {\n                arrBookingItem.push({\n                    sLabel: Ember.get(this, \"_objAvailabilityStrings\").getString(\"staffingInstructions\"),\n                    sValue: objShiftData.sStaffingInstruction,\n                    bWrap: true\n                });\n            }\n\n            var objBookedShiftData = {\n                sAvatarUrl: objShiftData.sAgencyAvatarUrl,\n                sLetter: objShiftData.sSiteName.substring(0, 1).toUpperCase(),\n                sHeader: objShiftData.sSiteName,\n                sSubHeader: objShiftData.sWardName,\n                sShiftId: objShiftData.id,\n                arrData: arrBookingItem\n            };\n\n            return objBookedShiftData;\n        },\n\n        /**\n         * Looks up the next item for the edit state to change to\n         *\n         * @author Michael Banrard <michael.barnard@a24group.com>\n         * @since  13 September 2017\n         */\n        lookupNextAvailabilityState: function lookupNextAvailabilityState(sState) {\n            var arrOrder = [Ember.get(this, \"_objAvailabilityStrings\").getString(\"unknown\"), Ember.get(this, \"_objAvailabilityStrings\").getString(\"available\"), Ember.get(this, \"_objAvailabilityStrings\").getString(\"unavailable\"), Ember.get(this, \"_objAvailabilityStrings\").getString(\"unknown\")];\n\n            return arrOrder[arrOrder.indexOf(sState) + 1];\n        },\n        /**\n         * Check for unsaved data then present a popup if any is found, else sets back to view mode\n         *\n         * @author Michael Banrard <michael.barnard@a24group.com>\n         * @since  13 September 2017\n         */\n        cancelChangesWithUnsavedCheck: function cancelChangesWithUnsavedCheck() {\n            var objStoredData = Ember.get(this, \"objStoredData\");\n            var objEditData = Ember.get(this, \"objEditData\");\n\n            var bDataUnchanged = objStoredData.objEarly.sState === objEditData.objEarly.sState && objStoredData.objLate.sState === objEditData.objLate.sState && objStoredData.objNight.sState === objEditData.objNight.sState;\n\n            if (bDataUnchanged) {\n                Ember.set(this, \"bEditMode\", false);\n            } else {\n                Ember.set(this, \"_bShowUnsavedData\", true);\n            }\n        },\n\n        onSave: function onSave() {\n            var _this3 = this;\n\n            Ember.set(this, \"bEditPopupLoading\", true);\n\n            this.get(\"_objSnackbarService\").showSnackbarMessage(Ember.get(this, \"_objAvailabilityStrings\").getString(\"updatingAvailability\"));\n\n            var sCandidateId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            var objDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n            objDate.setDateFromRest(Ember.get(this, \"sDate\"), true);\n\n            var sDate = objDate.getDateStringForRest(true);\n\n            var objEdited = Ember.get(this, \"objEditData\");\n\n            var objPayload = {\n                arrAvailability: [{\n                    dAvailabilityDate: sDate,\n                    sEarly: objEdited.objEarly.sState,\n                    sLate: objEdited.objLate.sState,\n                    sNight: objEdited.objNight.sState\n                }]\n            };\n\n            Ember.get(this, \"objAvailabilityService\").updateAvailability(this, \"objSaveAvailability\", sCandidateId, function (objData) {\n                if (!a24Core.isEmpty(objData.arrWarnings)) {\n                    _this3.onDateChange();\n                    _this3.get(\"_objSnackbarService\").showSnackbarMessage(Ember.get(_this3, \"_objAvailabilityStrings\").getString(\"availabilityPartiallyUpdated\"));\n                } else {\n                    Ember.set(_this3, \"objAvailData\", Ember.get(_this3, \"objEditData\"));\n\n                    _this3.get(\"_objSnackbarService\").showSnackbarMessage(Ember.get(_this3, \"_objAvailabilityStrings\").getString(\"availabilityUpdated\"));\n                }\n                Ember.set(_this3, \"bEditPopupLoading\", false);\n                Ember.set(_this3, \"bEditMode\", false);\n            }, null, objPayload);\n        },\n\n        actions: {\n            onShiftClick: function onShiftClick(sPeriod, objHash) {\n                var sState = objHash.sState;\n                sState = this.lookupNextAvailabilityState(sState);\n\n                Ember.set(this, \"objEditData.\" + sPeriod + \".sState\", sState);\n                Ember.set(this, \"objEditData.\" + sPeriod + \".sLabel\", sState);\n            },\n            onPopupUnsavedConfirm: function onPopupUnsavedConfirm() {\n                Ember.set(this, \"bEditMode\", false);\n            },\n            onEditPopupConfirm: function onEditPopupConfirm() {\n                this.onSave();\n            },\n            onPopupEditCancel: function onPopupEditCancel() {\n                this.cancelChangesWithUnsavedCheck();\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-candidate-availability/components/icon-label\", [\"exports\", \"a24-ember-staffshift-candidate-availability/templates/components/icon-label\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _iconLabel, _didRenderChangesMixin) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n    /*\n      Default values\n    */\n    layout: _iconLabel.default,\n    classNames: [\"icon-label\", \"text-ellipse\"],\n    classNameBindings: [\"bIconOnly:text-center\", \"bClickable:cursor-clickable\"],\n\n    /*\n      @property sIcon\n      The google material icon name.\n    */\n    sIcon: null,\n\n    /*\n      @property sText\n      The text to display next to the icon.\n    */\n    sText: null,\n\n    /*\n      @property bIconOnly\n      True if you only want to show the icon.\n    */\n    bIconOnly: false,\n\n    /*\n      @property bClickable\n      True if an \"onClick\" action should be dispatched when a click event is triggered.\n    */\n    bClickable: false,\n\n    /*\n      Events\n    */\n    click: function click(event) {\n      if (Ember.get(this, \"bClickable\")) {\n        if (!a24Core.isEmpty(this.get(\"onClick\"))) {\n          this.get(\"onClick\")(event);\n        }\n      }\n    }\n  });\n});","define(\"a24-ember-staffshift-candidate-availability/components/main-availability-page\", [\"exports\", \"a24-ember-staffshift-candidate-availability/templates/components/main-availability-page\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _mainAvailabilityPage, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _mainAvailabilityPage.default,\n\n        // PROPERTIES\n        _sMode: \"Month\",\n        bEditMode: false,\n        bLoading: false,\n\n        dtDate: null,\n        sDateStringFormat: null,\n        objAvailabilityService: null,\n        objBookedShiftsService: null,\n        objEmailRestService: null,\n\n        funcOnBack: null,\n        arrNumbers: null,\n        // SERVICES\n        _objNavigationWithWillDestroyService: Ember.inject.service(\"navigation\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objAvailabilityStrings: Ember.inject.service(\"a24-strings-staffshift-availability\"),\n        _objConstantsEmberLibService: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n\n        _bShowBulkUpdatePopup: false,\n        // COMPUTED PROPERTIES\n        bIsDayView: Ember.computed(\"_sMode\", function () {\n            return Ember.get(this, \"_sMode\") === \"Day\";\n        }),\n        bIsToday: Ember.computed(\"sDateStringFormat\", \"_sMode\", function () {\n            var objTodayDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n            var objDate = Ember.get(this, \"dtDate\");\n\n            var bYearMatch = objDate.getTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_YEARS) === objTodayDate.getTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_YEARS);\n            var bMonthMatch = objDate.getTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS) === objTodayDate.getTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS);\n            var bDayMatch = objDate.getTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_DATE) === objTodayDate.getTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_DATE);\n\n            if (Ember.get(this, \"_sMode\") === \"Month\") {\n                return bYearMatch && bMonthMatch;\n            } else {\n                return bYearMatch && bMonthMatch && bDayMatch;\n            }\n        }),\n\n        _bIsCandidateContext: Ember.computed(\"objAvailabilityService.sContext\", function () {\n            return this.get(\"objAvailabilityService.sContext\") === this.get(\"_objStaffshiftCoreConstants.CONTEXT_CANDIDATE\");\n        }),\n\n        objNavigationData: Ember.observer(\"bEditMode\", \"bLoading\", \"bIsToday\", \"bIsDayView\", function () {\n            this.setTitleBar();\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            this.onTimeChange(\"today\");\n            this.setTitleBar();\n        },\n\n        a24WillDestroy: function a24WillDestroy() {\n            this.get(\"_objTitleBarService\").setTitleBarPartially(null, this.get(\"funcOnBack\"), this.get(\"_objTitleBarService.CLEAR_VALUE\"), null, null, null, this.get(\"_objTitleBarService.CLEAR_VALUE\"), this.get(\"_objTitleBarService.CLEAR_VALUE\"), this.get(\"_objTitleBarService.CLEAR_VALUE\"));\n        },\n\n        // Functions\n        onTimeChange: function onTimeChange(sActionName, sSpecific) {\n            var objDate = Ember.get(this, \"dtDate\");\n            if (Ember.get(this, \"bIsDayView\")) {\n                // DAY VIEW\n                if (sActionName === \"today\") {\n                    objDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n                } else if (sActionName === \"specific\") {\n                    objDate.setDateFromRest(sSpecific, true);\n                } else if (sActionName === \"next\") {\n                    objDate.addTimeToDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_DAYS, 1);\n                } else if (sActionName === \"back\") {\n                    objDate.subtractTimeFromDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_DAYS, 1);\n                }\n            } else {\n                // MONTH VIEW\n                if (sActionName === \"today\") {\n                    objDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n                } else if (sActionName === \"next\") {\n                    objDate.addTimeToDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS, 1);\n                } else if (sActionName === \"back\") {\n                    objDate.subtractTimeFromDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS, 1);\n                }\n            }\n\n            Ember.set(this, \"dtDate\", objDate);\n            var sDate = objDate.getDateStringForRest(true);\n            Ember.set(this, \"sDateStringFormat\", \"\");\n            Ember.set(this, \"sDateStringFormat\", sDate);\n        },\n\n        setTitleBar: function setTitleBar() {\n            var objData = {\n                // This is the text button for today\n                bTextDisabled: Ember.get(this, \"bEditMode\") || Ember.get(this, \"bLoading\") || Ember.get(this, \"bIsToday\"),\n                // Whether to show the day-month dropdown and the current item for it\n                bShowDropdown: true,\n                bIsViewDropDownDisabled: Ember.get(this, \"bEditMode\") || Ember.get(this, \"bLoading\"),\n                sView: Ember.get(this, \"_sMode\"),\n                // Back and Forward button\n                bBackDisabled: Ember.get(this, \"bEditMode\") || Ember.get(this, \"bLoading\"),\n                bForwardDisabled: Ember.get(this, \"bEditMode\") || Ember.get(this, \"bLoading\"),\n                bShowBulkUpdateButton: Ember.get(this, \"bEditMode\") && !Ember.get(this, \"bIsDayView\") && !Ember.get(this, \"bLoading\")\n            };\n\n            var funcNavigation = this.navigationAction.bind(this);\n            var funcOnBack = this.get(\"bIsDayView\") ? this.backButtonClick.bind(this) : this.get(\"funcOnBack\");\n\n            var sTitle = null;\n            if (Ember.get(this, \"_bIsCandidateContext\")) {\n                sTitle = this.get(\"_objAvailabilityStrings\").getString(\"calendar\");\n            }\n\n            this.get(\"_objTitleBarService\").setTitleBarPartially(sTitle, funcOnBack, Ember.get(this, \"bEditMode\") || Ember.get(this, \"bLoading\"), null, null, null, \"time-range-selector\", objData, funcNavigation);\n        },\n\n        backButtonClick: function backButtonClick() {\n            Ember.set(this, \"_sMode\", \"Month\");\n            this.onTimeChange(\"today\");\n        },\n        navigationAction: function navigationAction(sAction, sSelectedItem) {\n            if (sAction === \"view\") {\n                Ember.set(this, \"bLoading\", true);\n                Ember.set(this, \"_sMode\", sSelectedItem);\n                this.onTimeChange(\"today\");\n            } else if (sAction === \"bulkUpdate\") {\n                Ember.set(this, \"_bShowBulkUpdatePopup\", true);\n            } else {\n                this.onTimeChange(sAction);\n            }\n        },\n\n        // ACTIONS\n        actions: {\n            onEditStateChange: function onEditStateChange(bEdit) {\n                Ember.set(this, \"bEditMode\", bEdit);\n            },\n            onLoadingStateChange: function onLoadingStateChange(bLoading) {\n                Ember.set(this, \"bLoading\", bLoading);\n            },\n            onDayClick: function onDayClick(objDay) {\n                Ember.set(this, \"_sMode\", \"Day\");\n                this.onTimeChange(\"specific\", objDay.sId);\n            },\n            onCalendarLoaded: function onCalendarLoaded() {\n                if (!a24Core.isEmpty(Ember.get(this, \"onCalendarLoaded\"))) {\n                    Ember.get(this, \"onCalendarLoaded\")();\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-candidate-availability/components/month-view\", [\"exports\", \"a24-ember-staffshift-candidate-availability/templates/components/month-view\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _monthView, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _monthView.default,\n\n        // Stores the date that is used for the month calendar view\n        sDate: null,\n\n        // Store Loading state\n        bCalendarLoading: false,\n        objAvailabilityService: null,\n        sCandidateId: null,\n\n        bShowBulkUpdatePopup: false,\n        bShowPreview: false,\n        bBulkUpdateLoading: false,\n        // SERVICES\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objAvailabilityStrings: Ember.inject.service(\"a24-strings-staffshift-availability\"),\n        _objStrings: Ember.inject.service(\"a24-strings\"),\n        _objConstantsEmberLibService: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n\n        // Properties\n        _objNonCurrentMonth: null,\n        _bShowAvailabilityWarning: false,\n        /**\n         * Inline computed properties\n         */\n        bNotDesktop: Ember.computed.not(\"bIsDesktop\"),\n        bIsDesktop: Ember.computed.or(\"media.isDesktop\", \"media.isJumbo\"),\n        bIsMobile: Ember.computed.or(\"media.isMobile\", \"media.isTiny\", \"media.isTablet\"),\n        bIsMobileOnly: Ember.computed.and(\"bNotDesktop\", \"bIsMobile\"),\n        _objAvailabilityService: Ember.inject.service(\"availability\"),\n        _objPrevMonthDays: null,\n        _objMonthDays: null,\n        _objNextMonthDays: null,\n        _objStoredMonthData: null,\n        _objStoredTwoMonthData: null,\n        _objStoredThreeMonthData: null,\n        _objStoredNextMonthData: null,\n\n        _objMonthTwoDays: null,\n        _objMonthThreeDays: null,\n\n        // Init function\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            var sCandidateId = \"\";\n            if (Ember.get(this, \"objAvailabilityService.sContext\") === this.get(\"_objStaffshiftCoreConstants.CONTEXT_CANDIDATE\")) {\n                sCandidateId = this.get(\"_objUserSession\").getUserContextReference().mId;\n            } else {\n                var objCandidateSearchViewParams = this.get(\"_objNavigation.objRouteParams\")[\"index.agency-candidate-search-view\"];\n\n                sCandidateId = objCandidateSearchViewParams.candidate_id;\n            }\n\n            Ember.set(this, \"sCandidateId\", sCandidateId);\n\n            if (a24Core.isEmpty(this.get(\"funcAvailabilitySuccess\"))) {\n                this.set(\"funcAvailabilitySuccess\", function (objData) {\n\n                    _this.set(\"bBulkUpdateLoading\", false);\n                    _this.set(\"bShowBulkUpdatePopup\", false);\n                    _this.set(\"bShowPreview\", true);\n\n                    _this.setDayData(objData.objPrevMonth, objData.objMonth, objData.objNextMonth);\n\n                    _this.setMonthEditState(false);\n                    Ember.set(_this, \"bCalendarLoading\", false);\n                    if (!a24Core.isEmpty(_this.get(\"onCalendarLoaded\"))) {\n                        _this.get(\"onCalendarLoaded\")();\n                    }\n                });\n            }\n\n            // Load initial data\n            this.onDateChange();\n        },\n\n        // Computed Properties\n        iYear: Ember.computed(\"sDate\", function () {\n            var objDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n            objDate.setDateFromRest(Ember.get(this, \"sDate\"), true);\n\n            return objDate.getTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_YEARS);\n        }),\n        iMonth: Ember.computed(\"sDate\", function () {\n            var objDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n            objDate.setDateFromRest(Ember.get(this, \"sDate\"), true);\n\n            return objDate.getTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS);\n        }),\n        // Fire function on data change\n        onDateChange: Ember.observer(\"iMonth\", function () {\n\n            this.setDayData({}, {}, {});\n\n            this.set(\"bCalendarLoading\", true);\n\n            this.set(\"_objPreviewData\", null);\n\n            var objDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n            objDate.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_YEARS, Ember.get(this, \"iYear\"));\n            objDate.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS, Ember.get(this, \"iMonth\"));\n\n            // First 7 days of the next month\n            var objNextMonthLimit = $.extend(true, objDate);\n            objNextMonthLimit.addTimeToDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS, 1);\n            objNextMonthLimit.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_DATE, 7);\n            var sNextMonth = objNextMonthLimit.getDateStringForRest(true);\n\n            // Last 7 days of the previous month\n            var objPrevMonthLimit = $.extend(true, objDate);\n            objPrevMonthLimit.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_DATE, 1);\n            objPrevMonthLimit.subtractTimeFromDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_DAYS, 7);\n            var sLastMonth = objPrevMonthLimit.getDateStringForRest(true);\n\n            var objQueryParams = {\n                \"from-dAvailabilityDate\": {\n                    mValue: sLastMonth\n                },\n                \"to-dAvailabilityDate\": {\n                    mValue: sNextMonth\n                },\n                \"page\": {\n                    mValue: 1\n                },\n                \"items_per_page\": {\n                    mValue: 50\n                }\n            };\n            this.getAvailabiliityDataFromQuery(objQueryParams, this.get(\"funcAvailabilitySuccess\"));\n        }),\n        // Fire event when the loading changes\n        onLoadingChange: Ember.observer(\"bCalendarLoading\", function () {\n            var _this2 = this;\n\n            Ember.run.next(function () {\n                if (!a24Core.isEmpty(_this2.get(\"onLoadingStateChange\"))) {\n                    _this2.get(\"onLoadingStateChange\")(Ember.get(_this2, \"bCalendarLoading\"));\n                }\n            });\n        }),\n        /**\n         * Gets the availability data from a query and sets it on to the day data\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  12 September 2017\n         */\n        getAvailabiliityDataFromQuery: function getAvailabiliityDataFromQuery(objQueryParams, funcSuccessCallback) {\n\n            Ember.get(this, \"objAvailabilityService\").getFormattedAvailability(this, \"arrAvailabilityData\", Ember.get(this, \"sCandidateId\"), Ember.get(this, \"iMonth\"), Ember.get(this, \"iYear\"), funcSuccessCallback, null, objQueryParams);\n        },\n        /**\n         * Helper function for setting days data for current, previous and next month\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  12 September 2017\n         *\n         * @param objPrevMonthDays - Previous month days data\n         * @param objMonthDays - Current month days data\n         * @param objNextMonthDays - Next month days data\n         */\n        setDayData: function setDayData(objPrevMonthDays, objMonthDays, objNextMonthDays) {\n            Ember.set(this, \"_objPrevMonthDays\", objPrevMonthDays);\n            Ember.set(this, \"_objMonthDays\", objMonthDays);\n            Ember.set(this, \"_objNextMonthDays\", objNextMonthDays);\n        },\n        /**\n         * Looks up the next item for the edit state to change to\n         *\n         * @author Michael Banrard <michael.barnard@a24group.com>\n         * @since  13 September 2017\n         */\n        lookupNextAvailabilityState: function lookupNextAvailabilityState(sState) {\n            var arrOrder = [Ember.get(this, \"_objAvailabilityStrings\").getString(\"unknown\"), Ember.get(this, \"_objAvailabilityStrings\").getString(\"available\"), Ember.get(this, \"_objAvailabilityStrings\").getString(\"unavailable\"), Ember.get(this, \"_objAvailabilityStrings\").getString(\"unknown\")];\n\n            return arrOrder[arrOrder.indexOf(sState) + 1];\n        },\n\n        bIsPreviousMonth: Ember.computed(\"iYear\", \"iMonth\", function () {\n\n            var objDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n\n            return objDate.getTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_YEARS) === Ember.get(this, \"iYear\") && Ember.get(this, \"iMonth\") < objDate.getTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS) || Ember.get(this, \"iYear\") < objDate.getTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_YEARS);\n        }),\n        /**\n         * Computes a diff between the original data and the data edited. If no change, null is returned,\n         * else an array containing the diff data is returned.\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  12 September 2017\n         */\n        getDataObject: function getDataObject(bChangedOnly) {\n\n            var objNewData = Ember.copy(this.get(\"_objMonthDays\"), true);\n            var objNewMonthTwoData = Ember.copy(this.get(\"_objMonthTwoDays\"), true);\n            var objNewMonthThreeData = Ember.copy(this.get(\"_objMonthThreeDays\"), true);\n            var objStoredCurrentMonthData = Ember.copy(this.get(\"_objStoredMonthData\"), true);\n            var objStoredTwoMonthData = Ember.copy(this.get(\"_objStoredTwoMonthData\"), true);\n            var objStoredThreeMonthData = Ember.copy(this.get(\"_objStoredThreeMonthData\"), true);\n\n            var arrAvailability = [];\n\n            for (var key in objNewData) {\n                if (objNewData.hasOwnProperty(key)) {\n\n                    var iNum = objNewData[key].iNumber;\n\n                    if (a24Core.isEmpty(iNum)) {\n                        continue;\n                    }\n\n                    var objDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n                    var sDate = objNewData[key].dAvailabilityDate;\n                    objDate.setDateFromRest(sDate, true);\n\n                    var objShifts = objNewData[key].arrData;\n                    objShifts = {\n                        sEarly: objShifts.objEarly.sState,\n                        sLate: objShifts.objLate.sState,\n                        sNight: objShifts.objNight.sState,\n                        dAvailabilityDate: sDate\n                    };\n                    var objPrevShifts = objStoredCurrentMonthData[key].arrData;\n\n                    var objDateToday = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n                    objDateToday.setTimeToStartOfDay();\n\n                    if (objShifts.sEarly !== objPrevShifts.objEarly.sState || objShifts.sLate !== objPrevShifts.objLate.sState || objShifts.sNight !== objPrevShifts.objNight.sState || !bChangedOnly && objDate.difference(objDateToday, this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_DATE) >= 0) {\n                        arrAvailability.push(objShifts);\n                    }\n                }\n            }\n\n            for (var monthTwoKey in objNewMonthTwoData) {\n                if (objNewMonthTwoData.hasOwnProperty(monthTwoKey)) {\n                    var _iNum = objNewMonthTwoData[monthTwoKey].iNumber;\n\n                    if (a24Core.isEmpty(_iNum)) {\n                        continue;\n                    }\n\n                    var objTwoDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n                    var sTwoDate = objNewMonthTwoData[monthTwoKey].dAvailabilityDate;\n                    objTwoDate.setDateFromRest(sTwoDate, true);\n\n                    var objTwoShifts = objNewMonthTwoData[monthTwoKey].arrData;\n                    objTwoShifts = {\n                        sEarly: objTwoShifts.objEarly.sState,\n                        sLate: objTwoShifts.objLate.sState,\n                        sNight: objTwoShifts.objNight.sState,\n                        dAvailabilityDate: sTwoDate\n                    };\n\n                    var objPrevTwoShifts = objStoredTwoMonthData[monthTwoKey].arrData;\n\n                    if (objTwoShifts.sEarly !== objPrevTwoShifts.objEarly.sState || objTwoShifts.sLate !== objPrevTwoShifts.objLate.sState || objTwoShifts.sNight !== objPrevTwoShifts.objNight.sState || !bChangedOnly) {\n                        arrAvailability.push(objTwoShifts);\n                    }\n                }\n            }\n\n            for (var monthThreeKey in objNewMonthThreeData) {\n                if (objNewMonthThreeData.hasOwnProperty(monthThreeKey)) {\n                    var _iNum2 = objNewMonthThreeData[monthThreeKey].iNumber;\n\n                    if (a24Core.isEmpty(_iNum2)) {\n                        continue;\n                    }\n\n                    var objThreeDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n                    var sThreeDate = objNewMonthThreeData[monthThreeKey].dAvailabilityDate;\n                    objThreeDate.setDateFromRest(sThreeDate, true);\n\n                    var objThreeShifts = objNewMonthThreeData[monthThreeKey].arrData;\n                    objThreeShifts = {\n                        sEarly: objThreeShifts.objEarly.sState,\n                        sLate: objThreeShifts.objLate.sState,\n                        sNight: objThreeShifts.objNight.sState,\n                        dAvailabilityDate: sThreeDate\n                    };\n                    var objPrevThreeShifts = objStoredThreeMonthData[monthThreeKey].arrData;\n\n                    if (objThreeShifts.sEarly !== objPrevThreeShifts.objEarly.sState || objThreeShifts.sLate !== objPrevThreeShifts.objLate.sState || objThreeShifts.sNight !== objPrevThreeShifts.objNight.sState || !bChangedOnly) {\n                        arrAvailability.push(objThreeShifts);\n                    }\n                }\n            }\n\n            // add on non current months\n            var objNonCurrentMonth = this.get(\"_objNonCurrentMonth\");\n            for (var iYear in objNonCurrentMonth) {\n                if (objNonCurrentMonth.hasOwnProperty(iYear)) {\n                    for (var iMonth in objNonCurrentMonth[iYear]) {\n                        if (objNonCurrentMonth[iYear].hasOwnProperty(iMonth)) {\n                            for (var iDay in objNonCurrentMonth[iYear][iMonth]) {\n                                if (objNonCurrentMonth[iYear][iMonth].hasOwnProperty(iDay)) {\n                                    var objNewAvailability = objNonCurrentMonth[iYear][iMonth][iDay];\n                                    if (!a24Core.isEmpty(objNewAvailability)) {\n                                        arrAvailability.push({\n                                            sEarly: objNewAvailability.arrData.objEarly.sState,\n                                            sLate: objNewAvailability.arrData.objLate.sState,\n                                            sNight: objNewAvailability.arrData.objNight.sState,\n                                            dAvailabilityDate: objNewAvailability.dAvailabilityDate\n                                        });\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n\n            if (arrAvailability.length === 0) {\n                return null;\n            } else {\n                return arrAvailability;\n            }\n        },\n        /**\n         * Check for unsaved data then present a popup if any is found, else sets back to view mode\n         *\n         * @author Michael Banrard <michael.barnard@a24group.com>\n         * @since  13 September 2017\n         */\n        cancelChangesWithUnsavedCheck: function cancelChangesWithUnsavedCheck() {\n            var arrChangedData = this.getDataObject(true);\n\n            if (arrChangedData !== null) {\n                Ember.set(this, \"_bShowUnsavedData\", true);\n            } else {\n                this.setMonthEditState(false);\n            }\n        },\n        /**\n         * Save the new availability data\n         *\n         * @author Michael Banrard <michael.barnard@a24group.com>\n         * @since  13 September 2017\n         */\n        updateAvailability: function updateAvailability() {\n            var _this3 = this;\n\n            this.get(\"_objSnackbarService\").showSnackbarMessage(Ember.get(this, \"_objAvailabilityStrings\").getString(\"updatingAvailability\"));\n\n            var arrAvailability = this.getDataObject(false);\n\n            this.set(\"bCalendarLoading\", true);\n\n            var objData = {\n                \"arrAvailability\": arrAvailability\n            };\n\n            var objThis = this;\n            this.get(\"objAvailabilityService\").updateAvailability(this, \"arrAvailabilitySaveData\", Ember.get(this, \"sCandidateId\"), function (objData) {\n                objThis.setMonthEditState(false);\n                objThis.set(\"bCalendarLoading\", false);\n\n                if (!a24Core.isEmpty(objData.arrWarnings)) {\n                    objThis.get(\"_objSnackbarService\").showSnackbarMessage(Ember.get(_this3, \"_objAvailabilityStrings\").getString(\"availabilityPartiallyUpdated\"));\n                } else {\n                    objThis.get(\"_objSnackbarService\").showSnackbarMessage(Ember.get(_this3, \"_objAvailabilityStrings\").getString(\"availabilityUpdated\"));\n                }\n            }, null, objData);\n        },\n        /**\n         * Set the calendar month to a particular state\n         *\n         * @author Michael Banrard <michael.barnard@a24group.com>\n         * @since  13 September 2017\n         */\n        setMonthEditState: function setMonthEditState(bEditMode) {\n\n            this.set(\"bEditMode\", bEditMode);\n            if (!a24Core.isEmpty(this.get(\"onEditStateChange\"))) {\n                this.get(\"onEditStateChange\")(bEditMode);\n            }\n\n            if (bEditMode) {\n                // Make a backup of the day data\n                this.set(\"_objStoredMonthData\", Ember.copy(this.get(\"_objMonthDays\"), true));\n                this.set(\"_objStoredNextMonthData\", Ember.copy(this.get(\"_objNextMonthDays\"), true));\n            } else {\n                this.set(\"_objNonCurrentMonth\", null);\n                this.set(\"bShowPreview\", false);\n                this.set(\"_objMonthTwoDays\", null);\n                this.set(\"_objMonthThreeDays\", null);\n            }\n\n            var objData = this.get(\"_objMonthDays\");\n            for (var key in objData) {\n                if (objData.hasOwnProperty(key)) {\n                    Ember.set(objData[key], \"bEdit\", bEditMode);\n                }\n            }\n\n            // EXPLAIN BELOW IS NEEDED FOR PER DAY CALCULATIONS FOR CLICK STATE\n            var objPrevMonthDays = this.get(\"_objPrevMonthDays\");\n            for (var prevkey in objPrevMonthDays) {\n                if (objPrevMonthDays.hasOwnProperty(prevkey)) {\n                    Ember.set(objPrevMonthDays[prevkey], \"bEdit\", bEditMode);\n                }\n            }\n            var objNextMonthDays = this.get(\"_objNextMonthDays\");\n            for (var nextkey in objNextMonthDays) {\n                if (objNextMonthDays.hasOwnProperty(nextkey)) {\n                    Ember.set(objNextMonthDays[nextkey], \"bEdit\", bEditMode);\n                }\n            }\n\n            var objNextTwoMonthDays = this.get(\"_objMonthTwoDays\");\n            for (var nextTwokey in objNextTwoMonthDays) {\n                if (objNextTwoMonthDays.hasOwnProperty(nextTwokey)) {\n                    Ember.set(objNextTwoMonthDays[nextTwokey], \"bEdit\", bEditMode);\n                }\n            }\n\n            var objNextThreeMonthDays = this.get(\"_objMonthThreeDays\");\n            for (var nextThreekey in objNextThreeMonthDays) {\n                if (objNextThreeMonthDays.hasOwnProperty(nextThreekey)) {\n                    Ember.set(objNextThreeMonthDays[nextThreekey], \"bEdit\", bEditMode);\n                }\n            }\n        },\n\n        onActionChnage: Ember.observer(\"bEditMode\", \"bCalendarLoading\", \"bIsPreviousMonth\", \"bIsMobileOnly\", function () {\n            var objThis = this;\n\n            var bEditMode = Ember.get(this, \"bEditMode\");\n            var bCalendarLoading = Ember.get(this, \"bCalendarLoading\");\n            var bIsPreviousMonth = Ember.get(this, \"bIsPreviousMonth\");\n            var bIsMobileOnly = Ember.get(this, \"bIsMobileOnly\");\n\n            if (bEditMode && !bCalendarLoading) {\n                Ember.set(this, \"arrActions\", [{\n                    sTitle: Ember.get(this, \"_objStrings\").getString(\"cancel\"),\n                    sIcon: \"close\",\n                    executeCardAction: function executeCardAction() {\n                        objThis.cancelChangesWithUnsavedCheck();\n                    }\n                }, {\n                    sTitle: Ember.get(this, \"_objStrings\").getString(\"save\"),\n                    sIcon: \"check\",\n                    executeCardAction: function executeCardAction() {\n                        var objNonCurrentMonth = objThis.get(\"_objNonCurrentMonth\");\n                        if (a24Core.isEmpty(objNonCurrentMonth) || Object.keys(objNonCurrentMonth).length === 0) {\n                            objThis.updateAvailability();\n                        } else {\n                            objThis.set(\"_bShowAvailabilityWarning\", true);\n                        }\n                    }\n                }]);\n            } else {\n                if (bCalendarLoading || bIsPreviousMonth || bIsMobileOnly) {\n                    Ember.set(this, \"arrActions\", null);\n                } else {\n                    Ember.set(this, \"arrActions\", [{\n                        sTitle: Ember.get(this, \"_objStrings\").getString(\"edit\"),\n                        sIcon: \"mode_edit\",\n                        executeCardAction: function executeCardAction() {\n                            objThis.setMonthEditState(true);\n                        }\n                    }]);\n                }\n            }\n        }),\n        onMobileChange: Ember.observer(\"bIsMobileOnly\", function () {\n            if (Ember.get(this, \"bIsMobileOnly\") && Ember.get(this, \"bEditMode\")) {\n                // Restore data\n                this.set(\"_objMonthDays\", Ember.copy(this.get(\"_objStoredMonthData\"), true));\n                // Set the screen back to view state\n                this.setMonthEditState(false);\n            }\n        }),\n        actions: {\n            onDayAction: function onDayAction() {\n                var sActionName = arguments[0];\n\n                if (sActionName === \"selectAvailability\") {\n                    var objAvailability = arguments[1];\n                    var objDay = arguments[2];\n                    var sPeriod = arguments[3];\n\n                    // Get the day item\n                    var objData = this.get(\"_objMonthDays\");\n                    var objTwoData = this.get(\"_objMonthTwoDays\");\n                    var objThreeData = this.get(\"_objMonthThreeDays\");\n\n                    var iKey = [objDay.iNumber];\n                    var sNewState = this.lookupNextAvailabilityState(objAvailability.sState);\n                    // Set the data\n                    if (objData[iKey].dAvailabilityDate === objDay.dAvailabilityDate) {\n                        Ember.set(objData[iKey].arrData[sPeriod], \"sState\", sNewState);\n                        Ember.set(objData[iKey].arrData[sPeriod], \"sLabel\", sNewState);\n                    }\n                    if (!a24Core.isEmpty(objTwoData) && objTwoData[iKey].dAvailabilityDate === objDay.dAvailabilityDate) {\n                        Ember.set(objTwoData[iKey].arrData[sPeriod], \"sState\", sNewState);\n                        Ember.set(objTwoData[iKey].arrData[sPeriod], \"sLabel\", sNewState);\n                    }\n                    if (!a24Core.isEmpty(objThreeData) && objThreeData[iKey].dAvailabilityDate === objDay.dAvailabilityDate) {\n                        Ember.set(objThreeData[iKey].arrData[sPeriod], \"sState\", sNewState);\n                        Ember.set(objThreeData[iKey].arrData[sPeriod], \"sLabel\", sNewState);\n                    }\n                } else if (sActionName === \"onDaySelect\") {\n                    var _objDay = arguments[1];\n\n                    if (!a24Core.isEmpty(this.get(\"onDayClick\"))) {\n                        this.get(\"onDayClick\")(_objDay);\n                    }\n                }\n            },\n            onPopupUnsavedConfirm: function onPopupUnsavedConfirm() {\n                // Restore data\n                this.set(\"_objMonthDays\", Ember.copy(this.get(\"_objStoredMonthData\"), true));\n                this.set(\"_objNextMonthDays\", Ember.copy(this.get(\"_objStoredNextMonthData\"), true));\n                // Set the screen back to view state\n                this.setMonthEditState(false);\n            },\n            onPopupClose: function onPopupClose() {\n                if (this.get(\"bBulkUpdateLoading\")) {\n                    return;\n                }\n                this.set(\"bShowBulkUpdatePopup\", false);\n            },\n            onPreview: function onPreview(objBulkUpdateConfig) {\n                var _this4 = this;\n\n                this.set(\"bBulkUpdateLoading\", true);\n                var objDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n                objDate.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_YEARS, Ember.get(this, \"iYear\"));\n                objDate.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS, Ember.get(this, \"iMonth\") + 1);\n\n                // Set To to end of the month\n                var objNextMonthLimit = $.extend(true, objDate);\n                objNextMonthLimit.addTimeToDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS, 1);\n                objNextMonthLimit.endOf(this.get(\"_objConstantsEmberLibService\").MOMENT_UNIT_MONTH);\n\n                var sPreviewMonths = objNextMonthLimit.getDateStringForRest(true);\n\n                // Set From to start of the month\n                var objPrevMonthLimit = $.extend(true, objDate);\n                objPrevMonthLimit.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_DATE, 1);\n                var sLastMonth = objPrevMonthLimit.getDateStringForRest(true);\n\n                var objQueryParams = {\n                    \"from-dAvailabilityDate\": {\n                        mValue: sLastMonth\n                    },\n                    \"to-dAvailabilityDate\": {\n                        mValue: sPreviewMonths\n                    },\n                    \"page\": {\n                        mValue: 1\n                    },\n                    \"items_per_page\": {\n                        mValue: 90\n                    }\n                };\n\n                var funcAvailSuccess = function funcAvailSuccess(objData) {\n\n                    _this4.set(\"bBulkUpdateLoading\", false);\n                    _this4.set(\"bShowBulkUpdatePopup\", false);\n                    _this4.set(\"bShowPreview\", true);\n\n                    _this4.set(\"_objPreviewData\", objData);\n\n                    _this4.set(\"_objStoredTwoMonthData\", Ember.copy(objData.objMonth, true));\n                    _this4.set(\"_objStoredThreeMonthData\", Ember.copy(objData.objNextMonth, true));\n\n                    var objMonthTwo = {};\n                    var objMonthThree = {};\n\n                    if (a24Core.isEmpty(_this4.get(\"_objMonthTwoDays\"))) {\n                        objMonthTwo = objData.objMonth;\n                    } else {\n                        objMonthTwo = _this4.get(\"_objMonthTwoDays\");\n                    }\n\n                    if (a24Core.isEmpty(_this4.get(\"_objMonthThreeDays\"))) {\n                        objMonthThree = objData.objNextMonth;\n                    } else {\n                        objMonthThree = _this4.get(\"_objMonthThreeDays\");\n                    }\n\n                    var objFormatAvailabilityDataReturn = _this4.get(\"_objAvailabilityService\").formatBulkAvailabilityData(_this4.get(\"_objMonthDays\"), _this4.get(\"_objNextMonthDays\"), _this4.get(\"_objNonCurrentMonth\"), objBulkUpdateConfig, objMonthTwo, objMonthThree);\n                    _this4.set(\"_objNonCurrentMonth\", objFormatAvailabilityDataReturn.objNonCurrentMonth);\n                    _this4.setDayData(_this4.get(\"_objPrevMonthDays\"), objFormatAvailabilityDataReturn.objMonth, objFormatAvailabilityDataReturn.objNextMonth);\n                    _this4.set(\"_objMonthTwoDays\", objFormatAvailabilityDataReturn.objMonthTwoDays);\n                    _this4.set(\"_objMonthThreeDays\", objFormatAvailabilityDataReturn.objMonthThreeDays);\n\n                    var objNextTwoMonthDays = _this4.get(\"_objMonthTwoDays\");\n                    for (var nextTwokey in objNextTwoMonthDays) {\n                        if (objNextTwoMonthDays.hasOwnProperty(nextTwokey)) {\n                            Ember.set(objNextTwoMonthDays[nextTwokey], \"bEdit\", true);\n                        }\n                    }\n\n                    var objNextThreeMonthDays = _this4.get(\"_objMonthThreeDays\");\n                    for (var nextThreekey in objNextThreeMonthDays) {\n                        if (objNextThreeMonthDays.hasOwnProperty(nextThreekey)) {\n                            Ember.set(objNextThreeMonthDays[nextThreekey], \"bEdit\", true);\n                        }\n                    }\n                };\n\n                if (a24Core.isEmpty(this.get(\"_objPreviewData\"))) {\n                    var objPreviewDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n                    objPreviewDate.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_YEARS, this.get(\"iYear\"));\n                    objPreviewDate.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS, this.get(\"iMonth\"));\n                    objPreviewDate.addTimeToDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS, 1);\n                    Ember.get(this, \"objAvailabilityService\").getFormattedAvailability(this, \"arrAvailabilityData\", Ember.get(this, \"sCandidateId\"), objPreviewDate.getTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS), objPreviewDate.getTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_YEARS), funcAvailSuccess, null, objQueryParams);\n                } else {\n                    funcAvailSuccess(this.get(\"_objPreviewData\"));\n                }\n            },\n            onPopupWarningConfirm: function onPopupWarningConfirm() {\n                this.set(\"_bShowAvailabilityWarning\", false);\n                this.updateAvailability();\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-candidate-availability/components/shift-confirmation-popup\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-candidate-availability/templates/components/shift-confirmation-popup\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _didRenderChangesMixin, _shiftConfirmationPopup, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _shiftConfirmationPopup.default,\n        classNames: [\"message-preview\"],\n        bShowPopup: false,\n        sShiftDetails: null,\n        sCandidateId: null,\n        sOrderId: null,\n        sShiftId: null,\n        sAgencyId: null,\n        sAssignmentId: null,\n        _bPopupLoading: false,\n        _bShowUnsavedData: false,\n        _bShowSentMessagePopup: false,\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objAvailabilityStrings: Ember.inject.service(\"a24-strings-staffshift-availability\"),\n        _objAgencyCandidateNotificationService: Ember.inject.service(\"rest-agency-candidate-notification\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objSpecialPopupAction: null,\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.set(\"objChildConfig\", {\n                \"objChildren.content\": function objChildrenContent(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                    a24Validation.addMinLength(objMixin, 2);\n                }\n            });\n\n            this.set(\"_objSpecialPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this._popupCancel();\n                }\n            });\n\n            this.set(\"_sHeaderPopup\", this.get(\"_objAvailabilityStrings\").getString(\"shiftConfirmation\"));\n\n            var objThis = this;\n            Ember.run.next(function () {\n                Ember.run.scheduleOnce(\"afterRender\", _this, function () {\n                    var objTextInput = $(\"#\" + objThis.get(\"objChildren.content\")._sInputId);\n                    objTextInput.on(\"click keyup input paste\", function () {\n                        objThis.set(\"sShiftDetails\", objTextInput[0].value.trim());\n                    });\n                });\n            });\n        },\n        _onShowPopup: Ember.observer(\"bShowPopup\", function () {\n            var _this2 = this;\n\n            if (this.get(\"bShowPopup\")) {\n                this.clearAllErrorMessages();\n                this.clearForm();\n\n                this.set(\"_bPopupLoading\", false);\n                this.get(\"objChildren.content\").setValueFromOutside(this.get(\"sShiftDetails\"));\n\n                Ember.run.next(function () {\n                    Ember.run.schedule(\"afterRender\", function () {\n                        _this2.set(\"_objOriginalData\", _this2.getPlainFormValueObject());\n                    });\n                });\n            }\n        }),\n        _popupCancel: function _popupCancel() {\n            if (!this.get(\"_bPopupLoading\")) {\n                // Check if the form has any unsaved data\n                var bDataMatches = a24Core.compareObjects(Ember, this.getPlainFormValueObject(), this.get(\"_objOriginalData\"));\n                if (bDataMatches) {\n                    this.get(\"onPopupCloseAction\")();\n                } else {\n                    this.set(\"_bShowUnsavedData\", true);\n                }\n            }\n        },\n        _getPayload: function _getPayload() {\n            var objData = {\n                \"type\": \"assignment_confirmation\",\n                \"data\": {\n                    \"content\": this.get(\"objChildren.content.mValue\").trim(),\n                    \"order_id\": this.get(\"sOrderId\"),\n                    \"shift_id\": this.get(\"sShiftId\"),\n                    \"assignment_id\": this.get(\"sAssignmentId\")\n                }\n            };\n\n            return objData;\n        },\n        actions: {\n            onPopupConfirm: function onPopupConfirm() {\n                var _this3 = this;\n\n                this.clearAllErrorMessages();\n                if (!this.doFullValidation()) {\n                    var objData = this._getPayload();\n                    this.set(\"_bPopupLoading\", true);\n                    this.get(\"_objAgencyCandidateNotificationService\").sendShiftConfirmation(this, \"_objAgencyCandidateNotificationPromise\", this.get(\"sAgencyId\"), this.get(\"sCandidateId\"), objData, function (objResponse) {\n                        if (!a24Core.isEmpty(objResponse)) {\n                            _this3.get(\"onPopupCloseAction\")();\n                            _this3.set(\"_bShowSentMessagePopup\", true);\n                        }\n                    }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                        _this3.set(\"_bPopupLoading\", false);\n                        _this3.get(\"_objSnackbarService\").showSnackbarMessage(_this3.get(\"_objAvailabilityStrings\").getString(\"notificationSendFailed\"));\n                    }));\n                }\n            },\n            onPopupCancel: function onPopupCancel() {\n                this._popupCancel();\n            },\n            onPopupUnsavedConfirm: function onPopupUnsavedConfirm() {\n                this.set(\"_bShowUnsavedData\", false);\n                this.get(\"onPopupCloseAction\")();\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-candidate-availability/components/time-range-selector\", [\"exports\", \"a24-ember-staffshift-candidate-availability/templates/components/time-range-selector\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _timeRangeSelector, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        /*\n          Default values\n        */\n        layout: _timeRangeSelector.default,\n        classNames: [\"time-range-selector\"],\n\n        sDefaultView: \"Month\",\n        sView: Ember.computed.or(\"objData.sView\", \"sDefaultView\"),\n        bShowDropdown: Ember.computed.readOnly(\"objData.bShowDropdown\"),\n        bIsViewDropDownDisabled: Ember.computed.readOnly(\"objData.bIsViewDropDownDisabled\"),\n        bShowBulkUpdateButton: Ember.computed.readOnly(\"objData.bShowBulkUpdateButton\"),\n        _objAvailabilityStrings: Ember.inject.service(\"a24-strings-staffshift-availability\"),\n        /*\n          Actions\n        */\n        actions: {\n            changeView: function changeView(view) {\n                if (Ember.get(this, \"sView\") !== view) {\n                    Ember.set(this, \"sDefaultView\", view);\n                    if (!a24Core.isEmpty(this.get(\"onAction\"))) {\n                        this.get(\"onAction\")(\"view\", view);\n                    }\n                }\n            },\n            onToday: function onToday() {\n                if (!a24Core.isEmpty(this.get(\"onAction\"))) {\n                    this.get(\"onAction\")(\"today\");\n                }\n            },\n            onBackAction: function onBackAction() {\n                if (!a24Core.isEmpty(this.get(\"onAction\"))) {\n                    this.get(\"onAction\")(\"back\");\n                }\n            },\n            onNextAction: function onNextAction() {\n                if (!a24Core.isEmpty(this.get(\"onAction\"))) {\n                    this.get(\"onAction\")(\"next\");\n                }\n            },\n            onBulkUpdateAction: function onBulkUpdateAction() {\n                if (!a24Core.isEmpty(this.get(\"onAction\"))) {\n                    this.get(\"onAction\")(\"bulkUpdate\");\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-candidate-availability/helpers/availability-class\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.availabilityClass = availabilityClass;\n\n    var _slicedToArray = function () {\n        function sliceIterator(arr, i) {\n            var _arr = [];\n            var _n = true;\n            var _d = false;\n            var _e = undefined;\n\n            try {\n                for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n                    _arr.push(_s.value);\n\n                    if (i && _arr.length === i) break;\n                }\n            } catch (err) {\n                _d = true;\n                _e = err;\n            } finally {\n                try {\n                    if (!_n && _i[\"return\"]) _i[\"return\"]();\n                } finally {\n                    if (_d) throw _e;\n                }\n            }\n\n            return _arr;\n        }\n\n        return function (arr, i) {\n            if (Array.isArray(arr)) {\n                return arr;\n            } else if (Symbol.iterator in Object(arr)) {\n                return sliceIterator(arr, i);\n            } else {\n                throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n            }\n        };\n    }();\n\n    /**\n     * Computes the availability class name for a day and availability type\n     *\n     * @param objDay - A day object\n     * @param objAvailabilityState - The availability state object\n    \n     * @return sClass - The class name for the given day and availability type\n     *\n     * @author Ahmed Onawale <ahmedonawale@gmail.com>\n     * @since  06 September 2017\n     */\n    function availabilityClass(_ref) {\n        var _ref2 = _slicedToArray(_ref, 3),\n            _ref2$ = _ref2[0],\n            objDay = _ref2$ === undefined ? {} : _ref2$,\n            sState = _ref2[1],\n            bEdit = _ref2[2];\n\n        var sDayClass = dayTypeClass(objDay);\n        var sTypeClass = availabilityStateClass(sState);\n        var sEditClass = bEdit ? \"edit\" : \"\";\n        return (sTypeClass + \" \" + sDayClass + \" \" + sEditClass).trim();\n    }\n\n    function dayTypeClass(objDay) {\n        var bIsToday = objDay.bIsToday,\n            bIsPast = objDay.bIsPast,\n            bIsFuture = objDay.bIsFuture;\n\n        if (bIsToday) {\n            return \"today\";\n        } else if (bIsPast) {\n            return \"previous\";\n        } else if (bIsFuture) {\n            return \"next\";\n        } else {\n            return \"\";\n        }\n    }\n\n    function availabilityStateClass(sState) {\n        return (\"\" + sState).toLowerCase();\n    }\n\n    exports.default = Ember.Helper.helper(availabilityClass);\n});","define(\"a24-ember-staffshift-candidate-availability/helpers/availability-icon\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.availabilityIcon = availabilityIcon;\n\n    var _slicedToArray = function () {\n        function sliceIterator(arr, i) {\n            var _arr = [];\n            var _n = true;\n            var _d = false;\n            var _e = undefined;\n\n            try {\n                for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n                    _arr.push(_s.value);\n\n                    if (i && _arr.length === i) break;\n                }\n            } catch (err) {\n                _d = true;\n                _e = err;\n            } finally {\n                try {\n                    if (!_n && _i[\"return\"]) _i[\"return\"]();\n                } finally {\n                    if (_d) throw _e;\n                }\n            }\n\n            return _arr;\n        }\n\n        return function (arr, i) {\n            if (Array.isArray(arr)) {\n                return arr;\n            } else if (Symbol.iterator in Object(arr)) {\n                return sliceIterator(arr, i);\n            } else {\n                throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n            }\n        };\n    }();\n\n    /**\n     * Computes the availability icon name for an availability type\n     *\n     * @param sAvailabilityType - The availability type { objLate, objEarly, objNight }\n    \n     * @return sIconName - The icon name for the given availability type\n     *\n     * @author Ahmed Onawale <ahmedonawale@gmail.com>\n     * @since  06 September 2017\n     */\n    function availabilityIcon(_ref) {\n        var _ref2 = _slicedToArray(_ref, 1),\n            sAvailabilityType = _ref2[0];\n\n        switch (sAvailabilityType) {\n            case \"objLate\":\n                return \"brightness_6\";\n            case \"objNight\":\n                return \"brightness_1\";\n            case \"objEarly\":\n                return \"brightness_7\";\n            default:\n                return \"\";\n        }\n    }\n\n    exports.default = Ember.Helper.helper(availabilityIcon);\n});","define(\"a24-ember-staffshift-candidate-availability/helpers/availability-state\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.availabilityState = availabilityState;\n\n    var _slicedToArray = function () {\n        function sliceIterator(arr, i) {\n            var _arr = [];\n            var _n = true;\n            var _d = false;\n            var _e = undefined;\n\n            try {\n                for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n                    _arr.push(_s.value);\n\n                    if (i && _arr.length === i) break;\n                }\n            } catch (err) {\n                _d = true;\n                _e = err;\n            } finally {\n                try {\n                    if (!_n && _i[\"return\"]) _i[\"return\"]();\n                } finally {\n                    if (_d) throw _e;\n                }\n            }\n\n            return _arr;\n        }\n\n        return function (arr, i) {\n            if (Array.isArray(arr)) {\n                return arr;\n            } else if (Symbol.iterator in Object(arr)) {\n                return sliceIterator(arr, i);\n            } else {\n                throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n            }\n        };\n    }();\n\n    /**\n     * Computes the availability state\n     *\n     * @param sState - The availability state\n     * @param bEdit - If is editing\n     * @param bShown\n    \n     * @return bState\n     *\n     * @author Ahmed Onawale <ahmedonawale@gmail.com>\n     * @since  06 September 2017\n     */\n    function availabilityState(_ref) {\n        var _ref2 = _slicedToArray(_ref, 3),\n            sState = _ref2[0],\n            bEdit = _ref2[1],\n            _ref2$ = _ref2[2],\n            bShown = _ref2$ === undefined ? true : _ref2$;\n\n        if (bShown) {\n            switch (sState) {\n                case \"Booked\":\n                case \"Unavailable\":\n                case \"Available\":\n                    return true;\n                case \"Unknown\":\n                    return bEdit;\n                default:\n                    return \"\";\n            }\n        } else {\n            switch (sState) {\n                case \"Booked\":\n                    return false;\n                case \"Unavailable\":\n                case \"Available\":\n                case \"Unknown\":\n                    return bEdit;\n                default:\n                    return \"\";\n            }\n        }\n    }\n\n    exports.default = Ember.Helper.helper(availabilityState);\n});","define(\"a24-ember-staffshift-candidate-availability/services/a24-strings-staffshift-availability\", [\"exports\", \"a24-ember-lookup/services/a24-strings-base\"], function (exports, _a24StringsBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _a24StringsBase.default.extend({\n        _objStrings: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            this.set(\"_objStrings\", {\n                //===== STRINGS START =====\n\n                booked: \"Booked\",\n                unavailable: \"Unavailable\",\n                available: \"Available\",\n                unknown: \"Unknown\",\n\n                cancelShift: \"Cancel Shift\",\n\n                reportsTo: \"Reports to:\",\n                descriptionOfPosition: \"Description of position:\",\n                staffingInstructions: \"Staffing Instructions:\",\n                agency: \"Agency:\",\n                availability: \"Availability\",\n\n                calendar: \"Calendar\",\n\n                updatingAvailability: \"Updating availability...\",\n                availabilityUpdated: \"Successfully updated Availability\",\n                availabilityPartiallyUpdated: \"Availability only partially updated. Please refresh the page to see the latest details\",\n\n                downloadingTimesheet: \"Downloading Timesheet...\",\n                successfullyDownloadedTimesheet: \"Successfully downloaded the timesheet\",\n                failedDownloadedTimesheet: \"Could not downloaded the timesheet\",\n\n                emailSentSuccess: \"Email sent successfully\",\n                emailSentFailure: \"Email could not be sent at this moment\",\n\n                shiftConfirmation: \"Shift Confirmation\",\n                sendShiftConfirmation: \"Send Shift Confirmation\",\n                messageContent: \"Message content\",\n                messagePreview: \"Message Preview:\",\n                shiftConfirmationDetails: \"Shift Confirmation Details:\",\n                notificationSendFailed: \"Failed to send notification.\",\n                send: \"Send\",\n                shiftDetailsFailure: \"Failed to load shift details, shift notification will be unavailable\",\n                bulkAvailabilityUpdate: \"Bulk Availability Update\",\n                preview: \"Preview\",\n                repeatson: \"Repeats on\",\n                availabilityUpdateWarning: \"Please note that because bulk update was used that it might affect calendar days currently not in view.\",\n                bulkUpdate: \"Bulk Update\",\n                perhour: \"Per Hour\",\n                directions: \"Directions\",\n                clientAddress: \"Client Address\",\n                shiftReferenceNo: \"Shift Reference No\",\n                payRates: \"Pay Rates\",\n                totalTotalPayAmount: \"Total Pay Amount\",\n                breaksNotTakenIntoAccount: \"Breaks not taken into account for above total pay\",\n                total: \"Total\",\n                pay: \"Pay\",\n                totalPay: \"Total Pay\",\n                sendTimesheet: \"Send Timesheet\",\n\n                openShiftInNewTab: \"Open Shift in new tab\",\n\n                //===== STRINGS END   =====\n\n                //===== SAFE STRINGS START =====\n\n                notificationSendMessage: \"We will attempt to send this notification to the candidate. To see if the message was sent you can check the activity created on the candidate profile and view the status of the message from there.\"\n                //===== SAFE STRINGS END   =====\n            });\n        }\n    });\n});","define(\"a24-ember-staffshift-candidate-availability/services/agency-availability\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        sContext: null,\n\n        /*\n          Services\n        */\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objAvailabilityService: Ember.inject.service(\"availability\"),\n        _objAvailabilityStrings: Ember.inject.service(\"a24-strings-staffshift-availability\"),\n        _objConstantsEmberLibService: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY\"));\n        },\n\n        /*\n          Functions\n        */\n        /**\n         * Performs a single availability ajax call and formats the availability data\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch availability data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objQueryParams - Any extra query params for the get list\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since 13 May 2020\n         */\n        getFormattedAvailability: function getFormattedAvailability(objCaller, sProperty, sCandidateId, iCurrentMonth, iCurrentYear, funcSuccess, objFailure, objQueryParams) {\n\n            var objThis = this;\n            var funcSuccessFormatData = function funcSuccessFormatData(arrData) {\n                funcSuccess(objThis.get(\"_objAvailabilityService\").formatAvailabilityData(arrData, iCurrentMonth, iCurrentYear));\n            };\n\n            return this.getAvailability(objCaller, sProperty, sCandidateId, funcSuccessFormatData, objFailure, objQueryParams);\n        },\n\n        /**\n         * Performs a single availability ajax call\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch availability data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objQueryParams - Any extra query params for the get list\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since 13 May 2020\n         */\n        getAvailability: function getAvailability(objCaller, sProperty, sCandidateId, funcSuccess, objFailure, objQueryParams) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/availability\");\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, Ember.get(this, \"_objUserSession\"), Ember.get(this, \"_objNavigation\"), \"GET\", Ember.get(this, 'sRestApiBaseUrl') + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        updateAvailability: function updateAvailability(objCaller, sProperty, sCandidateId, funcSuccess, objFailure, objPayload) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/availability\");\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, Ember.get(this, \"_objUserSession\"), Ember.get(this, \"_objNavigation\"), \"POST\", Ember.get(this, 'sRestApiBaseUrl') + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objPayload));\n        }\n    });\n});","define(\"a24-ember-staffshift-candidate-availability/services/availability\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        sContext: null,\n\n        /*\n          Services\n        */\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objAvailabilityStrings: Ember.inject.service(\"a24-strings-staffshift-availability\"),\n        _objConstantsEmberLibService: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_CANDIDATE\"));\n        },\n\n        /*\n          Functions\n        */\n        /**\n         * Performs a single availability ajax call and formats the availability data\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch availability data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objQueryParams - Any extra query params for the get list\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  30 August 2017\n         */\n        getFormattedAvailability: function getFormattedAvailability(objCaller, sProperty, sCandidateId, iCurrentMonth, iCurrentYear, funcSuccess, objFailure, objQueryParams) {\n\n            var objThis = this;\n            var funcSuccessFormatData = function funcSuccessFormatData(arrData) {\n                funcSuccess(objThis.formatAvailabilityData(arrData, iCurrentMonth, iCurrentYear));\n            };\n\n            return this.getAvailability(objCaller, sProperty, sCandidateId, funcSuccessFormatData, objFailure, objQueryParams);\n        },\n\n        /**\n         * Performs a single availability ajax call\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch availability data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objQueryParams - Any extra query params for the get list\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  30 August 2017\n         */\n        getAvailability: function getAvailability(objCaller, sProperty, sCandidateId, funcSuccess, objFailure, objQueryParams) {\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/candidate/\" + sCandidateId + \"/availability\");\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, Ember.get(this, \"_objUserSession\"), Ember.get(this, \"_objNavigation\"), \"GET\", Ember.get(this, 'sRestApiBaseUrl') + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Formats an array of availability data\n         *\n         * @param arrData - An array of availability data objects\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  30 August 2017\n         */\n        formatAvailabilityData: function formatAvailabilityData(arrData, iCurrentMonth, iCurrentYear) {\n            var _this = this;\n\n            var arrParsedData = [{}, {}, {}];\n            $.each(arrData, function (sKey, objValue) {\n                var objDate = a24DateManager.createDate(Ember.get(_this, \"_objUserSession.objContextDetails.sTimezone\"));\n                objDate.setDateFromRest(objValue.dAvailabilityDate, true);\n\n                var iDay = objDate.getTimeOnDate(_this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_DATE);\n                var iMonth = objDate.getTimeOnDate(_this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS);\n                var iYear = objDate.getTimeOnDate(_this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_YEARS);\n\n                // 0 - prev\n                // 1 - current\n                // 2 - future\n                var iIndex = iYear < iCurrentYear ? 0 : // prev\n                iYear > iCurrentYear ? 2 : // future\n                iMonth === iCurrentMonth ? 1 : // same\n                iMonth < iCurrentMonth ? 0 : 2;\n\n                arrParsedData[iIndex][iDay] = {\n                    arrData: {\n                        objEarly: {\n                            sState: objValue.sEarly,\n                            sLabel: Ember.get(_this, \"_objAvailabilityStrings\").getString(objValue.sEarly.toLowerCase())\n                        },\n                        objLate: {\n                            sState: objValue.sLate,\n                            sLabel: Ember.get(_this, \"_objAvailabilityStrings\").getString(objValue.sLate.toLowerCase())\n                        },\n                        objNight: {\n                            sState: objValue.sNight,\n                            sLabel: Ember.get(_this, \"_objAvailabilityStrings\").getString(objValue.sNight.toLowerCase())\n                        }\n                    },\n                    dAvailabilityDate: objValue.dAvailabilityDate,\n                    bEdit: false\n                };\n            });\n\n            var objDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n            var iMonth;\n            for (var a = 0; a < arrParsedData.length; a++) {\n                if (a === 0) {\n                    iMonth = iCurrentMonth - 1;\n                } else if (a === 1) {\n                    iMonth = iCurrentMonth;\n                } else {\n                    //Its okey for it to go to 13 since with moment setting month to 13 will increase the year which is\n                    //what we want.\n                    iMonth = iCurrentMonth + 1;\n                }\n                for (var i = 0; i < 31; i++) {\n                    if (a24Core.isEmpty(arrParsedData[a][i + 1])) {\n                        objDate.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_YEARS, iCurrentYear);\n                        objDate.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS, iMonth);\n                        objDate.setTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_DATE, i + 1);\n\n                        var sDate = objDate.getDateStringForRest(true);\n                        arrParsedData[a][i + 1] = {\n                            arrData: {\n                                objEarly: {\n                                    sState: Ember.get(this, \"_objAvailabilityStrings\").getString(\"unknown\"),\n                                    sLabel: Ember.get(this, \"_objAvailabilityStrings\").getString(\"unknown\")\n                                },\n                                objLate: {\n                                    sState: Ember.get(this, \"_objAvailabilityStrings\").getString(\"unknown\"),\n                                    sLabel: Ember.get(this, \"_objAvailabilityStrings\").getString(\"unknown\")\n                                },\n                                objNight: {\n                                    sState: Ember.get(this, \"_objAvailabilityStrings\").getString(\"unknown\"),\n                                    sLabel: Ember.get(this, \"_objAvailabilityStrings\").getString(\"unknown\")\n                                }\n                            },\n                            dAvailabilityDate: sDate,\n                            bEdit: false\n                        };\n                    }\n                }\n            }\n\n            var objFinalParsedData = {\n                objPrevMonth: arrParsedData[0],\n                objMonth: arrParsedData[1],\n                objNextMonth: arrParsedData[2]\n            };\n\n            return objFinalParsedData;\n        },\n\n        updateAvailabilityForMonth: function updateAvailabilityForMonth(objMonthDays, objBulkUpdateConfig) {\n            var objStartDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n            objStartDate.setDateFromBrowser(objBulkUpdateConfig.dStart, a24Constants.DATE_FORMAT);\n            objStartDate.setTimeToStartOfDay(); //So that time does not affect the isAfter\n            var objEndDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n            objEndDate.setDateFromBrowser(objBulkUpdateConfig.dEnd, a24Constants.DATE_FORMAT);\n            objEndDate.setTimeToEndOfDay(); //So that time does not affect the isBefore on same dates\n            var objNewMonthDays = Ember.copy(objMonthDays, true);\n            for (var i = 1; i <= 31; i++) {\n                if (!a24Core.isEmpty(objMonthDays[i])) {\n                    var objAvailabilityDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n                    objAvailabilityDate.setDateFromRest(objMonthDays[i].dAvailabilityDate, true);\n                    //currently there is a bug in the setDateFromRest when using the date or month year only flag where\n                    //it will keep the timezone of the browser. Using the setTimeToStartOfDay corrects the timezone.\n                    objAvailabilityDate.setTimeToStartOfDay();\n                    //We add one min so that when this date matches the start range that it is after it e.g\n                    //18 Jan 2020 00:00 is not after 18 Jan 2020 00:00\n                    objAvailabilityDate.addTimeToDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MINUTES, 1);\n                    // check if day in range\n                    if (objAvailabilityDate.isAfter(objStartDate) && objEndDate.isAfter(objAvailabilityDate)) {\n                        // check if week day selected for update\n                        var bUpdateDay = false;\n                        for (var k = 0; k < objBulkUpdateConfig.weekItems.length; k++) {\n                            if (objBulkUpdateConfig.weekItems[k].sValue === objAvailabilityDate.getDayOfWeek()) {\n                                bUpdateDay = true;\n                                break;\n                            }\n                        }\n                        if (bUpdateDay) {\n                            if (objNewMonthDays[i].arrData.objEarly.sState !== Ember.get(this, \"_objAvailabilityStrings\").getString(\"booked\")) {\n                                objNewMonthDays[i].arrData.objEarly = Ember.copy(objBulkUpdateConfig.objAvailability.objEarly, true);\n                            }\n                            if (objNewMonthDays[i].arrData.objLate.sState !== Ember.get(this, \"_objAvailabilityStrings\").getString(\"booked\")) {\n                                objNewMonthDays[i].arrData.objLate = Ember.copy(objBulkUpdateConfig.objAvailability.objLate, true);\n                            }\n                            if (objNewMonthDays[i].arrData.objNight.sState !== Ember.get(this, \"_objAvailabilityStrings\").getString(\"booked\")) {\n                                objNewMonthDays[i].arrData.objNight = Ember.copy(objBulkUpdateConfig.objAvailability.objNight, true);\n                            }\n                        }\n                    }\n                }\n            }\n            return objNewMonthDays;\n        },\n        formatBulkAvailabilityData: function formatBulkAvailabilityData(objMonthDays, objNextMonthDays, objNonCurrentMonth, objBulkUpdateConfig, objMonthTwoDays, objMonthThreeDays) {\n            // update current month\n            var objNewMonthDays = this.updateAvailabilityForMonth(objMonthDays, objBulkUpdateConfig);\n            var objNewNextMonthDays = this.updateAvailabilityForMonth(objNextMonthDays, objBulkUpdateConfig);\n            var objNewMonthTwoDays = this.updateAvailabilityForMonth(objMonthTwoDays, objBulkUpdateConfig);\n            var objNewMonthThreeDays = this.updateAvailabilityForMonth(objMonthThreeDays, objBulkUpdateConfig);\n\n            if (a24Core.isEmpty(objNonCurrentMonth)) {\n                objNonCurrentMonth = {};\n            }\n            if (!a24Core.isEmpty(objNextMonthDays)) {\n                // build objNonCurrentMonth\n                // eg.\n                // 2020: { //<--year number\n                //     12: { //<--month number\n                //         6: { //<--day number\n                //             arrData: {objEarly, objLate, objNight, dAvailabilityDate}\n                //         },\n                //         7: {\n                //             arrData: {objEarly, objLate, objNight, dAvailabilityDate}\n                //         }\n                //         ...\n                //     }\n                //     ...\n                // },\n\n                // start from next month\n                var objNextAvailabilityDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n                objNextAvailabilityDate.setDateFromRest(objMonthThreeDays[1].dAvailabilityDate, true);\n                objNextAvailabilityDate.addTimeToDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS, 1);\n                //currently there is a bug in the setDateFromRest when using the date or month year only flag where\n                //it will keep the timezone of the browser. Using the setTimeToStartOfDay corrects the timezone.\n                objNextAvailabilityDate.setTimeToStartOfDay();\n                //We add one min so that when this date matches the start range that it is after it e.g\n                //18 Jan 2020 00:00 is not after 18 Jan 2020 00:00\n                objNextAvailabilityDate.addTimeToDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MINUTES, 1);\n\n                var objStartDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n                objStartDate.setDateFromBrowser(objBulkUpdateConfig.dStart, a24Constants.DATE_FORMAT);\n                objStartDate.setTimeToStartOfDay(); //So that time does not affect the isAfter\n\n                var objEndDate = a24DateManager.createDate(Ember.get(this, \"_objUserSession.objContextDetails.sTimezone\"));\n                objEndDate.setDateFromBrowser(objBulkUpdateConfig.dEnd, a24Constants.DATE_FORMAT);\n                objEndDate.setTimeToEndOfDay(); //So that time does not affect the isBefore on same dates\n\n                var n = 0;\n                while (objNextAvailabilityDate.isBefore(objEndDate)) {\n                    if (objNextAvailabilityDate.isAfter(objStartDate)) {\n\n                        var iDay = objNextAvailabilityDate.getTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_DATE);\n                        var iMonth = objNextAvailabilityDate.getTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_MONTHS);\n                        var iYear = objNextAvailabilityDate.getTimeOnDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_YEARS);\n\n                        // check if week day selected for update\n                        var bUpdateMonthDay = false;\n                        for (var m = 0; m < objBulkUpdateConfig.weekItems.length; m++) {\n                            if (objBulkUpdateConfig.weekItems[m].sValue === objNextAvailabilityDate.getDayOfWeek()) {\n                                bUpdateMonthDay = true;\n                                break;\n                            }\n                        }\n                        if (bUpdateMonthDay) {\n                            if (!objNonCurrentMonth.hasOwnProperty(iYear)) {\n                                objNonCurrentMonth[iYear] = {};\n                            }\n                            if (!objNonCurrentMonth[iYear].hasOwnProperty(iMonth)) {\n                                objNonCurrentMonth[iYear][iMonth] = {};\n                            }\n\n                            objNonCurrentMonth[iYear][iMonth][iDay] = {\n                                arrData: {\n                                    objEarly: Ember.copy(objBulkUpdateConfig.objAvailability.objEarly, true),\n                                    objLate: Ember.copy(objBulkUpdateConfig.objAvailability.objLate, true),\n                                    objNight: Ember.copy(objBulkUpdateConfig.objAvailability.objNight, true)\n                                },\n                                dAvailabilityDate: objNextAvailabilityDate.getDateStringForRest(true)\n                            };\n                        }\n                    }\n\n                    objNextAvailabilityDate.addTimeToDate(this.get(\"_objConstantsEmberLibService\").MOMENT_TIME_DAYS, 1);\n\n                    n++;\n                    if (n > 31 * 6) {\n                        // prevent infinate loop\n                        break;\n                    }\n                }\n            }\n\n            var objFinalParsedData = {\n                objMonth: objNewMonthDays,\n                objNextMonth: objNewNextMonthDays,\n                objMonthTwoDays: objNewMonthTwoDays,\n                objMonthThreeDays: objNewMonthThreeDays,\n                objNonCurrentMonth: objNonCurrentMonth\n            };\n\n            return objFinalParsedData;\n        },\n        updateAvailability: function updateAvailability(objCaller, sProperty, sCandidateId, funcSuccess, objFailure, objPayload) {\n            a24RestUrlConstruct.setBaseUrl(\"/v1/candidate/\" + sCandidateId + \"/availability\");\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, Ember.get(this, \"_objUserSession\"), Ember.get(this, \"_objNavigation\"), \"POST\", Ember.get(this, 'sRestApiBaseUrl') + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objPayload));\n        }\n    });\n});","define(\"a24-ember-staffshift-candidate-availability/services/booked-shifts\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        sContext: null,\n        /*\n          Services\n        */\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sContext\", this.get(\"_objStaffshiftCoreConstants.CONTEXT_CANDIDATE\"));\n        },\n\n        /**\n         * Performs a single booked shifts ajax call\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch availability data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objQueryParams - Any extra query params for the get list\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  19 September 2017\n         */\n        getBookedShifts: function getBookedShifts(objCaller, sProperty, sCandidateId, funcSuccess, objFailure, objQueryParams) {\n            a24RestUrlConstruct.setBaseUrl(\"/v1/candidate/\" + sCandidateId + \"/booked-shifts\");\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, Ember.get(this, \"_objUserSession\"), Ember.get(this, \"_objNavigation\"), \"GET\", Ember.get(this, 'sRestApiBaseUrl') + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-staffshift-candidate-availability/services/rest-agency-advanced-search-agency-shift\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        /*\n          Services\n        */\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_ENV.sRestApiBaseUrl\"),\n\n        _ENV: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Used to fetch shifts data from the server for an agency\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param objFilterQuery - Query to filter results on\n         * @param objSortQuery - Query to sort results on\n         * @param iPage - Page to start query on\n         * @param iPerPage - Results per page to us\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objCustomHeaders (Optional) - Object containing custom headers\n         *\n         * @author Ruan Naude <ruan.naude@a24group.com>\n         * @since  22 May 2020\n         */\n        getShifts: function getShifts(objCaller, sProperty, objFilterQuery, objSortQuery, iPage, iPerPage, funcSuccess, objFailure, objCustomHeaders) {\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency/\" + this.get(\"_objUserSession\").getUserContextReference().mId + \"/advanced-search/agency-shift\");\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, Ember.get(this, \"_objUserSession\"), Ember.get(this, \"_objNavigation\"), \"POST\", Ember.get(this, \"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, a24RestCallHelper.convertHooksToPostBodyV2(objFilterQuery, null, objSortQuery, iPage, iPerPage), null, null, null, null, null, objCustomHeaders));\n        }\n    });\n});","define(\"a24-ember-staffshift-candidate-availability/services/rest-agency-candidate-notification\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        /*\n          Services\n        */\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_ENV.sRestApiBaseUrl\"),\n\n        _ENV: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Send a shift confirmation to the candidate\n         *\n         * @param objContext - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sAgencyId - The agency id\n         * @param sCandidateId - The candidate id\n         * @param objData - The shift confiration payload\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  03 June 2020\n         */\n        sendShiftConfirmation: function sendShiftConfirmation(objContext, sProperty, sAgencyId, sCandidateId, objData, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/agency/\" + sAgencyId + \"/candidate/\" + sCandidateId + \"/notifications\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        }\n    });\n});","define(\"a24-ember-staffshift-candidate-availability/services/rest-agency-staffing-order\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        /*\n          Services\n        */\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n\n        _sRestTriageApiBaseUrl: Ember.computed.readOnly(\"_ENV.sTriageBaseRest\"),\n\n        _ENV: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Used to fetch order data from the server for an agency\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param iOrderId - The order id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  14 August 2020\n         */\n        getOrder: function getOrder(objCaller, sProperty, iOrderId, funcSuccess, objFailure) {\n\n            a24RestUrlConstruct.setBaseUrl(\"/rest/staffing/order/\" + iOrderId);\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, Ember.get(this, \"_objUserSession\"), Ember.get(this, \"_objNavigation\"), \"GET\", Ember.get(this, \"_sRestTriageApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, null, null, false, true));\n        }\n    });\n});","define(\"a24-ember-staffshift-candidate-availability/services/rest-staffing-shift-details\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _sTriageBaseRest: Ember.computed.readOnly(\"_ENV.sTriageBaseRest\"),\n\n        _ENV: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Route for getting details of shifts\n         *\n         * @param objCaller - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param arrOrderIds - The array of order ids\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  04 June 2020\n         */\n        getShiftDetails: function getShiftDetails(objContext, sProperty, arrOrderIds, funcSuccess, objFailure) {\n            var sOrderIds = arrOrderIds.join(\"|\");\n\n            a24RestUrlConstruct.setBaseUrl(\"/rest/staffing/shift?sStaffingOrderId=in::\" + sOrderIds);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sTriageBaseRest\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, null, null, false, true));\n        }\n    });\n});","define(\"a24-ember-staffshift-candidate-availability/services/retrieve-shift-pdf\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Performs a single candidate shift ajax GET call\n         *\n         * @param sShiftId - The Shift to retrieve\n         * @param sTestFileName - The name you wish to give the PDF getting downloaded\n         * @param funcSuccess - The success function\n         * @param funcFailure - The failure function\n         * @param objQueryParams - Any extra query params for the get list\n         * @param objHeaders - Headers for the request\n         *\n         */\n        downloadCandidateShift: function downloadCandidateShift(sShiftId, sTestFileName, funcSuccess, funcFailure, objQueryParams, objHeaders) {\n            a24RestUrlConstruct.setBaseUrl(\"/v1/timesheet.pdf\");\n\n            if (a24Core.isEmpty(objQueryParams)) {\n                objQueryParams = {};\n            }\n\n            objQueryParams[\"sShiftId\"] = {\n                mValue: sShiftId\n            };\n\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.downloadPdfByGET(Ember.get(this, \"sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), sTestFileName, funcSuccess, funcFailure, objHeaders);\n        }\n    });\n});","define(\"a24-ember-staffshift-candidate-availability/services/shift-email\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        /*\n          Services\n        */\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Email a timesheet to an email address\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sEmailAddress - The email address\n         * @param sShiftId - The shift id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objQueryParams - Any extra query params for the get list\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  26 September 2017\n         */\n        postShiftEmail: function postShiftEmail(objCaller, sProperty, sEmailAddress, sShiftId, funcSuccess, objFailure, objQueryParams) {\n            a24RestUrlConstruct.setBaseUrl(\"/v1/timesheet/email\");\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            var objRequestData = {\n                sEmailAddress: sEmailAddress,\n                sShiftId: sShiftId\n            };\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, Ember.get(this, \"_objUserSession\"), Ember.get(this, \"_objNavigation\"), \"POST\", Ember.get(this, 'sRestApiBaseUrl') + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objRequestData));\n        }\n    });\n});","define(\"a24-ember-staffshift-candidate-availability/templates/components/agency-day-view\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"3vHZIONc\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objBookedShiftData\\\"],\\\"statements\\\":[[0,\\\"\\\\n\\\"],[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"day-overview\\\",null,[[\\\"sDayMonthYear\\\",\\\"arrData\\\",\\\"bLoading\\\",\\\"arrActions\\\"],[[22,[\\\"sHeader\\\"]],[22,[\\\"objAvailData\\\"]],[22,[\\\"bAvailabilityLoading\\\"]],[22,[\\\"arrAvailabilityActions\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bBookingOrNumbersLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[20,\\\"loading-component\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_arrBookings\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"center-heading\\\"],[8],[0,\\\"\\\\n                Shifts\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"_arrBookings\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[1,[26,\\\"booked-shift-card-agency\\\",null,[[\\\"objData\\\",\\\"arrEntityActions\\\",\\\"bHasMobileNumber\\\",\\\"objEmailRestService\\\",\\\"onCancelShiftAction\\\"],[[21,2,[]],[22,[\\\"_arrEntityActions\\\"]],[22,[\\\"_bHasMobileNumber\\\"]],[22,[\\\"objEmailRestService\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onCancelShiftAction\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"bLoading\\\",\\\"onPopupResponsiveDismiss\\\",\\\"bDismissible\\\"],[[22,[\\\"bEditMode\\\"]],false,[22,[\\\"bEditPopupLoading\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupEditCancel\\\"],null],false]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[[26,\\\"lookup-string\\\",[\\\"availability\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],\\\"padding-double popup-header-gray\\\",false,[21,1,[]],[22,[\\\"_objSpecialAddPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"bEditMode\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-left-double padding-right-double padding-top-double\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"availability-shift-editor\\\",null,[[\\\"objData\\\",\\\"onShiftClick\\\"],[[22,[\\\"objEditData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onShiftClick\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupEditCancel\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onEditPopupConfirm\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"save\\\"],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowUnsavedData\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupUnsavedConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"unsavedData\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[1,[26,\\\"react-popup\\\",null,[[\\\"bShow\\\",\\\"sIFrameUrl\\\",\\\"bLoading\\\",\\\"objData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_bReactPopupOpen\\\"]],[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_bReactPopupLoading\\\"]],[22,[\\\"_objReactPopupPostData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecieveReactData\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-candidate-availability/templates/components/agency-day-view.hbs\" } });\n});","define(\"a24-ember-staffshift-candidate-availability/templates/components/availability-card\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"4OtdWLsu\", \"block\": \"{\\\"symbols\\\":[\\\"objData\\\"],\\\"statements\\\":[[4,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"bHasBlock\\\",\\\"bHasIcon\\\",\\\"sIconClass\\\",\\\"sImageUrl\\\",\\\"sLetter\\\",\\\"arrActionItems\\\",\\\"sIconSizeClass\\\"],[[22,[\\\"sHeader\\\"]],[22,[\\\"bHasSubHeader\\\"]],true,\\\"grey header-icon-back\\\",[22,[\\\"sImageUrl\\\"]],[22,[\\\"sLetter\\\"]],[22,[\\\"arrActions\\\"]],[22,[\\\"sIconSizeClass\\\"]]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"strong\\\"],[8],[1,[20,\\\"sSubHeader\\\"],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[6,\\\"table\\\"],[10,\\\"class\\\",\\\"mt-1\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"arrData\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[21,1,[\\\"sIcon\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"tr\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"icon\\\"],[8],[6,\\\"i\\\"],[10,\\\"class\\\",\\\"material-icons text-center\\\"],[8],[1,[21,1,[\\\"sIcon\\\"]],false],[9],[9],[0,\\\"\\\\n                \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"info\\\"],[8],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"value text-ellipse\\\"],[8],[1,[21,1,[\\\"sValue\\\"]],false],[9],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"tr\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"icon\\\"],[8],[9],[0,\\\"\\\\n                \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"info\\\"],[8],[6,\\\"strong\\\"],[10,\\\"class\\\",\\\"label\\\"],[8],[1,[21,1,[\\\"sLabel\\\"]],false],[9],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"tr\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"icon\\\"],[8],[9],[0,\\\"\\\\n                \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"info\\\"],[8],[6,\\\"span\\\"],[11,\\\"class\\\",[27,[\\\"value \\\",[26,\\\"if\\\",[[21,1,[\\\"bWrap\\\"]],\\\"\\\",\\\"text-ellipse\\\"],null]]]],[8],[1,[21,1,[\\\"sValue\\\"]],false],[9],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[1]},null],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"bAutoClose\\\",\\\"bLoading\\\",\\\"sConfirmButtonText\\\",\\\"bShowPopup\\\",\\\"onPopupConfirmationConfirm\\\",\\\"onPopupConfirmationCancel\\\"],[false,[22,[\\\"bSendingEmail\\\"]],\\\"SEND\\\",[22,[\\\"bShowEmailPopup\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"emailShiftConfirm\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"emailShiftCancel\\\"],null]]],{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"bShowEmailPopup\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"strong\\\"],[8],[0,\\\"Email timesheet\\\"],[9],[0,\\\"\\\\n        \\\"],[1,[26,\\\"input-text\\\",null,[[\\\"sFieldName\\\",\\\"sValue\\\"],[\\\"Email\\\",[22,[\\\"sEmail\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-candidate-availability/templates/components/availability-card.hbs\" } });\n});","define(\"a24-ember-staffshift-candidate-availability/templates/components/availability-shift-editor\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"SxitjdR4\", \"block\": \"{\\\"symbols\\\":[\\\"sPeriod\\\",\\\"objHash\\\"],\\\"statements\\\":[[4,\\\"each\\\",[[26,\\\"-each-in\\\",[[22,[\\\"objData\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"icon-label\\\",null,[[\\\"sIcon\\\",\\\"bIconOnly\\\",\\\"bClickable\\\",\\\"sText\\\",\\\"onClick\\\",\\\"class\\\"],[[26,\\\"availability-icon\\\",[[21,1,[]]],null],false,[26,\\\"availability-state\\\",[[21,2,[\\\"sState\\\"]],true,false],null],[21,2,[\\\"sLabel\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"selectAvailability\\\",[21,1,[]],[21,2,[]]],null],[26,\\\"availability-class\\\",[[22,[\\\"objDay\\\"]],[21,2,[\\\"sState\\\"]],[22,[\\\"bEdit\\\"]]],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1,2]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-candidate-availability/templates/components/availability-shift-editor.hbs\" } });\n});","define(\"a24-ember-staffshift-candidate-availability/templates/components/booked-shift-card-agency\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"s6XMNkOQ\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objParentScroller\\\",\\\"objItem\\\"],\\\"statements\\\":[[4,\\\"card-style-component\\\",null,[[\\\"bApplyDefaultPadding\\\",\\\"bHideOverFlow\\\",\\\"class\\\"],[false,[22,[\\\"bHideOverFlow\\\"]],\\\"booked-shift-card-agency\\\"]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"class\\\",\\\"sIconName\\\",\\\"sIconSizeClass\\\",\\\"sIconColor\\\",\\\"sHeaderClass\\\",\\\"bHasIcon\\\",\\\"bEllipseHeader\\\",\\\"arrActionItems\\\"],[[22,[\\\"_sHeader\\\"]],\\\"booked-shift-card-agency-header\\\",\\\"check_circle\\\",[22,[\\\"_objLibConstants\\\",\\\"ROUND_ICON_CONTENT_SIZE_LARGE\\\"]],\\\"a24-white-text\\\",\\\"a24-white-text\\\",true,false,[22,[\\\"_arrHeaderActions\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[6,\\\"table\\\"],[10,\\\"class\\\",\\\"booked-shift-card-agency-sub-header\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"tr\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"booked-shift-card-agency-sub-header-front\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sLetter\\\",\\\"sImageUrl\\\",\\\"bClickable\\\",\\\"sBackgroundClass\\\",\\\"sIconClass\\\"],[[22,[\\\"_sFirstLetter\\\"]],[22,[\\\"_sAvatar\\\"]],false,\\\"grey lighten-1\\\",\\\"a24-grey-text-darken-4\\\"]]],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"td\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"booked-shift-card-agency-sub-header-middle\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"booked-shift-card-agency-float-site \\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-secondary-color-text-accent-force clickable-link\\\"],[11,\\\"href\\\",[27,[[20,\\\"_sSiteLink\\\"]]]],[10,\\\"target\\\",\\\"_blank\\\"],[8],[0,\\\"\\\\n                            \\\"],[1,[20,\\\"_sSiteName\\\"],false],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"booked-shift-card-agency-float-ward\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_sWardName\\\"]]],null,{\\\"statements\\\":[[0,\\\"                            \\\"],[1,[20,\\\"_sSpacer\\\"],false],[0,\\\"\\\\n                            \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-secondary-color-text-accent-force clickable-link\\\"],[11,\\\"href\\\",[27,[[20,\\\"_sWardLink\\\"]]]],[10,\\\"target\\\",\\\"_blank\\\"],[8],[0,\\\"\\\\n                                \\\"],[1,[20,\\\"_sWardName\\\"],false],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                    \\\"],[9],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"booked-shift-card-agency-float-org\\\"],[8],[1,[20,\\\"_sOrgName\\\"],false],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"booked-shift-card-agency-sub-header-back\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-secondary-color-text-accent-force clickable-link\\\"],[11,\\\"href\\\",[27,[[20,\\\"_sOrderRefLink\\\"]]]],[10,\\\"target\\\",\\\"_blank\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[20,\\\"_sOrderRef\\\"],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-left-normal padding-right-normal\\\"],[8],[1,[20,\\\"horizontal-line-component\\\"],false],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-6 col-12\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"booked-shift-card-agency-details\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"class\\\",\\\"bClickable\\\",\\\"sIconClass\\\",\\\"sIcon\\\"],[\\\"booked-shift-card-agency-details-icon\\\",false,\\\"a24-grey-text-darken-1\\\",\\\"work\\\"]]],false],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-small\\\"],[8],[1,[20,\\\"_sJobFamily\\\"],false],[9],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[8],[1,[20,\\\"_sJobTitle\\\"],false],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-6 col-12\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"booked-shift-card-agency-details padding-bottom-small\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"class\\\",\\\"bClickable\\\",\\\"sIconClass\\\",\\\"sLetter\\\"],[\\\"booked-shift-card-agency-details-icon\\\",false,\\\"a24-grey-text-darken-1 text-bold\\\",[22,[\\\"_sPayCurrency\\\"]]]]],false],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-small\\\"],[8],[1,[20,\\\"_sPay\\\"],false],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"booked-shift-card-agency-details\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"class\\\",\\\"bClickable\\\",\\\"sIconClass\\\",\\\"sIcon\\\"],[\\\"booked-shift-card-agency-details-icon\\\",false,\\\"a24-grey-text-darken-1\\\",\\\"place\\\"]]],false],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-small\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"a\\\"],[11,\\\"class\\\",[27,[[26,\\\"if\\\",[[22,[\\\"_sDirectionsLink\\\"]],\\\"a24-secondary-color-text-accent-force clickable-link\\\"],null]]]],[11,\\\"href\\\",[27,[[20,\\\"_sDirectionsLink\\\"]]]],[10,\\\"target\\\",\\\"_blank\\\"],[8],[0,\\\"\\\\n                            \\\"],[1,[20,\\\"_sDirectionsText\\\"],false],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[8],[1,[20,\\\"_sDirectionsPostCode\\\"],false],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-left-normal padding-right-normal\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"view-more-component\\\",null,[[\\\"iHeight\\\",\\\"onCollapseExpandStart\\\"],[0,[26,\\\"action\\\",[[21,0,[]],\\\"onCollapseExpandStart\\\"],null]]],{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-left-double padding-right-double padding-bottom-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-bottom-small text-bold\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"descriptionOfPosition\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],false],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-preserve-white-space\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[20,\\\"_sDescription\\\"],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal padding-bottom-small text-bold\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"staffingInstructions\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],false],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-preserve-white-space\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[20,\\\"_sInstructions\\\"],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal padding-bottom-small text-bold\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"clientAddress\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],false],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[8],[1,[20,\\\"_sSiteAddress\\\"],false],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal text-bold\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"shiftReferenceNo\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],false],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[8],[1,[20,\\\"_sShiftRef\\\"],false],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal text-bold\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"reportsTo\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],false],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bOrderDataLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[20,\\\"loading-component\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[8],[1,[20,\\\"_sReportTo\\\"],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[4,\\\"if\\\",[[22,[\\\"_bHasContract\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal text-bold\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"payRates\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],false],[9],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"payRateDiv\\\"],[8],[0,\\\"\\\\n                            \\\"],[6,\\\"table\\\"],[10,\\\"class\\\",\\\"payRateTable\\\"],[8],[0,\\\"\\\\n                                \\\"],[6,\\\"thead\\\"],[8],[0,\\\"\\\\n                                    \\\"],[6,\\\"tr\\\"],[10,\\\"class\\\",\\\"payRateRow\\\"],[8],[0,\\\"\\\\n                                        \\\"],[6,\\\"th\\\"],[10,\\\"class\\\",\\\"payRateHeader\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"startTime\\\",[22,[\\\"_objFormInputStrings\\\"]]],null],false],[9],[0,\\\"\\\\n                                        \\\"],[6,\\\"th\\\"],[10,\\\"class\\\",\\\"payRateHeader\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"endTime\\\",[22,[\\\"_objFormInputStrings\\\"]]],null],false],[9],[0,\\\"\\\\n                                        \\\"],[6,\\\"th\\\"],[10,\\\"class\\\",\\\"payRateHeader\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"total\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],false],[9],[0,\\\"\\\\n                                        \\\"],[6,\\\"th\\\"],[10,\\\"class\\\",\\\"payRateHeader\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"pay\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],false],[0,\\\"(\\\"],[1,[20,\\\"_sCurrency\\\"],false],[0,\\\")\\\"],[9],[0,\\\"\\\\n                                        \\\"],[6,\\\"th\\\"],[10,\\\"class\\\",\\\"payRateHeader\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"totalPay\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],false],[0,\\\"(\\\"],[1,[20,\\\"_sCurrency\\\"],false],[0,\\\")\\\"],[9],[0,\\\"\\\\n                                    \\\"],[9],[0,\\\"\\\\n                                \\\"],[9],[0,\\\"\\\\n                                \\\"],[6,\\\"tbody\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"_arrContractBreakdown\\\"]]],null,{\\\"statements\\\":[[0,\\\"                                        \\\"],[6,\\\"tr\\\"],[10,\\\"class\\\",\\\"payRateRow\\\"],[8],[0,\\\"\\\\n                                            \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"payRateCellDate\\\"],[8],[1,[21,3,[\\\"sStartDate\\\"]],false],[9],[0,\\\"\\\\n                                            \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"payRateCellDate\\\"],[8],[1,[21,3,[\\\"sEndDate\\\"]],false],[9],[0,\\\"\\\\n                                            \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"payRateCell\\\"],[8],[1,[21,3,[\\\"sTotal\\\"]],false],[9],[0,\\\"\\\\n                                            \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"payRateCell\\\"],[8],[1,[21,3,[\\\"sPay\\\"]],false],[9],[0,\\\"\\\\n                                            \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"payRateCell\\\"],[8],[1,[21,3,[\\\"sTotalPay\\\"]],false],[9],[0,\\\"\\\\n                                        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"                                    \\\"],[6,\\\"tr\\\"],[10,\\\"class\\\",\\\"payRateRow\\\"],[8],[0,\\\"\\\\n                                        \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"payRateTotalCell\\\"],[10,\\\"colspan\\\",\\\"4\\\"],[8],[1,[20,\\\"_sContractTotalPayLabel\\\"],false],[0,\\\"(\\\"],[1,[20,\\\"_sCurrency\\\"],false],[0,\\\")\\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[9],[0,\\\"\\\\n                                        \\\"],[6,\\\"td\\\"],[10,\\\"class\\\",\\\"payRateTotalCell\\\"],[8],[1,[20,\\\"_sContractPay\\\"],false],[9],[0,\\\"\\\\n                                    \\\"],[9],[0,\\\"\\\\n                                \\\"],[9],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n                            \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold padding-right-micro\\\"],[8],[0,\\\"*\\\"],[9],[1,[26,\\\"lookup-string\\\",[\\\"breaksNotTakenIntoAccount\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],false],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[1,[26,\\\"shift-confirmation-popup\\\",null,[[\\\"sShiftDetails\\\",\\\"bShowPopup\\\",\\\"sCandidateId\\\",\\\"sShiftId\\\",\\\"sOrderId\\\",\\\"sAgencyId\\\",\\\"sAssignmentId\\\",\\\"onPopupCloseAction\\\"],[[22,[\\\"_sShiftDetails\\\"]],[22,[\\\"_bShiftConfirmation\\\"]],[22,[\\\"_sCandidateId\\\"]],[22,[\\\"_sShiftId\\\"]],[22,[\\\"_sOrderId\\\"]],[22,[\\\"_sAgencyId\\\"]],[22,[\\\"_sAssignmentId\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupCancel\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"onPopupResponsiveDismiss\\\",\\\"bDismissible\\\"],[[22,[\\\"_bShowSendTimesheet\\\"]],[22,[\\\"_bSendTimesheetLoading\\\"]],false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupSendTimesheetCancel\\\"],null],false]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[[26,\\\"lookup-string\\\",[\\\"sendTimesheet\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],\\\"padding-double popup-header-gray\\\",false,[21,1,[]],[22,[\\\"_objSpecialSendTimesheetPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"_bShowSendTimesheet\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-double\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"email\\\"],null],\\\"email\\\",1,true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal padding-left-normal font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"a24RequiredFieldsMarked\\\"],null],false],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupSendTimesheetCancel\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupSendTimesheetConfirm\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"send\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-candidate-availability/templates/components/booked-shift-card-agency.hbs\" } });\n});","define(\"a24-ember-staffshift-candidate-availability/templates/components/bulk-availability-update-popup\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"PxDK3x01\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objParentScroller\\\"],\\\"statements\\\":[[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"bDismissible\\\",\\\"onPopupResponsiveDismiss\\\"],[[22,[\\\"bShowPopup\\\"]],[22,[\\\"bPopupLoading\\\"]],false,false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupCancel\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"class\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[[26,\\\"lookup-string\\\",[\\\"bulkAvailabilityUpdate\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],\\\"padding-double grey lighten-3\\\",[21,1,[]],[22,[\\\"_objSpecialPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"bShowPopup\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-double\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bDisplayDates\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[1,[26,\\\"input-form-date-picker\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"sSelectedDate\\\",\\\"objMinDate\\\",\\\"objMaxDate\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"startDate\\\",[22,[\\\"_objFormInputStringsService\\\"]]],null],\\\"dStart\\\",1,true,[22,[\\\"_sCurrentDate\\\"]],[22,[\\\"_objMinDate\\\"]],[22,[\\\"_objMaxDate\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-week\\\",null,[[\\\"sFieldName\\\",\\\"iOrder\\\",\\\"sProperty\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"repeatson\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],2,\\\"weekItems\\\",true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bDisplayDates\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[1,[26,\\\"input-form-date-picker\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"objMinDate\\\",\\\"objMaxDate\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"endDate\\\",[22,[\\\"_objFormInputStringsService\\\"]]],null],\\\"dEnd\\\",3,true,[22,[\\\"_objMinDate\\\"]],[22,[\\\"_objMaxDate\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"availability-label\\\"],[8],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"availability\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"availability-shift-editor\\\",null,[[\\\"iOrder\\\",\\\"bEdit\\\",\\\"objData\\\",\\\"onShiftClick\\\"],[4,true,[22,[\\\"_objAvailabilityData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onShiftClick\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal padding-left-normal font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"a24RequiredFieldsMarked\\\"],null],false],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupCancel\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupConfirm\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"preview\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-candidate-availability/templates/components/bulk-availability-update-popup.hbs\" } });\n});","define(\"a24-ember-staffshift-candidate-availability/templates/components/calendar-card\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"NkAOFIZg\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"class\\\",\\\"sHeader\\\",\\\"arrActionItems\\\"],[\\\"padding-left-normal padding-right-normal\\\",[22,[\\\"sMonthYear\\\"]],[22,[\\\"arrActions\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bIsMobileOnly\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"d-flex justify-content-around\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"icon-label\\\",null,[[\\\"sIcon\\\",\\\"bClickable\\\",\\\"sText\\\",\\\"class\\\"],[\\\"brightness_1\\\",false,\\\"Booked\\\",\\\"booked-key\\\"]]],false],[0,\\\"\\\\n        \\\"],[1,[26,\\\"icon-label\\\",null,[[\\\"sIcon\\\",\\\"bClickable\\\",\\\"sText\\\",\\\"class\\\"],[\\\"brightness_1\\\",false,\\\"Available\\\",\\\"available-key\\\"]]],false],[0,\\\"\\\\n        \\\"],[1,[26,\\\"icon-label\\\",null,[[\\\"sIcon\\\",\\\"bClickable\\\",\\\"sText\\\",\\\"class\\\"],[\\\"brightness_1\\\",false,\\\"Unavailable\\\",\\\"unavailable-key\\\"]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-normal\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"calendar-month\\\",null,[[\\\"iYear\\\",\\\"iMonth\\\",\\\"iOffset\\\",\\\"bLoading\\\",\\\"bShowWeekHeading\\\",\\\"objMonthDays\\\",\\\"objPrevMonthDays\\\",\\\"objNextMonthDays\\\",\\\"onDayAction\\\",\\\"sDayComponent\\\"],[[22,[\\\"iYear\\\"]],[22,[\\\"iMonth\\\"]],[22,[\\\"iOffset\\\"]],[22,[\\\"bLoading\\\"]],[22,[\\\"bShowWeekHeading\\\"]],[22,[\\\"objMonthDays\\\"]],[26,\\\"if\\\",[[22,[\\\"bShowPreview\\\"]],null,[22,[\\\"objPrevMonthDays\\\"]]],null],[26,\\\"if\\\",[[22,[\\\"bShowPreview\\\"]],null,[22,[\\\"objNextMonthDays\\\"]]],null],[22,[\\\"onDayAction\\\"]],[22,[\\\"sDayComponent\\\"]]]]],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bShowPreview\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"class\\\",\\\"sHeader\\\"],[\\\"padding-top-normal padding-left-normal padding-right-normal\\\",[22,[\\\"sMonthTwoYear\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"calendar-month\\\",null,[[\\\"iYear\\\",\\\"iMonth\\\",\\\"iOffset\\\",\\\"bLoading\\\",\\\"bShowWeekHeading\\\",\\\"objMonthDays\\\",\\\"onDayAction\\\",\\\"sDayComponent\\\"],[[22,[\\\"iYearPlus1\\\"]],[22,[\\\"iMonthPlus1\\\"]],[22,[\\\"iOffset\\\"]],[22,[\\\"bLoading\\\"]],[22,[\\\"bShowWeekHeading\\\"]],[22,[\\\"objMonthTwoDays\\\"]],[22,[\\\"onDayAction\\\"]],[22,[\\\"sDayComponent\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"class\\\",\\\"sHeader\\\"],[\\\"padding-top-normal padding-left-normal padding-right-normal\\\",[22,[\\\"sMonthThreeYear\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"calendar-month\\\",null,[[\\\"iYear\\\",\\\"iMonth\\\",\\\"iOffset\\\",\\\"bLoading\\\",\\\"bShowWeekHeading\\\",\\\"objMonthDays\\\",\\\"onDayAction\\\",\\\"sDayComponent\\\"],[[22,[\\\"iYearPlus2\\\"]],[22,[\\\"iMonthPlus2\\\"]],[22,[\\\"iOffset\\\"]],[22,[\\\"bLoading\\\"]],[22,[\\\"bShowWeekHeading\\\"]],[22,[\\\"objMonthThreeDays\\\"]],[22,[\\\"onDayAction\\\"]],[22,[\\\"sDayComponent\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-candidate-availability/templates/components/calendar-card.hbs\" } });\n});","define(\"a24-ember-staffshift-candidate-availability/templates/components/day-availability\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"mIOjz2Ea\", \"block\": \"{\\\"symbols\\\":[\\\"sPeriod\\\",\\\"objHash\\\"],\\\"statements\\\":[[1,[22,[\\\"objDay\\\",\\\"iNumber\\\"]],false],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[26,\\\"-each-in\\\",[[22,[\\\"objDay\\\",\\\"arrData\\\"]]],null]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[26,\\\"availability-state\\\",[[21,2,[\\\"sState\\\"]],[22,[\\\"bEdit\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"icon-label\\\",null,[[\\\"sIcon\\\",\\\"bIconOnly\\\",\\\"bClickable\\\",\\\"sText\\\",\\\"onClick\\\",\\\"class\\\"],[[26,\\\"availability-icon\\\",[[21,1,[]]],null],[22,[\\\"bIsMobileOnly\\\"]],[26,\\\"availability-state\\\",[[21,2,[\\\"sState\\\"]],[22,[\\\"bEdit\\\"]],false],null],[21,2,[\\\"sLabel\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"selectAvailability\\\",[21,1,[]],[21,2,[]]],null],[26,\\\"availability-class\\\",[[22,[\\\"objDay\\\"]],[21,2,[\\\"sState\\\"]],[22,[\\\"bEdit\\\"]]],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"spacer icon-label\\\"],[8],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[1,2]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-candidate-availability/templates/components/day-availability.hbs\" } });\n});","define(\"a24-ember-staffshift-candidate-availability/templates/components/day-overview\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"aME3Wc58\", \"block\": \"{\\\"symbols\\\":[\\\"sPeriod\\\",\\\"objHash\\\"],\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"arrActionItems\\\",\\\"bLoading\\\"],[[22,[\\\"sDayMonthYear\\\"]],[22,[\\\"arrActions\\\"]],[22,[\\\"bLoading\\\"]]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row padding-normal\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[26,\\\"-each-in\\\",[[22,[\\\"arrData\\\"]]],null]],null,{\\\"statements\\\":[[0,\\\"            \\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-4\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"icon-label\\\",null,[[\\\"sIcon\\\",\\\"bClickable\\\",\\\"bIconOnly\\\",\\\"sText\\\",\\\"class\\\"],[[26,\\\"availability-icon\\\",[[21,1,[]]],null],false,[22,[\\\"bIsMobileOnly\\\"]],[21,2,[\\\"sLabel\\\"]],[26,\\\"availability-class\\\",[false,[21,2,[\\\"sState\\\"]],[22,[\\\"bEdit\\\"]]],null]]]],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\\n\\\"]],\\\"parameters\\\":[1,2]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-candidate-availability/templates/components/day-overview.hbs\" } });\n});","define(\"a24-ember-staffshift-candidate-availability/templates/components/day-view\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"b251YqQ9\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objBookedShiftData\\\"],\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"center-heading\\\"],[8],[0,\\\"\\\\n        Availability\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[1,[26,\\\"day-overview\\\",null,[[\\\"sDayMonthYear\\\",\\\"arrData\\\",\\\"bLoading\\\",\\\"arrActions\\\"],[[22,[\\\"sHeader\\\"]],[22,[\\\"objAvailData\\\"]],[22,[\\\"bAvailabilityLoading\\\"]],[22,[\\\"arrAvailabilityActions\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bBookingLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[20,\\\"loading-component\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"arrBookedData\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"center-heading\\\"],[8],[0,\\\"\\\\n                Assignments\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"arrBookedData\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[1,[26,\\\"availability-card\\\",null,[[\\\"arrData\\\",\\\"sImageUrl\\\",\\\"sHeader\\\",\\\"sLetter\\\",\\\"sSubHeader\\\",\\\"sShiftId\\\"],[[21,2,[\\\"arrData\\\"]],[21,2,[\\\"sAvatarUrl\\\"]],[21,2,[\\\"sHeader\\\"]],[21,2,[\\\"sLetter\\\"]],[21,2,[\\\"sSubHeader\\\"]],[21,2,[\\\"sShiftId\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"bLoading\\\",\\\"onPopupResponsiveDismiss\\\",\\\"bDismissible\\\"],[[22,[\\\"bEditMode\\\"]],false,[22,[\\\"bEditPopupLoading\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupEditCancel\\\"],null],false]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[\\\"Availability\\\",\\\"padding-double popup-header-gray\\\",false,[21,1,[]],[22,[\\\"_objSpecialAddPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"bEditMode\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-left-double padding-right-double padding-top-double\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"availability-shift-editor\\\",null,[[\\\"objData\\\",\\\"onShiftClick\\\"],[[22,[\\\"objEditData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onShiftClick\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupEditCancel\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onEditPopupConfirm\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"save\\\"],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowUnsavedData\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupUnsavedConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"unsavedData\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-candidate-availability/templates/components/day-view.hbs\" } });\n});","define(\"a24-ember-staffshift-candidate-availability/templates/components/icon-label\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"X1iMnmyr\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"i\\\"],[10,\\\"class\\\",\\\"material-icons align-middle un-selectable-text-pointer-allowed\\\"],[8],[1,[20,\\\"sIcon\\\"],false],[9],[0,\\\"\\\\n\\\"],[4,\\\"unless\\\",[[22,[\\\"bIconOnly\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"align-middle un-selectable-text-pointer-allowed\\\"],[8],[1,[20,\\\"sText\\\"],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-candidate-availability/templates/components/icon-label.hbs\" } });\n});","define(\"a24-ember-staffshift-candidate-availability/templates/components/main-availability-page\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"6HKiR7f8\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"bIsDayView\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bIsCandidateContext\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"day-view\\\",null,[[\\\"objAvailabilityService\\\",\\\"objBookedShiftsService\\\",\\\"sDate\\\",\\\"onLoadingStateChange\\\"],[[22,[\\\"objAvailabilityService\\\"]],[22,[\\\"objBookedShiftsService\\\"]],[22,[\\\"sDateStringFormat\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onLoadingStateChange\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"agency-day-view\\\",null,[[\\\"objAvailabilityService\\\",\\\"objBookedShiftsService\\\",\\\"objEmailRestService\\\",\\\"sDate\\\",\\\"arrNumbers\\\",\\\"onLoadingStateChange\\\"],[[22,[\\\"objAvailabilityService\\\"]],[22,[\\\"objBookedShiftsService\\\"]],[22,[\\\"objEmailRestService\\\"]],[22,[\\\"sDateStringFormat\\\"]],[22,[\\\"arrNumbers\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onLoadingStateChange\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"month-view\\\",null,[[\\\"objAvailabilityService\\\",\\\"sDate\\\",\\\"bShowBulkUpdatePopup\\\",\\\"onEditStateChange\\\",\\\"onLoadingStateChange\\\",\\\"onDayClick\\\",\\\"onCalendarLoaded\\\"],[[22,[\\\"objAvailabilityService\\\"]],[22,[\\\"sDateStringFormat\\\"]],[22,[\\\"_bShowBulkUpdatePopup\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onEditStateChange\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onLoadingStateChange\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onDayClick\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onCalendarLoaded\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-candidate-availability/templates/components/main-availability-page.hbs\" } });\n});","define(\"a24-ember-staffshift-candidate-availability/templates/components/month-view\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"wTQFMxYU\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"calendar-card\\\",null,[[\\\"sDayComponent\\\",\\\"objMonthDays\\\",\\\"objPrevMonthDays\\\",\\\"objNextMonthDays\\\",\\\"objMonthTwoDays\\\",\\\"objMonthThreeDays\\\",\\\"arrActions\\\",\\\"iMonth\\\",\\\"iYear\\\",\\\"bLoading\\\",\\\"onDayAction\\\",\\\"bShowPreview\\\"],[\\\"day-availability\\\",[22,[\\\"_objMonthDays\\\"]],[22,[\\\"_objPrevMonthDays\\\"]],[22,[\\\"_objNextMonthDays\\\"]],[22,[\\\"_objMonthTwoDays\\\"]],[22,[\\\"_objMonthThreeDays\\\"]],[22,[\\\"arrActions\\\"]],[22,[\\\"iMonth\\\"]],[22,[\\\"iYear\\\"]],[22,[\\\"bCalendarLoading\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onDayAction\\\"],null],[22,[\\\"bShowPreview\\\"]]]]],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowUnsavedData\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupUnsavedConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"unsavedData\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[1,[26,\\\"bulk-availability-update-popup\\\",null,[[\\\"bShowPopup\\\",\\\"iNumberOfMonths\\\",\\\"iMonth\\\",\\\"iYear\\\",\\\"bPopupLoading\\\",\\\"onPopupCloseAction\\\",\\\"onPreview\\\"],[[22,[\\\"bShowBulkUpdatePopup\\\"]],3,[22,[\\\"iMonth\\\"]],[22,[\\\"iYear\\\"]],[22,[\\\"bBulkUpdateLoading\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupClose\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPreview\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"back\\\"],null],[22,[\\\"_bShowAvailabilityWarning\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupWarningConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"availabilityUpdateWarning\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-candidate-availability/templates/components/month-view.hbs\" } });\n});","define(\"a24-ember-staffshift-candidate-availability/templates/components/shift-confirmation-popup\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"cEeDanyW\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objParentScroller\\\"],\\\"statements\\\":[[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"bDismissible\\\",\\\"onPopupResponsiveDismiss\\\"],[[22,[\\\"bShowPopup\\\"]],[22,[\\\"_bPopupLoading\\\"]],false,false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupCancel\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"class\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[[26,\\\"lookup-string\\\",[\\\"shiftConfirmation\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],\\\"padding-double grey lighten-3\\\",[21,1,[]],[22,[\\\"_objSpecialPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"bShowPopup\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-double\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text-area\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"bStaticHeader\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"messageContent\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],\\\"content\\\",1,true,true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onErrorMessageSetAction\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"preview-label\\\"],[8],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"messagePreview\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"preview-box\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"chat-message-preview\\\"],[8],[0,\\\"\\\\n                            \\\"],[1,[26,\\\"lookup-string\\\",[\\\"shiftConfirmationDetails\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],false],[0,\\\" \\\"],[1,[20,\\\"sShiftDetails\\\"],false],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal padding-left-normal font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"a24RequiredFieldsMarked\\\"],null],false],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupCancel\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupConfirm\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"send\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowUnsavedData\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupUnsavedConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"unsavedData\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[\\\"\\\",[22,[\\\"_bShowSentMessagePopup\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupCancel\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"notificationSendMessage\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-candidate-availability/templates/components/shift-confirmation-popup.hbs\" } });\n});","define(\"a24-ember-staffshift-candidate-availability/templates/components/time-range-selector\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"GqmPOdhu\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"display-inline-block\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"calendar-navigation\\\",null,[[\\\"bTextDisabled\\\",\\\"bBackDisabled\\\",\\\"bForwardDisabled\\\",\\\"navBtnClick\\\",\\\"navGoBack\\\",\\\"navGoForward\\\"],[[22,[\\\"objData\\\",\\\"bTextDisabled\\\"]],[22,[\\\"objData\\\",\\\"bBackDisabled\\\"]],[22,[\\\"objData\\\",\\\"bForwardDisabled\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onToday\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onBackAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onNextAction\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bShowDropdown\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"dropdown display-inline-block\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"button\\\"],[11,\\\"class\\\",[27,[\\\"btn btn-flat dropdown-toggle \\\",[26,\\\"if\\\",[[22,[\\\"bIsViewDropDownDisabled\\\"]],\\\"disabled\\\"],null]]]],[10,\\\"data-toggle\\\",\\\"dropdown\\\"],[10,\\\"aria-haspopup\\\",\\\"true\\\"],[10,\\\"aria-expanded\\\",\\\"false\\\"],[8],[1,[20,\\\"sView\\\"],false],[9],[0,\\\"\\\\n\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"dropdown-menu dropdown-primary dropdown-menu-right\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"a\\\"],[11,\\\"class\\\",[27,[\\\"dropdown-item \\\",[26,\\\"if\\\",[[26,\\\"equals\\\",[[22,[\\\"sView\\\"]],\\\"Day\\\"],null],\\\"selected\\\"],null]]]],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"changeView\\\",\\\"Day\\\"],null],null],[8],[0,\\\"Day\\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"a\\\"],[11,\\\"class\\\",[27,[\\\"dropdown-item \\\",[26,\\\"if\\\",[[26,\\\"equals\\\",[[22,[\\\"sView\\\"]],\\\"Month\\\"],null],\\\"selected\\\"],null]]]],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"changeView\\\",\\\"Month\\\"],null],null],[8],[0,\\\"Month\\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"bShowBulkUpdateButton\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"display-inline-block bulk-update-button\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button-blue waves-effect waves-light\\\"],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onBulkUpdateAction\\\"],null],null],[8],[1,[26,\\\"lookup-string\\\",[\\\"bulkUpdate\\\",[22,[\\\"_objAvailabilityStrings\\\"]]],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-candidate-availability/templates/components/time-range-selector.hbs\" } });\n});","define(\"a24-ember-staffshift-core/components/card-datagrid-custom-filter-ward\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-staffshift-core/templates/components/card-datagrid-custom-filter-ward\"], function (exports, _didRenderChangesMixin, _inputFormElement, _cardDatagridCustomFilterWard) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _cardDatagridCustomFilterWard.default,\n        objHeaderItem: null,\n\n        _objSitePromise: null,\n        _objWardPromise: null,\n        _funcGetSiteSuggestions: null,\n        _bWardsLoading: false,\n        _bShowWards: false,\n        _objSSCoreStringsService: Ember.inject.service(\"a24-strings-staffshift-core\"),\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n            var funcGetSiteSuggestions = function funcGetSiteSuggestions(sSearchVal, funcCallback) {\n                var objQuery = {\n                    sSiteName: {\n                        mValue: sSearchVal,\n                        bLike: true,\n                        bEncode: true\n                    },\n                    bAgencyLinked: {\n                        mValue: true\n                    },\n                    sortBy: {\n                        mValue: \"sSiteName\"\n                    },\n                    items_per_page: {\n                        mValue: 10\n                    }\n                };\n\n                _this.get(\"objHeaderItem.objFilterSiteService\").getSites(_this, \"_objSitePromise\", objQuery, function (arrData) {\n                    if (a24Core.isEmpty(arrData)) {\n                        arrData = [];\n                    }\n\n                    var arrFormatted = [];\n                    for (var i = 0; i < arrData.length; i++) {\n                        var objDataItem = arrData[i];\n                        var sLabel = objDataItem.sOrganisationName + \": \" + objDataItem.sSiteName;\n                        objDataItem.sDisplayName = sLabel;\n\n                        arrFormatted.push(objDataItem);\n                    }\n\n                    funcCallback(arrFormatted);\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                    // Call the callback with empty\n                    funcCallback([]);\n                }));\n            };\n            this.set(\"_funcGetSiteSuggestions\", funcGetSiteSuggestions);\n\n            this.set(\"objHeaderItem._objFilterWardsSelected\", null);\n            this.set(\"objHeaderItem._objFilterWardsDropdown\", []);\n\n            this._observeAllValues();\n        },\n\n        _observeAllValues: Ember.observer(\"objHeaderItem._objFilterSite\", \"objHeaderItem._arrFilterWard\", function () {\n            if (!a24Core.isEmpty(this.get(\"objChildren.site\")) && a24Core.isEmpty(this.get(\"objHeaderItem._objFilterSite\"))) {\n                this.get(\"objChildren.site\").clear();\n            }\n            if (a24Core.isEmpty(this.get(\"objHeaderItem._arrFilterWard\")) && !a24Core.isEmpty(this.get(\"objHeaderItem._objFilterWardsSelected\"))) {\n                this.set(\"objHeaderItem._objFilterWardsSelected\", null);\n            }\n\n            Ember.run.once(this, \"_setupFilterForEdit\");\n            Ember.run.once(this, \"_setFlags\");\n        }),\n\n        onInputValueChanged: function onInputValueChanged(arrPathToInputMixin) {\n            var _this2 = this;\n\n            var sLookup = arrPathToInputMixin.join(\".\");\n\n            if (sLookup === \"objChildren.site\") {\n                var objSite = this.get(sLookup + \".mValue\");\n\n                if (a24Core.isEmpty(objSite)) {\n                    this.set(\"objHeaderItem._objFilterSite\", null);\n                    this.set(\"objHeaderItem._arrFilterWard\", null);\n                    this.set(\"_bShowWards\", false);\n                } else {\n                    this.set(\"objHeaderItem._objFilterSite\", objSite);\n\n                    this.set(\"_bWardsLoading\", true);\n                    this.set(\"_bShowWards\", true);\n                    this.set(\"objHeaderItem._objFilterWardsSelected\", null), this.set(\"objHeaderItem._objFilterWardsDropdown\", []);\n\n                    var objQuery = {\n                        agency_linked: {\n                            mValue: true\n                        },\n                        sortBy: {\n                            mValue: \"sWardName\"\n                        },\n                        items_per_page: {\n                            mValue: 1000\n                        }\n                    };\n\n                    this.get(\"objHeaderItem.objFilterWardService\").getWards(this, \"_objWardPromise\", objSite.sOrganisationId, objSite.sSiteId, objQuery, function (arrData) {\n                        if (a24Core.isEmpty(arrData)) {\n                            arrData = [];\n                        }\n\n                        _this2.set(\"objHeaderItem._objFilterWardsDropdown\", arrData);\n                        if (!a24Core.isEmpty(_this2.get(\"objHeaderItem._arrFilterWard\"))) {\n                            _this2.set(\"objHeaderItem._objFilterWardsSelected\", Ember.copy(_this2.get(\"objHeaderItem._arrFilterWard\"), true));\n                        }\n                        _this2.set(\"_bWardsLoading\", false);\n                    }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                        // Call the callback with empty\n                        _this2.set(\"objHeaderItem._objFilterWardsSelected\", null), _this2.set(\"objHeaderItem._objFilterWardsDropdown\", []);\n                        _this2.set(\"_bWardsLoading\", false);\n                    }));\n                }\n            } else if (sLookup === \"objChildren.ward\") {\n                if (!this.get(\"_bWardsLoading\")) {\n                    var objWard = this.get(sLookup + \".mValue\");\n\n                    if (a24Core.isEmpty(objWard)) {\n                        this.set(\"objHeaderItem._arrFilterWard\", null);\n                    } else {\n                        this.set(\"objHeaderItem._arrFilterWard\", objWard);\n                    }\n                }\n            }\n        },\n\n        _setupFilterForEdit: function _setupFilterForEdit() {\n            var _this3 = this;\n\n            Ember.run.next(function () {\n                Ember.run.schedule(\"afterRender\", function () {\n                    if (!a24Core.isEmpty(_this3.get(\"objHeaderItem._objFilterSite\")) && a24Core.isEmpty(_this3.get(\"objChildren.site.mValue\"))) {\n                        _this3.get(\"objChildren.site\").setValueFromOutside(Ember.copy(_this3.get(\"objHeaderItem._objFilterSite\"), true));\n                    }\n\n                    //Other field values set after api call\n                });\n            });\n        },\n\n        _setFlags: function _setFlags() {\n            this.customFilterDisplayAddButtonEvent(!a24Core.isEmpty(this.get(\"objHeaderItem._objFilterSite\")) && !a24Core.isEmpty(this.get(\"objHeaderItem._arrFilterWard\")));\n        }\n    });\n});","define(\"a24-ember-staffshift-core/components/chatter-box\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/chatter-box\", \"a24-ember-staffshift-core/mixins/chat-boxes-component-base\"], function (exports, _didRenderChangesMixin, _chatterBox, _chatBoxesComponentBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _chatBoxesComponentBase.default, {\n        layout: _chatterBox.default,\n        classNames: [\"a24-chat-box\"],\n\n        objChatBoxService: Ember.inject.service(\"chatter-box-service\"),\n        _objHelpBoxService: Ember.inject.service(\"help-box-service\"),\n\n        sChatBoxUrl: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\").sChatboxUrl;\n        }),\n\n        _handleMessages: function _handleMessages(objData) {\n            this._super(objData);\n            if (objData.type === \"help_box_data\") {\n                this.get(\"_objHelpBoxService\").postMessage(objData.data);\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-core/components/chatter-right-container\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/chatter-right-container\"], function (exports, _didRenderChangesMixin, _chatterRightContainer) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _chatterRightContainer.default,\n        classNames: [\"a24-chatter-right-container\"],\n        objData: null,\n        _momentHelper: null\n    });\n});","define(\"a24-ember-staffshift-core/components/chatter-right-conversation-component\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/chatter-right-conversation-component\"], function (exports, _didRenderChangesMixin, _chatterRightConversationComponent) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _chatterRightConversationComponent.default,\n        sConversationUserId: null,\n        objChatConversationRestService: null,\n        classNames: [\"a24-chatter-right-conversation-component\"],\n        _arrReloadActions: null,\n        _bServerError: false,\n        _bArchivedTabActive: false,\n        _objSSCoreStrings: Ember.inject.service(\"a24-strings-staffshift-core\"),\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.set(\"_arrReloadActions\", [{\n                sTitle: this.get(\"_objSSCoreStrings\").getString(\"reload\"),\n                sIcon: \"refresh\",\n                executeCardAction: function executeCardAction() {\n                    _this.set(\"_bServerError\", false);\n                }\n            }]);\n        },\n\n        actions: {\n            onClickCurrent: function onClickCurrent() {\n                this.set(\"_bArchivedTabActive\", false);\n            },\n\n            onClickArchived: function onClickArchived() {\n                this.set(\"_bArchivedTabActive\", true);\n            },\n\n            onServerError: function onServerError() {\n                this.set(\"_bServerError\", true);\n            },\n\n            onGoToConversation: function onGoToConversation(objConversation) {\n                if (this.get(\"onGoToConversation\")) {\n                    this.get(\"onGoToConversation\")(objConversation);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-core/components/chatter-right-header\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/chatter-right-header\"], function (exports, _didRenderChangesMixin, _chatterRightHeader) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _chatterRightHeader.default,\n        classNames: [\"a24-chatter-right-header\", \"position-relative\"],\n        objData: null,\n\n        _objConstantsSSCore: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n\n        _sFirstLetter: \"\",\n        _sAvatarIcon: \"\",\n\n        _ENV: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        didReceiveAttrs: function didReceiveAttrs() {\n            this._super.apply(this, arguments);\n            this._setFirstLetterAndAvatar();\n        },\n\n\n        _sName: Ember.computed(\"objData.{ss.user,chatInbox.friendlyName}\", function () {\n            if (!a24Core.isEmpty(this.get(\"objData.ss.user\"))) {\n                return this.get(\"objData.ss.user.first_name\") + \" \" + this.get(\"objData.ss.user.last_name\");\n            } else {\n                return this.get(\"objData.chatInbox.friendlyName\");\n            }\n        }).readOnly(),\n\n        _sIcon: Ember.computed(\"objData.chatInbox.medium\", function () {\n            if (this.get(\"objData.chatInbox.medium\") === \"sms\") {\n                return \"phone\";\n            } else if (this.get(\"objData.chatInbox.medium\") === \"whatsapp\") {\n                return null;\n            } else {\n                return \"person\";\n            }\n        }).readOnly(),\n\n        _sIconFa: Ember.computed(\"objData.chatInbox.medium\", function () {\n            if (this.get(\"objData.chatInbox.medium\") === \"whatsapp\") {\n                return \"fa-whatsapp\";\n            }\n        }).readOnly(),\n\n        _sDotColor: Ember.computed(\"objData.chatInbox.online\", function () {\n            if (typeof this.get(\"objData.chatInbox.online\") === \"undefined\") {\n                return \"display-none\";\n            } else {\n                return this.get(\"objData.chatInbox.online\") ? \"success-color\" : \"grey\";\n            }\n        }).readOnly(),\n\n        _sAvatar: Ember.computed(\"objData.ss.user.avatar\", function () {\n            return a24.getUserContextAvatarUrl(this.get(\"_ENV.sTriageBaseUrl\"), this.get(\"_objConstantsSSCore\"), this.get(\"objData.ss.user.avatar\"));\n        }).readOnly(),\n\n        _sStatus: Ember.computed(\"objData.ember_candidate.current_status.status\", function () {\n            if (a24Core.isEmpty(this.get(\"objData.ember_candidate\"))) {\n                return null;\n            } else if (a24Core.isEmpty(this.get(\"objData.ember_candidate.current_status\"))) {\n                return \"...\";\n            } else if (a24Core.isEmpty(this.get(\"objData.ember_candidate.current_status.status\"))) {\n                return \"-\";\n            } else {\n                return this.get(\"objData.ember_candidate.current_status.status\");\n            }\n        }).readOnly(),\n\n        _setFirstLetterAndAvatar: function _setFirstLetterAndAvatar() {\n            this.set(\"_sFirstLetter\", \"\");\n            this.set(\"_sAvatarIcon\", \"\");\n            if (!a24Core.isEmpty(this.get(\"objData.ss.user.first_name\"))) {\n                this.set(\"_sFirstLetter\", this.get(\"objData.ss.user.first_name\")[0].toUpperCase());\n            } else if (!a24Core.isEmpty(this.get(\"objData.chatInbox.friendlyName\"))) {\n                if (!this.get(\"objData.hasUser\")) {\n                    if (this.get(\"objData.chatInbox.medium\") === \"sms\") {\n                        this.set(\"_sAvatarIcon\", \"phone\");\n                        this.set(\"_sAvatarIconFa\", null);\n                    } else if (this.get(\"objData.chatInbox.medium\") === \"whatsapp\") {\n                        this.set(\"_sAvatarIcon\", null);\n                        this.set(\"_sAvatarIconFa\", \"fa-whatsapp\");\n                    } else if (this.get(\"objData.chatInbox.friendlyName\")[0] === \"+\") {\n                        this.set(\"_sAvatarIcon\", \"phone\");\n                        this.set(\"_sAvatarIconFa\", null);\n                    } else {\n                        this.set(\"_sFirstLetter\", this.get(\"objData.chatInbox.friendlyName\")[0].toUpperCase());\n                    }\n                } else {\n                    this.set(\"_sFirstLetter\", this.get(\"objData.chatInbox.friendlyName\")[0].toUpperCase());\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-core/components/chatter-right-session-data\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/chatter-right-session-data\"], function (exports, _didRenderChangesMixin, _chatterRightSessionData) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _chatterRightSessionData.default,\n        objData: null,\n\n        classNames: [\"a24-chatter-right-session-data\"],\n\n        _ENV: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n        _objLookupStrings: Ember.inject.service(\"a24-strings\"),\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objSSCoreStrings: Ember.inject.service(\"a24-strings-staffshift-core\"),\n        _objSSCoreEnums: Ember.inject.service(\"a24-enums-staffshift-core\"),\n        _objSSCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _momentHelper: null,\n\n        _objRefreshTimer: null,\n        _objRefreshTimerDelay: 30000,\n\n        _arrSessionData: null,\n        _arrTechData: null,\n        _arrUserData: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            this._observeData();\n        },\n\n        willDestroyElement: function willDestroyElement() {\n            Ember.run.cancel(this.get(\"_objRefreshTimer\"));\n            this.set(\"_objRefreshTimer\", null);\n\n            this._super.apply(this, arguments);\n        },\n        _observeData: Ember.observer(\"objData\", function () {\n            var _this = this;\n\n            Ember.run.cancel(this.get(\"_objRefreshTimer\"));\n            this.set(\"_objRefreshTimer\", null);\n\n            if (a24Core.isEmpty(this.get(\"objData\"))) {\n                this.set(\"_arrSessionData\", null);\n                this.set(\"_arrTechData\", null);\n                this.set(\"_arrUserData\", null);\n                return;\n            }\n            //This is so that we can mock it in test and still have the date helper work normally\n            if (a24Core.isEmpty(this.get(\"_momentHelper\"))) {\n                this.set(\"_momentHelper\", momentHelper);\n            }\n\n            var objDateInstance = a24DateManager.createDate(this.get(\"_objUserSession.objContextDetails.sTimezone\"));\n            var sTimeOnPage = null;\n            if (this.get(\"objData.chatInbox.online\")) {\n                sTimeOnPage = this.get(\"_momentHelper\").getTimeFromNow(this.get(\"objData.ss.current_page.visited_date\"), a24Constants.DATE_FORMAT_REST_FORMAT, true);\n            }\n\n            var sTimezoneOffset = \"\";\n            var iOffsetHours = this.get(\"objData.ss.browser.timezone_offset\");\n            if (!a24Core.isEmpty(iOffsetHours)) {\n                var sPolarity = \"+\";\n                if (iOffsetHours < 0) {\n                    iOffsetHours = Math.abs(iOffsetHours);\n                    sPolarity = \"-\";\n                }\n                var mHours = Math.floor(iOffsetHours / 60);\n                var mMinutes = Math.floor(iOffsetHours - mHours * 60);\n\n                if (mHours < 10) {\n                    mHours = \"0\" + mHours;\n                }\n                if (mMinutes < 10) {\n                    mMinutes = \"0\" + mMinutes;\n                }\n\n                sTimezoneOffset = \"UTC\" + sPolarity + mHours + \":\" + mMinutes;\n            }\n\n            var iEllapsedSeconds = this.get(\"_momentHelper\").stringDiffInUnits(this.get(\"_momentHelper\").getCurrentDateString(a24Constants.DATE_FORMAT_REST_FORMAT), a24Constants.DATE_FORMAT_REST_FORMAT, this.get(\"objData.ss.browser.timestamp\"), a24Constants.DATE_FORMAT_REST_FORMAT, this.get(\"_objLibConstants.MOMENT_TIME_SECONDS\"));\n\n            var sBrowserLangs = \"\";\n            if (!a24Core.isEmpty(this.get(\"objData.ss.browser.lang\"))) {\n                sBrowserLangs = this.get(\"objData.ss.browser.lang\").join(\", \");\n            }\n\n            //CURRENT PAGE SECTION\n\n            var arrCurrentPage = [];\n\n            arrCurrentPage.push({\n                sLabel: this.get(\"_objSSCoreStrings\").getString(\"timeOnPage\"),\n                sValue: sTimeOnPage,\n                bText: true\n            });\n            if (a24Core.isEmpty(this.get(\"objData.ss.source_details\")) && this.get(\"_objUserSession.objGeneralDetails.sResourceType\") === this.get(\"_objSSCoreConstants.CONTEXT_SYSTEM_ADMIN_LOWER_HYPHEN\")) {\n                arrCurrentPage.push({\n                    sLabel: this.get(\"_objSSCoreStrings\").getString(\"url\"),\n                    sValue: this.get(\"_objSSCoreStrings\").getHTMLTokenString(\"tooltipOnString\", this.get(\"objData.ss.current_page.full_url\"), a24Core.getSafeStringLink(Ember, this.get(\"_objSSCoreStrings\").getString(\"clickHereWithIcon\"), this.get(\"objData.ss.current_page.full_url\"), \"externalLink\")),\n                    bText: true\n                });\n            }\n            arrCurrentPage.push({\n                sLabel: this.get(\"_objSSCoreStrings\").getString(\"page\"),\n                sValue: this.get(\"objData.ss.current_page.page_name\"),\n                bText: true\n            });\n\n            if (this.get(\"_objUserSession.objGeneralDetails.sResourceType\") === this.get(\"_objSSCoreConstants.CONTEXT_SYSTEM_ADMIN_LOWER_HYPHEN\")) {\n                var objRouteParams = this.get(\"objData.ss.current_page.page_route_params\");\n                for (var sProp in objRouteParams) {\n                    if (Object.prototype.hasOwnProperty.call(objRouteParams, sProp)) {\n                        var sLabel = sProp.replace(/_/g, \" \");\n                        sLabel = sLabel.charAt(0).toUpperCase() + sLabel.slice(1);\n                        arrCurrentPage.push({\n                            sLabel: sLabel,\n                            sValue: objRouteParams[sProp],\n                            bText: true\n                        });\n                    }\n                }\n            }\n\n            //CONTEXT SECTION\n\n            var arrContext = [];\n\n            arrContext.push({\n                sLabel: this.get(\"_objSSCoreStrings\").getString(\"type\"),\n                sValue: this.get(\"_objSSCoreEnums\").getFrontendValue(\"context\", this.get(\"objData.ss.context.resource\")),\n                bText: true\n            });\n            arrContext.push({\n                sLabel: this.get(\"_objLookupStrings\").getString(\"name\"),\n                sValue: this.get(\"objData.ss.context.name\"),\n                bText: true\n            });\n            arrContext.push({\n                sLabel: this.get(\"_objSSCoreStrings\").getString(\"timezone\"),\n                sValue: this.get(\"objData.ss.context.timezone\"),\n                bText: true\n            });\n            arrContext.push({\n                sLabel: this.get(\"_objSSCoreStrings\").getString(\"locale\"),\n                sValue: this.get(\"objData.ss.context.locale\"),\n                bText: true\n            });\n\n            //OPERATING SYSTEM SECTION\n\n            var arrOPSystem = [];\n\n            arrOPSystem.push({\n                sLabel: this.get(\"_objSSCoreStrings\").getString(\"os\"),\n                sValue: this.get(\"objData.ss.browser.os.name\"),\n                bText: true\n            });\n            arrOPSystem.push({\n                sLabel: this.get(\"_objSSCoreStrings\").getString(\"version\"),\n                sValue: this.get(\"objData.ss.browser.os.version\"),\n                bText: true\n            });\n            var sScreenWidth = \"\";\n            if (!a24Core.isEmpty(this.get(\"objData.ss.browser.screen.width\")) && !a24Core.isEmpty(this.get(\"objData.ss.browser.screen.height\"))) {\n                sScreenWidth = this.get(\"objData.ss.browser.screen.width\") + \" x \" + this.get(\"objData.ss.browser.screen.height\");\n            }\n            arrOPSystem.push({\n                sLabel: this.get(\"_objSSCoreStrings\").getString(\"screen\"),\n                sValue: sScreenWidth,\n                bText: true\n            });\n\n            //BROWSER SECTION\n\n            var arrBrowser = [];\n\n            arrBrowser.push({\n                sLabel: this.get(\"_objLookupStrings\").getString(\"name\"),\n                sValue: this.get(\"objData.ss.browser.browser.name\"),\n                bText: true\n            });\n            arrBrowser.push({\n                sLabel: this.get(\"_objSSCoreStrings\").getString(\"version\"),\n                sValue: this.get(\"objData.ss.browser.browser.version\"),\n                bText: true\n            });\n            var sBrowserWidth = \"\";\n            if (!a24Core.isEmpty(this.get(\"objData.ss.browser.viewport.width\")) && !a24Core.isEmpty(this.get(\"objData.ss.browser.viewport.height\"))) {\n                sBrowserWidth = this.get(\"objData.ss.browser.viewport.width\") + \" x \" + this.get(\"objData.ss.browser.viewport.height\");\n            }\n            arrBrowser.push({\n                sLabel: this.get(\"_objSSCoreStrings\").getString(\"screen\"),\n                sValue: sBrowserWidth,\n                bText: true\n            });\n            arrBrowser.push({\n                sLabel: this.get(\"_objSSCoreStrings\").getString(\"timezone\"),\n                sValue: this.get(\"objData.ss.browser.timezone\"),\n                bText: true\n            });\n            arrBrowser.push({\n                sLabel: this.get(\"_objSSCoreStrings\").getString(\"timezoneOffset\"),\n                sValue: sTimezoneOffset,\n                bText: true\n            });\n\n            var sCurrentTime = \"\";\n            //Here we want to ignore the timezone on the date so that we display the time as is on the date, hence you\n            //would see the time the user is seeing on his PC\n            if (!a24Core.isEmpty(this.get(\"objData.ss.browser.timestamp\"))) {\n                objDateInstance.setDateFromRest(this.get(\"objData.ss.browser.timestamp\"));\n                objDateInstance.addTimeToDate(this.get(\"_objLibConstants.MOMENT_TIME_SECONDS\"), iEllapsedSeconds);\n                sCurrentTime = objDateInstance.getDateTimeFormat();\n            }\n\n            arrBrowser.push({\n                sLabel: this.get(\"_objSSCoreStrings\").getString(\"currentTime\"),\n                sValue: sCurrentTime,\n                bText: true\n            });\n            arrBrowser.push({\n                sLabel: this.get(\"_objSSCoreStrings\").getString(\"locale\"),\n                sValue: sBrowserLangs,\n                bText: true\n            });\n\n            var sSupportsVideoCalls = \"\";\n\n            if (!a24Core.isEmpty(this.get(\"objData.ss.features.supports_video_calls\"))) {\n                sSupportsVideoCalls = this.get(\"objData.ss.features.supports_video_calls\") ? this.get(\"_objLookupStrings\").getString(\"yes\") : this.get(\"_objLookupStrings\").getString(\"no\");\n            }\n\n            arrBrowser.push({\n                sLabel: this.get(\"_objSSCoreStrings\").getString(\"supportsVideoCalls\"),\n                sValue: sSupportsVideoCalls,\n                bText: true\n            });\n\n            //USER SECTION\n\n            var arrUser = [];\n\n            arrUser.push({\n                sLabel: this.get(\"_objSSCoreStrings\").getString(\"username\"),\n                sValue: this.get(\"objData.ss.user.username\"),\n                bText: true\n            });\n            arrUser.push({\n                sLabel: this.get(\"_objSSCoreStrings\").getString(\"timezone\"),\n                sValue: this.get(\"objData.ss.user.timezone\"),\n                bText: true\n            });\n\n            var sEmailVerifiedDate = null;\n            if (!a24Core.isEmpty(this.get(\"objData.ss.user.email_verified_date\"))) {\n                objDateInstance.setDateFromRestAllowTimeAlter(this.get(\"objData.ss.user.email_verified_date\"));\n                sEmailVerifiedDate = objDateInstance.getDateTimeFormat();\n            }\n            arrUser.push({\n                sLabel: this.get(\"_objSSCoreStrings\").getString(\"emailVerified\"),\n                sValue: sEmailVerifiedDate,\n                bText: true\n            });\n\n            var sLastEmailVerifySentDate = null;\n            if (!a24Core.isEmpty(this.get(\"objData.ss.user.email_last_verify_email_sent_date\"))) {\n                objDateInstance.setDateFromRestAllowTimeAlter(this.get(\"objData.ss.user.email_last_verify_email_sent_date\"));\n                sLastEmailVerifySentDate = objDateInstance.getDateTimeFormat();\n            }\n            arrUser.push({\n                sLabel: this.get(\"_objSSCoreStrings\").getString(\"lastEmailVerifySent\"),\n                sValue: sLastEmailVerifySentDate,\n                bText: true\n            });\n            arrUser.push({\n                sLabel: this.get(\"_objSSCoreStrings\").getString(\"locale\"),\n                sValue: this.get(\"objData.ss.user.locale\"),\n                bText: true\n            });\n\n            //Set all the data on the view edit section\n            var arrSessionData = [];\n            var arrTechData = [];\n            var arrUserData = [];\n            arrSessionData.push({\n                sSubHeader: this.get(\"_objSSCoreStrings\").getHTMLTokenString(\"iconAndText\", \"find_in_page\", this.get(\"_objSSCoreStrings\").getString(\"currentPage\")),\n                sSubHeaderClass: \"a24-chatter-right-session-data-sub-header\",\n                arrItems: arrCurrentPage\n            });\n\n            arrSessionData.push({\n                sSubHeader: this.get(\"_objSSCoreStrings\").getHTMLTokenString(\"iconAndText\", \"account_box\", this.get(\"_objSSCoreStrings\").getString(\"context\")),\n                sSubHeaderClass: \"a24-chatter-right-session-data-sub-header\",\n                arrItems: arrContext\n            });\n\n            arrTechData.push({\n                sSubHeader: this.get(\"_objSSCoreStrings\").getHTMLTokenString(\"iconAndText\", \"desktop_windows\", this.get(\"_objSSCoreStrings\").getString(\"device\")),\n                sSubHeaderClass: \"a24-chatter-right-session-data-sub-header\",\n                arrItems: arrOPSystem\n            });\n\n            arrTechData.push({\n                sSubHeader: this.get(\"_objSSCoreStrings\").getHTMLTokenString(\"iconAndText\", \"open_in_browser\", this.get(\"_objSSCoreStrings\").getString(\"browser\")),\n                sSubHeaderClass: \"a24-chatter-right-session-data-sub-header\",\n                arrItems: arrBrowser\n            });\n\n            arrUserData.push({\n                sSubHeader: this.get(\"_objSSCoreStrings\").getHTMLTokenString(\"iconAndText\", \"account_circle\", this.get(\"_objSSCoreStrings\").getString(\"user\")),\n                sSubHeaderClass: \"a24-chatter-right-session-data-sub-header\",\n                arrItems: arrUser\n            });\n\n            this.set(\"_arrSessionData\", arrSessionData);\n            this.set(\"_arrTechData\", arrTechData);\n            this.set(\"_arrUserData\", arrUserData);\n\n            this._scheduleRefresh(function () {\n                _this._observeData();\n            });\n        }),\n\n        _scheduleRefresh: function _scheduleRefresh(funcCallback) {\n            if (this.get(\"_ENV\").environment === \"test\") {\n                return;\n            }\n            this.set(\"_objRefreshTimer\", Ember.run.later(this, function () {\n                funcCallback();\n            }, this.get(\"_objRefreshTimerDelay\")));\n        }\n\n    });\n});","define(\"a24-ember-staffshift-core/components/coming-soon-card\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/coming-soon-card\"], function (exports, _didRenderChangesMixin, _comingSoonCard) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _comingSoonCard.default,\n        bLoading: false\n    });\n});","define(\"a24-ember-staffshift-core/components/context-switcher-component\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/context-switcher-component\"], function (exports, _didRenderChangesMixin, _contextSwitcherComponent) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _contextSwitcherComponent.default,\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        arrContexts: null,\n        objSelectedContext: null, // This will store the context that the user is currently logged in\n        arrSwitchableContexts: null, // This will store all the other contexts that the user has assigned\n        _sAppContext: Ember.computed.readOnly(\"env.sAppContext\"),\n        _objUserContextService: Ember.inject.service(\"rest-user-context\"),\n        _objUserSessionService: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objConstantsSSCore: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objConstantsEmberLib: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _sSelectedResourceType: null,\n        _bLoading: false,\n        init: function init() {\n            this._super.apply(this, arguments);\n            // If array properties are null, we set them as an empty array\n            if (this.get(\"arrContexts\") == null) {\n                this.set(\"arrContexts\", []);\n            }\n            if (this.get(\"arrSwitchableContexts\") == null) {\n                this.set(\"arrSwitchableContexts\", []);\n            }\n            this.set(\"_sSelectedResourceType\", this.get(\"_objUserSessionService.objGeneralDetails.sResourceType\"));\n            this.retrieveUserContexts();\n            this.set(\"_bLoading\", this.get(\"_objNavigation.bPageLoading\"));\n        },\n        retrieveUserContexts: function retrieveUserContexts() {\n            var _this = this;\n\n            var sUserId = this.get(\"_objUserSessionService\").objAuthData.context.sUserId;\n\n            this.get(\"_objUserContextService\").getList(this, sUserId, function (arrData) {\n                // At least one context will be set\n                _this.set(\"arrContexts\", arrData);\n                _this.convertContextForDisplay();\n            });\n        },\n        onPageLoadingChange: Ember.observer(\"_objNavigation.bPageLoading\", function () {\n            this.set(\"_bLoading\", this.get(\"_objNavigation.bPageLoading\"));\n        }),\n        onResourceTypeChange: Ember.observer(\"_objUserSessionService.objGeneralDetails\", function () {\n\n            if (!a24Core.isEmpty(this.get(\"_objUserSessionService.objGeneralDetails\"))) {\n                // When switching between 2 of the same contexts, the init does not re-fire, so we do it manually\n                if (this.get(\"_sSelectedResourceType\") === this.get(\"_objUserSessionService.objGeneralDetails.sResourceType\")) {\n                    this.retrieveUserContexts();\n                }\n            }\n        }),\n        convertContextForDisplay: function convertContextForDisplay() {\n            // Get a list of contexts\n            var arrContexts = this.get(\"arrContexts\");\n\n            // Hold a temporary list of contexts that the user can switch to\n            var arrSwitchableContexts = [];\n\n            // Hold a temporary default context\n            var objDefaultContext = {};\n\n            // Iterate over the contexts that were retrieved\n            for (var i = 0; i < arrContexts.length; i++) {\n\n                // Get the current context\n                var objContext = arrContexts[i];\n\n                // Get the avatar url\n                var sAvatarUrl = a24.getUserContextAvatarUrl(this.get(\"env.sTriageBaseUrl\"), this.get(\"_objConstantsSSCore\"), objContext.sAvatarUrl);\n\n                // Build the new context object for display\n                var objRebuiltContext = {\n                    sDisplayLetter: objContext.sName.charAt(0).toUpperCase(),\n                    sDisplayName: objContext.sName,\n                    sAvatarUrl: sAvatarUrl,\n                    sType: objContext.objReferenceId.sResource,\n                    sId: objContext.id,\n                    sRefId: objContext.objReferenceId.mId\n                };\n\n                // Set this context as the default context if it is marked as default\n                if (objContext.bDefaultContext) {\n                    objDefaultContext = objRebuiltContext;\n                }\n\n                // If this context is the selected one\n                if (objContext.bSelectedContext) {\n                    // Set as the selected context\n                    this.set(\"objSelectedContext\", objRebuiltContext);\n                } else {\n                    // Else, add to the array of switchable contexts\n                    arrSwitchableContexts.pushObject(objRebuiltContext);\n                }\n            }\n\n            if (a24Core.isEmpty(this.get(\"objSelectedContext\"))) {\n                // If no selected context could be found\n                // Loop over the switchable contexts\n                var arrNewSwitchableContexts = [];\n                for (var j = 0; j < arrSwitchableContexts.length; j++) {\n                    // If you do not match the selected context\n                    if (objDefaultContext.sRefId !== arrSwitchableContexts[j].sRefId) {\n                        // add to new list\n                        arrNewSwitchableContexts.pushObject(arrSwitchableContexts[j]);\n                    }\n                }\n                // Set the new list as the switchable list\n                arrSwitchableContexts = arrNewSwitchableContexts;\n                // Set the default context as the selected context\n                this.set(\"objSelectedContext\", objDefaultContext);\n            }\n\n            // Sort the array alphabetically\n            if (!a24Core.isEmpty(arrSwitchableContexts)) {\n                arrSwitchableContexts.sort(function (objA, objB) {\n                    if (objA.sDisplayName.toLowerCase() < objB.sDisplayName.toLowerCase()) {\n                        return -1;\n                    } else if (objA.sDisplayName.toLowerCase() > objB.sDisplayName.toLowerCase()) {\n                        return 1;\n                    } else {\n                        return 0;\n                    }\n                });\n            }\n\n            this.set(\"arrSwitchableContexts\", arrSwitchableContexts);\n        },\n        actions: {\n            contextSwitch: function contextSwitch(objContext) {\n                var _this2 = this;\n\n                if (!a24Core.isEmpty(this.get(\"closeDropdown\"))) {\n                    this.get(\"closeDropdown\")();\n                }\n\n                if (objContext.sType === this.get(\"_objConstantsSSCore\").CONTEXT_AGENCY_GROUP) {\n                    // AGENCY GROUP\n                    var objParams = {};\n                    objParams[\"agency-group\"] = [objContext.sRefId];\n\n                    this.get(\"_objNavigation\").navigateOutsideContext(\"agency-group.welcome\", objParams, {}, false, !a24Core.isEmpty(this.get(\"_sAppContext\")));\n                } else if (objContext.sType === this.get(\"_objConstantsSSCore\").CONTEXT_CANDIDATE) {\n                    // CANDIDATE\n                    this.get(\"_objNavigation\").navigateOutsideContext(\"candidate.welcome\", {}, {}, false, !a24Core.isEmpty(this.get(\"_sAppContext\")));\n                } else {\n\n                    //Seems there is a loading order problem on gwt side when switching to gwt context from ember context\n                    //Gwt then loads correct context but think you are still in ember context. Thus context switcher on gwt\n                    //screen is wrong and further service calls fail. So for this reason we first switch/set the new\n                    //context on ember before going to gwt\n                    this.get(\"_objUserContextService\").setSelectedContext(this, objContext.sId, function () {\n                        // Navigate to another context in gwt using navigation service\n                        _this2.get(\"_objNavigation\").navigateToGWTContext(objContext.sRefId, true);\n                    });\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-core/components/conversation-list\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/conversation-list\"], function (exports, _didRenderChangesMixin, _conversationList) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _conversationList.default,\n        classNames: [\"a24-conversation-list\"],\n        bIsArchived: false,\n        objChatConversationRestService: null,\n        sConversationUserId: null,\n        _bLoading: false,\n        _iPage: 1,\n        _iPerPage: 3,\n        _iResultCount: 0,\n        _objQueryParams: null,\n        _objConversationPreview: null,\n        _objRestGetConversationProperty: null,\n        _arrDisplayConversations: null,\n        _objRestGetConversationsProperty: null,\n        _arrConversationPreviewPopupActions: null,\n        _objSpecialConversationPreviewPopupAction: null,\n        _bShowConversationPreviewPopup: false,\n        _bConversationPreviewPopupLoading: false,\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objSSCoreStrings: Ember.inject.service(\"a24-strings-staffshift-core\"),\n        _objConversationPreviewGeneratorService: Ember.inject.service(\"conversation-preview-generator\"),\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.set(\"_objSpecialConversationPreviewPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this.set(\"_bShowConversationPreviewPopup\", false);\n                }\n            });\n\n            this.set(\"_arrConversationPreviewPopupActions\", [{\n                sTitle: this.get(\"_objSSCoreStrings\").getString(\"openInNewTab\"),\n                sIcon: \"open_in_new\",\n                executeCardAction: function executeCardAction() {\n                    var objConversationPreview = _this.get(\"_objConversationPreview\");\n                    // Generate the Conversation html\n                    var sHtml = _this.get(\"_objConversationPreviewGeneratorService\").generateFullHtmlWithHTMLWrappingFromConversation(objConversationPreview);\n                    _this._openHtmlInNewWindow(sHtml);\n                }\n            }]);\n\n            this._getConversations();\n        },\n\n        _getConversations: function _getConversations(objQueryParams) {\n            var _this2 = this;\n\n            // Put the card in loading\n            this.set(\"_bLoading\", true);\n\n            if (a24Core.isEmpty(objQueryParams)) {\n                objQueryParams = {\n                    page: { mValue: this.get(\"_iPage\") },\n                    items_per_page: { mValue: this.get(\"_iPerPage\") }\n                };\n            }\n\n            if (a24Core.isEmpty(objQueryParams.created_at)) {\n                objQueryParams.created_at = {\n                    mValue: \"desc\",\n                    bSortBy: true\n                };\n            }\n\n            objQueryParams.status = {\n                mValue: this.get(\"bIsArchived\") ? \"closed\" : \"open\"\n            };\n\n            // Save the current query params for later use.\n            this.set(\"_objQueryParams\", Ember.copy(objQueryParams, true));\n\n            // Get Conversations\n            this.get(\"objChatConversationRestService\").getConversations(this, \"_objRestGetConversationsProperty\", this.get(\"sConversationUserId\"), function (arrData, sStatus, objXHR) {\n                if (!a24Core.isEmpty(arrData)) {\n                    _this2.set(\"_arrDisplayConversations\", _this2._prepareForDisplay(arrData));\n                } else {\n                    _this2.set(\"_arrDisplayConversations\", []);\n                }\n                _this2.set(\"_iResultCount\", a24RestCallHelper.getXResultCount(objXHR));\n\n                // Put the card out of loading\n                _this2.set(\"_bLoading\", false);\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode /*, sStatus, objErrorThrown, objError*/) {\n                if (sCode === \"500\" || sCode === \"502\" || sCode === \"503\" || sCode === \"504\") {\n                    if (!a24Core.isEmpty(_this2.get(\"onServerError\"))) {\n                        _this2.get(\"onServerError\")(sCode);\n                    }\n                } else {\n                    // Clear data\n                    _this2.set(\"_arrDisplayConversations\", []);\n                }\n\n                // Put the card out of loading\n                _this2.set(\"_bLoading\", false);\n            }), objQueryParams);\n        },\n\n        _goToConversation: function _goToConversation(objConversation) {\n            if (!a24Core.isEmpty(this.get(\"onGoToConversation\"))) {\n                this.get(\"onGoToConversation\")(objConversation);\n            }\n        },\n\n        _openConversationPreview: function _openConversationPreview(objConversation) {\n            var _this3 = this;\n\n            var funcSuccess = function funcSuccess(objData) {\n                Ember.set(objConversation, \"objStoredResponse\", objData);\n\n                _this3.set(\"_objConversationPreview\", objData);\n\n                // Take the popup out of loading\n                _this3.set(\"_bConversationPreviewPopupLoading\", false);\n            };\n\n            this.set(\"_bShowConversationPreviewPopup\", true);\n            this.set(\"_bConversationPreviewPopupLoading\", true);\n\n            // Use the stored response if it is set\n            var objStoredResponse = Ember.get(objConversation, \"objStoredResponse\");\n            if (!a24Core.isEmpty(objStoredResponse)) {\n                funcSuccess(objStoredResponse);\n                return;\n            }\n\n            this.get(\"objChatConversationRestService\").getConversation(this, \"_objRestGetConversationProperty\", this.get(\"sConversationUserId\"), objConversation._id, funcSuccess, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                _this3.set(\"_bShowConversationPreviewPopup\", false);\n                _this3.set(\"_bConversationPreviewPopupLoading\", false);\n\n                _this3.get(\"_objSnackbarService\").showSnackbarMessage(_this3.get(\"_objSSCoreStrings\").getString(\"failedToLoadConversationPreview\"));\n            }));\n        },\n\n        _openHtmlInNewWindow: function _openHtmlInNewWindow(sHtml) {\n            // Open the html in a new window\n            var objNewWindow = window.open();\n\n            if (objNewWindow !== null) {\n                objNewWindow.document.write(sHtml);\n                objNewWindow.document.close();\n                objNewWindow.focus();\n            }\n        },\n\n        _prepareForDisplay: function _prepareForDisplay(arrConversations) {\n            var _this4 = this;\n\n            var funcGotoConversation = function funcGotoConversation(objConversation) {\n                return function () {\n                    _this4._goToConversation(objConversation);\n                };\n            };\n\n            var funcOpenConversationPreview = function funcOpenConversationPreview(objConversation) {\n                return function () {\n                    _this4._openConversationPreview(objConversation);\n                };\n            };\n\n            return arrConversations.map(function (objConversation) {\n                var sTime = momentHelper.getTimeFromNow(objConversation.created_at, a24Constants.DATE_FORMAT_REST_FORMAT);\n\n                var arrActions = [];\n\n                if (!_this4.get(\"bIsArchived\") && _this4.get(\"objChatConversationRestService.sContext\") === objConversation.owner.resource_type) {\n                    arrActions.push({\n                        sTitle: _this4.get(\"_objSSCoreStrings\").getString(\"goToConversation\"),\n                        sIcon: \"view_list\",\n                        executeCardAction: funcGotoConversation(objConversation)\n                    });\n                }\n\n                if (_this4.get(\"bIsArchived\")) {\n                    arrActions.push({\n                        sTitle: _this4.get(\"_objSSCoreStrings\").getString(\"openConversationPreview\"),\n                        sIcon: \"open_in_browser\",\n                        executeCardAction: funcOpenConversationPreview(objConversation)\n                    });\n                }\n\n                return {\n                    sTime: sTime,\n                    sMessage: objConversation.first_message,\n                    arrActions: arrActions,\n                    objData: objConversation\n                };\n            });\n        },\n\n        actions: {\n            onClickConversation: function onClickConversation(objConversation) {\n                if (!a24Core.isEmpty(objConversation.arrActions[0])) {\n                    objConversation.arrActions[0].executeCardAction(objConversation.objData);\n                }\n            },\n\n            cardDatagridPagerEvent: function cardDatagridPagerEvent(objPageQuery) {\n                objPageQuery = Ember.copy(objPageQuery, true);\n\n                var objQueryParams = this.get(\"_objQueryParams\");\n                objQueryParams.page = objPageQuery.page;\n                objQueryParams.items_per_page = objPageQuery.per_page;\n\n                this._getConversations(objQueryParams);\n            },\n\n            onConversationPreviewPopupClose: function onConversationPreviewPopupClose() {\n                this.set(\"_bShowConversationPreviewPopup\", false);\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-core/components/conversation-preview-popup\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/conversation-preview-popup\"], function (exports, _didRenderChangesMixin, _conversationPreviewPopup) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _conversationPreviewPopup.default,\n        bShowPopup: null,\n        bPopupLoading: null,\n        onPopupCloseAction: null,\n        sSubjectId: null,\n        sConversationId: null,\n        objActivityData: null,\n        sLinkedEntityId: null,\n        objRestActivityConversation: null,\n        objRestChatConversation: null,\n        _objConversationPromise: null,\n\n        _objSSCoreStringsService: Ember.inject.service(\"a24-strings-staffshift-core\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objConversationPreviewGeneratorService: Ember.inject.service(\"conversation-preview-generator\"),\n        _objSpecialPopupAction: null,\n        _arrActions: null,\n\n        _objConversationPreviewCache: null,\n        _objConversationPreview: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"_objConversationPreviewCache\", {});\n        },\n        _onActivityDataChange: Ember.observer(\"objActivityData\", function () {\n            var objActivityData = this.get(\"objActivityData\");\n            this.conversationFromActivity(objActivityData.sSubjectId, objActivityData.sActivityId, objActivityData.sLinkedEntityId, objActivityData.sSubjectType);\n        }),\n        _onConversationIdChange: Ember.observer(\"sConversationId\", function () {\n            this._conversationFromConversationId(this.get(\"sConversationId\"));\n        }),\n        conversationFromActivity: function conversationFromActivity(sSubjectId, sActivityId, sLinkedEntityId, sSubjectType) {\n            var _this = this;\n\n            var funcSuccess = function funcSuccess(objData) {\n                _this.set(\"_objConversationPreviewCache.\" + sActivityId, objData);\n\n                // On success\n                _this.set(\"_objConversationPreview\", objData);\n                // Create an action that will open the conversation preview in a new tab\n                _this.set(\"_objSpecialPopupAction\", {\n                    sTitle: _this.get(\"_objStringsService\").getString(\"close\"),\n                    sIcon: \"close\",\n                    executeCardAction: function executeCardAction() {\n                        _this.get(\"onPopupCloseAction\")();\n                    }\n                });\n\n                if (objData.status !== \"open\") {\n                    _this.set(\"_arrActions\", [{\n                        sTitle: _this.get(\"_objSSCoreStringsService\").getString(\"openInNewTab\"),\n                        sIcon: \"open_in_new\",\n                        executeCardAction: function executeCardAction() {\n                            var _objConversationPreview = _this.get(\"_objConversationPreview\");\n                            // Generate the conversation html from details\n                            var sHtml = _this.get(\"_objConversationPreviewGeneratorService\").generateFullHtmlWithHTMLWrappingFromConversation(_objConversationPreview);\n                            _this.openHtmlInNewWindow(sHtml);\n                        }\n                    }]);\n                }\n\n                // Take the popup out of loading\n                _this.set(\"bPopupLoading\", false);\n            };\n\n            this.set(\"bPopupLoading\", true);\n\n            // Use the stored response if it is set\n            var objStoredConversationResponse = this.get(\"_objConversationPreviewCache.\" + sActivityId);\n            if (!a24Core.isEmpty(objStoredConversationResponse)) {\n                funcSuccess(objStoredConversationResponse);\n                return;\n            }\n\n            this.get(\"objRestActivityConversation\").getActivityConversation(this, \"_objActivityConversationPreviewPromise\", sSubjectId, sSubjectType, sActivityId, sLinkedEntityId, funcSuccess, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                _this.get(\"onPopupCloseAction\")();\n                _this.set(\"bPopupLoading\", false);\n\n                _this.get(\"_objSnackbarService\").showSnackbarMessage(_this.get(\"_objSSCoreStringsService\").getString(\"couldNotLoadConversationEmailPreview\"));\n            }));\n        },\n\n        _conversationFromConversationId: function _conversationFromConversationId(sConversationId) {\n            var _this2 = this;\n\n            var funcSuccess = function funcSuccess(objData) {\n                _this2.set(\"_objConversationPreviewCache.\" + sConversationId, objData);\n\n                // On success\n                _this2.set(\"_objConversationPreview\", objData);\n                // Create an action that will open the conversation preview in a new tab\n                _this2.set(\"_objSpecialPopupAction\", {\n                    sTitle: _this2.get(\"_objStringsService\").getString(\"close\"),\n                    sIcon: \"close\",\n                    executeCardAction: function executeCardAction() {\n                        _this2.get(\"onPopupCloseAction\")();\n                    }\n                });\n\n                if (objData.status !== \"open\") {\n                    _this2.set(\"_arrActions\", [{\n                        sTitle: _this2.get(\"_objSSCoreStringsService\").getString(\"openInNewTab\"),\n                        sIcon: \"open_in_new\",\n                        executeCardAction: function executeCardAction() {\n                            var _objConversationPreview = _this2.get(\"_objConversationPreview\");\n                            // Generate the conversation html from details\n                            var sHtml = _this2.get(\"_objConversationPreviewGeneratorService\").generateFullHtmlWithHTMLWrappingFromConversation(_objConversationPreview);\n                            _this2.openHtmlInNewWindow(sHtml);\n                        }\n                    }]);\n                }\n\n                // Take the popup out of loading\n                _this2.set(\"bPopupLoading\", false);\n            };\n\n            this.set(\"bPopupLoading\", true);\n\n            // Use the stored response if it is set\n            var objStoredConversationResponse = this.get(\"_objConversationPreviewCache.\" + sConversationId);\n            if (!a24Core.isEmpty(objStoredConversationResponse)) {\n                funcSuccess(objStoredConversationResponse);\n                return;\n            }\n\n            this.get(\"objRestChatConversation\").getConversation(this, \"_objConversationPromise\", sConversationId, funcSuccess, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                _this2.get(\"onPopupCloseAction\")();\n                _this2.set(\"bPopupLoading\", false);\n\n                _this2.get(\"_objSnackbarService\").showSnackbarMessage(_this2.get(\"_objSSCoreStringsService\").getString(\"couldNotLoadConversationEmailPreview\"));\n            }));\n        },\n        openHtmlInNewWindow: function openHtmlInNewWindow(sHtml) {\n            // Open the html in a new window\n            var objNewWindow = window.open();\n\n            if (objNewWindow !== null) {\n                objNewWindow.document.write(sHtml);\n                objNewWindow.document.close();\n                objNewWindow.focus();\n            }\n        },\n        actions: {\n            onPopupClose: function onPopupClose() {\n                this.get(\"onPopupCloseAction\")();\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-core/components/conversation-preview\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/conversation-preview\"], function (exports, _didRenderChangesMixin, _conversationPreview) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _conversationPreview.default,\n        classNames: [\"conversation-preview\"],\n        objConversation: null,\n\n        _sPreviewStyleString: null,\n        _sPreviewString: null,\n        _objConversationPreviewGeneratorService: Ember.inject.service(\"conversation-preview-generator\"),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"_sPreviewStyleString\", this.get(\"_objConversationPreviewGeneratorService\").generateFullHtmlForStyleSheet());\n        },\n\n        didReceiveAttrs: function didReceiveAttrs() {\n            this._super.apply(this, arguments);\n            // Re-generate the value when it changes\n            if (!a24Core.isEmpty(this.get(\"objConversation\"))) {\n                this.set(\"_sPreviewString\", this.get(\"_objConversationPreviewGeneratorService\").generateFullHtmlFromConversation(this.get(\"objConversation\")));\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-core/components/email-preview-popup\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/email-preview-popup\"], function (exports, _didRenderChangesMixin, _emailPreviewPopup) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _emailPreviewPopup.default,\n        bShowPopup: null,\n        bPopupLoading: null,\n        onPopupCloseAction: null,\n        objRestActivityEmailComm: null,\n        objActivityData: null,\n\n        _objSSCoreStringsService: Ember.inject.service(\"a24-strings-staffshift-core\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objEmailPreviewGeneratorService: Ember.inject.service(\"email-preview-generator\"),\n        _arrActions: null,\n\n        _objEmailPreview: null,\n        _objSpecialPopupAction: null,\n        _objEmailPreviewCache: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"_objEmailPreviewCache\", {});\n        },\n        _onActivityDataChange: Ember.observer(\"objActivityData\", function () {\n            var objActivityData = this.get(\"objActivityData\");\n            this.attachmentFromActivity(objActivityData.sSubjectId, objActivityData.sActivityId, objActivityData.sLinkedEntityId, objActivityData.sSubjectType);\n        }),\n        attachmentFromActivity: function attachmentFromActivity(sSubjectId, sActivityId, sLinkedEntityId, sSubjectType) {\n            var _this = this;\n\n            var funcSuccess = function funcSuccess(objData) {\n                _this.set(\"_objEmailPreviewCache.\" + sActivityId, objData);\n\n                // On success\n                _this.set(\"_objEmailPreview\", {\n                    sSubject: objData.subject,\n                    objFrom: objData.sender,\n                    objTo: objData.to_recipient,\n                    arrCC: objData.cc_recipients,\n                    arrBCC: objData.bcc_recipients,\n                    objReplyTo: objData.reply_to,\n                    sHTML: objData.body_html,\n                    sDeliveryStatus: objData.delivery_status,\n                    sDeliveryFailureReason: objData.delivery_failure_reason\n                });\n\n                // Create an action that will open the email in a new tab\n                _this.set(\"_objSpecialPopupAction\", {\n                    sTitle: _this.get(\"_objStringsService\").getString(\"close\"),\n                    sIcon: \"close\",\n                    executeCardAction: function executeCardAction() {\n                        _this.get(\"onPopupCloseAction\")();\n                    }\n                });\n                _this.set(\"_arrActions\", [{\n                    sTitle: _this.get(\"_objSSCoreStringsService\").getString(\"openInNewTab\"),\n                    sIcon: \"open_in_new\",\n                    executeCardAction: function executeCardAction() {\n                        var objEmailPreview = _this.get(\"_objEmailPreview\");\n                        // Generate the email html from details\n                        var sHtml = _this.get(\"_objEmailPreviewGeneratorService\").generateFullHtmlWithHTMLWrappingFromEmailObject(objEmailPreview);\n                        _this.openHtmlInNewWindow(sHtml);\n                    }\n                }]);\n\n                // Take the popup out of loading\n                _this.set(\"bPopupLoading\", false);\n            };\n\n            this.set(\"bPopupLoading\", true);\n\n            // Use the stored response if it is set\n            var objStoredResponse = this.get(\"_objEmailPreviewCache.\" + sActivityId);\n            //get(objActivity, \"_objStoredResponse\");\n            if (!a24Core.isEmpty(objStoredResponse)) {\n                funcSuccess(objStoredResponse);\n                return;\n            }\n\n            this.get(\"objRestActivityEmailComm\").getEmailCommMessage(this, \"_objActivityEmailCommPromise\", sSubjectId, sSubjectType, sActivityId, sLinkedEntityId, funcSuccess, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                _this.get(\"onPopupCloseAction\")();\n                _this.set(\"bPopupLoading\", false);\n\n                _this.get(\"_objSnackbarService\").showSnackbarMessage(_this.get(\"_objSSCoreStringsService\").getString(\"couldNotLoadEmailPreview\"));\n            }));\n        },\n        openHtmlInNewWindow: function openHtmlInNewWindow(sHtml) {\n            // Open the html in a new window\n            var objNewWindow = window.open();\n\n            if (objNewWindow !== null) {\n                objNewWindow.document.write(sHtml);\n                objNewWindow.document.close();\n                objNewWindow.focus();\n            }\n        },\n        actions: {\n            onPopupClose: function onPopupClose() {\n                this.get(\"onPopupCloseAction\")();\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-core/components/email-preview\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/email-preview\"], function (exports, _didRenderChangesMixin, _emailPreview) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _emailPreview.default,\n        classNames: [\"email-preview\"],\n        objEmail: null,\n\n        _objAjax: $.ajax,\n        _sPreviewString: null,\n        _objEmailPreviewGeneratorService: Ember.inject.service(\"email-preview-generator\"),\n        _bInitDone: false,\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            if (\"srcdoc\" in document.createElement(\"iframe\")) {\n                this.set(\"_bInitDone\", true);\n\n                // Render the initial value\n                this.onValueChange();\n            } else {\n                this.get(\"_objAjax\")({\n                    url: this.get(\"_objEmailPreviewGeneratorService._sSrcDocPolyfilJs\"),\n                    dataType: \"script\",\n                    cache: true\n                }).always(function () {\n                    _this.set(\"_bInitDone\", true);\n                    // Render the initial value\n                    _this.onValueChange();\n                });\n            }\n        },\n        onValueChange: Ember.observer(\"objEmail\", function () {\n            if (this.get(\"_bInitDone\")) {\n                // Re-render the value when it changes\n                this.set(\"_sPreviewString\", this.get(\"_objEmailPreviewGeneratorService\").generateFullHtmlFromEmailObject(this.get(\"objEmail\")));\n            }\n        })\n    });\n});","define(\"a24-ember-staffshift-core/components/help-box\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/help-box\", \"a24-ember-staffshift-core/mixins/chat-boxes-component-base\"], function (exports, _didRenderChangesMixin, _helpBox, _chatBoxesComponentBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _chatBoxesComponentBase.default, {\n        layout: _helpBox.default,\n        classNames: [\"a24-chat-box\"],\n\n        objChatBoxService: Ember.inject.service(\"help-box-service\"),\n        _objChatterBoxService: Ember.inject.service(\"chatter-box-service\"),\n\n        sChatBoxUrl: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\").sHelpBoxUrl;\n        }),\n\n        _bHidden: Ember.computed(\"objChatBoxService.bHidden\", function () {\n            return this.get(\"objChatBoxService.bHidden\");\n        }),\n\n        _handleMessages: function _handleMessages(objData) {\n            this._super(objData);\n            if (objData.type === \"chatterbox_data\") {\n                this.get(\"_objChatterBoxService\").postMessage(objData.data);\n            } else if (objData.type === \"app_ready\") {\n                this._postData({\n                    type: \"set_layout\",\n                    data: {\n                        layout: \"popup\"\n                    }\n                });\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-core/components/login-component\", [\"exports\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/login-component\"], function (exports, _inputFormElement, _didRenderChangesMixin, _loginComponent) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _loginComponent.default,\n        classNames: [\"position-relative\"],\n        bMobileView: false,\n        objSpecialLoginPopupAction: null,\n        _bLoading: true,\n        _sUsernameEmail: null,\n        _bShowForgotPasswordPopup: false,\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objLoginService: Ember.inject.service(\"rest-login\"),\n        _objStaffshiftCoreStringsService: Ember.inject.service(\"a24-strings-staffshift-core\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objSpecialResetPasswordPopupAction: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n            this.set(\"objChildConfig\", {\n                \"objChildren._sUsername\": function objChildren_sUsername(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                    a24Validation.addMinLength(objMixin, 3);\n                },\n                \"objChildren._sPassword\": function objChildren_sPassword(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                }\n            });\n\n            this.set(\"_bLoading\", false);\n        },\n        keyPress: function keyPress(objEvent) {\n            if (objEvent.keyCode === 13 && !this.get(\"_bLoading\") && !this.get(\"_bShowForgotPasswordPopup\")) {\n                this._doLogin();\n            }\n        },\n        _doLogin: function _doLogin() {\n            var _this = this;\n\n            if (!this.doFullValidation()) {\n                this.set(\"_bLoading\", true);\n                var objData = this.getPlainFormValueObject();\n                this.get(\"_objLoginService\").post(this, objData._sUsername.trim(), objData._sPassword, objData._bRememberMe, function (objData) {\n                    // Check if login was success\n                    if (objData.code === 1) {\n                        // Send login success to parent\n                        if (!a24Core.isEmpty(_this.get(\"onLoginSuccess\"))) {\n                            _this.get(\"onLoginSuccess\")(objData);\n                        }\n                    } else {\n                        _this.setResponseError([\"_sUsername\"], _this.get(\"_objStaffshiftCoreStringsService\").getString(\"incorrectLoginDetails\"), true, true);\n                        _this.setResponseError([\"_sPassword\"], _this.get(\"_objStaffshiftCoreStringsService\").getString(\"incorrectLoginDetails\"), true, true);\n                        _this.set(\"_bLoading\", false);\n                    }\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\"], function () {\n                    // Show failure message\n                    _this.setResponseError([\"_sUsername\"], _this.get(\"_objStringsService\").getString(\"serverError\"), true, true);\n                    _this.setResponseError([\"_sPassword\"], _this.get(\"_objStringsService\").getString(\"serverError\"), true, true);\n                    _this.set(\"_bLoading\", false);\n                }));\n            }\n        },\n        actions: {\n            doLogin: function doLogin() {\n                this._doLogin();\n            },\n            showForgotPasswordPopup: function showForgotPasswordPopup() {\n                this.set(\"_bShowForgotPasswordPopup\", true);\n                // populate the username\\email field\n                var objData = this.getPlainFormValueObject();\n                if (!a24Core.isEmpty(objData._sUsername)) {\n                    this.set(\"_sUsernameEmail\", objData._sUsername.trim());\n                }\n            },\n            hideForgotPasswordPopup: function hideForgotPasswordPopup() {\n                this.set(\"_bShowForgotPasswordPopup\", false);\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-core/components/logout-component\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/logout-component\"], function (exports, _didRenderChangesMixin, _logoutComponent) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _logoutComponent.default,\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objIntercom: Ember.inject.service(\"intercom\"),\n        _objLogoutService: Ember.inject.service(\"rest-logout\"),\n        _objLogoutServiceKey: null,\n        actions: {\n            doLogout: function doLogout() {\n                var _this = this;\n\n                this.get(\"_objLogoutService\").doLogout(this, \"_objLogoutServiceKey\", function (objResponse) {\n                    _this.get(\"_objIntercom\").shutdown();\n                    if (objResponse.success === true) {\n                        _this.get(\"_objNavigation\").navigateToGWTLogin(false);\n                    } else {\n                        _this.get(\"_objNavigation\").navigateOutsideContext(\"404\");\n                    }\n                });\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-core/components/navigation-bar-component\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/navigation-bar-component\"], function (exports, _didRenderChangesMixin, _navigationBarComponent) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _navigationBarComponent.default,\n\n        arrNavbarItems: null, // The navbar items to display\n        sAvatarUrl: null, // The Avatar url to display\n        sFirstNameInitial: null, // The initial of the user to display if the avatar is null\n        sContextSwitcherDropdownContentId: \"contextSwitcherDropdown\",\n        sBaseClass: \"white\",\n\n        _objTitleBarService: Ember.inject.service(\"title-bar-service\"), // The title bar service\n        _objConstantsEmberLib: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objNavBarService: Ember.inject.service(\"navigation-bar-component-service\"),\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n\n        _sIFrameUrl: null,\n        _bDisplayReactFrame: false,\n        _objPostIframeData: null,\n        _sContextId: null,\n        _bHasContextDetails: false,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            this.set(\"arrNavbarItems\", []);\n        },\n\n        _hasContextDetails: Ember.observer(\"_objUserSession.objContextDetails\", function () {\n            this.set(\"_bHasContextDetails\", false);\n            if (!a24Core.isEmpty(this.get(\"_objUserSession.objContextDetails\"))) {\n                this.set(\"_bHasContextDetails\", true);\n            }\n            this._triggerPostIframe();\n        }).on('init'),\n\n        _contextChange: Ember.observer(\"_objUserSession.objAuthData.context.objReferenceId.mId\", function () {\n            if (this.get(\"_objUserSession.objAuthData.context.objReferenceId.mId\") !== this.get(\"_sContextId\")) {\n                this.set(\"_bDisplayReactFrame\", false);\n                this.set(\"_objPostIframeData\", null);\n                this.set(\"_sIFrameUrl\", null);\n                this.set(\"_sContextId\", this.get(\"_objUserSession.objAuthData.context.objReferenceId.mId\"));\n\n                this._triggerPostIframe();\n            }\n        }).on('init'),\n\n        _triggerPostIframe: function _triggerPostIframe() {\n            var _this = this;\n\n            if (!this.get(\"_bHasContextDetails\")) {\n                return;\n            }\n            var sContext = this.get(\"_objUserSession.objAuthData.context.objReferenceId.sResource\");\n            if (sContext === this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY\") || sContext === this.get(\"_objStaffshiftCoreConstants.CONTEXT_AGENCY_GROUP\")) {\n                Ember.run.next(function () {\n                    if (a24Core.isEmpty(_this)) {\n                        return;\n                    }\n                    Ember.run.schedule(\"afterRender\", function () {\n\n                        var objEnv = Ember.getOwner(_this).resolveRegistration(\"config:environment\");\n                        if (a24Core.isEmpty(_this.get(\"_sIFrameUrl\"))) {\n                            _this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n                        }\n                        _this.set(\"_objPostIframeData\", {\n                            type: \"trigger_route\",\n                            data: {\n                                route: \"general/globalSearch\"\n                            }\n                        });\n                        _this.set(\"_bDisplayReactFrame\", true);\n                    });\n                });\n            }\n        },\n\n        _buildTitleBarItems: Ember.observer(\"_objTitleBarService.sPageTitle\", function () {\n            // Set the new navbar items when the page title changes\n            this.set(\"arrNavbarItems\", []);\n            // Push only the page title as a navbar item\n            this.get(\"arrNavbarItems\").push(this.get(\"_objTitleBarService.sPageTitle\"));\n        }).on(\"init\"),\n        _buildTitleBarAvatar: Ember.observer(\"_objTitleBarService.sUserAvatar\", function () {\n            // Set the new avatar url if the user avatar changes\n            this.set(\"sAvatarUrl\", this.get(\"_objTitleBarService.sUserAvatar\"));\n        }).on(\"init\"),\n        _buildTitleInitial: Ember.observer(\"_objTitleBarService.sUserNameInitial\", function () {\n            // Set the new avatar alternative letter if the user initial changes\n            this.set(\"sFirstNameInitial\", this.get(\"_objTitleBarService.sUserNameInitial\"));\n        }).on(\"init\")\n    });\n});","define(\"a24-ember-staffshift-core/components/notification-preview-popup\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/notification-preview-popup\"], function (exports, _didRenderChangesMixin, _notificationPreviewPopup) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _notificationPreviewPopup.default,\n        bShowPopup: false,\n        bPopupLoading: false,\n        objSpecialPopupAction: null,\n        onPopupCloseAction: null,\n        arrActions: null,\n        bIsEmail: null,\n        objNotificationPreview: null,\n        _objSSCoreStringsService: Ember.inject.service(\"a24-strings-staffshift-core\"),\n\n        actions: {\n            onPopupClose: function onPopupClose() {\n                this.get(\"onPopupCloseAction\")();\n            }\n\n        }\n    });\n});","define(\"a24-ember-staffshift-core/components/notification-preview\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/notification-preview\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _didRenderChangesMixin, _notificationPreview, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _notificationPreview.default,\n        classNames: [\"conversation-preview\"],\n        objNotification: null,\n\n        _sPreviewStyleString: null,\n        _sPreviewString: null,\n        _bNumbersLibLoaded: false,\n        _objSSCoreStrings: Ember.inject.service(\"a24-strings-staffshift-core\"),\n        _objNotificationPreviewGeneratorService: Ember.inject.service(\"notification-preview-generator\"),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"_sPreviewStyleString\", this.get(\"_objNotificationPreviewGeneratorService\").generateFullHtmlForStyleSheet());\n        },\n\n        didReceiveAttrs: function didReceiveAttrs() {\n            this._super.apply(this, arguments);\n            // Re-generate the value when it changes\n            if (!a24Core.isEmpty(this.get(\"objNotification\"))) {\n                var sSenderFormatted = \"\";\n                var sRecipientFormatted = \"\";\n                if (this.get(\"_bNumbersLibLoaded\")) {\n                    var sSender = \"\";\n                    var sRecipient = \"\";\n                    var arrTokens = this.get(\"objNotification.collected_tokens\");\n                    for (var i = 0; i < arrTokens.length; i++) {\n                        switch (arrTokens[i].token) {\n                            case \"recipient_mobile_number\":\n                                sRecipient = arrTokens[i].value;\n                                break;\n                            case \"sender_phone_number\":\n                                sSender = arrTokens[i].value;\n                                break;\n                            default:\n                                break;\n                        }\n                    }\n                    sSenderFormatted = this.get(\"objChildren.number\").formatNumberForDisplay(sSender);\n                    sRecipientFormatted = this.get(\"objChildren.number\").formatNumberForDisplay(sRecipient);\n                }\n                var objNotification = this.get(\"objNotification\");\n\n                objNotification.sender_phone_number_formatted = sSenderFormatted;\n                objNotification.recipient_mobile_number_formatted = sRecipientFormatted;\n\n                this.set(\"_sPreviewString\", this.get(\"_objNotificationPreviewGeneratorService\").generateFullHtmlFromNotification(objNotification));\n            } else {\n                this.set(\"_sPreviewString\", Ember.String.htmlSafe(\"<div class=\\\"padding-double\\\">\\n                    \" + this.get(\"_objSSCoreStrings\").getString(\"failedToGenerateNotificationPreview\") + \"\\n                </div>\"));\n            }\n        },\n        actions: {\n            onInputFormTelNumberInitDone: function onInputFormTelNumberInitDone() {\n                // NOTE: This specific case we are able to use the unformatted so we are not going to block the display\n                // if the input has not loaded. So in short we are displaying the formatted number and if there aint\n                // any formatted number we use the unformatted number\n                this.set(\"_bNumbersLibLoaded\", true);\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-core/components/notification-sent-popup\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/notification-sent-popup\"], function (exports, _didRenderChangesMixin, _notificationSentPopup) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _notificationSentPopup.default,\n        bShowPopup: null,\n        bPopupLoading: null,\n        onPopupCloseAction: null,\n        objActivityData: null,\n        objRestActivityNotification: null,\n\n        _bShowNotifcationPreviewPopup: null,\n        _bNotificationPreviewPopupLoading: null,\n        _objNotificationPreviewSpecialPopupAction: null,\n        _objSpecialPopupAction: null,\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objSSCoreStrings: Ember.inject.service(\"a24-strings-staffshift-core\"),\n        _objStaffshiftCoreEnums: Ember.inject.service(\"a24-enums-staffshift-core\"),\n        _objCurrentNotificationSentCache: null,\n        _bIsEmail: null,\n        _objNotificationPreview: null,\n        _arrNotificationPreviewPopupActions: null,\n        _objEmailPreviewGeneratorService: Ember.inject.service(\"email-preview-generator\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _arrNotificationsSentResponse: null,\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n            // Create an action that will open the conversation preview in a new tab\n            this.set(\"_objSpecialPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this.get(\"onPopupCloseAction\")();\n                }\n            });\n\n            // Create an action that will close the preview popup\n            this.set(\"_objNotificationPreviewSpecialPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this.set(\"_bShowNotifcationPreviewPopup\", false);\n                }\n            });\n        },\n        _onActivityDataChange: Ember.observer(\"objActivityData\", function () {\n            var objActivityData = this.get(\"objActivityData\");\n            this.set(\"sSubjectId\", objActivityData.sSubjectId);\n            this.set(\"sSubjectType\", objActivityData.sSubjectType);\n            this.notifcationFromActivity(objActivityData.sSubjectId, objActivityData.sActivityId, objActivityData.sLinkedEntityId, objActivityData.sSubjectType);\n        }),\n        notifcationFromActivity: function notifcationFromActivity(sSubjectId, sActivityId, sLinkedEntityId, sSubjectType) {\n            var _this2 = this;\n\n            var objThis = this;\n\n            // show notifications sent and delivery status\n            this.set(\"bPopupLoading\", true);\n            this.set(\"_bOptOut\", false);\n            this.get(\"objRestActivityNotification\").getActivityNotification(this, \"_objActivityNotificationPreviewPromise\", sSubjectId, sSubjectType, sActivityId, sLinkedEntityId, function (objResponse) {\n                if (!a24Core.isEmpty(objResponse) && !a24Core.isEmpty(objResponse.notifications_sent)) {\n                    // reset cache\n                    _this2.set(\"_objCurrentNotificationSentCache\", {});\n                    // save notifications sent and delivery status\n                    var arrNotificationsSent = [];\n\n                    var _loop = function _loop(i) {\n                        var objData = {};\n                        var sMedium = objResponse.notifications_sent[i].medium;\n                        var sMediumType = sMedium;\n                        var objMediumTypeEnum = _this2.get(\"_objStaffshiftCoreEnums\").getFrontendValue(\"mediumType\", sMedium, null, true);\n                        var sStatus = _this2.get(\"_objStaffshiftCoreEnums\").getFrontendValue(\"notificationStatus\", objResponse.notifications_sent[i].status);\n                        var sIcon = \"texture\";\n                        var sIconFa = null;\n                        var sIconSvg = null;\n                        if (!a24Core.isEmpty(objMediumTypeEnum)) {\n                            sMediumType = objMediumTypeEnum.sLabel;\n                            sIcon = objMediumTypeEnum.icon;\n                            sIconFa = objMediumTypeEnum.icon_fa;\n                            sIconSvg = objMediumTypeEnum.icon_svg;\n                        }\n                        if (a24Core.isEmpty(sStatus)) {\n                            sStatus = objResponse.notifications_sent[i].status;\n                        }\n\n                        var sNotificationSentId = objResponse.notifications_sent[i].id;\n\n                        objData.activity_id = sActivityId;\n                        objData.medium = sMediumType;\n                        objData.backend_medium = sMedium;\n                        objData.status = sStatus;\n                        objData.icon = sIcon;\n                        objData.icon_fa = sIconFa;\n                        objData.icon_svg = sIconSvg;\n                        objData.entity_id = sLinkedEntityId;\n                        objData.notifications_sent_id = sNotificationSentId;\n                        objData.arrActions = [];\n                        objData.arrActions.push({\n                            sTitle: objThis.get(\"_objSSCoreStrings\").getString(\"viewNotificationPreview\"),\n                            sIcon: \"visibility\",\n                            executeCardAction: function executeCardAction() {\n                                objThis.activityNotificationFromMedium(sActivityId, sLinkedEntityId, sMedium, sNotificationSentId);\n                            }\n                        });\n                        arrNotificationsSent.push(objData);\n                    };\n\n                    for (var i = 0; i < objResponse.notifications_sent.length; i++) {\n                        _loop(i);\n                    }\n\n                    _this2.set(\"_arrNotificationsSentResponse\", arrNotificationsSent);\n\n                    _this2.set(\"bPopupLoading\", false);\n                } else {\n                    if (objResponse.status === _this2.get(\"_objStaffshiftCoreEnums.notificationStatus.OPT_OUT.backend\")) {\n                        _this2.set(\"_bOptOut\", true);\n                        _this2.set(\"bPopupLoading\", false);\n                        _this2.set(\"_arrNotificationsSentResponse\", []);\n                    } else {\n                        if (!a24Core.isEmpty(_this2.get(\"onPopupCloseAction\"))) {\n                            _this2.get(\"onPopupCloseAction\")();\n                        }\n                        _this2.set(\"bPopupLoading\", false);\n\n                        _this2.get(\"_objSnackbarService\").showSnackbarMessage(_this2.get(\"_objSSCoreStrings\").getString(\"couldNotLoadNotificationSentInformation\"));\n                    }\n                }\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                if (!a24Core.isEmpty(_this2.get(\"onPopupCloseAction\"))) {\n                    _this2.get(\"onPopupCloseAction\")();\n                }\n                _this2.set(\"bPopupLoading\", false);\n\n                _this2.get(\"_objSnackbarService\").showSnackbarMessage(_this2.get(\"_objSSCoreStrings\").getString(\"couldNotLoadNotificationSentInformation\"));\n            }));\n        },\n\n        activityNotificationFromMedium: function activityNotificationFromMedium(sActivityId, sLinkedEntityId, sMedium, sNotificationSentId) {\n            var _this3 = this;\n\n            var funcSuccess = function funcSuccess(objData) {\n                _this3.set(\"_objCurrentNotificationSentCache.\" + sNotificationSentId, objData);\n                // On success\n                if (sMedium === _this3.get(\"_objStaffshiftCoreEnums\").getBackendValue(\"mediumType\", _this3.get(\"_objStringsService\").getString(\"email\"))) {\n                    _this3.set(\"_bIsEmail\", true);\n\n                    var sSubject = \"\";\n                    var objSender = null;\n                    var objRecipient = null;\n                    var objReplyTo = null;\n                    var sBody = \"\";\n                    var sStatus = \"\";\n                    var sStatusReason = \"\";\n                    if (!a24Core.isEmpty(objData.data)) {\n                        if (!a24Core.isEmpty(objData.data.subject)) {\n                            sSubject = objData.data.subject;\n                        }\n                        if (!a24Core.isEmpty(objData.data.sender)) {\n                            objSender = objData.data.sender;\n                        }\n                        if (!a24Core.isEmpty(objData.data.to_recipient)) {\n                            objRecipient = objData.data.to_recipient;\n                        }\n                        if (!a24Core.isEmpty(objData.data.reply_to)) {\n                            objReplyTo = objData.data.reply_to;\n                        }\n                        if (!a24Core.isEmpty(objData.data.body_html)) {\n                            sBody = objData.data.body_html;\n                        }\n                        if (!a24Core.isEmpty(objData.status_reason)) {\n                            sStatusReason = objData.status_reason;\n                        }\n                    }\n                    if (!a24Core.isEmpty(objData.status)) {\n                        if (objData.status === _this3.get(\"_objStaffshiftCoreEnums.notificationStatus.OPT_OUT.backend\")) {\n                            sBody = _this3.get(\"_objSSCoreStrings\").getString(\"failedToGenerateNotificationPreviewOptOut\");\n                        }\n                        sStatus = _this3.get(\"_objStaffshiftCoreEnums\").getFrontendValue(\"notificationStatus\", objData.status);\n                    }\n\n                    _this3.set(\"_objNotificationPreview\", {\n                        sSubject: sSubject,\n                        objFrom: objSender,\n                        objTo: objRecipient,\n                        objReplyTo: objReplyTo,\n                        sHTML: sBody,\n                        sDeliveryStatus: sStatus\n                    });\n\n                    if (!a24Core.isEmpty(sStatusReason)) {\n                        _this3.set(\"_objNotificationPreview.sDeliveryFailureReason\", sStatusReason);\n                    }\n\n                    _this3.set(\"_arrNotificationPreviewPopupActions\", [{\n                        sTitle: _this3.get(\"_objSSCoreStrings\").getString(\"openInNewTab\"),\n                        sIcon: \"open_in_new\",\n                        executeCardAction: function executeCardAction() {\n                            var objNotificationPreview = _this3.get(\"_objNotificationPreview\");\n                            // Generate the email html from details\n                            var sHtml = _this3.get(\"_objEmailPreviewGeneratorService\").generateFullHtmlWithHTMLWrappingFromEmailObject(objNotificationPreview);\n                            _this3.openHtmlInNewWindow(sHtml);\n                        }\n                    }]);\n                } else {\n                    _this3.set(\"_bIsEmail\", false);\n                    _this3.set(\"_arrNotificationPreviewPopupActions\", null);\n                    _this3.set(\"_objNotificationPreview\", objData);\n                }\n\n                // Take the popup out of loading\n                _this3.set(\"_bNotificationPreviewPopupLoading\", false);\n            };\n\n            this.set(\"_bShowNotifcationPreviewPopup\", true);\n            this.set(\"_bNotificationPreviewPopupLoading\", true);\n\n            // Use the stored response if it is set\n            var objStoredNotifciationResponse = this.get(\"_objCurrentNotificationSentCache.\" + sNotificationSentId);\n\n            if (!a24Core.isEmpty(objStoredNotifciationResponse)) {\n                funcSuccess(objStoredNotifciationResponse);\n                return;\n            }\n\n            this._getActivityNotificationFromMedium(sActivityId, sLinkedEntityId, sMedium, sNotificationSentId, funcSuccess);\n        },\n\n        _getActivityNotificationFromMedium: function _getActivityNotificationFromMedium(sActivityId, sLinkedEntityId, sMedium, sNotificationSentId, funcSuccess) {\n            var _this4 = this;\n\n            this.get(\"objRestActivityNotification\").getActivityNotificationFromMedium(this, \"_objActivityNotificationMediumPreviewPromise\", this.get(\"sSubjectId\"), this.get(\"sSubjectType\"), sActivityId, sLinkedEntityId, sMedium, sNotificationSentId, funcSuccess, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                _this4.set(\"_bShowNotifcationPreviewPopup\", false);\n                _this4.set(\"_bNotificationPreviewPopupLoading\", false);\n\n                _this4.get(\"_objSnackbarService\").showSnackbarMessage(_this4.get(\"_objSSCoreStrings\").getString(\"couldNotLoadNotificationPreview\"));\n            }));\n        },\n        openHtmlInNewWindow: function openHtmlInNewWindow(sHtml) {\n            // Open the html in a new window\n            var objNewWindow = window.open();\n\n            if (objNewWindow !== null) {\n                objNewWindow.document.write(sHtml);\n                objNewWindow.document.close();\n                objNewWindow.focus();\n            }\n        },\n        actions: {\n            onPopupClose: function onPopupClose() {\n                if (!a24Core.isEmpty(this.get(\"onPopupCloseAction\"))) {\n                    this.get(\"onPopupCloseAction\")();\n                }\n            },\n            onNotificationPreviewPopupClose: function onNotificationPreviewPopupClose() {\n                this.set(\"_bShowNotifcationPreviewPopup\", false);\n            },\n            onNotificationSentClick: function onNotificationSentClick(objData) {\n                var sActivityId = objData.activity_id;\n                var sLinkedEntityId = objData.entity_id;\n                var sMedium = objData.backend_medium;\n                var sNotificationSentId = objData.notifications_sent_id;\n\n                this.activityNotificationFromMedium(sActivityId, sLinkedEntityId, sMedium, sNotificationSentId);\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-core/components/page-access-denied\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/page-access-denied\"], function (exports, _didRenderChangesMixin, _pageAccessDenied) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _pageAccessDenied.default,\n        classNames: [\"page-access-denied\"],\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _objSSCoreStringsService: Ember.inject.service(\"a24-strings-staffshift-core\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n\n        _bHasSession: false,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            this.set(\"_bHasSession\", !a24Core.isEmpty(this.get(\"_objUserSession.objAuthData\")));\n            this.set(\"_objStatusErrorPageService.sIcon\", \"warning\");\n            this.set(\"_objStatusErrorPageService.sMessage\", this.get(\"_objSSCoreStringsService\").getString(\"contextWrongIp\"));\n        }\n    });\n});","define(\"a24-ember-staffshift-core/components/page-react-easter-egg-item\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/page-react-easter-egg-item\", \"a24-ember-lib/mixins/input-form-element\"], function (exports, _didRenderChangesMixin, _pageReactEasterEggItem, _inputFormElement) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _pageReactEasterEggItem.default,\n        bShowInitFields: true,\n        _sFuncName: \"\",\n        _bShowPopup: false,\n        _bPopupLoading: true,\n        _objFrameData: null,\n        _sUrlStart: \"\",\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n            var env = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            this.set(\"_sUrlStart\", env.sReactGatewayUrl);\n\n            var sFuncName = \"reactEasterPost\" + Ember.guidFor({});\n            this.set(\"_sFuncName\", sFuncName);\n            window[sFuncName] = function (objData) {\n                _this.set(\"_bShowPopup\", true);\n                _this.set(\"_objFrameData.data\", objData);\n            };\n            // eslint-disable-next-line no-console\n            console.log(\"EMBER \" + sFuncName);\n        },\n        willDestroyElement: function willDestroyElement() {\n            this._super.apply(this, arguments);\n            delete window[this.get(\"_sFuncName\")];\n        },\n        onScreenChange: Ember.observer(\"bShowInitFields\", function () {\n            if (!this.get(\"bShowInitFields\") && !a24Core.isEmpty(this.get(\"_objFrameData.data\"))) {\n                this.set(\"_bShowPopup\", true);\n            }\n        }),\n        onInputValueChanged: function onInputValueChanged() {\n            var objData = this.getPlainFormValueObject();\n            eval(\"window.reactEasterPostData = \" + objData.data + \";\");\n            objData.data = window.reactEasterPostData;\n            objData.url = objData.url.replace(\"http:\", \"\").replace(\"https:\", \"\");\n            if (objData.url.charAt(objData.url.length - 1) === \"/\") {\n                objData.url = objData.url.substring(0, objData.url.length - 1);\n            }\n            window.reactEasterPostData = null;\n            this.set(\"_sUrlStart\", objData.url);\n            this.set(\"_objFrameData\", objData);\n        },\n        actions: {\n            onRecieveDataReactPopup: function onRecieveDataReactPopup(objData) {\n                // eslint-disable-next-line no-console\n                console.log(\"EMBER Receive Data From React Popup\", objData);\n                if (!a24Core.isEmpty(objData)) {\n                    if (objData.type === \"app_ready\") {\n                        this.set(\"_bPopupLoading\", false);\n                    } else if (objData.type === \"close\") {\n                        this.set(\"_bShowPopup\", false);\n                    }\n                }\n            },\n            onRecieveDataReactPage: function onRecieveDataReactPage(objData) {\n                // eslint-disable-next-line no-console\n                console.log(\"EMBER Receive Data From React Page\", objData);\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-core/components/page-react-easter-egg\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/page-react-easter-egg\"], function (exports, _didRenderChangesMixin, _pageReactEasterEgg) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _pageReactEasterEgg.default,\n        bShowInitFields: true,\n        arrItems: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n            this.set(\"arrItems\", [\"me\"]);\n        },\n        actions: {\n            addAnother: function addAnother() {\n                this.get(\"arrItems\").pushObject(\"me\");\n            },\n            flipIt: function functionName() {\n                this.set(\"bShowInitFields\", false);\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-core/components/page-welcome\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/page-welcome\"], function (exports, _didRenderChangesMixin, _pageWelcome) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _pageWelcome.default,\n        _objStaffshiftCoreStringsService: Ember.inject.service(\"a24-strings-staffshift-core\"),\n        _objFabButtonService: Ember.inject.service(\"fab-button\"),\n        _objHelpBoxService: Ember.inject.service(\"help-box-service\"),\n        init: function init() {\n            this._super.apply(this, arguments);\n            var objThis = this;\n            this.get(\"_objFabButtonService\").showFabButton(function () {\n                objThis.get(\"_objHelpBoxService\").toggleChatBox();\n            }, \"chat\", this.get(\"_objStaffshiftCoreStringsService\").getString(\"needAnyHelp\"));\n        }\n    });\n});","define(\"a24-ember-staffshift-core/components/react-ember-utils\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/react-ember-utils\"], function (exports, _didRenderChangesMixin, _reactEmberUtils) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _reactEmberUtils.default,\n        objPostIframeData: null,\n\n        _objChatterIframeComService: Ember.inject.service(\"chatter-iframe-com-base\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objReactEmberNavigation: Ember.inject.service(\"react-ember-navigation\"),\n        _objReactEmberUtilsService: Ember.inject.service(\"react-ember-utils\"),\n\n        _funcUnregister: null,\n\n        _bReadyFired: false,\n\n        _sIFrameId: null,\n\n        _sReactUtilsUrl: Ember.computed.readOnly(\"_objEnv.sReactUtilsGatewayUrl\"),\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            if (this.get(\"_objEnv\").environment === \"test\") {\n                this.set(\"_sIFrameId\", \"testFrameIdhere1234\");\n            } else if (a24Core.isEmpty(this.get(\"_sIFrameId\"))) {\n                this.set(\"_sIFrameId\", Ember.guidFor({}));\n            }\n            this.set(\"_funcUnregister\", this.get(\"_objChatterIframeComService\").receiveMessage(function (objMessage) {\n                var objData = {};\n                if (!a24Core.isEmpty(objMessage.data)) {\n                    objData = JSON.parse(objMessage.data);\n                }\n                if (a24Core.isEmpty(objData.frameId) || objData.frameId === _this.get(\"_sIFrameId\")) {\n                    _this._handleMessages(objData);\n                }\n            }, this.get(\"_sReactUtilsUrl\")));\n        },\n\n        willDestroyElement: function willDestroyElement() {\n            if (!a24Core.isEmpty(this.get(\"_funcUnregister\"))) {\n                this.get(\"_funcUnregister\")();\n            }\n            this._super.apply(this, arguments);\n        },\n\n        _postData: Ember.observer(\"_objReactEmberUtilsService.objRequest\", function () {\n            if (this.get(\"_bReadyFired\") && !a24Core.isEmpty(this.get(\"_objReactEmberUtilsService.objRequest\"))) {\n                var objData = {\n                    type: \"trigger_api_request\",\n                    data: { request: this.get(\"_objReactEmberUtilsService.objRequest\") },\n                    requestId: this.get(\"_objReactEmberUtilsService.objRequest.requestId\")\n                };\n                var objDataCopy = Ember.copy(objData, true);\n                objDataCopy.data.authResponse = Ember.copy(this.get(\"_objUserSession.objAuthData\"), true);\n                objDataCopy.data.contextResponse = Ember.copy(this.get(\"_objUserSession.objContextDetails\"), true);\n\n                this.get(\"_objChatterIframeComService\").postMessage(JSON.stringify(objDataCopy), this.get(\"_sReactUtilsUrl\"), this.$(\"iframe\")[0].contentWindow);\n            }\n        }),\n\n        _handleMessages: function _handleMessages(objData) {\n            if (objData.type === \"app_ready\") {\n                this.set(\"_bReadyFired\", true);\n                this.get(\"_objReactEmberUtilsService\").triggerRequestQueue();\n            } else if (objData.type === \"trigger_api_request_response\") {\n                this.get(\"_objReactEmberUtilsService\").reactApiRequestResponse(objData.data, objData.requestId);\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-core/components/react-main-content-component\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/react-main-content-component\"], function (exports, _didRenderChangesMixin, _reactMainContentComponent) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _reactMainContentComponent.default,\n\n        sRoute: null,\n        objReactTriggerRoute: null,\n\n        _sIFrameUrl: \"\",\n        _sRouteIds: \"\",\n\n        _bRouterReady: false,\n\n        _objReactIframeData: null,\n\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objTriageMenu: Ember.inject.service(\"triage-menu\"),\n        _objNavigationWithWillDestroyService: Ember.inject.service(\"navigation\"),\n\n        _objStaffshiftCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            Ember.run.schedule(\"afterRender\", function () {\n                $(\".main-container\").addClass(\"tab-react-iframe\");\n            });\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            this.get(\"_objTitleBarService\").setTitleBar();\n\n            Ember.run.schedule(\"afterRender\", function () {\n                _this.set(\"_objTriageMenu.sTopBarComponent\", null);\n                Ember.$(\".a24-bread-crumb-bar-component\").hide();\n            });\n\n            var objRouteParams = this.get(\"_objNavigationWithWillDestroyService.objRouteParams\");\n            if (!a24Core.isEmpty(objRouteParams) && !a24Core.isEmpty(objRouteParams[this.get(\"sRoute\")])) {\n                var objRouteParam = objRouteParams[this.get(\"sRoute\")];\n                var sRouteIds = Object.values(objRouteParam).join(\",\");\n\n                this.set(\"_sRouteIds\", sRouteIds);\n\n                var objTriggerRouteData = this.get(\"objReactTriggerRoute.data.data\") || {};\n                var objTriggerRoute = this.get(\"objReactTriggerRoute\");\n\n                Object.assign(objTriggerRouteData, Ember.copy(objRouteParam, true));\n                objTriggerRoute.data.data = objTriggerRouteData;\n                this.set(\"_objReactIframeData\", Ember.copy(objTriggerRoute, true));\n            }\n        },\n\n        getA24WillDestroyRoute: function getA24WillDestroyRoute() {\n            return this.get(\"sRoute\");\n        },\n\n        _onRouteParamChange: Ember.observer(\"_objNavigationWithWillDestroyService.objRouteParams\", function () {\n            if (!this.get(\"_bRouterReady\")) {\n                return;\n            }\n\n            var objRouteParams = this.get(\"_objNavigationWithWillDestroyService.objRouteParams\");\n            if (!a24Core.isEmpty(objRouteParams)) {\n                var objRouteParam = objRouteParams[this.get(\"sRoute\")];\n                if (!a24Core.isEmpty(objRouteParam)) {\n                    var sRouteIds = Object.values(objRouteParam).join(\",\");\n\n                    if (sRouteIds === this.get(\"_sRouteIds\")) {\n                        var objTriggerData = {\n                            type: \"tab_route_info\",\n                            data: Ember.copy(objRouteParams, true)\n                        };\n\n                        this.set(\"_objReactIframeData\", objTriggerData);\n                    }\n                }\n            }\n        }),\n\n        _onNewRouteChange: Ember.observer(\"_objNavigationWithWillDestroyService.objNewRouteParams\", function () {\n            if (!this.get(\"_bRouterReady\")) {\n                return;\n            }\n\n            var objNewRouteParams = this.get(\"_objNavigationWithWillDestroyService.objNewRouteParams\");\n\n            if (!a24Core.isEmpty(objNewRouteParams)) {\n                if (!a24Core.isEmpty(objNewRouteParams) && !a24Core.isEmpty(objNewRouteParams[this.get(\"sRoute\")])) {\n                    var objRouteParam = objNewRouteParams[this.get(\"sRoute\")];\n                    var sRouteIds = Object.values(objRouteParam).join(\",\");\n\n                    if (sRouteIds === this.get(\"_sRouteIds\")) {\n                        var objTriggerData = {\n                            type: \"tab_route_new_info\",\n                            data: Ember.copy(objNewRouteParams, true)\n                        };\n\n                        this.set(\"_objReactIframeData\", objTriggerData);\n                    }\n                }\n            }\n        }),\n        _onCurrentRouteChange: Ember.observer(\"_objNavigationWithWillDestroyService.objCurrentRouteParams\", function () {\n            if (!this.get(\"_bRouterReady\")) {\n                return;\n            }\n\n            var objCurrentRouteParams = this.get(\"_objNavigationWithWillDestroyService.objCurrentRouteParams\");\n\n            if (!a24Core.isEmpty(objCurrentRouteParams)) {\n                if (!a24Core.isEmpty(objCurrentRouteParams) && !a24Core.isEmpty(objCurrentRouteParams[this.get(\"sRoute\")])) {\n                    var objRouteParam = objCurrentRouteParams[this.get(\"sRoute\")];\n                    var sRouteIds = Object.values(objRouteParam).join(\",\");\n\n                    if (sRouteIds === this.get(\"_sRouteIds\")) {\n                        var objTriggerData = {\n                            type: \"tab_route_current_info\",\n                            data: Ember.copy(objCurrentRouteParams, true)\n                        };\n\n                        this.set(\"_objReactIframeData\", objTriggerData);\n                    } else {\n                        this.set(\"_sRouteIds\", sRouteIds);\n\n                        var objTriggerRouteData = this.get(\"objReactTriggerRoute.data.data\") || {};\n                        var objTriggerRoute = this.get(\"objReactTriggerRoute\");\n\n                        Object.assign(objTriggerRouteData, Ember.copy(objRouteParam, true));\n                        objTriggerRoute.data.data = objTriggerRouteData;\n\n                        this.set(\"_objReactIframeData\", Ember.copy(objTriggerRoute, true));\n                    }\n                }\n            }\n        }),\n\n        a24WillDestroy: function a24WillDestroy() {\n            if (a24Core.isEmpty(Ember.$(\".a24-bread-crumb-bar-component\"))) {\n                this.set(\"_objTriageMenu.sTopBarComponent\", \"title-bar\");\n            }\n            $(\".main-container\").removeClass(\"tab-react-iframe\");\n        },\n\n        actions: {\n            onRecieveData: function onRecieveData(objData) {\n                var _this2 = this;\n\n                if (objData.type === \"app_ready\") {\n                    this.set(\"_bRouterReady\", true);\n                } else if (objData.type === \"component_ready\") {\n                    var objCurrentRouteParams = this.get(\"_objNavigationWithWillDestroyService.objCurrentRouteParams\");\n\n                    var objRouteParam = objCurrentRouteParams[this.get(\"sRoute\")];\n                    var sRouteIds = Object.values(objRouteParam).join(\",\");\n\n                    if (sRouteIds === this.get(\"_sRouteIds\")) {\n                        var objTriggerData = {\n                            type: \"tab_route_info\",\n                            data: Ember.copy(objCurrentRouteParams, true)\n                        };\n\n                        this.set(\"_objReactIframeData\", objTriggerData);\n                        Ember.run.next(function () {\n                            if (a24Core.isEmpty(_this2)) {\n                                return;\n                            }\n                            objTriggerData = {\n                                type: \"tab_route_new_info\",\n                                data: Ember.copy(objCurrentRouteParams, true)\n                            };\n\n                            _this2.set(\"_objReactIframeData\", objTriggerData);\n                            Ember.run.next(function () {\n                                if (a24Core.isEmpty(_this2)) {\n                                    return;\n                                }\n                                objTriggerData = {\n                                    type: \"tab_route_current_info\",\n                                    data: Ember.copy(objCurrentRouteParams, true)\n                                };\n\n                                _this2.set(\"_objReactIframeData\", objTriggerData);\n                            });\n                        });\n                    }\n                }\n\n                if (!a24Core.isEmpty(this.get(\"onRecieveData\"))) {\n                    this.get(\"onRecieveData\")(objData);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-core/components/reset-password-popup-component\", [\"exports\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/reset-password-popup-component\"], function (exports, _inputFormElement, _didRenderChangesMixin, _resetPasswordPopupComponent) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _resetPasswordPopupComponent.default,\n        sUsernameEmail: \"\",\n        bShowPopup: false,\n        _bLoading: false,\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objUserService: Ember.inject.service(\"rest-user\"),\n        _objStaffshiftCoreStringsService: Ember.inject.service(\"a24-strings-staffshift-core\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objSpecialForgotPasswordPopupAction: null,\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n            this.set(\"objChildConfig\", {\n                \"objChildren._sUsernameEmail\": function objChildren_sUsernameEmail(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                    a24Validation.addMinLength(objMixin, 3);\n                    a24Validation.addMaxLength(objMixin, 100);\n                }\n            });\n\n            this.set(\"_objSpecialForgotPasswordPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    if (!a24Core.isEmpty(_this.get(\"onForgotPasswordClose\"))) {\n                        _this.get(\"onForgotPasswordClose\")();\n                    }\n                }\n            });\n\n            this.set(\"_bLoading\", false);\n        },\n        _onShowPopup: Ember.observer(\"bShowPopup\", function () {\n            this.get(\"objChildren._sUsernameEmail\").setValueFromOutside(this.get(\"sUsernameEmail\"));\n        }),\n        isValidEmail: function isValidEmail(sEmail) {\n            var regex = /^([a-zA-Z0-9_.+-])+@(([a-zA-Z0-9-])+\\.)+([a-zA-Z0-9]{2,4})+$/;\n            return regex.test(sEmail);\n        },\n        actions: {\n            onPopupForgotPasswordCancel: function onPopupForgotPasswordCancel() {\n                if (!this.get(\"_bLoading\")) {\n                    if (!a24Core.isEmpty(this.get(\"onForgotPasswordClose\"))) {\n                        this.get(\"onForgotPasswordClose\")();\n                    }\n                }\n            },\n\n            onPopupForgotPasswordConfirm: function onPopupForgotPasswordConfirm() {\n                var _this2 = this;\n\n                // validate\n                if (!this.doFullValidation()) {\n                    // determine if username or email\n                    var objData = this.getPlainFormValueObject();\n                    var sUsernameEmail = objData._sUsernameEmail.trim();\n                    var sUsername = null;\n                    var sEmail = null;\n                    if (this.isValidEmail(sUsernameEmail)) {\n                        sEmail = sUsernameEmail;\n                    } else {\n                        sUsername = sUsernameEmail;\n                    }\n\n                    this.set(\"_bLoading\", true);\n\n                    // call service to reset password\n                    this.get(\"_objUserService\").resetPassword(this, sUsername, sEmail, function () {\n                        // reset password was a success\n                        _this2.get(\"_objSnackbarService\").showSnackbarMessage(_this2.get(\"_objStaffshiftCoreStringsService\").getString(\"resetPasswordEmailSent\"));\n                        _this2.set(\"_bLoading\", false);\n                        if (!a24Core.isEmpty(_this2.get(\"onForgotPasswordClose\"))) {\n                            _this2.get(\"onForgotPasswordClose\")();\n                        }\n                    }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\"], function (sCode /*,sStatus, objErrorThrown, objError*/) {\n                        window.dataLayer = window.dataLayer || [];\n\n                        // Show failure message\n                        if (sCode === \"DOES_NOT_EXIST\") {\n                            window.dataLayer.push({\n                                \"event\": \"forgot-password-user-does-not-exist\"\n                            });\n\n                            _this2.setResponseError([\"_sUsernameEmail\"], \"emailNotInDatabase\", false, false, _this2.get(\"_objStaffshiftCoreStringsService\"));\n                        } else if (sCode === \"REGEX_NAME_NO_MATCH\") {\n                            window.dataLayer.push({\n                                \"event\": \"forgot-password-username-invalid-chars\"\n                            });\n\n                            _this2.setResponseError([\"_sUsernameEmail\"], \"validationRestInvalidChar\");\n                        } else if (sCode === \"STRING_TOO_LONG\") {\n                            window.dataLayer.push({\n                                \"event\": \"forgot-password-username-too-long\"\n                            });\n\n                            _this2.setResponseError([\"_sUsernameEmail\"], \"validationRestMaxLength\");\n                        } else if (sCode === \"USER_NOT_ACTIVE\") {\n                            window.dataLayer.push({\n                                \"event\": \"forgot-password-inactive-user\"\n                            });\n\n                            _this2.setResponseError([\"_sUsernameEmail\"], _this2.get(\"_objStaffshiftCoreStringsService\").getString(\"userNotActive\"), true, true);\n                        } else {\n                            _this2.setResponseError([\"_sUsernameEmail\"], _this2.get(\"_objStringsService\").getString(\"serverError\"), true, true);\n                        }\n                        _this2.set(\"_bLoading\", false);\n                    }));\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-core/components/right-panel-client-view\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/right-panel-client-view\"], function (exports, _didRenderChangesMixin, _rightPanelClientView) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _rightPanelClientView.default,\n        classNames: [\"right-panel-client-view\"],\n        mData: null, //This is send in through the objMenuService.mRightPanelComponentData service\n        _sIFrameUrl: \"\",\n        _objReactIframeData: null,\n        _objReactPopupPostData: null,\n        _objEmailActivity: null,\n        _objConversationActivity: null,\n        _objNotificationActivity: null,\n\n        _bReactPopupOpen: false,\n        _bReactPopupLoading: true,\n\n        _bShowEmailMessagePopup: false,\n        _bShowNotifcationsSentPopup: false,\n\n        _objRestActivityEmailComm: Ember.inject.service(\"rest-agency-activity-email-communication-message\"),\n        _objRestActivityNotification: Ember.inject.service(\"rest-agency-activity-notification\"),\n        init: function init() {\n            this._super.apply(this, arguments);\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n\n            this.observeData();\n        },\n        observeData: Ember.observer(\"mData\", function () {\n            var objData = {\n                orgId: this.get(\"mData.sOrgId\")\n            };\n            if (!a24Core.isEmpty(this.get(\"mData.sSiteId\"))) {\n                objData.siteId = this.get(\"mData.sSiteId\");\n            }\n            if (!a24Core.isEmpty(this.get(\"mData.sWardId\"))) {\n                objData.wardId = this.get(\"mData.sWardId\");\n            }\n            this.set(\"_objReactIframeData\", {\n                type: \"trigger_route\",\n                data: {\n                    route: \"agency/client/clientInfoPanel\",\n                    data: objData\n                }\n            });\n        }),\n        actions: {\n            onRecieveData: function onRecieveData(objData) {\n                if (objData.type === \"trigger_route\") {\n                    this.set(\"_objReactPopupPostData\", objData);\n                    this.set(\"_bReactPopupOpen\", true);\n                } else if (objData.type === \"open_preview_popup\") {\n                    var objEventData = objData.data.data;\n                    if (objEventData.entity_type === \"EmailCommunicationMessage\") {\n                        this.set(\"_objEmailActivity\", {\n                            sSubjectId: objEventData.subject_id,\n                            sLinkedEntityId: objEventData.entity_id,\n                            sActivityId: objEventData.activity_id,\n                            sSubjectType: objEventData.subject_type\n                        });\n                        this.set(\"_bShowEmailMessagePopup\", true);\n                    } else if (objEventData.entity_type === \"ChatConversation\") {\n                        this.set(\"_bReactPopupOpen\", true);\n                        this.set(\"_objReactPopupPostData\", {\n                            type: \"trigger_route\",\n                            data: {\n                                route: \"agency/conversation/previewPopup\",\n                                data: { conversationId: objEventData.entity_id }\n                            }\n                        });\n                    } else if (objEventData.entity_type === \"CandidateNotifications\") {\n                        this.set(\"_objNotificationActivity\", {\n                            sSubjectId: objEventData.subject_id,\n                            sLinkedEntityId: objEventData.entity_id,\n                            sActivityId: objEventData.activity_id,\n                            sSubjectType: objEventData.subject_type\n                        });\n                        this.set(\"_bShowNotifcationsSentPopup\", true);\n                    }\n                }\n            },\n            onRecievePopupData: function onRecievePopupData(objData) {\n                if (objData.type === \"app_ready\" || objData.type === \"router_ready\") {\n                    this.set(\"_bReactPopupLoading\", false);\n                } else if (objData.type === \"close\") {\n                    this.set(\"_bReactPopupOpen\", false);\n                } else if (objData.type === \"popup_response\") {\n                    this.set(\"_objReactIframeData\", objData);\n                }\n            },\n            onEmailMessagePopupClose: function onEmailMessagePopupClose() {\n                this.set(\"_bShowEmailMessagePopup\", false);\n            },\n            onNotificationSentPopupClose: function onNotificationSentPopupClose() {\n                this.set(\"_bShowNotifcationsSentPopup\", false);\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-core/components/status-error-page\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-core/templates/components/status-error-page\"], function (exports, _didRenderChangesMixin, _statusErrorPage) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _statusErrorPage.default,\n        classNames: [\"status-error-page\"],\n        _objStatusErrorPageService: Ember.inject.service(\"status-error-page\"),\n        _bMobile: false,\n        _iMobileWidth: 800,\n        _iMobileHeight: 500,\n        init: function init() {\n            this._super.apply(this, arguments);\n            this.onWindowResize();\n        },\n        willDestroyElement: function willDestroyElement() {\n            this._super.apply(this, arguments);\n        },\n        onWindowResize: Ember.observer(\"_objDomService.iPageWidth\", \"_objDomService.iPageHeight\", function () {\n            var iPageWidth = this.get(\"_objDomService.iPageWidth\");\n            var iPageHeight = this.get(\"_objDomService.iPageHeight\");\n\n            if (iPageWidth < this.get(\"_iMobileWidth\") || iPageHeight < this.get(\"_iMobileHeight\")) {\n                this.set(\"_bMobile\", true);\n            } else {\n                this.set(\"_bMobile\", false);\n            }\n        })\n    });\n});","define(\"a24-ember-staffshift-core/helpers/inline-service-loader\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.inlineServiceLoader = inlineServiceLoader;\n\n\n  /**\n   * Return a service directly in the hbs\n   *\n   * @param arrParams - The array of params sent to the helper\n   *\n   * @author Michael Barnard <michael.barnard@a24group.com>\n   * @since  16 November 2017\n   */\n  function inlineServiceLoader(arrParams) {\n    return Ember.inject.service(arrParams[0]);\n  }\n\n  exports.default = Ember.Helper.helper(inlineServiceLoader);\n});","define(\"a24-ember-staffshift-core/mixins/chat-boxes-component-base\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n\n    var iDefaultWidth = 400;\n    var iDefaultHeight = 600;\n\n    /**\n     * Mixin for chat box related functions\n     *\n     * @author Ahmed Onawale<ahmed.onawale@gmail.com>\n     * @since  02 Oct 2024\n     */\n    exports.default = Ember.Mixin.create({\n        //this needs to stay clean to match origin in post message events, so rather copy this and add params where needed\n        //and do not alter this property\n        sChatBoxUrl: null,\n        objChatBoxService: null,\n\n        _ENV: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        _bLoading: true,\n        _bHideChat: Ember.computed(\"objChatBoxService._bHideChat\", function () {\n            return this.get(\"objChatBoxService\")._bHideChat;\n        }),\n        _objChatterIframeComService: Ember.inject.service(\"chatter-iframe-com\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objBreadCrumbService: Ember.inject.service(\"bread-crumb\"),\n        _funcUnregister: null,\n        _iDefaultWidth: iDefaultWidth,\n        _iDefaultHeight: iDefaultHeight,\n        _iDefaultPadding: 24,\n        _bFrameReady: false,\n        _sFinalPageName: null,\n        _objRouteParams: null,\n        _bNewVisit: false,\n        _objPostMessageThrottle: null,\n        _iThrottleLimit: 2000,\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n            //Get navigation so that we can observe the url on it\n            this.get(\"_objNavigation\");\n            this.get(\"_objTitleBarService\");\n            this.get(\"_objBreadCrumbService\");\n            Ember.run.once(this, \"_setFriendlyPageName\");\n\n            this.get(\"objChatBoxService\");\n\n            if (\"Notification\" in window) {\n                if (Notification.permission !== \"granted\") {\n                    Notification.requestPermission();\n                }\n            }\n\n            if (this.get(\"_ENV\").environment !== \"test\") {\n                document.domain = \"staffshift.com\";\n            }\n\n            if (!a24Core.isEmpty(this.get(\"sChatBoxUrl\"))) {\n                // Schedule for after render\n                Ember.run.scheduleOnce(\"afterRender\", function () {\n                    _this.$(\".a24-chat-box-container\").css(\"height\", _this.get(\"_iDefaultHeight\"));\n                    _this.$(\".a24-chat-box-container\").css(\"width\", _this.get(\"_iDefaultWidth\"));\n                    _this.$(\".a24-chat-box-container\").css(\"right\", _this.get(\"_iDefaultPadding\"));\n                    _this.$(\".a24-chat-box-container\").css(\"bottom\", _this.get(\"_iDefaultPadding\"));\n                    _this._funcSizeChanges();\n                });\n\n                this.set(\"_funcUnregister\", this.get(\"_objChatterIframeComService\").receiveMessage(function (objMessage) {\n                    _this._handleMessages(JSON.parse(objMessage.data));\n                }, this.get(\"sChatBoxUrl\")));\n            }\n        },\n\n        _postData: function _postData(objData) {\n            var objDataCopy = Ember.copy(objData, true);\n            this.get(\"_objChatterIframeComService\").postMessage(JSON.stringify(objDataCopy), this.get(\"sChatBoxUrl\"), this.$(\"iframe\")[0].contentWindow);\n        },\n\n        _notifyEventListener: function _notifyEventListener(event) {\n            if (!a24Core.isEmpty(this.$(\"iframe\"))) {\n                this._postData({\n                    type: \"notify_event_listener\",\n                    data: {\n                        event: event\n                    }\n                });\n            }\n        },\n\n        _handleMessages: function _handleMessages(objData) {\n            var _this2 = this;\n\n            if (objData.type === \"app_ready\") {\n                this.set(\"_bFrameReady\", true);\n                this.set(\"_bLoading\", false);\n                this._funcUrlChangeObserver();\n                this._funcPostDataObserver();\n            } else if (objData.type === \"close_chatbox\") {\n                this.get(\"objChatBoxService\").hideChatBox();\n            } else if (objData.type === \"open_chatbox\") {\n                this.get(\"objChatBoxService\").showChatBox();\n            } else if (objData.type === \"desktop_notification\") {\n                this.get(\"_objChatterIframeComService\").openDesktopNotification(this.get(\"sChatBoxUrl\"), this.$(\"iframe\")[0].contentWindow, objData.data);\n            } else if (objData.type === \"unread_messages\") {\n                this.get(\"objChatBoxService\").setNotificationCount(objData.data.count);\n            } else if (objData.type === \"check_parent_has_focus\") {\n                this._postData({\n                    type: objData.type + \"_response\",\n                    data: {\n                        hasFocus: window.document.hasFocus() || document.hasFocus()\n                    },\n                    requestId: objData.requestId\n                });\n            } else if (objData.type === \"add_event_listener\") {\n                if (objData.data.location === \"window\") {\n                    window.addEventListener(objData.data.event, function (event) {\n                        _this2._notifyEventListener(event);\n                    });\n                } else if (objData.data.location === \"document\") {\n                    document.addEventListener(objData.data.event, function (event) {\n                        _this2._notifyEventListener(event);\n                    });\n                }\n            } else if (objData.type === \"remove_event_listener\") {\n                if (objData.data.location === \"window\") {\n                    window.removeEventListener(objData.data.event, function (event) {\n                        _this2._notifyEventListener(event);\n                    });\n                } else if (objData.data.location === \"document\") {\n                    document.removeEventListener(objData.data.event, function (event) {\n                        _this2._notifyEventListener(event);\n                    });\n                }\n            } else if (objData.type === \"expand\") {\n                if (objData.data.expanded) {\n                    this.set(\"_iDefaultWidth\", iDefaultWidth * 1.5);\n                    this.set(\"_iDefaultHeight\", iDefaultHeight * 1.5);\n                } else {\n                    this.set(\"_iDefaultWidth\", iDefaultWidth);\n                    this.set(\"_iDefaultHeight\", iDefaultHeight);\n                }\n                this._funcSizeChanges();\n            }\n        },\n\n        willDestroyElement: function willDestroyElement() {\n            if (!a24Core.isEmpty(this.get(\"_funcUnregister\"))) {\n                this.get(\"_funcUnregister\")();\n            }\n            //no need to do logout post message or something like that, chat app takes care of that.\n            this._super.apply(this, arguments);\n        },\n\n\n        _setFriendlyPageName: function _setFriendlyPageName() {\n            var objFriendly = this.get(\"objChatBoxService\").generateFriendlyPageName();\n\n            if (!a24Core.isEmpty(objFriendly)) {\n                this.set(\"_sFinalPageName\", objFriendly.sFinalPageName);\n                this.set(\"_objRouteParams\", objFriendly.objRouteParams);\n\n                Ember.run.once(this, \"_postSessionDataThrottle\");\n            }\n        },\n\n        _postSessionDataThrottle: function _postSessionDataThrottle() {\n            var _this3 = this;\n\n            if (!a24Core.isEmpty(this.get(\"_objPostMessageThrottle\"))) {\n                Ember.run.cancel(this.get(\"_objPostMessageThrottle\"));\n            }\n\n            this.set(\"_objPostMessageThrottle\", Ember.run.later(function () {\n                if (!a24Core.isEmpty(_this3) && _this3.get(\"_bFrameReady\")) {\n                    _this3.get(\"_objChatterIframeComService\").postSessionData(_this3.get(\"_bNewVisit\"), _this3.get(\"_sFinalPageName\"), _this3.get(\"_objRouteParams\"), _this3.get(\"sChatBoxUrl\"), _this3.$(\"iframe\")[0].contentWindow);\n\n                    _this3.set(\"_bNewVisit\", false);\n                }\n            }, this.get(\"_iThrottleLimit\")));\n        },\n\n        _getWindowHeight: function _getWindowHeight() {\n            return Ember.$(window).height();\n        },\n\n        _getWindowWidth: function _getWindowWidth() {\n            return Ember.$(window).width();\n        },\n\n        _funcRenderCountObserver: Ember.observer(\"objChatBoxService.iRenderCount\", function () {\n            var _this4 = this;\n\n            Ember.run.scheduleOnce(\"afterRender\", function () {\n                _this4.set(\"_iDefaultWidth\", iDefaultWidth);\n                _this4.set(\"_iDefaultHeight\", iDefaultHeight);\n                _this4._funcSizeChanges();\n            });\n        }),\n\n        _funcSizeChanges: Ember.observer(\"_objDomService.iPageWidth\", \"_objDomService.iPageHeight\", function () {\n            //NOTE the iframe can post event to change width and height, then just update the _iDefaultWidth and\n            //_iDefaultHeight to those values and call this function again.\n\n            if (this._getWindowWidth() < this.get(\"_iDefaultWidth\") + this.get(\"_iDefaultPadding\") * 2) {\n                this.$(\"iframe\").css(\"height\", this._getWindowHeight());\n                this.$(\"iframe\").css(\"width\", this._getWindowWidth());\n                this.$(\".a24-chat-box-container\").css(\"height\", this._getWindowHeight());\n                this.$(\".a24-chat-box-container\").css(\"width\", this._getWindowWidth());\n                this.$(\".a24-chat-box-container\").css(\"right\", 0);\n                this.$(\".a24-chat-box-container\").css(\"bottom\", 0);\n            } else if (this._getWindowHeight() < this.get(\"_iDefaultHeight\") + this.get(\"_iDefaultPadding\") * 2) {\n                this.$(\"iframe\").css(\"height\", this._getWindowHeight() - this.get(\"_iDefaultPadding\") * 2);\n                this.$(\"iframe\").css(\"width\", this.get(\"_iDefaultWidth\"));\n                this.$(\".a24-chat-box-container\").css(\"height\", this._getWindowHeight() - this.get(\"_iDefaultPadding\") * 2);\n                this.$(\".a24-chat-box-container\").css(\"width\", this.get(\"_iDefaultWidth\"));\n                this.$(\".a24-chat-box-container\").css(\"right\", this.get(\"_iDefaultPadding\"));\n                this.$(\".a24-chat-box-container\").css(\"bottom\", this.get(\"_iDefaultPadding\"));\n            } else {\n                this.$(\"iframe\").css(\"height\", this.get(\"_iDefaultHeight\"));\n                this.$(\"iframe\").css(\"width\", this.get(\"_iDefaultWidth\"));\n                this.$(\".a24-chat-box-container\").css(\"height\", this.get(\"_iDefaultHeight\"));\n                this.$(\".a24-chat-box-container\").css(\"width\", this.get(\"_iDefaultWidth\"));\n                this.$(\".a24-chat-box-container\").css(\"right\", this.get(\"_iDefaultPadding\"));\n                this.$(\".a24-chat-box-container\").css(\"bottom\", this.get(\"_iDefaultPadding\"));\n            }\n\n            //Here will will update session data since the viewport sizes changed\n            Ember.run.once(this, \"_postSessionDataThrottle\");\n        }),\n\n        _funcPageNameObserver: Ember.observer(\"_objTitleBarService.sTitle\", \"_objBreadCrumbService.arrBreadCrumbItems.@each\", \"_objTitleBarService.arrTabs.@each.bActive\", function () {\n            Ember.run.once(this, \"_setFriendlyPageName\");\n        }),\n\n        _funcHideChatObserver: Ember.observer(\"objChatBoxService._bHideChat\", function () {\n            if (this.get(\"objChatBoxService._bHideChat\") === false) {\n                this.get(\"_objChatterIframeComService\").postMessage(JSON.stringify({ type: \"opened_chatbox\" }), this.get(\"sChatBoxUrl\"), this.$(\"iframe\")[0].contentWindow);\n            } else {\n                this.$(\"iframe\").blur();\n                this.get(\"_objChatterIframeComService\").postMessage(JSON.stringify({ type: \"closed_chatbox\" }), this.get(\"sChatBoxUrl\"), this.$(\"iframe\")[0].contentWindow);\n            }\n        }),\n\n        _funcUrlChangeObserver: Ember.observer(\"_objNavigation.sCurrentUrl\", function () {\n            this.set(\"_bNewVisit\", true);\n            Ember.run.once(this, \"_postSessionDataThrottle\");\n        }),\n\n        _funcPostDataObserver: Ember.observer(\"objChatBoxService._objPostData\", function () {\n            var _this5 = this;\n\n            if (this.get(\"_bFrameReady\") && !a24Core.isEmpty(this.get(\"objChatBoxService._objPostData\"))) {\n                var objPostData = this.get(\"objChatBoxService._objPostData\");\n                this.set(\"objChatBoxService._objPostData\", null);\n                // The next here is just to make sure that when we get the app ready event from the chatterbox that we allow\n                // the chatterbox to first run a useEffect if needed that will register to receive the post data.\n                Ember.run.next(function () {\n                    Ember.run.schedule(\"afterRender\", function () {\n                        if (!a24Core.isEmpty(_this5)) {\n                            _this5._postData(objPostData);\n                        }\n                    });\n                });\n            }\n        }),\n\n        actions: {\n            showHide: function showHide(objEvent) {\n                if (objEvent.ctrlKey || objEvent.metaKey) {\n                    this.get(\"objChatBoxService\").toggleChatBox();\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-core/routes/abstractReactRoute\", [\"exports\", \"a24-ember-staffshift-core/routes/abstractRoute\"], function (exports, _abstractRoute) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _abstractRoute.default.extend({\n\n        activate: function activate() {\n            this._super.apply(this, arguments);\n            Ember.run.schedule(\"afterRender\", function () {\n                $(\".reactTabEmberPage\").addClass(\"reactTabEmberPageSpacing\");\n            });\n        },\n        deactivate: function deactivate() {\n            $(\".reactTabEmberPage\").removeClass(\"reactTabEmberPageSpacing\");\n            this._super.apply(this, arguments);\n        }\n    });\n});","define(\"a24-ember-staffshift-core/routes/abstractRoute\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Route.extend({\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        bContextBaseRoute: false,\n        sAppContext: Ember.computed.readOnly(\"env.sAppContext\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objBeforeModelPromiseResolve: null,\n\n        bPageLoading: false,\n\n        model: function model(objModel, objTrans) {\n            if (this.get(\"bContextBaseRoute\")) {\n                this.get(\"_objUserSession\").set(\"bSkipNextAuthCall\", true);\n            } else {\n                if (this.get(\"_objUserSession\").get(\"bSkipNextAuthCall\")) {\n                    this.get(\"_objUserSession\").set(\"bSkipNextAuthCall\", false);\n                    var objModelHook = this.modelHook();\n                    if (objModelHook === null) {\n                        return;\n                    } else {\n                        return objModelHook;\n                    }\n                }\n            }\n\n            var currentController = this;\n\n            //Reset the before model custom promise\n            this.set(\"_objBeforeModelPromiseResolve\", null);\n            //Get the context from url, will be the first segment e.g targetName=candidate.welcome\n            var sContext = null;\n            var sCID = null;\n            var sParamLookup = null;\n\n            if (!a24Core.isEmpty(this.get(\"sAppContext\"))) {\n                sContext = this.get(\"sAppContext\");\n                sParamLookup = \"index\";\n                this.get(\"_objNavigation\").set(\"sContext\", null);\n            } else {\n                sContext = objTrans.targetName.split(\".\")[0];\n                sParamLookup = sContext;\n                this.get(\"_objNavigation\").set(\"sContext\", sContext);\n            }\n\n            //Context Id can be null in candidate and systemAdmin context\n            if (objTrans.params[sParamLookup].context_id != null) {\n                sCID = objTrans.params[sParamLookup].context_id;\n            }\n\n            //Update the current context base url for easier navigation inside this context later\n            this.get(\"_objNavigation\").set(\"sContextId\", sCID);\n            this.get(\"_objNavigation\").set(\"objRouteParams\", objTrans.params);\n            this.get(\"_objNavigation\").set(\"objRouteQueryParams\", Ember.copy(objTrans.queryParams, true));\n\n            //Create custom promise that will be resolved if public page or resolved when private page with valid\n            //auth and user details\n            return new Ember.RSVP.Promise(function (funcResolve) {\n                //Set the resolve function so that we can resolve the promise when all needed calls/checks are done\n                currentController.set(\"_objBeforeModelPromiseResolve\", funcResolve);\n\n                currentController.get(\"_objNavigation\").set(\"bPageLoading\", true);\n\n                currentController.get(\"_objUserSession\").doCheckAuth(function () {\n                    var objModelHook = currentController.modelHook();\n                    if (objModelHook == null) {\n                        currentController.get(\"_objBeforeModelPromiseResolve\")();\n                        currentController.get(\"_objNavigation\").set(\"bPageLoading\", false);\n                    } else {\n                        objModelHook.finally(function () {\n                            currentController.get(\"_objBeforeModelPromiseResolve\")();\n                            currentController.get(\"_objNavigation\").set(\"bPageLoading\", false);\n                        });\n                    }\n                }, function (bInvalidAuth) {\n                    currentController.get(\"_objNavigation\").set(\"bPageLoading\", false);\n                    if (bInvalidAuth) {\n                        //Save the current transition so that we can retry later\n                        currentController.get(\"_objNavigation\").set(\"objPrevTrans\", objTrans);\n\n                        //Redirect to the index page where user will be able to login\n                        currentController.get(\"_objNavigation\").navigateToGWTLogin(false);\n                    } else {\n                        //Check Auth did not fail because of auth error/session timeout, thus it is service call\n                        //failures e.g incorrect context id or user does not have access to that context\n                        currentController.get(\"_objNavigation\").navigateOutsideContext(\"404\");\n                    }\n                }, sContext, sCID, currentController.get(\"bContextBaseRoute\"));\n            });\n        },\n        /**\n         * This function will be called after the abstract model code before it resolves, thus devs can use this\n         * function the same way that they would have used the model function\n         *\n         * @returns Null or a promise object, in case of promise abstract model will wait till promise is resolved\n         *     before resolving its own\n         */\n        modelHook: function modelHook() {},\n        afterModel: function afterModel() {\n            this._super.apply(this, arguments);\n            this.set(\"_objNavigation.objNewRouteParams\", Ember.copy(this.get(\"_objNavigation.objRouteParams\"), true));\n            this.set(\"_objNavigation.objNewRouteQueryParams\", Ember.copy(this.get(\"_objNavigation.objRouteQueryParams\"), true));\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/a24-constants-staffshift-core\", [\"exports\", \"a24-ember-lookup/services/a24-constants-base\"], function (exports, _a24ConstantsBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _a24ConstantsBase.default.extend({\n        AGENCY_DEFAULT_AVATAR: \"images/defaultAvatar/agencyAvatar.png\",\n        AGENCY_GROUP_DEFAULT_AVATAR: \"images/defaultAvatar/agencygroupAvatar.png\",\n        CANDIDATE_DEFAULT_AVATAR: \"images/defaultAvatar/defaultAvatar.png\",\n        ORGANISATION_DEFAULT_AVATAR: \"images/defaultAvatar/organisationAvatar.png\",\n        SYSTEM_ADMIN_DEFAULT_AVATAR: \"images/defaultAvatar/systemadminAvatar.png\",\n\n        DATE_FORMAT_TRIAGE_REST_FORMAT: \"DD MMMM YYYY HH:mm:ss ZZ\",\n\n        CONTEXT_AGENCY: \"Agency\",\n        CONTEXT_AGENCY_GROUP: \"AgencyGroup\",\n        CONTEXT_CANDIDATE: \"Candidate\",\n        CONTEXT_ORGANISATION: \"Organisation\",\n        CONTEXT_SYSTEM_ADMIN: \"SystemAdmin\",\n        CONTEXT_AGENCY_GROUP_HYPHEN: \"Agency-Group\",\n\n        CONTEXT_AGENCY_LOWER: \"agency\",\n        CONTEXT_AGENCY_GROUP_LOWER: \"agencygroup\",\n        CONTEXT_SYSTEM_ADMIN_LOWER: \"systemadmin\",\n\n        CONTEXT_AGENCY_LOWER_HYPHEN: \"agency\",\n        CONTEXT_AGENCY_GROUP_LOWER_HYPHEN: \"agency-group\",\n        CONTEXT_CANDIDATE_LOWER_HYPHEN: \"candidate\",\n        CONTEXT_ORGANISATION_LOWER_HYPHEN: \"organisation\",\n        CONTEXT_SYSTEM_ADMIN_LOWER_HYPHEN: \"system-admin\",\n\n        // Locale Strings\n        LANGUAGE_LOCALE_UK: \"en_UK\",\n        LANGUAGE_LOCALE_SA: \"en_ZA\",\n\n        //Firebase\n        FIREBASE_ERROR_SIGNED_OUT: \"signed_out\",\n        FIREBASE_ERROR_QUERY_NOT_EXIST: \"query_not_exist\",\n        FIREBASE_ERROR_SIGNED_IN_FAILED: \"sign_in_failed\",\n\n        UK_NURSE: \"gbr_nurse\",\n        UK_CARE_COURSE: \"gbr_care_course\",\n        UK_CARE_WORKER: \"gbr_care_worker\",\n        UK_CATERING: \"gbr_catering\",\n        UK_GP: \"gbr_gp\",\n        UK_INDUSTRIAL: \"gbr_industrial\",\n        UK_LOCUM: \"gbr_locum\",\n        UK_LOCUM_ALLIED: \"gbr_locum_allied\",\n        UK_ODP: \"gbr_odp\",\n        UK_SOCIAL_WORKER: \"gbr_social_worker\",\n        UK_SOCIAL_WORKER_RSW: \"gbr_social_worker_rsw\",\n\n        ZA_NURSE: \"za_nurse\",\n        ZA_CARE_GIVER: \"za_care_giver\",\n        ZA_LOCUM: \"za_locum\",\n        ZA_LOCUM_ALLIED: \"za_locum_allied\",\n        ZA_ALLIED_PROFESSIONAL: \"za_allied_professional\",\n        ZA_SOCIAL_WORKER: \"za_social_worker\"\n    });\n});","define(\"a24-ember-staffshift-core/services/a24-enums-staffshift-core\", [\"exports\", \"a24-ember-lookup/services/a24-enums-base\"], function (exports, _a24EnumsBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _a24EnumsBase.default.extend({\n        _objBaseStringsService: Ember.inject.service(\"a24-strings\"),\n        _objStringsService: Ember.inject.service(\"a24-strings-staffshift-core\"),\n        _objConstantsService: Ember.inject.service(\"a24-constants-staffshift-core\"),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objStrings = this.get(\"_objStringsService\");\n            var objBaseStrings = this.get(\"_objBaseStringsService\");\n            var objConstants = this.get(\"_objConstantsService\");\n\n            this.set(\"conversationStatus\", {\n                \"OPEN\": {\n                    \"backend\": \"open\",\n                    \"frontend\": objStrings.getString(\"open\")\n                },\n                \"CLOSED\": {\n                    \"backend\": \"closed\",\n                    \"frontend\": objStrings.getString(\"closed\")\n                },\n                \"CLOSING\": {\n                    \"backend\": \"closing\",\n                    \"frontend\": objStrings.getString(\"closing\")\n                },\n                \"ORPHAN\": {\n                    \"backend\": \"orphan\",\n                    \"frontend\": objStrings.getString(\"orphan\")\n                },\n                \"ARCHIVED\": {\n                    \"backend\": \"archived\",\n                    \"frontend\": objStrings.getString(\"archived\")\n                }\n            });\n\n            this.set(\"mediumType\", {\n                \"EMAIL\": {\n                    \"backend\": \"email\",\n                    \"frontend\": objBaseStrings.getString(\"email\"),\n                    \"icon\": \"email\"\n                },\n                \"SMS\": {\n                    \"backend\": \"sms\",\n                    \"frontend\": objStrings.getString(\"sms\"),\n                    \"icon\": \"textsms\"\n                },\n                \"WHATSAPP\": {\n                    \"backend\": \"whatsapp\",\n                    \"frontend\": objStrings.getString(\"whatsapp\"),\n                    \"icon_fa\": \"fa-whatsapp\"\n                }\n            });\n\n            this.set(\"notificationStatus\", {\n                \"PROCESSING\": {\n                    \"backend\": \"processing\",\n                    \"frontend\": \"Processing\"\n                },\n                \"DISPATCHED\": {\n                    \"backend\": \"dispatched\",\n                    \"frontend\": \"Dispatched\"\n                },\n                \"COMPLETED\": {\n                    \"backend\": \"completed\",\n                    \"frontend\": \"Completed\"\n                },\n                \"NEW\": {\n                    \"backend\": \"new\",\n                    \"frontend\": \"New\"\n                },\n                \"PERMANENT_FAILURE\": {\n                    \"backend\": \"permanent_failure\",\n                    \"frontend\": \"Permanent failure\"\n                },\n                \"TEMPORARY_FAILURE\": {\n                    \"backend\": \"temporary_failure\",\n                    \"frontend\": \"Temporary failure\"\n                },\n                \"UNSUBSCRIBED\": {\n                    \"backend\": \"unsubscribed\",\n                    \"frontend\": \"Unsubscribed\"\n                },\n                \"COMPLAINED\": {\n                    \"backend\": \"complained\",\n                    \"frontend\": \"Complained\"\n                },\n                \"DELIVERED\": {\n                    \"backend\": \"delivered\",\n                    \"frontend\": \"Delivered\"\n                },\n                \"INITIATED\": {\n                    \"backend\": \"initiated\",\n                    \"frontend\": \"Initiated\"\n                },\n                \"QUEUED\": {\n                    \"backend\": \"queued\",\n                    \"frontend\": \"Queued\"\n                },\n                \"SENT\": {\n                    \"backend\": \"sent\",\n                    \"frontend\": \"Sent\"\n                },\n                \"READ\": {\n                    \"backend\": \"read\",\n                    \"frontend\": \"Read\"\n                },\n                \"OPT_OUT\": {\n                    \"backend\": \"opt_out\",\n                    \"frontend\": \"Opt out\"\n                }\n            });\n\n            this.set(\"whitelistIps\", {\n                \"SUTTON\": {\n                    \"backend\": \"109.176.72.130\",\n                    \"frontend\": \"109.176.72.130\"\n                },\n                \"GRANTHAM\": {\n                    \"backend\": \"82.20.68.14\",\n                    \"frontend\": \"82.20.68.14\"\n                },\n                \"PORTSMOUTH\": {\n                    \"backend\": \"81.105.219.2\",\n                    \"frontend\": \"81.105.219.2\"\n                },\n                \"STOCKPORT\": {\n                    \"backend\": \"81.149.198.104\",\n                    \"frontend\": \"81.149.198.104\"\n                },\n                \"FIRSTCALL_EMPLOYMENT_PITSEA\": {\n                    \"backend\": \"81.130.209.196\",\n                    \"frontend\": \"81.130.209.196\"\n                },\n                \"LEONARDSLEE\": {\n                    \"backend\": \"62.252.177.138\",\n                    \"frontend\": \"62.252.177.138\"\n                },\n                \"MANNINGS_HEATH\": {\n                    \"backend\": \"213.105.51.186\",\n                    \"frontend\": \"213.105.51.186\"\n                },\n                \"BELLVILLE\": {\n                    \"backend\": \"196.14.255.105\",\n                    \"frontend\": \"196.14.255.105\"\n                }\n            });\n\n            this.set(\"context\", {\n                \"CANDIDATE\": {\n                    \"backend\": objConstants.CONTEXT_CANDIDATE,\n                    \"frontend\": objStrings.getString(\"candidate\")\n                },\n                \"AGENCY\": {\n                    \"backend\": objConstants.CONTEXT_AGENCY,\n                    \"frontend\": objStrings.getString(\"agency\")\n                },\n                \"AGENCY_GROUP\": {\n                    \"backend\": objConstants.CONTEXT_AGENCY_GROUP,\n                    \"frontend\": objStrings.getString(\"agencyGroup\")\n                },\n                \"ORGANISATION\": {\n                    \"backend\": objConstants.CONTEXT_ORGANISATION,\n                    \"frontend\": objStrings.getString(\"organisation\")\n                },\n                \"SYSTEM_ADMIN\": {\n                    \"backend\": objConstants.CONTEXT_SYSTEM_ADMIN,\n                    \"frontend\": objStrings.getString(\"systemAdmin\")\n                }\n            });\n\n            this.set(\"customMaterialSvgIcons\", {\n                \"facebook\": {\n                    frontend: \"Facebook\",\n                    backend: \"facebook\",\n                    image: \"<svg class=\\\"material-icons-svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"#000000\\\" d=\\\"M5,3H19A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3M18,5H15.5A3.5,3.5 0 0,0 12,8.5V11H10V14H12V21H15V14H18V11H15V9A1,1 0 0,1 16,8H18V5Z\\\" /></svg>\"\n                },\n                \"instagram\": {\n                    frontend: \"Instagram\",\n                    backend: \"instagram\",\n                    image: \"<svg class=\\\"material-icons-svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"#000000\\\" d=\\\"M7.8,2H16.2C19.4,2 22,4.6 22,7.8V16.2A5.8,5.8 0 0,1 16.2,22H7.8C4.6,22 2,19.4 2,16.2V7.8A5.8,5.8 0 0,1 7.8,2M7.6,4A3.6,3.6 0 0,0 4,7.6V16.4C4,18.39 5.61,20 7.6,20H16.4A3.6,3.6 0 0,0 20,16.4V7.6C20,5.61 18.39,4 16.4,4H7.6M17.25,5.5A1.25,1.25 0 0,1 18.5,6.75A1.25,1.25 0 0,1 17.25,8A1.25,1.25 0 0,1 16,6.75A1.25,1.25 0 0,1 17.25,5.5M12,7A5,5 0 0,1 17,12A5,5 0 0,1 12,17A5,5 0 0,1 7,12A5,5 0 0,1 12,7M12,9A3,3 0 0,0 9,12A3,3 0 0,0 12,15A3,3 0 0,0 15,12A3,3 0 0,0 12,9Z\\\" /></svg>\"\n                },\n                \"pinterest\": {\n                    frontend: \"Pinterest\",\n                    backend: \"pinterest\",\n                    image: \"<svg class=\\\"material-icons-svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"#000000\\\" d=\\\"M9.04,21.54C10,21.83 10.97,22 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2A10,10 0 0,0 2,12C2,16.25 4.67,19.9 8.44,21.34C8.35,20.56 8.26,19.27 8.44,18.38L9.59,13.44C9.59,13.44 9.3,12.86 9.3,11.94C9.3,10.56 10.16,9.53 11.14,9.53C12,9.53 12.4,10.16 12.4,10.97C12.4,11.83 11.83,13.06 11.54,14.24C11.37,15.22 12.06,16.08 13.06,16.08C14.84,16.08 16.22,14.18 16.22,11.5C16.22,9.1 14.5,7.46 12.03,7.46C9.21,7.46 7.55,9.56 7.55,11.77C7.55,12.63 7.83,13.5 8.29,14.07C8.38,14.13 8.38,14.21 8.35,14.36L8.06,15.45C8.06,15.62 7.95,15.68 7.78,15.56C6.5,15 5.76,13.18 5.76,11.71C5.76,8.55 8,5.68 12.32,5.68C15.76,5.68 18.44,8.15 18.44,11.43C18.44,14.87 16.31,17.63 13.26,17.63C12.29,17.63 11.34,17.11 11,16.5L10.33,18.87C10.1,19.73 9.47,20.88 9.04,21.57V21.54Z\\\" /></svg>\"\n                },\n                \"skype\": {\n                    frontend: \"Skype\",\n                    backend: \"skype\",\n                    image: \"<svg class=\\\"material-icons-svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"#000000\\\" d=\\\"M18,6C20.07,8.04 20.85,10.89 20.36,13.55C20.77,14.27 21,15.11 21,16A5,5 0 0,1 16,21C15.11,21 14.27,20.77 13.55,20.36C10.89,20.85 8.04,20.07 6,18C3.93,15.96 3.15,13.11 3.64,10.45C3.23,9.73 3,8.89 3,8A5,5 0 0,1 8,3C8.89,3 9.73,3.23 10.45,3.64C13.11,3.15 15.96,3.93 18,6M12.04,17.16C14.91,17.16 16.34,15.78 16.34,13.92C16.34,12.73 15.78,11.46 13.61,10.97L11.62,10.53C10.86,10.36 10,10.13 10,9.42C10,8.7 10.6,8.2 11.7,8.2C13.93,8.2 13.72,9.73 14.83,9.73C15.41,9.73 15.91,9.39 15.91,8.8C15.91,7.43 13.72,6.4 11.86,6.4C9.85,6.4 7.7,7.26 7.7,9.54C7.7,10.64 8.09,11.81 10.25,12.35L12.94,13.03C13.75,13.23 13.95,13.68 13.95,14.1C13.95,14.78 13.27,15.45 12.04,15.45C9.63,15.45 9.96,13.6 8.67,13.6C8.09,13.6 7.67,14 7.67,14.57C7.67,15.68 9,17.16 12.04,17.16Z\\\" /></svg>\"\n                },\n                \"twitter\": {\n                    frontend: \"Twitter\",\n                    backend: \"twitter\",\n                    image: \"<svg class=\\\"material-icons-svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"#000000\\\" d=\\\"M22.46,6C21.69,6.35 20.86,6.58 20,6.69C20.88,6.16 21.56,5.32 21.88,4.31C21.05,4.81 20.13,5.16 19.16,5.36C18.37,4.5 17.26,4 16,4C13.65,4 11.73,5.92 11.73,8.29C11.73,8.63 11.77,8.96 11.84,9.27C8.28,9.09 5.11,7.38 3,4.79C2.63,5.42 2.42,6.16 2.42,6.94C2.42,8.43 3.17,9.75 4.33,10.5C3.62,10.5 2.96,10.3 2.38,10C2.38,10 2.38,10 2.38,10.03C2.38,12.11 3.86,13.85 5.82,14.24C5.46,14.34 5.08,14.39 4.69,14.39C4.42,14.39 4.15,14.36 3.89,14.31C4.43,16 6,17.26 7.89,17.29C6.43,18.45 4.58,19.13 2.56,19.13C2.22,19.13 1.88,19.11 1.54,19.07C3.44,20.29 5.7,21 8.12,21C16,21 20.33,14.46 20.33,8.79C20.33,8.6 20.33,8.42 20.32,8.23C21.16,7.63 21.88,6.87 22.46,6Z\\\" /></svg>\"\n                },\n                \"youtube\": {\n                    frontend: \"Youtube\",\n                    backend: \"youtube\",\n                    image: \"<svg class=\\\"material-icons-svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"#000000\\\" d=\\\"M10,15L15.19,12L10,9V15M21.56,7.17C21.69,7.64 21.78,8.27 21.84,9.07C21.91,9.87 21.94,10.56 21.94,11.16L22,12C22,14.19 21.84,15.8 21.56,16.83C21.31,17.73 20.73,18.31 19.83,18.56C19.36,18.69 18.5,18.78 17.18,18.84C15.88,18.91 14.69,18.94 13.59,18.94L12,19C7.81,19 5.2,18.84 4.17,18.56C3.27,18.31 2.69,17.73 2.44,16.83C2.31,16.36 2.22,15.73 2.16,14.93C2.09,14.13 2.06,13.44 2.06,12.84L2,12C2,9.81 2.16,8.2 2.44,7.17C2.69,6.27 3.27,5.69 4.17,5.44C4.64,5.31 5.5,5.22 6.82,5.16C8.12,5.09 9.31,5.06 10.41,5.06L12,5C16.19,5 18.8,5.16 19.83,5.44C20.73,5.69 21.31,6.27 21.56,7.17Z\\\" /></svg>\"\n                },\n                \"label_off\": {\n                    frontend: \"Label Off\",\n                    backend: \"label_off\",\n                    image: \"<svg class=\\\"material-icons-svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"#000000\\\" d=\\\"M3.25 2.75l17 17L19 21l-2-2H5c-1.1 0-2-.9-2-2V7c0-.55.23-1.05.59-1.41L2 4l1.25-1.25zM22 12l-4.37-6.16C17.27 5.33 16.67 5 16 5H8l11 11 3-4z\\\"/></svg>\"\n                },\n                \"group_add\": {\n                    frontend: \"Group Add\",\n                    backend: \"group_add\",\n                    image: \"<svg class=\\\"material-icons-svg\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M0 20v-2.8q0-.85.438-1.563.437-.712 1.162-1.087 1.55-.775 3.15-1.163Q6.35 13 8 13t3.25.387q1.6.388 3.15 1.163.725.375 1.162 1.087Q16 16.35 16 17.2V20Zm8-8q-1.65 0-2.825-1.175Q4 9.65 4 8q0-1.65 1.175-2.825Q6.35 4 8 4q1.65 0 2.825 1.175Q12 6.35 12 8q0 1.65-1.175 2.825Q9.65 12 8 12Zm4.5-.05q.725-.8 1.113-1.825Q14 9.1 14 8t-.387-2.125Q13.225 4.85 12.5 4.05q1.5.2 2.5 1.325T16 8q0 1.5-1 2.625t-2.5 1.325ZM18 20v-3q0-.9-.4-1.712-.4-.813-1.05-1.438 1.275.45 2.363 1.162Q20 15.725 20 17v3Zm2-7v-2h-2V9h2V7h2v2h2v2h-2v2Z\\\"/></svg>\"\n                },\n                \"group_remove\": {\n                    frontend: \"Group Remove\",\n                    backend: \"group_remove\",\n                    image: \"<svg class=\\\"material-icons-svg\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M12.5 11.95q.725-.8 1.113-1.825Q14 9.1 14 8t-.387-2.125Q13.225 4.85 12.5 4.05q1.5.2 2.5 1.325T16 8q0 1.5-1 2.625t-2.5 1.325ZM18 20v-3q0-.9-.4-1.712-.4-.813-1.05-1.438 1.275.45 2.363 1.162Q20 15.725 20 17v3Zm6-9h-6V9h6ZM8 12q-1.65 0-2.825-1.175Q4 9.65 4 8q0-1.65 1.175-2.825Q6.35 4 8 4q1.65 0 2.825 1.175Q12 6.35 12 8q0 1.65-1.175 2.825Q9.65 12 8 12Zm-8 8v-2.8q0-.85.438-1.563.437-.712 1.162-1.087 1.55-.775 3.15-1.163Q6.35 13 8 13t3.25.387q1.6.388 3.15 1.163.725.375 1.162 1.087Q16 16.35 16 17.2V20Z\\\"/></svg>\"\n                },\n                \"diversity_1\": {\n                    frontend: \"Diversity 1\",\n                    backend: \"diversity_1\",\n                    image: \"<svg class=\\\"material-icons-svg\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M.95 13.3q-.45-.9-.7-1.825Q0 10.55 0 9.6q0-2.8 1.9-4.7Q3.8 3 6.6 3q1.575 0 3 .662 1.425.663 2.4 1.838.975-1.175 2.4-1.838Q15.825 3 17.4 3q2.8 0 4.7 1.9Q24 6.8 24 9.6q0 .95-.25 1.875t-.7 1.825q-.275-.475-.65-.85t-.875-.6q.225-.575.35-1.125Q22 10.175 22 9.6q0-1.95-1.325-3.275T17.4 5q-2.025 0-3.112 1.112Q13.2 7.225 12 8.6q-1.2-1.4-2.287-2.5Q8.625 5 6.6 5 4.65 5 3.325 6.325T2 9.6q0 .575.125 1.125t.35 1.125q-.5.225-.875.6t-.65.85ZM0 22v-1.575q0-1.1 1.113-1.762Q2.225 18 4 18q.325 0 .625.012.3.013.575.063-.35.5-.525 1.075-.175.575-.175 1.225V22Zm6 0v-1.625q0-1.625 1.663-2.625 1.662-1 4.337-1 2.7 0 4.35 1 1.65 1 1.65 2.625V22Zm13.5 0v-1.625q0-.65-.163-1.225-.162-.575-.487-1.075.275-.05.563-.063Q19.7 18 20 18q1.8 0 2.9.663 1.1.662 1.1 1.762V22ZM4 17q-.825 0-1.412-.587Q2 15.825 2 15q0-.85.588-1.425Q3.175 13 4 13q.85 0 1.425.575Q6 14.15 6 15q0 .825-.575 1.413Q4.85 17 4 17Zm16 0q-.825 0-1.413-.587Q18 15.825 18 15q0-.85.587-1.425Q19.175 13 20 13q.85 0 1.425.575Q22 14.15 22 15q0 .825-.575 1.413Q20.85 17 20 17Zm-8-1q-1.25 0-2.125-.875T9 13q0-1.275.875-2.137Q10.75 10 12 10q1.275 0 2.137.863Q15 11.725 15 13q0 1.25-.863 2.125Q13.275 16 12 16Z\\\"/></svg>\"\n                },\n                \"punch_clock\": {\n                    frontend: \"Punch Clock\",\n                    backend: \"punch_clock\",\n                    image: \"<svg class=\\\"material-icons-svg\\\" viewBox=\\\"0 0 24 24\\\"><path d=\\\"M5 22q-.825 0-1.413-.587Q3 20.825 3 20V8q0-.825.587-1.412Q4.175 6 5 6h1V1h12v5h1q.825 0 1.413.588Q21 7.175 21 8v12q0 .825-.587 1.413Q19.825 22 19 22ZM8 6h8V3H8Zm4 8Zm0 4.2q1.725 0 2.963-1.238Q16.2 15.725 16.2 14t-1.237-2.963Q13.725 9.8 12 9.8t-2.962 1.237Q7.8 12.275 7.8 14t1.238 2.962Q10.275 18.2 12 18.2Zm1.15-2.35L11.5 14.2v-2.7h1v2.3l1.35 1.35Z\\\"/></svg>\"\n                },\n                \"punch_clock_white\": {\n                    frontend: \"Punch Clock White\",\n                    backend: \"punch_clock_white\",\n                    image: \"<svg class=\\\"material-icons-svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"#FFFFFF\\\" d=\\\"M5 22q-.825 0-1.413-.587Q3 20.825 3 20V8q0-.825.587-1.412Q4.175 6 5 6h1V1h12v5h1q.825 0 1.413.588Q21 7.175 21 8v12q0 .825-.587 1.413Q19.825 22 19 22ZM8 6h8V3H8Zm4 8Zm0 4.2q1.725 0 2.963-1.238Q16.2 15.725 16.2 14t-1.237-2.963Q13.725 9.8 12 9.8t-2.962 1.237Q7.8 12.275 7.8 14t1.238 2.962Q10.275 18.2 12 18.2Zm1.15-2.35L11.5 14.2v-2.7h1v2.3l1.35 1.35Z\\\"/></svg>\"\n                },\n                \"whatsapp\": {\n                    frontend: \"WhatsApp\",\n                    backend: \"whatsapp\",\n                    image: \"<svg class=\\\"material-icons-svg\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"#000000\\\" d=\\\"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413Z\\\"/></svg>\"\n                    // add svg's here for some icons\n                } });\n\n            this.set(\"socialIcons\", {\n                \"FACEBOOK\": {\n                    frontend: \"Facebook\",\n                    backend: \"facebook\"\n                },\n                \"INSTAGRAM\": {\n                    frontend: \"Instagram\",\n                    backend: \"instagram\"\n                },\n                \"PINTEREST\": {\n                    frontend: \"Pinterest\",\n                    backend: \"pinterest\"\n                },\n                \"SKYPE\": {\n                    frontend: \"Skype\",\n                    backend: \"skype\"\n                },\n                \"TWITTER\": {\n                    frontend: \"Twitter\",\n                    backend: \"twitter\"\n                },\n                \"YOUTUBE\": {\n                    frontend: \"Youtube\",\n                    backend: \"youtube\"\n                },\n                \"WHATSAPP\": {\n                    frontend: \"WhatsApp\",\n                    backend: \"whatsapp\"\n                }\n            });\n\n            this.set(\"assignmentStatus\", {\n                \"NEW\": {\n                    \"backend\": \"New\",\n                    \"frontend\": objStrings.getString(\"new\")\n                },\n                \"ACCEPTED\": {\n                    \"backend\": \"Accepted\",\n                    \"frontend\": objStrings.getString(\"accepted\")\n                },\n                \"CLOSED\": {\n                    \"backend\": \"Closed\",\n                    \"frontend\": objStrings.getString(\"closed\")\n                },\n                \"CANCELLED\": {\n                    \"backend\": \"Cancelled\",\n                    \"frontend\": objStrings.getString(\"cancelled\")\n                },\n                \"REOPENED\": {\n                    \"backend\": \"Reopened\",\n                    \"frontend\": objStrings.getString(\"reopened\")\n                }\n            });\n\n            this.set(\"activitySubjectTypes\", {\n                \"CANDIDATE\": {\n                    \"backend\": \"candidate\",\n                    \"frontend\": objStrings.getString(\"candidate\")\n                },\n                \"CLIENT\": {\n                    \"backend\": \"client\",\n                    \"frontend\": objStrings.getString(\"client\")\n                }\n            });\n\n            this.set(\"conversationTypes\", {\n                \"CANDIDATE_SUPPORT\": {\n                    \"backend\": \"candidate_support\",\n                    \"frontend\": objStrings.getString(\"candidateSupport\")\n                },\n                \"CANDIDATE_SUPPORT_INITIATED\": {\n                    \"backend\": \"candidate_support_initiated\",\n                    \"frontend\": objStrings.getString(\"candidateSupportInitiated\")\n                },\n                \"CLIENT_SUPPORT\": {\n                    \"backend\": \"client_support\",\n                    \"frontend\": objStrings.getString(\"clientSupport\")\n                },\n                \"CLIENT_SUPPORT_INITIATED\": {\n                    \"backend\": \"client_support_initiated\",\n                    \"frontend\": objStrings.getString(\"clientSupportInitiated\")\n                },\n                \"GUEST_SUPPORT\": {\n                    \"backend\": \"guest_support\",\n                    \"frontend\": objStrings.getString(\"guestSupport\")\n                }\n            });\n\n            this.set(\"conversationTypesAgencyGroup\", {\n                \"CANDIDATE_SUPPORT\": {\n                    \"backend\": \"candidate_support\",\n                    \"frontend\": objStrings.getString(\"candidateSupport\")\n                },\n                \"CANDIDATE_SUPPORT_INITIATED\": {\n                    \"backend\": \"candidate_support_initiated\",\n                    \"frontend\": objStrings.getString(\"candidateSupportInitiated\")\n                },\n                \"GUEST_SUPPORT\": {\n                    \"backend\": \"guest_support\",\n                    \"frontend\": objStrings.getString(\"guestSupport\")\n                }\n            });\n\n            this.set(\"conversationMedium\", {\n                \"SMS\": {\n                    \"backend\": \"sms\",\n                    \"frontend\": objStrings.getString(\"sms\")\n                },\n                \"CHAT\": {\n                    \"backend\": \"chat\",\n                    \"frontend\": objStrings.getString(\"chat\")\n                },\n                \"WHATSAPP\": {\n                    \"backend\": \"whatsapp\",\n                    \"frontend\": objStrings.getString(\"whatsapp\")\n                }\n            });\n        },\n\n        getMaterialSvgIcon: function getMaterialSvgIcon(sIconRef) {\n            var sImage = this.get(\"customMaterialSvgIcons.\" + sIconRef + \".image\");\n            if (a24Core.isEmpty(sImage)) {\n                return \"<svg class=\\\"material-icons-svg\\\" viewBox=\\\"0 0 24 24\\\"></svg>\";\n            } else {\n                return sImage;\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/a24-strings-staffshift-core\", [\"exports\", \"a24-ember-lookup/services/a24-strings-base\"], function (exports, _a24StringsBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _a24StringsBase.default.extend({\n        _objStrings: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            this.set(\"_objStrings\", {\n\n                //===== STRINGS START =====\n                keywords: \"Keywords\",\n                open: \"Open\",\n                closed: \"Closed\",\n                closing: \"Closing\",\n                orphan: \"Orphan\",\n                closedDate: \"Closed Date\",\n                participants: \"Participants\",\n                team: \"Team\",\n                conversations: \"Conversations\",\n                current: \"Current\",\n                archived: \"Archived\",\n                reload: \"Reload\",\n                goToConversation: \"Go to Conversation\",\n                conversationPreview: \"Conversation Preview\",\n                openConversationPreview: \"Open Conversation Preview\",\n                failedToLoadConversationPreview: \"Failed to load Conversation Preview\",\n\n                notificationPreview: \"Notification Preview\",\n\n                statusReason: \"Status Reason\",\n\n                candidate: \"Candidate\",\n                agency: \"Agency\",\n                agencyGroup: \"Agency Group\",\n                organisation: \"Organisation\",\n                systemAdmin: \"System Admin\",\n\n                contextWrongIp: \"Your not allowed to access this context at this time. Please try using a different context.\",\n\n                incorrectLoginDetails: \"Either the Email or Password entered was incorrect\",\n                wantsAccess: \" wants to get information from your Staffshift Account\",\n                welcomeMessage: \"Please select an item from the menu on the left to get started\",\n                supportChat: \"Support Chat\",\n                forgotYourPassword: \"Forgot Your Password?\",\n                bySubmittingThisForm: \"By submitting this form, you will receive an email to reset your password.<br/>To complete the process you will need to follow the instructions set out in the email.\",\n                emailNotInDatabase: \"The email address/username you have entered does not appear in our database, please enter the correct email address or username.\",\n                resetPasswordEmailSent: \"An email to reset your password has been sent\",\n                usernameEmail: \"Username/Email\",\n                resetPassword: \"Reset Password\",\n                signIn: \"Sign In\",\n                submit: \"Submit\",\n\n                inbox: \"Inbox\",\n\n                openInNewTab: \"Open in new tab\",\n                viewCandidate: \"View Candidate\",\n                openCalendarInNewTab: \"Open calendar in new tab\",\n                viewCandidateCalendar: \"View Calendar\",\n\n                candidateSearch: \"Candidate Search\",\n                type: \"Type\",\n                fullName: \"Full Name\",\n                userNotActive: \"We do not have an active profile for this email address. Please contact us if you need further help.\",\n                lastShiftDate: \"Last Shift Date\",\n                nextShiftDate: \"Next Shift Date\",\n                lastLoggedIn: \"Last Logged In\",\n\n                belongsToSite: \"Belongs to Site\",\n                andWardName: \"And Ward Name is\",\n                sessionData: \"Session Data\",\n                techData: \"Tech Data\",\n                userData: \"User Data\",\n                timeOnPage: \"Time on page\",\n                device: \"Device\",\n                browser: \"Browser\",\n                version: \"Version\",\n                screen: \"Screen\",\n                os: \"OS\",\n                context: \"Context\",\n                currentTime: \"Current time\",\n                locale: \"Locale\",\n                timezone: \"Timezone\",\n                timezoneOffset: \"Timezone Offset\",\n                currentPage: \"Current page\",\n                supportsVideoCalls: \"Supports Video Calls\",\n                page: \"Page\",\n                url: \"URL\",\n                user: \"User\",\n                username: \"Username\",\n                emailVerified: \"Email verified\",\n                lastEmailVerifySent: \"Verify email last sent\",\n                needAnyHelp: \"Need any help? Just click here!\",\n                help: \"Help\",\n                speakToAConsultant: \"Speak to a consultant\",\n\n                new: \"New\",\n                accepted: \"Accepted\",\n                cancelled: \"Cancelled\",\n                reopened: \"Reopened\",\n\n                sms: \"SMS\",\n                whatsapp: \"WhatsApp\",\n                notificationType: \"Notification Type\",\n                sendDate: \"Send Date\",\n                recipientName: \"Recipient Name\",\n                recipientNumber: \"Recipient Number\",\n                senderNumber: \"Sender Number\",\n\n                noNotificationTypeSupport: \"Notification type preview not supported yet. We are currently working on a way to show this\",\n                failedToGenerateNotificationPreview: \"Could not generate preview of message due to the message not being delivered yet. Check if the candidate's mobile number is correct and then retry the notification. If the candidate's mobile number is correct then please check back here in a few minutes.\",\n                failedToGenerateNotificationPreviewOptOut: \"Could not generate preview of message due to the candidate having opted out of receiving the message.\",\n\n                deliveryStatus: \"Delivery Status\",\n                deliveryFailureReason: \"Delivery Failure Reason\",\n                from: \"From\",\n                to: \"To\",\n                cc: \"CC\",\n                bcc: \"BCC\",\n                replyTo: \"Reply to\",\n                numberOfOccurrences: \"Number of occurrences\",\n                lastOccurredAt: \"Last occurred at\",\n                emailPreview: \"Email Preview\",\n                notificationDetails: \"Notification Details\",\n                notificationsSent: \"Notifications sent:\",\n                notificationOptOut: \"The candidate has opted out of receiving this notification.\",\n                viewNotificationPreview: \"View Notification Preview\",\n                couldNotLoadNotificationPreview: \"Could not load the notification preview, please try again\",\n                couldNotLoadNotificationSentInformation: \"Could not load the notification sent information, please try again\",\n                couldNotLoadEmailPreview: \"Could not load the email preview, please try again\",\n                couldNotLoadConversationEmailPreview: \"Could not load the conversation preview, please try again\",\n                client: \"Client\",\n\n                candidateSupport: \"Candidate Support\",\n                systemSupport: \"System Support\",\n                candidateSupportInitiated: \"Candidate Support Initiated\",\n                systemSupportInitiated: \"System Support Initiated\",\n                clientSupport: \"Client Support\",\n                clientSupportInitiated: \"Client Support Initiated\",\n                guestSupport: \"Guest Support\",\n\n                chat: \"Chat\",\n                viewConversationPreview: \"View Conversation Preview\",\n\n                listConversations: \"List Conversations\",\n                conversationWith: \"Conversation With\",\n                medium: \"Medium\",\n                createdAt: \"Created At\",\n                closedAt: \"Closed At\",\n                updatedAt: \"Updated At\",\n                closedBy: \"Closed By\",\n                teamName: \"Team Name\",\n                participant: \"Participant\",\n\n                //===== STRINGS END   =====\n\n                //===== SAFE STRINGS START =====\n\n                updateItemDelay: \"Please note that updates might take a while to reflect here.</br>Check back later or refresh page to try again\",\n\n                apiUnavailablePleaseReload: \"<i class='a24-material-text-icons material-icons warning-color-text'>warning</i> Failed to retrieve data from server.<br/>Please click the reload icon at the top right of this card to try again.\",\n                conversationNoPreview: \"<div class='a24-conversation-no-preview'>Preview can not be viewed as conversations is still 'Open'. In order to view the conversation, click on 'Inbox' in the left menu, then open the chat of the candidate.</div>\",\n                conversationNoData: \"<div class='a24-conversation-no-preview'>No Conversation Data</div>\",\n                noMessages: \"<div class='a24-conversation-no-preview'>No Messages</div>\",\n                //===== SAFE STRINGS END =====\n\n                //===== TOKEN STRINGS START =====\n\n                currentlyLoggedIn: \"{0} You are currently logged in as \",\n                iconAndText: \"<div class='position-relative icon-and-text'><i class='a24-material-text-icons-column-wrap material-icons'>{0}</i> <div class='padding-left-double'>{1}</div></div>\",\n                clickHereWithIcon: \"Click here <i class='material-icons a24-material-text-icons-no-color'>open_in_new</i>\",\n\n                //NOTE this is meant to be temporary since a having a unstyled tooltip is better than\n                //none(dtagrid also works the same currently)\n                tooltipOnString: \"<span title='{0}'>{1}</span>\"\n\n                //===== TOKEN STRINGS END =====\n            });\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/candidate-type-tabs\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        /**\n         * Will check if there is more than one unique country code\n         * then it will append the country code to the name.\n         *\n         * @param array arrTabNames - The Tabs Names\n         *\n         * @author Langton Mudyiwa <langton.mudyiwa@a24group.com>\n         * @since  06 June 2019\n         *\n         * @return array of names changed\n         */\n        generateCandidatesTypes: function generateCandidatesTypes(arrTabNames) {\n\n            var arrTabNamesChanged = Ember.copy(arrTabNames, true);\n            var bFound = false;\n            if (!a24Core.isEmpty(arrTabNamesChanged)) {\n                var sCountryCode = arrTabNamesChanged[0].country_code;\n                for (var i = 1; i < arrTabNamesChanged.length; i++) {\n                    if (sCountryCode !== arrTabNamesChanged[i].country_code) {\n                        bFound = true;\n                        break;\n                    }\n                }\n\n                if (bFound) {\n                    for (var l = 0; l < arrTabNamesChanged.length; l++) {\n                        arrTabNamesChanged[l].name = arrTabNamesChanged[l].name + \" (\" + arrTabNamesChanged[l].country_code.toUpperCase() + \")\";\n                    }\n                }\n            }\n\n            arrTabNamesChanged.sort(function (objA, objB) {\n                if (objA.name.toLowerCase() < objB.name.toLowerCase()) {\n                    return -1;\n                }\n                if (objA.name.toLowerCase() > objB.name.toLowerCase()) {\n                    return 1;\n                }\n                return 0;\n            });\n\n            return arrTabNamesChanged;\n        },\n        /**\n         * Will remove duplicates from the array of candidate types, then build an\n         * array of tabs, sorted by name, using the candidate type and position type data\n         *\n         * @param array arrCandidateTypes - The candidate types\n         * @param array arrPositionTypes - The position types\n         *\n         * @author Langton Mudyiwa <langton.mudyiwa@a24group.com>\n         * @since  06 June 2019\n         *\n         * @return array of tabs\n         */\n        generateCandidateTypesTabs: function generateCandidateTypesTabs(arrCandidateTypes, arrPositionTypes) {\n            var arrTabNames = [];\n            var arrTabs = [];\n            var objTabName = null;\n\n            if (a24Core.isEmpty(arrCandidateTypes)) {\n                return arrTabs;\n            }\n\n            var arrDistinctCandidateTypes = arrCandidateTypes.filter(function (sValue, sIndex, sSelf) {\n                return sSelf.indexOf(sValue) === sIndex;\n            });\n\n            // Build up the string name for the tab\n            for (var i = 0; i < arrDistinctCandidateTypes.length; i++) {\n                for (var j = 0; j < arrPositionTypes.length; j++) {\n                    objTabName = null;\n                    if (arrDistinctCandidateTypes[i] === arrPositionTypes[j].code) {\n                        objTabName = {\n                            name: arrPositionTypes[j].name,\n                            code: arrPositionTypes[j].code,\n                            country_code: arrPositionTypes[j].country_code\n                        };\n                        break;\n                    }\n                }\n                if (!a24Core.isEmpty(objTabName)) {\n                    arrTabNames.push(objTabName);\n                }\n            }\n\n            var arrTabNamesChanged = this.generateCandidatesTypes(arrTabNames);\n\n            // Build up the tab object for the tabs\n            for (var l = 0; l < arrTabNamesChanged.length; l++) {\n                arrTabs.push({\n                    iIndex: l,\n                    bActive: l === 0 ? true : false,\n                    sText: arrTabNamesChanged[l].name,\n                    sCode: arrTabNamesChanged[l].code\n                });\n            }\n\n            return arrTabs;\n        }\n\n    });\n});","define(\"a24-ember-staffshift-core/services/card-datagrid-custom-filter-ward\", [\"exports\", \"a24-ember-lib/services/card-datagrid-filter-custom-base\"], function (exports, _cardDatagridFilterCustomBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _cardDatagridFilterCustomBase.default.extend({\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _arrRegistrationBodies: null,\n\n        funcFilterCustomPrimaryQuery: function funcFilterCustomPrimaryQuery(objHeaderItem /*, objHeaderSecondaries */) {\n            var arrItems = Ember.get(objHeaderItem, \"_arrFilterWard\");\n            var arrIds = [];\n            var arrNames = [];\n            if (!a24Core.isEmpty(arrItems)) {\n                for (var j = 0; j < arrItems.length; j++) {\n                    arrIds.push(arrItems[j].ward_id);\n                    arrNames.push(arrItems[j].ward_name);\n                }\n            }\n            var sQuery = arrIds.join(\"|\");\n            var sFilterValue = arrNames.join(\", \");\n            if (a24Core.isEmpty(sQuery.trim())) {\n                sQuery = null;\n            }\n            var objQuery = {\n                bEncode: true,\n                bDelimited: true,\n                sFilterValue: Ember.get(objHeaderItem, \"_objFilterSite.sSiteName\") + \": \" + sFilterValue,\n                mValue: sQuery,\n                arSec: [{\n                    sProp: \"site_id\",\n                    bEncode: true,\n                    mValue: Ember.get(objHeaderItem, \"_objFilterSite.sSiteId\"),\n                    sFilterValue: Ember.get(objHeaderItem, \"_objFilterSite.sSiteName\"),\n                    sOrg: Ember.get(objHeaderItem, \"_objFilterSite.sOrganisationId\"),\n                    sOrgName: Ember.get(objHeaderItem, \"_objFilterSite.sOrganisationName\")\n                }]\n            };\n\n            return objQuery;\n        },\n\n        funcFilterCustomTag: function funcFilterCustomTag(objHeaderItem, objQuery, objHeadersSecondaries, bSkipTitle) {\n            var sIs = this.get(\"_objStringsService\").getString(\"is\");\n            if (bSkipTitle) {\n                return {\n                    sTag: sIs + \" \" + objQuery.sFilterValue\n                };\n            } else {\n                return {\n                    sTag: Ember.get(objHeaderItem, \"sTitle\") + \" \" + sIs.toLowerCase() + \" \" + objQuery.sFilterValue\n                };\n            }\n        },\n\n        funcFilterCustomPrimaryReset: function funcFilterCustomPrimaryReset(objHeaderItem) {\n            //Reset the state of the custom filter input\n            Ember.set(objHeaderItem, \"_objFilterSite\", null);\n            Ember.set(objHeaderItem, \"_arrFilterWard\", null);\n            Ember.set(objHeaderItem, \"_objFilterWardsSelected\", null);\n            Ember.set(objHeaderItem, \"_objFilterWardsDropdown\", []);\n        },\n\n        funcFilterCustomFixupQuery: function funcFilterCustomFixupQuery() /*objHeader, objHeaderSecondaries */{\n            // N/A\n        },\n\n        funcFilterCustomSetEditState: function funcFilterCustomSetEditState(objHeaderItem, iIndex) {\n            var objTag = Ember.get(objHeaderItem, \"mFilterValue.\" + iIndex);\n\n            var arrItems = objTag.mValue.split(\"|\");\n            var arrWards = [];\n            for (var j = 0; j < arrItems.length; j++) {\n                arrWards.push({\n                    ward_id: arrItems[j]\n                });\n            }\n\n            Ember.set(objHeaderItem, \"_arrFilterWard\", arrWards);\n            Ember.set(objHeaderItem, \"_objFilterSite\", {\n                sSiteId: objTag.arSec[0].mValue,\n                sSiteName: objTag.arSec[0].sFilterValue,\n                sDisplayName: objTag.arSec[0].sOrgName + \": \" + objTag.arSec[0].sFilterValue,\n                sOrganisationId: objTag.arSec[0].sOrg,\n                sOrganisationName: objTag.arSec[0].sOrgName\n            });\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/chat-boxes-service-base\", [\"exports\", \"a24-ember-window/mixins/a24responsive\"], function (exports, _a24responsive) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend(_a24responsive.default, {\n        media: Ember.inject.service(\"media\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objTriageMenu: Ember.inject.service(\"triage-menu\"),\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objBreadCrumbService: Ember.inject.service(\"bread-crumb\"),\n        _objConstantsWindowService: Ember.inject.service(\"a24-constants-window\"),\n\n        _bHideChat: true,\n        _objPostData: null,\n\n        bShowNotificationIcon: false,\n        iNotificationCount: 0,\n\n        observeNotificationCount: Ember.observer(\"iNotificationCount\", function () {\n            this.set(\"bShowNotificationIcon\", this.get(\"iNotificationCount\") ? true : false);\n        }),\n\n        _isMobile: Ember.computed(\"sScreenSize\", function () {\n            var isMobile = this.get(\"sScreenSize\") === this.get(\"_objConstantsWindowService\").MEDIA_SIZE_TINY || this.get(\"sScreenSize\") === this.get(\"_objConstantsWindowService\").MEDIA_SIZE_MOBILE;\n            return isMobile;\n        }),\n\n        setNotificationCount: function setNotificationCount(iCount) {\n            this.set(\"iNotificationCount\", iCount);\n        },\n\n        addChatBoxClasses: function addChatBoxClasses() {\n            if (this.get(\"_isMobile\")) {\n                if (!$(\".navigation-bar\").hasClass(\"mobile-chat-box-nav-bar\")) {\n                    $(\".navigation-bar\").addClass(\"mobile-chat-box-nav-bar\");\n                }\n                if (!$(\".main-page\").hasClass(\"mobile-chat-box-main-page\")) {\n                    $(\".main-page\").addClass(\"mobile-chat-box-main-page\");\n                }\n                if (!$(\".main-container\").hasClass(\"mobile-chat-box-main-container\")) {\n                    $(\".main-container\").addClass(\"mobile-chat-box-main-container\");\n                }\n                if (!$(\".a24-chat-box-container\").hasClass(\"mobile-a24-chat-box-container\")) {\n                    $(\".a24-chat-box-container\").addClass(\"mobile-a24-chat-box-container\");\n                }\n                if (!$(\".right-panel-container\").hasClass(\"mobile-chat-box-right-panel\")) {\n                    $(\".right-panel-container\").addClass(\"mobile-chat-box-right-panel\");\n                }\n            }\n        },\n\n        removeChatBoxClasses: function removeChatBoxClasses() {\n            $(\".navigation-bar\").removeClass(\"mobile-chat-box-nav-bar\");\n            $(\".main-page\").removeClass(\"mobile-chat-box-main-page\");\n            $(\".main-container\").removeClass(\"mobile-chat-box-main-container\");\n            $(\".a24-chat-box-container\").removeClass(\"mobile-a24-chat-box-container\");\n            $(\".right-panel-container\").removeClass(\"mobile-chat-box-right-panel\");\n        },\n\n        showChatBox: function showChatBox() {\n            this.set(\"_bHideChat\", false);\n            this.addChatBoxClasses();\n        },\n\n        hideChatBox: function hideChatBox() {\n            this.set(\"_bHideChat\", true);\n            this.removeChatBoxClasses();\n        },\n\n        toggleChatBox: function toggleChatBox() {\n            var hideChat = !this.get(\"_bHideChat\");\n            this.set(\"_bHideChat\", hideChat);\n            if (this.get(\"_isMobile\")) {\n                if (!hideChat) {\n                    this.addChatBoxClasses();\n                } else {\n                    this.removeChatBoxClasses();\n                }\n            }\n        },\n\n        postMessage: function postMessage(objData) {\n            this.set(\"_objPostData\", objData);\n        },\n\n        generateFriendlyPageName: function generateFriendlyPageName() {\n            var sCurrentRoute = this.get(\"_objNavigation.sCurrentRouteName\");\n            if (a24Core.isEmpty(sCurrentRoute)) {\n                //this will be on init load of app\n                return;\n            }\n            var arrRouteParts = sCurrentRoute.split(\".\");\n\n            if (arrRouteParts.length > 2) {\n                //If 3 parts we assume it is a tab item at end so remove that\n                arrRouteParts = arrRouteParts.slice(0, 2);\n            }\n\n            var sCurrentRouteName = arrRouteParts[arrRouteParts.length - 1];\n\n            var sPluginId = null;\n            if (arrRouteParts[arrRouteParts.length - 1] === \"plugin\" && !a24Core.isEmpty(this.get(\"_objNavigation.objRouteParams\")[sCurrentRoute])) {\n                sPluginId = this.get(\"_objNavigation.objRouteParams\")[sCurrentRoute].plugin_id;\n            }\n\n            var sTopLabel = \"\";\n            var sSubLabel = \"\";\n            var sExtraLabel = \"\";\n\n            var arrMenuItems = this.get(\"_objTriageMenu.arrMenuResponse\");\n            if (a24Core.isEmpty(arrMenuItems)) {\n                return;\n            }\n            for (var i = 0; i < arrMenuItems.length; i++) {\n                if (a24Core.isEmpty(sPluginId)) {\n                    for (var j = 0; j < arrMenuItems[i].arrSubmenus.length; j++) {\n                        if (arrMenuItems[i].arrSubmenus[j].sReferencedNamePlaces.indexOf(sCurrentRouteName) !== -1) {\n                            if (arrMenuItems[i].arrSubmenus.length === 1) {\n                                sTopLabel = arrMenuItems[i].arrSubmenus[j].sLabel;\n                                if (arrMenuItems[i].arrSubmenus[j].sPlaceName !== sCurrentRouteName) {\n                                    sSubLabel = sCurrentRouteName;\n                                }\n                            } else {\n                                sTopLabel = arrMenuItems[i].sLabel;\n                                sSubLabel = arrMenuItems[i].arrSubmenus[j].sLabel;\n                                if (arrMenuItems[i].arrSubmenus[j].sPlaceName !== sCurrentRouteName) {\n                                    sExtraLabel = sCurrentRouteName;\n                                }\n                            }\n                        }\n                    }\n                } else {\n                    if (arrMenuItems[i].sPluginId === sPluginId) {\n                        sTopLabel = arrMenuItems[i].sLabel;\n                    }\n                }\n            }\n\n            var objRouteParams = this.get(\"_objNavigation.objRouteParams\");\n            var objRouteParamsFlat = {};\n            for (var sProp in objRouteParams) {\n                if (Object.prototype.hasOwnProperty.call(objRouteParams, sProp)) {\n                    Object.assign(objRouteParamsFlat, objRouteParams[sProp]);\n                }\n            }\n            delete objRouteParamsFlat.context_id;\n\n            var arrBreadTitles = [];\n            var sTitleBar = null;\n            if (a24Core.isEmpty(this.get(\"_objTriageMenu.sTopBarComponent\"))) {\n                var arrBreads = this.get(\"_objBreadCrumbService.arrBreadCrumbItems\");\n                if (!a24Core.isEmpty(arrBreads)) {\n                    for (var k = 0; k < arrBreads.length; k++) {\n                        arrBreadTitles.push(arrBreads[k].sTitle);\n                    }\n                }\n            } else {\n                sTitleBar = this.get(\"_objTitleBarService.sTitle\");\n            }\n\n            var sSelectedTab = null;\n            var arrTabs = this.get(\"_objTitleBarService.arrTabs\");\n            if (!a24Core.isEmpty(arrTabs)) {\n                for (var l = 0; l < arrTabs.length; l++) {\n                    if (arrTabs[l].bActive) {\n                        sSelectedTab = arrTabs[l].sText;\n                        break;\n                    }\n                }\n            }\n\n            var arrFinalStrings = [];\n            if (!a24Core.isEmpty(sTopLabel)) {\n                arrFinalStrings.push(sTopLabel);\n            }\n            if (!a24Core.isEmpty(sSubLabel)) {\n                arrFinalStrings.push(sSubLabel);\n            }\n            if (!a24Core.isEmpty(sExtraLabel)) {\n                arrFinalStrings.push(sExtraLabel);\n            }\n            if (!a24Core.isEmpty(sTitleBar)) {\n                arrFinalStrings[arrFinalStrings.length - 1] = sTitleBar;\n\n                if (!a24Core.isEmpty(sSelectedTab)) {\n                    arrFinalStrings.push(sSelectedTab);\n                }\n            }\n            if (!a24Core.isEmpty(arrBreadTitles)) {\n                if (arrBreadTitles.length > 1) {\n                    if (arrBreadTitles[0] !== sTopLabel) {\n                        arrBreadTitles[0] = sTopLabel;\n                    }\n                    arrFinalStrings = arrBreadTitles;\n                } else {\n                    if (arrBreadTitles[0] !== sTopLabel) {\n                        arrBreadTitles.push(arrBreadTitles[0]);\n                        arrBreadTitles[0] = sTopLabel;\n                    }\n                    arrFinalStrings = arrBreadTitles;\n                }\n            }\n\n            return {\n                sFinalPageName: arrFinalStrings.join(\" / \"),\n                objRouteParams: objRouteParamsFlat\n            };\n        }\n\n    });\n});","define(\"a24-ember-staffshift-core/services/chatter-box-service\", [\"exports\", \"a24-ember-staffshift-core/services/chat-boxes-service-base\"], function (exports, _chatBoxesServiceBase) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _chatBoxesServiceBase.default.extend({});\n});","define(\"a24-ember-staffshift-core/services/chatter-iframe-com\", [\"exports\", \"a24-ember-lib/services/chatter-iframe-com-base\"], function (exports, _chatterIframeComBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _chatterIframeComBase.default.extend({\n        _momentHelper: null,\n        _sPrevVisitTime: null,\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objConstantsSSCore: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            if (a24Core.isEmpty(this.get(\"_momentHelper\"))) {\n                this.set(\"_momentHelper\", momentHelper);\n            }\n        },\n\n        postSessionData: function postSessionData(bNewVisit, sFinalPageName, objRouteParams, sTargetUrl, objTarget) {\n            if (a24Core.isEmpty(this.get(\"_sPrevVisitTime\")) || bNewVisit) {\n                this.set(\"_sPrevVisitTime\", this.get(\"_momentHelper\").getCurrentDateString(a24Constants.DATE_FORMAT_REST_FORMAT));\n            }\n\n            var objBrowser = window.browserReportSync();\n            objBrowser.timezone = this.get(\"_momentHelper\").timezoneGuess();\n            objBrowser.timezone_offset = this._getOffset();\n            objBrowser.timestamp = this.get(\"_sPrevVisitTime\"); //override timestamp so that it is in correct format\n\n            //This will convert from the old triage date format to the \"new\" current app rest format e.g\n            //14 June 2018 07:24:09 +0000\n            //2018-06-14T09:24:09+02:00 -->Note timezone change since it will go to current browser timezone, which is fine\n            //since we will use setDateFromRestAllowTimeAlter on the other side which will correct this.\n            var sVerifyDate = null;\n            if (!a24Core.isEmpty(this.get(\"_objUserSession.objAuthData.identity.dtEmailVerified\"))) {\n                sVerifyDate = this.get(\"_momentHelper\").stringFormat(this.get(\"_objUserSession.objAuthData.identity.dtEmailVerified\"), this.get(\"_objConstantsSSCore\").DATE_FORMAT_TRIAGE_REST_FORMAT, a24Constants.DATE_FORMAT_REST_FORMAT);\n            }\n            var sVerifyEmailLastSentDate = null;\n            if (!a24Core.isEmpty(this.get(\"_objUserSession.objAuthData.identity.dtLastEmailVerificationSent\"))) {\n                sVerifyEmailLastSentDate = this.get(\"_momentHelper\").stringFormat(this.get(\"_objUserSession.objAuthData.identity.dtLastEmailVerificationSent\"), this.get(\"_objConstantsSSCore\").DATE_FORMAT_TRIAGE_REST_FORMAT, a24Constants.DATE_FORMAT_REST_FORMAT);\n            }\n\n            var sCurrentRoute = this.get(\"_objNavigation.sCurrentRouteName\");\n\n            //NOTE The chat app relies on te properies marked as CHAT_USE and should not be removed or moved carelessly\n            var objData = {\n                type: \"user_attributes\",\n                data: {\n                    ss: {\n                        current_page: {\n                            visited_date: this.get(\"_sPrevVisitTime\"), //CHAT_USE\n                            full_url: a24Core.getCurrentUrl(), //CHAT_USE\n                            page_name: sFinalPageName,\n                            page_route_params: objRouteParams,\n                            current_route: sCurrentRoute\n                        },\n                        context: {\n                            id: this.get(\"_objUserSession.objAuthData.context.objReferenceId.mId\"), //CHAT_USE\n                            name: this.get(\"_objUserSession.objAuthData.context.sName\"),\n                            resource: this.get(\"_objUserSession.objAuthData.context.objReferenceId.sResource\"), //CHAT_USE\n                            avatar: this.get(\"_objUserSession.objAuthData.context.sAvatarUrl\"),\n                            timezone: this.get(\"_objUserSession.objContextDetails.sTimezone\"),\n                            locale: this.get(\"_objUserSession.objContextDetails.sLocaleId\")\n                        },\n                        user: {\n                            id: this.get(\"_objUserSession.objAuthData.identity.id\"), //CHAT_USE\n                            first_name: this.get(\"_objUserSession.objAuthData.identity.sFirstName\"), //CHAT_USE\n                            last_name: this.get(\"_objUserSession.objAuthData.identity.sLastName\"), //CHAT_USE\n                            username: this.get(\"_objUserSession.objAuthData.identity.sUsername\"), //CHAT_USE\n                            timezone: this.get(\"_objUserSession.objAuthData.identity.sTimezone\"),\n                            locale: this.get(\"_objUserSession.objAuthData.identity.sLocaleId\"),\n                            email_verified_date: sVerifyDate,\n                            email_last_verify_email_sent_date: sVerifyEmailLastSentDate,\n                            avatar: this.get(\"_objUserSession.objAuthData.identity.sAvatarUrl\"), //CHAT_USE\n                            avatar_thumbnail: this.get(\"_objUserSession.objAuthData.identity.sAvatarThumbnailUrl\") //CHAT_USE\n                        },\n                        browser: objBrowser\n                    }\n                }\n            };\n\n            if (!a24Core.isEmpty(sTargetUrl) && !a24Core.isEmpty(objTarget)) {\n                this.postMessage(JSON.stringify(objData), sTargetUrl, objTarget);\n            }\n\n            return objData;\n        },\n\n        _getOffset: function _getOffset() {\n            return -new Date().getTimezoneOffset();\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/conversation-preview-generator\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objSSCoreStrings: Ember.inject.service(\"a24-strings-staffshift-core\"),\n        _objFormInputsStringsService: Ember.inject.service(\"a24-strings-form-inputs\"),\n        _objSSCoreEnums: Ember.inject.service(\"a24-enums-staffshift-core\"),\n\n        /**\n         * Will generate the entire page for the conversations\n         *\n         * @param object objConversation - The conversation object\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  9 Dec 2019\n         *\n         * @return An html string\n         */\n        generateFullHtmlWithHTMLWrappingFromConversation: function generateFullHtmlWithHTMLWrappingFromConversation(objConversation) {\n            var sHtml = \"\\n            <html>\\n                <head>\\n                    <link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"/assets/a24-ember-staffshift-core/conversation-preview/font.css\\\">\\n                    <link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"/assets/a24-ember-staffshift-core/conversation-preview/style.css\\\">\\n                </head>\\n                <body>\\n                    \" + this.generateFullHtmlFromConversation(objConversation) + \"\\n                </body>\\n            </html>\\n        \";\n\n            return sHtml;\n        },\n\n        /**\n         * Will generate the HTML for the stylesheet\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  8 Jan 2020\n         *\n         * @return An html string\n         */\n        generateFullHtmlForStyleSheet: function generateFullHtmlForStyleSheet() {\n            var sHtml = \"\\n            <link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"/assets/a24-ember-staffshift-core/conversation-preview/style.css\\\">\\n        \";\n\n            // Return a safe version of the html\n            return Ember.String.htmlSafe(sHtml);\n        },\n\n        /**\n         * Will generate the HMTL for the conversations\n         *\n         * @param object objConversation - The conversation object\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  9 Dec 2019\n         *\n         * @return An html safe object\n         */\n        generateFullHtmlFromConversation: function generateFullHtmlFromConversation(objConversation) {\n            var _this = this;\n\n            var arrMessages = [];\n            var bConversationNoData = false;\n            if (objConversation.status !== \"open\") {\n                if (!a24Core.isEmpty(objConversation.message_listing)) {\n                    arrMessages = objConversation.message_listing.map(function (objMessage) {\n                        var sMemberType = \"\";\n                        var objParticipant = objConversation.participant_listing.findBy(\"participant_id\", objMessage.participant_id);\n                        if (!a24Core.isEmpty(objParticipant) && !a24Core.isEmpty(objParticipant.attributes) && !a24Core.isEmpty(objParticipant.attributes.member_type)) {\n                            sMemberType = objParticipant.attributes.member_type;\n                        }\n                        return _this._generateHTMLForMessage(objMessage, sMemberType, objParticipant, objConversation);\n                    });\n                } else {\n                    bConversationNoData = true;\n                }\n            } else {\n                return Ember.String.htmlSafe(this.get(\"_objSSCoreStrings\").getString(\"conversationNoPreview\"));\n            }\n\n            var sHeaderHtml = this._generateHTMLForConversationHeader(objConversation);\n\n            var sMessageHtml = \"\";\n            if (bConversationNoData) {\n                sMessageHtml = Ember.String.htmlSafe(this.get(\"_objSSCoreStrings\").getString(\"noMessages\"));\n            } else {\n                sMessageHtml = \"<div class=\\\"chat-messages-wrapper\" + (a24Core.isEmpty(sHeaderHtml) ? \" full-height\" : \"\") + \"\\\">\\n                    <div class=\\\"chat-messages\\\">\\n                        <ul class=\\\"messages-list\\\">\\n                            \" + arrMessages.join(\"\") + \"\\n                        </ul>\\n                    </div>\\n                </div>\";\n            }\n\n            var sHtml = \"\\n            <div class=\\\"a24-conversation-preview\\\">\\n                \" + sHeaderHtml + \"\\n                \" + sMessageHtml + \"\\n            </div>\\n        \";\n\n            // Return a safe version of the html\n            return Ember.String.htmlSafe(sHtml);\n        },\n\n        /**\n         * Generate a single DOM Node for a conversation header\n         *\n         * @param object objConversation - The conversation object\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  12 Dec 2019\n         *\n         * @return A DOM Node for conversation header\n         */\n        _generateHTMLForConversationHeader: function _generateHTMLForConversationHeader(objConversation) {\n            var objCreatedDate = a24DateManager.createDate(this.get(\"_objUserSession\").get(\"objContextDetails.sTimezone\"));\n            objCreatedDate.setDateFromRest(objConversation.created_at);\n\n            var arrParticipants = objConversation.participant_listing.reduce(function (arrMapping, objParticipant) {\n                if (objParticipant.attributes.member_type === \"chatterbox\") {\n                    if (!a24Core.isEmpty(objConversation.chatterbox_profiles) && (objParticipant.attributes.medium === \"sms\" || objParticipant.attributes.medium === \"whatsapp\")) {\n                        arrMapping.push({\n                            sDisplayName: objConversation.chatterbox_profiles[0].entity_name,\n                            sUserId: objConversation.chatterbox_profiles[0].user_id ? objConversation.chatterbox_profiles[0].user_id : objConversation.chatterbox_profiles[0]._id\n                        });\n                    } else if (!a24Core.isEmpty(objParticipant.attributes) && !a24Core.isEmpty(objParticipant.attributes.authorDisplayName)) {\n                        arrMapping.push({\n                            sDisplayName: objParticipant.attributes.authorDisplayName,\n                            sUserId: objParticipant.user_id\n                        });\n                    }\n                } else {\n                    var objMessage = objConversation.message_listing.findBy(\"participant_id\", objParticipant.participant_id);\n                    if (!a24Core.isEmpty(objMessage)) {\n                        if (objParticipant.attributes.member_type === \"bot\") {\n                            var objBot = objConversation.bots.findBy(\"_id\", objParticipant.identity);\n                            arrMapping.push({\n                                sDisplayName: !a24Core.isEmpty(objBot) ? objBot.name : \"Shai\",\n                                sUserId: objConversation.identity\n                            });\n                        } else if (!a24Core.isEmpty(objParticipant.attributes) && !a24Core.isEmpty(objParticipant.attributes.authorDisplayName)) {\n                            arrMapping.push({\n                                sDisplayName: objParticipant.attributes.authorDisplayName,\n                                sUserId: objParticipant.user_id\n                            });\n                        }\n                    }\n                }\n                return arrMapping;\n            }, []);\n\n            // We need to remove duplicates thus this filter\n            var objSeen = {};\n            arrParticipants = arrParticipants.filter(function (objParticipant) {\n                // Have we seen this user before?\n                if (objSeen.hasOwnProperty(objParticipant.sUserId)) {\n                    // Don't keep this entry\n                    return false;\n                }\n                // Remember that we've seen it\n                objSeen[objParticipant.sUserId] = objParticipant;\n                // Keep this one\n                return true;\n            });\n\n            var arrParticipantNames = arrParticipants.map(function (objParticipant) {\n                return objParticipant.sDisplayName;\n            });\n\n            var sClosedDateRow = \"\";\n\n            if (objConversation.status === this.get(\"_objSSCoreEnums.conversationStatus.CLOSED.backend\") && !a24Core.isEmpty(objConversation.updated_at)) {\n                var objClosedDate = a24DateManager.createDate(this.get(\"_objUserSession\").get(\"objContextDetails.sTimezone\"));\n                objClosedDate.setDateFromRest(objConversation.updated_at);\n\n                sClosedDateRow = this._generateHeaderCellHtml(this.get(\"_objSSCoreStrings\").getString(\"closedDate\") + \":\", objClosedDate.getDateTimeFormat());\n            }\n\n            var arrRows = [this._generateHeaderCellHtml(this.get(\"_objFormInputsStringsService\").getString(\"startDate\") + \":\", objCreatedDate.getDateTimeFormat()), sClosedDateRow, this._generateHeaderCellHtml(this.get(\"_objStringsService\").getString(\"status\") + \":\", this.get(\"_objSSCoreEnums\").getFrontendValue(\"conversationStatus\", objConversation.status))];\n\n            if (!a24Core.isEmpty(objConversation.team) && !a24Core.isEmpty(objConversation.team.team_name)) {\n                arrRows.push(this._generateHeaderCellHtml(this.get(\"_objSSCoreStrings\").getString(\"team\") + \":\", objConversation.team.team_name));\n            }\n\n            arrRows.push(this._generateHeaderCellHtml(this.get(\"_objSSCoreStrings\").getString(\"participants\") + \":\", arrParticipantNames.join(\", \")));\n\n            return \"\\n            <div class=\\\"a24-conversation-heading-block\\\">\\n                <table class=\\\"a24-conversation-details-table\\\">\" + arrRows.join(\"\") + \"\\n                </table>\\n            </div>\\n        \";\n        },\n\n        /**\n         * Generates a single line for the conversation heading details\n         *\n         * @param string sLabel - The label to display\n         * @param string sValue - The value associated with the label\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  17 Dec 2019\n         *\n         * @return An html string\n         */\n        _generateHeaderCellHtml: function _generateHeaderCellHtml(sLabel, sValue) {\n            return \"\\n            <tr>\\n                <td class=\\\"a24-conversation-details-label\\\">\" + sLabel + \"</td>\\n                <td class=\\\"a24-conversation-details-value\\\">\" + sValue + \"</td>\\n            </tr>\";\n        },\n\n\n        /**\n         * Generate a single DOM Node for avater\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  12 Dec 2019\n         *\n         * @return A DOM Node for avatar\n         */\n        _generateHTMLForAvatar: function _generateHTMLForAvatar(displayName, sMemberType) {\n            return \"\\n            <div class=\\\"avater a24-conversation-preview-tooltip\\\">\\n                <div class=\\\"avater-placeholder\\\">\\n                    <i class=\\\"material-icons\\\">\" + (sMemberType === \"bot\" ? \"android\" : \"person\") + \"</i>\\n                </div>\" + (displayName ? \"<span class=\\\"tooltiptext\\\">\" + displayName + \"</span>\" : \"\") + \"\\n            </div>\\n        \";\n        },\n\n        /**\n         * Generate a single DOM Node for a conversation message\n         *\n         * @param object objMessage - A conversation message object\n         * {\n         *     \"participant_id\": \"5de7dce6bc0ea0cce8869349\",\n         *     \"body\": \"helop\\n\",\n         *     \"type\": \"text\",\n         *     \"created_at\": \"2019-12-06T09:25:47.000Z\",\n         *     \"attributes\": {\n         *        \"memberType\": \"chatterbox\"\n         *      }\n         * }\n         * @param string sType - The conversation type\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  9 Dec 2019\n         *\n         * @return A DOM Node for chat message\n         */\n        _generateHTMLForMessage: function _generateHTMLForMessage(objMessage, sType, objParticipant, objConversation) {\n            var sTimeAgo = momentHelper.getTimeFromNow(objMessage.created_at, a24Constants.DATE_FORMAT_ISO_FORMAT);\n            var sDisplayName = null;\n            if (!a24Core.isEmpty(objParticipant) && !a24Core.isEmpty(objParticipant.attributes)) {\n                sDisplayName = objParticipant.attributes.authorDisplayName;\n            }\n\n            if (!a24Core.isEmpty(objConversation.chatterbox_profiles) && objParticipant.attributes.member_type === \"chatterbox\" && (objParticipant.attributes.medium === \"sms\" || objParticipant.attributes.medium === \"whatsapp\")) {\n                sDisplayName = objConversation.chatterbox_profiles[0].entity_name;\n            }\n\n            if (objParticipant.attributes.member_type === \"bot\") {\n                var objBot = objConversation.bots.findBy(\"_id\", objParticipant.identity);\n                sDisplayName = !a24Core.isEmpty(objBot) ? objBot.name : \"Shai\";\n            }\n\n            var sNode = \"\\n            <li class=\\\"chat-message \" + sType + \"\\\">\\n                <div class=\\\"bubble\\\">\" + objMessage.body + \"</div>\\n                \" + this._generateHTMLForAvatar(sDisplayName, objParticipant.attributes.member_type) + \"\\n                <span class=\\\"subtext\\\">\" + sTimeAgo + \"</span>\\n            </li>\\n        \";\n\n            return sNode;\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/email-preview-generator\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n\n        _sSrcDocPolyfilJs: \"/assets/a24-ember-staffshift-core/email-preview/srcdoc-polyfill.min.js\",\n        _objStaffshiftCoreStringsService: Ember.inject.service(\"a24-strings-staffshift-core\"),\n        _sDeliverySuccessStatus: \"Delivered\",\n\n        /**\n         * Will generate the entire page for the email\n         *\n         * @param object objEmail - The object describing the email details\n         * {\n         *     sSubject: \"Subject\",\n         *     objFrom: {name: \"John\", email: \"john@a24testmail.com\"},\n         *     objTo: {name: \"Steve\", email: \"steve@a24testmail.com\"},\n         *     arrCC: [{name: \"Alex\", email: \"alex@a24testmail.com\"}],\n         *     arrBCC: [{name: \"Mary\", email: \"mary@a24testmail.com\"}],\n         *     objReplyTo: {name: \"Chris\", email: \"chris@a24testmail.com\"},\n         *     sHTML: \"<p>Some <b>HTML</b> here</p>\"\n         *     sDeliveryStatus: \"delivery failed\",\n         *     sDeliveryFailureReason: \"the reason for delivery failure\"\n         * }\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  28 Febuary 2019\n         *\n         * @return An html string\n         */\n        generateFullHtmlWithHTMLWrappingFromEmailObject: function generateFullHtmlWithHTMLWrappingFromEmailObject(objEmail) {\n            // If the email object is empty, it will return null\n            if (a24Core.isEmpty(objEmail)) {\n                return null;\n            }\n\n            // Generate the entire html block to be used\n            var sHtml = \"\";\n            sHtml += \"<html>\";\n            sHtml += \"<head>\";\n            sHtml += \"<script src='\" + this.get(\"_sSrcDocPolyfilJs\") + \"'></script>\";\n            sHtml += \"</head>\";\n            sHtml += \"<body>\";\n            sHtml += this.generateFullHtmlFromEmailObject(objEmail, \"vh\");\n            sHtml += \"</body>\";\n            sHtml += \"</html>\";\n            return sHtml;\n        },\n\n\n        /**\n         * Will generate the inner html for the email\n         *\n         * @param object objEmail - The object describing the email details\n         * {\n         *     sSubject: \"Subject\",\n         *     objFrom: {name: \"John\", email: \"john@a24testmail.com\"},\n         *     objTo: {name: \"Steve\", email: \"steve@a24testmail.com\"},\n         *     arrCC: [{name: \"Alex\", email: \"alex@a24testmail.com\"}],\n         *     arrBCC: [{name: \"Mary\", email: \"mary@a24testmail.com\"}],\n         *     objReplyTo: {name: \"Chris\", email: \"chris@a24testmail.com\"},\n         *     sHTML: \"<p>Some <b>HTML</b> here</p>\"\n         *     sDeliveryStatus: \"delivery failed\",\n         *     sDeliveryFailureReason: \"the reason for delivery failure\"\n         * }\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  28 Febuary 2019\n         *\n         * @return An html string\n         */\n        generateFullHtmlFromEmailObject: function generateFullHtmlFromEmailObject(objEmail, sMeasure) {\n\n            // If the email object is empty, it will return null\n            if (a24Core.isEmpty(objEmail)) {\n                return null;\n            }\n\n            if (a24Core.isEmpty(sMeasure)) {\n                sMeasure = \"%\";\n            }\n\n            var objCharsEncode = {\n                \"<\": \"lt\",\n                \">\": \"gt\",\n                '\"': \"quot\",\n                \"'\": \"apos\",\n                \"&\": \"amp\",\n                \"\\r\": \"#10\",\n                \"\\n\": \"#13\"\n            };\n\n            var sHTMLSafe = objEmail.sHTML.replace(/[<>\"'\\r\\n&]/g, function (sChar) {\n                return \"&\" + objCharsEncode[sChar] + \";\";\n            });\n\n            // Generate the entire html block to be used\n            var sHtml = \"\";\n            sHtml += \"<link rel='stylesheet' type='text/css' href='/assets/a24-ember-staffshift-core/email-preview/style.css'>\";\n            sHtml += \"<div class='a24-email-preview'>\";\n            sHtml += \"<div class='a24-email-heading-block'>\" + this._generateHeaderHtml(objEmail) + \"</div>\";\n            sHtml += \"<div class='a24-email-html-block'>\";\n            sHtml += \"<iframe srcdoc='\" + sHTMLSafe + \"' frameborder='0' onload='\";\n            // onload js for the iframe to get an accurate size.\n            // This is calculated from the full height of the page minus the heading block\n            sHtml += \"var head = document.getElementsByClassName(\\\"a24-email-heading-block\\\")[0];\";\n            sHtml += \"var frame = document.getElementsByClassName(\\\"a24-email-html-block\\\")[0].getElementsByTagName(\\\"iframe\\\")[0];\";\n            sHtml += \"frame.style.height = \\\"calc(100\" + sMeasure + \" - \\\"+head.offsetHeight+\\\"px)\\\";\";\n            sHtml += \"if(window.a24DidRenderCountIncrease){window.a24DidRenderCountIncrease();}\";\n            sHtml += \"if (window.srcDoc) {\";\n            sHtml += \"if (!frame.hasLoaded) {\";\n            sHtml += \"window.srcDoc.set(frame, \\\"\\\" + frame.getAttribute(\\\"srcdoc\\\"));\";\n            sHtml += \"frame.hasLoaded = true;\";\n            sHtml += \"}\";\n            sHtml += \"}\";\n            // End of iframe onload\n            sHtml += \"'></iframe>\";\n            sHtml += \"</div>\";\n            sHtml += \"</div>\";\n\n            // Return a safe version of the html\n            return Ember.String.htmlSafe(sHtml);\n        },\n\n        /**\n         * Generate the email header section as html\n         *\n         * @param object objEmail - The object describing the email details\n         * {\n         *     sSubject: \"Subject\",\n         *     objFrom: {name: \"John\", email: \"john@a24testmail.com\"},\n         *     objTo: {name: \"Steve\", email: \"steve@a24testmail.com\"},\n         *     arrCC: [{name: \"Alex\", email: \"alex@a24testmail.com\"}],\n         *     arrBCC: [{name: \"Mary\", email: \"mary@a24testmail.com\"}],\n         *     objReplyTo: {name: \"Chris\", email: \"chris@a24testmail.com\"},\n         *     sHTML: \"<p>Some <b>HTML</b> here</p>\"\n         *     sDeliveryStatus: \"delivery failed\",\n         *     sDeliveryFailureReason: \"the reason for delivery failure\"\n         * }\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  28 Febuary 2019\n         *\n         * @return An html string\n         */\n        _generateHeaderHtml: function _generateHeaderHtml(objEmail) {\n            var _this = this;\n\n            var sHtml = \"\";\n\n            // Add subject to the email\n            sHtml += \"<div class='a24-email-subject'>\" + objEmail.sSubject + \"</div>\";\n\n            sHtml += \"<table class='a24-email-details-table'>\";\n            // Add the from address if it is set\n            if (!a24Core.isEmpty(objEmail.objFrom)) {\n                sHtml += this._generateHeaderCellHtml(this.get(\"_objStaffshiftCoreStringsService\").getString(\"from\") + \":\", this._generateHTMLForSingleEmailNode(objEmail.objFrom));\n            }\n            // Add the to address if it is set\n            if (!a24Core.isEmpty(objEmail.objTo)) {\n                sHtml += this._generateHeaderCellHtml(this.get(\"_objStaffshiftCoreStringsService\").getString(\"to\") + \":\", this._generateHTMLForSingleEmailNode(objEmail.objTo));\n            }\n            // Add the arr of ccs if it is set\n            if (!a24Core.isEmpty(objEmail.arrCC)) {\n                var sCC = objEmail.arrCC.map(function (objCCItem) {\n                    return _this._generateHTMLForSingleEmailNode(objCCItem);\n                }).join(\"\\n\");\n                sHtml += this._generateHeaderCellHtml(this.get(\"_objStaffshiftCoreStringsService\").getString(\"cc\") + \":\", sCC);\n            }\n            // Add the arr of bccs if it is set\n            if (!a24Core.isEmpty(objEmail.arrBCC)) {\n                var _sCC = objEmail.arrBCC.map(function (objCCItem) {\n                    return _this._generateHTMLForSingleEmailNode(objCCItem);\n                }).join(\"\\n\");\n                sHtml += this._generateHeaderCellHtml(this.get(\"_objStaffshiftCoreStringsService\").getString(\"bcc\") + \":\", _sCC);\n            }\n            // Add the reply to address if it is set\n            if (!a24Core.isEmpty(objEmail.objReplyTo)) {\n                sHtml += this._generateHeaderCellHtml(\"Reply to:\", this._generateHTMLForSingleEmailNode(objEmail.objReplyTo));\n            }\n\n            // Add the delivery status if it is set\n            if (!a24Core.isEmpty(objEmail.sDeliveryStatus)) {\n                sHtml += this._generateHeaderCellHtml(this.get(\"_objStaffshiftCoreStringsService\").getString(\"deliveryStatus\") + \":\", objEmail.sDeliveryStatus);\n                // Add the delivery failure reason if email was not delivered\n                if (objEmail.sDeliveryStatus !== this.get(\"_sDeliverySuccessStatus\") && !a24Core.isEmpty(objEmail.sDeliveryFailureReason)) {\n                    sHtml += this._generateHeaderCellHtml(this.get(\"_objStaffshiftCoreStringsService\").getString(\"deliveryFailureReason\") + \":\", objEmail.sDeliveryFailureReason);\n                }\n            }\n\n            sHtml += \"</table>\";\n\n            return sHtml;\n        },\n\n        /**\n         * Generates a single line for the email heading details\n         *\n         * @param string sLabel - The label to display\n         * @param string sValue - The value associated with the label (can be split on lines by \\n)\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  28 Febuary 2019\n         *\n         * @return An html string\n         */\n        _generateHeaderCellHtml: function _generateHeaderCellHtml(sLabel, sValue) {\n            var sHtml = \"<tr>\";\n            sHtml += \"<td class='a24-email-details-label'>\" + sLabel + \"</td>\";\n            sHtml += \"<td class='a24-email-details-value'>\" + sValue + \"</td>\";\n            sHtml += \"</tr>\";\n            return sHtml;\n        },\n\n        /**\n         * Generate a single readable value from a name email combo\n         *\n         * @param string objEmailNode - An object containing a name (optional) and email prop\n         * {\n         *     name: \"Chris\",\n         *     email: \"chris@a24testmail.com\"\n         * }\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  28 Febuary 2019\n         *\n         * @return An combo string of name and email\n         */\n        _generateHTMLForSingleEmailNode: function _generateHTMLForSingleEmailNode(objEmailNode) {\n            var sHTMLEmailNode = \"\";\n            // Use name and email if name is set, otherwise use email only\n            if (!a24Core.isEmpty(objEmailNode.name)) {\n                // Name and email\n                sHTMLEmailNode += objEmailNode.name + \" (\" + objEmailNode.email + \")\";\n            } else {\n                // Email only\n                sHTMLEmailNode += objEmailNode.email;\n            }\n            return sHTMLEmailNode;\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/firebase\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objFirebase: window.firebase,\n        _ENV: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n        _objConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objFirebaseCustomToken: Ember.inject.service(\"rest-firebase-custom-token\"),\n\n        _bFirebaseInitDone: false, //Dont reset flag, once init is done it can not be done again.\n\n        _objFirebaseCustomTokenPromise: null,\n        _funcInitAuthObserverUnsubscriber: null,\n        _funcRemoveFirebaseObserver: null,\n        _bFirebaseLoginDone: false,\n        _bFirebaseSetupInProgress: false,\n        _objPromise: null,\n        _funcUnload: null,\n        _arrDataObservers: null,\n        _arrSignOutCallbacks: null,\n\n        initializeApp: function initializeApp() {\n            var _this = this;\n\n            if (a24Core.isEmpty(this.get(\"_arrDataObservers\"))) {\n                this.set(\"_arrDataObservers\", []);\n            }\n            if (a24Core.isEmpty(this.get(\"_arrSignOutCallbacks\"))) {\n                this.set(\"_arrSignOutCallbacks\", []);\n            }\n            if (this.get(\"_bFirebaseSetupInProgress\")) {\n                return this.get(\"_objPromise\");\n            } else if (!this.get(\"_bFirebaseLoginDone\") && !a24Core.isEmpty(this.get(\"_ENV.objFirebaseConfig\"))) {\n                this.set(\"_bFirebaseSetupInProgress\", true);\n\n                // Initialize Firebase\n                var bDoInitAuthObserver = false;\n                if (!this.get(\"_bFirebaseInitDone\")) {\n                    this.get(\"_objFirebase\").initializeApp(this.get(\"_ENV.objFirebaseConfig\"));\n                    this.set(\"_bFirebaseInitDone\", true);\n\n                    //This caters for when the user navigates to a gwt page.\n                    var funcUnload = function funcUnload() {\n                        if (_this.get(\"_objNavigation.bNavigatingToGWT\")) {\n                            _this.signOut();\n                        }\n                    };\n                    this.set(\"_funcUnload\", funcUnload);\n                    if (window.addEventListener) {\n                        // For all major browsers, except IE 8 and earlier\n                        window.addEventListener(\"beforeunload\", funcUnload);\n                    } else if (window.attachEvent) {\n                        // For IE 8 and earlier versions\n                        window.attachEvent(\"beforeunload\", funcUnload);\n                    }\n\n                    bDoInitAuthObserver = true;\n                }\n\n                var funcDone = null;\n                var funcFail = null;\n                var objPromise = new Ember.RSVP.Promise(function (funcResolve, funcReject) {\n                    funcDone = function funcDone() {\n                        _this.set(\"_bFirebaseSetupInProgress\", false);\n                        funcResolve();\n                    };\n                    funcFail = function funcFail() {\n                        _this.set(\"_bFirebaseSetupInProgress\", false);\n                        funcReject();\n                    };\n                });\n\n                if (bDoInitAuthObserver) {\n                    this.set(\"_funcInitAuthObserverUnsubscriber\", this.get(\"_objFirebase\").auth().onAuthStateChanged(function (objUser) {\n                        //This is just for init so immediately unsubscribe on first trigger\n                        _this.get(\"_funcInitAuthObserverUnsubscriber\")();\n                        _this.set(\"_funcInitAuthObserverUnsubscriber\", null);\n\n                        if (a24Core.isEmpty(objUser)) {\n                            _this._getFirebaseCustomToken(funcDone, funcFail);\n                        } else {\n                            if (objUser.uid === _this.get(\"_objUserSession.objAuthData.identity.id\")) {\n                                _this._funcFirebaseSignInSuccess(funcDone);\n                            } else {\n                                _this.signOut().finally(function () {\n                                    _this._getFirebaseCustomToken(funcDone, funcFail);\n                                });\n                            }\n                        }\n                    }));\n                } else {\n                    if (a24Core.isEmpty(this.get(\"_objFirebase\").auth().currentUser) || this.get(\"_objFirebase\").auth().currentUser.uid === this.get(\"_objUserSession.objContextDetails.id\")) {\n                        this._getFirebaseCustomToken(funcDone, funcFail);\n                    } else {\n                        this.signOut().finally(function () {\n                            _this._getFirebaseCustomToken(funcDone, funcFail);\n                        });\n                    }\n                }\n\n                this.set(\"_objPromise\", objPromise);\n                return objPromise;\n            } else {\n                return new Ember.RSVP.Promise(function (funcResolve) {\n                    funcResolve();\n                });\n            }\n        },\n        _getFirebaseCustomToken: function _getFirebaseCustomToken(funcDone, funcFail) {\n            var _this2 = this;\n\n            this.get(\"_objFirebaseCustomToken\").getFirebaseCustomToken(this, \"_objFirebaseCustomTokenPromise\", function (objData) {\n                _this2.get(\"_objFirebase\").auth().signInWithCustomToken(objData.custom_jwt).then(function () {\n                    _this2._funcFirebaseSignInSuccess(funcDone);\n                }).catch(function () {\n                    funcFail();\n                });\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\"], function () {\n                funcFail();\n            }));\n        },\n        _funcFirebaseSignInSuccess: function _funcFirebaseSignInSuccess(funcDone) {\n            var _this3 = this;\n\n            //Only add the listener now else it might trigger with user as null before the login call is done\n            var funcRemoveFirebaseObserver = this.get(\"_objFirebase\").auth().onAuthStateChanged(function (objUser) {\n                if (a24Core.isEmpty(objUser)) {\n                    _this3.signOut(true).finally(function () {\n                        var arrSignOutCallbacks = _this3.get(\"_arrSignOutCallbacks\");\n                        for (var j = 0; j < arrSignOutCallbacks.length; j++) {\n                            arrSignOutCallbacks[j](_this3.get(\"_objConstants\").FIREBASE_ERROR_SIGNED_OUT);\n                        }\n                        _this3.set(\"_arrSignOutCallbacks\", []);\n                    });\n                }\n            });\n            // Set the firebase remove observer function\n            this.set(\"_funcRemoveFirebaseObserver\", funcRemoveFirebaseObserver);\n\n            this.set(\"_bFirebaseLoginDone\", true);\n            funcDone();\n        },\n        _resetAllVars: function _resetAllVars(bSkipSignOutCallbacksClear) {\n            this.set(\"_objFirebaseCustomTokenPromise\", null);\n            this.set(\"_funcRemoveFirebaseObserver\", null);\n            this.set(\"_funcInitAuthObserverUnsubscriber\", null);\n            this.set(\"_bFirebaseLoginDone\", false);\n            this.set(\"_bFirebaseSetupInProgress\", false);\n            this.set(\"_objPromise\", null);\n            this.set(\"_arrDataObservers\", []);\n            if (!bSkipSignOutCallbacksClear) {\n                this.set(\"_arrSignOutCallbacks\", []);\n            }\n        },\n        signOut: function signOut(bSkipSignOutCallbacksClear) {\n            var _this4 = this;\n\n            //First remove the login state observers\n            var funcInitAuthObserverUnsubscriber = this.get(\"_funcInitAuthObserverUnsubscriber\");\n            if (!a24Core.isEmpty(funcInitAuthObserverUnsubscriber)) {\n                funcInitAuthObserverUnsubscriber();\n            }\n            var funcRemoveFirebaseObserver = this.get(\"_funcRemoveFirebaseObserver\");\n            if (!a24Core.isEmpty(funcRemoveFirebaseObserver)) {\n                funcRemoveFirebaseObserver();\n            }\n\n            //Clear all firestore observers\n            var arrObservers = this.get(\"_arrDataObservers\");\n            if (!a24Core.isEmpty(arrObservers)) {\n                for (var i = 0; i < arrObservers.length; i++) {\n                    arrObservers[i]();\n                }\n            }\n\n            if (this.get(\"_bFirebaseSetupInProgress\") && !a24Core.isEmpty(this.get(\"_objFirebaseCustomTokenPromise\")) && typeof this.get(\"_objFirebaseCustomTokenPromise\").abort === \"function\") {\n                this.get(\"_objFirebaseCustomTokenPromise\").abort();\n            }\n\n            this._resetAllVars(bSkipSignOutCallbacksClear);\n\n            return new Ember.RSVP.Promise(function (funcResolve) {\n                //Can only call signout if initializeApp was done, also only call if we have logged in user.\n                if (_this4.get(\"_bFirebaseInitDone\") && !a24Core.isEmpty(_this4.get(\"_objFirebase\").auth().currentUser)) {\n                    _this4.get(\"_objFirebase\").auth().signOut().finally(function () {\n                        funcResolve();\n                    });\n                } else {\n                    funcResolve();\n                }\n            });\n        },\n        updateCurrentDataWithNew: function updateCurrentDataWithNew(mCurrentData, mNewData, sUniqueId, sSortOnProperty) {\n            if (a24Core.isEmpty(mNewData)) {\n                if (Ember.typeOf(mCurrentData) === \"array\") {\n                    return [];\n                } else {\n                    return null;\n                }\n            }\n            if (a24Core.isEmpty(mCurrentData)) {\n                if (Ember.typeOf(mNewData) === \"array\" && !a24Core.isEmpty(sSortOnProperty)) {\n                    return mNewData.sortBy(sSortOnProperty);\n                } else {\n                    return mNewData;\n                }\n            }\n            if (Ember.typeOf(mCurrentData) === Ember.typeOf(mNewData)) {\n                if (Ember.typeOf(mNewData) === \"array\") {\n                    for (var i = 0; i < mNewData.length; i++) {\n                        var objNewData = mNewData.objectAt(i);\n                        var objToUpdate = mCurrentData.findBy(sUniqueId, objNewData[sUniqueId]);\n                        if (a24Core.isEmpty(objToUpdate)) {\n                            mCurrentData.pushObject(objNewData);\n                        } else {\n                            this.updateObjectProperties(objToUpdate, objNewData);\n                        }\n                    }\n                    // Remove objects that are in the current data array but not in the new data array\n                    for (var j = 0; j < mCurrentData.length; j++) {\n                        var objCurrentData = mCurrentData.objectAt(j);\n                        if (a24Core.isEmpty(mNewData.findBy(sUniqueId, objCurrentData[sUniqueId]))) {\n                            mCurrentData.removeObject(objCurrentData);\n                        }\n                    }\n                    // Sort current data array if sSortOnProperty is provided\n                    if (!a24Core.isEmpty(sSortOnProperty)) {\n                        mCurrentData.sortBy(sSortOnProperty);\n                    }\n                    return mCurrentData;\n                } else if (Ember.typeOf(mNewData) === \"object\") {\n                    return this.updateObjectProperties(mCurrentData, mNewData);\n                }\n            }\n        },\n        updateObjectProperties: function updateObjectProperties(objToUpdate, objNewData) {\n            // Delete properties that are in the old object but not in the new one\n            for (var sOldProp in objToUpdate) {\n                if (objToUpdate.hasOwnProperty(sOldProp) && !objNewData.hasOwnProperty(sOldProp)) {\n                    delete objToUpdate[sOldProp];\n                }\n            }\n            // Update new object properties with the old one\n            for (var sNewProp in objNewData) {\n                if (objNewData.hasOwnProperty(sNewProp)) {\n                    Ember.set(objToUpdate, sNewProp, objNewData[sNewProp]);\n                }\n            }\n            return objToUpdate;\n        },\n\n        //NOTE: we can use the below as base for all snapshot observers or if things need to be more custom per call then\n        //we can copy what is in here, key points being that it needs to put the observer in the _arrDataObservers and also\n        //the _arrSignOutCallbacks and give back the funcUnsubscribe to parent item;\n        _snapShotBase: function _snapShotBase(funcFirebaseCollection, funcSuccess, funcFail, funcRemoveObserver) {\n            var _this5 = this;\n\n            //This will init firebase on run time when call is made.\n            //funcFail - Will be called with string code to tell you why it failed\n            //  Codes from us:\n            //      FIREBASE_ERROR_SIGNED_OUT - means use signed out on another tab and thus we should provide user with popup to\n            //                      retry call or someting like that. Then we can also\n            //      FIREBASE_ERROR_QUERY_NOT_EXIST - Telling you that collection or document that you tried to query on firebase does not\n            //                      exist. Might present user wit popup like \"The shift you are viewing in no longer\n            //                      availible\"\n            //      FIREBASE_ERROR_SIGNED_IN_FAILED - Either we could not get costim token of firebase signin failed for whatever reason.\n            //                      Here we could possibly just give popup saying to refresh or retry call since call retry\n            //                      would automatically retry the login.\n            //  Codes from firebase (currently I only know of the one but there might be more)\n            //      permission-denied - This will happen when you try and query docs you dont have permisson to. This should\n            //                          happen or be possible but we should still handle it and just tell user to refresh\n            //                          page\n            this.initializeApp().then(function () {\n                var funcUnsubscribe = funcFirebaseCollection().onSnapshot(function (objSnapshot) {\n                    if (!a24Core.isEmpty(objSnapshot)) {\n                        if (Ember.typeOf(objSnapshot.docs) === \"array\") {\n                            var arrData = [];\n                            for (var i = 0; i < objSnapshot.docs.length; i++) {\n                                if (objSnapshot.docs[i].exists) {\n                                    arrData.push(objSnapshot.docs[i].data());\n                                }\n                            }\n                            if (a24Core.isEmpty(arrData) && objSnapshot.docs.length > 0) {\n                                funcFail(_this5.get(\"_objConstants\").FIREBASE_ERROR_QUERY_NOT_EXIST);\n                            } else {\n                                funcSuccess(arrData);\n                            }\n                        } else if (objSnapshot.exists) {\n                            funcSuccess(objSnapshot.data());\n                        } else {\n                            funcFail(_this5.get(\"_objConstants\").FIREBASE_ERROR_QUERY_NOT_EXIST);\n                        }\n                    } else {\n                        funcSuccess();\n                    }\n                }, function (objError) {\n                    //It appear that the observer stops running after error was thrown so no need to manually stop it.\n                    funcFail(objError.code); //errors from firebase e.g permission-denied\n                });\n                _this5.get(\"_arrDataObservers\").pushObject(funcUnsubscribe);\n                _this5.get(\"_arrSignOutCallbacks\").pushObject(funcFail);\n                funcRemoveObserver(function () {\n                    _this5.get(\"_arrDataObservers\").removeObject(funcUnsubscribe);\n                    funcUnsubscribe();\n                });\n            }).catch(function () {\n                //Note: error that happen in the `then` will also trigger this catch\n                funcFail(_this5.get(\"_objConstants\").FIREBASE_ERROR_SIGNED_IN_FAILED);\n            });\n        },\n\n        //Now we can have small wrappers for each call to firebase, same kinda wrappers as in our rest services\n        getAvailibleShifts: function getAvailibleShifts(funcSuccess, funcFail, funcRemoveObserver) {\n            var _this6 = this;\n\n            this._snapShotBase(function () {\n                return _this6.get(\"_objFirebase\").firestore().collection(\"candidate_possible_shifts\").where(\"user_id\", \"==\", _this6.get(\"_objUserSession.objAuthData.identity.id\"));\n                //Example of doing query on date, note that dont use because of the way we\n                //need to sort manually anyway plus not sure indexes etc was setup on live for this.\n                //.where(\"shift_start_date\", \">\", this.get(\"_objFirebase\").firestore.Timestamp.now())\n            }, funcSuccess, funcFail, funcRemoveObserver);\n        }\n        //\n        // //NOTE: Example of how calls to firebase should be done from parent side\n        // this.get(\"_objFirebaseService\").getAvailibleShifts(\n        //     //Success callback, NOTE this will be called multiple times as data updates in real time so you need to update\n        //     //view each time this callback gets called.\n        //     (objData) => {\n        //         //TODO take the data and update view. Might be called miltiple times so prob good in most cases to have\n        //         //loading show up or something indicating to user new data was loaded.\n        //     },\n        //     //Failure callback, this will give you multiple codes to tell you what happened. In most cases this will only\n        //     //be called once and then no other callbacks will be called again. However in the case of query_not_exist the\n        //     //success might be called again when the doc becomes availible and in turn fail can be called again when that\n        //     //doc get deleted.\n        //     (sCode) => {\n        //         //TODO: Handle the sCode like we do with rest error codes and show user some popups or messages.\n        //     },\n        //     //The unsubscribe callback, this is used to stop your component from listening to real time changes on the data.\n        //     //This means that you need to save this func somewhere and call it when you want to stop observing the data AND\n        //     //(very important) you need to call this function on component destory else it will keep firing and break stuff.\n        //     (funcUnsubscribe) => {\n        //         //Save the unsubscribe function for later\n        //         this.set(\"funcAvailShiftUnsubscribe\", funcUnsubscribe);\n        //\n        //         //this in the on destroy of component call the function\n        //         // this.get(\"funcAvailShiftUnsubscribe\")();\n        //     }\n        // );\n\n    });\n});","define(\"a24-ember-staffshift-core/services/help-box-service\", [\"exports\", \"a24-ember-staffshift-core/services/chat-boxes-service-base\"], function (exports, _chatBoxesServiceBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _chatBoxesServiceBase.default.extend({\n        bHidden: false,\n        iRenderCount: 0,\n\n        remount: function remount() {\n            var _this = this;\n\n            this.hideChatBox();\n            this.set(\"bHidden\", true);\n            Ember.run.next(function () {\n                _this.set(\"bHidden\", false);\n                _this.set(\"iRenderCount\", _this.get(\"iRenderCount\") + 1);\n            });\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/intercom\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n\n        bIntercomActive: false,\n\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        /**\n         * Initialise intercom widget\n         *\n         * @param sIntercomAppId - the intercom app id\n         * @param sWebsite - website intercom is running on\n         * @param sEmailAddress - email address for logged in user\n         * @param sName - full name for logged in user\n         * @param sUserId - user id for logged in user\n         * @param sHash - the user hash\n         *\n         * @return void\n         */\n        initIntercom: function initIntercom(sIntercomAppId, sWebsite, sEmailAddress, sName, sUserId, sHash) {\n            var sAppId = sIntercomAppId;\n            var sEmail = sEmailAddress;\n            var sCurrentUserName = sName;\n            var sCurrentHash = sHash;\n            var sCurrentUserId = sUserId;\n            var sCurrentWebsite = sWebsite;\n\n            window.intercomSettings = {\n                app_id: sAppId\n            };\n\n            if (!a24Core.isEmpty(sCurrentUserName)) {\n                window.intercomSettings.name = sCurrentUserName; // full name\n            }\n            if (!a24Core.isEmpty(sEmail)) {\n                window.intercomSettings.email = sEmail; // email address\n            }\n            if (!a24Core.isEmpty(sCurrentUserId)) {\n                window.intercomSettings.user_id = sCurrentUserId; // current user id\n            }\n            if (!a24Core.isEmpty(sCurrentHash)) {\n                window.intercomSettings.user_hash = sCurrentHash; // the user hash\n            }\n            if (!a24Core.isEmpty(sCurrentWebsite)) {\n                window.intercomSettings.website = sCurrentWebsite; // the current website\n            }\n\n            // this function is from intercom\n            // @see https://developers.intercom.com\n            var funcInitializeIntercom = function funcInitializeIntercom() {\n                var w = window;\n                var ic = w.Intercom;\n                if (typeof ic === \"function\") {\n                    ic(\"reattach_activator\");\n                    ic(\"update\", w.intercomSettings);\n                } else {\n                    var d = document;\n                    var i = function i() {\n                        i.c(arguments);\n                    };\n                    i.q = [];\n                    i.c = function (args) {\n                        i.q.push(args);\n                    };\n                    w.Intercom = i;\n                    var l = function l() {\n                        var s = d.createElement(\"script\");\n                        s.type = \"text/javascript\";\n                        s.async = true;\n                        s.src = \"https://widget.intercom.io/widget/\" + sAppId;\n                        var x = d.getElementsByTagName(\"script\")[0];\n                        x.parentNode.insertBefore(s, x);\n                    };\n\n                    // the default code to load the widget when the window loads\n                    // has been replaced with calling the intercom load function directly\n                    l();\n\n                    //if (w.attachEvent) {\n                    //    w.attachEvent(\"onload\", l);\n                    //}\n                    //else {\n                    //    w.addEventListener(\"load\", l, false);\n                    //}\n                }\n            };\n\n            funcInitializeIntercom();\n\n            this.set(\"bIntercomActive\", true);\n        },\n\n        /**\n         * Shutdown the intercom\n         */\n        shutdown: function shutdown() {\n            if (!a24Core.isEmpty(window.Intercom)) {\n                window.Intercom(\"shutdown\");\n            }\n            this.set(\"bIntercomActive\", false);\n        },\n\n        /**\n         * This service method will be used to get all integrations that the user has available\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sUserId - The id of the user getting the contexts\n         * @param sIntegration - the user integration\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param funcFail - The callback function to execute when the service call is not successful\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  25 October 2017\n         */\n        getIntegration: function getIntegration(objCaller, sProperty, sUserId, sIntegration, funcSuccess, funcFail) {\n            var sUrl = this.get(\"_sRestApiBaseUrl\") + \"/v1/user/\" + sUserId + \"/integrations\";\n\n            a24RestUrlConstruct.setBaseUrl(sUrl);\n            a24RestUrlConstruct.addQueryParam(\"integration\", sIntegration);\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", a24RestUrlConstruct.getConstructedUrl(), funcSuccess, funcFail));\n        },\n\n        /**\n         * Show the intercom widget\n         */\n        show: function show() {\n            if (!a24Core.isEmpty(window.Intercom)) {\n                window.Intercom(\"show\");\n            }\n        },\n\n        /**\n         * Hide the intercom widget\n         */\n        hide: function hide() {\n            if (!a24Core.isEmpty(window.Intercom)) {\n                window.Intercom(\"hide\");\n            }\n        },\n\n        update: function update(objUpdate) {\n            if (!a24Core.isEmpty(window.Intercom)) {\n                window.Intercom(\"update\", objUpdate);\n            }\n        },\n\n        /**\n         * Hide or show the default launcher(FAB button) for intercom\n         *\n         * @param bShow - Whether to show or hide the default launcher\n         */\n        showDefaultLauncher: function showDefaultLauncher(bShow) {\n            if (!a24Core.isEmpty(window.Intercom)) {\n                window.Intercom(\"update\", {\n                    \"hide_default_launcher\": !bShow\n                });\n            }\n        }\n\n    });\n});","define(\"a24-ember-staffshift-core/services/navigation-bar-component-service\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Service.extend({\n    arrRightSideActions: null\n  });\n});","define(\"a24-ember-staffshift-core/services/navigation\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        // This flag is being set from the abstractRoute.js route\n        bPageLoading: false,\n\n        //NOTE The new route params will be set when going to new route, so not in new route just yet.\n        objNewRouteParams: null, //The new route params, see objRouteParams example (set from abstractRoute:afterModel)\n        objNewRouteQueryParams: null, //The new route query params (set from abstractRoute:afterModel)\n\n        //If you want to do something each time the route changes then observe the iRouteTransitions and not the\n        //sCurrentUrl, since the sCurrentUrl will not change when quickly going back to the same route before the new route\n        //finished loading, e.g when navigating to candidate welcome page and then to agency welcome and then hitting the\n        //back button before the agency welcome finishes transition the sCurrentUrl will not fire an observes since it would\n        //have been set to the same value(candidate url), but the iRouteTransitions would have incremented since the\n        //candidate welcome route was loaded again.\n        //NOTE The current route properties are set AFTER route has been loaded.\n        iRouteTransitions: 0, //This value will change each time a route transition completed(set from router:didTransition in `next`)\n        sCurrentUrl: null, //The full current url excluding the domain e.g /candidate/welcome(set from router:didTransition in `next`)\n        sCurrentRouteName: null, //The current route name e.g agency.agency-contract-list (set from router:didTransition in `next`)\n        objCurrentRouteParams: null, //The current route params, see objRouteParams example (set from router:didTransition in `next`)\n        objCurrentRouteQueryParams: null, //The current route query params (set from router:didTransition in `next`)\n\n        //NOTE The objRouteParams and objRouteQueryParams is set BEFORE that route is loaded\n        objRouteParams: null, //The params for route sections (set from abstractRoute:model)\n        //e.g \"agency/1234/agency-contract-list/4567/B23/9876\" will have an object of:\n        //{\n        //    agency: {\n        //        context_id: \"1234\"\n        //    },\n        //    agency.agency-contract-list: {  //This key will be the route name, so note agency.agency-contract-list\n        //        contract_id: \"4567\",     //These keys will be what was configured in the route.js for the path section\n        //        contract_num: \"B23\",\n        //        contract_bloep: \"9876\"\n        //    }\n        //}\n        objRouteQueryParams: null, // The query params (set from abstractRoute:model)\n\n        objApplicationController: null, //This gets set from the application route beforeModel() function\n        objPrevTrans: null, //This will hold a previous transition that can be retried later\n        sContext: null, //This is the context part in the url set by the abstractRoute class for internal pages\n        sContextId: null, //This is the context id part in the url set by the abstractRoute class for internal pages\n\n        sAppContext: Ember.computed.readOnly(\"env.sAppContext\"),\n        sTriageBaseUrl: Ember.computed.readOnly(\"env.sTriageBaseUrl\"),\n        sEmberBaseAppUrl: Ember.computed.readOnly(\"env.sEmberBaseAppUrl\"),\n\n        //we expect that once this flag goes to true that it wont go back to false since navigation to GWT would\n        //end this ember app instance.\n        //Used to shutdown intercom on tab close(intercom will stay active on gwt navigate)\n        //Also used to signOut from firebase when going to gwt\n        bNavigatingToGWT: false,\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * This function makes it easier to navigate around within the same context eliminating having to include\n         * the current context and context id for the navigation url.\n         * E.g instead of having to send in agency.example.view-page, you would only send in example.view-page and only\n         * supply data for these routes in the objParams and objQueryParams\n         *\n         * @param sRoute - The inner route to navigate to, e.g instead of agency.order-view it will be just order-view\n         * @param objParams - These are the params needed by the routes e.g\n         *     URL in browser = /agency/24234VE424/order-view/12345/SSDe/7890\n         *     objParams will be: {\n         *         agency: [\"24234VE424\"],\n         *         order-view: [\"12345\", \"SSDe\", \"7890\"]\n         *     }\n         * @param objQueryParams - The query params for the route, these would be the ones following the ? in the url e.g\n         *     {\n         *         page: 5,\n         *         siteName: \"someSite\"\n         *     }\n         *     NOTE: These query params will most likely not show up in the url unless you specifically specify it in the\n         *     controller, they will however still be accessible in the code(in the transition object in the route)\n         * @param bReturnUrl - Whether the function should return the built up url, when true it will just return the url\n         *     and NOT navigate to it, when false it will build up the url and navigate to it.\n         * @param bKeepHistory - Whether to keep the browser history\n         */\n        navigateWithinContext: function navigateWithinContext(sRoute, objParams, objQueryParams, bReturnUrl, bKeepHistory) {\n            var sCID = this.get(\"sContextId\");\n            var sContext = this.get(\"sContext\");\n            var sContextBaseUrl = \"\";\n\n            // context can be null when in the agency sub domain\n            if (sContext !== null) {\n                sContextBaseUrl += \"/\" + sContext;\n            }\n\n            //Context Id can be null in candidate and systemAdmin context\n            if (sCID != null) {\n                sContextBaseUrl += \"/\" + sCID;\n            }\n\n            // set the main domain flag based on if its a sub domain or not\n            var bEmberMainDomain = sContext === null ? false : true;\n\n            if (a24Core.isEmpty(bKeepHistory) || bKeepHistory) {\n                return this._doNavigate(sContextBaseUrl, sRoute, objParams, objQueryParams, bReturnUrl, bEmberMainDomain);\n            } else {\n                this._doLocationReplace(this._doNavigate(sContextBaseUrl, sRoute, objParams, objQueryParams, true), false);\n            }\n        },\n        /**\n         * This will do the same as navigateToWithinContext, except that you need to specify the context in the\n         * sRoute and also supply needed details for it in the objParams if needed for that context, systemAdmin and\n         * candidate do no need context id for example.\n         * This can also be used to navigate to public pages (pages without context)\n         *\n         * @param sRoute - See navigateToWithinContext\n         * @param objParams - See navigateToWithinContext\n         * @param objQueryParams - See navigateToWithinContext\n         * @param bReturnUrl - Whether the function should return the built up url, when true it will just return the url\n         *     and NOT navigate to it, when false it will build up the url and navigate to it.\n         * @param bEmberMainDomain - Whether to navigate to the main ember app\n         */\n        navigateOutsideContext: function navigateOutsideContext(sRoute, objParams, objQueryParams, bReturnUrl, bEmberMainDomain) {\n            //possibly need to add terms and condition etc here aswell later\n            if ((sRoute === \"404\" || sRoute === \"error\") && !a24Core.isEmpty(this.get(\"sAppContext\"))) {\n                var sNewContextUrl = this.get(\"sEmberBaseAppUrl\") + \"/404\";\n                this._doLocationReplace(sNewContextUrl, true);\n            } else {\n                return this._doNavigate(\"\", sRoute, objParams, objQueryParams, bReturnUrl, bEmberMainDomain);\n            }\n        },\n        _doNavigate: function _doNavigate(sFinalUrl, sRoute, objParams, objQueryParams, bReturnUrl, bEmberMainDomain) {\n            var arrRoutes = sRoute.split(\".\");\n            if (a24Core.isEmpty(objParams)) {\n                for (var i = 0; i < arrRoutes.length; i++) {\n                    sFinalUrl += \"/\" + arrRoutes[i];\n                }\n            } else {\n                for (var j = 0; j < arrRoutes.length; j++) {\n                    sFinalUrl += \"/\" + arrRoutes[j];\n                    if (!a24Core.isEmpty(objParams[arrRoutes[j]])) {\n                        for (var k = 0; k < objParams[arrRoutes[j]].length; k++) {\n                            sFinalUrl += \"/\" + objParams[arrRoutes[j]][k];\n                        }\n                    }\n                }\n            }\n            if (!a24Core.isEmpty(objQueryParams)) {\n                sFinalUrl += \"?\";\n                for (var sKey in objQueryParams) {\n                    // skip loop if the property is from prototype\n                    if (!objQueryParams.hasOwnProperty(sKey)) {\n                        continue;\n                    }\n\n                    sFinalUrl += sKey + \"=\" + encodeURIComponent(objQueryParams[sKey]) + \"&\";\n                }\n                //Remove last trailing &\n                sFinalUrl = sFinalUrl.substring(0, sFinalUrl.length - 1);\n            }\n\n            if (bEmberMainDomain) {\n                sFinalUrl = this.get(\"sEmberBaseAppUrl\") + sFinalUrl;\n            }\n\n            if (bReturnUrl) {\n                if (bEmberMainDomain) {\n                    return sFinalUrl;\n                } else {\n                    return \"#\" + sFinalUrl;\n                }\n            } else {\n                if (bEmberMainDomain) {\n                    this._doLocationReplace(sFinalUrl, true);\n                } else {\n                    this.get(\"objApplicationController\").transitionTo(sFinalUrl);\n                }\n            }\n        },\n        _doLocationChange: function _doLocationChange(sLocation) {\n            window.location.href = sLocation;\n        },\n        _doLocationReplace: function _doLocationReplace(sLocation, bKeepHistory) {\n            if (bKeepHistory) {\n                this._doLocationChange(sLocation);\n            } else {\n                window.location.replace(sLocation);\n            }\n        },\n        _getEncodedCurrentUrl: function _getEncodedCurrentUrl() {\n            return encodeURIComponent(window.btoa(window.location));\n        },\n        /**\n         * This function will redirect to the GWT login page\n         *\n         * @param bRegisterPage - Whether we should go to the register page with the login on it and a message saying\n         *     login is required to view page or go to the home page that has login on it\n         * @param bKeepHistory - Whether to keep the browser history\n         */\n        navigateToGWTLogin: function navigateToGWTLogin(bRegisterPage, bKeepHistory) {\n            //NOTE cant do url return here because of bNavigatingToGWT, see top of class for use\n            this.set(\"bNavigatingToGWT\", true);\n\n            if (bRegisterPage) {\n                //We need to double encode the url since it seems GWT double decodes when retrieving query params\n                var sGwtRegisterUrl = this.get(\"sTriageBaseUrl\") + \"/views#registration;\" + \"logInMessage=loginRequiredMessage;\" + \"originalUrl=\" + this._getEncodedCurrentUrl();\n\n                this._doLocationReplace(sGwtRegisterUrl, bKeepHistory);\n            } else {\n                var sUrl = this.get(\"sTriageBaseUrl\") + \"?logInMessage=loginRequiredMessage&originalUrl=\" + this._getEncodedCurrentUrl();\n                this._doLocationReplace(sUrl, bKeepHistory);\n            }\n        },\n        /**\n         * This function will redirect to the GWT context provided\n         *\n         * @param sContextId - The reference id of the context you wish to switch to\n         * @param bKeepHistory - Whether to keep the browser history\n         */\n        navigateToGWTContext: function navigateToGWTContext(sContextId, bKeepHistory) {\n            //NOTE cant do url return here because of bNavigatingToGWT, see top of class for use\n            this.set(\"bNavigatingToGWT\", true);\n            var sNewContextUrl = this.get(\"sTriageBaseUrl\") + \"/views#welcome;cId=\" + sContextId;\n            this._doLocationReplace(sNewContextUrl, bKeepHistory);\n        },\n        /**\n         * This function will redirect to a GWT page\n         *\n         * @param sUrl - The url to navigate to, starting from the nameplace e.g agency-orders;cId=1234123412341234\n         * @param bKeepHistory - Whether to keep the browser history\n         * @param bReturnUrl - Whether to return the url, bKeepHistory is ignored when using this obviously\n         */\n        navigateToGWTPage: function navigateToGWTPage(sUrl, bKeepHistory, bReturnUrl) {\n            //NOTE bReturnUrl can only be used if you intent to open the url in new tab! Anything else needs to happen\n            //in the same tab/window so that we have proper teardown with the bNavigatingToGWT, see top of class for use.\n\n            var sNewContextUrl = this.get(\"sTriageBaseUrl\") + \"/views#\" + sUrl;\n            if (bReturnUrl) {\n                return sNewContextUrl;\n            } else {\n                this.set(\"bNavigatingToGWT\", true);\n                this._doLocationReplace(sNewContextUrl, bKeepHistory);\n            }\n        },\n\n        /**\n         * This function will navigate back to the preview page\n         */\n        navigateBack: function navigateBack() {\n            window.history.back();\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/notification-preview-generator\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objSSCoreStrings: Ember.inject.service(\"a24-strings-staffshift-core\"),\n        _objFormInputsStringsService: Ember.inject.service(\"a24-strings-form-inputs\"),\n        _objSSCoreEnums: Ember.inject.service(\"a24-enums-staffshift-core\"),\n\n        generateFullHtmlWithHTMLWrappingFromNotification: function generateFullHtmlWithHTMLWrappingFromNotification(objNotification) {\n            var sHtml = \"\\n            <html>\\n                <head>\\n                    <link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"/assets/a24-ember-staffshift-core/conversation-preview/font.css\\\">\\n                    <link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"/assets/a24-ember-staffshift-core/conversation-preview/style.css\\\">\\n                </head>\\n                <body>\\n                    \" + this.generateFullHtmlFromNotification(objNotification) + \"\\n                </body>\\n            </html>\\n        \";\n\n            return sHtml;\n        },\n\n        generateFullHtmlForStyleSheet: function generateFullHtmlForStyleSheet() {\n            var sHtml = \"\\n            <link rel=\\\"stylesheet\\\" type=\\\"text/css\\\" href=\\\"/assets/a24-ember-staffshift-core/conversation-preview/style.css\\\">\\n        \";\n\n            // Return a safe version of the html\n            return Ember.String.htmlSafe(sHtml);\n        },\n\n        generateFullHtmlFromNotification: function generateFullHtmlFromNotification(objNotification) {\n            var sHeaderHtml = this._generateHTMLForNotificationHeader(objNotification);\n            var sMessage = this._generateHTMLForMessage(objNotification);\n\n            var sHtml = \"\\n            <div class=\\\"a24-conversation-preview\\\">\\n                \" + sHeaderHtml + \"\\n                <div class=\\\"chat-messages-wrapper\" + (a24Core.isEmpty(sHeaderHtml) ? \" full-height\" : \"\") + \"\\\">\";\n            if (!a24Core.isEmpty(objNotification.data)) {\n                if (objNotification.medium === \"sms\" || objNotification.medium === \"whatsapp\") {\n                    sHtml += \"\\n                        <div class=\\\"chat-messages-preview\\\">\\n                            <ul class=\\\"messages-list-preview-box\\\">\\n                                \" + sMessage + \"\\n                            </ul>\\n                        </div>\";\n                } else {\n                    sHtml += \"<div style=\\\"padding: 1.5em;\\\">\" + this.get(\"_objSSCoreStrings\").getString(\"noNotificationTypeSupport\") + \"</div>\";\n                }\n            } else if (objNotification.status === this.get(\"_objSSCoreEnums.notificationStatus.OPT_OUT.backend\")) {\n                sHtml += \"<div style=\\\"padding: 1.5em;\\\">\" + this.get(\"_objSSCoreStrings\").getString(\"failedToGenerateNotificationPreviewOptOut\") + \"</div>\";\n            } else {\n                sHtml += \"<div style=\\\"padding: 1.5em;\\\">\" + this.get(\"_objSSCoreStrings\").getString(\"failedToGenerateNotificationPreview\") + \"</div>\";\n            }\n\n            sHtml += \"\\n                </div>\\n            </div>\\n        \";\n\n            // Return a safe version of the html\n            return Ember.String.htmlSafe(sHtml);\n        },\n\n        _generateHTMLForNotificationHeader: function _generateHTMLForNotificationHeader(objNotification) {\n            var objCreatedDate = a24DateManager.createDate(this.get(\"_objUserSession\").get(\"objContextDetails.sTimezone\"));\n            var arrRows = [];\n\n            if (!a24Core.isEmpty(objNotification.created_at)) {\n                objCreatedDate.setDateFromRest(objNotification.created_at);\n\n                arrRows.push(this._generateHeaderCellHtml(this.get(\"_objSSCoreStrings\").getString(\"sendDate\") + \":\", objCreatedDate.getDateTimeFormat()));\n            }\n\n            arrRows.push(this._generateHeaderCellHtml(this.get(\"_objSSCoreStrings\").getString(\"notificationType\") + \":\", this.get(\"_objSSCoreEnums\").getFrontendValue(\"mediumType\", objNotification.medium)));\n            if (!a24Core.isEmpty(objNotification.status)) {\n                arrRows.push(this._generateHeaderCellHtml(this.get(\"_objStringsService\").getString(\"status\") + \":\", this.get(\"_objSSCoreEnums\").getFrontendValue(\"notificationStatus\", objNotification.status)));\n                if (!a24Core.isEmpty(objNotification.status_reason)) {\n                    arrRows.push(this._generateHeaderCellHtml(this.get(\"_objSSCoreStrings\").getString(\"statusReason\") + \":\", objNotification.status_reason));\n                }\n            }\n\n            var arrTokens = objNotification.collected_tokens;\n            var sSender = \"\";\n            var sRecipient = \"\";\n            var sRecipientName = \"\";\n\n            for (var i = 0; i < arrTokens.length; i++) {\n                switch (arrTokens[i].token) {\n                    case \"recipient_full_name\":\n                        sRecipientName = arrTokens[i].value;\n                        break;\n                    case \"recipient_mobile_number\":\n                        sRecipient = arrTokens[i].value;\n                        break;\n                    case \"sender_phone_number\":\n                        sSender = arrTokens[i].value;\n                        break;\n                    default:\n                        break;\n                }\n            }\n            if (objNotification.medium === \"sms\" || objNotification.medium === \"whatsapp\") {\n                if (!a24Core.isEmpty(sRecipientName)) {\n                    arrRows.push(this._generateHeaderCellHtml(this.get(\"_objSSCoreStrings\").getString(\"recipientName\") + \": \", sRecipientName));\n                }\n                if (!a24Core.isEmpty(sRecipient)) {\n                    arrRows.push(this._generateHeaderCellHtml(this.get(\"_objSSCoreStrings\").getString(\"recipientNumber\") + \": \", objNotification.recipient_mobile_number_formatted ? objNotification.recipient_mobile_number_formatted : sRecipient));\n                }\n                if (!a24Core.isEmpty(sSender)) {\n                    arrRows.push(this._generateHeaderCellHtml(this.get(\"_objSSCoreStrings\").getString(\"senderNumber\") + \":\", objNotification.sender_phone_number_formatted ? objNotification.sender_phone_number_formatted : sSender));\n                }\n            }\n\n            return \"\\n            <div class=\\\"a24-conversation-heading-block\\\">\\n                <table class=\\\"a24-conversation-details-table\\\">\" + arrRows.join(\"\") + \"\\n                </table>\\n            </div>\\n        \";\n        },\n\n        _generateHeaderCellHtml: function _generateHeaderCellHtml(sLabel, sValue) {\n            return \"\\n            <tr>\\n                <td class=\\\"a24-conversation-details-label\\\">\" + sLabel + \"</td>\\n                <td class=\\\"a24-conversation-details-value\\\">\" + sValue + \"</td>\\n            </tr>\";\n        },\n        _generateHTMLForMessage: function _generateHTMLForMessage(objNotification) {\n            var sNode = \"\";\n            if (objNotification.medium === \"sms\" || objNotification.medium === \"whatsapp\") {\n                if (!a24Core.isEmpty(objNotification) && !a24Core.isEmpty(objNotification.data)) {\n                    var sBody = Ember.Handlebars.Utils.escapeExpression(objNotification.data.body);\n                    sNode = \"\\n                    <li class=\\\"chat-message chat-message-preview\\\">\\n                        <div class=\\\"bubble\\\">\" + sBody + \"</div>\\n                    </li>\\n                \";\n                }\n            }\n\n            return Ember.String.htmlSafe(sNode);\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/react-ember-navigation\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _getCurrentDomain: function _getCurrentDomain() {\n            return window.location.origin;\n        },\n        _openInNewTab: function _openInNewTab(sUrl) {\n            window.open(sUrl, \"_blank\");\n        },\n\n        /**\n         * Handles a navigation message\n         *\n         * @param objData - the data object containing message information\n         */\n        handleNavigationMessage: function handleNavigationMessage(objData) {\n            if (objData.type === \"navigate_within_context\") {\n                var sRouteWithinContext = objData.data.route;\n                var objParams = null;\n                if (!a24Core.isEmpty(objData.data.params)) {\n                    objParams = objData.data.params;\n                }\n                var objQueryParams = null;\n                if (!a24Core.isEmpty(objData.data.queryParams)) {\n                    objQueryParams = objData.data.queryParams;\n                }\n                var bReturnUrl = false;\n                var bKeepHistory = true;\n                if (!a24Core.isEmpty(objData.data.returnUrl) && objData.data.returnUrl) {\n                    bReturnUrl = true;\n                    var sUrlWithin = this.get(\"_objNavigation\").navigateWithinContext(sRouteWithinContext, objParams, objQueryParams, bReturnUrl, bKeepHistory);\n\n                    if (sUrlWithin.charAt(0) === '#') {\n                        sUrlWithin = this._getCurrentDomain() + \"/\" + sUrlWithin;\n                    }\n\n                    var objReturn = {\n                        type: objData.type + \"_response\",\n                        data: {\n                            url: sUrlWithin\n                        },\n                        requestId: objData.requestId\n                    };\n                    return objReturn;\n                }\n                if (!a24Core.isEmpty(objData.data.openInNewTab) && objData.data.openInNewTab) {\n                    bReturnUrl = true;\n                    var sUrlWithinContext = this.get(\"_objNavigation\").navigateWithinContext(sRouteWithinContext, objParams, objQueryParams, bReturnUrl, bKeepHistory);\n                    this._openInNewTab(sUrlWithinContext);\n                } else {\n                    if (!a24Core.isEmpty(objData.data.keepHistory)) {\n                        bKeepHistory = objData.data.keepHistory;\n                    }\n                    this.get(\"_objNavigation\").navigateWithinContext(sRouteWithinContext, objParams, objQueryParams, bReturnUrl, bKeepHistory);\n                }\n            } else if (objData.type === \"navigate_outside_context\") {\n                var sRouteOutsideContext = objData.data.route;\n                var objParamsOutsideContext = null;\n                if (!a24Core.isEmpty(objData.data.params)) {\n                    objParamsOutsideContext = objData.data.params;\n                }\n                var objQueryParamsOutsideContext = null;\n                if (!a24Core.isEmpty(objData.data.queryParams)) {\n                    objQueryParamsOutsideContext = objData.data.queryParams;\n                }\n                var bEmberMainDomain = false;\n                if (!a24Core.isEmpty(objData.data.emberMainDomain) && objData.data.emberMainDomain) {\n                    bEmberMainDomain = objData.data.emberMainDomain;\n                }\n\n                var bReturnUrlOutsideContext = false;\n                if (!a24Core.isEmpty(objData.data.returnUrl) && objData.data.returnUrl) {\n                    bReturnUrlOutsideContext = true;\n                    var sUrlOutside = this.get(\"_objNavigation\").navigateOutsideContext(sRouteOutsideContext, objParamsOutsideContext, objQueryParamsOutsideContext, bReturnUrlOutsideContext, bEmberMainDomain);\n\n                    if (sUrlOutside.charAt(0) === '#') {\n                        sUrlOutside = this._getCurrentDomain() + \"/\" + sUrlOutside;\n                    }\n                    var objReturnOutsideContext = {\n                        type: objData.type + \"_response\",\n                        data: {\n                            url: sUrlOutside\n                        },\n                        requestId: objData.requestId\n                    };\n\n                    return objReturnOutsideContext;\n                }\n                if (!a24Core.isEmpty(objData.data.openInNewTab) && objData.data.openInNewTab) {\n                    bReturnUrlOutsideContext = true;\n                    var sUrlOutsideContext = this.get(\"_objNavigation\").navigateOutsideContext(sRouteOutsideContext, objParamsOutsideContext, objQueryParamsOutsideContext, bReturnUrlOutsideContext, bEmberMainDomain);\n                    this._openInNewTab(sUrlOutsideContext);\n                } else {\n                    this.get(\"_objNavigation\").navigateOutsideContext(sRouteOutsideContext, objParamsOutsideContext, objQueryParamsOutsideContext, bReturnUrlOutsideContext, bEmberMainDomain);\n                }\n            } else if (objData.type === \"navigate_gwt_login\") {\n                var bKeepHistoryGwtLogin = false;\n                if (!a24Core.isEmpty(objData.data.keepHistory) && objData.data.keepHistory) {\n                    bKeepHistoryGwtLogin = objData.data.keepHistory;\n                }\n                var bRegisterPage = false;\n                if (!a24Core.isEmpty(objData.data.registerPage) && objData.data.registerPage) {\n                    bRegisterPage = true;\n                }\n\n                //Cant support return url or open in new tab since that will bypass the bNavigatingToGWT which is used\n                //to unload intercom and firebase where needed\n\n                this.get(\"_objNavigation\").navigateToGWTLogin(bRegisterPage, bKeepHistoryGwtLogin);\n            } else if (objData.type === \"navigate_gwt_context\") {\n                var sContextId = objData.data.contextId;\n                var bKeepHistoryGwt = false;\n                if (!a24Core.isEmpty(objData.data.keepHistory) && objData.data.keepHistory) {\n                    bKeepHistoryGwt = objData.data.keepHistory;\n                }\n\n                //Cant support return url or open in new tab since that will bypass the bNavigatingToGWT which is used\n                //to unload intercom and firebase where needed\n\n                this.get(\"_objNavigation\").navigateToGWTContext(sContextId, bKeepHistoryGwt);\n            } else if (objData.type === \"navigate_gwt_page\") {\n                var sUrl = objData.data.route;\n                var bKeepHistoryGwtPage = false;\n                if (!a24Core.isEmpty(objData.data.keepHistory) && objData.data.keepHistory) {\n                    bKeepHistoryGwtPage = objData.data.keepHistory;\n                }\n\n                if (!a24Core.isEmpty(objData.data.returnUrl) && objData.data.returnUrl) {\n                    var sGwtUrl = this.get(\"_objNavigation\").navigateToGWTPage(sUrl, bKeepHistoryGwtPage, true);\n\n                    return {\n                        type: objData.type + \"_response\",\n                        data: {\n                            url: sGwtUrl\n                        },\n                        requestId: objData.requestId\n                    };\n                }\n\n                //Cant support return url or open in new tab since that will bypass the bNavigatingToGWT which is used\n                //to unload intercom and firebase where needed\n\n                this.get(\"_objNavigation\").navigateToGWTPage(sUrl, bKeepHistoryGwtPage);\n            } else if (objData.type === \"navigate_back\") {\n                this.get(\"_objNavigation\").navigateBack();\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/react-ember-utils\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        arrToResolve: null,\n        objRequest: null,\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            if (a24Core.isEmpty(this.get(\"arrToResolve\"))) {\n                this.set(\"arrToResolve\", []);\n            }\n        },\n\n        genUid: function genUid() {\n            var sChars = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890\".split(\"\");\n            var iLength = 16;\n            var sUid = '';\n            for (var i = 0; i < iLength; i++) {\n                sUid += sChars[Math.floor(Math.random() * sChars.length)];\n            }\n\n            if (this.get(\"_objEnv\").environment === \"test\") {\n                return \"testUid\";\n            }\n            return sUid;\n        },\n\n        makeReactApiRequest: function makeReactApiRequest(objRequest) {\n            this.set(\"objRequest\", null);\n            var objPromiseObject = {};\n            var sRequestId = this.genUid();\n            var _objRequest = {\n                endpoint: objRequest.sEndpoint,\n                options: objRequest.objOptions,\n                params: objRequest.objParams,\n                requestId: sRequestId\n            };\n            var objPromise = new Promise(function (resolve, reject) {\n                objPromiseObject = {\n                    requestId: sRequestId,\n                    resolve: resolve,\n                    reject: reject,\n                    request: _objRequest\n                };\n            });\n\n            this.get(\"arrToResolve\").push(objPromiseObject);\n\n            this.set(\"objRequest\", _objRequest);\n\n            return objPromise;\n        },\n\n        triggerRequestQueue: function triggerRequestQueue() {\n            var _this = this;\n\n            this.set(\"objRequest\", null);\n            var arrToResolve = this.get(\"arrToResolve\");\n            if (arrToResolve.length > 0) {\n                arrToResolve.forEach(function (objRequest) {\n                    _this.set(\"objRequest\", objRequest.request);\n                });\n            }\n        },\n\n        reactApiRequestResponse: function reactApiRequestResponse(objData, sRequestId) {\n            var arrToResolve = this.get(\"arrToResolve\");\n            var iRequestIndex = null;\n\n            var objToResolve = arrToResolve.find(function (objRequest, iIndex) {\n                if (objRequest.requestId === sRequestId) {\n                    iRequestIndex = iIndex;\n                    return true;\n                }\n                return false;\n            });\n            if (!a24Core.isEmpty(objToResolve)) {\n                objToResolve.resolve(objData);\n                arrToResolve.splice(iRequestIndex, 1);\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/rest-chat-conversations\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"objEnv.sRestApiBaseUrl\"),\n\n        objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Retrieves a specific conversation\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sConversationId - The conversation id to fetch\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  09 June 2023\n         */\n        getConversation: function getConversation(objContext, sProperty, sConversationId, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/chat/conversations/\" + sConversationId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/rest-chat-teams\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"objEnv.sRestApiBaseUrl\"),\n\n        objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Retrieves a specific conversation\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  12 June 2023\n         */\n        getTeams: function getTeams(objContext, sProperty, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/chat/teams\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                },\n                name: {\n                    mValue: \"asc\",\n                    bSortBy: true\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, null, null, true));\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/rest-checkauth\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        _sTriageBaseRest: Ember.computed.readOnly(\"env.sTriageBaseRest\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        getCheckAuth: function getCheckAuth(objContext, sProperty, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrl(this.get(\"_sTriageBaseRest\") + \"/rest/checkauth\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, null, //do not want to user user session since this will add headers we do not want\n            this.get(\"_objNavigation\"), \"GET\", a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, null, null, false, false, true));\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/rest-country\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        _sTriageBaseRest: Ember.computed.readOnly(\"env.sTriageBaseRest\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n\n        /**\n         * Service method to retrieve the country name and code based on the id\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The property used for the rest service\n         * @param sCountryId - The country id\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object to execute when the service call is not successful\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  12 July 2018\n         */\n        getCountryById: function getCountryById(objCaller, sProperty, sCountryId, funcSuccess, objFailure) {\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sTriageBaseRest\") + \"/rest/application/country/\" + sCountryId, funcSuccess, objFailure));\n        },\n\n        /**\n         * Maps a numeric ISO 3166-1 country id to the alpha-2 country code used by the\n         * address / province / postcode logic. Unknown ids default to \"GB\". (The id is\n         * normalised to 3 digits at the user-session ingestion point.)\n         *\n         * @author David Olufemi <david.olufemi@a24group.com>\n         * @since  12 June 2026\n         *\n         * @param sCountryId - The numeric country id (e.g. \"710\", \"840\", \"036\")\n         *\n         * @return The alpha-2 country code (\"ZA\" | \"US\" | \"AU\" | \"GB\")\n         */\n        getCountryCodeFromCountryId: function getCountryCodeFromCountryId(sCountryId) {\n            switch (sCountryId) {\n                case \"710\":\n                    return \"ZA\";\n                case \"840\":\n                    return \"US\";\n                case \"036\":\n                    return \"AU\";\n                default:\n                    return \"GB\";\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/rest-entity-action-shift\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _sEntityActionApiBaseUrl: Ember.computed.readOnly(\"objEnv.sEntityActionApiBaseUrl\"),\n\n        objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Get shifts entity Actions\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param objQuery - The query params object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  07 April 2020\n         */\n        getShiftsEntityActions: function getShiftsEntityActions(objContext, sProperty, objQuery, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/entity-action/shift\");\n\n            a24RestUrlConstruct.addQueryParamObject(objQuery);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sEntityActionApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/rest-firebase-custom-token\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n\n        _ENV: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_ENV.sRestApiBaseUrl\"),\n\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        /**\n         * This service method will get the custom firebase auth token for the user\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object with error codes and callback to handle errors\n         *\n         * @author Ruan Naude <ruan.naude@a24group.com>\n         * @since  08 July 2019\n         */\n        getFirebaseCustomToken: function getFirebaseCustomToken(objCaller, sProperty, funcSuccess, objFailure) {\n            var sUrl = this.get(\"_sRestApiBaseUrl\") + \"/v1/firebase-custom-token\";\n\n            a24RestUrlConstruct.setBaseUrl(sUrl);\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n\n    });\n});","define(\"a24-ember-staffshift-core/services/rest-login\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        _sLoginUrl: \"/rest/login\",\n        _sTriageBaseRest: Ember.computed.readOnly(\"env.sTriageBaseRest\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objLoginServiceProperty: null,\n        /**\n         * This service method will be used to attempt a login with the username and password as well\n         * as the remember me flag. It will call either the success for failure after the service\n         * call is made\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sUsername - The username the user is trying to log in with\n         * @param sPassword - The password the user is trying to log in with\n         * @param bRememberMe - Whether the user selected the remember me option\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The callback function to execute when the service call is not successful\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  5 May 2016\n         */\n        post: function post(objCaller, sUsername, sPassword, bRememberMe, funcSuccess, objFailure) {\n\n            var sData = \"sPassword=\" + sPassword;\n            sData += \"&sUsername=\" + sUsername;\n            sData += \"&bRememberMe=\" + bRememberMe;\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, \"_objLoginServiceProperty\", a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"_sTriageBaseRest\") + \"/rest/login\", funcSuccess, objFailure, sData, \"application/x-www-form-urlencoded; charset=UTF-8\", false, false, true));\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/rest-logout\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        _sTriageBaseRest: Ember.computed.readOnly(\"env.sTriageBaseRest\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n\n        /**\n         * Service method to retrieve the users menu items\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The property used for the rest service\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object to execute when the service call is not successful\n         *\n         * @author Ruan Naude <ruan.naude@a24group.com>\n         * @since  06 March 2018\n         */\n        doLogout: function doLogout(objCaller, sProperty, funcSuccess, objFailure) {\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"_sTriageBaseRest\") + \"/rest/logout\", funcSuccess, objFailure, null, null, false, false, true));\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/rest-menu\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        _sTriageBaseRest: Ember.computed.readOnly(\"env.sTriageBaseRest\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n\n        /**\n         * Service method to retrieve the users menu items\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The property used for the rest service\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object to execute when the service call is not successful\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  02 March 2018\n         */\n        getMenuItems: function getMenuItems(objCaller, sProperty, funcSuccess, objFailure) {\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sTriageBaseRest\") + \"/rest/menu\", funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/rest-permissioned-actions\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _sEntityActionApiBaseUrl: Ember.computed.readOnly(\"env.sEntityActionApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Get permissioned action for section\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The property name to get the promise object\n         * @param sSection - The section name\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  12 January 2023\n         */\n        getPermissionedActionsForSection: function getPermissionedActionsForSection(objContext, sProperty, sSection, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/permissioned-actions/\" + sSection);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sEntityActionApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/rest-social-link-types\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"objEnv.sRestApiBaseUrl\"),\n\n        objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Retrieves all social links types\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sCandidateId - The candidate id to fetch social-links data for\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  09 October 2019\n         */\n        getSocialLinkTypes: function getSocialLinkTypes(objContext, sProperty, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/social-link-types\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                },\n                name: {\n                    mValue: \"asc\",\n                    bSortBy: true\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, null, null, true));\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/rest-system\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        arrPositionTypes: null,\n\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"objEnv.sRestApiBaseUrl\"),\n\n        objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Route for getting position types\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objQueryParams - Any extra query params for the get list\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  09 April 2019\n         */\n        getPositionTypes: function getPositionTypes(objCaller, sProperty, funcSuccess, objFailure, objQueryParams) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/system/position-types\");\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Returns a list of job families\n         *\n         * @param objCaller - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sPositionType - The position type\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  11 April 2018\n         */\n        getJobFamilies: function getJobFamilies(objCaller, sProperty, sPositionType, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/system/job-family\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                name: {\n                    bSortBy: true,\n                    mValue: \"asc\"\n                }\n            });\n\n            a24RestUrlConstruct.addQueryParamObject({\n                position_types: {\n                    mValue: [sPositionType]\n                }\n            });\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Returns a list of job titles\n         *\n         * @param objCaller - The caller of this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sPositionType - The position type\n         * @param sJobFamilyId - The job family id\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objQueryParams (Optional) - The query params to filter on for job titles\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  11 April 2018\n         */\n        getJobTitles: function getJobTitles(objCaller, sProperty, sPositionType, sJobFamilyId, funcSuccess, objFailure, objQueryParams) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/system/job-title\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                name: {\n                    bSortBy: true,\n                    mValue: \"asc\"\n                }\n            });\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            a24RestUrlConstruct.addQueryParamObject({\n                job_family_id: {\n                    mValue: sJobFamilyId\n                }\n            });\n\n            a24RestUrlConstruct.addQueryParamObject({\n                position_types: {\n                    mValue: [sPositionType]\n                }\n            });\n\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Route for getting system skills\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objQueryParams - Any extra query params for the get list\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  02 May 2019\n         */\n        getSkills: function getSkills(objCaller, sProperty, funcSuccess, objFailure, objQueryParams) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/system/skills\");\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Route for getting system qualifications\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objQueryParams - Any extra query params for the get list\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  15 May 2019\n         */\n        getQualifications: function getQualifications(objCaller, sProperty, funcSuccess, objFailure, objQueryParams) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/system/qualifications\");\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Route for getting system registration-bodies\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objQueryParams - Any extra query params for the get list\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  6 June 2019\n         */\n        getRegistrationBody: function getRegistrationBody(objCaller, sProperty, funcSuccess, objFailure, objQueryParams) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/system/registration-body\");\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Route for getting system registration body entries\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sRegistrationBodyId - The registration body id\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objQueryParams - Any extra query params for the get list\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  13 June 2019\n         */\n        getRegistrationBodyEntries: function getRegistrationBodyEntries(objCaller, sProperty, sRegistrationBodyId, funcSuccess, objFailure, objQueryParams) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/system/registration-body/\" + sRegistrationBodyId + \"/entry\");\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Route for getting system registration body statuses\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sRegistrationBodyId - The registration body id\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objQueryParams - Any extra query params for the get list\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  13 June 2019\n         */\n        getRegistrationBodyEntryStatuses: function getRegistrationBodyEntryStatuses(objCaller, sProperty, sRegistrationBodyId, funcSuccess, objFailure, objQueryParams) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/system/registration-body/\" + sRegistrationBodyId + \"/entry-status\");\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Route for getting system registration body statuses\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sRegistrationBodyId - The registration body id\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objQueryParams - Any extra query params for the get list\n         *\n         * @author Ahmed Onawale <ahmedonawale@gmail.com>\n         * @since  13 June 2019\n         */\n        getRegistrationBodyStatuses: function getRegistrationBodyStatuses(objCaller, sProperty, sRegistrationBodyId, funcSuccess, objFailure, objQueryParams) {\n            a24RestUrlConstruct.setBaseUrlSwagger(\"/v1/system/registration-body/\" + sRegistrationBodyId + \"/status\");\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/rest-user-context\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objHelpBoxService: Ember.inject.service(\"help-box-service\"),\n        _objUserContextProperty: null,\n        _sContextUrl: \"/rest/application/usercontext\",\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        _sAppContext: Ember.computed.readOnly(\"env.sAppContext\"),\n        _sTriageBaseRest: Ember.computed.readOnly(\"env.sTriageBaseRest\"),\n\n        /**\n         * This service method will be used to retrieve all the contexts that the user has available\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sUserId - The id of the user getting the contexts\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object to execute when the service call is not successful\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  23 June 2016\n         */\n        getList: function getList(objCaller, sUserId, funcSuccess, objFailure) {\n            a24RestUrlConstruct.setBaseUrl(this.get(\"_sTriageBaseRest\") + this.get(\"_sContextUrl\"));\n            a24RestUrlConstruct.addQueryParamObject({\n                sUserId: {\n                    mValue: sUserId\n                }\n            });\n            a24RestUrlConstruct.addQueryParamObject({\n                page: {\n                    mValue: \"1\"\n                }\n            });\n            a24RestUrlConstruct.addQueryParamObject({\n                per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, \"_objUserContextProperty\", a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, null, \"\", true));\n        },\n        /**\n         * This service method will be used to attempt to set a users current context\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sContextId - The id of the context that needs to be set as the current\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object to execute when the service call is not successful\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  02 August 2016\n         */\n        setSelectedContext: function setSelectedContext(objCaller, sContextId, funcSuccess, objFailure) {\n\n            var sFinalUrl = this.get(\"_sTriageBaseRest\") + this.get(\"_sContextUrl\") + \"/\" + sContextId;\n\n            var objPromise = a24RestCallHelper.doRestServiceCall(objCaller, \"_objUserContextProperty\", a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", sFinalUrl, funcSuccess, objFailure, {\n                bSelectedContext: true\n            }));\n            var objThis = this;\n            objPromise.always(function () {\n                objThis.get(\"_objHelpBoxService\").remount();\n            });\n            return objPromise;\n        },\n\n        /**\n         * This service method will be used to retrieve the current context details\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sResource - The resource used for the context call\n         * @param sResourceId - The id of the resource for the context call\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object to execute when the service call is not successful\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  05 March 2018\n         */\n        getUserContextDetails: function getUserContextDetails(objCaller, sResource, sResourceId, funcSuccess, objFailure) {\n\n            var sUserContextUrl = \"\";\n\n            if (sResource === \"system-admin\") {\n                sUserContextUrl = \"/rest/user/account-settings/timezone/\" + this.get(\"_objUserSession\").objAuthData.context.sUserId;\n            } else if (sResource === \"agency\") {\n                sUserContextUrl = \"/rest/agency/\" + sResourceId + \"/context\";\n            } else if (sResource === \"agency-group\") {\n                sUserContextUrl = \"/rest/agency-group/\" + sResourceId + \"/context\";\n            } else if (sResource === \"organisation\") {\n                sUserContextUrl = \"/rest/organisation/\" + sResourceId + \"/context\";\n            } else if (sResource === \"candidate\") {\n                sUserContextUrl = \"/rest/user/account-settings/timezone/\" + this.get(\"_objUserSession\").objAuthData.context.sUserId;\n            }\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, \"_objContextCallProperty\", a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sTriageBaseRest\") + sUserContextUrl, funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/rest-user\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        _sTriageBaseRest: Ember.computed.readOnly(\"env.sTriageBaseRest\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objResetPasswordServiceProperty: null,\n\n        /**\n         * This service method will be used to send a link to the user to reset their password\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sUsername - The username the user is trying to log in with\n         * @param sEmailAddress - The email address the user is trying to log in with\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The callback function to execute when the service call is not successful\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  6 June 2018\n         */\n        resetPassword: function resetPassword(objCaller, sUsername, sEmailAddress, funcSuccess, objFailure) {\n\n            var objData = {\n                \"sType\": \"resetPassword\"\n            };\n            if (!a24Core.isEmpty(sUsername)) {\n                objData.sUsername = sUsername;\n            }\n            if (!a24Core.isEmpty(sEmailAddress)) {\n                objData.sEmailAddress = sEmailAddress;\n            }\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, \"_objResetPasswordServiceProperty\", a24RestCallHelper.makeJsonAjaxCall(objCaller, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"_sTriageBaseRest\") + \"/rest/user/reset-password\", funcSuccess, objFailure, objData, \"application/x-www-form-urlencoded; charset=UTF-8\", false, true));\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/status-error-page\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Service.extend({\n    sIcon: \"\",\n    sMessage: \"\"\n  });\n});","define(\"a24-ember-staffshift-core/services/title-bar-service\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        sPageTitle: null, // The page title that needs to display\n        sUserNameInitial: null, // The user name initial\n        sUserAvatar: null, // The user avatar\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objConstantsSSCore: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n        init: function init() {\n            this._super.apply(this, arguments);\n            // Call methods on init\n            this._setUserInitial();\n            this._setUserAvatar();\n        },\n        _setUserInitial: Ember.observer(\"_objUserSession.objContextDetails\", function () {\n            if (a24Core.isEmpty(this.get(\"_objUserSession.objContextDetails\"))) {\n                return;\n            }\n            var sName = this.get(\"_objUserSession\").getUserFirstName();\n            // If the context has a name we set it using that instead.\n            if (!a24Core.isEmpty(this.get(\"_objUserSession.objContextDetails.sName\"))) {\n                sName = this.get(\"_objUserSession.objContextDetails.sName\");\n            }\n\n            // If sName is set, set the user initial\n            if (!a24Core.isEmpty(sName)) {\n                this.set(\"sUserNameInitial\", sName.charAt(0).toUpperCase());\n            }\n        }),\n        _setUserAvatar: Ember.observer(\"_objUserSession.objContextDetails\", function () {\n            if (a24Core.isEmpty(this.get(\"_objUserSession.objContextDetails\"))) {\n                return;\n            }\n\n            // If the avatar is set, set the user avatar\n            var sAvatarUrl = a24.getUserContextAvatarUrl(this.get(\"env.sTriageBaseUrl\"), this.get(\"_objConstantsSSCore\"), this.get(\"_objUserSession\").getUserAvatar());\n\n            this.set(\"sUserAvatar\", sAvatarUrl);\n        }),\n        /**\n         * This will set the page title\n         *\n         * @param sPageTitle - The title of the page\n         *\n         * @author Michael Barnard <micheal.barnard@a24group.com>\n         * @since  23 May 2016\n         */\n        setPageTitle: function setPageTitle(sPageTitle) {\n            this.set(\"sPageTitle\", sPageTitle);\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/triage-menu\", [\"exports\", \"a24-ember-menu/services/left-menu-service\"], function (exports, _leftMenuService) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _leftMenuService.default.extend({\n        _objBreadCrumbService: Ember.inject.service(\"bread-crumb\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objRestMenu: Ember.inject.service(\"rest-menu\"),\n        //_objIntercom: inject(\"intercom\"), // commenting this out in case it needs to be added back\n        _objStaffshiftCoreStringsService: Ember.inject.service(\"a24-strings-staffshift-core\"),\n        _objDidRenderService: Ember.inject.service(\"component-did-render\"),\n        _objHelpBoxService: Ember.inject.service(\"help-box-service\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objSSCoreConstants: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objMenuProperty: null,\n\n        afterMenuAnimation: null,\n        objLeftMenuUIComponent: null,\n\n        // Store the original response for the menu service call\n        arrMenuResponse: null,\n        // Store whether this is a fresh reload of the menu or just a redraw\n        bFreshLoad: false,\n        bAddHelpChat: true,\n\n        // Resolve the build environment (same pattern as rest-menu / navigation services)\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        objFakeMenuService: Ember.computed(function () {\n            return Ember.getOwner(this).lookup(\"service:fake-menu-service\");\n        }),\n\n        // Place names of bUrlOnly fake menu items collected on the last menu merge. These\n        // routes are reachable by URL but have no menu entry, so the 404 guard spares them\n        // (see _mergeStagingFakeMenuItems / _isFakeUrlOnlyRoute).\n        _arrFakeUrlOnlyPlaces: null,\n\n        // Init function\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n            // Instantiate the navigation service so that we can observe properties on it\n            this.get(\"_objNavigation\");\n            this.set(\"afterMenuAnimation\", function () {\n                // This is a temporary fix for some outdated components that still\n                // listen to the window resize to control their renders\n                Ember.run(function () {\n                    Ember.get(_this, \"_objDidRenderService\").countRendered();\n                });\n                $(window).trigger(\"resize\");\n            });\n        },\n\n        _sortMenuItems: function _sortMenuItems(arrMenuItems) {\n            if (a24Core.isEmpty(arrMenuItems)) {\n                return [];\n            }\n            var funcSorter = function funcSorter(objMenuItem1, objMenuItem2) {\n                return objMenuItem1.iOrder - objMenuItem2.iOrder;\n            };\n\n            arrMenuItems.sort(funcSorter);\n\n            arrMenuItems.forEach(function (objMenuItem) {\n                var arrSubMenuItems = objMenuItem.arrSubmenus;\n                if (!a24Core.isEmpty(arrSubMenuItems)) {\n                    arrSubMenuItems.sort(funcSorter);\n                }\n            });\n\n            return arrMenuItems;\n        },\n\n\n        /**\n         * Merge the consuming app's fake menu items into the /rest/menu response.\n         *\n         * Fake items let a new menu-item \"place\" be reached before the real Triage menu item\n         * exists in /rest/menu. They are provided by the app (NOT this addon) via an optional\n         * \"fake-menu-service\" exposing objFakeMenuItems, keyed by context:\n         *\n         *   { <context>: [ { arrEnv, bUrlOnly, objMenuItem }, ... ] }\n         *\n         * When the app defines no such service the merge is a no-op (the response is returned\n         * untouched), so apps that don't want fake items are unaffected. This keeps the fake-item\n         * config in the deployable, so a new fake item can be added without tagging this addon.\n         *\n         * Each entry:\n         *  - arrEnv      : environments the item is active on. Development is ALWAYS implied; any\n         *                  other environment (staging, sandbox, production) must be listed explicitly,\n         *                  so coverage can be widened per-env on the fly while testing.\n         *  - bUrlOnly    : when true the item is NOT added to the menu, but its place names are\n         *                  collected (_arrFakeUrlOnlyPlaces) so the 404 guard lets the route through\n         *                  (reachable by URL only). When false/absent objMenuItem is added as a normal\n         *                  menu item, which both shows it in the nav and passes the 404 guard.\n         *  - objMenuItem : a normal /rest/menu top item ({ sLabel, iOrder, sIcon, arrSubmenus: [...] }).\n         *                  sPlaceName on each submenu MUST equal the ember route name.\n         *\n         * Context is resolved the same way abstractRoute does (env.sAppContext if set, else\n         * _objNavigation.sContext), so a candidate item can't leak into the agency menu, etc.\n         *\n         * Duplicate guard: a fake submenu is skipped if its sPlaceName is already served by a real\n         * menu item, so a fake item auto-drops once the real Triage menu item goes live for that place.\n         *\n         * @param arrRestMenuItems - the raw menu items returned from /rest/menu\n         * @returns the (possibly augmented) menu items array\n         */\n        _mergeStagingFakeMenuItems: function _mergeStagingFakeMenuItems(arrRestMenuItems) {\n            var arrRest = arrRestMenuItems || [];\n\n            // Clear the url-only places collected on the previous merge so a removed fake route\n            // can't keep slipping past the 404 guard.\n            this.set(\"_arrFakeUrlOnlyPlaces\", []);\n\n            // Fake items are provided by the consuming app via an optional fake-menu-service. When\n            // the app doesn't define one (or it holds nothing) there is nothing to merge.\n            var objFakeMenuService = this.get(\"objFakeMenuService\");\n            if (a24Core.isEmpty(objFakeMenuService)) {\n                return arrRest;\n            }\n            var objFake = objFakeMenuService.objFakeMenuItems;\n            if (a24Core.isEmpty(objFake)) {\n                return arrRest;\n            }\n\n            // The context currently being viewed. Mirror abstractRoute's own logic: a dedicated\n            // subdomain app (e.g. agency/system-admin) reports its context via env.sAppContext, while\n            // the multi-context shell (ember-two, sAppContext === \"\") reports it via the url segment\n            // on _objNavigation.sContext (\"candidate\", \"agency\", ...).\n            var sAppContext = this.get(\"env.sAppContext\");\n            var sCurrentContext = !a24Core.isEmpty(sAppContext) ? sAppContext : this.get(\"_objNavigation.sContext\");\n\n            // Pull only the fake entries registered for the context currently being viewed\n            var arrFake = a24Core.isEmpty(sCurrentContext) ? null : objFake[sCurrentContext];\n            if (a24Core.isEmpty(arrFake)) {\n                return arrRest;\n            }\n\n            var sEnv = this.get(\"env.environment\");\n\n            // Collect every place name already present in the real response (across all submenus)\n            var objExistingPlaceNames = {};\n            arrRest.forEach(function (objTopItem) {\n                (objTopItem.arrSubmenus || []).forEach(function (objSubItem) {\n                    if (!a24Core.isEmpty(objSubItem.sPlaceName)) {\n                        objExistingPlaceNames[objSubItem.sPlaceName] = true;\n                    }\n                });\n            });\n\n            var arrUrlOnlyPlaces = [];\n            var arrItemsToAdd = [];\n\n            arrFake.forEach(function (objFakeEntry) {\n                if (a24Core.isEmpty(objFakeEntry) || a24Core.isEmpty(objFakeEntry.objMenuItem)) {\n                    return;\n                }\n\n                // Per-item env gate: development is always implied; every other environment must be\n                // listed explicitly in arrEnv (e.g. [\"staging\"], [\"staging\", \"production\"]).\n                var arrEnv = objFakeEntry.arrEnv || [];\n                if (sEnv !== \"development\" && arrEnv.indexOf(sEnv) === -1) {\n                    return;\n                }\n\n                var objMenuItem = objFakeEntry.objMenuItem;\n\n                // bUrlOnly: don't show a menu item, just make the route reachable. Collect its\n                // place names so the 404 guard spares them (see _isFakeUrlOnlyRoute).\n                if (objFakeEntry.bUrlOnly) {\n                    (objMenuItem.arrSubmenus || []).forEach(function (objSubItem) {\n                        if (!a24Core.isEmpty(objSubItem.sPlaceName)) {\n                            arrUrlOnlyPlaces.push(objSubItem.sPlaceName);\n                        }\n                        (objSubItem.sReferencedNamePlaces || []).forEach(function (sPlace) {\n                            if (!a24Core.isEmpty(sPlace)) {\n                                arrUrlOnlyPlaces.push(sPlace);\n                            }\n                        });\n                    });\n                    return;\n                }\n\n                // Visible fake item: drop any submenu whose place is already served by the real menu,\n                // then add it. Shallow-clone so we never mutate the config object.\n                var arrSubmenus = (objMenuItem.arrSubmenus || []).filter(function (objSubItem) {\n                    return a24Core.isEmpty(objExistingPlaceNames[objSubItem.sPlaceName]);\n                });\n                if (!a24Core.isEmpty(arrSubmenus)) {\n                    arrItemsToAdd.push(Object.assign({}, objMenuItem, { arrSubmenus: arrSubmenus }));\n                }\n            });\n\n            this.set(\"_arrFakeUrlOnlyPlaces\", arrUrlOnlyPlaces);\n\n            if (a24Core.isEmpty(arrItemsToAdd)) {\n                return arrRest;\n            }\n\n            return arrRest.concat(arrItemsToAdd);\n        },\n\n        /**\n         * Whether the given route belongs to a bUrlOnly fake menu item. Such items are deliberately\n         * absent from the menu, so the normal selection loop never flips bMenuItemSelected for them;\n         * this lets the 404 guard spare the route so it is reachable by URL only. Route names are\n         * built the same way parseMenuItems builds them (context-prefixed, or \"index.\" when there is\n         * no context).\n         *\n         * @param sCurrentRoute - the resolved current route name\n         * @param sContext - the navigation context (\"candidate\", \"agency\", ... or null)\n         * @returns true when the route matches a collected url-only place\n         */\n        _isFakeUrlOnlyRoute: function _isFakeUrlOnlyRoute(sCurrentRoute, sContext) {\n            var arrPlaces = this.get(\"_arrFakeUrlOnlyPlaces\");\n            if (a24Core.isEmpty(arrPlaces)) {\n                return false;\n            }\n            return arrPlaces.some(function (sPlace) {\n                var sRoute = a24Core.isEmpty(sContext) ? \"index.\" + sPlace : sContext + \".\" + sPlace;\n                return sRoute === sCurrentRoute;\n            });\n        },\n\n        /**\n         * This function is used to get the actual left menu items. This will do a service call and store\n         * the response for later use. This will also mark that the left menu data as fresh telling the component to\n         * reload.\n         */\n        getMenuItems: function getMenuItems() {\n            var _this2 = this;\n\n            this.set(\"bLoading\", true);\n\n            return this.get(\"_objRestMenu\").getMenuItems(this, \"_objMenuProperty\", function (arrMenuItems) {\n                //Set the menu items and let RSVP handle rest\n                var arrMerged = _this2._mergeStagingFakeMenuItems(arrMenuItems);\n                _this2.set(\"arrMenuResponse\", _this2._sortMenuItems(arrMerged));\n                _this2.set(\"bFreshLoad\", true);\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\"], function () /*sCode, sStatus*/{\n                //RSVP will handle any failures\n                _this2.set(\"bLoading\", false);\n            }));\n        },\n        getCurrentRoute: function getCurrentRoute() {\n            var sCurrentRoute = this.get(\"_objNavigation.sCurrentRouteName\");\n            var arrRouteParts = sCurrentRoute.split(\".\");\n\n            if (arrRouteParts[arrRouteParts.length - 1] === \"plugin\") {\n                sCurrentRoute = sCurrentRoute + \".\" + this.get(\"_objNavigation.objRouteParams\")[sCurrentRoute].plugin_id;\n            }\n            if (arrRouteParts[arrRouteParts.length - 1] === \"policy-group-list\") {\n                sCurrentRoute = sCurrentRoute + \".\" + this.get(\"_objNavigation.objRouteParams\")[sCurrentRoute].policy_group_type + \".\" + this.get(\"_objNavigation.objRouteParams\")[sCurrentRoute].policy_group_id;\n            }\n            if (arrRouteParts.length >= 3) {\n                // Treat these as tabs\n                sCurrentRoute = arrRouteParts.slice(0, 2).join(\".\");\n            }\n\n            return sCurrentRoute;\n        },\n        parseMenuItems: function parseMenuItems(arrMenuItems) {\n            var _this3 = this;\n\n            // Store the context\n            var sContext = this.get(\"_objNavigation\").get(\"sContext\");\n\n            // Store the current route\n            var sCurrentRoute = this.getCurrentRoute();\n\n            // Store the display name for the breadcrumb\n            var sRouteDisplayName = null;\n\n            // Store an array of parsed menu items\n            var arrParsedMenuItems = [];\n            // Store a boolean of whether any of the menu items match the current route\n            var bMenuItemSelected = false;\n\n            // Define the empty breadcrumb bar items\n            var arrBreadCrumbItems;\n\n            // Itterate over the menu items\n            arrMenuItems.forEach(function (objTopMenuItem) {\n\n                // Define the main final menu object\n                var objParsedMenuItem = {\n                    sTitle: objTopMenuItem.sLabel,\n                    iOrder: objTopMenuItem.iOrder,\n                    sIcon: _this3._getMenuSectionMaterialIcon(objTopMenuItem.sIcon),\n                    arrSubMenuItems: null\n                };\n\n                // Loop over the sub menu items\n                for (var i = 0; i < objTopMenuItem.arrSubmenus.length; i++) {\n                    var bSubItemMatch = false;\n\n                    // Get the place name of the sub menu\n                    var sPlaceName = Ember.get(objTopMenuItem.arrSubmenus[i], \"sPlaceName\");\n                    // Get the route name of the sub menu\n                    var sRoutePlaceName = \"\";\n                    if (sContext == null) {\n                        sRoutePlaceName = \"index.\" + sPlaceName;\n                    } else {\n                        sRoutePlaceName = sContext + \".\" + sPlaceName;\n                    }\n\n                    // Add custom behaviour for the plugin\n                    if (sPlaceName === \"plugin\") {\n                        sRoutePlaceName = sRoutePlaceName + \".\" + objTopMenuItem.sPluginId;\n                    }\n\n                    // Add custom behaviour for the policy group list\n                    if (sPlaceName === \"policy-group-list\") {\n                        sRoutePlaceName = sRoutePlaceName + \".\" + objTopMenuItem.arrSubmenus[i].objParams.sPolicyGroupType + \".\" + objTopMenuItem.arrSubmenus[i].objParams.sPolicyGroupId;\n                    }\n\n                    /**\n                     * If the current item place name matches the current route name then we set it selected, otherwise\n                     * we check if it matches any of the sub sub menu items in the sReferencedNamePlaces\n                     */\n                    if (sRoutePlaceName === sCurrentRoute) {\n                        bMenuItemSelected = true;\n                        bSubItemMatch = true;\n                        sRouteDisplayName = Ember.get(objTopMenuItem.arrSubmenus[i], \"sLabel\");\n                    } else {\n                        // Check the sReferencedNamePlaces (it's an array) for any matches\n                        for (var j = 0; j < objTopMenuItem.arrSubmenus[i].sReferencedNamePlaces.length; j++) {\n\n                            var sReferencedNamePlace = \"\";\n                            // Get the sReferenced name place\n                            if (sContext == null) {\n                                sReferencedNamePlace = \"index.\" + objTopMenuItem.arrSubmenus[i].sReferencedNamePlaces[j];\n                            } else {\n                                sReferencedNamePlace = sContext + \".\" + objTopMenuItem.arrSubmenus[i].sReferencedNamePlaces[j];\n                            }\n\n                            // Check if it matches the current route\n                            if (sReferencedNamePlace === sCurrentRoute) {\n\n                                // This means that the base refernce name matches\n\n                                // Add an additional check for the policy group list\n                                if (sPlaceName === \"policy-group-list\") {\n                                    // Check that the policy group type and policy group id also match\n                                    if (objTopMenuItem.arrSubmenus[i].objParams.sPolicyGroupType === _this3.get(\"_objNavigation.objRouteParams\")[sCurrentRoute].policy_group_type && objTopMenuItem.arrSubmenus[i].objParams.sPolicyGroupId === _this3.get(\"_objNavigation.objRouteParams\")[sCurrentRoute].policy_group_id) {\n                                        // All checks match\n                                        bMenuItemSelected = true;\n                                        bSubItemMatch = true;\n                                        sRouteDisplayName = Ember.get(objTopMenuItem.arrSubmenus[i], \"sLabel\");\n                                        break;\n                                    }\n                                } else {\n                                    // Mark the menu item as having a match\n                                    bMenuItemSelected = true;\n                                    bSubItemMatch = true;\n                                    sRouteDisplayName = Ember.get(objTopMenuItem.arrSubmenus[i], \"sLabel\");\n                                    break;\n                                }\n                            }\n                        }\n                    }\n\n                    // Create a complete url\n                    var sCompleteUrl = \"\";\n                    // Define an object for the route params\n                    var objRouteParams = null;\n                    // Set the route params if it is a plugin\n                    if (sPlaceName === \"plugin\") {\n                        objRouteParams = {\n                            plugin: [objTopMenuItem.sPluginId]\n                        };\n                    }\n                    // Set the route params if it is a policy group list\n                    if (sPlaceName === \"policy-group-list\") {\n                        objRouteParams = {\n                            \"policy-group-list\": [objTopMenuItem.arrSubmenus[i].objParams.sPolicyGroupType, objTopMenuItem.arrSubmenus[i].objParams.sPolicyGroupId]\n                        };\n                    }\n\n                    // Create the final completed url from the current item. This will use the placename\n                    // and the route params to create a final url\n                    sCompleteUrl = _this3.get(\"_objNavigation\").navigateWithinContext(sPlaceName, objRouteParams, null, true);\n\n                    // Create a sub menu item\n                    var objSubMenuItem = {\n                        sTitle: objTopMenuItem.arrSubmenus[i].sLabel,\n                        iOrder: objTopMenuItem.arrSubmenus[i].iOrder,\n                        sIcon: null,\n                        sRouteName: sCompleteUrl,\n                        sPlaceName: sRoutePlaceName,\n                        objRouteParams: objRouteParams,\n                        arrReferencedNamePlaces: objTopMenuItem.arrSubmenus[i].sReferencedNamePlaces,\n                        bIsSelected: bSubItemMatch\n                    };\n\n                    // Create a list of sub menu items if one does not yet exist\n                    if (a24Core.isEmpty(objParsedMenuItem.arrSubMenuItems)) {\n                        objParsedMenuItem.arrSubMenuItems = [];\n                    }\n\n                    // Push items to main menu item\n                    objParsedMenuItem.arrSubMenuItems.push(objSubMenuItem);\n\n                    // If this is the selected item, set the appropriate bread crumb items\n                    if (bSubItemMatch) {\n                        arrBreadCrumbItems = [];\n\n                        //If we have more than one sub menu item we add the top menu item to the breadcrumb bar\n                        if (objTopMenuItem.arrSubmenus.length !== 1 && sPlaceName !== \"policy-group-list\") {\n                            arrBreadCrumbItems.push({\n                                sTitle: Ember.get(objTopMenuItem, \"sLabel\"),\n                                sLink: objTopMenuItem.arrSubmenus[i].sRouteName\n                            });\n                        }\n\n                        // Create the bread crumb bar item based on the sub menu display name\n                        arrBreadCrumbItems.push({\n                            sTitle: sRouteDisplayName,\n                            sLink: sCompleteUrl\n                        });\n                    }\n                }\n\n                // If only ONE item is present in the sub menus, we collapse it to be part of the main menu\n                if (objParsedMenuItem.arrSubMenuItems.length === 1) {\n\n                    // Set the single item route name to the top menu item\n                    objParsedMenuItem.sRouteName = objParsedMenuItem.arrSubMenuItems[0].sRouteName;\n                    objParsedMenuItem.sPlaceName = objParsedMenuItem.arrSubMenuItems[0].sPlaceName;\n                    objParsedMenuItem.objRouteParams = objParsedMenuItem.arrSubMenuItems[0].objRouteParams;\n                    objParsedMenuItem.arrReferencedNamePlaces = objParsedMenuItem.arrSubMenuItems[0].arrReferencedNamePlaces;\n                    objParsedMenuItem.bIsSelected = objParsedMenuItem.arrSubMenuItems[0].bIsSelected;\n\n                    // Clear the sub menu items\n                    objParsedMenuItem.arrSubMenuItems = null;\n                }\n\n                arrParsedMenuItems.push(objParsedMenuItem);\n            });\n\n            if (!bMenuItemSelected && sCurrentRoute !== \"candidate.chat\" && sCurrentRoute !== \"candidate.interview-declaration\" && sCurrentRoute.substring(sCurrentRoute.length - \".react-easter-time\".length, sCurrentRoute.length) !== \".react-easter-time\" && !this._isFakeUrlOnlyRoute(sCurrentRoute, sContext)) {\n                // No matching items found, we need to go to the error page\n                this.get(\"_objNavigation\").navigateOutsideContext(\"404\");\n            }\n\n            // Set the breadcrumb bar item if the route was successfully navigated to\n            this.get(\"_objBreadCrumbService\").setBreadCrumbItems(arrBreadCrumbItems);\n            var sResourceType = this.get(\"_objUserSession.objGeneralDetails.sResourceType\");\n            if ((sResourceType === this.get(\"_objSSCoreConstants.CONTEXT_CANDIDATE_LOWER_HYPHEN\") || sResourceType === this.get(\"_objSSCoreConstants.CONTEXT_AGENCY_LOWER_HYPHEN\") || sResourceType === this.get(\"_objSSCoreConstants.CONTEXT_AGENCY_GROUP_LOWER_HYPHEN\")) && this.get(\"bAddHelpChat\")) {\n                var objSubMenuChat = {\n                    sTitle: this.get(\"_objStaffshiftCoreStringsService\").getString(\"help\"),\n                    iOrder: 9999,\n                    sIcon: \"help\",\n                    arrSubMenuItems: null\n                };\n\n                arrParsedMenuItems.push(objSubMenuChat);\n            }\n\n            return arrParsedMenuItems;\n        },\n        updateSelectedMenu: function updateSelectedMenu() {\n\n            var arrParsedMenuItems = this.parseMenuItems(this.get(\"arrMenuResponse\"));\n\n            for (var i = 0; i < arrParsedMenuItems.length; i++) {\n                this.set(\"arrMenuItems.\" + i + \".bIsSelected\", arrParsedMenuItems[i].bIsSelected);\n                if (!a24Core.isEmpty(this.get(\"arrMenuItems.\" + i + \".arrSubMenuItems\"))) {\n                    for (var j = 0; j < arrParsedMenuItems[i].arrSubMenuItems.length; j++) {\n                        this.set(\"arrMenuItems.\" + i + \".arrSubMenuItems.\" + j + \".bIsSelected\", arrParsedMenuItems[i].arrSubMenuItems[j].bIsSelected);\n                    }\n                }\n            }\n        },\n        onRouteChange: Ember.observer(\"_objNavigation.iRouteTransitions\", function () {\n            var _this4 = this;\n\n            Ember.run.next(function () {\n                if (!a24Core.isEmpty(_this4.get(\"objLeftMenuUIComponent\"))) {\n                    if (_this4.get(\"bFreshLoad\")) {\n                        _this4.set(\"bFreshLoad\", false);\n                        var arrParsedMenuItems = _this4.parseMenuItems(_this4.get(\"arrMenuResponse\"));\n                        _this4.set(\"arrMenuItems\", arrParsedMenuItems);\n                        _this4.set(\"bLoading\", false);\n                    } else {\n                        if (!a24Core.isEmpty(_this4.get(\"objLeftMenuUIComponent\"))) {\n                            _this4.updateSelectedMenu();\n                        }\n                    }\n                }\n            });\n        }),\n        /**\n         * This method will ensure that an icon is set, if not, it will provide the texture as default\n         */\n        _getMenuSectionMaterialIcon: function _getMenuSectionMaterialIcon(sIcon) {\n            return !a24Core.isEmpty(sIcon) ? sIcon : \"texture\";\n        },\n        /**\n         * Menu click handler\n         *\n         * @param objItem - menu item clicked\n         */\n        onClickMenuItem: function onClickMenuItem(objItem) {\n\n            if (objItem.sTitle === this.get(\"_objStaffshiftCoreStringsService\").getString(\"help\"))\n                // && (!a24Core.isEmpty(this.get(\"_objIntercom\"))) // commenting this out in case it needs to be added back\n                {\n                    //this.get(\"_objIntercom\").show();\n                    this.get(\"_objHelpBoxService\").toggleChatBox();\n                }\n        }\n    });\n});","define(\"a24-ember-staffshift-core/services/user-session\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n\n    var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n        return typeof obj;\n    } : function (obj) {\n        return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n    };\n\n    exports.default = Ember.Service.extend({\n\n        objAuthData: null, //accessToken, refreshToken, context name/avatar/type/id, sSocialImageUrl\n        objContextDetails: null, //This is details about the current context like sTimezone, sCountryId, sLocaleId\n        objGeneralDetails: null, // This is used to set general details not available on context or auth\n        arrMenuItems: null, //The menu structure for the context\n        objRestDetails: null, //This holds things such as the bearer and context concatenated values. e.g \"Bearer 42b6018b...\"\n\n        //This flag is here to stop child route from doing another auth check on initial load, this will currently only\n        //work one level deep and will need to be redone if we ever have deeper nesting\n        bSkipNextAuthCall: false,\n\n        _funcValidAuth: null, //Function to fire when user has valid auth and context details\n        _funcInValidAuth: null, //Function to call when user has invalid auth or could not get user context details\n        _objRestUserContext: Ember.inject.service(\"rest-user-context\"),\n        _objMenuService: Ember.inject.service(\"triage-menu\"),\n        _objCheckAuthService: Ember.inject.service(\"rest-checkauth\"),\n        _objConstantsSSCore: Ember.inject.service(\"a24-constants-staffshift-core\"),\n        _objFirebaseService: Ember.inject.service(\"firebase\"),\n        _objCheckAuthProperty: null,\n        _objContextCallProperty: null,\n\n        //Hold all the service calls that need to be aborted when the doCheckAuth start again\n        _objCheckAuthCall: null,\n        _objContextCall: null,\n        _objMenuCall: null,\n        _objUserContextsCall: null,\n        _objUserContextsSetCall: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n            this.set(\"objRestDetails\", {\n                sBearer: \"\",\n                sContext: \"\"\n            });\n            if (this.get(\"arrMenuItems\") == null) {\n                this.set(\"arrMenuItems\", []);\n            }\n        },\n        doCheckAuth: function doCheckAuth(funcValidAuth, funcInValidAuth, sContext, sCID, bReloadContextData) {\n            var _this = this;\n\n            this.set(\"_funcValidAuth\", funcValidAuth);\n            this.set(\"_funcInValidAuth\", funcInValidAuth);\n\n            if (!a24Core.isEmpty(this.get(\"_objCheckAuthCall\")) && _typeof(this.get(\"_objCheckAuthCall.abort\") === \"function\")) {\n                this.get(\"_objCheckAuthCall\").abort();\n            }\n            if (!a24Core.isEmpty(this.get(\"_objContextCall\")) && _typeof(this.get(\"_objContextCall.abort\") === \"function\")) {\n                this.get(\"_objContextCall\").abort();\n            }\n            if (!a24Core.isEmpty(this.get(\"_objMenuCall\")) && _typeof(this.get(\"_objMenuCall.abort\") === \"function\")) {\n                this.get(\"_objMenuCall\").abort();\n            }\n            if (!a24Core.isEmpty(this.get(\"_objUserContextsCall\")) && _typeof(this.get(\"_objUserContextsCall.abort\") === \"function\")) {\n                this.get(\"_objUserContextsCall\").abort();\n            }\n            if (!a24Core.isEmpty(this.get(\"_objUserContextsSetCall\")) && _typeof(this.get(\"_objUserContextsSetCall.abort\") === \"function\")) {\n                this.get(\"_objUserContextsSetCall\").abort();\n            }\n\n            var objAuthCall = this.get(\"_objCheckAuthService\").getCheckAuth(this, \"_objCheckAuthProperty\", function (objData) {\n                // Check if there is a logged in user\n                if (objData.code !== 1) {\n                    _this.set(\"objAuthData\", null);\n                    _this._doFinish(false, true);\n                } else {\n                    var sAuthToken = _this.get(\"objAuthData.accessToken\");\n                    if (a24Core.isEmpty(_this.get(\"objContextDetails\"))) {\n                        // If there is no context details we will just set the auth object as this will signify\n                        // the initial state\n                        _this.set(\"objAuthData\", objData);\n                    } else {\n                        if (objData.context.objReferenceId.mId === _this.get(\"objContextDetails.id\")) {\n                            // if the context details is the same as the auth object then we just set the auth object\n                            // as is since nothing actually changed and we can continue on\n                            _this.set(\"objAuthData\", objData);\n                        } else {\n                            // if the context details differ we will only set the auth token since we dont want to\n                            // replace the entire auth object since this will cause a issue where the context details\n                            // will be wrong for your current page and cause incorrect api requests to be made\n                            _this.set(\"objAuthData.accessToken\", objData.accessToken);\n                        }\n                    }\n\n                    //We will reload the context data when context changes or when the logged in user changes\n                    //This can happen when the user duplicates tabs and login with a different account in the one and\n                    //then start navigating other existing menu\n                    if (bReloadContextData || objData.accessToken !== sAuthToken) {\n                        //Clear any previous details\n                        _this._resetContextDetails();\n\n                        _this.get(\"_objFirebaseService\").signOut().finally(function () {\n                            //Get the needed context details\n                            _this._getLoggedInUserDetails(sContext, sCID, objData.accessToken);\n                        });\n                    } else {\n                        _this._doFinish(true, false);\n                    }\n                }\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\"], function () /*sCode, sStatus*/{\n                _this._doFinish(false, false);\n            }));\n            this.set(\"_objCheckAuthCall\", objAuthCall);\n        },\n        _resetContextDetails: function _resetContextDetails() {\n            this.set(\"objContextDetails\", null);\n            this.set(\"objGeneralDetails\", null);\n            this.set(\"arrMenuItems\", []);\n            this.set(\"objRestDetails.sBearer\", \"\");\n            this.set(\"objRestDetails.sContext\", \"\");\n        },\n        _doFinish: function _doFinish(bSuccess, bInvalidAuth) {\n            var funcToRun = null;\n            if (bSuccess) {\n                funcToRun = this.get(\"_funcValidAuth\");\n            } else {\n                funcToRun = this.get(\"_funcInValidAuth\");\n\n                //Clear all the context data\n                this.set(\"objAuthData\", null);\n                this.set(\"objContextDetails\", null);\n                this.set(\"arrMenuItems\", []);\n                this.set(\"objRestDetails.sBearer\", \"\");\n                this.set(\"objRestDetails.sContext\", \"\");\n            }\n\n            //Clear the callback functions\n            this.set(\"_funcValidAuth\", null);\n            this.set(\"_funcInValidAuth\", null);\n\n            if (!a24Core.isEmpty(funcToRun)) {\n                funcToRun(bInvalidAuth);\n            }\n        },\n        _getLoggedInUserDetails: function _getLoggedInUserDetails(sResource, sResourceId, sAccessToken) {\n            var _this2 = this;\n\n            var sAuthResource = this.get(\"objAuthData.context.objReferenceId.sResource\");\n            var sAuthResourceId = this.get(\"objAuthData.context.objReferenceId.mId\");\n\n            if (sAuthResource === \"User\") {\n                sAuthResource = \"system-admin\";\n            }\n            var bShouldSetContext = false;\n            if (sResource.replace(\"-\", \"\").toLowerCase() === sAuthResource.replace(\"-\", \"\").toLowerCase()) {\n                if (sResource !== \"system-admin\" && sResource !== \"candidate\") {\n                    // Resources match, and it is Agency, Org or AgencyGroup\n                    if (sResourceId !== sAuthResourceId) {\n                        // These are not the same resources\n                        bShouldSetContext = true;\n                    }\n                }\n            } else {\n                bShouldSetContext = true;\n            }\n\n            var sContext = \"\";\n\n            if (sResource === \"system-admin\") {\n                sContext = this.get(\"_objConstantsSSCore\").CONTEXT_SYSTEM_ADMIN;\n            } else if (sResource === \"agency\") {\n                sContext = this.get(\"_objConstantsSSCore\").CONTEXT_AGENCY + \" \" + sResourceId;\n            } else if (sResource === \"agency-group\") {\n                sContext = this.get(\"_objConstantsSSCore\").CONTEXT_AGENCY_GROUP + \" \" + sResourceId;\n            } else if (sResource === \"organisation\") {\n                sContext = this.get(\"_objConstantsSSCore\").CONTEXT_ORGANISATION + \" \" + sResourceId;\n            } else if (sResource === \"candidate\") {\n                sContext = this.get(\"_objConstantsSSCore\").CONTEXT_CANDIDATE;\n            }\n\n            //Set the bearer and sCID for further rest calls\n            this.set(\"objRestDetails.sBearer\", \"Bearer \" + sAccessToken);\n            this.set(\"objRestDetails.sContext\", sContext);\n\n            if (!bShouldSetContext // If we have the correct context\n            ) {\n                    this.set(\"objGeneralDetails\", {\n                        sResourceId: sResourceId,\n                        sResourceType: sResource,\n                        sAvatarUrl: this.get(\"objAuthData.context.sAvatarUrl\") // Set avatar for general use\n                    });\n\n                    var objUserContextDetailsPromise = this._getUserContextDetails(sResource, sResourceId);\n                    var objMenuItemsPromise = this._getMenuItems();\n\n                    a24RSVP.configure(this, {\n                        _objRestKeyUserContext: objUserContextDetailsPromise,\n                        _objRestKeyMenu: objMenuItemsPromise\n                    }, [{\n                        arrRequiredResponses: [\"_objRestKeyUserContext\", \"_objRestKeyMenu\"],\n                        funcOnComplete: function funcOnComplete(objResponses) {\n\n                            if (a24Core.isEmpty(objResponses._objRestKeyUserContext.objResponse) || a24Core.isEmpty(objResponses._objRestKeyMenu.objResponse)) {\n                                //if all do NOT succeed, this is to cater for the 404 from the contract expense\n                                _this2._doFinish(false, false);\n                            } else {\n                                //if all succeed\n                                _this2._doFinish(true, false);\n                            }\n                        }\n                    }]);\n                } else {\n                this._setContextAndCallDoAuth(sResource, sResourceId);\n            }\n        },\n        _setContextAndCallDoAuth: function _setContextAndCallDoAuth(sResource, sResourceId) {\n            var _this3 = this;\n\n            var objUserContextsCall = this.get(\"_objRestUserContext\").getList(this, this.get(\"objAuthData.context.sUserId\"), function (arrData) {\n                // At least one context will be set\n                var sCID = null;\n                for (var i = 0; i < arrData.length; i++) {\n                    /**\n                     * If the context is system-admin or candidate we use the id of the reference object,\n                     * If the context is any other, we look to see if the mId matches the\n                     * resource id and only set the id once we have a match\n                     */\n                    if (sResource.toLowerCase() === \"system-admin\" && arrData[i].objReferenceId.sResource === \"User\") {\n                        sCID = arrData[i].id;\n                        break;\n                    } else if (sResource.toLowerCase() === \"candidate\" && arrData[i].objReferenceId.sResource === \"Candidate\") {\n                        sCID = arrData[i].id;\n                        break;\n                    } else if (sResource.toLowerCase() !== \"candidate\" && sResource.toLowerCase() !== \"system-admin\") {\n                        if (arrData[i].objReferenceId.mId === sResourceId) {\n                            sCID = arrData[i].id;\n                            break;\n                        }\n                    }\n                }\n\n                if (a24Core.isEmpty(sCID)) {\n                    _this3._doFinish(false, false);\n                } else {\n                    var objUserContextsSetCall = _this3.get(\"_objRestUserContext\").setSelectedContext(_this3, sCID, function () {\n                        _this3.doCheckAuth(_this3.get(\"_funcValidAuth\"), _this3.get(\"_funcInValidAuth\"), sResource, sResourceId, true);\n                    }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\"], function () /*sCode, sStatus*/{\n                        _this3._doFinish(false, false);\n                    }));\n                    _this3.set(\"_objUserContextsSetCall\", objUserContextsSetCall);\n                }\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\"], function () /*sCode, sStatus*/{\n                _this3._doFinish(false, false);\n            }));\n            this.set(\"_objUserContextsCall\", objUserContextsCall);\n        },\n        /**\n         * Normalises a numeric ISO 3166-1 country id to 3 digits. The backend does not\n         * guarantee the leading zero (e.g. it sends \"36\" instead of \"036\" for AU), so we\n         * pad 1-2 digit numeric ids here at the ingestion point. 3-digit ids (826/710/840)\n         * and any non-numeric value are left unchanged.\n         *\n         * @author David Olufemi <david.olufemi@a24group.com>\n         * @since  12 June 2026\n         *\n         * @param sCountryId - The country id from the context details\n         *\n         * @return The 3-digit numeric country id (or the original value if not 1-2 digit numeric)\n         */\n        _normaliseCountryId: function _normaliseCountryId(sCountryId) {\n            if (a24Core.isEmpty(sCountryId)) {\n                return sCountryId;\n            }\n            var sValue = String(sCountryId);\n            if (/^\\d{1,2}$/.test(sValue)) {\n                return (\"00\" + sValue).slice(-3);\n            }\n            return sValue;\n        },\n        _getUserContextDetails: function _getUserContextDetails(sResource, sResourceId) {\n            var _this4 = this;\n\n            var objContextCall = this.get(\"_objRestUserContext\").getUserContextDetails(this, sResource, sResourceId, function (objContextDetails) {\n                //Set the context details and let RSVP handle rest\n                if (!a24Core.isEmpty(objContextDetails) && !a24Core.isEmpty(objContextDetails.sCountryId)) {\n                    objContextDetails.sCountryId = _this4._normaliseCountryId(objContextDetails.sCountryId);\n                }\n                _this4.set(\"objContextDetails\", objContextDetails);\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\"], function () /*sCode, sStatus*/{\n                //RSVP will handle any failures\n            }));\n            this.set(\"_objContextCall\", objContextCall);\n            return objContextCall;\n        },\n        _getMenuItems: function _getMenuItems() {\n            var objMenuCall = this.get(\"_objMenuService\").getMenuItems();\n            this.set(\"_objMenuCall\", objMenuCall);\n            return objMenuCall;\n        },\n        /**\n         * Get the users first name\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  23 May 2016\n         *\n         * @returns the users first name\n         */\n        getUserFirstName: function getUserFirstName() {\n            var objAuthData = this.get(\"objAuthData\");\n            if (!a24Core.isEmpty(objAuthData) && !a24Core.isEmpty(objAuthData.identity) && !a24Core.isEmpty(objAuthData.identity.sFirstName)) {\n                return objAuthData.identity.sFirstName;\n            } else {\n                return null;\n            }\n        },\n        /**\n         * Get the users last name\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  8 Aug 2017\n         *\n         * @returns the users last name\n         */\n        getUserLastName: function getUserLastName() {\n            var objAuthData = this.get(\"objAuthData\");\n            if (!a24Core.isEmpty(objAuthData) && !a24Core.isEmpty(objAuthData.identity) && !a24Core.isEmpty(objAuthData.identity.sLastName)) {\n                return objAuthData.identity.sLastName;\n            } else {\n                return null;\n            }\n        },\n        /**\n         * Get the users first and last name\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  8 Aug 2017\n         *\n         * @returns the users full name\n         */\n        getUserFullName: function getUserFullName() {\n            return this.getUserFirstName() + \" \" + this.getUserLastName();\n        },\n        /**\n         * Get the users email address\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  8 Aug 2017\n         *\n         * @returns the users email\n         */\n        getUserEmail: function getUserEmail() {\n            var objAuthData = this.get(\"objAuthData\");\n            if (!a24Core.isEmpty(objAuthData) && !a24Core.isEmpty(objAuthData.identity) && !a24Core.isEmpty(objAuthData.identity.sEmailAddress)) {\n                return objAuthData.identity.sEmailAddress;\n            } else {\n                return null;\n            }\n        },\n        /**\n         * Get the users avatar\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  23 May 2016\n         *\n         * @returns the users avatar url\n         */\n        getUserAvatar: function getUserAvatar() {\n            var objAuthData = this.get(\"objAuthData\");\n            if (!a24Core.isEmpty(objAuthData) && !a24Core.isEmpty(objAuthData.context) && !a24Core.isEmpty(objAuthData.context.sAvatarUrl)) {\n                return objAuthData.context.sAvatarUrl;\n            } else {\n                return null;\n            }\n        },\n        /**\n         * Get the user context reference object\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  1 July 2016\n         *\n         * @returns The context reference object\n         */\n        getUserContextReference: function getUserContextReference() {\n            var objAuthData = this.get(\"objAuthData\");\n            return objAuthData.context.objReferenceId;\n        }\n    });\n});","define(\"a24-ember-staffshift-core/templates/components/card-datagrid-custom-filter-ward\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"OFlz65MI\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[26,\\\"input-form-suggest\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"bRequired\\\",\\\"sOptionsLabelKey\\\",\\\"sOptionsValueKey\\\",\\\"iOrder\\\",\\\"funcGetSuggestions\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"belongsToSite\\\",[22,[\\\"_objSSCoreStringsService\\\"]]],null],\\\"site\\\",true,\\\"sDisplayName\\\",\\\"sSiteId\\\",1,[22,[\\\"_funcGetSiteSuggestions\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bShowWards\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"bRequired\\\",\\\"bMultiSelect\\\",\\\"sProperty\\\",\\\"bLoading\\\",\\\"arrOptions\\\",\\\"arrValues\\\",\\\"sOptionsLabelKey\\\",\\\"sOptionsValueKey\\\",\\\"iOrder\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"andWardName\\\",[22,[\\\"_objSSCoreStringsService\\\"]]],null],true,true,\\\"ward\\\",[22,[\\\"_bWardsLoading\\\"]],[22,[\\\"objHeaderItem\\\",\\\"_objFilterWardsDropdown\\\"]],[22,[\\\"objHeaderItem\\\",\\\"_objFilterWardsSelected\\\"]],\\\"ward_name\\\",\\\"ward_id\\\",2,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/card-datagrid-custom-filter-ward.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/chatter-box\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"KoSeOjVS\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"a24-chat-box-container\\\",[26,\\\"if\\\",[[22,[\\\"_bHideChat\\\"]],\\\" display-none\\\"],null]]]],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"iframe-component\\\",null,[[\\\"bFullscreen\\\",\\\"sIFrameUrl\\\"],[false,[22,[\\\"sChatBoxUrl\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-chat-box-loader\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\",\\\"sBlackOutClass\\\"],[true,\\\"grey lighten-3\\\"]]],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9],[0,\\\"\\\\n\\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-chat-box-eggy a24-chat-box-eggy-chatterbox\\\"],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"showHide\\\"],null],null],[8],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/chatter-box.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/chatter-right-container\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"h/tQxJKc\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[26,\\\"chatter-right-header\\\",null,[[\\\"objData\\\"],[[22,[\\\"objData\\\"]]]]],false],[0,\\\"\\\\n\\\"],[1,[26,\\\"chatter-right-session-data\\\",null,[[\\\"_momentHelper\\\",\\\"objData\\\"],[[22,[\\\"_momentHelper\\\"]],[22,[\\\"objData\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/chatter-right-container.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/chatter-right-conversation-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"KHqfjGho\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bServerError\\\"]]],null,{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"conversations\\\",[22,[\\\"_objSSCoreStrings\\\"]]],null],false,[22,[\\\"_arrReloadActions\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-md a24-grey-text-darken-1 text-center padding-normal\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"apiUnavailablePleaseReload\\\",[22,[\\\"_objSSCoreStrings\\\"]]],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bApplyDefaultPadding\\\",\\\"bLoading\\\",\\\"sHeaderClass\\\"],[[26,\\\"lookup-string\\\",[\\\"conversations\\\",[22,[\\\"_objSSCoreStrings\\\"]]],null],false,false,\\\"padding-left-normal padding-top-double padding-right-normal\\\"]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"tab-bar-tabs\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"tab-bar-tabs-table\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"table\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"tr\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[8],[0,\\\"\\\\n                            \\\"],[6,\\\"a\\\"],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onClickCurrent\\\"],null],null],[8],[0,\\\"\\\\n                                \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"tab-bar-tab waves-effect\\\",[26,\\\"unless\\\",[[22,[\\\"_bArchivedTabActive\\\"]],\\\" active\\\"],null]]]],[8],[0,\\\"\\\\n                                    \\\"],[1,[26,\\\"lookup-string\\\",[\\\"current\\\",[22,[\\\"_objSSCoreStrings\\\"]]],null],false],[0,\\\"\\\\n                                \\\"],[9],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n                        \\\"],[6,\\\"td\\\"],[8],[0,\\\"\\\\n                            \\\"],[6,\\\"a\\\"],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onClickArchived\\\"],null],null],[8],[0,\\\"\\\\n                                \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"tab-bar-tab waves-effect\\\",[26,\\\"if\\\",[[22,[\\\"_bArchivedTabActive\\\"]],\\\" active\\\"],null]]]],[8],[0,\\\"\\\\n                                    \\\"],[1,[26,\\\"lookup-string\\\",[\\\"archived\\\",[22,[\\\"_objSSCoreStrings\\\"]]],null],false],[0,\\\"\\\\n                                \\\"],[9],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bArchivedTabActive\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[26,\\\"conversation-list\\\",null,[[\\\"bIsArchived\\\",\\\"sConversationUserId\\\",\\\"objChatConversationRestService\\\",\\\"onServerError\\\",\\\"onGoToConversation\\\"],[true,[22,[\\\"sConversationUserId\\\"]],[22,[\\\"objChatConversationRestService\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onServerError\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onGoToConversation\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            \\\"],[1,[26,\\\"conversation-list\\\",null,[[\\\"bIsArchived\\\",\\\"sConversationUserId\\\",\\\"objChatConversationRestService\\\",\\\"onServerError\\\",\\\"onGoToConversation\\\"],[false,[22,[\\\"sConversationUserId\\\"]],[22,[\\\"objChatConversationRestService\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onServerError\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onGoToConversation\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/chatter-right-conversation-component.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/chatter-right-header\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"/XP+kkXo\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[26,\\\"loader-blackout\\\",null,[[\\\"sBlackOutClass\\\",\\\"bLoading\\\"],[\\\"a24-chatter-right-header-loader\\\",[22,[\\\"objData\\\",\\\"data_loading\\\"]]]]],false],[0,\\\"\\\\n\\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"center-text-horizontal \\\",[26,\\\"if\\\",[[22,[\\\"objData\\\",\\\"data_loading\\\"]],\\\"visibility-hidden\\\"],null]]]],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sRoundButtonSize\\\",\\\"sIconSizeClass\\\",\\\"sLetter\\\",\\\"sIcon\\\",\\\"sIconFa\\\",\\\"sImageUrl\\\",\\\"bClickable\\\",\\\"sBackgroundClass\\\",\\\"sIconClass\\\"],[\\\"round-icon-component-jumbo\\\",\\\"round-icon-component-content-jumbo\\\",[22,[\\\"_sFirstLetter\\\"]],[22,[\\\"_sAvatarIcon\\\"]],[22,[\\\"_sAvatarIconFa\\\"]],[22,[\\\"_sAvatar\\\"]],false,\\\"grey lighten-1\\\",\\\"a24-grey-text-darken-4\\\"]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"center-horizontal-flex\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-chatter-right-header-text-cont\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sRoundButtonSize\\\",\\\"sIconSizeClass\\\",\\\"sHeaderSizeClass\\\",\\\"sHeader\\\",\\\"bHasIcon\\\",\\\"bEllipseHeader\\\",\\\"sIconName\\\",\\\"sIconFa\\\",\\\"sIconColor\\\",\\\"class\\\"],[[22,[\\\"_objLibConstants\\\",\\\"ROUND_ICON_SIZE_SMALL\\\"]],[22,[\\\"_objLibConstants\\\",\\\"ROUND_ICON_CONTENT_SIZE_SMALL\\\"]],[22,[\\\"_objLibConstants\\\",\\\"ROUND_ICON_HEADER_SIZE_MEDIUM\\\"]],[22,[\\\"_sName\\\"]],true,false,[22,[\\\"_sIcon\\\"]],[22,[\\\"_sIconFa\\\"]],\\\"a24-grey-text-darken-1\\\",\\\"a24-chatter-right-header-text\\\"]]],false],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"a24-chatter-right-header-dot \\\",[20,\\\"_sDotColor\\\"]]]],[8],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_sStatus\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[20,\\\"_sStatus\\\"],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/chatter-right-header.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/chatter-right-session-data\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"cCYOrrPI\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\"],[[26,\\\"lookup-string\\\",[\\\"sessionData\\\",[22,[\\\"_objSSCoreStrings\\\"]]],null],false]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"view-edit-section-content\\\",null,[[\\\"arrData\\\"],[[22,[\\\"_arrSessionData\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\"],[[26,\\\"lookup-string\\\",[\\\"techData\\\",[22,[\\\"_objSSCoreStrings\\\"]]],null],false]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"view-edit-section-content\\\",null,[[\\\"arrData\\\"],[[22,[\\\"_arrTechData\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\"],[[26,\\\"lookup-string\\\",[\\\"userData\\\",[22,[\\\"_objSSCoreStrings\\\"]]],null],false]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"view-edit-section-content\\\",null,[[\\\"arrData\\\"],[[22,[\\\"_arrUserData\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/chatter-right-session-data.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/coming-soon-card\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"I6cgMK2E\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"card-style-component\\\",null,[[\\\"bApplyDefaultPadding\\\",\\\"bHideOverFlow\\\",\\\"class\\\"],[false,[22,[\\\"bHideOverFlow\\\"]],\\\"padding-normal padding-top-double\\\"]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\",\\\"sBlackOutClass\\\"],[[22,[\\\"bLoading\\\"]],\\\"padding-normal-minus padding-top-double-minus\\\"]]],false],[0,\\\"\\\\n        \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"class\\\"],[[26,\\\"lookup-string\\\",[\\\"comingSoon\\\"],null],\\\"padding-bottom-micro\\\"]]],false],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"availableSoon\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/coming-soon-card.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/context-switcher-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"8OSJDxzV\", \"block\": \"{\\\"symbols\\\":[\\\"objContext\\\",\\\"iIndex\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-context-switcher position-relative\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\"],[[22,[\\\"_bLoading\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-context-switcher-section\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-context-switcher-heading\\\"],[8],[0,\\\"\\\\n            Currently working as:\\\\n        \\\"],[9],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-context-switcher-context-display\\\"],[8],[0,\\\"\\\\n\\\\n            \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sLetter\\\",\\\"sImageUrl\\\",\\\"sBackgroundClass\\\",\\\"sIconClass\\\",\\\"sRoundButtonSize\\\",\\\"sIconSizeClass\\\",\\\"bClickable\\\"],[[22,[\\\"objSelectedContext\\\",\\\"sDisplayLetter\\\"]],[22,[\\\"objSelectedContext\\\",\\\"sAvatarUrl\\\"]],\\\"grey\\\",\\\"white-text\\\",[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_SIZE_SMALL\\\",[22,[\\\"_objConstantsEmberLib\\\"]]],null],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_CONTENT_SIZE_SMALL\\\",[22,[\\\"_objConstantsEmberLib\\\"]]],null],false]]],false],[0,\\\"\\\\n            \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-context-switcher-vertical-middle padding-left-small\\\"],[8],[1,[22,[\\\"objSelectedContext\\\",\\\"sDisplayName\\\"]],false],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"arrSwitchableContexts\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[20,\\\"horizontal-line-component\\\"],false],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-context-switcher-section\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-context-switcher-heading\\\"],[8],[0,\\\"\\\\n                Switch context to:\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"arrSwitchableContexts\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-context-switcher-context-display cursor-clickable waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"contextSwitch\\\",[21,1,[]]]],[8],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sLetter\\\",\\\"sImageUrl\\\",\\\"sBackgroundClass\\\",\\\"sIconClass\\\",\\\"sRoundButtonSize\\\",\\\"sIconSizeClass\\\",\\\"bClickable\\\"],[[21,1,[\\\"sDisplayLetter\\\"]],[21,1,[\\\"sAvatarUrl\\\"]],\\\"grey\\\",\\\"white-text\\\",[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_SIZE_SMALL\\\",[22,[\\\"_objConstantsEmberLib\\\"]]],null],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_CONTENT_SIZE_SMALL\\\",[22,[\\\"_objConstantsEmberLib\\\"]]],null],false]]],false],[0,\\\"\\\\n                        \\\"],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-context-switcher-vertical-middle padding-left-small\\\"],[8],[1,[21,1,[\\\"sDisplayName\\\"]],false],[9],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1,2]},null],[0,\\\"            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[1,[20,\\\"horizontal-line-component\\\"],false],[0,\\\"\\\\n\\\"],[9]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/context-switcher-component.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/conversation-list\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"FUFtv7Tv\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objConversation\\\",\\\"iIndex\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\"],[[22,[\\\"_bLoading\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"_arrDisplayConversations\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[21,3,[]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[20,\\\"horizontal-line-component\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"conversation-list-item position-relative\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"padding-normal\\\",[26,\\\"if\\\",[[21,2,[\\\"arrActions\\\"]],\\\" waves-effect cursor-clickable\\\"],null]]]],[3,\\\"action\\\",[[21,0,[]],\\\"onClickConversation\\\",[21,2,[]]]],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-12\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"center-vertical-flex float-right\\\"],[8],[0,\\\"\\\\n                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-grey-text-darken-1 font-sm conversation-list-item-time\\\"],[8],[0,\\\"\\\\n                                \\\"],[1,[21,2,[\\\"sTime\\\"]],false],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row padding-top-small\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-12\\\"],[8],[0,\\\"\\\\n                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"center-vertical-flex\\\"],[8],[0,\\\"\\\\n                            \\\"],[6,\\\"i\\\"],[10,\\\"class\\\",\\\"a24-grey-text-darken-1 material-icons font-sm\\\"],[8],[0,\\\"chat_bubble\\\"],[9],[0,\\\"\\\\n                            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-left-small text-ellipse font-sm\\\"],[8],[1,[21,2,[\\\"sMessage\\\"]],false],[9],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\\n            \\\"],[1,[26,\\\"card-actions-component\\\",null,[[\\\"iVisibleActions\\\",\\\"arrActionItems\\\"],[1,[21,2,[\\\"arrActions\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2,3]},{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"no-data padding-double\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string\\\",[\\\"noData\\\"],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-small\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"card-datagrid-pager\\\",null,[[\\\"iResultCount\\\",\\\"iPage\\\",\\\"iPerPage\\\",\\\"cardDatagridPagerEvent\\\"],[[22,[\\\"_iResultCount\\\"]],[22,[\\\"_iPage\\\"]],[22,[\\\"_iPerPage\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridPagerEvent\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"classNames\\\",\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"bDismissible\\\",\\\"onPopupResponsiveDismiss\\\"],[\\\"conversation-preview-dialog\\\",[22,[\\\"_bShowConversationPreviewPopup\\\"]],[22,[\\\"_bConversationPreviewPopupLoading\\\"]],false,false,[26,\\\"action\\\",[[21,0,[]],\\\"onConversationPreviewPopupClose\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"conversationPreview\\\",[22,[\\\"_objSSCoreStrings\\\"]]],null],\\\"padding-double popup-header-gray\\\",false,[21,1,[]],[22,[\\\"_objSpecialConversationPreviewPopupAction\\\"]],[22,[\\\"_arrConversationPreviewPopupActions\\\"]]]]],false],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[26,\\\"unless\\\",[[22,[\\\"_bShowConversationPreviewPopup\\\"]],\\\"display-none\\\",\\\"full-height stop-scrolling\\\"],null],null],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[26,\\\"if\\\",[[22,[\\\"_bConversationPreviewPopupLoading\\\"]],\\\"display-none\\\",\\\"full-height\\\"],null],null],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"conversation-preview\\\",null,[[\\\"objConversation\\\"],[[22,[\\\"_objConversationPreview\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onConversationPreviewPopupClose\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"ok\\\"],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/conversation-list.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/conversation-preview-popup\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"MnH5aTKM\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\"],\\\"statements\\\":[[4,\\\"popup-responsive-modal\\\",null,[[\\\"classNames\\\",\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"bDismissible\\\",\\\"onPopupResponsiveDismiss\\\"],[\\\"conversation-preview-dialog\\\",[22,[\\\"bShowPopup\\\"]],[22,[\\\"bPopupLoading\\\"]],false,false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupClose\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"conversationPreview\\\",[22,[\\\"_objSSCoreStringsService\\\"]]],null],\\\"padding-double popup-header-gray\\\",false,[21,1,[]],[22,[\\\"_objSpecialPopupAction\\\"]],[22,[\\\"_arrActions\\\"]]]]],false],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[26,\\\"unless\\\",[[22,[\\\"bShowPopup\\\"]],\\\"display-none\\\",\\\"full-height stop-scrolling\\\"],null],null],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[26,\\\"if\\\",[[22,[\\\"bPopupLoading\\\"]],\\\"display-none\\\",\\\"full-height\\\"],null],null],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bShowPopup\\\"]]],null,{\\\"statements\\\":[[4,\\\"unless\\\",[[22,[\\\"bPopupLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"                    \\\"],[1,[26,\\\"conversation-preview\\\",null,[[\\\"objConversation\\\"],[[22,[\\\"_objConversationPreview\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupClose\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"ok\\\"],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/conversation-preview-popup.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/conversation-preview\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"PC15WcP+\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_sPreviewStyleString\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[20,\\\"_sPreviewStyleString\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"_sPreviewString\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[20,\\\"_sPreviewString\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/conversation-preview.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/email-preview-popup\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"NGLD5dql\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objParentScroller\\\"],\\\"statements\\\":[[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"bDismissible\\\",\\\"sModalSize\\\",\\\"onPopupResponsiveDismiss\\\"],[[22,[\\\"bShowPopup\\\"]],[22,[\\\"bPopupLoading\\\"]],false,false,\\\"modal-lg\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onPopupClose\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"emailPreview\\\",[22,[\\\"_objSSCoreStringsService\\\"]]],null],\\\"padding-double popup-header-gray\\\",false,[21,1,[]],[22,[\\\"_objSpecialPopupAction\\\"]],[22,[\\\"_arrActions\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"bShowPopup\\\"]]]],{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"bShowPopup\\\"]]],null,{\\\"statements\\\":[[4,\\\"unless\\\",[[22,[\\\"_bPopupLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-normal\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"email-preview\\\",null,[[\\\"objEmail\\\"],[[22,[\\\"_objEmailPreview\\\"]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupClose\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"ok\\\"],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/email-preview-popup.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/email-preview\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"tj6OtA+O\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_sPreviewString\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[20,\\\"_sPreviewString\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/email-preview.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/help-box\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"fFRRYs2U\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"unless\\\",[[22,[\\\"_bHidden\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"a24-chat-box-container\\\",[26,\\\"if\\\",[[22,[\\\"_bHideChat\\\"]],\\\" display-none\\\"],null]]]],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"iframe-component\\\",null,[[\\\"bFullscreen\\\",\\\"sIFrameUrl\\\"],[false,[22,[\\\"sChatBoxUrl\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-chat-box-loader\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\",\\\"sBlackOutClass\\\"],[true,\\\"grey lighten-3\\\"]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-chat-box-eggy a24-chat-box-eggy-help-box\\\"],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"showHide\\\"],null],null],[8],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/help-box.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/login-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"kSI/9/2e\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\"],[[22,[\\\"_bLoading\\\"]]]]],false],[0,\\\"\\\\n\\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[[26,\\\"lookup-string\\\",[\\\"signIn\\\"],null],false,[22,[\\\"bMobileView\\\"]],[22,[\\\"objSpecialLoginPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"sName\\\",\\\"bRequired\\\",\\\"iOrder\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\"],[[26,\\\"lookup-string\\\",[\\\"usernameEmail\\\",[22,[\\\"_objStaffshiftCoreStringsService\\\"]]],null],\\\"_sUsername\\\",\\\"username\\\",true,1,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"input-form-password\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"sName\\\",\\\"bRequired\\\",\\\"iOrder\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\"],[[26,\\\"lookup-string\\\",[\\\"password\\\"],null],\\\"_sPassword\\\",\\\"password\\\",true,2,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"input-form-checkbox\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"bRequired\\\",\\\"iOrder\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\"],[[26,\\\"lookup-string\\\",[\\\"rememberMe\\\"],null],\\\"_bRememberMe\\\",false,3,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-secondary-color-text-accent cursor-clickable\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"showForgotPasswordPopup\\\"]],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"forgotYourPassword\\\",[22,[\\\"_objStaffshiftCoreStringsService\\\"]]],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-top-normal\\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button-blue waves-effect waves-light\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"doLogin\\\"]],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"signIn\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"],[1,[26,\\\"reset-password-popup-component\\\",null,[[\\\"sUsernameEmail\\\",\\\"bShowPopup\\\",\\\"onForgotPasswordClose\\\"],[[22,[\\\"_sUsernameEmail\\\"]],[22,[\\\"_bShowForgotPasswordPopup\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"hideForgotPasswordPopup\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/login-component.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/logout-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"OqOQ/fdB\", \"block\": \"{\\\"symbols\\\":[\\\"&default\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-logout-component\\\"],[8],[0,\\\"\\\\n    \\\"],[13,1],[0,\\\"\\\\n    \\\"],[6,\\\"button\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"doLogout\\\"]],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"signOut\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/logout-component.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/navigation-bar-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"g06nmM61\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-navbar-component-middle\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bDisplayReactFrame\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"react-widget\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objPostIframeData\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9],[0,\\\"\\\\n\\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-navbar-component padding-left-normal\\\"],[8],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-navbar-component-avatar-button float-right a24-dropdown-parent-elevation\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"dropdown-trigger\\\",null,[[\\\"bInline\\\",\\\"sDropdownContentId\\\"],[false,[22,[\\\"sContextSwitcherDropdownContentId\\\"]]]],{\\\"statements\\\":[[0,\\\"            \\\"],[1,[26,\\\"round-icon-component\\\",null,[[\\\"sLetter\\\",\\\"sImageUrl\\\",\\\"sBackgroundClass\\\",\\\"sRoundButtonSize\\\",\\\"sIconSizeClass\\\"],[[22,[\\\"sFirstNameInitial\\\"]],[22,[\\\"sAvatarUrl\\\"]],[22,[\\\"sBaseClass\\\"]],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_SIZE_SMALL\\\",[22,[\\\"_objConstantsEmberLib\\\"]]],null],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_CONTENT_SIZE_SMALL\\\",[22,[\\\"_objConstantsEmberLib\\\"]]],null]]]],false],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"avatar-dropdown-arrow cursor-clickable\\\"],[8],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"a24-navbar-component-actions float-right\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_objNavBarService\\\",\\\"arrRightSideActions\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[26,\\\"card-actions-component\\\",null,[[\\\"arrActionItems\\\"],[[22,[\\\"_objNavBarService\\\",\\\"arrRightSideActions\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[4,\\\"dropdown-content\\\",null,[[\\\"class\\\",\\\"bShow\\\",\\\"sAlign\\\",\\\"sDropdownContentId\\\"],[\\\"a24-navbar-context-switcher\\\",[22,[\\\"bShowDropdown\\\"]],\\\"right\\\",[22,[\\\"sContextSwitcherDropdownContentId\\\"]]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"display-inline-block\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[20,\\\"context-switcher-component\\\"],false],[0,\\\"\\\\n        \\\"],[1,[20,\\\"logout-component\\\"],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/navigation-bar-component.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/notification-preview-popup\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"tWVDHlPS\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\"],\\\"statements\\\":[[4,\\\"popup-responsive-modal\\\",null,[[\\\"classNames\\\",\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"bDismissible\\\",\\\"onPopupResponsiveDismiss\\\"],[\\\"conversation-preview-dialog\\\",[22,[\\\"bShowPopup\\\"]],[22,[\\\"bPopupLoading\\\"]],false,false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupClose\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"notificationPreview\\\",[22,[\\\"_objSSCoreStringsService\\\"]]],null],\\\"padding-double popup-header-gray\\\",false,[21,1,[]],[22,[\\\"objSpecialPopupAction\\\"]],[22,[\\\"arrActions\\\"]]]]],false],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[26,\\\"unless\\\",[[22,[\\\"bShowPopup\\\"]],\\\"display-none\\\",\\\"full-height stop-scrolling\\\"],null],null],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[26,\\\"if\\\",[[22,[\\\"bPopupLoading\\\"]],\\\"display-none\\\",\\\"full-height\\\"],null],null],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"bShowPopup\\\"]]],null,{\\\"statements\\\":[[4,\\\"unless\\\",[[22,[\\\"bPopupLoading\\\"]]],null,{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"bIsEmail\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[1,[26,\\\"email-preview\\\",null,[[\\\"objEmail\\\"],[[22,[\\\"objNotificationPreview\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"                        \\\"],[1,[26,\\\"notification-preview\\\",null,[[\\\"objNotification\\\"],[[22,[\\\"objNotificationPreview\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupClose\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"close\\\"],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/notification-preview-popup.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/notification-preview\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"qNjmGiMu\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_sPreviewStyleString\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[20,\\\"_sPreviewStyleString\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"_sPreviewString\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[20,\\\"_sPreviewString\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[1,[26,\\\"input-form-tel-number\\\",null,[[\\\"sProperty\\\",\\\"class\\\",\\\"onInputFormTelNumberInitDone\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[\\\"number\\\",\\\"display-none-force\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onInputFormTelNumberInitDone\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/notification-preview.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/notification-sent-popup\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"yQ7MgsJP\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objNotificationSent\\\"],\\\"statements\\\":[[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"bDismissible\\\",\\\"onPopupResponsiveDismiss\\\"],[[22,[\\\"bShowPopup\\\"]],[22,[\\\"bPopupLoading\\\"]],false,false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupClose\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[[26,\\\"lookup-string\\\",[\\\"notificationDetails\\\",[22,[\\\"_objSSCoreStrings\\\"]]],null],\\\"padding-double popup-header-gray\\\",false,[21,1,[]],[22,[\\\"_objSpecialPopupAction\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-double\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bOptOut\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"notificationOptOut\\\",[22,[\\\"_objSSCoreStrings\\\"]]],null],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12 padding-small\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[26,\\\"lookup-string\\\",[\\\"notificationsSent\\\",[22,[\\\"_objSSCoreStrings\\\"]]],null],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"iMaxHeight\\\"],[500]],{\\\"statements\\\":[[0,\\\"                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative showActionsOnCollapseHover\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"_arrNotificationsSentResponse\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[1,[26,\\\"accordion-item-component\\\",null,[[\\\"sHeader\\\",\\\"sExtraInfo\\\",\\\"sHeaderClass\\\",\\\"sIconName\\\",\\\"sIconFa\\\",\\\"sIconSvg\\\",\\\"arrActionItems\\\",\\\"sIconClass\\\",\\\"funcOnItemClicked\\\"],[[21,2,[\\\"medium\\\"]],[21,2,[\\\"status\\\"]],\\\"a24-grey-text-darken-3\\\",[21,2,[\\\"icon\\\"]],[21,2,[\\\"icon_fa\\\"]],[21,2,[\\\"icon_svg\\\"]],[21,2,[\\\"arrActions\\\"]],\\\"grey-text\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onNotificationSentClick\\\",[21,2,[]]],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"no-data padding-bottom-normal\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"noData\\\"],null],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"                \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupClose\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"close\\\"],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[1,[26,\\\"notification-preview-popup\\\",null,[[\\\"bShowPopup\\\",\\\"bPopupLoading\\\",\\\"objSpecialPopupAction\\\",\\\"objNotificationPreview\\\",\\\"bIsEmail\\\",\\\"arrActions\\\",\\\"onPopupCloseAction\\\"],[[22,[\\\"_bShowNotifcationPreviewPopup\\\"]],[22,[\\\"_bNotificationPreviewPopupLoading\\\"]],[22,[\\\"_objNotificationPreviewSpecialPopupAction\\\"]],[22,[\\\"_objNotificationPreview\\\"]],[22,[\\\"_bIsEmail\\\"]],[22,[\\\"_arrNotificationPreviewPopupActions\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onNotificationPreviewPopupClose\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/notification-sent-popup.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/page-access-denied\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"JeCa6Eys\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"page-access-denied-navigation-bar\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bHasSession\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[20,\\\"navigation-bar-component\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[9],[0,\\\"\\\\n\\\"],[1,[26,\\\"status-error-page\\\",null,[[\\\"class\\\"],[\\\"position-absolute-force full-width\\\"]]],false]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/page-access-denied.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/page-react-easter-egg-item\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"qZ0XkgQ1\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"bShowInitFields\\\"]]],null,{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\"],[\\\"Enter values to get the things\\\",false]],{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"sValue\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[\\\"React Url\\\",\\\"url\\\",1,[22,[\\\"_sUrlStart\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"input-form-text-area\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[\\\"Init data(most likely your route trigger data as JS)\\\",\\\"data\\\",2,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"input-form-checkbox\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[\\\"Popup\\\",\\\"popup\\\",3,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_objFrameData\\\",\\\"popup\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[1,[26,\\\"react-popup\\\",null,[[\\\"bShow\\\",\\\"sIFrameUrl\\\",\\\"bLoading\\\",\\\"objData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_bShowPopup\\\"]],[22,[\\\"_objFrameData\\\",\\\"url\\\"]],[22,[\\\"_bPopupLoading\\\"]],[22,[\\\"_objFrameData\\\",\\\"data\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecieveDataReactPopup\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_objFrameData\\\",\\\"url\\\"]],[22,[\\\"_objFrameData\\\",\\\"data\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecieveDataReactPage\\\"],null]]]],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/page-react-easter-egg-item.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/page-react-easter-egg\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"CfR7yHj7\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"each\\\",[[22,[\\\"arrItems\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"page-react-easter-egg-item\\\",null,[[\\\"bShowInitFields\\\"],[[22,[\\\"bShowInitFields\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"bShowInitFields\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"center-text-horizontal padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[8],[0,\\\"Check console to see function name to use on the window object to post data to the iframe e.g \\\"],[6,\\\"b\\\"],[8],[0,\\\"reactEasterPostemberXXX\\\"],[9],[9],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[8],[0,\\\"(Tip: In chrome console you can just type \\\"],[6,\\\"b\\\"],[8],[0,\\\"window.react\\\"],[9],[0,\\\" and it will autocomplete/suggest)\\\"],[9],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[8],[0,\\\"That will take the same object as what the Init Data field takes(JSON object)\\\"],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"addAnother\\\"]],[8],[0,\\\"\\\\n            ANOTHER!\\\\n        \\\"],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button-blue waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"flipIt\\\"]],[8],[0,\\\"\\\\n            DO IT!\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/page-react-easter-egg.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/page-welcome\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"RaTjHV4e\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[4,\\\"card-style-component\\\",null,[[\\\"bApplyDefaultPadding\\\",\\\"bHideOverFlow\\\"],[false,true]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-normal\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"h3\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"welcome\\\"],null],false],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"welcomeMessage\\\",[22,[\\\"_objStaffshiftCoreStringsService\\\"]]],null],false],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/page-welcome.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/react-ember-utils\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"VFuilljK\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"display-none\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"iframe-component\\\",null,[[\\\"sIFrameUrl\\\"],[[22,[\\\"_sReactUtilsUrl\\\"]]]]],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/react-ember-utils.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/react-main-content-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"pjIA9e/o\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecieveData\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/react-main-content-component.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/reset-password-popup-component\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"yAmn6zPQ\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objParentScroller\\\"],\\\"statements\\\":[[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupResponsiveDismiss\\\",\\\"bDismissible\\\",\\\"bLoading\\\"],[[22,[\\\"bShowPopup\\\"]],false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupForgotPasswordCancel\\\"],null],false,[22,[\\\"_bLoading\\\"]]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[[26,\\\"lookup-string\\\",[\\\"resetPassword\\\",[22,[\\\"_objStaffshiftCoreStringsService\\\"]]],null],\\\"padding-double popup-header-gray\\\",false,[21,1,[]],[22,[\\\"_objSpecialForgotPasswordPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-double\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-left padding-top-normal\\\"],[8],[0,\\\"\\\\n                        \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"bySubmittingThisForm\\\",[22,[\\\"_objStaffshiftCoreStringsService\\\"]]],null],false],[0,\\\"\\\\n                    \\\"],[9],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"usernameEmail\\\",[22,[\\\"_objStaffshiftCoreStringsService\\\"]]],null],\\\"_sUsernameEmail\\\",0,true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button-blue waves-effect waves-light\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupForgotPasswordConfirm\\\"]],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"lookup-string\\\",[\\\"submit\\\",[22,[\\\"_objStaffshiftCoreStringsService\\\"]]],null],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\\n\\\"]],\\\"parameters\\\":[1]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/reset-password-popup-component.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/right-panel-client-view\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"D5eqmL1+\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative\\\"],[8],[0,\\\"\\\\n    \\\"],[1,[26,\\\"react-page-component\\\",null,[[\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_objReactIframeData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecieveData\\\"],null]]]],false],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\\n\\\"],[1,[26,\\\"react-popup\\\",null,[[\\\"class\\\",\\\"bShow\\\",\\\"sIFrameUrl\\\",\\\"bLoading\\\",\\\"objData\\\",\\\"onRecieveData\\\"],[\\\"right-panel-react-popup\\\",[22,[\\\"_bReactPopupOpen\\\"]],[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"_bReactPopupLoading\\\"]],[22,[\\\"_objReactPopupPostData\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecievePopupData\\\"],null]]]],false],[0,\\\"\\\\n\\\\n\\\"],[1,[26,\\\"email-preview-popup\\\",null,[[\\\"bShowPopup\\\",\\\"onPopupCloseAction\\\",\\\"objActivityData\\\",\\\"objRestActivityEmailComm\\\"],[[22,[\\\"_bShowEmailMessagePopup\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onEmailMessagePopupClose\\\"],null],[22,[\\\"_objEmailActivity\\\"]],[22,[\\\"_objRestActivityEmailComm\\\"]]]]],false],[0,\\\"\\\\n\\\\n\\\"],[1,[26,\\\"notification-sent-popup\\\",null,[[\\\"bShowPopup\\\",\\\"objActivityData\\\",\\\"onPopupCloseAction\\\",\\\"objRestActivityNotification\\\"],[[22,[\\\"_bShowNotifcationsSentPopup\\\"]],[22,[\\\"_objNotificationActivity\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onNotificationSentPopupClose\\\"],null],[22,[\\\"_objRestActivityNotification\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/right-panel-client-view.hbs\" } });\n});","define(\"a24-ember-staffshift-core/templates/components/status-error-page\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"istjR6ba\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bMobile\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"status-error-page-mobile padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"status-error-page-message\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"status-error-page-icon\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"i\\\"],[10,\\\"class\\\",\\\"material-icons a24-grey-text-lighten-1\\\"],[8],[1,[22,[\\\"_objStatusErrorPageService\\\",\\\"sIcon\\\"]],false],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"display-inline-block\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[22,[\\\"_objStatusErrorPageService\\\",\\\"sMessage\\\"]],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,[[\\\"class\\\"],[\\\"status-error-page-desktop\\\"]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"status-error-page-border\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"status-error-page-icon\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"i\\\"],[10,\\\"class\\\",\\\"material-icons a24-grey-text-lighten-1\\\"],[8],[1,[22,[\\\"_objStatusErrorPageService\\\",\\\"sIcon\\\"]],false],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"status-error-page-message\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[22,[\\\"_objStatusErrorPageService\\\",\\\"sMessage\\\"]],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]}]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-core/templates/components/status-error-page.hbs\" } });\n});","define(\"a24-ember-staffshift-users/components/agency-group-add-edit-popup\", [\"exports\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-users/templates/components/agency-group-add-edit-popup\"], function (exports, _inputFormElement, _didRenderChangesMixin, _agencyGroupAddEditPopup) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _agencyGroupAddEditPopup.default,\n\n        // Services\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objRestAclGroup: Ember.inject.service(\"rest-acl-group\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objStaffshiftUsersStringsService: Ember.inject.service(\"a24-strings-staffshift-users\"),\n        _objStaffshiftUsersEnumsService: Ember.inject.service(\"a24-enums-staffshift-users\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n\n        // Default properties\n        bShowAddPopup: false,\n        bIsEditing: false,\n        objAclGroupData: null,\n        _bAddPopupLoading: false,\n        _objOriginalData: null,\n        _bShowUnsavedData: false,\n        _objSpecialAddEditPopupAction: null,\n\n        arrStatuses: null,\n\n        _arrResources: null,\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n            this._setupForm();\n            if (Ember.get(this, \"bShowAddPopup\")) {\n                Ember.run.debounce(this, this._resetFormState, 100);\n            }\n            this.set(\"_objSpecialAddEditPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this.send(\"onPopupAddCancel\");\n                }\n            });\n        },\n\n\n        onTogglePopup: Ember.observer(\"bShowAddPopup\", function () {\n            if (Ember.get(this, \"bShowAddPopup\")) {\n                Ember.run.debounce(this, this._resetFormState, 100);\n            }\n        }),\n\n        _resetFormState: function _resetFormState() {\n            var _this2 = this;\n\n            this.clearForm();\n            this.clearAllErrorMessages();\n\n            if (Ember.get(this, \"bIsEditing\") && Ember.get(this, \"objAclGroupData\")) {\n                Ember.get(this, \"objChildren.groupName\").setValueFromOutside(Ember.get(this, \"objAclGroupData.sGroupName\"));\n\n                Ember.set(this, \"_objGroupRole\", {\n                    sLabel: this.get(\"_objStaffshiftUsersEnumsService\").getFrontendValue(\"aclRoles\", Ember.get(this, \"objAclGroupData.sRoleId\")),\n                    sValue: Ember.get(this, \"objAclGroupData.sRoleId\")\n                });\n\n                var arrStatuses = this.get(\"objAclGroupData.arrStatuses\");\n                arrStatuses = arrStatuses.map(function (objItem) {\n                    return {\n                        sValue: objItem\n                    };\n                });\n\n                Ember.set(this, \"_arrResources\", arrStatuses);\n            }\n\n            Ember.run.next(function () {\n                Ember.run.schedule(\"afterRender\", function () {\n                    Ember.set(_this2, \"_objOriginalData\", _this2.getPlainFormValueObject());\n                });\n            });\n        },\n        _setupForm: function _setupForm() {\n            Ember.set(this, \"_arrRoles\", this.get(\"_objStaffshiftUsersEnumsService\").getList(\"aclRoles\"));\n            Ember.set(this, \"objChildConfig\", {\n                \"objChildren.groupName\": function objChildrenGroupName(objMixin) {\n                    a24Validation.addMinLength(objMixin, 3);\n                    a24Validation.addMaxLength(objMixin, 50);\n                    a24Validation.addRequired(objMixin, true);\n                },\n                \"objChildren.role\": function objChildrenRole(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                }\n            });\n        },\n\n\n        actions: {\n            onPopupAddConfirm: function onPopupAddConfirm() {\n                var _this3 = this;\n\n                if (!this.doFullValidation()) {\n                    Ember.set(this, \"_bAddPopupLoading\", true);\n\n                    if (Ember.get(this, \"bIsEditing\")) {\n                        Ember.get(this, \"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStaffshiftUsersStringsService\").getString(\"editingAclGroup\"));\n                    } else {\n                        Ember.get(this, \"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStaffshiftUsersStringsService\").getString(\"creatingAclGroup\"));\n                    }\n\n                    var objFormData = this.getPlainFormValueObject();\n\n                    var sAgencyGroupId = Ember.get(this, \"_objUserSession\").getUserContextReference().mId;\n\n                    var objPayload = {\n                        sName: objFormData.groupName,\n                        sRoleId: objFormData.role,\n                        arrResources: [{\n                            mId: sAgencyGroupId,\n                            sResource: \"AgencyGroup\"\n                        }]\n                    };\n                    if (!a24Core.isEmpty(objFormData.status)) {\n                        for (var i = 0; i < objFormData.status.length; i++) {\n                            objPayload.arrResources.push({\n                                mId: objFormData.status[i],\n                                sResource: \"AgencyGroupStatus\"\n                            });\n                        }\n                    }\n\n                    var funcSuccess = function funcSuccess() {\n                        Ember.set(_this3, \"_bAddPopupLoading\", false);\n                        if (!a24Core.isEmpty(_this3.get(\"onPopupAddSuccess\"))) {\n                            _this3.get(\"onPopupAddSuccess\")();\n                        }\n\n                        if (Ember.get(_this3, \"bIsEditing\")) {\n                            Ember.get(_this3, \"_objSnackbarService\").showSnackbarMessage(_this3.get(\"_objStaffshiftUsersStringsService\").getString(\"editAclGroupSuccess\"));\n                        } else {\n                            Ember.get(_this3, \"_objSnackbarService\").showSnackbarMessage(_this3.get(\"_objStaffshiftUsersStringsService\").getString(\"createAclGroupSuccess\"));\n                        }\n                    };\n\n                    var objFailureObject = a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode, sStatus, objErrorThrown, objError) {\n\n                        if (sCode === \"MIN_LENGTH\") {\n                            _this3.setResponseError(objError.arrPath, \"validationRestMinLength\");\n                        } else if (sCode === \"MAX_LENGTH\") {\n                            _this3.setResponseError(objError.arrPath, \"validationRestMaxLength\");\n                        } else if (sCode === \"PATTERN\") {\n                            _this3.setResponseError(objError.arrPath, \"validationRestInvalidChar\");\n                        } else if (sCode === \"DUPLICATE_FOUND\") {\n                            _this3.setResponseError([\"groupName\"], _this3.get(\"_objStaffshiftUsersStringsService\").getString(\"aclConflictError\"), true, true);\n                        } else if (sCode === \"REQUIRED_FIELD_NOT_SET\") {\n                            _this3.setResponseError(objError.arrPath, \"validationRequired\");\n                        } else {\n                            if (Ember.get(_this3, \"bIsEditing\")) {\n                                Ember.get(_this3, \"_objSnackbarService\").showSnackbarMessage(_this3.get(\"_objStaffshiftUsersStringsService\").getString(\"editAclGroupFailed\"));\n                            } else {\n                                Ember.get(_this3, \"_objSnackbarService\").showSnackbarMessage(_this3.get(\"_objStaffshiftUsersStringsService\").getString(\"createAclGroupFailed\"));\n                            }\n                        }\n                        Ember.set(_this3, \"_bAddPopupLoading\", false);\n                    });\n\n                    if (Ember.get(this, \"bIsEditing\")) {\n                        Ember.get(this, \"_objRestAclGroup\").editAclGroup(this, \"_objRestAclGroupProperty\", Ember.get(this, \"objAclGroupData.id\"), funcSuccess, objFailureObject, objPayload);\n                    } else {\n                        Ember.get(this, \"_objRestAclGroup\").addAclGroup(this, \"_objRestAclGroupProperty\", funcSuccess, objFailureObject, objPayload);\n                    }\n                }\n            },\n            onPopupAddCancel: function onPopupAddCancel() {\n                if (!Ember.get(this, \"_bAddPopupLoading\")) {\n\n                    // Check if the form has any unsaved data\n                    var bDataMatches = a24Core.compareObjects(Ember, this.getPlainFormValueObject(), Ember.get(this, \"_objOriginalData\"));\n\n                    if (bDataMatches) {\n                        if (!a24Core.isEmpty(this.get(\"onPopupAddCancel\"))) {\n                            this.get(\"onPopupAddCancel\")();\n                        }\n                    } else {\n                        Ember.set(this, \"_bShowUnsavedData\", true);\n                    }\n                }\n            },\n            onPopupUnsavedConfirm: function onPopupUnsavedConfirm() {\n                Ember.set(this, \"_bShowUnsavedData\", false);\n                if (!a24Core.isEmpty(this.get(\"onPopupAddCancel\"))) {\n                    this.get(\"onPopupAddCancel\")();\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-users/components/agency-group-list-page\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-users/templates/components/agency-group-list-page\"], function (exports, _didRenderChangesMixin, _agencyGroupListPage) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _agencyGroupListPage.default,\n\n        // Services.\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objFabButton: Ember.inject.service(\"fab-button\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objStaffshiftUsersStringsService: Ember.inject.service(\"a24-strings-staffshift-users\"),\n        _objStaffshiftUsersEnumsService: Ember.inject.service(\"a24-enums-staffshift-users\"),\n        _objRestAclGroupResourceTreeService: Ember.inject.service(\"rest-acl-group-resource-tree\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _sTriageBaseRest: Ember.computed.readOnly(\"env.sTriageBaseRest\"),\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        // Default properties\n        sUrlBase: \"\",\n        objDatagridConfig: null,\n        objSelectedItem: null,\n        _bShowAddPopup: false,\n        _objAclResponse: null,\n\n        bReloader: true,\n\n        // Stored Lists\n        _arrRoles: null,\n        arrRoleMapping: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"sUrlBase\", this.get(\"_sTriageBaseRest\") + \"/rest/acl/group\");\n\n            this.get(\"_objTitleBarService\").setTitleBar(this.get(\"_objStaffshiftUsersStringsService\").getString(\"listGroups\"));\n\n            this._getACLThenShowFab();\n            this._setupDatagrid();\n        },\n        _getACLThenShowFab: function _getACLThenShowFab() {\n            var _this = this;\n\n            this.get(\"_objRestAclGroupResourceTreeService\").getAclGroupResourceTree(this, \"_objAclResponse\", function (objData) {\n\n                var arrStatuses = [];\n                if (!a24Core.isEmpty(objData) && !a24Core.isEmpty(objData[0]) && !a24Core.isEmpty(objData[0].arrStatus)) {\n                    arrStatuses = objData[0].arrStatus;\n                    arrStatuses = arrStatuses.map(function (item) {\n                        return {\n                            sLabel: item.sName,\n                            sValue: item.id\n                        };\n                    });\n                }\n\n                _this.set(\"_arrStatuses\", arrStatuses);\n                _this._setupFabButton();\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                _this.set(\"_arrStatuses\", []);\n                _this._setupFabButton();\n            }));\n        },\n        _setupFabButton: function _setupFabButton() {\n            var _this2 = this;\n\n            Ember.get(this, \"_objFabButton\").showFabButton(function () {\n                Ember.set(_this2, \"_bShowAddPopup\", true);\n            });\n        },\n        onItemSelect: function onItemSelect(objSelectedItem) {\n            // Set the selected item\n            Ember.set(this, \"objSelectedItem\", objSelectedItem);\n        },\n\n        doAgencyGroupView: function doAgencyGroupView(sAgencyGroupId) {\n            var _this3 = this;\n\n            Ember.run.next(function () {\n                _this3.get(\"_objNavigationService\").navigateWithinContext(\"acl-group-view\", {\n                    \"acl-group-view\": [sAgencyGroupId]\n                });\n            });\n        },\n        _setupDatagrid: function _setupDatagrid() {\n            var arrRoleMapping = this.get(\"_objStaffshiftUsersEnumsService\").getList(\"aclRoles\").map(function (objItem) {\n                return {\n                    sValue: objItem.sValue,\n                    sTitle: objItem.sLabel\n                };\n            });\n\n            var objThis = this;\n\n            Ember.set(this, \"objDatagridConfig\", {\n                bSelectColumn: true,\n                sDatagridHeader: this.get(\"_objStaffshiftUsersStringsService\").getString(\"listGroups\"),\n                iMaxHeight: 40 * 27,\n                bEmitSelectRowEvent: true,\n                arrSingleItemSelectActions: [{\n                    sTitle: this.get(\"_objStringsService\").getString(\"edit\"),\n                    sIcon: \"edit\",\n                    executeCardAction: function executeCardAction() {\n                        Ember.run.next(function () {\n                            objThis.get(\"_objNavigationService\").navigateWithinContext(\"acl-group-view\", {\n                                \"acl-group-view\": [objThis.get(\"objSelectedItem.id\")]\n                            });\n                        });\n                    }\n                }],\n                arrHeaderConfig: [{\n                    iUniqueColNum: 1,\n                    sTitle: this.get(\"_objStaffshiftUsersStringsService\").getString(\"groupName\"),\n                    sProperty: \"sName\",\n                    sFilterType: \"text\",\n                    bText: true,\n                    iWidth: 50,\n                    bIsClickable: true\n                }, {\n                    iUniqueColNum: 2,\n                    sTitle: this.get(\"_objStaffshiftUsersStringsService\").getString(\"role\"),\n                    sProperty: \"sRoleId\",\n                    sFilterType: \"dropdown\",\n                    iWidth: 50,\n                    bMapping: true,\n                    arrMappingData: arrRoleMapping\n                }]\n            });\n        },\n\n\n        actions: {\n            cardDatagridTableCell: function cardDatagridTableCell(sColumnName, objRowData) {\n                // If any of the name columns are clicked\n                if (sColumnName === \"sName\") {\n                    var sGroupId = objRowData.id;\n\n                    this.doAgencyGroupView(sGroupId);\n                }\n            },\n            cardDatagridTableNoneSelected: function cardDatagridTableNoneSelected() {\n                this.onItemSelect(null);\n            },\n            cardDatagridTableOneSelected: function cardDatagridTableOneSelected(arrSelectedItems) {\n                this.onItemSelect(arrSelectedItems[0]);\n            },\n            cardDatagridTableMultiSelected: function cardDatagridTableMultiSelected() {\n                this.onItemSelect(null);\n            },\n\n            onPopupSuccess: function onPopupSuccess() {\n                var _this4 = this;\n\n                Ember.set(this, \"bReloader\", false);\n                Ember.set(this, \"_bShowAddPopup\", false);\n                Ember.run.schedule(\"afterRender\", this, function () {\n                    Ember.set(_this4, \"bReloader\", true);\n                });\n            }\n\n        }\n    });\n});","define(\"a24-ember-staffshift-users/components/agency-group-view-add-user-card\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-staffshift-users/templates/components/agency-group-view-add-user-card\"], function (exports, _didRenderChangesMixin, _inputFormElement, _agencyGroupViewAddUserCard) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_inputFormElement.default, _didRenderChangesMixin.default, {\n        layout: _agencyGroupViewAddUserCard.default,\n        // Services\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objACLGroupUsers: Ember.inject.service(\"rest-acl-group-users\"),\n        _objAgencyGroupUsers: Ember.inject.service(\"rest-agency-group-users\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objStaffshiftUsersStringsService: Ember.inject.service(\"a24-strings-staffshift-users\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n\n        // Promises\n        _objGetUserSuggestions: null,\n        _objGetLinkedUser: null,\n        _objRemoveUser: null,\n        _objAddUser: null,\n\n        // Stored Lists\n        _arrCustomActions: null,\n        _arrFilterConfig: null,\n\n        // Default properties\n        _bShowAddUserPopup: false,\n        _bShowConfirmDelete: false,\n        _bAddUserPopupLoading: false,\n        arrUsers: null,\n        funcGetSuggestions: null,\n\n        _objSpecialAddEditPopupAction: null,\n\n        // Init function\n        init: function init() {\n            var _this = this;\n\n            // Call super\n            this._super.apply(this, arguments);\n\n            this.set(\"_objSpecialAddEditPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this.send(\"onPopupAddUserClose\");\n                }\n            });\n\n            // Set the filter config for the card\n            Ember.set(this, \"_arrFilterConfig\", [{\n                sTitle: this.get(\"_objStringsService\").getString(\"firstName\"),\n                sProperty: \"sFirstName\",\n                sFilterType: \"text\",\n                bText: true\n            }, {\n                sTitle: this.get(\"_objStringsService\").getString(\"lastName\"),\n                sProperty: \"sLastName\",\n                sFilterType: \"text\",\n                bText: true\n            }, {\n                sTitle: this.get(\"_objStringsService\").getString(\"username\"),\n                sProperty: \"sUsername\",\n                sFilterType: \"text\",\n                bText: true\n            }]);\n\n            // Set the custom actions\n            Ember.set(this, \"_arrCustomActions\", [{\n                sTooltipText: this.get(\"_objStringsService\").getString(\"add\"),\n                sIcon: \"add\"\n            }]);\n\n            // Set the validation on the form\n            Ember.set(this, \"objChildConfig\", {\n                \"objChildren.user\": function objChildrenUser(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                }\n            });\n\n            // Set the suggestions function for the popup\n            this.setGetSuggestionFunction();\n\n            // Do the service calls\n            this.doServiceCalls();\n        },\n        setGetSuggestionFunction: function setGetSuggestionFunction() {\n            var _this2 = this;\n\n            // Agency Group Id\n            var sAgencyGroup = Ember.get(this, \"_objUserSession\").getUserContextReference().mId;\n\n            Ember.set(this, \"funcGetSuggestions\", function (sQueryString, funcOnComplete) {\n                // sQueryString - The query string search that was made\n                // funcOnComplete - The function to call on completion\n\n                // Make a service call to retrieve the data for the items\n                Ember.get(_this2, \"_objAgencyGroupUsers\").getAvailableUserByQuery(_this2, \"_objGetUserSuggestions\", sAgencyGroup, sQueryString, // Query string passed to function\n                function (arrData) {\n                    // When service call succeeds\n\n                    // If the data is empty, ensure it's an empty array\n                    if (a24Core.isEmpty(arrData)) {\n                        arrData = [];\n                    }\n\n                    // Define the array that will contain formatted data\n                    var arrFormatted = [];\n\n                    // Loop over the results\n                    for (var i = 0; i < arrData.length; i++) {\n\n                        // Get the item at index i\n                        var objDataItem = arrData[i];\n\n                        // Build the label to show\n                        var sLabel = objDataItem.sFirstName + \" \" + objDataItem.sLastName + \" - \" + objDataItem.sUsername;\n\n                        // Push label with id as an object to the search box\n                        arrFormatted.push({\n                            sLabel: sLabel,\n                            id: objDataItem.id\n                        });\n                    }\n\n                    // Call the callback with the formatted data\n                    funcOnComplete(arrFormatted);\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                    // Call the callback with empty\n                    funcOnComplete([]);\n                }));\n            });\n        },\n\n        // Make the service calls required for the card to display correctlty\n        // Optional objQueryParams to query the get on\n        doServiceCalls: function doServiceCalls(objQueryParams) {\n            var _this3 = this;\n\n            // If the query is empty\n            if (a24Core.isEmpty(objQueryParams)) {\n                objQueryParams = {};\n            }\n\n            // Set the loading to true\n            Ember.set(this, \"bLoading\", true);\n\n            // Get the route params\n            var objRouteParams = Ember.get(this, \"_objNavigationService.objRouteParams\");\n            // Get the ACL group id\n            var sAclGroupId = objRouteParams[\"agency-group.acl-group-view\"].group_type_id;\n\n            // Get the list of users linked to the acl group\n            Ember.get(this, \"_objACLGroupUsers\").getUserList(this, \"_objGetLinkedUser\", sAclGroupId, function (arrData) {\n                // Prep the data then take the form out of loading\n                _this3.prepareForDisplay(arrData);\n                Ember.set(_this3, \"bLoading\", false);\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                // Prep empty data then take the form out of loading\n                _this3.prepareForDisplay([]);\n                Ember.set(_this3, \"bLoading\", false);\n            }), objQueryParams);\n        },\n\n        // Prepare user list for display\n        prepareForDisplay: function prepareForDisplay(arrData) {\n\n            // Reset the data if it is empty\n            if (a24Core.isEmpty(arrData)) {\n                arrData = [];\n            }\n\n            // Store a this instance\n            var objThis = this;\n\n            // Function used to generate a custom function per item\n            var funcCardActionRemoveExecute = function funcCardActionRemoveExecute(sId) {\n                // Return the function to remove the user with id = sId\n                return function () {\n                    // Set the current user id as the id\n                    Ember.set(objThis, \"_sUserToRemove\", sId);\n                    // Show the confirm delete\n                    Ember.set(objThis, \"_bShowConfirmDelete\", true);\n                };\n            };\n\n            // Define the array of users\n            var arrDisplayUsers = [];\n\n            // Loop over the data that is present\n            for (var i = 0; i < arrData.length; i++) {\n\n                // Concat the first and last name\n                var sFullName = arrData[i].sFirstName + \" \" + arrData[i].sLastName;\n\n                // Get the user id\n                var sUserId = arrData[i].id;\n\n                // Push the item in to the\n                arrDisplayUsers.push({\n                    sLabel: this.get(\"_objStringsService\").getHTMLTokenString(\"a24-string-html-dot-value\", sFullName, arrData[i].sUsername),\n                    sIcon: \"person\",\n                    arrActions: [{\n                        sTitle: this.get(\"_objStringsService\").getString(\"remove\"),\n                        sIcon: \"delete\",\n                        executeCardAction: funcCardActionRemoveExecute(sUserId)\n                    }]\n                });\n            }\n\n            // Set the array of users\n            Ember.set(this, \"arrUsers\", arrDisplayUsers);\n        },\n\n        // Remove the user\n        removeUser: function removeUser(sUserId) {\n            var _this4 = this;\n\n            // Get the route params\n            var objRouteParams = Ember.get(this, \"_objNavigationService.objRouteParams\");\n            // Get the ACL group id\n            var sAclGroupId = objRouteParams[\"agency-group.acl-group-view\"].group_type_id;\n\n            // Set the card in to loading\n            Ember.set(this, \"bLoading\", true);\n\n            // Do the remove service call\n            Ember.get(this, \"_objACLGroupUsers\").removeUser(this, \"_objRemoveUser\", sAclGroupId, sUserId, function () {\n                // Hide the confirm delete popup\n                Ember.set(_this4, \"_bShowConfirmDelete\", false);\n\n                Ember.get(_this4, \"_objSnackbarService\").showSnackbarMessage(_this4.get(\"_objStaffshiftUsersStringsService\").getString(\"userRemovedSuccess\"));\n\n                // GET user list again\n                _this4.doServiceCalls();\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                Ember.set(_this4, \"_bShowConfirmDelete\", false);\n\n                Ember.get(_this4, \"_objSnackbarService\").showSnackbarMessage(_this4.get(\"_objStaffshiftUsersStringsService\").getString(\"userRemovedFailure\"));\n                // GET user list again\n                _this4.doServiceCalls();\n            }));\n        },\n        // Remove the user\n        addUser: function addUser(sUserId) {\n            var _this5 = this;\n\n            // Get the route params\n            var objRouteParams = Ember.get(this, \"_objNavigationService.objRouteParams\");\n            // Get the ACL group id\n            var sAclGroupId = objRouteParams[\"agency-group.acl-group-view\"].group_type_id;\n\n            // Set the card in to loading\n            Ember.set(this, \"bLoading\", true);\n            Ember.set(this, \"_bAddUserPopupLoading\", true);\n\n            // Do the add service call\n            Ember.get(this, \"_objACLGroupUsers\").addUser(this, \"_objAddUser\", sAclGroupId, sUserId, function () {\n\n                // Hide the add user popup\n                Ember.set(_this5, \"_bShowAddUserPopup\", false);\n                Ember.set(_this5, \"_bAddUserPopupLoading\", false);\n\n                Ember.get(_this5, \"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objStaffshiftUsersStringsService\").getString(\"userAddSuccess\"));\n\n                // GET user list again\n                _this5.doServiceCalls();\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                // Hide the add user popup\n                Ember.set(_this5, \"_bShowAddUserPopup\", false);\n                Ember.set(_this5, \"_bAddUserPopupLoading\", false);\n\n                Ember.get(_this5, \"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objStaffshiftUsersStringsService\").getString(\"userAddFailure\"));\n\n                // GET user list again\n                _this5.doServiceCalls();\n            }));\n        },\n\n        // ACTIONS\n        actions: {\n            // If the filter changes, we wish to reload the card\n            cardDatagridFilterChangeEvent: function cardDatagridFilterChangeEvent(sProperty, objValue) {\n                this.doServiceCalls(objValue);\n            },\n\n            // If the custom action is clicked\n            customActionClicked: function customActionClicked() {\n                this.clearForm();\n                this.clearAllErrorMessages();\n                Ember.set(this, \"_bShowAddUserPopup\", true);\n            },\n\n            // Once confirmation is given on removing a user\n            onRemoveUserPopupConfirm: function onRemoveUserPopupConfirm() {\n                // Remove the user with the stored id\n                this.removeUser(Ember.get(this, \"_sUserToRemove\"));\n            },\n            onPopupUnsavedConfirm: function onPopupUnsavedConfirm() {\n                this.clearForm();\n                this.clearAllErrorMessages();\n                Ember.set(this, \"_bShowAddUserPopup\", false);\n            },\n            onPopupAddUserClose: function onPopupAddUserClose() {\n                if (!Ember.get(this, \"_bAddUserPopupLoading\")) {\n                    var bHasUnsavedData = !a24Core.isEmpty(this.getPlainFormValueObject()) && !a24Core.isEmpty(this.getPlainFormValueObject().user) && !a24Core.isEmpty(this.getPlainFormValueObject().user.id);\n\n                    if (bHasUnsavedData) {\n                        Ember.set(this, \"_bShowUnsavedData\", true);\n                    } else {\n                        this.clearForm();\n                        this.clearAllErrorMessages();\n                        Ember.set(this, \"_bShowAddUserPopup\", false);\n                    }\n                }\n            },\n            onPopupAddUserConfirm: function onPopupAddUserConfirm() {\n\n                // Do the validation on the form\n                if (!this.doFullValidation()) {\n                    // If the validation passed\n\n                    // Get the user id of the user that is being added\n                    var sUserId = this.getPlainFormValueObject().user.id;\n\n                    // Add the user with the correct id\n                    this.addUser(sUserId);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-users/components/agency-group-view-edit-card\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-users/templates/components/agency-group-view-edit-card\"], function (exports, _didRenderChangesMixin, _agencyGroupViewEditCard) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _agencyGroupViewEditCard.default,\n\n        // Services\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objRestAclGroup: Ember.inject.service(\"rest-acl-group\"),\n        _objStaffshiftUsersEnumsService: Ember.inject.service(\"a24-enums-staffshift-users\"),\n        _objStaffshiftUsersStringsService: Ember.inject.service(\"a24-strings-staffshift-users\"),\n        _objRestAclGroupResourceTreeService: Ember.inject.service(\"rest-acl-group-resource-tree\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n\n        // Promises\n        objAclGroupGetPromise: null,\n        _objAclResourceTreePromise: null,\n\n        // Default Properties\n        bLoading: false,\n        _arrAclGroupDetails: null,\n        _bShowAddPopup: false,\n        _objAclGroupDetails: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.doServiceCalls();\n        },\n        doServiceCalls: function doServiceCalls() {\n            Ember.set(this, \"bLoading\", true);\n\n            var objRouteParams = Ember.get(this, \"_objNavigationService.objRouteParams\");\n            var sAclGroupId = objRouteParams[\"agency-group.acl-group-view\"].group_type_id;\n\n            var objAclGroupByIdService = Ember.get(this, \"_objRestAclGroup\").getAclGroupById(this, \"objAclGroupGetPromise\", sAclGroupId, function () {\n                // Handled in RSVP\n            });\n\n            var objAclGroupResourceTreeService = this.get(\"_objRestAclGroupResourceTreeService\").getAclGroupResourceTreeByGroupId(this, \"_objAclResourceTreePromise\", sAclGroupId, function () {\n                // Handled in RSVP\n            });\n\n            Ember.set(this, \"_arrHeaderActions\", []);\n\n            var objPromiseList = {\n                _objAclGroupResourceTree: objAclGroupResourceTreeService,\n                _objAclGroupById: objAclGroupByIdService\n            };\n\n            var objThis = this;\n            a24RSVP.configure(this, objPromiseList, [{\n                arrRequiredResponses: [\"_objAclGroupResourceTree\", \"_objAclGroupById\"],\n                funcOnComplete: function funcOnComplete(objResponses) {\n                    //All responses set on corresponding keys\n                    var objAclGroupResourceResponse = objResponses._objAclGroupResourceTree.objResponse;\n                    var objAclGroupByIdResponse = objResponses._objAclGroupById.objResponse;\n\n                    var arrStatuses = [];\n                    if (!a24Core.isEmpty(objAclGroupResourceResponse) && !a24Core.isEmpty(objAclGroupResourceResponse[0]) && !a24Core.isEmpty(objAclGroupResourceResponse[0].arrStatus)) {\n                        arrStatuses = objAclGroupResourceResponse[0].arrStatus;\n                    }\n\n                    objThis.set(\"_arrStatuses\", arrStatuses.map(function (objItem) {\n                        return {\n                            sLabel: objItem.sName,\n                            sValue: objItem.id\n                        };\n                    }));\n\n                    arrStatuses = arrStatuses.filter(function (objItem) {\n                        return !!objItem.sTreeMetaData.bSelected;\n                    });\n\n                    var sStatusValue = null;\n                    var arrStatusesIds = [];\n\n                    if (arrStatuses.length !== 0) {\n                        arrStatusesIds = arrStatuses.map(function (objItem) {\n                            return objItem.id;\n                        });\n                        arrStatuses = arrStatuses.map(function (objItem) {\n                            return objItem.sName;\n                        });\n                        sStatusValue = Ember.String.htmlSafe(arrStatuses.join(\"<br/>\"));\n                    }\n\n                    Ember.set(objThis, \"_arrAclGroupDetails\", [{\n                        arrItems: [{\n                            sLabel: objThis.get(\"_objStaffshiftUsersStringsService\").getString(\"groupName\"),\n                            sValue: objAclGroupByIdResponse.sName,\n                            bText: true\n                        }, {\n                            sLabel: objThis.get(\"_objStaffshiftUsersStringsService\").getString(\"role\"),\n                            sValue: objThis.get(\"_objStaffshiftUsersEnumsService\").getFrontendValue(\"aclRoles\", objAclGroupByIdResponse.sRoleId),\n                            bText: true\n                        }, {\n                            sLabel: objThis.get(\"_objStaffshiftUsersStringsService\").getString(\"statuses\"),\n                            sValue: sStatusValue,\n                            bText: true\n                        }]\n                    }]);\n                    if (!a24Core.isEmpty(objThis.get(\"onTitleBarUpdate\"))) {\n                        objThis.get(\"onTitleBarUpdate\")(objAclGroupByIdResponse.sName);\n                    }\n\n                    Ember.set(objThis, \"_objAclGroupDetails\", {\n                        sGroupName: objAclGroupByIdResponse.sName,\n                        sRoleId: objAclGroupByIdResponse.sRoleId,\n                        arrStatuses: arrStatusesIds,\n                        id: sAclGroupId\n                    });\n\n                    Ember.set(objThis, \"_arrHeaderActions\", [{\n                        sTitle: objThis.get(\"_objStringsService\").getString(\"edit\"),\n                        sIcon: \"edit\",\n                        executeCardAction: function executeCardAction() {\n                            Ember.set(objThis, \"_bShowAddPopup\", true);\n                        }\n                    }]);\n\n                    Ember.set(objThis, \"bLoading\", false);\n                }\n            }]);\n        },\n\n        actions: {\n            onPopupSuccess: function onPopupSuccess() {\n                this.doServiceCalls();\n                Ember.set(this, \"_bShowAddPopup\", false);\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-users/components/agency-group-view-page\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-staffshift-users/templates/components/agency-group-view-page\"], function (exports, _didRenderChangesMixin, _agencyGroupViewPage) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, {\n        layout: _agencyGroupViewPage.default,\n\n        // Services\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objStaffshiftUsersStringsService: Ember.inject.service(\"a24-strings-staffshift-users\"),\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n            this.get(\"_objTitleBarService\").setTitleBar(this.get(\"_objStaffshiftUsersStringsService\").getString(\"viewGroup\"), function () {\n                Ember.get(_this, \"_objNavigationService\").navigateWithinContext(\"acl-group-list\");\n            });\n        },\n\n        actions: {\n            onTitleBarUpdate: function onTitleBarUpdate(sGroupName) {\n                var _this2 = this;\n\n                this.get(\"_objTitleBarService\").setTitleBar(this.get(\"_objStaffshiftUsersStringsService\").getString(\"viewGroup\") + \" - \" + sGroupName, function () {\n                    Ember.get(_this2, \"_objNavigationService\").navigateWithinContext(\"acl-group-list\");\n                });\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-users/components/page-agency-group-user-list\", [\"exports\", \"a24-ember-staffshift-users/templates/components/page-agency-group-user-list\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-window/mixins/did-render-changes-mixin\"], function (exports, _pageAgencyGroupUserList, _inputFormElement, _didRenderChangesMixin) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _pageAgencyGroupUserList.default,\n\n        // Services\n        _objTitleBarService: Ember.inject.service(\"title-bar\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n        _objFabButtonService: Ember.inject.service(\"fab-button\"),\n        _objAgencyGroupService: Ember.inject.service(\"rest-agency-group\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objStaffshiftUsersEnumsService: Ember.inject.service(\"a24-enums-staffshift-users\"),\n        _objStaffshiftUsersStringsService: Ember.inject.service(\"a24-strings-staffshift-users\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        // Default Properties\n        sUrlBase: \"\",\n        objQueryParams: null,\n        objDatagridConfig: null,\n        // whether the page is in loading\n        _bPageLoading: true,\n        // the agency group id\n        _sAgencyGroupId: null,\n        // variables for add user popup\n        _bShowAddUser: false,\n        _bShowUnsavedData: false,\n        _bAddUserPopupLoading: false,\n\n        // add popup close action\n        _objSpecialAddPopupAction: null,\n        // original data\n        _objOriginalData: null,\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n\n            this.get(\"_objTitleBarService\").setTitleBar(this.get(\"_objStaffshiftUsersStringsService\").getString(\"listUsers\"));\n\n            var sUrl = Ember.get(this, \"sRestApiBaseUrl\") + \"/v1/agency-group/\" + Ember.get(this, \"_objNavigation.sContextId\") + \"/user\";\n\n            // Build up the url with context id\n            Ember.set(this, \"sUrlBase\", sUrl);\n\n            var arrStatusMapping = this.get(\"_objStaffshiftUsersEnumsService\").getList(\"statuses\").map(function (objItem) {\n                return {\n                    sValue: objItem.sValue,\n                    sTitle: objItem.sLabel\n                };\n            });\n\n            var sAgencyGroupId = Ember.get(this, \"_objNavigation.sContextId\");\n            this.set(\"_sAgencyGroupId\", sAgencyGroupId);\n\n            // set up datagrid\n            Ember.set(this, \"objDatagridConfig\", {\n                sDatagridHeader: Ember.get(this, \"_objStaffshiftUsersStringsService\").getString(\"listUsers\"),\n                iMaxHeight: 40 * 27,\n                bSelectColumn: false,\n                bEmitSelectRowEvent: false,\n                arrSingleItemSelectActions: null,\n                arrHeaderConfig: [{\n                    iUniqueColNum: 1,\n                    sTitle: Ember.get(this, \"_objStringsService\").getString(\"username\"),\n                    sProperty: \"sUsername\",\n                    sFilterType: \"text\",\n                    bText: true,\n                    iWidth: 27\n                }, {\n                    iUniqueColNum: 2,\n                    sTitle: Ember.get(this, \"_objStringsService\").getString(\"firstName\"),\n                    sProperty: \"sFirstName\",\n                    sFilterType: \"text\",\n                    bText: true,\n                    iWidth: 27\n                }, {\n                    iUniqueColNum: 3,\n                    sTitle: Ember.get(this, \"_objStringsService\").getString(\"lastName\"),\n                    sProperty: \"sLastName\",\n                    sFilterType: \"text\",\n                    bText: true,\n                    iWidth: 27\n                }, {\n                    iUniqueColNum: 4,\n                    sTitle: Ember.get(this, \"_objStringsService\").getString(\"status\"),\n                    sProperty: \"sAgencyGroupUserStatus\",\n                    sFilterType: \"dropdown\",\n                    bMapping: true,\n                    arrMappingData: arrStatusMapping,\n                    bStopColumnSort: true,\n                    iWidth: 19\n                }, {\n                    iUniqueColNum: 5,\n                    sTitle: Ember.get(this, \"_objStringsService\").getString(\"email\"),\n                    sProperty: \"sEmailAddress\",\n                    sFilterType: \"text\",\n                    bText: true,\n                    iWidth: 0,\n                    bSilent: true\n                }]\n            });\n\n            // setup close button on popup\n            this.set(\"_objSpecialAddPopupAction\", {\n                sTitle: Ember.get(this, \"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this.send(\"onPopupAddUserClose\");\n                }\n            });\n\n            // Set the validation on the form\n            Ember.set(this, \"objChildConfig\", {\n                \"objChildren.sFirstName\": function objChildrenSFirstName(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                    a24Validation.addMinLength(objMixin, 2);\n                    a24Validation.addMaxLength(objMixin, 100);\n                },\n                \"objChildren.sLastName\": function objChildrenSLastName(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                    a24Validation.addMinLength(objMixin, 2);\n                    a24Validation.addMaxLength(objMixin, 100);\n                },\n                \"objChildren.sEmailAddress\": function objChildrenSEmailAddress(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                    a24Validation.addMinLength(objMixin, 2);\n                    a24Validation.addMaxLength(objMixin, 100);\n                }\n            });\n\n            this.get(\"_objFabButtonService\").showFabButton(function () {\n                _this.addUserFabButton();\n            });\n\n            this.set(\"_bPageLoading\", false);\n        },\n\n        refreshUserList: function refreshUserList() {\n            var _this2 = this;\n\n            // Put the page in loading\n            this.set(\"_bPageLoading\", true);\n\n            Ember.run.next(function () {\n                Ember.run.schedule(\"afterRender\", function () {\n                    // Take page out of loading\n                    _this2.set(\"_bPageLoading\", false);\n                });\n            });\n        },\n        addUserFabButton: function addUserFabButton() {\n            var _this3 = this;\n\n            this.clearAllErrorMessages();\n            this.clearForm();\n\n            Ember.run.next(function () {\n                Ember.run.schedule(\"afterRender\", function () {\n                    Ember.set(_this3, \"_objOriginalData\", _this3.getPlainFormValueObject());\n                });\n            });\n\n            this.set(\"_bShowAddUser\", true);\n        },\n        addUser: function addUser(sAgencyGroupId) {\n            var _this4 = this;\n\n            var objPayload = this.getPlainFormValueObject();\n\n            // Set the card into loading\n            Ember.set(this, \"_bAddUserPopupLoading\", true);\n\n            Ember.get(this, \"_objSnackbarService\").showSnackbarMessage(Ember.get(this, \"_objStaffshiftUsersStringsService\").getString(\"addingUser\"));\n\n            // Do the add service call\n            Ember.get(this, \"_objAgencyGroupService\").addUser(this, \"_objAddUser\", sAgencyGroupId, function () {\n\n                // Hide the add user popup\n                Ember.set(_this4, \"_bShowAddUser\", false);\n                Ember.set(_this4, \"_bAddUserPopupLoading\", false);\n\n                Ember.get(_this4, \"_objSnackbarService\").showSnackbarMessage(Ember.get(_this4, \"_objStaffshiftUsersStringsService\").getString(\"userAddSuccess\"));\n\n                // GET user list again\n                _this4.refreshUserList();\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode, sStatus, objErrorThrown, objError) {\n                //take popup out of loading state\n                Ember.set(_this4, \"_bAddUserPopupLoading\", false);\n                if (sCode === \"PATTERN\") {\n                    _this4.setResponseError(objError.arrPath, \"validationRestInvalidFormat\");\n                } else if (sCode === \"REGEX_NAME_NO_MATCH\") {\n                    _this4.setResponseError(objError.arrPath, \"validationRestInvalidChar\");\n                } else {\n                    Ember.get(_this4, \"_objSnackbarService\").showSnackbarMessage(Ember.get(_this4, \"_objStaffshiftUsersStringsService\").getString(\"userAddFailure\"));\n                }\n            }), objPayload);\n        },\n        cancelClosePopup: function cancelClosePopup() {\n            if (!Ember.get(this, \"_bAddUserPopupLoading\")) {\n\n                // Check if the form has any unsaved data\n                var bDataMatches = a24Core.compareObjects(Ember, this.getPlainFormValueObject(), Ember.get(this, \"_objOriginalData\"));\n\n                if (!bDataMatches) {\n                    Ember.set(this, \"_bShowUnsavedData\", true);\n                } else {\n                    this.clearForm();\n                    this.clearAllErrorMessages();\n                    Ember.set(this, \"_bShowAddUser\", false);\n                }\n            }\n        },\n        actions: {\n            // Swallowing the action, no need for it currently\n            cardDatagridTableCell: function cardDatagridTableCell() {},\n            onPopupAddConfirm: function onPopupAddConfirm() {\n                // Do the validation on the form\n                if (!this.doFullValidation()) {\n                    // If the validation passed\n\n                    // Get the agency group id\n                    var sAgencyGroupId = Ember.get(this, \"_sAgencyGroupId\");\n\n                    // Add the user\n                    this.addUser(sAgencyGroupId);\n                }\n            },\n            onPopupAddCancel: function onPopupAddCancel() {\n                this.cancelClosePopup();\n            },\n\n            // handle cancel button pressed\n            onPopupUnsavedConfirm: function onPopupUnsavedConfirm() {\n                this.clearForm();\n                this.clearAllErrorMessages();\n                Ember.set(this, \"_bShowAddUser\", false);\n            },\n            onPopupAddUserClose: function onPopupAddUserClose() {\n                this.cancelClosePopup();\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-users/components/whitelisted-ip-addresses\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-staffshift-users/templates/components/whitelisted-ip-addresses\"], function (exports, _didRenderChangesMixin, _inputFormElement, _whitelistedIpAddresses) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _whitelistedIpAddresses.default,\n        bLoading: false,\n        objWhitelistIpService: null,\n\n        // Services\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objUsersStringsService: Ember.inject.service(\"a24-strings-staffshift-users\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objIpifyIpAddressCheck: Ember.inject.service(\"ipify-ip-address-check\"),\n\n        // Properties\n        _bShowIpAddressPopup: false,\n        _bShowConfirmDelete: false,\n        _bAddUserPopupLoading: false,\n        _bAddEditIpAddressPopupLoading: false,\n        _bShowUnsavedData: false,\n        _bEditing: false,\n        _bShowDeleteWarning: false,\n        _bPopupDeleteLoading: false,\n\n        _objSpecialAddEditPopupAction: null,\n        _objOriginalData: null,\n        _objGetIpWhitelistings: null,\n        _objAddWhitelistIp: null,\n        _objEditWhitelistIp: null,\n\n        _sIpAddressToRemove: null,\n        _sDescription: null,\n        _sPopupHeader: null,\n        _sEditingIpAddress: null,\n        _sUserIpAddress: \"\",\n\n        _arrIPAddresses: null,\n        _arrHeaderActions: null,\n\n        // Init function\n        init: function init() {\n            var _this = this;\n\n            // Call super\n            this._super.apply(this, arguments);\n\n            this.set(\"_arrHeaderActions\", [{\n                sTitle: this.get(\"_objStringsService\").getString(\"add\"),\n                sIcon: \"add\",\n                executeCardAction: function executeCardAction() {\n                    _this.addActionClicked();\n                }\n            }]);\n\n            this.set(\"_objSpecialAddEditPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this.send(\"onPopupIpAddressClose\");\n                }\n            });\n\n            // Set the validation on the form\n            this.set(\"objChildConfig\", {\n                \"objChildren.ip\": function objChildrenIp(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                    objMixin.get(\"arrValidation\").pushObject(function () {\n                        var sIpAddress = objMixin.get(\"mValue\").trim();\n                        if (!/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(sIpAddress)) {\n                            return objMixin.get(\"_objStringsService\").getTokenString(\"validationRestInvalidFormat\", objMixin.get(\"sFieldName\"));\n                        }\n                    });\n                },\n                \"objChildren.description\": function objChildrenDescription(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                }\n            });\n\n            // Do the service calls\n            this.doServiceCalls();\n        },\n\n        // Make the service calls required for the card to display correctlty\n        doServiceCalls: function doServiceCalls() {\n            var _this2 = this;\n\n            // Set the loading to true\n            this.set(\"bLoading\", true);\n\n            // Get the list of whitelisted ips\n            this.get(\"objWhitelistIpService\").getIpWhitelistings(this, \"_objGetIpWhitelistings\", function (arrData) {\n                // Prep the data then take the form out of loading\n                _this2.prepareForDisplay(arrData);\n                _this2.set(\"bLoading\", false);\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                // Prep empty data then take the form out of loading\n                _this2.prepareForDisplay([]);\n                _this2.set(\"bLoading\", false);\n            }));\n        },\n\n        // Prepare ip whitelist for display\n        prepareForDisplay: function prepareForDisplay(arrData) {\n            var _this3 = this;\n\n            // Reset the data if it is empty\n            if (a24Core.isEmpty(arrData)) {\n                arrData = [];\n            }\n\n            // Store a this instance\n            var objThis = this;\n\n            // Function used to generate a custom function per item\n            var funcCardActionRemoveExecute = function funcCardActionRemoveExecute(sIp) {\n                // Return the function to remove the ip\n                return function () {\n                    // Set the current user id as the id\n                    objThis.set(\"_sIpAddressToRemove\", sIp);\n                    // Show the confirm delete\n                    objThis.set(\"_bShowConfirmDelete\", true);\n                };\n            };\n\n            // Define the array of ip address\n            var arrIPAddresses = [];\n\n            // Loop over the data that is present\n\n            var _loop = function _loop(i) {\n\n                var sIpAddress = arrData[i].ip;\n\n                // Get the description id\n                var sDescription = arrData[i].description;\n\n                // Push the item in to the\n                arrIPAddresses.push({\n                    sLabel: _this3.get(\"_objStringsService\").getHTMLTokenString(\"a24-string-html-dot-value\", sIpAddress, sDescription),\n                    sIcon: \"network_check\",\n                    arrActions: [{\n                        sTitle: _this3.get(\"_objStringsService\").getString(\"edit\"),\n                        sIcon: \"edit\",\n                        executeCardAction: function executeCardAction() {\n                            _this3.openEditIPAddressPopup(sIpAddress, sDescription);\n                        }\n                    }, {\n                        sTitle: _this3.get(\"_objStringsService\").getString(\"remove\"),\n                        sIcon: \"delete\",\n                        executeCardAction: funcCardActionRemoveExecute(sIpAddress)\n                    }]\n                });\n            };\n\n            for (var i = 0; i < arrData.length; i++) {\n                _loop(i);\n            }\n\n            // Set the array of ip address\n            this.set(\"_arrIPAddresses\", arrIPAddresses);\n        },\n\n        // Remove the ip address\n        removeIpFromWhitelist: function removeIpFromWhitelist(sIp) {\n            var _this4 = this;\n\n            this.set(\"_bPopupDeleteLoading\", true);\n\n            this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsService\").getTokenString(\"removingItem\", this.get(\"_objUsersStringsService\").getString(\"ipAddress\")));\n\n            // Do the remove service call\n            this.get(\"objWhitelistIpService\").deleteIpWhitelist(this, \"_objRemoveUser\", sIp, function () {\n                // Hide the confirm delete popup\n                _this4.set(\"_bShowConfirmDelete\", false);\n\n                _this4.get(\"_objSnackbarService\").showSnackbarMessage(_this4.get(\"_objStringsService\").getTokenString(\"successRemoveItem\", _this4.get(\"_objUsersStringsService\").getString(\"ipAddress\")));\n                _this4.set(\"_bPopupDeleteLoading\", false);\n                // GET ip whitelist again\n                _this4.doServiceCalls();\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                _this4.set(\"_bShowConfirmDelete\", false);\n\n                _this4.get(\"_objSnackbarService\").showSnackbarMessage(_this4.get(\"_objStringsService\").getTokenString(\"failRemoveItem\", _this4.get(\"_objUsersStringsService\").getString(\"ipAddress\")));\n\n                _this4.set(\"_bPopupDeleteLoading\", false);\n            }));\n        },\n        addEditIpWhitelist: function addEditIpWhitelist(sIp, sDescription) {\n            var _this5 = this;\n\n            // Set the card in to loading\n            this.set(\"_bAddEditIpAddressPopupLoading\", true);\n\n            var objData = {\n                \"ip\": sIp,\n                \"description\": sDescription\n            };\n            if (!this.get(\"_bEditing\")) {\n\n                this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsService\").getTokenString(\"addingItem\", this.get(\"_objUsersStringsService\").getString(\"ipAddress\")));\n                // Do the add service call\n                this.get(\"objWhitelistIpService\").addIpToWhitelist(this, \"_objAddWhitelistIp\", objData, function () {\n\n                    // Hide the add/edit ip address popup\n                    _this5.set(\"_bShowIpAddressPopup\", false);\n\n                    _this5.get(\"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objStringsService\").getTokenString(\"successAddItem\", _this5.get(\"_objUsersStringsService\").getString(\"ipAddress\")));\n\n                    // GET ip whitelist list again\n                    _this5.doServiceCalls();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode /*, sStatus, objErrorThrown, objError*/) {\n                    if (sCode === \"409\") {\n                        _this5.setResponseError([\"ip\"], \"validationIpAlreadyExist\", false, false, _this5.get(\"_objUsersStringsService\"));\n                    } else {\n                        // Hide the add/edit ip address popup\n                        _this5.get(\"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objStringsService\").getTokenString(\"failAddItem\", _this5.get(\"_objUsersStringsService\").getString(\"ipAddress\")));\n                    }\n                    _this5.set(\"_bAddEditIpAddressPopupLoading\", false);\n                }));\n            } else {\n                objData = {\n                    \"description\": sDescription\n                };\n\n                this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsService\").getTokenString(\"updatingItem\", this.get(\"_objUsersStringsService\").getString(\"ipAddress\")));\n\n                // Do the edit service call\n                this.get(\"objWhitelistIpService\").editIpWhitelist(this, \"_objEditWhitelistIp\", this.get(\"_sEditingIpAddress\"), function () {\n\n                    // Hide the add/edit ip address popup\n                    _this5.set(\"_bShowIpAddressPopup\", false);\n\n                    _this5.get(\"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objStringsService\").getTokenString(\"successUpdateItem\", _this5.get(\"_objUsersStringsService\").getString(\"ipAddress\")));\n\n                    // GET ip whitelist list again\n                    _this5.doServiceCalls();\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n\n                    _this5.get(\"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objStringsService\").getTokenString(\"failUpdateItem\", _this5.get(\"_objUsersStringsService\").getString(\"ipAddress\")));\n\n                    _this5.set(\"_bAddEditIpAddressPopupLoading\", false);\n                }), objData);\n            }\n        },\n        openEditIPAddressPopup: function openEditIPAddressPopup(sIpAddress, sDescription) {\n            var _this6 = this;\n\n            this.clearAllErrorMessages();\n            this.clearForm();\n            this.set(\"_bAddEditIpAddressPopupLoading\", false);\n            this.set(\"_bShowIpAddressPopup\", true);\n            this.set(\"_bEditing\", true);\n            this.set(\"_sPopupHeader\", this.get(\"_objUsersStringsService\").getString(\"editIpAddress\"));\n            this.set(\"_sEditingIpAddress\", sIpAddress);\n            this.get(\"objChildren\")[\"description\"].setValueFromOutside(sDescription);\n\n            Ember.run.next(function () {\n                Ember.run.schedule(\"afterRender\", function () {\n                    _this6.set(\"_objOriginalData\", _this6.getPlainFormValueObject());\n                });\n            });\n        },\n        addActionClicked: function addActionClicked() {\n            var _this7 = this;\n\n            this.clearForm();\n            this.clearAllErrorMessages();\n            this.set(\"_bAddEditIpAddressPopupLoading\", false);\n            this.set(\"_bShowIpAddressPopup\", true);\n            this.set(\"_bEditing\", false);\n            this.set(\"_sPopupHeader\", this.get(\"_objUsersStringsService\").getString(\"addIpAddress\"));\n\n            Ember.run.next(function () {\n                Ember.run.schedule(\"afterRender\", function () {\n                    _this7.set(\"_objOriginalData\", _this7.getPlainFormValueObject());\n                });\n            });\n        },\n        actions: {\n            onPopupDeleteClose: function onPopupDeleteClose() {\n                if (this.get(\"_bPopupDeleteLoading\")) {\n                    return;\n                }\n                this.set(\"_bShowConfirmDelete\", false);\n            },\n            onRemoveIpAddressPopupConfirm: function onRemoveIpAddressPopupConfirm() {\n                var _this8 = this;\n\n                if (a24Core.isEmpty(this.get(\"_sUserIpAddress\"))) {\n                    this.set(\"_bPopupDeleteLoading\", true);\n                    // check user's ip\n                    var funcGetIpAddressAndRemove = function funcGetIpAddressAndRemove(objResponse) {\n                        _this8.set(\"_bPopupDeleteLoading\", false);\n                        if (!a24Core.isEmpty(objResponse)) {\n                            _this8.set(\"_sUserIpAddress\", objResponse.ip);\n                            if (_this8.get(\"_sUserIpAddress\") !== _this8.get(\"_sIpAddressToRemove\")) {\n                                _this8.removeIpFromWhitelist(_this8.get(\"_sIpAddressToRemove\"));\n                            } else {\n                                // show warning popup\n                                _this8.set(\"_bShowDeleteWarning\", true);\n                            }\n                        } else {\n                            _this8.removeIpFromWhitelist(_this8.get(\"_sIpAddressToRemove\"));\n                        }\n                    };\n\n                    this.get(\"_objIpifyIpAddressCheck\").getUserIpAddress(funcGetIpAddressAndRemove);\n                } else {\n                    if (this.get(\"_sUserIpAddress\") !== this.get(\"_sIpAddressToRemove\")) {\n                        this.removeIpFromWhitelist(this.get(\"_sIpAddressToRemove\"));\n                    } else {\n                        // show warning popup\n                        this.set(\"_bShowDeleteWarning\", true);\n                    }\n                }\n            },\n            onRemoveIpAddressWarningPopupConfirm: function onRemoveIpAddressWarningPopupConfirm() {\n                this.set(\"_bShowDeleteWarning\", false);\n                this.removeIpFromWhitelist(this.get(\"_sIpAddressToRemove\"));\n            },\n            onPopupUnsavedConfirm: function onPopupUnsavedConfirm() {\n                this.clearForm();\n                this.clearAllErrorMessages();\n                this.set(\"_bShowIpAddressPopup\", false);\n            },\n            onPopupIpAddressClose: function onPopupIpAddressClose() {\n                if (!this.get(\"_bAddEditIpAddressPopupLoading\")) {\n                    var bDataMatches = a24Core.compareObjects(Ember, this.getPlainFormValueObject(), this.get(\"_objOriginalData\"));\n\n                    if (bDataMatches) {\n                        this.clearForm();\n                        this.clearAllErrorMessages();\n                        this.set(\"_bShowIpAddressPopup\", false);\n                    } else {\n                        this.set(\"_bShowUnsavedData\", true);\n                    }\n                }\n            },\n            onPopupIpAddressConfirm: function onPopupIpAddressConfirm() {\n                // Do the validation on the form\n                if (!this.doFullValidation()) {\n                    // If the validation passed\n                    var objPayload = this.getPlainFormValueObject();\n                    if (!a24Core.isEmpty(objPayload.ip)) {\n                        objPayload.ip = objPayload.ip.trim();\n                    }\n\n                    this.addEditIpWhitelist(objPayload.ip, objPayload.description);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-users/components/whitelisted-users\", [\"exports\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-lib/mixins/input-form-element\", \"a24-ember-staffshift-users/templates/components/whitelisted-users\"], function (exports, _didRenderChangesMixin, _inputFormElement, _whitelistedUsers) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _inputFormElement.default, {\n        layout: _whitelistedUsers.default,\n        arrUsers: null,\n        funcGetSuggestions: null,\n        objWhitelistUserService: null,\n        objUserService: null,\n\n        // Services\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objSnackbarService: Ember.inject.service(\"snackbar\"),\n        _objUsersStringsService: Ember.inject.service(\"a24-strings-staffshift-users\"),\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n\n        // Promises\n        _objSpecialAddEditPopupAction: null,\n        _objGetUserSuggestions: null,\n        _objGetLinkedUser: null,\n        _objRemoveUser: null,\n        _objAddUser: null,\n        _objOriginalData: null,\n\n        // Stored Lists\n        _arrCustomActions: null,\n        _arrFilterConfig: null,\n        _arrHeaderActions: null,\n\n        // Default properties\n        _bShowAddUserPopup: false,\n        _bShowConfirmDelete: false,\n        _bAddUserPopupLoading: false,\n        _bShowDeleteWarning: false,\n        _bPopupDeleteLoading: false,\n\n        _sUserToRemove: null,\n        _sUserDetailsToRemove: \"\",\n\n        // Init function\n        init: function init() {\n            var _this = this;\n\n            // Call super\n            this._super.apply(this, arguments);\n\n            this.set(\"_arrHeaderActions\", [{\n                sTitle: this.get(\"_objStringsService\").getString(\"add\"),\n                sIcon: \"add\",\n                executeCardAction: function executeCardAction() {\n                    _this.addActionClicked();\n                }\n            }]);\n\n            this.set(\"_objSpecialAddEditPopupAction\", {\n                sTitle: this.get(\"_objStringsService\").getString(\"close\"),\n                sIcon: \"close\",\n                executeCardAction: function executeCardAction() {\n                    _this.send(\"onPopupAddUserClose\");\n                }\n            });\n\n            // Set the custom actions\n            this.set(\"_arrCustomActions\", [{\n                sTooltipText: this.get(\"_objStringsService\").getString(\"add\"),\n                sIcon: \"add\"\n            }]);\n\n            // Set the validation on the form\n            this.set(\"objChildConfig\", {\n                \"objChildren.user\": function objChildrenUser(objMixin) {\n                    a24Validation.addRequired(objMixin, true);\n                }\n            });\n\n            // Set the suggestions function for the popup\n            this.setGetSuggestionFunction();\n\n            // Do the service calls\n            this.doServiceCalls();\n        },\n        setGetSuggestionFunction: function setGetSuggestionFunction() {\n            var _this2 = this;\n\n            // Agency Group Id\n            var sAgencyGroup = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            this.set(\"funcGetSuggestions\", function (sQueryString, funcOnComplete) {\n                // sQueryString - The query string search that was made\n                // funcOnComplete - The function to call on completion\n\n                // Make a service call to retrieve the data for the items\n                _this2.get(\"objUserService\").getAvailableUserByQuery(_this2, \"_objGetUserSuggestions\", sAgencyGroup, sQueryString, // Query string passed to function\n                function (arrData) {\n                    // When service call succeeds\n\n                    // If the data is empty, ensure it's an empty array\n                    if (a24Core.isEmpty(arrData)) {\n                        arrData = [];\n                    }\n\n                    // Define the array that will contain formatted data\n                    var arrFormatted = [];\n\n                    // Loop over the results\n                    for (var i = 0; i < arrData.length; i++) {\n\n                        // Get the item at index i\n                        var objDataItem = arrData[i];\n\n                        // Build the label to show\n                        var sLabel = objDataItem.sFirstName + \" \" + objDataItem.sLastName + \" - \" + objDataItem.sUsername;\n\n                        // Push label with id as an object to the search box\n                        arrFormatted.push({\n                            sLabel: sLabel,\n                            id: objDataItem.id\n                        });\n                    }\n\n                    // Call the callback with the formatted data\n                    funcOnComplete(arrFormatted);\n                }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                    // Call the callback with empty\n                    funcOnComplete([]);\n                }));\n            });\n        },\n\n        // Make the service calls required for the card to display correctlty\n        doServiceCalls: function doServiceCalls() {\n            var _this3 = this;\n\n            // Set the loading to true\n            this.set(\"bLoading\", true);\n\n            // Get the list of whitelisted users\n            this.get(\"objWhitelistUserService\").getUserWhitelistings(this, \"_objGetUserWhitelistings\", function (arrData) {\n                // Prep the data then take the form out of loading\n                _this3.prepareForDisplay(arrData);\n                _this3.set(\"bLoading\", false);\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                // Prep empty data then take the form out of loading\n                _this3.prepareForDisplay([]);\n                _this3.set(\"bLoading\", false);\n            }));\n        },\n\n        // Prepare user list for display\n        prepareForDisplay: function prepareForDisplay(arrData) {\n\n            // Reset the data if it is empty\n            if (a24Core.isEmpty(arrData)) {\n                arrData = [];\n            }\n\n            arrData.sort(function (objA, objB) {\n                if (objA.first_name < objB.first_name) {\n                    return -1;\n                } else if (objA.first_name > objB.first_name) {\n                    return 1;\n                }\n                return 0;\n            });\n\n            // Store a this instance\n            var objThis = this;\n\n            // Function used to generate a custom function per item\n            var funcCardActionRemoveExecute = function funcCardActionRemoveExecute(objUser) {\n                // Return the function to remove the user with id = sId\n                return function () {\n                    // Set the current user id as the id\n                    objThis.set(\"_sUserToRemove\", objUser.id);\n                    objThis.set(\"_sUserDetailsToRemove\", objUser.name);\n                    // Show the confirm delete\n                    objThis.set(\"_bShowConfirmDelete\", true);\n                };\n            };\n\n            // Define the array of users\n            var arrDisplayUsers = [];\n\n            // Loop over the data that is present\n            for (var i = 0; i < arrData.length; i++) {\n\n                // Concat the first and last name\n                var sFullName = arrData[i].first_name + \" \" + arrData[i].last_name;\n\n                // set a user object\n                var objUser = {\n                    id: arrData[i].user_id,\n                    name: sFullName\n                };\n\n                // Push the item in to the array\n                arrDisplayUsers.push({\n                    sLabel: this.get(\"_objStringsService\").getHTMLTokenString(\"a24-string-html-dot-value\", sFullName, arrData[i].username),\n                    sIcon: \"person\",\n                    arrActions: [{\n                        sTitle: this.get(\"_objStringsService\").getString(\"remove\"),\n                        sIcon: \"delete\",\n                        executeCardAction: funcCardActionRemoveExecute(objUser)\n                    }]\n                });\n            }\n\n            // Set the array of users\n            this.set(\"arrUsers\", arrDisplayUsers);\n        },\n\n        // Remove the user\n        removeUser: function removeUser(sUserId) {\n            var _this4 = this;\n\n            this.set(\"_bPopupDeleteLoading\", true);\n\n            this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsService\").getTokenString(\"removingItem\", this.get(\"_objUsersStringsService\").getString(\"user\")));\n\n            // Do the remove service call\n            this.get(\"objWhitelistUserService\").deleteUserWhitelist(this, \"_objRemoveUser\", sUserId, function () {\n                // Hide the confirm delete popup\n                _this4.set(\"_bShowConfirmDelete\", false);\n\n                _this4.get(\"_objSnackbarService\").showSnackbarMessage(_this4.get(\"_objStringsService\").getTokenString(\"successRemoveItem\", _this4.get(\"_objUsersStringsService\").getString(\"user\")));\n                _this4.set(\"_bPopupDeleteLoading\", false);\n                // GET user list again\n                _this4.doServiceCalls();\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function () /*sCode, sStatus, objErrorThrown, objError*/{\n                _this4.set(\"_bShowConfirmDelete\", false);\n\n                _this4.get(\"_objSnackbarService\").showSnackbarMessage(_this4.get(\"_objStringsService\").getTokenString(\"failRemoveItem\", _this4.get(\"_objUsersStringsService\").getString(\"user\")));\n                _this4.set(\"_bPopupDeleteLoading\", false);\n            }));\n        },\n        addUser: function addUser(sUserId) {\n            var _this5 = this;\n\n            // Set the card in to loading\n            this.set(\"_bAddUserPopupLoading\", true);\n\n            var objData = {\n                \"user_id\": sUserId\n            };\n\n            this.get(\"_objSnackbarService\").showSnackbarMessage(this.get(\"_objStringsService\").getTokenString(\"addingItem\", this.get(\"_objUsersStringsService\").getString(\"user\")));\n\n            // Do the add service call\n            this.get(\"objWhitelistUserService\").addUserToWhitelist(this, \"_objAddUser\", objData, function () {\n\n                // Hide the add user popup\n                _this5.set(\"_bShowAddUserPopup\", false);\n\n                _this5.get(\"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objStringsService\").getTokenString(\"successAddItem\", _this5.get(\"_objUsersStringsService\").getString(\"user\")));\n\n                // GET user list again\n                _this5.doServiceCalls();\n            }, a24RestCallHelper.createJsonAjaxFailureObject([\"*\", \"*CODE\", \"*MALFORMED\"], function (sCode /*, sStatus, objErrorThrown, objError*/) {\n\n                if (sCode === \"409\") {\n                    _this5.setResponseError([\"user\"], \"validationUserAlreadyExist\", false, false, _this5.get(\"_objUsersStringsService\"));\n                } else {\n                    _this5.get(\"_objSnackbarService\").showSnackbarMessage(_this5.get(\"_objStringsService\").getTokenString(\"failAddItem\", _this5.get(\"_objUsersStringsService\").getString(\"user\")));\n                }\n\n                _this5.set(\"_bAddUserPopupLoading\", false);\n            }));\n        },\n        addActionClicked: function addActionClicked() {\n            var _this6 = this;\n\n            this.clearForm();\n            this.clearAllErrorMessages();\n            this.set(\"_bAddUserPopupLoading\", false);\n            this.set(\"_bShowAddUserPopup\", true);\n\n            Ember.run.next(function () {\n                Ember.run.schedule(\"afterRender\", function () {\n                    _this6.set(\"_objOriginalData\", _this6.getPlainFormValueObject());\n                });\n            });\n        },\n\n        // ACTIONS\n        actions: {\n            onPopupDeleteClose: function onPopupDeleteClose() {\n                if (this.get(\"_bPopupDeleteLoading\")) {\n                    return;\n                }\n                this.set(\"_bShowConfirmDelete\", false);\n            },\n            // Once confirmation is given on removing a user\n            onRemoveUserPopupConfirm: function onRemoveUserPopupConfirm() {\n                if (this.get(\"_objUserSession.objAuthData.context.sUserId\") !== this.get(\"_sUserToRemove\")) {\n                    // Remove the user with the stored id\n                    this.removeUser(this.get(\"_sUserToRemove\"));\n                } else {\n                    this.set(\"_bShowDeleteWarning\", true);\n                }\n            },\n            onRemoveUserAddressWarningPopupConfirm: function onRemoveUserAddressWarningPopupConfirm() {\n                this.set(\"_bShowDeleteWarning\", false);\n                this.removeUser(this.get(\"_sUserToRemove\"));\n            },\n            onPopupUnsavedConfirm: function onPopupUnsavedConfirm() {\n                this.clearForm();\n                this.clearAllErrorMessages();\n                this.set(\"_bShowAddUserPopup\", false);\n            },\n            onPopupAddUserClose: function onPopupAddUserClose() {\n                if (!this.get(\"_bAddUserPopupLoading\")) {\n                    var bDataMatches = a24Core.compareObjects(Ember, this.getPlainFormValueObject(), this.get(\"_objOriginalData\"));\n\n                    if (bDataMatches) {\n                        this.clearForm();\n                        this.clearAllErrorMessages();\n                        this.set(\"_bShowAddUserPopup\", false);\n                    } else {\n                        this.set(\"_bShowUnsavedData\", true);\n                    }\n                }\n            },\n            onPopupAddUserConfirm: function onPopupAddUserConfirm() {\n\n                // Do the validation on the form\n                if (!this.doFullValidation()) {\n                    // If the validation passed\n\n                    // Get the user id of the user that is being added\n                    var sUserId = this.getPlainFormValueObject().user.id;\n\n                    // Add the user with the correct id\n                    this.addUser(sUserId);\n                }\n            }\n        }\n    });\n});","define(\"a24-ember-staffshift-users/services/a24-enums-staffshift-users\", [\"exports\", \"a24-ember-lookup/services/a24-enums-base\"], function (exports, _a24EnumsBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _a24EnumsBase.default.extend({\n        _objStringsService: Ember.inject.service(\"a24-strings\"),\n        _objStaffshiftUsersStringsService: Ember.inject.service(\"a24-strings-staffshift-users\"),\n\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            this.set(\"aclRoles\", {\n                \"ADMIN\": {\n                    \"backend\": \"admin\",\n                    \"frontend\": this.get(\"_objStaffshiftUsersStringsService\").getString(\"admin\")\n                },\n                \"REPORTER\": {\n                    \"backend\": \"reporter\",\n                    \"frontend\": this.get(\"_objStaffshiftUsersStringsService\").getString(\"reporter\")\n                },\n                \"BOOKER\": {\n                    \"backend\": \"booker\",\n                    \"frontend\": this.get(\"_objStaffshiftUsersStringsService\").getString(\"booker\")\n                },\n                \"MANAGER\": {\n                    \"backend\": \"manager\",\n                    \"frontend\": this.get(\"_objStaffshiftUsersStringsService\").getString(\"manager\")\n                },\n                \"ACCOUNT\": {\n                    \"backend\": \"account\",\n                    \"frontend\": this.get(\"_objStaffshiftUsersStringsService\").getString(\"account\")\n                },\n                \"VACANCY_MANAGER\": {\n                    \"backend\": \"vacancy_manager\",\n                    \"frontend\": this.get(\"_objStaffshiftUsersStringsService\").getString(\"vacancyManager\")\n                },\n                \"COMPLIANCE\": {\n                    \"backend\": \"compliance\",\n                    \"frontend\": this.get(\"_objStaffshiftUsersStringsService\").getString(\"compliance\")\n                },\n                \"DATA_PROCESSOR\": {\n                    \"backend\": \"data_processor\",\n                    \"frontend\": this.get(\"_objStaffshiftUsersStringsService\").getString(\"dataProcessor\")\n                }\n            });\n\n            this.set(\"statuses\", {\n                \"ENABLED\": {\n                    \"backend\": \"enabled\",\n                    \"frontend\": this.get(\"_objStaffshiftUsersStringsService\").getString(\"enabled\")\n                },\n                \"DISABLED\": {\n                    \"backend\": \"disabled\",\n                    \"frontend\": this.get(\"_objStringsService\").getString(\"disabled\")\n                }\n            });\n        }\n    });\n});","define(\"a24-ember-staffshift-users/services/a24-strings-staffshift-users\", [\"exports\", \"a24-ember-lookup/services/a24-strings-base\"], function (exports, _a24StringsBase) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = _a24StringsBase.default.extend({\n        _objStrings: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n            this.set(\"_objStrings\", {\n                //===== STRINGS START =====\n\n                admin: \"Admin\",\n                reporter: \"Reporter\",\n                booker: \"Booker\",\n                owner: \"Owner\",\n                manager: \"Manager\",\n                candidate: \"Candidate\",\n                account: \"Account\",\n                vacancyManager: \"Vacancy Manager\",\n                compliance: \"Compliance\",\n                dataProcessor: \"Data Processor\",\n                enabled: \"Enabled\",\n                addUser: \"Add User\",\n                listGroups: \"List Groups\",\n                listUsers: \"List Users\",\n                viewGroup: \"View Group\",\n                assignedUsers: \"Assigned Users\",\n                mainGroupDetails: \"Main Group Details\",\n                groupName: \"Group Name\",\n                role: \"Role\",\n                selectRole: \"Select Role\",\n                createAclGroup: \"Add group\",\n                editAclGroup: \"Edit group\",\n                creatingAclGroup: \"Creating group...\",\n                editingAclGroup: \"Editing group...\",\n                createAclGroupSuccess: \"Successfully created group\",\n                editAclGroupSuccess: \"Successfully edited group\",\n                createAclGroupFailed: \"Failed to create group\",\n                aclConflictError: \"The Group name you are trying to use already belongs to another group\",\n                editAclGroupFailed: \"Failed to edit group\",\n\n                confirmDeleteUser: \"Are you sure you want to remove this user?\",\n\n                userRemovedSuccess: \"User successfully removed\",\n                userRemovedFailure: \"An error occurred removing the user\",\n                userAddSuccess: \"User added successfully\",\n                userAddFailure: \"An error occurred adding the user\",\n                addingUser: \"Adding user...\",\n\n                statuses: \"Statuses\",\n                selectStatus: \"Select Status\",\n\n                userIpwhitelists: \"IP and User Whitelist\",\n                addIpAddress: \"Add IP Address\",\n                ipAddress: \"IP Address\",\n                confirmDeleteIpAddress: \"Are you sure you want to remove this IP Address?\",\n                editIpAddress: \"Edit IP Address\",\n                ipWhitelist: \"IP Whitelist\",\n                user: \"User\",\n                userWhitelist: \"User Whitelist\",\n                validationIpAlreadyExist: \"IP already exists\",\n                validationUserAlreadyExist: \"User already exists\",\n\n                deleteUserWhitelistWarning: \"Logged in as: {0}.<br/><br/>You are currently logged in as the user you are trying to remove, are you sure you want to remove this user?<br/><br/><b>Note by doing this you might not be able to access this context anymore.</b>\",\n                deleteIpWhitelistWarning: \"IP address is: {0}.<br/><br/>You are currently connected from the IP address you are trying to remove, are you sure you want to remove this entry?<br/><br/><b>Note by doing this you might not be able to access this context anymore.</b>\"\n\n                //===== STRINGS END   =====\n            });\n        }\n    });\n});","define(\"a24-ember-staffshift-users/services/ipify-ip-address-check\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objAjax: $.ajax,\n        getUserIpAddress: function getUserIpAddress(funcProcessResponse) {\n            this.get(\"_objAjax\")({\n                url: \"https://api.ipify.org?format=json\",\n                cache: true,\n                dataType: \"json\"\n            }).always(function (sResponse) {\n                funcProcessResponse(sResponse);\n            });\n        }\n    });\n});","define(\"a24-ember-staffshift-users/services/rest-acl-group-resource-tree\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        sTriageBaseRest: Ember.computed.readOnly(\"env.sTriageBaseRest\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n        /**\n         * Get a list of all available resources\n         * \n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  22 October 2018\n         */\n        getAclGroupResourceTree: function getAclGroupResourceTree(objCaller, sProperty, funcSuccess, objFailure) {\n\n            a24RestUrlConstruct.setBaseUrl(\"/rest/acl/group/resource-tree\");\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, Ember.get(this, \"_objUserSession\"), Ember.get(this, \"_objNavigation\"), \"GET\", Ember.get(this, \"sTriageBaseRest\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Get a list of all available resources for a specific group\n         * \n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sGroupId - The acl group id that you wish to retrieve the resources for\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  22 October 2018\n         */\n        getAclGroupResourceTreeByGroupId: function getAclGroupResourceTreeByGroupId(objCaller, sProperty, sGroupId, funcSuccess, objFailure) {\n\n            a24RestUrlConstruct.setBaseUrl(\"/rest/acl/group/\" + sGroupId + \"/resource-tree\");\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, Ember.get(this, \"_objUserSession\"), Ember.get(this, \"_objNavigation\"), \"GET\", Ember.get(this, \"sTriageBaseRest\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-staffshift-users/services/rest-acl-group-users\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * This service method will make a GET to the acl group route to fetch all its users\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sAclGroupId - The id of the acl group to get users for\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objQueryParams - Query Parameters for the request\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  30 November 2017\n         */\n        getUserList: function getUserList(objCaller, sProperty, sAclGroupId, funcSuccess, objFailure, objQueryParams) {\n\n            var sUrl = Ember.get(this, \"sRestApiBaseUrl\") + \"/v1/acl/group/\" + sAclGroupId + \"/userdetails\";\n\n            a24RestUrlConstruct.setBaseUrlSwagger(sUrl);\n\n            a24RestUrlConstruct.addQueryParamObject(objQueryParams);\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, Ember.get(this, \"_objUserSession\"), Ember.get(this, \"_objNavigation\"), \"GET\", a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n\n        /**\n         * This service method will make a DELETE to the acl group route with acl group id and user id to remove user linked to that ACL Group\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sAclGroupId - The id of the Acl Group\n         * @param sUserId - The id of the user which needs to be removed\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         *\n         * @author Tarun Arora <tarunarora0807@gmail.com>\n         * @since  04 December 2017\n         */\n        removeUser: function removeUser(objCaller, sProperty, sAclGroupId, sUserId, funcSuccess, objFailure) {\n            var sUrl = Ember.get(this, \"sRestApiBaseUrl\") + \"/v1/acl/group/\" + sAclGroupId + \"/user/\" + sUserId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(sUrl);\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, Ember.get(this, \"_objUserSession\"), Ember.get(this, \"_objNavigation\"), \"DELETE\", a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n\n        /**\n         * This service method will make a POST to the acl group route with acl group id and user id to link the user to the ACL Group\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sAclGroupId - The id of the Acl Group\n         * @param sUserId - The id of the user which needs to be removed\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  04 December 2017\n         */\n        addUser: function addUser(objCaller, sProperty, sAclGroupId, sUserId, funcSuccess, objFailure) {\n            var sUrl = Ember.get(this, \"sRestApiBaseUrl\") + \"/v1/acl/group/\" + sAclGroupId + \"/user/\" + sUserId;\n\n            a24RestUrlConstruct.setBaseUrlSwagger(sUrl);\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, Ember.get(this, \"_objUserSession\"), Ember.get(this, \"_objNavigation\"), \"POST\", a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, {}));\n        }\n    });\n});","define(\"a24-ember-staffshift-users/services/rest-acl-group\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * This service method will make a PUT to the acl group route\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objPayload - The new policy type details\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  27 November 2017\n         */\n        addAclGroup: function addAclGroup(objCaller, sProperty, funcSuccess, objFailure, objPayload) {\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, Ember.get(this, \"_objUserSession\"), Ember.get(this, \"_objNavigation\"), \"POST\", Ember.get(this, \"sRestApiBaseUrl\") + \"/v1/acl/group\", funcSuccess, objFailure, objPayload));\n        },\n\n        /**\n         * This service method will make a PUT to the acl group route\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objPayload - The new policy type details\n         *\n         * @author Ahmed Onawale<ahmedonawale@gmail.com>\n         * @since  27 November 2017\n         */\n        editAclGroup: function editAclGroup(objCaller, sProperty, sCandidateId, funcSuccess, objFailure, objPayload) {\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, Ember.get(this, \"_objUserSession\"), Ember.get(this, \"_objNavigation\"), \"POST\", Ember.get(this, \"sRestApiBaseUrl\") + \"/v1/acl/group/\" + sCandidateId, funcSuccess, objFailure, objPayload));\n        },\n\n        /**\n         * This service method will make a GET to the acl group route with a specific\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sAclGroupId - The id of the acl group that you wish to recieve\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  29 November 2017\n         */\n        getAclGroupById: function getAclGroupById(objCaller, sProperty, sAclGroupId, funcSuccess, objFailure) {\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, Ember.get(this, \"_objUserSession\"), Ember.get(this, \"_objNavigation\"), \"GET\", Ember.get(this, \"sRestApiBaseUrl\") + \"/v1/acl/group/\" + sAclGroupId, funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-staffshift-users/services/rest-agency-group-ip-whitelist\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Gets all IP whitelistings\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  25 Sept 2019\n         */\n        getIpWhitelistings: function getIpWhitelistings(objContext, sProperty, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency-group/\" + sAgencyGroupId + \"/ip-whitelist\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                sortBy: {\n                    mValue: \"ip\"\n                }\n            });\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Add an IP whitelisting\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param objData - Post body for adding an IP whitelisting\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  25 Sept 2019\n         */\n        addIpToWhitelist: function addIpToWhitelist(objContext, sProperty, objData, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency-group/\" + sAgencyGroupId + \"/ip-whitelist\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Edit an IP whitelisting\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sIpAddress - The IP address\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objData - Post body for adding an IP whitelisting\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  25 Sept 2019\n         */\n        editIpWhitelist: function editIpWhitelist(objContext, sProperty, sIpAddress, funcSuccess, objFailure, objData) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency-group/\" + sAgencyGroupId + \"/ip-whitelist/\" + sIpAddress);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Delete an IP whitelisting\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sIp - IP address to delete\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  25 Sept 2019\n         */\n        deleteIpWhitelist: function deleteIpWhitelist(objContext, sProperty, sIp, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency-group/\" + sAgencyGroupId + \"/ip-whitelist/\" + sIp);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"DELETE\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-staffshift-users/services/rest-agency-group-user-whitelist\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        /*\n          Services\n        */\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /*\n          Functions\n        */\n        /**\n         * Gets all user whitelistings\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  25 Sept 2019\n         */\n        getUserWhitelistings: function getUserWhitelistings(objContext, sProperty, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency-group/\" + sAgencyGroupId + \"/ip-whitelist-all-access-user\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                sortBy: {\n                    mValue: \"user_id\"\n                }\n            });\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Add an user whitelisting\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param objData - Post body for adding an user whitelisting\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  25 Sept 2019\n         */\n        addUserToWhitelist: function addUserToWhitelist(objContext, sProperty, objData, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency-group/\" + sAgencyGroupId + \"/ip-whitelist-all-access-user\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Delete an user whitelisting\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sUserId - User Id to delete\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  25 Sept 2019\n         */\n        deleteUserWhitelist: function deleteUserWhitelist(objContext, sProperty, sUserId, funcSuccess, objFailure) {\n            var sAgencyGroupId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency-group/\" + sAgencyGroupId + \"/ip-whitelist-all-access-user/\" + sUserId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"DELETE\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-staffshift-users/services/rest-agency-group-users\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * This service method will make a GET to the agency group to look up available users\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sAgencyGroupId - The id of the agency group to get users for\n         * @param sQueryString - The query string for the query params\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         *\n         * @author Michael Barnard <michael.barnard@a24group.com>\n         * @since  30 November 2017\n         */\n        getAvailableUserByQuery: function getAvailableUserByQuery(objCaller, sProperty, sAgencyGroupId, sQueryString, funcSuccess, objFailure) {\n\n            var sUrl = Ember.get(this, \"sRestApiBaseUrl\") + \"/v1/agency-group/\" + sAgencyGroupId + \"/user\";\n\n            a24RestUrlConstruct.setBaseUrlSwagger(sUrl);\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 10\n                },\n                q: {\n                    mValue: sQueryString,\n                    bLike: true,\n                    bEncode: true\n                },\n                sStatus: {\n                    mValue: \"active\"\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, Ember.get(this, \"_objUserSession\"), Ember.get(this, \"_objNavigation\"), \"GET\", a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n        suggestUsers: function suggestUsers(objCaller, sProperty, sAgencyGroupId, sQueryString, funcSuccess, objFailure) {\n\n            var sUrl = Ember.get(this, \"sRestApiBaseUrl\") + \"/v1/agency-group/\" + sAgencyGroupId + \"/user\";\n\n            a24RestUrlConstruct.setBaseUrlSwagger(sUrl);\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 10\n                },\n                q: {\n                    mValue: sQueryString,\n                    bLike: true,\n                    bEncode: true\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, Ember.get(this, \"_objUserSession\"), Ember.get(this, \"_objNavigation\"), \"GET\", a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-staffshift-users/services/rest-agency-group\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * This service method will make a POST call to the agency group user route, to create\n         * a user\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sAgencyGroupId - The agency group id\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objPayload - The new user details\n         *\n         * @author Deon De Wet<deon.dewet@gmail.com>\n         * @since  10 January 2018\n         */\n        addUser: function addUser(objCaller, sProperty, sAgencyGroupId, funcSuccess, objFailure, objPayload) {\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, Ember.get(this, \"_objUserSession\"), Ember.get(this, \"_objNavigation\"), \"POST\", Ember.get(this, \"sRestApiBaseUrl\") + \"/v1/agency-group/\" + sAgencyGroupId + \"/user\", funcSuccess, objFailure, objPayload));\n        }\n    });\n});","define(\"a24-ember-staffshift-users/services/rest-agency-ip-whitelist\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * Gets all IP whitelistings\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  25 Sept 2019\n         */\n        getIpWhitelistings: function getIpWhitelistings(objContext, sProperty, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency/\" + sAgencyId + \"/ip-whitelist\");\n\n            a24RestUrlConstruct.addQueryParamObject({\n                sortBy: {\n                    mValue: \"ip\"\n                }\n            });\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Add an IP whitelisting\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param objData - Post body for adding an IP whitelisting\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  25 Sept 2019\n         */\n        addIpToWhitelist: function addIpToWhitelist(objContext, sProperty, objData, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency/\" + sAgencyId + \"/ip-whitelist\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Edit an IP whitelisting\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sIpAddress - The IP address\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         * @param objData - Post body for adding an IP whitelisting\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  25 Sept 2019\n         */\n        editIpWhitelist: function editIpWhitelist(objContext, sProperty, sIpAddress, funcSuccess, objFailure, objData) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency/\" + sAgencyId + \"/ip-whitelist/\" + sIpAddress);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"PUT\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Delete an IP whitelisting\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sIp - IP address to delete\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  25 Sept 2019\n         */\n        deleteIpWhitelist: function deleteIpWhitelist(objContext, sProperty, sIp, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency/\" + sAgencyId + \"/ip-whitelist/\" + sIp);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"DELETE\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-staffshift-users/services/rest-agency-user-whitelist\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        /*\n          Services\n        */\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        _sRestApiBaseUrl: Ember.computed.readOnly(\"_objEnv.sRestApiBaseUrl\"),\n\n        _objEnv: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /*\n          Functions\n        */\n        /**\n         * Gets all user whitelistings\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  25 Sept 2019\n         */\n        getUserWhitelistings: function getUserWhitelistings(objContext, sProperty, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency/\" + sAgencyId + \"/ip-whitelist-all-access-user\");\n            a24RestUrlConstruct.addQueryParamObject({\n                sortBy: {\n                    mValue: \"user_id\"\n                }\n            });\n\n            a24RestUrlConstruct.addQueryParamObject({\n                items_per_page: {\n                    mValue: 1000\n                }\n            });\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"GET\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n        /**\n         * Add an user whitelisting\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param objData - Post body for adding an IP whitelisting\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  25 Sept 2019\n         */\n        addUserToWhitelist: function addUserToWhitelist(objContext, sProperty, objData, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency/\" + sAgencyId + \"/ip-whitelist-all-access-user\");\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"POST\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure, objData));\n        },\n\n        /**\n         * Delete an user whitelisting\n         *\n         * @param objContext - The the caller this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sUserId - User Id to delete\n         * @param funcSuccess - The success function\n         * @param objFailure (Optional) - The object that will deal with failed service calls\n         *\n         * @author Deon De Wet <deon.dewet@a24group.com>\n         * @since  25 Sept 2019\n         */\n        deleteUserWhitelist: function deleteUserWhitelist(objContext, sProperty, sUserId, funcSuccess, objFailure) {\n            var sAgencyId = this.get(\"_objUserSession\").getUserContextReference().mId;\n\n            a24RestUrlConstruct.setBaseUrl(\"/v1/agency/\" + sAgencyId + \"/ip-whitelist-all-access-user/\" + sUserId);\n\n            return a24RestCallHelper.doRestServiceCall(objContext, sProperty, a24RestCallHelper.makeJsonAjaxCall(objContext, this.get(\"_objUserSession\"), this.get(\"_objNavigation\"), \"DELETE\", this.get(\"_sRestApiBaseUrl\") + a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        }\n    });\n});","define(\"a24-ember-staffshift-users/services/rest-agency-users\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _objUserSession: Ember.inject.service(\"user-session\"),\n        _objNavigation: Ember.inject.service(\"navigation\"),\n\n        sRestApiBaseUrl: Ember.computed.readOnly(\"env.sRestApiBaseUrl\"),\n\n        env: Ember.computed(function () {\n            return Ember.getOwner(this).resolveRegistration(\"config:environment\");\n        }),\n\n        /**\n         * This service method will make a GET to the agency group to look up available users\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sAgencyId - The id of the agency to get users for\n         * @param sQueryString - The query string for the query params\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         * @param objQuery - Extra params to add to the query\n         *\n         * @author Junior van Wyk <johannes.vanwyk@a24group.com>\n         * @since  03 October 2019\n         */\n        getAvailableUserByQuery: function getAvailableUserByQuery(objCaller, sProperty, sAgencyId, sQueryString, funcSuccess, objFailure, objQuery) {\n\n            var sUrl = Ember.get(this, \"sRestApiBaseUrl\") + \"/v1/agency/\" + sAgencyId + \"/user\";\n\n            a24RestUrlConstruct.setBaseUrlSwagger(sUrl);\n            if (a24Core.isEmpty(objQuery)) {\n                a24RestUrlConstruct.addQueryParamObject({\n                    items_per_page: {\n                        mValue: 10\n                    },\n                    q: {\n                        mValue: sQueryString,\n                        bLike: true,\n                        bEncode: true\n                    },\n                    sStatus: {\n                        mValue: \"active\"\n                    }\n                });\n            } else {\n                a24RestUrlConstruct.addQueryParamObject(objQuery);\n            }\n\n            return a24RestCallHelper.doRestServiceCall(objCaller, sProperty, a24RestCallHelper.makeJsonAjaxCall(objCaller, Ember.get(this, \"_objUserSession\"), Ember.get(this, \"_objNavigation\"), \"GET\", a24RestUrlConstruct.getConstructedUrl(), funcSuccess, objFailure));\n        },\n\n\n        /**\n         * This service method will make a GET to the agency to look up available users for suggest\n         *\n         * @param objCaller - The instance of the parent calling this function\n         * @param sProperty - The Property name to get the promise object\n         * @param sAgencyId - The id of the agency to get users for\n         * @param sQueryString - The query string for the query params\n         * @param funcSuccess - The callback function to execute when the service call is successful\n         * @param objFailure - The failure object\n         *\n         * @author Ruan Naude <ruan.naude@a24group.com>\n         * @since  24 Nov 2020\n         */\n        suggestUsers: function suggestUsers(objCaller, sProperty, sAgencyId, sQueryString, funcSuccess, objFailure) {\n            this.getAvailableUserByQuery(objCaller, sProperty, sAgencyId, sQueryString, funcSuccess, objFailure, {\n                items_per_page: {\n                    mValue: 10\n                },\n                q: {\n                    mValue: sQueryString,\n                    bLike: true,\n                    bEncode: true\n                }\n            });\n        }\n    });\n});","define(\"a24-ember-staffshift-users/templates/components/agency-group-add-edit-popup\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"fqd/zLT1\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\"],\\\"statements\\\":[[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"bDismissible\\\",\\\"onPopupResponsiveDismiss\\\"],[[22,[\\\"bShowAddPopup\\\"]],[22,[\\\"_bAddPopupLoading\\\"]],false,false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupAddCancel\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"class\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[[26,\\\"if\\\",[[22,[\\\"bIsEditing\\\"]],[26,\\\"lookup-string\\\",[\\\"editAclGroup\\\",[22,[\\\"_objStaffshiftUsersStringsService\\\"]]],null],[26,\\\"lookup-string\\\",[\\\"createAclGroup\\\",[22,[\\\"_objStaffshiftUsersStringsService\\\"]]],null]],null],\\\"padding-double grey lighten-3\\\",false,[21,1,[]],[22,[\\\"_objSpecialAddEditPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"bShowAddPopup\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-double\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"bRequired\\\",\\\"iOrder\\\",\\\"sValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onInputValueChangedAction\\\",\\\"onAddChildValidationAction\\\"],[[26,\\\"lookup-string\\\",[\\\"groupName\\\",[22,[\\\"_objStaffshiftUsersStringsService\\\"]]],null],\\\"groupName\\\",true,1,[22,[\\\"_sInputGroupName\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"sOptionsPrompt\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"bMultiSelect\\\",\\\"objValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"role\\\",[22,[\\\"_objStaffshiftUsersStringsService\\\"]]],null],\\\"role\\\",[26,\\\"lookup-string\\\",[\\\"selectRole\\\",[22,[\\\"_objStaffshiftUsersStringsService\\\"]]],null],[22,[\\\"_arrRoles\\\"]],\\\"sValue\\\",2,true,false,[22,[\\\"_objGroupRole\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-dropdown\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"sOptionsPrompt\\\",\\\"arrOptions\\\",\\\"sOptionsValueKey\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"bMultiSelect\\\",\\\"arrValues\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"statuses\\\",[22,[\\\"_objStaffshiftUsersStringsService\\\"]]],null],\\\"status\\\",[26,\\\"lookup-string\\\",[\\\"selectStatus\\\",[22,[\\\"_objStaffshiftUsersStringsService\\\"]]],null],[22,[\\\"arrStatuses\\\"]],\\\"sValue\\\",3,false,true,[22,[\\\"_arrResources\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal padding-left-normal font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"a24RequiredFieldsMarked\\\"],null],false],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupAddCancel\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"back\\\"],null],false],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupAddConfirm\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"save\\\"],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowUnsavedData\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupUnsavedConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"unsavedData\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-users/templates/components/agency-group-add-edit-popup.hbs\" } });\n});","define(\"a24-ember-staffshift-users/templates/components/agency-group-list-page\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"qlBH6KwZ\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[4,\\\"card-style-component\\\",null,[[\\\"bApplyDefaultPadding\\\"],[false]],{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"bReloader\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[26,\\\"card-datagrid-container\\\",null,[[\\\"sUrlBase\\\",\\\"objDatagridConfig\\\",\\\"objQueryParams\\\",\\\"bShareableLink\\\",\\\"bSwaggerServiceCalls\\\",\\\"cardDatagridTableCell\\\",\\\"cardDatagridTableNoneSelected\\\",\\\"cardDatagridTableOneSelected\\\",\\\"cardDatagridTableMultiSelected\\\"],[[22,[\\\"sUrlBase\\\"]],[22,[\\\"objDatagridConfig\\\"]],[22,[\\\"objQueryParams\\\"]],true,false,[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableCell\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableNoneSelected\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableOneSelected\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableMultiSelected\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[1,[26,\\\"agency-group-add-edit-popup\\\",null,[[\\\"bShowAddPopup\\\",\\\"arrStatuses\\\",\\\"onPopupAddCancel\\\",\\\"onPopupAddSuccess\\\"],[[22,[\\\"_bShowAddPopup\\\"]],[22,[\\\"_arrStatuses\\\"]],[26,\\\"action\\\",[[21,0,[]],[26,\\\"mut\\\",[[22,[\\\"_bShowAddPopup\\\"]]],null],false],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupSuccess\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-users/templates/components/agency-group-list-page.hbs\" } });\n});","define(\"a24-ember-staffshift-users/templates/components/agency-group-view-add-user-card\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"ioed4ghu\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objUser\\\"],\\\"statements\\\":[[4,\\\"card-style-component\\\",null,[[\\\"bApplyDefaultPadding\\\"],[false]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"filter-header\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"card-datagrid-filter\\\",null,[[\\\"class\\\",\\\"arrHeaderConfig\\\",\\\"sDatagridHeader\\\",\\\"cardDatagridFilterChangeEvent\\\",\\\"customActionClicked\\\",\\\"arrCustomActions\\\"],[\\\"card-datagrid-filter\\\",[26,\\\"if\\\",[[22,[\\\"bLoading\\\"]],false,[22,[\\\"_arrFilterConfig\\\"]]],null],[26,\\\"lookup-string\\\",[\\\"assignedUsers\\\",[22,[\\\"_objStaffshiftUsersStringsService\\\"]]],null],[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridFilterChangeEvent\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"customActionClicked\\\"],null],[22,[\\\"_arrCustomActions\\\"]]]]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative showActionsOnCollapseHover\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\"],[[22,[\\\"bLoading\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"arrUsers\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[20,\\\"horizontal-line-component\\\"],false],[0,\\\"\\\\n            \\\"],[1,[26,\\\"accordion-item-component\\\",null,[[\\\"sHeader\\\",\\\"sHeaderClass\\\",\\\"sIconName\\\",\\\"sIconClass\\\",\\\"arrActionItems\\\"],[[21,2,[\\\"sLabel\\\"]],\\\"a24-grey-text-darken-3\\\",[21,2,[\\\"sIcon\\\"]],\\\"grey-text\\\",[21,2,[\\\"arrActions\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"no-data padding-bottom-normal\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"noData\\\"],null],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"onPopupResponsiveDismiss\\\",\\\"bDismissible\\\"],[[22,[\\\"_bShowAddUserPopup\\\"]],[22,[\\\"_bAddUserPopupLoading\\\"]],false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupAddUserClose\\\"],null],false]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"objSpecialAction\\\",\\\"bMobileView\\\"],[[26,\\\"lookup-string\\\",[\\\"addUser\\\",[22,[\\\"_objStaffshiftUsersStringsService\\\"]]],null],\\\"padding-double popup-header-gray\\\",false,[22,[\\\"_objSpecialAddEditPopupAction\\\"]],[21,1,[]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"_bShowAddPopup\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-double\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-suggest\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"bRequired\\\",\\\"sOptionsLabelKey\\\",\\\"iOrder\\\",\\\"funcGetSuggestions\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"username\\\"],null],\\\"user\\\",true,\\\"sLabel\\\",1,[22,[\\\"funcGetSuggestions\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal padding-left-normal font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"a24RequiredFieldsMarked\\\"],null],false],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupAddUserClose\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupAddUserConfirm\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"save\\\"],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowConfirmDelete\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onRemoveUserPopupConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"confirmDeleteUser\\\",[22,[\\\"_objStaffshiftUsersStringsService\\\"]]],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowUnsavedData\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupUnsavedConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"unsavedData\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-users/templates/components/agency-group-view-add-user-card.hbs\" } });\n});","define(\"a24-ember-staffshift-users/templates/components/agency-group-view-edit-card\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"VCr9+ugu\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"card-heading-and-content-component\\\",null,[[\\\"sHeading\\\",\\\"bLoading\\\",\\\"arrActionItems\\\"],[[26,\\\"lookup-string\\\",[\\\"mainGroupDetails\\\",[22,[\\\"_objStaffshiftUsersStringsService\\\"]]],null],[22,[\\\"bLoading\\\"]],[22,[\\\"_arrHeaderActions\\\"]]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"view-edit-section-content\\\",null,[[\\\"arrData\\\"],[[22,[\\\"_arrAclGroupDetails\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[1,[26,\\\"agency-group-add-edit-popup\\\",null,[[\\\"bIsEditing\\\",\\\"bShowAddPopup\\\",\\\"objAclGroupData\\\",\\\"onPopupAddCancel\\\",\\\"onPopupAddSuccess\\\",\\\"arrStatuses\\\"],[true,[22,[\\\"_bShowAddPopup\\\"]],[22,[\\\"_objAclGroupDetails\\\"]],[26,\\\"action\\\",[[21,0,[]],[26,\\\"mut\\\",[[22,[\\\"_bShowAddPopup\\\"]]],null],false],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupSuccess\\\"],null],[22,[\\\"_arrStatuses\\\"]]]]],false]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-users/templates/components/agency-group-view-edit-card.hbs\" } });\n});","define(\"a24-ember-staffshift-users/templates/components/agency-group-view-page\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"M5uZYcdt\", \"block\": \"{\\\"symbols\\\":[],\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"agency-group-view-edit-card\\\",null,[[\\\"onTitleBarUpdate\\\"],[[26,\\\"action\\\",[[21,0,[]],\\\"onTitleBarUpdate\\\"],null]]]],false],[0,\\\"\\\\n    \\\"],[1,[20,\\\"agency-group-view-add-user-card\\\"],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-users/templates/components/agency-group-view-page.hbs\" } });\n});","define(\"a24-ember-staffshift-users/templates/components/page-agency-group-user-list\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"jlwW47Td\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objParentScroller\\\"],\\\"statements\\\":[[4,\\\"size-limit-component\\\",null,[[\\\"iMaxWidth\\\"],[8000]],{\\\"statements\\\":[[4,\\\"card-style-component\\\",null,[[\\\"bApplyDefaultPadding\\\"],[false]],{\\\"statements\\\":[[4,\\\"if\\\",[[22,[\\\"_bPageLoading\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-normal\\\"],[8],[0,\\\"\\\\n                \\\"],[1,[20,\\\"loading-component\\\"],false],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},{\\\"statements\\\":[[0,\\\"            \\\"],[1,[26,\\\"card-datagrid-container\\\",null,[[\\\"objQueryParams\\\",\\\"objDatagridConfig\\\",\\\"sUrlBase\\\",\\\"bShareableLink\\\",\\\"bAllowHiddenColumns\\\",\\\"bSwaggerServiceCalls\\\",\\\"cardDatagridTableCell\\\"],[[22,[\\\"objQueryParams\\\"]],[22,[\\\"objDatagridConfig\\\"]],[22,[\\\"sUrlBase\\\"]],true,true,true,[26,\\\"action\\\",[[21,0,[]],\\\"cardDatagridTableCell\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}]],\\\"parameters\\\":[]},null]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"bDismissible\\\",\\\"onPopupResponsiveDismiss\\\"],[[22,[\\\"_bShowAddUser\\\"]],[22,[\\\"_bAddUserPopupLoading\\\"]],false,false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupAddCancel\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"bMobileView\\\",\\\"objSpecialAction\\\"],[[26,\\\"lookup-string\\\",[\\\"addUser\\\",[22,[\\\"_objStaffshiftUsersStringsService\\\"]]],null],\\\"padding-double popup-header-gray\\\",false,[21,1,[]],[22,[\\\"_objSpecialAddPopupAction\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"_bShowAddUser\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-double\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"sValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"firstName\\\"],null],\\\"sFirstName\\\",1,true,[22,[\\\"_sInputFirstName\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"sValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"lastName\\\"],null],\\\"sLastName\\\",2,true,[22,[\\\"_sInputLastName\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"sValue\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"email\\\"],null],\\\"sEmailAddress\\\",3,true,[22,[\\\"_sInputEmail\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal padding-left-normal font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"a24RequiredFieldsMarked\\\"],null],false],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupAddCancel\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupAddConfirm\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"save\\\"],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowUnsavedData\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupUnsavedConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"unsavedData\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-users/templates/components/page-agency-group-user-list.hbs\" } });\n});","define(\"a24-ember-staffshift-users/templates/components/whitelisted-ip-addresses\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"98olrgsI\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objParentScroller\\\",\\\"objIPAddress\\\"],\\\"statements\\\":[[4,\\\"card-style-component\\\",null,[[\\\"bApplyDefaultPadding\\\"],[false]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"sHeaderSizeClass\\\",\\\"arrActionItems\\\",\\\"class\\\"],[[26,\\\"lookup-string\\\",[\\\"ipWhitelist\\\",[22,[\\\"_objUsersStringsService\\\"]]],null],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_HEADER_SIZE_LARGE\\\",[22,[\\\"_objLibConstants\\\"]]],null],[22,[\\\"_arrHeaderActions\\\"]],\\\"padding-left-normal padding-right-small padding-top-double padding-bottom-normal\\\"]]],false],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative showActionsOnCollapseHover\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\"],[[22,[\\\"bLoading\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"_arrIPAddresses\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[20,\\\"horizontal-line-component\\\"],false],[0,\\\"\\\\n            \\\"],[1,[26,\\\"accordion-item-component\\\",null,[[\\\"sHeader\\\",\\\"sHeaderClass\\\",\\\"sIconName\\\",\\\"sIconClass\\\",\\\"arrActionItems\\\"],[[21,3,[\\\"sLabel\\\"]],\\\"a24-grey-text-darken-3\\\",[21,3,[\\\"sIcon\\\"]],\\\"grey-text\\\",[21,3,[\\\"arrActions\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"no-data padding-bottom-normal\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"noData\\\"],null],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"onPopupResponsiveDismiss\\\",\\\"bDismissible\\\"],[[22,[\\\"_bShowIpAddressPopup\\\"]],[22,[\\\"_bAddEditIpAddressPopupLoading\\\"]],false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupIpAddressClose\\\"],null],false]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"objSpecialAction\\\",\\\"bMobileView\\\"],[[22,[\\\"_sPopupHeader\\\"]],\\\"padding-double popup-header-gray\\\",false,[22,[\\\"_objSpecialAddEditPopupAction\\\"]],[21,1,[]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"_bShowAddPopup\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-double\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"col-md-12\\\",[26,\\\"if\\\",[[22,[\\\"_bEditing\\\"]],\\\" display-none\\\",\\\"\\\"],null]]]],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"ipAddress\\\",[22,[\\\"_objUsersStringsService\\\"]]],null],\\\"ip\\\",1,true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-text-area\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"iOrder\\\",\\\"bRequired\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\",\\\"onErrorMessageSetAction\\\"],[[26,\\\"lookup-string\\\",[\\\"description\\\"],null],\\\"description\\\",2,true,[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onScrollTo\\\"],[[\\\"target\\\"],[[21,2,[]]]]]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal padding-left-normal font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"a24RequiredFieldsMarked\\\"],null],false],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupIpAddressClose\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupIpAddressConfirm\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"save\\\"],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"bLoading\\\",\\\"onPopupConfirmationCancel\\\",\\\"onPopupBackdropClick\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowConfirmDelete\\\"]],false,[22,[\\\"_bPopupDeleteLoading\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupDeleteClose\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupDeleteClose\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onRemoveIpAddressPopupConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"removeConfirmation\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowUnsavedData\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupUnsavedConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"unsavedData\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowDeleteWarning\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onRemoveIpAddressWarningPopupConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"deleteIpWhitelistWarning\\\",[22,[\\\"_objUsersStringsService\\\"]],[22,[\\\"_sUserIpAddress\\\"]]],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-users/templates/components/whitelisted-ip-addresses.hbs\" } });\n});","define(\"a24-ember-staffshift-users/templates/components/whitelisted-users\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"WjvEkcOX\", \"block\": \"{\\\"symbols\\\":[\\\"bMobileView\\\",\\\"objUser\\\"],\\\"statements\\\":[[4,\\\"card-style-component\\\",null,[[\\\"bApplyDefaultPadding\\\"],[false]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"sHeaderSizeClass\\\",\\\"arrActionItems\\\",\\\"class\\\"],[[26,\\\"lookup-string\\\",[\\\"userWhitelist\\\",[22,[\\\"_objUsersStringsService\\\"]]],null],[26,\\\"lookup-constant\\\",[\\\"ROUND_ICON_HEADER_SIZE_LARGE\\\",[22,[\\\"_objLibConstants\\\"]]],null],[22,[\\\"_arrHeaderActions\\\"]],\\\"padding-left-normal padding-right-small padding-top-double padding-bottom-normal\\\"]]],false],[0,\\\"\\\\n\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"position-relative showActionsOnCollapseHover\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"loader-blackout\\\",null,[[\\\"bLoading\\\"],[[22,[\\\"bLoading\\\"]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"arrUsers\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[1,[20,\\\"horizontal-line-component\\\"],false],[0,\\\"\\\\n            \\\"],[1,[26,\\\"accordion-item-component\\\",null,[[\\\"sHeader\\\",\\\"sHeaderClass\\\",\\\"sIconName\\\",\\\"sIconClass\\\",\\\"arrActionItems\\\"],[[21,2,[\\\"sLabel\\\"]],\\\"a24-grey-text-darken-3\\\",[21,2,[\\\"sIcon\\\"]],\\\"grey-text\\\",[21,2,[\\\"arrActions\\\"]]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"no-data padding-bottom-normal\\\"],[8],[1,[26,\\\"lookup-string\\\",[\\\"noData\\\"],null],false],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]}],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-responsive-modal\\\",null,[[\\\"bShowPopup\\\",\\\"bLoading\\\",\\\"bAutoClose\\\",\\\"onPopupResponsiveDismiss\\\",\\\"bDismissible\\\"],[[22,[\\\"_bShowAddUserPopup\\\"]],[22,[\\\"_bAddUserPopupLoading\\\"]],false,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupAddUserClose\\\"],null],false]],{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"round-icon-header-component\\\",null,[[\\\"sHeader\\\",\\\"classNames\\\",\\\"bHasBlock\\\",\\\"objSpecialAction\\\",\\\"bMobileView\\\"],[[26,\\\"lookup-string\\\",[\\\"addUser\\\",[22,[\\\"_objUsersStringsService\\\"]]],null],\\\"padding-double popup-header-gray\\\",false,[22,[\\\"_objSpecialAddEditPopupAction\\\"]],[21,1,[]]]]],false],[0,\\\"\\\\n\\\"],[4,\\\"shadow-scroller\\\",null,[[\\\"bPopupOpen\\\"],[[22,[\\\"_bShowAddPopup\\\"]]]],{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-double\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"row\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"col-md-12\\\"],[8],[0,\\\"\\\\n                    \\\"],[1,[26,\\\"input-form-suggest\\\",null,[[\\\"sFieldName\\\",\\\"sProperty\\\",\\\"bRequired\\\",\\\"sOptionsLabelKey\\\",\\\"iOrder\\\",\\\"funcGetSuggestions\\\",\\\"onInputValidationAdd\\\",\\\"onInputValidationRemove\\\",\\\"onAddChildValidationAction\\\",\\\"onInputValueChangedAction\\\"],[[26,\\\"lookup-string\\\",[\\\"user\\\",[22,[\\\"_objUsersStringsService\\\"]]],null],\\\"user\\\",true,\\\"sLabel\\\",1,[22,[\\\"funcGetSuggestions\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationAdd\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValidationRemove\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onAddChildValidationAction\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onInputValueChangedAction\\\"],null]]]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"padding-top-normal padding-left-normal font-sm a24-grey-text-darken-1\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"a24RequiredFieldsMarked\\\"],null],false],[6,\\\"span\\\"],[10,\\\"class\\\",\\\"a24-primary-color-text-accent font-weight-bold\\\"],[8],[0,\\\"*\\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"text-align-right padding-normal\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupAddUserClose\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],false],[9],[0,\\\"\\\\n        \\\"],[6,\\\"a\\\"],[10,\\\"class\\\",\\\"a24-flat-button waves-effect waves-dark\\\"],[3,\\\"action\\\",[[21,0,[]],\\\"onPopupAddUserConfirm\\\"]],[8],[1,[26,\\\"lookup-string\\\",[\\\"save\\\"],null],false],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"bLoading\\\",\\\"onPopupConfirmationCancel\\\",\\\"onPopupBackdropClick\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowConfirmDelete\\\"]],false,[22,[\\\"_bPopupDeleteLoading\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupDeleteClose\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onPopupDeleteClose\\\"],null],[26,\\\"action\\\",[[21,0,[]],\\\"onRemoveUserPopupConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"removeConfirmation\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowUnsavedData\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onPopupUnsavedConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string\\\",[\\\"unsavedData\\\"],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"popup-modal\\\",null,[[\\\"sConfirmButtonText\\\",\\\"sCancelButtonText\\\",\\\"bShowPopup\\\",\\\"bAutoClose\\\",\\\"onPopupConfirmationConfirm\\\"],[[26,\\\"lookup-string\\\",[\\\"confirm\\\"],null],[26,\\\"lookup-string\\\",[\\\"cancel\\\"],null],[22,[\\\"_bShowDeleteWarning\\\"]],true,[26,\\\"action\\\",[[21,0,[]],\\\"onRemoveUserAddressWarningPopupConfirm\\\"],null]]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"font-lg\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[26,\\\"lookup-string-html\\\",[\\\"deleteUserWhitelistWarning\\\",[22,[\\\"_objUsersStringsService\\\"]],[22,[\\\"_sUserDetailsToRemove\\\"]]],null],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-staffshift-users/templates/components/whitelisted-users.hbs\" } });\n});","define(\"a24-ember-title-bar/components/title-bar\", [\"exports\", \"a24-ember-title-bar/templates/components/title-bar\", \"a24-ember-window/mixins/did-render-changes-mixin\", \"a24-ember-window/mixins/a24responsive\"], function (exports, _titleBar, _didRenderChangesMixin, _a24responsive) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Component.extend(_didRenderChangesMixin.default, _a24responsive.default, {\n        /*\n         * Default values\n        */\n        layout: _titleBar.default,\n        classNames: [\"title-bar\"],\n\n        _objLibConstants: Ember.inject.service(\"a24-constants-ember-lib\"),\n        _objLibStrings: Ember.inject.service(\"a24-strings-ember-lib\"),\n        _objWindowConstants: Ember.inject.service(\"a24-constants-window\"),\n        _objNavigationService: Ember.inject.service(\"navigation\"),\n        _bShowDropdown: false,\n        _bShowMore: false,\n        _sIFrameUrl: null,\n        _sCurrentBaseRoute: \"\",\n\n        objTitleBarService: Ember.inject.service(\"title-bar\"),\n        arrTabs: null,\n\n        init: function init() {\n            this._super.apply(this, arguments);\n            this.get(\"_objNavigationService\");\n\n            var objEnv = Ember.getOwner(this).resolveRegistration(\"config:environment\");\n\n            if (a24Core.isEmpty(this.get(\"_sIFrameUrl\"))) {\n                this.set(\"_sIFrameUrl\", objEnv.sReactGatewayUrl);\n            }\n        },\n\n        arrHiddenTabs: Ember.computed(\"objTitleBarService.arrTabs.@each.bActive\", function () {\n            var arrHiddenTabs = Ember.copy(this.get(\"objTitleBarService.arrTabs\"), true);\n            if (!a24Core.isEmpty(arrHiddenTabs)) {\n                arrHiddenTabs.push({\n                    iIndex: arrHiddenTabs.length,\n                    bActive: false,\n                    sText: this.get(\"_objLibStrings\").getHTMLTokenString(\"moreWithIcon\"),\n                    bMore: true\n                });\n            }\n            Ember.run.once(this, \"_setTabsForViewMore\");\n            return arrHiddenTabs;\n        }),\n\n        _bShowReacTabs: Ember.computed(\"objTitleBarService.objReactTabsPostMessage\", function () {\n            return !a24Core.isEmpty(this.get(\"objTitleBarService.objReactTabsPostMessage\"));\n        }),\n\n        _setTabsForViewMore: function _setTabsForViewMore() {\n            if (a24Core.isEmpty(this.get(\"objTitleBarService.arrTabs\"))) {\n                this.set(\"arrTabs\", []);\n                return;\n            }\n            var arrTabs = this.get(\"objTitleBarService.arrTabs\");\n            var objCurrentHiddenItem = null;\n            var iPosition = 0;\n            var arrNewTabs = [];\n            var arrOverflowTabs = [];\n\n            var objMoreItem = this.$(\".title-bar-tabs-table-hidden table tr .title-bar-tab\").last();\n            var iScrollWidth = this.$(\".title-bar-tabs-table-hidden\").prop(\"scrollWidth\") - objMoreItem.width();\n            if (iScrollWidth > this.$(\".title-bar-tabs-table\").width()) {\n                for (var i = 0; i < arrTabs.length; i++) {\n                    objCurrentHiddenItem = this.$(\".title-bar-tabs-table-hidden table tr .title-bar-tab\").eq(i);\n                    var iCurrentHiddenItemLength = objCurrentHiddenItem.position().left + objCurrentHiddenItem.width();\n                    // Added 48 here to give it grace for the more tab as the tab might fit in barely\n                    if (iCurrentHiddenItemLength + objMoreItem.width() + 48 <= this.$(\".title-bar-tabs-table\").width()) {\n                        iPosition = i;\n                    }\n                }\n\n                arrNewTabs = arrTabs.slice(0, iPosition + 1);\n                arrOverflowTabs = arrTabs.slice(iPosition + 1);\n                var bActive = false;\n                for (var k = 0; k < arrOverflowTabs.length; k++) {\n                    if (arrOverflowTabs[k].bActive) {\n                        bActive = true;\n                        break;\n                    }\n                }\n                arrNewTabs.push({\n                    iIndex: arrNewTabs.length,\n                    bActive: bActive,\n                    sText: this.get(\"_objLibStrings\").getHTMLTokenString(\"moreWithIcon\"),\n                    bMore: true\n                });\n\n                this.set(\"_bShowMore\", true);\n\n                this.set(\"objTitleBarService.arrOverflowTabs\", arrOverflowTabs);\n            } else {\n                this.set(\"_bShowMore\", false);\n                this.set(\"_bShowDropdown\", false);\n                arrNewTabs = this.get(\"objTitleBarService.arrTabs\");\n            }\n\n            if (a24Core.isEmpty(this.get(\"arrTabs\")) && !a24Core.isEmpty(arrNewTabs)) {\n                this.set(\"arrTabs\", arrNewTabs);\n            } else {\n                var bIsSame = this._isTabsSame(this.get(\"arrTabs\"), arrNewTabs);\n                if (!bIsSame) {\n                    this.set(\"arrTabs\", arrNewTabs);\n                }\n            }\n\n            if (a24Core.isEmpty(this.get(\"arrOverflowTabs\")) && !a24Core.isEmpty(arrOverflowTabs)) {\n                this.set(\"arrOverflowTabs\", arrOverflowTabs);\n            } else if (!a24Core.isEmpty(this.get(\"arrOverflowTabs\")) && a24Core.isEmpty(arrOverflowTabs)) {\n                this.set(\"arrOverflowTabs\", arrOverflowTabs);\n            } else {\n                var bOverFlowIsSame = this._isTabsSame(this.get(\"arrOverflowTabs\"), arrOverflowTabs);\n                if (!bOverFlowIsSame) {\n                    this.set(\"arrOverflowTabs\", arrOverflowTabs);\n                }\n            }\n        },\n\n        _isTabsSame: function _isTabsSame(arrTabCurrent, arrTabNew) {\n            var bIsSame = true;\n            if (a24Core.isEmpty(arrTabCurrent) && a24Core.isEmpty(arrTabNew)) {\n                return bIsSame;\n            }\n            if (arrTabCurrent.length != arrTabNew.length) {\n                bIsSame = false;\n            } else {\n                for (var l = 0; l < arrTabCurrent.length; l++) {\n                    if (JSON.stringify(arrTabCurrent[l]) !== JSON.stringify(arrTabNew[l])) {\n                        bIsSame = false;\n                        break;\n                    }\n                }\n            }\n            return bIsSame;\n        },\n\n        _funcGetCurrentBaseRoute: function _funcGetCurrentBaseRoute() {\n            var sLongestRoute = \"\";\n            var arrRouteKeys = Object.keys(this.get(\"_objNavigationService.objRouteParams\"));\n            for (var i = 0; i < arrRouteKeys.length; i++) {\n                if (arrRouteKeys[i].length > sLongestRoute.length) {\n                    sLongestRoute = arrRouteKeys[i];\n                }\n            }\n\n            var arrRoutesPart = sLongestRoute.split(\".\");\n\n            // This works under the assumption that tabs will always be on 3rd level routes with tab route params being\n            // the 4th level.\n            // Thus the parent route of all the tabs will be the second level route.\n            if (arrRoutesPart.length === 1) {\n                return arrRoutesPart[0];\n            } else {\n                return arrRoutesPart[0] + \".\" + arrRoutesPart[1];\n            }\n        },\n\n        _observeRenderCount: Ember.observer(\"_objDidRenderService._iCountRender\", function () {\n            if (!a24Core.isEmpty(this.get(\"objTitleBarService.arrTabs\"))) {\n                Ember.run.once(this, \"_setTabsForViewMore\");\n            }\n        }),\n\n        _onRouteChange: Ember.observer(\"_objNavigationService.objRouteParams\", function () {\n            if (!a24Core.isEmpty(this.get(\"objTitleBarService.objReactTabsPostMessage\"))) {\n                if (this.get(\"_sCurrentBaseRoute\") === this._funcGetCurrentBaseRoute()) {\n                    this.set(\"objTitleBarService.objReactTabsPostMessage\", {\n                        type: \"tab_route_info\",\n                        data: Ember.copy(this.get(\"_objNavigationService.objRouteParams\"), true)\n                    });\n                } else {\n                    this.set(\"_sCurrentBaseRoute\", \"\");\n                }\n            } else {\n                this.set(\"_sCurrentBaseRoute\", \"\");\n            }\n        }),\n\n        actions: {\n            onBack: function onBack() {\n                if (!this.get(\"objTitleBarService.bBackDisabled\")) {\n                    var funcOnBack = this.get(\"objTitleBarService.onBack\");\n                    if (!a24Core.isEmpty(funcOnBack)) {\n                        funcOnBack();\n                    }\n                }\n            },\n            executeMoreDropdownAction: function executeMoreDropdownAction(objOverflowTab) {\n                this.get(\"objTitleBarService\").setCurrentSelectedTab(objOverflowTab, this.get(\"arrTabs\"));\n                this.set(\"_bShowDropdown\", false);\n            },\n            onTabClick: function onTabClick(objTab, objEvent) {\n                if (objEvent.ctrlKey || objEvent.metaKey) {\n                    //this means the user wants to open in new tab so we let the a link handle it.\n                    return;\n                }\n\n                //Always prevent default here becasue click needs to be handled manually. The a link is only there\n                //to support opening in new tab, normal click navigation should go through the navigate service and in most\n                //caseses not create browser history.\n                objEvent.preventDefault();\n\n                if (!a24Core.isEmpty(objTab.bMore) || objTab.bMore === true) {\n                    this.set(\"_bShowDropdown\", true);\n                } else {\n                    this.get(\"objTitleBarService\").setCurrentSelectedTab(objTab, this.get(\"arrTabs\"));\n                }\n            },\n            onRecieveData: function onRecieveData(objData) {\n                if (objData.type === \"component_ready\") {\n                    this.set(\"_sCurrentBaseRoute\", this._funcGetCurrentBaseRoute());\n                    this.set(\"objTitleBarService.objReactTabsPostMessage\", {\n                        type: \"tab_route_info\",\n                        data: Ember.copy(this.get(\"_objNavigationService.objRouteParams\"), true)\n                    });\n                }\n\n                // Components can observe this to handle messages from the react frame if needed\n                this.set(\"_objNavigationService.objReactTabsReceiveMessage\", objData);\n            }\n        }\n    });\n});","define(\"a24-ember-title-bar/services/title-bar\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        CLEAR_VALUE: \"CLEAR_VALUE\",\n        sTitle: null,\n        onBack: null,\n        bBackDisabled: false,\n        sRightComponent: null,\n        objRightComponentData: null,\n        onRightComponentAction: null,\n        sRightBottomComponent: null,\n        objRightBottomComponentData: null,\n        onRightBottomComponentAction: null,\n        arrTabs: null,\n        arrOverflowTabs: null,\n        funcTitleBarCallback: null,\n        objReactTabsPostMessage: null,\n        objReactTabsReceiveMessage: null,\n\n        _objPreviousActiveTab: null,\n\n        setTitleBar: function setTitleBar(sTitle, onBack, bBackDisabled, sRightComponent, objRightComponentData, onRightComponentAction, sRightBottomComponent, objRightBottomComponentData, onRightBottomComponentAction\n        // When adding new params here please add them to setTitleBarPartially as well\n        ) {\n            var _this = this;\n\n            // This is needed because the title-bar now acts like a singleton component\n            Ember.run.schedule(\"afterRender\", function () {\n                if (!a24Core.isEmpty(sTitle)) {\n                    _this.set(\"sTitle\", sTitle);\n                } else {\n                    _this.set(\"sTitle\", null);\n                }\n                if (!a24Core.isEmpty(onBack)) {\n                    _this.set(\"onBack\", onBack);\n                } else {\n                    _this.set(\"onBack\", null);\n                }\n                if (!a24Core.isEmpty(bBackDisabled)) {\n                    _this.set(\"bBackDisabled\", bBackDisabled);\n                } else {\n                    _this.set(\"bBackDisabled\", false);\n                }\n                if (!a24Core.isEmpty(sRightComponent)) {\n                    _this.set(\"sRightComponent\", sRightComponent);\n                } else {\n                    _this.set(\"sRightComponent\", null);\n                }\n                if (!a24Core.isEmpty(objRightComponentData)) {\n                    _this.set(\"objRightComponentData\", objRightComponentData);\n                } else {\n                    _this.set(\"objRightComponentData\", null);\n                }\n                if (!a24Core.isEmpty(onRightComponentAction)) {\n                    _this.set(\"onRightComponentAction\", onRightComponentAction);\n                } else {\n                    _this.set(\"onRightComponentAction\", null);\n                }\n                if (!a24Core.isEmpty(sRightBottomComponent)) {\n                    _this.set(\"sRightBottomComponent\", sRightBottomComponent);\n                } else {\n                    _this.set(\"sRightBottomComponent\", null);\n                }\n                if (!a24Core.isEmpty(objRightBottomComponentData)) {\n                    _this.set(\"objRightBottomComponentData\", objRightBottomComponentData);\n                } else {\n                    _this.set(\"objRightBottomComponentData\", null);\n                }\n                if (!a24Core.isEmpty(onRightBottomComponentAction)) {\n                    _this.set(\"onRightBottomComponentAction\", onRightBottomComponentAction);\n                } else {\n                    _this.set(\"onRightBottomComponentAction\", null);\n                }\n            });\n        },\n        setTitleBarPartially: function setTitleBarPartially(sTitle, onBack, bBackDisabled, sRightComponent, objRightComponentData, onRightComponentAction, sRightBottomComponent, objRightBottomComponentData, onRightBottomComponentAction) {\n            var _this2 = this;\n\n            // This is needed because the title-bar now acts like a singleton component\n            Ember.run.schedule(\"afterRender\", function () {\n                if (sTitle === _this2.get(\"CLEAR_VALUE\")) {\n                    _this2.set(\"sTitle\", null);\n                } else if (!a24Core.isEmpty(sTitle)) {\n                    _this2.set(\"sTitle\", sTitle);\n                }\n                if (onBack === _this2.get(\"CLEAR_VALUE\")) {\n                    _this2.set(\"onBack\", null);\n                } else if (!a24Core.isEmpty(onBack)) {\n                    _this2.set(\"onBack\", onBack);\n                }\n                if (bBackDisabled === _this2.get(\"CLEAR_VALUE\")) {\n                    _this2.set(\"bBackDisabled\", false);\n                } else if (!a24Core.isEmpty(bBackDisabled)) {\n                    _this2.set(\"bBackDisabled\", bBackDisabled);\n                }\n                if (sRightComponent === _this2.get(\"CLEAR_VALUE\")) {\n                    _this2.set(\"sRightComponent\", null);\n                } else if (!a24Core.isEmpty(sRightComponent)) {\n                    _this2.set(\"sRightComponent\", sRightComponent);\n                }\n                if (objRightComponentData === _this2.get(\"CLEAR_VALUE\")) {\n                    _this2.set(\"objRightComponentData\", null);\n                } else if (!a24Core.isEmpty(objRightComponentData)) {\n                    _this2.set(\"objRightComponentData\", objRightComponentData);\n                }\n                if (onRightComponentAction === _this2.get(\"CLEAR_VALUE\")) {\n                    _this2.set(\"onRightComponentAction\", null);\n                } else if (!a24Core.isEmpty(onRightComponentAction)) {\n                    _this2.set(\"onRightComponentAction\", onRightComponentAction);\n                }\n                if (sRightBottomComponent === _this2.get(\"CLEAR_VALUE\")) {\n                    _this2.set(\"sRightBottomComponent\", null);\n                } else if (!a24Core.isEmpty(sRightBottomComponent)) {\n                    _this2.set(\"sRightBottomComponent\", sRightBottomComponent);\n                }\n                if (objRightBottomComponentData === _this2.get(\"CLEAR_VALUE\")) {\n                    _this2.set(\"objRightBottomComponentData\", null);\n                } else if (!a24Core.isEmpty(objRightBottomComponentData)) {\n                    _this2.set(\"objRightBottomComponentData\", objRightBottomComponentData);\n                }\n                if (onRightBottomComponentAction === _this2.get(\"CLEAR_VALUE\")) {\n                    _this2.set(\"onRightBottomComponentAction\", null);\n                } else if (!a24Core.isEmpty(onRightBottomComponentAction)) {\n                    _this2.set(\"onRightBottomComponentAction\", onRightBottomComponentAction);\n                }\n            });\n        },\n\n\n        setTabItems: function setTabItems(arrTabs, funcTitleBarCallback, objReactTabsPostMessage) {\n            if (!a24Core.isEmpty(arrTabs)) {\n                this.set(\"arrTabs\", arrTabs);\n            } else {\n                this.set(\"arrTabs\", null);\n            }\n\n            if (!a24Core.isEmpty(funcTitleBarCallback)) {\n                this.set(\"funcTitleBarCallback\", funcTitleBarCallback);\n            } else {\n                this.set(\"funcTitleBarCallback\", function () {});\n            }\n\n            if (!a24Core.isEmpty(objReactTabsPostMessage)) {\n                this.set(\"objReactTabsPostMessage\", objReactTabsPostMessage);\n            } else {\n                this.set(\"objReactTabsPostMessage\", null);\n            }\n        },\n\n        setCurrentSelectedTab: function setCurrentSelectedTab(objActiveTab, arrTabs) {\n\n            if (a24Core.isEmpty(objActiveTab)) {\n                objActiveTab = this.get(\"arrTabs\").objectAt(0);\n            }\n\n            if (this.get(\"_objPreviousActiveTab\") === objActiveTab) {\n                return;\n            }\n\n            this.get(\"arrTabs\").forEach(function (objTab) {\n                Ember.set(objTab, \"bActive\", objTab === objActiveTab);\n            });\n\n            if (!a24Core.isEmpty(this.get(\"arrOverflowTabs\"))) {\n                var arrOverflowTabs = this.get(\"arrOverflowTabs\");\n                for (var i = 0; i < arrOverflowTabs.length; i++) {\n                    Ember.set(arrTabs[arrTabs.length - 1], \"bActive\", false);\n                    if (arrOverflowTabs[i] === objActiveTab) {\n                        Ember.set(arrTabs[arrTabs.length - 1], \"bActive\", true);\n                        break;\n                    }\n                }\n            }\n\n            this.set(\"_objPreviousActiveTab\", objActiveTab);\n            if (a24Core.isEmpty(objActiveTab.bMore) || objActiveTab.bMore === false) {\n                if (typeof this.get(\"funcTitleBarCallback\") === \"function\") {\n                    this.get(\"funcTitleBarCallback\")(objActiveTab);\n                }\n            }\n\n            return arrTabs;\n        }\n    });\n});","define(\"a24-ember-title-bar/templates/components/title-bar\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  exports.__esModule = true;\n  exports.default = Ember.HTMLBars.template({ \"id\": \"3ybD2OvK\", \"block\": \"{\\\"symbols\\\":[\\\"objOverflowTab\\\",\\\"objTab\\\",\\\"objTab\\\"],\\\"statements\\\":[[6,\\\"div\\\"],[10,\\\"class\\\",\\\"title-bar-wrapper\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"objTitleBarService\\\",\\\"onBack\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"title-bar-back\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"i\\\"],[11,\\\"class\\\",[27,[\\\"material-icons cursor-clickable waves-effect\\\",[26,\\\"if\\\",[[22,[\\\"objTitleBarService\\\",\\\"bBackDisabled\\\"]],\\\" disabled\\\",\\\"\\\"],null]]]],[3,\\\"action\\\",[[21,0,[]],\\\"onBack\\\"]],[8],[0,\\\"arrow_back\\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[4,\\\"if\\\",[[22,[\\\"objTitleBarService\\\",\\\"sRightComponent\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"title-bar-right-top\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"component\\\",[[22,[\\\"objTitleBarService\\\",\\\"sRightComponent\\\"]]],[[\\\"objData\\\",\\\"onAction\\\"],[[22,[\\\"objTitleBarService\\\",\\\"objRightComponentData\\\"]],[22,[\\\"objTitleBarService\\\",\\\"onRightComponentAction\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"title-bar-left\\\"],[8],[0,\\\"\\\\n        \\\"],[1,[22,[\\\"objTitleBarService\\\",\\\"sTitle\\\"]],false],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"objTitleBarService\\\",\\\"sRightBottomComponent\\\"]]],null,{\\\"statements\\\":[[0,\\\"        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"title-bar-right-bottom\\\"],[8],[0,\\\"\\\\n            \\\"],[1,[26,\\\"component\\\",[[22,[\\\"objTitleBarService\\\",\\\"sRightBottomComponent\\\"]]],[[\\\"objData\\\",\\\"onAction\\\"],[[22,[\\\"objTitleBarService\\\",\\\"objRightBottomComponentData\\\"]],[22,[\\\"objTitleBarService\\\",\\\"onRightBottomComponentAction\\\"]]]]],false],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"title-bar-clear\\\"],[8],[0,\\\" \\\"],[9],[0,\\\"\\\\n\\\"],[9],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"arrHiddenTabs\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"title-bar-tabs\\\"],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"title-bar-tabs-table-hidden\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"table\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"tr\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"arrHiddenTabs\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"td\\\"],[8],[0,\\\"\\\\n                            \\\"],[6,\\\"a\\\"],[11,\\\"href\\\",[21,3,[\\\"sLink\\\"]],null],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onTabClick\\\",[21,3,[]]],null],null],[8],[0,\\\"\\\\n                                \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"title-bar-tab waves-effect\\\",[26,\\\"if\\\",[[21,3,[\\\"bActive\\\"]],\\\" active\\\",\\\"\\\"],null]]]],[8],[0,\\\"\\\\n                                    \\\"],[1,[21,3,[\\\"sText\\\"]],false],[0,\\\"\\\\n                                \\\"],[9],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[3]},null],[0,\\\"                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"arrTabs\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"title-bar-tabs\\\",[26,\\\"if\\\",[[22,[\\\"_bShowMore\\\"]],\\\" title-bar-tabs-table-max-width\\\"],null]]]],[8],[0,\\\"\\\\n        \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"title-bar-tabs-table\\\"],[8],[0,\\\"\\\\n            \\\"],[6,\\\"table\\\"],[8],[0,\\\"\\\\n                \\\"],[6,\\\"tr\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"arrTabs\\\"]]],null,{\\\"statements\\\":[[0,\\\"                        \\\"],[6,\\\"td\\\"],[8],[0,\\\"\\\\n                            \\\"],[6,\\\"a\\\"],[11,\\\"href\\\",[21,2,[\\\"sLink\\\"]],null],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"onTabClick\\\",[21,2,[]]],null],null],[8],[0,\\\"\\\\n                                \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"title-bar-tab waves-effect\\\",[26,\\\"if\\\",[[21,2,[\\\"bActive\\\"]],[26,\\\"if\\\",[[21,2,[\\\"bMore\\\"]],\\\" active title-bar-tab-active-cursor\\\",\\\" active\\\"],null]],null],[26,\\\"if\\\",[[21,2,[\\\"bMore\\\"]],[26,\\\"if\\\",[[22,[\\\"_bShowDropdown\\\"]],\\\" hovered\\\"],null]],null]]]],[8],[0,\\\"\\\\n                                    \\\"],[1,[21,2,[\\\"sText\\\"]],false],[0,\\\"\\\\n                                \\\"],[9],[0,\\\"\\\\n                            \\\"],[9],[0,\\\"\\\\n                        \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[2]},null],[0,\\\"                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n        \\\"],[9],[0,\\\"\\\\n    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"dropdown-content\\\",null,[[\\\"bShow\\\",\\\"sAlign\\\"],[[22,[\\\"_bShowDropdown\\\"]],\\\"right\\\"]],{\\\"statements\\\":[[0,\\\"    \\\"],[6,\\\"div\\\"],[10,\\\"class\\\",\\\"title-bar-more-dropdown-content\\\"],[8],[0,\\\"\\\\n\\\"],[4,\\\"each\\\",[[22,[\\\"arrOverflowTabs\\\"]]],null,{\\\"statements\\\":[[0,\\\"            \\\"],[6,\\\"a\\\"],[11,\\\"href\\\",[21,1,[\\\"sLink\\\"]],null],[11,\\\"onclick\\\",[26,\\\"action\\\",[[21,0,[]],\\\"executeMoreDropdownAction\\\",[21,1,[]]],null],null],[8],[0,\\\"\\\\n                \\\"],[6,\\\"div\\\"],[11,\\\"class\\\",[27,[\\\"title-bar-more-dropdown-item waves-effect waves-dark\\\",[26,\\\"if\\\",[[21,1,[\\\"bActive\\\"]],\\\" active\\\",\\\"\\\"],null]]]],[8],[0,\\\"\\\\n                    \\\"],[1,[21,1,[\\\"sText\\\"]],false],[0,\\\"\\\\n                \\\"],[9],[0,\\\"\\\\n            \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[1]},null],[0,\\\"    \\\"],[9],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null],[0,\\\"\\\\n\\\"],[4,\\\"if\\\",[[22,[\\\"_bShowReacTabs\\\"]]],null,{\\\"statements\\\":[[0,\\\"    \\\"],[1,[26,\\\"react-widget\\\",null,[[\\\"class\\\",\\\"sIFrameUrl\\\",\\\"objPostIframeData\\\",\\\"onRecieveData\\\"],[\\\"title-bar-react-tabs\\\",[22,[\\\"_sIFrameUrl\\\"]],[22,[\\\"objTitleBarService\\\",\\\"objReactTabsPostMessage\\\"]],[26,\\\"action\\\",[[21,0,[]],\\\"onRecieveData\\\"],null]]]],false],[0,\\\"\\\\n\\\"]],\\\"parameters\\\":[]},null]],\\\"hasEval\\\":false}\", \"meta\": { \"moduleName\": \"a24-ember-title-bar/templates/components/title-bar.hbs\" } });\n});","define(\"a24-ember-window/breakpoints\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = {\n        tiny: \"(max-width: 300px)\",\n        mobile: \"(min-width: 301px) and (max-width: 768px)\",\n        tablet: \"(min-width: 769px) and (max-width: 992px)\",\n        desktop: \"(min-width: 993px) and (max-width: 1200px)\",\n        jumbo: \"(min-width: 1201px)\"\n    };\n});","define('a24-ember-window/initializers/responsive', ['exports', 'ember-responsive/initializers/responsive'], function (exports, _responsive) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = {\n    name: 'responsive',\n    initialize: _responsive.initialize\n  };\n});","define(\"a24-ember-window/mixins/a24responsive\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Mixin.create({\n        sScreenSize: \"\",\n        _objWindowConstants: Ember.inject.service(\"a24-constants-window\"),\n        init: function init() {\n            this._super.apply(this, arguments);\n            this._onSizeChange();\n        },\n        _onSizeChange: Ember.observer(\"media.isTiny\", \"media.isMobile\", \"media.isTablet\", \"media.isDesktop\", \"media.isJumbo\", function () {\n            if (this.get(\"media.isTiny\")) {\n                this.set(\"sScreenSize\", this.get(\"_objWindowConstants.MEDIA_SIZE_TINY\"));\n            } else if (this.get(\"media.isMobile\")) {\n                this.set(\"sScreenSize\", this.get(\"_objWindowConstants.MEDIA_SIZE_MOBILE\"));\n            } else if (this.get(\"media.isTablet\")) {\n                this.set(\"sScreenSize\", this.get(\"_objWindowConstants.MEDIA_SIZE_TABLET\"));\n            } else if (this.get(\"media.isDesktop\")) {\n                this.set(\"sScreenSize\", this.get(\"_objWindowConstants.MEDIA_SIZE_DESKTOP\"));\n            } else if (this.get(\"media.isJumbo\")) {\n                this.set(\"sScreenSize\", this.get(\"_objWindowConstants.MEDIA_SIZE_JUMBO\"));\n            }\n        })\n    });\n});","define(\"a24-ember-window/mixins/did-render-changes-mixin\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Mixin.create({\n        _objDidRenderService: Ember.inject.service(\"component-did-render\"),\n        _objDomService: Ember.inject.service(\"dom-event\"),\n        _objNavigationWithWillDestroyService: null,\n        _bCalledA24WillDestroy: false,\n        _sCurrentRouteA24WillDestroy: \"\",\n        init: function init() {\n            var _this = this;\n\n            this._super.apply(this, arguments);\n            this.get(\"_objDomService\");\n\n            window.a24DidRenderCountIncrease = function () {\n                Ember.run(function () {\n                    _this.get(\"_objDidRenderService\").countRendered();\n                });\n            };\n\n            if (this.get(\"_objNavigationWithWillDestroyService\") !== null) {\n                this.set(\"_sCurrentRouteA24WillDestroy\", this.getA24WillDestroyRoute(this.get(\"_objNavigationWithWillDestroyService.objRouteParams\")));\n\n                // This will trigger before the next route's active fires, so better place for component teardown\n                this.addObserver(\"_objNavigationWithWillDestroyService.objNewRouteParams\", this, this.get(\"_onNewRouteChange\"));\n            }\n        },\n        didRender: function didRender() {\n            this._super.apply(this, arguments);\n            this.sizeChanges();\n        },\n        willDestroyElement: function willDestroyElement() {\n            //This is for a case where a component gets removed from the page without the route changing\n            //Then we still want the a24WillDestroy to fire so that teardown can be handled.\n            if (this.get(\"_objNavigationWithWillDestroyService\") !== null && !this.get(\"_bCalledA24WillDestroy\")) {\n                this.a24WillDestroy();\n            }\n        },\n\n        sizeChanges: Ember.observer(\"_objDomService.iPageWidth\", \"_objDomService.iPageHeight\", function () {\n            this.get(\"_objDidRenderService\").countRendered();\n        }),\n\n        _getLongestRoute: function _getLongestRoute(objRouteObject) {\n            var sLongestRoute = \"\";\n            var arrRouteKeys = Object.keys(objRouteObject);\n            for (var i = 0; i < arrRouteKeys.length; i++) {\n                if (arrRouteKeys[i].length > sLongestRoute.length) {\n                    sLongestRoute = arrRouteKeys[i];\n                }\n            }\n            return sLongestRoute;\n        },\n\n        // This will trigger before the next route's active fires\n        _onNewRouteChange: function _onNewRouteChange() {\n            if (this.get(\"_sCurrentRouteA24WillDestroy\") !== this.getA24WillDestroyRoute(this.get(\"_objNavigationWithWillDestroyService.objNewRouteParams\"))) {\n                this.set(\"_bCalledA24WillDestroy\", true);\n                this.a24WillDestroy();\n            }\n        },\n\n        //This fucntion can be overridden if you want to set your own route to observe for changing.\n        //For example a component that lives on the candidate profile page does not want a24WillDestroy firing each time\n        //a tab changes, instead it will want to fire if user goes to other left menu item.\n        //Use the objRouteParams to pull your route from, since the mixin will determine which route object to pass in at\n        //what time.\n        getA24WillDestroyRoute: function getA24WillDestroyRoute(objRouteParams) {\n            return this._getLongestRoute(objRouteParams);\n        },\n        a24WillDestroy: function a24WillDestroy() {\n            //Do nothing, this function is meant to be implemented by comopnent that want to use this hook\n        }\n    });\n});","define(\"a24-ember-window/services/a24-constants-window\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n\n        // This is the only exception to the service not extending the base constant\n        // because these constants is hard coded in the js and will be used every where.\n\n        MEDIA_SIZE_TINY: \"tiny\",\n        MEDIA_SIZE_MOBILE: \"mobile\",\n        MEDIA_SIZE_TABLET: \"tablet\",\n        MEDIA_SIZE_JUMBO: \"jumbo\",\n        MEDIA_SIZE_DESKTOP: \"desktop\",\n\n        // Widths for screen sizes\n        SCREEN_SIZE_TINY_PX: 300,\n        SCREEN_SIZE_MOBILE_PX: 768,\n        SCREEN_SIZE_TABLET_PX: 992,\n        SCREEN_SIZE_DESKTOP_PX: 1200,\n        SCREEN_SIZE_JUMBO_PX: 1440,\n        SCREEN_REM_BASE: 16\n\n    });\n});","define(\"a24-ember-window/services/component-did-render\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend({\n        _iCountRender: 0,\n        incrementCounter: function incrementCounter() {\n            this.set(\"_iCountRender\", this.get(\"_iCountRender\") + 1);\n        },\n        countRendered: function countRendered() {\n            Ember.run.scheduleOnce(\"afterRender\", this, this.incrementCounter);\n        }\n    });\n});","define(\"a24-ember-window/services/dom-event\", [\"exports\"], function (exports) {\n    \"use strict\";\n\n    Object.defineProperty(exports, \"__esModule\", {\n        value: true\n    });\n    exports.default = Ember.Service.extend(Ember.Evented, {\n        iPageWidth: 0,\n        iPageHeight: 0,\n        _objTimer: null,\n        init: function init() {\n            this._super.apply(this, arguments);\n\n            var objService = this;\n            var objWindow = $(window);\n\n            this.set(\"iPageWidth\", window.innerWidth);\n            this.set(\"iPageHeight\", window.innerHeight);\n\n            objWindow.on(\"resize\", function () {\n                Ember.run.cancel(objService.get(\"_objTimer\"));\n                objService.set(\"_objTimer\", Ember.run.later(objService, function () {\n                    if (objService !== null) {\n                        objService.set(\"iPageWidth\", window.innerWidth);\n                        objService.set(\"iPageHeight\", window.innerHeight);\n                        objService.trigger(\"resize\", window.innerWidth, window.innerHeight);\n                    }\n                }, 50));\n            });\n        },\n        willDestroy: function willDestroy() {\n            this._super.apply(this, arguments);\n            Ember.run.cancel(this.get(\"_objTimer\"));\n            $(window).off(\"resize\");\n        }\n    });\n});","define('ember-ajax/-private/promise', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var _createClass = function () {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if (\"value\" in descriptor) descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n\n    return function (Constructor, protoProps, staticProps) {\n      if (protoProps) defineProperties(Constructor.prototype, protoProps);\n      if (staticProps) defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  }();\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }\n\n    return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  var _get = function get(object, property, receiver) {\n    if (object === null) object = Function.prototype;\n    var desc = Object.getOwnPropertyDescriptor(object, property);\n\n    if (desc === undefined) {\n      var parent = Object.getPrototypeOf(object);\n\n      if (parent === null) {\n        return undefined;\n      } else {\n        return get(parent, property, receiver);\n      }\n    } else if (\"value\" in desc) {\n      return desc.value;\n    } else {\n      var getter = desc.get;\n\n      if (getter === undefined) {\n        return undefined;\n      }\n\n      return getter.call(receiver);\n    }\n  };\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n    }\n\n    subClass.prototype = Object.create(superClass && superClass.prototype, {\n      constructor: {\n        value: subClass,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n    if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var AJAXPromise = function (_EmberRSVPPromise) {\n    _inherits(AJAXPromise, _EmberRSVPPromise);\n\n    function AJAXPromise() {\n      _classCallCheck(this, AJAXPromise);\n\n      return _possibleConstructorReturn(this, (AJAXPromise.__proto__ || Object.getPrototypeOf(AJAXPromise)).apply(this, arguments));\n    }\n\n    _createClass(AJAXPromise, [{\n      key: 'then',\n      value: function then() {\n        var child = _get(AJAXPromise.prototype.__proto__ || Object.getPrototypeOf(AJAXPromise.prototype), 'then', this).apply(this, arguments);\n\n        child.xhr = this.xhr;\n\n        return child;\n      }\n    }]);\n\n    return AJAXPromise;\n  }(Ember.RSVP.Promise);\n\n  exports.default = AJAXPromise;\n});","define('ember-ajax/-private/utils/get-header', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = getHeader;\n\n\n  /**\n   * Do a case-insensitive lookup of an HTTP header\n   *\n   * @function getHeader\n   * @private\n   * @param {Object} headers\n   * @param {string} name\n   * @return {string}\n   */\n  function getHeader(headers, name) {\n    if (Ember.isNone(headers) || Ember.isNone(name)) {\n      return; // ask for nothing, get nothing.\n    }\n\n    var matchedKey = Ember.A(Object.keys(headers)).find(function (key) {\n      return key.toLowerCase() === name.toLowerCase();\n    });\n\n    return headers[matchedKey];\n  }\n});","define('ember-ajax/-private/utils/is-fastboot', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  /* global FastBoot */\n  var isFastBoot = typeof FastBoot !== 'undefined';\n  exports.default = isFastBoot;\n});","define('ember-ajax/-private/utils/is-string', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = isString;\n  function isString(object) {\n    return typeof object === 'string';\n  }\n});","define('ember-ajax/-private/utils/parse-response-headers', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = parseResponseHeaders;\n\n  function _toArray(arr) {\n    return Array.isArray(arr) ? arr : Array.from(arr);\n  }\n\n  var CRLF = exports.CRLF = '\\r\\n';\n\n  function parseResponseHeaders(headersString) {\n    var headers = {};\n\n    if (!headersString) {\n      return headers;\n    }\n\n    return headersString.split(CRLF).reduce(function (hash, header) {\n      var _header$split = header.split(':'),\n          _header$split2 = _toArray(_header$split),\n          field = _header$split2[0],\n          value = _header$split2.slice(1);\n\n      field = field.trim();\n      value = value.join(':').trim();\n\n      if (value) {\n        hash[field] = value;\n      }\n\n      return hash;\n    }, headers);\n  }\n});","define('ember-ajax/-private/utils/url-helpers', ['exports', 'require', 'ember-ajax/-private/utils/is-fastboot'], function (exports, _require2, _isFastboot) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.parseURL = parseURL;\n  exports.isFullURL = isFullURL;\n  exports.haveSameHost = haveSameHost;\n  /* eslint-env browser, node */\n\n  var completeUrlRegex = /^(http|https)/;\n\n  /*\n   * Isomorphic URL parsing\n   * Borrowed from\n   * http://www.sitepoint.com/url-parsing-isomorphic-javascript/\n   */\n  var isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n  var url = function () {\n    if (_isFastboot.default) {\n      // ember-fastboot-server provides the node url module as URL global\n      return URL;\n    }\n\n    if (isNode) {\n      return (0, _require2.default)('url');\n    }\n\n    return document.createElement('a');\n  }();\n\n  /**\n   * Parse a URL string into an object that defines its structure\n   *\n   * The returned object will have the following properties:\n   *\n   *   href: the full URL\n   *   protocol: the request protocol\n   *   hostname: the target for the request\n   *   port: the port for the request\n   *   pathname: any URL after the host\n   *   search: query parameters\n   *   hash: the URL hash\n   *\n   * @function parseURL\n   * @private\n   * @param {string} str The string to parse\n   * @return {Object} URL structure\n   */\n  function parseURL(str) {\n    var fullObject = void 0;\n\n    if (isNode || _isFastboot.default) {\n      fullObject = url.parse(str);\n    } else {\n      url.href = str;\n      fullObject = url;\n    }\n\n    var desiredProps = {};\n    desiredProps.href = fullObject.href;\n    desiredProps.protocol = fullObject.protocol;\n    desiredProps.hostname = fullObject.hostname;\n    desiredProps.port = fullObject.port;\n    desiredProps.pathname = fullObject.pathname;\n    desiredProps.search = fullObject.search;\n    desiredProps.hash = fullObject.hash;\n    return desiredProps;\n  }\n\n  function isFullURL(url) {\n    return url.match(completeUrlRegex);\n  }\n\n  function haveSameHost(a, b) {\n    a = parseURL(a);\n    b = parseURL(b);\n\n    return a.protocol === b.protocol && a.hostname === b.hostname && a.port === b.port;\n  }\n});","define('ember-ajax/ajax-request', ['exports', 'ember-ajax/mixins/ajax-request'], function (exports, _ajaxRequest) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Object.extend(_ajaxRequest.default);\n});","define('ember-ajax/errors', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.AjaxError = AjaxError;\n  exports.InvalidError = InvalidError;\n  exports.UnauthorizedError = UnauthorizedError;\n  exports.ForbiddenError = ForbiddenError;\n  exports.BadRequestError = BadRequestError;\n  exports.NotFoundError = NotFoundError;\n  exports.TimeoutError = TimeoutError;\n  exports.AbortError = AbortError;\n  exports.ConflictError = ConflictError;\n  exports.ServerError = ServerError;\n  exports.isAjaxError = isAjaxError;\n  exports.isUnauthorizedError = isUnauthorizedError;\n  exports.isForbiddenError = isForbiddenError;\n  exports.isInvalidError = isInvalidError;\n  exports.isBadRequestError = isBadRequestError;\n  exports.isNotFoundError = isNotFoundError;\n  exports.isTimeoutError = isTimeoutError;\n  exports.isAbortError = isAbortError;\n  exports.isConflictError = isConflictError;\n  exports.isServerError = isServerError;\n  exports.isSuccess = isSuccess;\n\n\n  /**\n   * @class AjaxError\n   * @public\n   * @extends Ember.Error\n   */\n  function AjaxError(payload) {\n    var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Ajax operation failed';\n    var status = arguments[2];\n\n    Ember.Error.call(this, message);\n\n    this.payload = payload;\n    this.status = status;\n  }\n\n  AjaxError.prototype = Object.create(Ember.Error.prototype);\n\n  /**\n   * @class InvalidError\n   * @public\n   * @extends AjaxError\n   */\n  function InvalidError(payload) {\n    AjaxError.call(this, payload, 'Request was rejected because it was invalid', 422);\n  }\n\n  InvalidError.prototype = Object.create(AjaxError.prototype);\n\n  /**\n   * @class UnauthorizedError\n   * @public\n   * @extends AjaxError\n   */\n  function UnauthorizedError(payload) {\n    AjaxError.call(this, payload, 'Ajax authorization failed', 401);\n  }\n\n  UnauthorizedError.prototype = Object.create(AjaxError.prototype);\n\n  /**\n   * @class ForbiddenError\n   * @public\n   * @extends AjaxError\n   */\n  function ForbiddenError(payload) {\n    AjaxError.call(this, payload, 'Request was rejected because user is not permitted to perform this operation.', 403);\n  }\n\n  ForbiddenError.prototype = Object.create(AjaxError.prototype);\n\n  /**\n   * @class BadRequestError\n   * @public\n   * @extends AjaxError\n   */\n  function BadRequestError(payload) {\n    AjaxError.call(this, payload, 'Request was formatted incorrectly.', 400);\n  }\n\n  BadRequestError.prototype = Object.create(AjaxError.prototype);\n\n  /**\n   * @class NotFoundError\n   * @public\n   * @extends AjaxError\n   */\n  function NotFoundError(payload) {\n    AjaxError.call(this, payload, 'Resource was not found.', 404);\n  }\n\n  NotFoundError.prototype = Object.create(AjaxError.prototype);\n\n  /**\n   * @class TimeoutError\n   * @public\n   * @extends AjaxError\n   */\n  function TimeoutError() {\n    AjaxError.call(this, null, 'The ajax operation timed out', -1);\n  }\n\n  TimeoutError.prototype = Object.create(AjaxError.prototype);\n\n  /**\n   * @class AbortError\n   * @public\n   * @extends AjaxError\n   */\n  function AbortError() {\n    AjaxError.call(this, null, 'The ajax operation was aborted', 0);\n  }\n\n  AbortError.prototype = Object.create(AjaxError.prototype);\n\n  /**\n   * @class ConflictError\n   * @public\n   * @extends AjaxError\n   */\n  function ConflictError(payload) {\n    AjaxError.call(this, payload, 'The ajax operation failed due to a conflict', 409);\n  }\n\n  ConflictError.prototype = Object.create(AjaxError.prototype);\n\n  /**\n   * @class ServerError\n   * @public\n   * @extends AjaxError\n   */\n  function ServerError(payload, status) {\n    AjaxError.call(this, payload, 'Request was rejected due to server error', status);\n  }\n\n  ServerError.prototype = Object.create(AjaxError.prototype);\n\n  /**\n   * Checks if the given error is or inherits from AjaxError\n   *\n   * @method isAjaxError\n   * @public\n   * @param  {Error} error\n   * @return {Boolean}\n   */\n  function isAjaxError(error) {\n    return error instanceof AjaxError;\n  }\n\n  /**\n   * Checks if the given status code or AjaxError object represents an\n   * unauthorized request error\n   *\n   * @method isUnauthorizedError\n   * @public\n   * @param  {Number | AjaxError} error\n   * @return {Boolean}\n   */\n  function isUnauthorizedError(error) {\n    if (isAjaxError(error)) {\n      return error instanceof UnauthorizedError;\n    } else {\n      return error === 401;\n    }\n  }\n\n  /**\n   * Checks if the given status code or AjaxError object represents a forbidden\n   * request error\n   *\n   * @method isForbiddenError\n   * @public\n   * @param  {Number | AjaxError} error\n   * @return {Boolean}\n   */\n  function isForbiddenError(error) {\n    if (isAjaxError(error)) {\n      return error instanceof ForbiddenError;\n    } else {\n      return error === 403;\n    }\n  }\n\n  /**\n   * Checks if the given status code or AjaxError object represents an invalid\n   * request error\n   *\n   * @method isInvalidError\n   * @public\n   * @param  {Number | AjaxError} error\n   * @return {Boolean}\n   */\n  function isInvalidError(error) {\n    if (isAjaxError(error)) {\n      return error instanceof InvalidError;\n    } else {\n      return error === 422;\n    }\n  }\n\n  /**\n   * Checks if the given status code or AjaxError object represents a bad request\n   * error\n   *\n   * @method isBadRequestError\n   * @public\n   * @param  {Number | AjaxError} error\n   * @return {Boolean}\n   */\n  function isBadRequestError(error) {\n    if (isAjaxError(error)) {\n      return error instanceof BadRequestError;\n    } else {\n      return error === 400;\n    }\n  }\n\n  /**\n   * Checks if the given status code or AjaxError object represents a\n   * \"not found\" error\n   *\n   * @method isNotFoundError\n   * @public\n   * @param  {Number | AjaxError} error\n   * @return {Boolean}\n   */\n  function isNotFoundError(error) {\n    if (isAjaxError(error)) {\n      return error instanceof NotFoundError;\n    } else {\n      return error === 404;\n    }\n  }\n\n  /**\n   * Checks if the given status code or AjaxError object represents a\n   * \"timeout\" error\n   *\n   * @method isTimeoutError\n   * @public\n   * @param  {AjaxError} error\n   * @return {Boolean}\n   */\n  function isTimeoutError(error) {\n    return error instanceof TimeoutError;\n  }\n\n  /**\n   * Checks if the given status code or AjaxError object represents an\n   * \"abort\" error\n   *\n   * @method isAbortError\n   * @public\n   * @param  {AjaxError} error\n   * @return {Boolean}\n   */\n  function isAbortError(error) {\n    if (isAjaxError(error)) {\n      return error instanceof AbortError;\n    } else {\n      return error === 0;\n    }\n  }\n\n  /**\n   * Checks if the given status code or AjaxError object represents a\n   * conflict error\n   *\n   * @method isConflictError\n   * @public\n   * @param  {Number | AjaxError} error\n   * @return {Boolean}\n   */\n  function isConflictError(error) {\n    if (isAjaxError(error)) {\n      return error instanceof ConflictError;\n    } else {\n      return error === 409;\n    }\n  }\n\n  /**\n   * Checks if the given status code or AjaxError object represents a server error\n   *\n   * @method isServerError\n   * @public\n   * @param  {Number | AjaxError} error\n   * @return {Boolean}\n   */\n  function isServerError(error) {\n    if (isAjaxError(error)) {\n      return error instanceof ServerError;\n    } else {\n      return error >= 500 && error < 600;\n    }\n  }\n\n  /**\n   * Checks if the given status code represents a successful request\n   *\n   * @method isSuccess\n   * @public\n   * @param  {Number} status\n   * @return {Boolean}\n   */\n  function isSuccess(status) {\n    var s = parseInt(status, 10);\n\n    return s >= 200 && s < 300 || s === 304;\n  }\n});","define('ember-ajax/index', ['exports', 'ember-ajax/request'], function (exports, _request) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _request.default;\n    }\n  });\n});","define('ember-ajax/mixins/ajax-request', ['exports', 'ember-ajax/errors', 'ember-ajax/utils/ajax', 'ember-ajax/-private/utils/parse-response-headers', 'ember-ajax/-private/utils/get-header', 'ember-ajax/-private/utils/url-helpers', 'ember-ajax/-private/utils/is-string', 'ember-ajax/-private/promise'], function (exports, _errors, _ajax, _parseResponseHeaders, _getHeader, _urlHelpers, _isString, _promise) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n  var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n    return typeof obj;\n  } : function (obj) {\n    return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n  };\n\n  var Logger = Ember.Logger,\n      Test = Ember.Test,\n      testing = Ember.testing;\n\n  var JSONContentType = /^application\\/(?:vnd\\.api\\+)?json/i;\n\n  function isJSONContentType(header) {\n    if (!(0, _isString.default)(header)) {\n      return false;\n    }\n    return !!header.match(JSONContentType);\n  }\n\n  function isJSONStringifyable(method, _ref) {\n    var contentType = _ref.contentType,\n        data = _ref.data,\n        headers = _ref.headers;\n\n    if (method === 'GET') {\n      return false;\n    }\n\n    if (!isJSONContentType(contentType) && !isJSONContentType((0, _getHeader.default)(headers, 'Content-Type'))) {\n      return false;\n    }\n\n    if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) !== 'object') {\n      return false;\n    }\n\n    return true;\n  }\n\n  function startsWithSlash(string) {\n    return string.charAt(0) === '/';\n  }\n\n  function endsWithSlash(string) {\n    return string.charAt(string.length - 1) === '/';\n  }\n\n  function removeLeadingSlash(string) {\n    return string.substring(1);\n  }\n\n  function stripSlashes(path) {\n    // make sure path starts with `/`\n    if (startsWithSlash(path)) {\n      path = removeLeadingSlash(path);\n    }\n\n    // remove end `/`\n    if (endsWithSlash(path)) {\n      path = path.slice(0, -1);\n    }\n    return path;\n  }\n\n  var pendingRequestCount = 0;\n  if (testing) {\n    Test.registerWaiter(function () {\n      return pendingRequestCount === 0;\n    });\n  }\n\n  /**\n   * AjaxRequest Mixin\n   *\n   * @public\n   * @mixin\n   */\n  exports.default = Ember.Mixin.create({\n    /**\n     * The default value for the request `contentType`\n     *\n     * For now, defaults to the same value that jQuery would assign.  In the\n     * future, the default value will be for JSON requests.\n     * @property {string} contentType\n     * @public\n     * @default\n     */\n    contentType: 'application/x-www-form-urlencoded; charset=UTF-8',\n\n    /**\n     * Headers to include on the request\n     *\n     * Some APIs require HTTP headers, e.g. to provide an API key. Arbitrary\n     * headers can be set as key/value pairs on the `RESTAdapter`'s `headers`\n     * object and Ember Data will send them along with each ajax request.\n     *\n     * ```javascript\n     * // app/services/ajax.js\n     * import AjaxService from 'ember-ajax/services/ajax';\n     *\n     * export default AjaxService.extend({\n     *   headers: {\n     *     'API_KEY': 'secret key',\n     *     'ANOTHER_HEADER': 'Some header value'\n     *   }\n     * });\n     * ```\n     *\n     * `headers` can also be used as a computed property to support dynamic\n     * headers.\n     *\n     * ```javascript\n     * // app/services/ajax.js\n     * import Ember from 'ember';\n     * import AjaxService from 'ember-ajax/services/ajax';\n     *\n     * const {\n     *   computed,\n     *   get,\n     *   inject: { service }\n     * } = Ember;\n     *\n     * export default AjaxService.extend({\n     *   session: service(),\n     *   headers: computed('session.authToken', function() {\n     *     return {\n     *       'API_KEY': get(this, 'session.authToken'),\n     *       'ANOTHER_HEADER': 'Some header value'\n     *     };\n     *   })\n     * });\n     * ```\n     *\n     * In some cases, your dynamic headers may require data from some object\n     * outside of Ember's observer system (for example `document.cookie`). You\n     * can use the `volatile` function to set the property into a non-cached mode\n     * causing the headers to be recomputed with every request.\n     *\n     * ```javascript\n     * // app/services/ajax.js\n     * import Ember from 'ember';\n     * import AjaxService from 'ember-ajax/services/ajax';\n     *\n     * const {\n     *   computed,\n     *   get,\n     *   inject: { service }\n     * } = Ember;\n     *\n     * export default AjaxService.extend({\n     *   session: service(),\n     *   headers: computed('session.authToken', function() {\n     *     return {\n     *       'API_KEY': get(document.cookie.match(/apiKey\\=([^;]*)/), '1'),\n     *       'ANOTHER_HEADER': 'Some header value'\n     *     };\n     *   }).volatile()\n     * });\n     * ```\n     *\n     * @property {Object} headers\n     * @public\n     * @default\n     */\n    headers: {},\n\n    /**\n     * Make an AJAX request, ignoring the raw XHR object and dealing only with\n     * the response\n     *\n     * @method request\n     * @public\n     * @param {string} url The url to make a request to\n     * @param {Object} options The options for the request\n     * @return {Promise} The result of the request\n     */\n    request: function request(url, options) {\n      var hash = this.options(url, options);\n      var internalPromise = this._makeRequest(hash);\n\n      var ajaxPromise = new _promise.default(function (resolve, reject) {\n        internalPromise.then(function (_ref2) {\n          var response = _ref2.response;\n\n          resolve(response);\n        }).catch(function (_ref3) {\n          var response = _ref3.response;\n\n          reject(response);\n        });\n      }, 'ember-ajax: ' + hash.type + ' ' + hash.url + ' response');\n\n      ajaxPromise.xhr = internalPromise.xhr;\n\n      return ajaxPromise;\n    },\n\n\n    /**\n     * Make an AJAX request, returning the raw XHR object along with the response\n     *\n     * @method raw\n     * @public\n     * @param {string} url The url to make a request to\n     * @param {Object} options The options for the request\n     * @return {Promise} The result of the request\n     */\n    raw: function raw(url, options) {\n      var hash = this.options(url, options);\n      return this._makeRequest(hash);\n    },\n\n\n    /**\n     * Shared method to actually make an AJAX request\n     *\n     * @method _makeRequest\n     * @private\n     * @param {Object} hash The options for the request\n     * @param {string} hash.url The URL to make the request to\n     * @return {Promise} The result of the request\n     */\n    _makeRequest: function _makeRequest(hash) {\n      var _this = this;\n\n      var method = hash.method || hash.type || 'GET';\n      var requestData = { method: method, type: method, url: hash.url };\n\n      if (isJSONStringifyable(method, hash)) {\n        hash.data = JSON.stringify(hash.data);\n      }\n\n      pendingRequestCount = pendingRequestCount + 1;\n\n      var jqXHR = (0, _ajax.default)(hash);\n\n      var promise = new _promise.default(function (resolve, reject) {\n        jqXHR.done(function (payload, textStatus, jqXHR) {\n          var response = _this.handleResponse(jqXHR.status, (0, _parseResponseHeaders.default)(jqXHR.getAllResponseHeaders()), payload, requestData);\n\n          if ((0, _errors.isAjaxError)(response)) {\n            Ember.run.join(null, reject, { payload: payload, textStatus: textStatus, jqXHR: jqXHR, response: response });\n          } else {\n            Ember.run.join(null, resolve, { payload: payload, textStatus: textStatus, jqXHR: jqXHR, response: response });\n          }\n        }).fail(function (jqXHR, textStatus, errorThrown) {\n          Ember.runInDebug(function () {\n            var message = 'The server returned an empty string for ' + requestData.type + ' ' + requestData.url + ', which cannot be parsed into a valid JSON. Return either null or {}.';\n            var validJSONString = !(textStatus === 'parsererror' && jqXHR.responseText === '');\n\n            (true && Ember.warn(message, validJSONString, {\n              id: 'ds.adapter.returned-empty-string-as-JSON'\n            }));\n          });\n\n          var payload = _this.parseErrorResponse(jqXHR.responseText) || errorThrown;\n          var response = void 0;\n\n          if (errorThrown instanceof Error) {\n            response = errorThrown;\n          } else if (textStatus === 'timeout') {\n            response = new _errors.TimeoutError();\n          } else if (textStatus === 'abort') {\n            response = new _errors.AbortError();\n          } else {\n            response = _this.handleResponse(jqXHR.status, (0, _parseResponseHeaders.default)(jqXHR.getAllResponseHeaders()), payload, requestData);\n          }\n\n          Ember.run.join(null, reject, { payload: payload, textStatus: textStatus, jqXHR: jqXHR, errorThrown: errorThrown, response: response });\n        }).always(function () {\n          pendingRequestCount = pendingRequestCount - 1;\n        });\n      }, 'ember-ajax: ' + hash.type + ' ' + hash.url);\n\n      promise.xhr = jqXHR;\n\n      return promise;\n    },\n\n\n    /**\n     * calls `request()` but forces `options.type` to `POST`\n     *\n     * @method post\n     * @public\n     * @param {string} url The url to make a request to\n     * @param {Object} options The options for the request\n     * @return {Promise} The result of the request\n     */\n    post: function post(url, options) {\n      return this.request(url, this._addTypeToOptionsFor(options, 'POST'));\n    },\n\n\n    /**\n     * calls `request()` but forces `options.type` to `PUT`\n     *\n     * @method put\n     * @public\n     * @param {string} url The url to make a request to\n     * @param {Object} options The options for the request\n     * @return {Promise} The result of the request\n     */\n    put: function put(url, options) {\n      return this.request(url, this._addTypeToOptionsFor(options, 'PUT'));\n    },\n\n\n    /**\n     * calls `request()` but forces `options.type` to `PATCH`\n     *\n     * @method patch\n     * @public\n     * @param {string} url The url to make a request to\n     * @param {Object} options The options for the request\n     * @return {Promise} The result of the request\n     */\n    patch: function patch(url, options) {\n      return this.request(url, this._addTypeToOptionsFor(options, 'PATCH'));\n    },\n\n\n    /**\n     * calls `request()` but forces `options.type` to `DELETE`\n     *\n     * @method del\n     * @public\n     * @param {string} url The url to make a request to\n     * @param {Object} options The options for the request\n     * @return {Promise} The result of the request\n     */\n    del: function del(url, options) {\n      return this.request(url, this._addTypeToOptionsFor(options, 'DELETE'));\n    },\n\n\n    /**\n     * calls `request()` but forces `options.type` to `DELETE`\n     *\n     * Alias for `del()`\n     *\n     * @method delete\n     * @public\n     * @param {string} url The url to make a request to\n     * @param {Object} options The options for the request\n     * @return {Promise} The result of the request\n     */\n    delete: function _delete() {\n      return this.del.apply(this, arguments);\n    },\n\n\n    /**\n     * Wrap the `.get` method so that we issue a warning if\n     *\n     * Since `.get` is both an AJAX pattern _and_ an Ember pattern, we want to try\n     * to warn users when they try using `.get` to make a request\n     *\n     * @method get\n     * @public\n     */\n    get: function get(url) {\n      if (arguments.length > 1 || url.indexOf('/') !== -1) {\n        throw new Ember.Error('It seems you tried to use `.get` to make a request! Use the `.request` method instead.');\n      }\n      return this._super.apply(this, arguments);\n    },\n\n\n    /**\n     * Manipulates the options hash to include the HTTP method on the type key\n     *\n     * @method _addTypeToOptionsFor\n     * @private\n     * @param {Object} options The original request options\n     * @param {string} method The method to enforce\n     * @return {Object} The new options, with the method set\n     */\n    _addTypeToOptionsFor: function _addTypeToOptionsFor(options, method) {\n      options = options || {};\n      options.type = method;\n      return options;\n    },\n\n\n    /**\n     * Get the full \"headers\" hash, combining the service-defined headers with\n     * the ones provided for the request\n     *\n     * @method _getFullHeadersHash\n     * @private\n     * @param {Object} headers\n     * @return {Object}\n     */\n    _getFullHeadersHash: function _getFullHeadersHash(headers) {\n      var classHeaders = Ember.get(this, 'headers');\n      var _headers = Ember.merge({}, classHeaders);\n      return Ember.merge(_headers, headers);\n    },\n\n\n    /**\n     * @method options\n     * @private\n     * @param {string} url\n     * @param {Object} options\n     * @return {Object}\n     */\n    options: function options(url) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      options = Ember.merge({}, options);\n      options.url = this._buildURL(url, options);\n      options.type = options.type || 'GET';\n      options.dataType = options.dataType || 'json';\n      options.contentType = Ember.isEmpty(options.contentType) ? Ember.get(this, 'contentType') : options.contentType;\n\n      if (this._shouldSendHeaders(options)) {\n        options.headers = this._getFullHeadersHash(options.headers);\n      } else {\n        options.headers = options.headers || {};\n      }\n\n      return options;\n    },\n\n\n    /**\n     * Build a URL for a request\n     *\n     * If the provided `url` is deemed to be a complete URL, it will be returned\n     * directly.  If it is not complete, then the segment provided will be combined\n     * with the `host` and `namespace` options of the request class to create the\n     * full URL.\n     *\n     * @private\n     * @param {string} url the url, or url segment, to request\n     * @param {Object} [options={}] the options for the request being made\n     * @param {string} [options.host] the host to use for this request\n     * @returns {string} the URL to make a request to\n     */\n    _buildURL: function _buildURL(url) {\n      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      if ((0, _urlHelpers.isFullURL)(url)) {\n        return url;\n      }\n\n      var urlParts = [];\n\n      var host = options.host || Ember.get(this, 'host');\n      if (host) {\n        host = stripSlashes(host);\n      }\n      urlParts.push(host);\n\n      var namespace = options.namespace || Ember.get(this, 'namespace');\n      if (namespace) {\n        namespace = stripSlashes(namespace);\n        urlParts.push(namespace);\n      }\n\n      // If the URL has already been constructed (presumably, by Ember Data), then we should just leave it alone\n      var hasNamespaceRegex = new RegExp('^(/)?' + namespace);\n      if (hasNamespaceRegex.test(url)) {\n        return url;\n      }\n\n      // *Only* remove a leading slash -- we need to maintain a trailing slash for\n      // APIs that differentiate between it being and not being present\n      if (startsWithSlash(url)) {\n        url = removeLeadingSlash(url);\n      }\n      urlParts.push(url);\n\n      return urlParts.join('/');\n    },\n\n\n    /**\n     * Takes an ajax response, and returns the json payload or an error.\n     *\n     * By default this hook just returns the json payload passed to it.\n     * You might want to override it in two cases:\n     *\n     * 1. Your API might return useful results in the response headers.\n     *    Response headers are passed in as the second argument.\n     *\n     * 2. Your API might return errors as successful responses with status code\n     *    200 and an Errors text or object.\n     *\n     * @method handleResponse\n     * @private\n     * @param  {Number} status\n     * @param  {Object} headers\n     * @param  {Object} payload\n     * @param  {Object} requestData the original request information\n     * @return {Object | AjaxError} response\n     */\n    handleResponse: function handleResponse(status, headers, payload, requestData) {\n      if (this.isSuccess(status, headers, payload)) {\n        return payload;\n      }\n\n      // Allow overriding of error payload\n      payload = this.normalizeErrorResponse(status, headers, payload);\n\n      return this._createCorrectError(status, headers, payload, requestData);\n    },\n    _createCorrectError: function _createCorrectError(status, headers, payload, requestData) {\n      var error = void 0;\n\n      if (this.isUnauthorizedError(status, headers, payload)) {\n        error = new _errors.UnauthorizedError(payload);\n      } else if (this.isForbiddenError(status, headers, payload)) {\n        error = new _errors.ForbiddenError(payload);\n      } else if (this.isInvalidError(status, headers, payload)) {\n        error = new _errors.InvalidError(payload);\n      } else if (this.isBadRequestError(status, headers, payload)) {\n        error = new _errors.BadRequestError(payload);\n      } else if (this.isNotFoundError(status, headers, payload)) {\n        error = new _errors.NotFoundError(payload);\n      } else if (this.isAbortError(status, headers, payload)) {\n        error = new _errors.AbortError(payload);\n      } else if (this.isConflictError(status, headers, payload)) {\n        error = new _errors.ConflictError(payload);\n      } else if (this.isServerError(status, headers, payload)) {\n        error = new _errors.ServerError(payload, status);\n      } else {\n        var detailedMessage = this.generateDetailedMessage(status, headers, payload, requestData);\n\n        error = new _errors.AjaxError(payload, detailedMessage, status);\n      }\n\n      return error;\n    },\n\n\n    /**\n     * Match the host to a provided array of strings or regexes that can match to a host\n     *\n     * @method matchHosts\n     * @private\n     * @param {string} host the host you are sending too\n     * @param {RegExp | string} matcher a string or regex that you can match the host to.\n     * @returns {Boolean} if the host passed the matcher\n     */\n    _matchHosts: function _matchHosts(host, matcher) {\n      if (matcher.constructor === RegExp) {\n        return matcher.test(host);\n      } else if (typeof matcher === 'string') {\n        return matcher === host;\n      } else {\n        Logger.warn('trustedHosts only handles strings or regexes.', matcher, 'is neither.');\n        return false;\n      }\n    },\n\n\n    /**\n     * Determine whether the headers should be added for this request\n     *\n     * This hook is used to help prevent sending headers to every host, regardless\n     * of the destination, since this could be a security issue if authentication\n     * tokens are accidentally leaked to third parties.\n     *\n     * To avoid that problem, subclasses should utilize the `headers` computed\n     * property to prevent authentication from being sent to third parties, or\n     * implement this hook for more fine-grain control over when headers are sent.\n     *\n     * By default, the headers are sent if the host of the request matches the\n     * `host` property designated on the class.\n     *\n     * @method _shouldSendHeaders\n     * @private\n     * @property {Object} hash request options hash\n     * @returns {Boolean} whether or not headers should be sent\n     */\n    _shouldSendHeaders: function _shouldSendHeaders(_ref4) {\n      var _this2 = this;\n\n      var url = _ref4.url,\n          host = _ref4.host;\n\n      url = url || '';\n      host = host || Ember.get(this, 'host') || '';\n\n      var trustedHosts = Ember.get(this, 'trustedHosts') || Ember.A();\n\n      var _parseURL = (0, _urlHelpers.parseURL)(url),\n          hostname = _parseURL.hostname;\n\n      // Add headers on relative URLs\n\n\n      if (!(0, _urlHelpers.isFullURL)(url)) {\n        return true;\n      } else if (trustedHosts.find(function (matcher) {\n        return _this2._matchHosts(hostname, matcher);\n      })) {\n        return true;\n      }\n\n      // Add headers on matching host\n      return (0, _urlHelpers.haveSameHost)(url, host);\n    },\n\n\n    /**\n     * Generates a detailed (\"friendly\") error message, with plenty\n     * of information for debugging (good luck!)\n     *\n     * @method generateDetailedMessage\n     * @private\n     * @param  {Number} status\n     * @param  {Object} headers\n     * @param  {Object} payload\n     * @param  {Object} requestData the original request information\n     * @return {Object} request information\n     */\n    generateDetailedMessage: function generateDetailedMessage(status, headers, payload, requestData) {\n      var shortenedPayload = void 0;\n      var payloadContentType = (0, _getHeader.default)(headers, 'Content-Type') || 'Empty Content-Type';\n\n      if (payloadContentType.toLowerCase() === 'text/html' && payload.length > 250) {\n        shortenedPayload = '[Omitted Lengthy HTML]';\n      } else {\n        shortenedPayload = JSON.stringify(payload);\n      }\n\n      var requestDescription = requestData.type + ' ' + requestData.url;\n      var payloadDescription = 'Payload (' + payloadContentType + ')';\n\n      return ['Ember AJAX Request ' + requestDescription + ' returned a ' + status, payloadDescription, shortenedPayload].join('\\n');\n    },\n\n\n    /**\n     * Default `handleResponse` implementation uses this hook to decide if the\n     * response is a an authorized error.\n     *\n     * @method isUnauthorizedError\n     * @private\n     * @param {Number} status\n     * @param {Object} headers\n     * @param {Object} payload\n     * @return {Boolean}\n     */\n    isUnauthorizedError: function isUnauthorizedError(status) {\n      return (0, _errors.isUnauthorizedError)(status);\n    },\n\n\n    /**\n     * Default `handleResponse` implementation uses this hook to decide if the\n     * response is a forbidden error.\n     *\n     * @method isForbiddenError\n     * @private\n     * @param {Number} status\n     * @param {Object} headers\n     * @param {Object} payload\n     * @return {Boolean}\n     */\n    isForbiddenError: function isForbiddenError(status) {\n      return (0, _errors.isForbiddenError)(status);\n    },\n\n\n    /**\n     * Default `handleResponse` implementation uses this hook to decide if the\n     * response is a an invalid error.\n     *\n     * @method isInvalidError\n     * @private\n     * @param {Number} status\n     * @param {Object} headers\n     * @param {Object} payload\n     * @return {Boolean}\n     */\n    isInvalidError: function isInvalidError(status) {\n      return (0, _errors.isInvalidError)(status);\n    },\n\n\n    /**\n     * Default `handleResponse` implementation uses this hook to decide if the\n     * response is a bad request error.\n     *\n     * @method isBadRequestError\n     * @private\n     * @param {Number} status\n     * @param {Object} headers\n     * @param {Object} payload\n     * @return {Boolean}\n     */\n    isBadRequestError: function isBadRequestError(status) {\n      return (0, _errors.isBadRequestError)(status);\n    },\n\n\n    /**\n     * Default `handleResponse` implementation uses this hook to decide if the\n     * response is a \"not found\" error.\n     *\n     * @method isNotFoundError\n     * @private\n     * @param {Number} status\n     * @param {Object} headers\n     * @param {Object} payload\n     * @return {Boolean}\n     */\n    isNotFoundError: function isNotFoundError(status) {\n      return (0, _errors.isNotFoundError)(status);\n    },\n\n\n    /**\n     * Default `handleResponse` implementation uses this hook to decide if the\n     * response is an \"abort\" error.\n     *\n     * @method isAbortError\n     * @private\n     * @param {Number} status\n     * @param {Object} headers\n     * @param {Object} payload\n     * @return {Boolean}\n     */\n    isAbortError: function isAbortError(status) {\n      return (0, _errors.isAbortError)(status);\n    },\n\n\n    /**\n     * Default `handleResponse` implementation uses this hook to decide if the\n     * response is a \"conflict\" error.\n     *\n     * @method isConflictError\n     * @private\n     * @param {Number} status\n     * @param {Object} headers\n     * @param {Object} payload\n     * @return {Boolean}\n     */\n    isConflictError: function isConflictError(status) {\n      return (0, _errors.isConflictError)(status);\n    },\n\n\n    /**\n     * Default `handleResponse` implementation uses this hook to decide if the\n     * response is a server error.\n     *\n     * @method isServerError\n     * @private\n     * @param {Number} status\n     * @param {Object} headers\n     * @param {Object} payload\n     * @return {Boolean}\n     */\n    isServerError: function isServerError(status) {\n      return (0, _errors.isServerError)(status);\n    },\n\n\n    /**\n     * Default `handleResponse` implementation uses this hook to decide if the\n     * response is a success.\n     *\n     * @method isSuccess\n     * @private\n     * @param {Number} status\n     * @param {Object} headers\n     * @param {Object} payload\n     * @return {Boolean}\n     */\n    isSuccess: function isSuccess(status) {\n      return (0, _errors.isSuccess)(status);\n    },\n\n\n    /**\n     * @method parseErrorResponse\n     * @private\n     * @param {string} responseText\n     * @return {Object}\n     */\n    parseErrorResponse: function parseErrorResponse(responseText) {\n      try {\n        return JSON.parse(responseText);\n      } catch (e) {\n        return responseText;\n      }\n    },\n\n\n    /**\n     * Can be overwritten to allow re-formatting of error messages\n     *\n     * @method normalizeErrorResponse\n     * @private\n     * @param  {Number} status\n     * @param  {Object} headers\n     * @param  {Object} payload\n     * @return {*} error response\n     */\n    normalizeErrorResponse: function normalizeErrorResponse(status, headers, payload) {\n      return payload;\n    }\n  });\n});","define('ember-ajax/mixins/ajax-support', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Mixin.create({\n    /**\n     * The AJAX service to send requests through\n     *\n     * @property {AjaxService} ajaxService\n     * @public\n     */\n    ajaxService: Ember.inject.service('ajax'),\n\n    /**\n     * @property {string} host\n     * @public\n     */\n    host: Ember.computed.alias('ajaxService.host'),\n\n    /**\n     * @property {string} namespace\n     * @public\n     */\n    namespace: Ember.computed.alias('ajaxService.namespace'),\n\n    /**\n     * @property {object} headers\n     * @public\n     */\n    headers: Ember.computed.alias('ajaxService.headers'),\n\n    ajax: function ajax(url) {\n      var augmentedOptions = this.ajaxOptions.apply(this, arguments);\n\n      return this.get('ajaxService').request(url, augmentedOptions);\n    }\n  });\n});","define('ember-ajax/mixins/legacy/normalize-error-response', ['exports', 'ember-ajax/-private/utils/is-string'], function (exports, _isString) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n  var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n    return typeof obj;\n  } : function (obj) {\n    return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n  };\n\n  function isObject(object) {\n    return (typeof object === 'undefined' ? 'undefined' : _typeof(object)) === 'object';\n  }\n\n  exports.default = Ember.Mixin.create({\n    /**\n     * Normalize the error from the server into the same format\n     *\n     * The format we normalize to is based on the JSON API specification.  The\n     * return value should be an array of objects that match the format they\n     * describe. More details about the object format can be found\n     * [here](http://jsonapi.org/format/#error-objects)\n     *\n     * The basics of the format are as follows:\n     *\n     * ```javascript\n     * [\n     *   {\n     *     status: 'The status code for the error',\n     *     title: 'The human-readable title of the error'\n     *     detail: 'The human-readable details of the error'\n     *   }\n     * ]\n     * ```\n     *\n     * In cases where the server returns an array, then there should be one item\n     * in the array for each of the payload.  If your server returns a JSON API\n     * formatted payload already, it will just be returned directly.\n     *\n     * If your server returns something other than a JSON API format, it's\n     * suggested that you override this method to convert your own errors into the\n     * one described above.\n     *\n     * @method normalizeErrorResponse\n     * @private\n     * @param  {Number} status\n     * @param  {Object} headers\n     * @param  {Object} payload\n     * @return {Array} An array of JSON API-formatted error objects\n     */\n    normalizeErrorResponse: function normalizeErrorResponse(status, headers, payload) {\n      payload = Ember.isNone(payload) ? {} : payload;\n\n      if (Ember.isArray(payload.errors)) {\n        return payload.errors.map(function (error) {\n          if (isObject(error)) {\n            var ret = Ember.merge({}, error);\n            ret.status = '' + error.status;\n            return ret;\n          } else {\n            return {\n              status: '' + status,\n              title: error\n            };\n          }\n        });\n      } else if (Ember.isArray(payload)) {\n        return payload.map(function (error) {\n          if (isObject(error)) {\n            return {\n              status: '' + status,\n              title: error.title || 'The backend responded with an error',\n              detail: error\n            };\n          } else {\n            return {\n              status: '' + status,\n              title: '' + error\n            };\n          }\n        });\n      } else if ((0, _isString.default)(payload)) {\n        return [{\n          status: '' + status,\n          title: payload\n        }];\n      } else {\n        return [{\n          status: '' + status,\n          title: payload.title || 'The backend responded with an error',\n          detail: payload\n        }];\n      }\n    }\n  });\n});","define('ember-ajax/raw', ['exports', 'ember-ajax/ajax-request'], function (exports, _ajaxRequest) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = raw;\n\n\n  /**\n   * Same as `request` except it resolves an object with\n   *\n   *   {response, textStatus, jqXHR}\n   *\n   * Useful if you need access to the jqXHR object for headers, etc.\n   *\n   * @public\n   */\n  function raw() {\n    var ajax = new _ajaxRequest.default();\n    return ajax.raw.apply(ajax, arguments);\n  }\n});","define('ember-ajax/request', ['exports', 'ember-ajax/ajax-request'], function (exports, _ajaxRequest) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = request;\n\n\n  /**\n   * Helper function that allows you to use the default `ember-ajax` to make\n   * requests without using the service.\n   *\n   * Note: Unlike `ic-ajax`'s `request` helper function, this will *not* return a\n   * jqXHR object in the error handler.  If you need jqXHR, you can use the `raw`\n   * function instead.\n   *\n   * @public\n   */\n  function request() {\n    var ajax = new _ajaxRequest.default();\n    return ajax.request.apply(ajax, arguments);\n  }\n});","define('ember-ajax/services/ajax', ['exports', 'ember-ajax/mixins/ajax-request'], function (exports, _ajaxRequest) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Service.extend(_ajaxRequest.default);\n});","define('ember-ajax/utils/ajax', ['exports', 'ember-ajax/-private/utils/is-fastboot'], function (exports, _isFastboot) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _isFastboot.default ? najax : Ember.$.ajax;\n});","define('ember-cli-app-version/initializer-factory', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = initializerFactory;\n  var libraries = Ember.libraries;\n  function initializerFactory(name, version) {\n    var registered = false;\n\n    return function () {\n      if (!registered && name && version) {\n        var appName = Ember.String.classify(name);\n        libraries.register(appName, version);\n        registered = true;\n      }\n    };\n  }\n});","define(\"ember-cli-app-version/utils/regexp\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  var versionRegExp = exports.versionRegExp = /\\d+[.]\\d+[.]\\d+/; // Match any number of 3 sections of digits separated by .\n  var versionExtendedRegExp = exports.versionExtendedRegExp = /\\d+[.]\\d+[.]\\d+-[a-z]*([.]\\d+)?/; // Match the above but also hyphen followed by any number of lowercase letters, then optionally period and digits\n  var shaRegExp = exports.shaRegExp = /[a-z\\d]{8}$/; // Match 8 lowercase letters and digits, at the end of the string only (to avoid matching with version extended part)\n});","define('ember-inflector/index', ['exports', 'ember-inflector/lib/system', 'ember-inflector/lib/ext/string'], function (exports, _system) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.defaultRules = exports.singularize = exports.pluralize = undefined;\n\n\n  _system.Inflector.defaultRules = _system.defaultRules;\n\n  Object.defineProperty(Ember, 'Inflector', {\n    get: function get() {\n      Ember.deprecate('Ember.Inflector is deprecated. Please explicitly: import Inflector from \\'ember-inflector\\';', false, {\n        id: 'ember-inflector.globals',\n        until: '3.0.0'\n      });\n\n      return _system.Inflector;\n    }\n  });\n\n  Object.defineProperty(Ember.String, 'singularize', {\n    get: function get() {\n      Ember.deprecate('Ember.String.singularize() is deprecated. Please explicitly: import { singularize } from \\'ember-inflector\\';', false, {\n        id: 'ember-inflector.globals',\n        until: '3.0.0'\n      });\n\n      return _system.singularize;\n    }\n  });\n\n  Object.defineProperty(Ember.String, 'pluralize', {\n    get: function get() {\n      Ember.deprecate('Ember.String.pluralize() is deprecated. Please explicitly: import { pluralize } from \\'ember-inflector\\';', false, {\n        id: 'ember-inflector.globals',\n        until: '3.0.0'\n      });\n\n      return _system.pluralize;\n    }\n  });\n\n  exports.default = _system.Inflector;\n  exports.pluralize = _system.pluralize;\n  exports.singularize = _system.singularize;\n  exports.defaultRules = _system.defaultRules;\n});","define('ember-inflector/lib/ext/string', ['ember-inflector/lib/system/string'], function (_string) {\n  'use strict';\n\n  if (Ember.ENV.EXTEND_PROTOTYPES === true || Ember.ENV.EXTEND_PROTOTYPES.String) {\n    /**\n      See {{#crossLink \"Ember.String/pluralize\"}}{{/crossLink}}\n       @method pluralize\n      @for String\n    */\n    Object.defineProperty(String.prototype, 'pluralize', {\n      get: function get() {\n        Ember.deprecate('String.prototype.pluralize() is deprecated. Please explicitly: import { pluralize } from \\'ember-inflector\\';', false, {\n          id: 'ember-inflector.globals',\n          until: '3.0.0'\n        });\n\n        return function () {\n          return (0, _string.pluralize)(this);\n        };\n      }\n    });\n\n    /**\n      See {{#crossLink \"Ember.String/singularize\"}}{{/crossLink}}\n       @method singularize\n      @for String\n    */\n    Object.defineProperty(String.prototype, 'singularize', {\n      get: function get() {\n        Ember.deprecate('String.prototype.singularize() is deprecated. Please explicitly: import { singularize } from \\'ember-inflector\\';', false, {\n          id: 'ember-inflector.globals',\n          until: '3.0.0'\n        });\n\n        return function () {\n          return (0, _string.singularize)(this);\n        };\n      }\n    });\n  }\n});","define('ember-inflector/lib/helpers/pluralize', ['exports', 'ember-inflector', 'ember-inflector/lib/utils/make-helper'], function (exports, _emberInflector, _makeHelper) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n  function _toConsumableArray(arr) {\n    if (Array.isArray(arr)) {\n      for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n        arr2[i] = arr[i];\n      }\n\n      return arr2;\n    } else {\n      return Array.from(arr);\n    }\n  }\n\n  exports.default = (0, _makeHelper.default)(function (params, hash) {\n    var fullParams = new (Function.prototype.bind.apply(Array, [null].concat(_toConsumableArray(params))))();\n\n    if (fullParams.length === 2) {\n      fullParams.push({ withoutCount: hash[\"without-count\"] });\n    }\n\n    return _emberInflector.pluralize.apply(undefined, _toConsumableArray(fullParams));\n  });\n});","define('ember-inflector/lib/helpers/singularize', ['exports', 'ember-inflector', 'ember-inflector/lib/utils/make-helper'], function (exports, _emberInflector, _makeHelper) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = (0, _makeHelper.default)(function (params) {\n    return (0, _emberInflector.singularize)(params[0]);\n  });\n});","define(\"ember-inflector/lib/system\", [\"exports\", \"ember-inflector/lib/system/inflector\", \"ember-inflector/lib/system/string\", \"ember-inflector/lib/system/inflections\"], function (exports, _inflector, _string, _inflections) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.defaultRules = exports.pluralize = exports.singularize = exports.Inflector = undefined;\n\n\n  _inflector.default.inflector = new _inflector.default(_inflections.default);\n\n  exports.Inflector = _inflector.default;\n  exports.singularize = _string.singularize;\n  exports.pluralize = _string.pluralize;\n  exports.defaultRules = _inflections.default;\n});","define('ember-inflector/lib/system/inflections', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = {\n    plurals: [[/$/, 's'], [/s$/i, 's'], [/^(ax|test)is$/i, '$1es'], [/(octop|vir)us$/i, '$1i'], [/(octop|vir)i$/i, '$1i'], [/(alias|status|bonus)$/i, '$1es'], [/(bu)s$/i, '$1ses'], [/(buffal|tomat)o$/i, '$1oes'], [/([ti])um$/i, '$1a'], [/([ti])a$/i, '$1a'], [/sis$/i, 'ses'], [/(?:([^f])fe|([lr])f)$/i, '$1$2ves'], [/(hive)$/i, '$1s'], [/([^aeiouy]|qu)y$/i, '$1ies'], [/(x|ch|ss|sh)$/i, '$1es'], [/(matr|vert|ind)(?:ix|ex)$/i, '$1ices'], [/^(m|l)ouse$/i, '$1ice'], [/^(m|l)ice$/i, '$1ice'], [/^(ox)$/i, '$1en'], [/^(oxen)$/i, '$1'], [/(quiz)$/i, '$1zes']],\n\n    singular: [[/s$/i, ''], [/(ss)$/i, '$1'], [/(n)ews$/i, '$1ews'], [/([ti])a$/i, '$1um'], [/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)(sis|ses)$/i, '$1sis'], [/(^analy)(sis|ses)$/i, '$1sis'], [/([^f])ves$/i, '$1fe'], [/(hive)s$/i, '$1'], [/(tive)s$/i, '$1'], [/([lr])ves$/i, '$1f'], [/([^aeiouy]|qu)ies$/i, '$1y'], [/(s)eries$/i, '$1eries'], [/(m)ovies$/i, '$1ovie'], [/(x|ch|ss|sh)es$/i, '$1'], [/^(m|l)ice$/i, '$1ouse'], [/(bus)(es)?$/i, '$1'], [/(o)es$/i, '$1'], [/(shoe)s$/i, '$1'], [/(cris|test)(is|es)$/i, '$1is'], [/^(a)x[ie]s$/i, '$1xis'], [/(octop|vir)(us|i)$/i, '$1us'], [/(alias|status|bonus)(es)?$/i, '$1'], [/^(ox)en/i, '$1'], [/(vert|ind)ices$/i, '$1ex'], [/(matr)ices$/i, '$1ix'], [/(quiz)zes$/i, '$1'], [/(database)s$/i, '$1']],\n\n    irregularPairs: [['person', 'people'], ['man', 'men'], ['child', 'children'], ['sex', 'sexes'], ['move', 'moves'], ['cow', 'kine'], ['zombie', 'zombies']],\n\n    uncountable: ['equipment', 'information', 'rice', 'money', 'species', 'series', 'fish', 'sheep', 'jeans', 'police']\n  };\n});","define('ember-inflector/lib/system/inflector', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n\n  var capitalize = Ember.String.capitalize;\n\n  var BLANK_REGEX = /^\\s*$/;\n  var LAST_WORD_DASHED_REGEX = /([\\w/-]+[_/\\s-])([a-z\\d]+$)/;\n  var LAST_WORD_CAMELIZED_REGEX = /([\\w/\\s-]+)([A-Z][a-z\\d]*$)/;\n  var CAMELIZED_REGEX = /[A-Z][a-z\\d]*$/;\n\n  function loadUncountable(rules, uncountable) {\n    for (var i = 0, length = uncountable.length; i < length; i++) {\n      rules.uncountable[uncountable[i].toLowerCase()] = true;\n    }\n  }\n\n  function loadIrregular(rules, irregularPairs) {\n    var pair;\n\n    for (var i = 0, length = irregularPairs.length; i < length; i++) {\n      pair = irregularPairs[i];\n\n      //pluralizing\n      rules.irregular[pair[0].toLowerCase()] = pair[1];\n      rules.irregular[pair[1].toLowerCase()] = pair[1];\n\n      //singularizing\n      rules.irregularInverse[pair[1].toLowerCase()] = pair[0];\n      rules.irregularInverse[pair[0].toLowerCase()] = pair[0];\n    }\n  }\n\n  /**\n    Inflector.Ember provides a mechanism for supplying inflection rules for your\n    application. Ember includes a default set of inflection rules, and provides an\n    API for providing additional rules.\n  \n    Examples:\n  \n    Creating an inflector with no rules.\n  \n    ```js\n    var inflector = new Ember.Inflector();\n    ```\n  \n    Creating an inflector with the default ember ruleset.\n  \n    ```js\n    var inflector = new Ember.Inflector(Ember.Inflector.defaultRules);\n  \n    inflector.pluralize('cow'); //=> 'kine'\n    inflector.singularize('kine'); //=> 'cow'\n    ```\n  \n    Creating an inflector and adding rules later.\n  \n    ```javascript\n    var inflector = Ember.Inflector.inflector;\n  \n    inflector.pluralize('advice'); // => 'advices'\n    inflector.uncountable('advice');\n    inflector.pluralize('advice'); // => 'advice'\n  \n    inflector.pluralize('formula'); // => 'formulas'\n    inflector.irregular('formula', 'formulae');\n    inflector.pluralize('formula'); // => 'formulae'\n  \n    // you would not need to add these as they are the default rules\n    inflector.plural(/$/, 's');\n    inflector.singular(/s$/i, '');\n    ```\n  \n    Creating an inflector with a nondefault ruleset.\n  \n    ```javascript\n    var rules = {\n      plurals:  [\n        [ /$/, 's' ]\n      ],\n      singular: [\n        [ /\\s$/, '' ]\n      ],\n      irregularPairs: [\n        [ 'cow', 'kine' ]\n      ],\n      uncountable: [ 'fish' ]\n    };\n  \n    var inflector = new Ember.Inflector(rules);\n    ```\n  \n    @class Inflector\n    @namespace Ember\n  */\n  function Inflector(ruleSet) {\n    ruleSet = ruleSet || {};\n    ruleSet.uncountable = ruleSet.uncountable || makeDictionary();\n    ruleSet.irregularPairs = ruleSet.irregularPairs || makeDictionary();\n\n    var rules = this.rules = {\n      plurals: ruleSet.plurals || [],\n      singular: ruleSet.singular || [],\n      irregular: makeDictionary(),\n      irregularInverse: makeDictionary(),\n      uncountable: makeDictionary()\n    };\n\n    loadUncountable(rules, ruleSet.uncountable);\n    loadIrregular(rules, ruleSet.irregularPairs);\n\n    this.enableCache();\n  }\n\n  if (!Object.create && !Object.create(null).hasOwnProperty) {\n    throw new Error(\"This browser does not support Object.create(null), please polyfil with es5-sham: http://git.io/yBU2rg\");\n  }\n\n  function makeDictionary() {\n    var cache = Object.create(null);\n    cache['_dict'] = null;\n    delete cache['_dict'];\n    return cache;\n  }\n\n  Inflector.prototype = {\n    /**\n      @public\n       As inflections can be costly, and commonly the same subset of words are repeatedly\n      inflected an optional cache is provided.\n       @method enableCache\n    */\n    enableCache: function enableCache() {\n      this.purgeCache();\n\n      this.singularize = function (word) {\n        this._cacheUsed = true;\n        return this._sCache[word] || (this._sCache[word] = this._singularize(word));\n      };\n\n      this.pluralize = function (numberOrWord, word) {\n        var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n        this._cacheUsed = true;\n        var cacheKey = [numberOrWord, word, options.withoutCount];\n        return this._pCache[cacheKey] || (this._pCache[cacheKey] = this._pluralize(numberOrWord, word, options));\n      };\n    },\n\n    /**\n      @public\n       @method purgedCache\n    */\n    purgeCache: function purgeCache() {\n      this._cacheUsed = false;\n      this._sCache = makeDictionary();\n      this._pCache = makeDictionary();\n    },\n\n    /**\n      @public\n      disable caching\n       @method disableCache;\n    */\n    disableCache: function disableCache() {\n      this._sCache = null;\n      this._pCache = null;\n      this.singularize = function (word) {\n        return this._singularize(word);\n      };\n\n      this.pluralize = function () {\n        return this._pluralize.apply(this, arguments);\n      };\n    },\n\n    /**\n      @method plural\n      @param {RegExp} regex\n      @param {String} string\n    */\n    plural: function plural(regex, string) {\n      if (this._cacheUsed) {\n        this.purgeCache();\n      }\n      this.rules.plurals.push([regex, string.toLowerCase()]);\n    },\n\n    /**\n      @method singular\n      @param {RegExp} regex\n      @param {String} string\n    */\n    singular: function singular(regex, string) {\n      if (this._cacheUsed) {\n        this.purgeCache();\n      }\n      this.rules.singular.push([regex, string.toLowerCase()]);\n    },\n\n    /**\n      @method uncountable\n      @param {String} regex\n    */\n    uncountable: function uncountable(string) {\n      if (this._cacheUsed) {\n        this.purgeCache();\n      }\n      loadUncountable(this.rules, [string.toLowerCase()]);\n    },\n\n    /**\n      @method irregular\n      @param {String} singular\n      @param {String} plural\n    */\n    irregular: function irregular(singular, plural) {\n      if (this._cacheUsed) {\n        this.purgeCache();\n      }\n      loadIrregular(this.rules, [[singular, plural]]);\n    },\n\n    /**\n      @method pluralize\n      @param {String} word\n    */\n    pluralize: function pluralize() {\n      return this._pluralize.apply(this, arguments);\n    },\n\n    _pluralize: function _pluralize(wordOrCount, word) {\n      var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n      if (word === undefined) {\n        return this.inflect(wordOrCount, this.rules.plurals, this.rules.irregular);\n      }\n\n      if (parseFloat(wordOrCount) !== 1) {\n        word = this.inflect(word, this.rules.plurals, this.rules.irregular);\n      }\n\n      return options.withoutCount ? word : wordOrCount + ' ' + word;\n    },\n    /**\n      @method singularize\n      @param {String} word\n    */\n    singularize: function singularize(word) {\n      return this._singularize(word);\n    },\n\n    _singularize: function _singularize(word) {\n      return this.inflect(word, this.rules.singular, this.rules.irregularInverse);\n    },\n\n    /**\n      @protected\n       @method inflect\n      @param {String} word\n      @param {Object} typeRules\n      @param {Object} irregular\n    */\n    inflect: function inflect(word, typeRules, irregular) {\n      var inflection, substitution, result, lowercase, wordSplit, firstPhrase, lastWord, isBlank, isCamelized, rule, isUncountable;\n\n      isBlank = !word || BLANK_REGEX.test(word);\n\n      isCamelized = CAMELIZED_REGEX.test(word);\n      firstPhrase = \"\";\n\n      if (isBlank) {\n        return word;\n      }\n\n      lowercase = word.toLowerCase();\n      wordSplit = LAST_WORD_DASHED_REGEX.exec(word) || LAST_WORD_CAMELIZED_REGEX.exec(word);\n\n      if (wordSplit) {\n        firstPhrase = wordSplit[1];\n        lastWord = wordSplit[2].toLowerCase();\n      }\n\n      isUncountable = this.rules.uncountable[lowercase] || this.rules.uncountable[lastWord];\n\n      if (isUncountable) {\n        return word;\n      }\n\n      for (rule in irregular) {\n        if (lowercase.match(rule + \"$\")) {\n          substitution = irregular[rule];\n\n          if (isCamelized && irregular[lastWord]) {\n            substitution = capitalize(substitution);\n            rule = capitalize(rule);\n          }\n\n          return word.replace(new RegExp(rule, 'i'), substitution);\n        }\n      }\n\n      for (var i = typeRules.length, min = 0; i > min; i--) {\n        inflection = typeRules[i - 1];\n        rule = inflection[0];\n\n        if (rule.test(word)) {\n          break;\n        }\n      }\n\n      inflection = inflection || [];\n\n      rule = inflection[0];\n      substitution = inflection[1];\n\n      result = word.replace(rule, substitution);\n\n      return result;\n    }\n  };\n\n  exports.default = Inflector;\n});","define('ember-inflector/lib/system/string', ['exports', 'ember-inflector/lib/system/inflector'], function (exports, _inflector) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.singularize = exports.pluralize = undefined;\n\n\n  function pluralize() {\n    var _Inflector$inflector;\n\n    return (_Inflector$inflector = _inflector.default.inflector).pluralize.apply(_Inflector$inflector, arguments);\n  }\n\n  function singularize(word) {\n    return _inflector.default.inflector.singularize(word);\n  }\n\n  exports.pluralize = pluralize;\n  exports.singularize = singularize;\n});","define('ember-inflector/lib/utils/make-helper', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = makeHelper;\n  function makeHelper(helperFunction) {\n    if (Ember.Helper) {\n      return Ember.Helper.helper(helperFunction);\n    }\n    if (Ember.HTMLBars) {\n      return Ember.HTMLBars.makeBoundHelper(helperFunction);\n    }\n    return Ember.Handlebars.makeBoundHelper(helperFunction);\n  }\n});","define('ember-load-initializers/index', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n  exports.default = function (app, prefix) {\n    var initializerPrefix = prefix + '/initializers/';\n    var instanceInitializerPrefix = prefix + '/instance-initializers/';\n    var initializers = [];\n    var instanceInitializers = [];\n    // this is 2 pass because generally the first pass is the problem\n    // and is reduced, and resolveInitializer has potential to deopt\n    var moduleNames = Object.keys(requirejs._eak_seen);\n    for (var i = 0; i < moduleNames.length; i++) {\n      var moduleName = moduleNames[i];\n      if (moduleName.lastIndexOf(initializerPrefix, 0) === 0) {\n        if (!_endsWith(moduleName, '-test')) {\n          initializers.push(moduleName);\n        }\n      } else if (moduleName.lastIndexOf(instanceInitializerPrefix, 0) === 0) {\n        if (!_endsWith(moduleName, '-test')) {\n          instanceInitializers.push(moduleName);\n        }\n      }\n    }\n    registerInitializers(app, initializers);\n    registerInstanceInitializers(app, instanceInitializers);\n  };\n\n  /* global requirejs:false, require:false */\n  function resolveInitializer(moduleName) {\n    var module = require(moduleName, null, null, true);\n    if (!module) {\n      throw new Error(moduleName + ' must export an initializer.');\n    }\n    var initializer = module['default'];\n    if (!initializer.name) {\n      initializer.name = moduleName.slice(moduleName.lastIndexOf('/') + 1);\n    }\n    return initializer;\n  }\n\n  function registerInitializers(app, moduleNames) {\n    for (var i = 0; i < moduleNames.length; i++) {\n      app.initializer(resolveInitializer(moduleNames[i]));\n    }\n  }\n\n  function registerInstanceInitializers(app, moduleNames) {\n    for (var i = 0; i < moduleNames.length; i++) {\n      app.instanceInitializer(resolveInitializer(moduleNames[i]));\n    }\n  }\n\n  function _endsWith(str, suffix) {\n    return str.indexOf(suffix, str.length - suffix.length) !== -1;\n  }\n});","/*\n * This is a stub file, it must be on disk b/c babel-plugin-debug-macros\n * does not strip the module require when the transpiled variable usage is\n * stripped.\n */\ndefine(\"ember-resolver/features\", [], function () {\n  \"use strict\";\n});","define('ember-resolver/index', ['exports', 'ember-resolver/resolvers/classic'], function (exports, _classic) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _classic.default;\n    }\n  });\n});","define('ember-resolver/resolver', ['exports', 'ember-resolver/resolvers/classic'], function (exports, _classic) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _classic.default;\n    }\n  });\n});","define('ember-resolver/resolvers/classic/container-debug-adapter', ['exports', 'ember-resolver/resolvers/classic/index'], function (exports, _index) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  var ContainerDebugAdapter = Ember.ContainerDebugAdapter;\n\n\n  function getPod(type, key, prefix) {\n    var match = key.match(new RegExp('^/?' + prefix + '/(.+)/' + type + '$'));\n    if (match !== null) {\n      return match[1];\n    }\n  }\n\n  /*\n   * This module defines a subclass of Ember.ContainerDebugAdapter that adds\n   * support for resolving from modules.\n   *\n   */\n  exports.default = ContainerDebugAdapter.extend({\n    _moduleRegistry: null,\n\n    init: function init() {\n      this._super.apply(this, arguments);\n\n      if (!this._moduleRegistry) {\n        this._moduleRegistry = new _index.ModuleRegistry();\n      }\n    },\n\n\n    /**\n        The container of the application being debugged.\n        This property will be injected\n        on creation.\n         @property container\n        @default null\n        */\n\n    /**\n        The resolver instance of the application\n        being debugged. This property will be injected\n        on creation.\n         @property resolver\n        @default null\n        */\n\n    /**\n        Returns true if it is possible to catalog a list of available\n        classes in the resolver for a given type.\n         @method canCatalogEntriesByType\n        @param {string} type The type. e.g. \"model\", \"controller\", \"route\"\n        @return {boolean} whether a list is available for this type.\n        */\n    canCatalogEntriesByType: function canCatalogEntriesByType(type) {\n      if (type === 'model') {\n        return true;\n      }\n      return this._super.apply(this, arguments);\n    },\n\n\n    /**\n        Returns the available classes a given type.\n         @method catalogEntriesByType\n        @param {string} type The type. e.g. \"model\", \"controller\", \"route\"\n        @return {Array} An array of classes.\n        */\n    catalogEntriesByType: function catalogEntriesByType(type) {\n      var moduleNames = this._moduleRegistry.moduleNames();\n      var types = Ember.A();\n\n      var prefix = this.namespace.modulePrefix;\n\n      for (var i = 0, l = moduleNames.length; i < l; i++) {\n        var key = moduleNames[i];\n\n        if (key.indexOf(type) !== -1) {\n          // Check if it's a pod module\n          var name = getPod(type, key, this.namespace.podModulePrefix || prefix);\n          if (!name) {\n            // Not pod\n            name = key.split(type + 's/').pop();\n\n            // Support for different prefix (such as ember-cli addons).\n            // Uncomment the code below when\n            // https://github.com/ember-cli/ember-resolver/pull/80 is merged.\n\n            //let match = key.match('^/?(.+)/' + type);\n            //if (match && match[1] !== prefix) {\n            // Different prefix such as an addon\n            //name = match[1] + '@' + name;\n            //}\n          }\n          types.addObject(name);\n        }\n      }\n      return types;\n    }\n  });\n});","define('ember-resolver/resolvers/classic/index', ['exports', 'ember-resolver/utils/class-factory', 'ember-resolver/utils/make-dictionary'], function (exports, _classFactory, _makeDictionary) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.ModuleRegistry = undefined;\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  if (typeof requirejs.entries === 'undefined') {\n    requirejs.entries = requirejs._eak_seen;\n  }\n\n  var ModuleRegistry = exports.ModuleRegistry = function () {\n    function ModuleRegistry(entries) {\n      _classCallCheck(this, ModuleRegistry);\n\n      this._entries = entries || requirejs.entries;\n    }\n\n    ModuleRegistry.prototype.moduleNames = function moduleNames() {\n      return Object.keys(this._entries);\n    };\n\n    ModuleRegistry.prototype.has = function has(moduleName) {\n      return moduleName in this._entries;\n    };\n\n    ModuleRegistry.prototype.get = function get(moduleName) {\n      return require(moduleName);\n    };\n\n    return ModuleRegistry;\n  }();\n\n  var _Ember$String = Ember.String,\n      underscore = _Ember$String.underscore,\n      classify = _Ember$String.classify,\n      dasherize = _Ember$String.dasherize;\n  var get = Ember.get,\n      DefaultResolver = Ember.DefaultResolver;\n\n\n  function parseName(fullName) {\n    if (fullName.parsedName === true) {\n      return fullName;\n    }\n\n    var prefix = void 0,\n        type = void 0,\n        name = void 0;\n    var fullNameParts = fullName.split('@');\n\n    // HTMLBars uses helper:@content-helper which collides\n    // with ember-cli namespace detection.\n    // This will be removed in a future release of HTMLBars.\n    if (fullName !== 'helper:@content-helper' && fullNameParts.length === 2) {\n      var prefixParts = fullNameParts[0].split(':');\n\n      if (prefixParts.length === 2) {\n        prefix = prefixParts[1];\n        type = prefixParts[0];\n        name = fullNameParts[1];\n      } else {\n        var nameParts = fullNameParts[1].split(':');\n\n        prefix = fullNameParts[0];\n        type = nameParts[0];\n        name = nameParts[1];\n      }\n\n      if (type === 'template' && prefix.lastIndexOf('components/', 0) === 0) {\n        name = 'components/' + name;\n        prefix = prefix.slice(11);\n      }\n    } else {\n      fullNameParts = fullName.split(':');\n      type = fullNameParts[0];\n      name = fullNameParts[1];\n    }\n\n    var fullNameWithoutType = name;\n    var namespace = get(this, 'namespace');\n    var root = namespace;\n\n    return {\n      parsedName: true,\n      fullName: fullName,\n      prefix: prefix || this.prefix({ type: type }),\n      type: type,\n      fullNameWithoutType: fullNameWithoutType,\n      name: name,\n      root: root,\n      resolveMethodName: \"resolve\" + classify(type)\n    };\n  }\n\n  function resolveOther(parsedName) {\n    Ember.assert('`modulePrefix` must be defined', this.namespace.modulePrefix);\n\n    var normalizedModuleName = this.findModuleName(parsedName);\n\n    if (normalizedModuleName) {\n      var defaultExport = this._extractDefaultExport(normalizedModuleName, parsedName);\n\n      if (defaultExport === undefined) {\n        throw new Error(' Expected to find: \\'' + parsedName.fullName + '\\' within \\'' + normalizedModuleName + '\\' but got \\'undefined\\'. Did you forget to \\'export default\\' within \\'' + normalizedModuleName + '\\'?');\n      }\n\n      if (this.shouldWrapInClassFactory(defaultExport, parsedName)) {\n        defaultExport = (0, _classFactory.default)(defaultExport);\n      }\n\n      return defaultExport;\n    } else {\n      return this._super(parsedName);\n    }\n  }\n\n  // Ember.DefaultResolver docs:\n  //   https://github.com/emberjs/ember.js/blob/master/packages/ember-application/lib/system/resolver.js\n  var Resolver = DefaultResolver.extend({\n    resolveOther: resolveOther,\n    parseName: parseName,\n    resolveTemplate: resolveOther,\n    pluralizedTypes: null,\n    moduleRegistry: null,\n\n    makeToString: function makeToString(factory, fullName) {\n      return '' + this.namespace.modulePrefix + '@' + fullName + ':';\n    },\n    shouldWrapInClassFactory: function shouldWrapInClassFactory() /* module, parsedName */{\n      return false;\n    },\n    init: function init() {\n      this._super();\n      this.moduleBasedResolver = true;\n\n      if (!this._moduleRegistry) {\n        this._moduleRegistry = new ModuleRegistry();\n      }\n\n      this._normalizeCache = (0, _makeDictionary.default)();\n\n      this.pluralizedTypes = this.pluralizedTypes || (0, _makeDictionary.default)();\n\n      if (!this.pluralizedTypes.config) {\n        this.pluralizedTypes.config = 'config';\n      }\n      this._deprecatedPodModulePrefix = false;\n    },\n    normalize: function normalize(fullName) {\n      return this._normalizeCache[fullName] || (this._normalizeCache[fullName] = this._normalize(fullName));\n    },\n    _normalize: function _normalize(fullName) {\n      // A) Convert underscores to dashes\n      // B) Convert camelCase to dash-case, except for helpers where we want to avoid shadowing camelCase expressions\n      // C) replace `.` with `/` in order to make nested controllers work in the following cases\n      //      1. `needs: ['posts/post']`\n      //      2. `{{render \"posts/post\"}}`\n      //      3. `this.render('posts/post')` from Route\n\n      var split = fullName.split(':');\n      if (split.length > 1) {\n        if (split[0] === 'helper') {\n          return split[0] + ':' + split[1].replace(/_/g, '-');\n        } else {\n          return split[0] + ':' + dasherize(split[1].replace(/\\./g, '/'));\n        }\n      } else {\n        return fullName;\n      }\n    },\n    pluralize: function pluralize(type) {\n      return this.pluralizedTypes[type] || (this.pluralizedTypes[type] = type + 's');\n    },\n    podBasedLookupWithPrefix: function podBasedLookupWithPrefix(podPrefix, parsedName) {\n      var fullNameWithoutType = parsedName.fullNameWithoutType;\n\n      if (parsedName.type === 'template') {\n        fullNameWithoutType = fullNameWithoutType.replace(/^components\\//, '');\n      }\n\n      return podPrefix + '/' + fullNameWithoutType + '/' + parsedName.type;\n    },\n    podBasedModuleName: function podBasedModuleName(parsedName) {\n      var podPrefix = this.namespace.podModulePrefix || this.namespace.modulePrefix;\n\n      return this.podBasedLookupWithPrefix(podPrefix, parsedName);\n    },\n    podBasedComponentsInSubdir: function podBasedComponentsInSubdir(parsedName) {\n      var podPrefix = this.namespace.podModulePrefix || this.namespace.modulePrefix;\n      podPrefix = podPrefix + '/components';\n\n      if (parsedName.type === 'component' || /^components/.test(parsedName.fullNameWithoutType)) {\n        return this.podBasedLookupWithPrefix(podPrefix, parsedName);\n      }\n    },\n    resolveEngine: function resolveEngine(parsedName) {\n      var engineName = parsedName.fullNameWithoutType;\n      var engineModule = engineName + '/engine';\n\n      if (this._moduleRegistry.has(engineModule)) {\n        return this._extractDefaultExport(engineModule);\n      }\n    },\n    resolveRouteMap: function resolveRouteMap(parsedName) {\n      var engineName = parsedName.fullNameWithoutType;\n      var engineRoutesModule = engineName + '/routes';\n\n      if (this._moduleRegistry.has(engineRoutesModule)) {\n        var routeMap = this._extractDefaultExport(engineRoutesModule);\n\n        Ember.assert('The route map for ' + engineName + ' should be wrapped by \\'buildRoutes\\' before exporting.', routeMap.isRouteMap);\n\n        return routeMap;\n      }\n    },\n    mainModuleName: function mainModuleName(parsedName) {\n      if (parsedName.fullNameWithoutType === 'main') {\n        // if router:main or adapter:main look for a module with just the type first\n        return parsedName.prefix + '/' + parsedName.type;\n      }\n    },\n    defaultModuleName: function defaultModuleName(parsedName) {\n      return parsedName.prefix + '/' + this.pluralize(parsedName.type) + '/' + parsedName.fullNameWithoutType;\n    },\n    prefix: function prefix(parsedName) {\n      var tmpPrefix = this.namespace.modulePrefix;\n\n      if (this.namespace[parsedName.type + 'Prefix']) {\n        tmpPrefix = this.namespace[parsedName.type + 'Prefix'];\n      }\n\n      return tmpPrefix;\n    },\n\n\n    /**\n      A listing of functions to test for moduleName's based on the provided\n     `parsedName`. This allows easy customization of additional module based\n     lookup patterns.\n      @property moduleNameLookupPatterns\n     @returns {Ember.Array}\n     */\n    moduleNameLookupPatterns: Ember.computed(function () {\n      return [this.podBasedModuleName, this.podBasedComponentsInSubdir, this.mainModuleName, this.defaultModuleName];\n    }).readOnly(),\n\n    findModuleName: function findModuleName(parsedName, loggingDisabled) {\n      var moduleNameLookupPatterns = this.get('moduleNameLookupPatterns');\n      var moduleName = void 0;\n\n      for (var index = 0, length = moduleNameLookupPatterns.length; index < length; index++) {\n        var item = moduleNameLookupPatterns[index];\n\n        var tmpModuleName = item.call(this, parsedName);\n\n        // allow treat all dashed and all underscored as the same thing\n        // supports components with dashes and other stuff with underscores.\n        if (tmpModuleName) {\n          tmpModuleName = this.chooseModuleName(tmpModuleName, parsedName);\n        }\n\n        if (tmpModuleName && this._moduleRegistry.has(tmpModuleName)) {\n          moduleName = tmpModuleName;\n        }\n\n        if (!loggingDisabled) {\n          this._logLookup(moduleName, parsedName, tmpModuleName);\n        }\n\n        if (moduleName) {\n          return moduleName;\n        }\n      }\n    },\n    chooseModuleName: function chooseModuleName(moduleName, parsedName) {\n      var _this = this;\n\n      var underscoredModuleName = underscore(moduleName);\n\n      if (moduleName !== underscoredModuleName && this._moduleRegistry.has(moduleName) && this._moduleRegistry.has(underscoredModuleName)) {\n        throw new TypeError('Ambiguous module names: \\'' + moduleName + '\\' and \\'' + underscoredModuleName + '\\'');\n      }\n\n      if (this._moduleRegistry.has(moduleName)) {\n        return moduleName;\n      } else if (this._moduleRegistry.has(underscoredModuleName)) {\n        return underscoredModuleName;\n      }\n      // workaround for dasherized partials:\n      // something/something/-something => something/something/_something\n      var partializedModuleName = moduleName.replace(/\\/-([^/]*)$/, '/_$1');\n\n      if (this._moduleRegistry.has(partializedModuleName)) {\n        Ember.deprecate('Modules should not contain underscores. ' + 'Attempted to lookup \"' + moduleName + '\" which ' + 'was not found. Please rename \"' + partializedModuleName + '\" ' + 'to \"' + moduleName + '\" instead.', false, { id: 'ember-resolver.underscored-modules', until: '3.0.0' });\n\n        return partializedModuleName;\n      }\n\n      Ember.runInDebug(function () {\n        var isCamelCaseHelper = parsedName.type === 'helper' && /[a-z]+[A-Z]+/.test(moduleName);\n        if (isCamelCaseHelper) {\n          _this._camelCaseHelperWarnedNames = _this._camelCaseHelperWarnedNames || [];\n          var alreadyWarned = _this._camelCaseHelperWarnedNames.indexOf(parsedName.fullName) > -1;\n          if (!alreadyWarned && _this._moduleRegistry.has(dasherize(moduleName))) {\n            _this._camelCaseHelperWarnedNames.push(parsedName.fullName);\n            Ember.warn('Attempted to lookup \"' + parsedName.fullName + '\" which ' + 'was not found. In previous versions of ember-resolver, a bug would have ' + 'caused the module at \"' + dasherize(moduleName) + '\" to be ' + 'returned for this camel case helper name. This has been fixed. ' + 'Use the dasherized name to resolve the module that would have been ' + 'returned in previous versions.', false, { id: 'ember-resolver.camelcase-helper-names', until: '3.0.0' });\n          }\n        }\n      });\n    },\n    lookupDescription: function lookupDescription(fullName) {\n      var parsedName = this.parseName(fullName);\n\n      var moduleName = this.findModuleName(parsedName, true);\n\n      return moduleName;\n    },\n    _logLookup: function _logLookup(found, parsedName, description) {\n      if (!Ember.ENV.LOG_MODULE_RESOLVER && !parsedName.root.LOG_RESOLVER) {\n        return;\n      }\n\n      var padding = void 0;\n      var symbol = found ? '[✓]' : '[ ]';\n\n      if (parsedName.fullName.length > 60) {\n        padding = '.';\n      } else {\n        padding = new Array(60 - parsedName.fullName.length).join('.');\n      }\n\n      if (!description) {\n        description = this.lookupDescription(parsedName);\n      }\n\n      /* eslint-disable no-console */\n      if (console && console.info) {\n        console.info(symbol, parsedName.fullName, padding, description);\n      }\n    },\n    knownForType: function knownForType(type) {\n      var moduleKeys = this._moduleRegistry.moduleNames();\n\n      var items = (0, _makeDictionary.default)();\n      for (var index = 0, length = moduleKeys.length; index < length; index++) {\n        var moduleName = moduleKeys[index];\n        var fullname = this.translateToContainerFullname(type, moduleName);\n\n        if (fullname) {\n          items[fullname] = true;\n        }\n      }\n\n      return items;\n    },\n    translateToContainerFullname: function translateToContainerFullname(type, moduleName) {\n      var prefix = this.prefix({ type: type });\n\n      // Note: using string manipulation here rather than regexes for better performance.\n      // pod modules\n      // '^' + prefix + '/(.+)/' + type + '$'\n      var podPrefix = prefix + '/';\n      var podSuffix = '/' + type;\n      var start = moduleName.indexOf(podPrefix);\n      var end = moduleName.indexOf(podSuffix);\n\n      if (start === 0 && end === moduleName.length - podSuffix.length && moduleName.length > podPrefix.length + podSuffix.length) {\n        return type + ':' + moduleName.slice(start + podPrefix.length, end);\n      }\n\n      // non-pod modules\n      // '^' + prefix + '/' + pluralizedType + '/(.+)$'\n      var pluralizedType = this.pluralize(type);\n      var nonPodPrefix = prefix + '/' + pluralizedType + '/';\n\n      if (moduleName.indexOf(nonPodPrefix) === 0 && moduleName.length > nonPodPrefix.length) {\n        return type + ':' + moduleName.slice(nonPodPrefix.length);\n      }\n    },\n    _extractDefaultExport: function _extractDefaultExport(normalizedModuleName) {\n      var module = require(normalizedModuleName, null, null, true /* force sync */);\n\n      if (module && module['default']) {\n        module = module['default'];\n      }\n\n      return module;\n    }\n  });\n\n  Resolver.reopenClass({\n    moduleBasedResolver: true\n  });\n\n  exports.default = Resolver;\n});","define('ember-resolver/utils/class-factory', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = classFactory;\n  function classFactory(klass) {\n    return {\n      create: function create(injections) {\n        if (typeof klass.extend === 'function') {\n          return klass.extend(injections);\n        } else {\n          return klass;\n        }\n      }\n    };\n  }\n});","define('ember-resolver/utils/make-dictionary', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = makeDictionary;\n  function makeDictionary() {\n    var cache = Object.create(null);\n    cache['_dict'] = null;\n    delete cache['_dict'];\n    return cache;\n  }\n});","define('ember-responsive/initializers/responsive', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.initialize = initialize;\n  /**\n   * Ember responsive initializer\n   *\n   * Supports auto injecting media service app-wide.\n   * Generated by the ember-responsive addon.\n   */\n  function initialize() {\n    var application = arguments[1] || arguments[0];\n\n    application.inject('controller', 'media', 'service:media');\n    application.inject('component', 'media', 'service:media');\n    application.inject('route', 'media', 'service:media');\n    application.inject('view', 'media', 'service:media');\n  }\n\n  exports.default = {\n    name: 'responsive',\n    initialize: initialize\n  };\n});","define('ember-responsive/media', ['exports', 'ember-responsive/null-match-media'], function (exports, _nullMatchMedia) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n  var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n    return typeof obj;\n  } : function (obj) {\n    return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n  };\n\n  var _Ember$String = Ember.String,\n      dasherize = _Ember$String.dasherize,\n      classify = _Ember$String.classify;\n  exports.default = Ember.Service.extend({\n\n    /**\n    * A set of matching matchers.\n    *\n    * @property  matches\n    * @type      Ember.NativeArray\n    * @default   Ember.NativeArray\n    */\n    matches: Ember.computed(function () {\n      return Ember.A();\n    }),\n\n    /**\n      * A hash of listeners indexed by their matcher's names\n      *\n      * @property\n      * @type Object\n      */\n    listeners: {},\n\n    /**\n    * The matcher to use for testing media queries.\n    *\n    * @property  matcher\n    * @type      matchMedia\n    * @default   window.matchMedia\n    * @private\n    */\n    mql: detectMatchMedia(),\n\n    /**\n     * Initialize the service based on the breakpoints config\n     *\n     * @method init\n     *\n     */\n    init: function init() {\n      var owner = Ember.getOwner(this);\n      owner.registerOptionsForType('breakpoints', { instantiate: false });\n      var breakpoints = this.get('breakpoints');\n      if (breakpoints) {\n        for (var name in breakpoints) {\n          if (breakpoints.hasOwnProperty(name)) {\n            this.match(name, breakpoints[name]);\n          }\n        }\n      }\n    },\n\n\n    breakpoints: Ember.computed(function () {\n      return Ember.getOwner(this).lookup('breakpoints:main');\n    }),\n\n    /**\n    * A string composed of all the matching matchers' names, turned into\n    * friendly, dasherized class-names that are prefixed with `media-`.\n    *\n    * @property  classNames\n    * @type      string\n    */\n    classNames: Ember.computed('matches.[]', function () {\n      return this.get('matches').map(function (name) {\n        return 'media-' + dasherize(name);\n      }).join(' ');\n    }),\n\n    /**\n    * Adds a new matcher to the list.\n    *\n    * After this method is called, you will be able to access the result\n    * of the matcher as a property on this object.\n    *\n    * **Adding a new matcher**\n    *\n    * ```javascript\n    * media = Ember.Responsive.Media.create();\n    * media.match('all', 'all');\n    * media.get('all');\n    *   // => instanceof window.matchMedia\n    * media.get('all.matches');\n    *   // => true\n    * ```\n    *\n    * @param   string  name   The name of the matcher\n    * @param   string  query  The media query to match against\n    * @method  match\n    */\n    match: function match(name, query) {\n      var _this = this;\n\n      var matcher = (this.get('mql') || window.matchMedia)(query),\n          isser = 'is' + classify(name);\n\n      var listener = function listener(matcher) {\n        if (_this.get('isDestroyed')) {\n          return;\n        }\n\n        _this.set(name, matcher);\n        _this.set(isser, matcher.matches);\n\n        if (matcher.matches) {\n          _this.get('matches').addObject(name);\n        } else {\n          _this.get('matches').removeObject(name);\n        }\n      };\n      this.get('listeners')[name] = listener;\n\n      if (matcher.addListener) {\n        matcher.addListener(function (matcher) {\n          Ember.run(null, listener, matcher);\n        });\n      }\n      listener(matcher);\n    }\n  });\n\n\n  function detectMatchMedia() {\n    if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.matchMedia) {\n      return window.matchMedia;\n    }\n\n    return _nullMatchMedia.default;\n  }\n});","define(\"ember-responsive/null-match-media\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n  exports.default = function () {\n    return {\n      matches: false\n    };\n  };\n});","define('ember-truth-helpers/helpers/and', ['exports', 'ember-truth-helpers/utils/truth-convert'], function (exports, _truthConvert) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.and = and;\n  function and(params) {\n    for (var i = 0, len = params.length; i < len; i++) {\n      if ((0, _truthConvert.default)(params[i]) === false) {\n        return params[i];\n      }\n    }\n    return params[params.length - 1];\n  }\n\n  exports.default = Ember.Helper.helper(and);\n});","define('ember-truth-helpers/helpers/equal', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.equal = equal;\n  function equal(params) {\n    return params[0] === params[1];\n  }\n\n  exports.default = Ember.Helper.helper(equal);\n});","define('ember-truth-helpers/helpers/gt', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.gt = gt;\n  function gt(params, hash) {\n    var left = params[0];\n    var right = params[1];\n    if (hash.forceNumber) {\n      if (typeof left !== 'number') {\n        left = Number(left);\n      }\n      if (typeof right !== 'number') {\n        right = Number(right);\n      }\n    }\n    return left > right;\n  }\n\n  exports.default = Ember.Helper.helper(gt);\n});","define('ember-truth-helpers/helpers/gte', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.gte = gte;\n  function gte(params, hash) {\n    var left = params[0];\n    var right = params[1];\n    if (hash.forceNumber) {\n      if (typeof left !== 'number') {\n        left = Number(left);\n      }\n      if (typeof right !== 'number') {\n        right = Number(right);\n      }\n    }\n    return left >= right;\n  }\n\n  exports.default = Ember.Helper.helper(gte);\n});","define('ember-truth-helpers/helpers/is-array', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.isArray = isArray;\n  function isArray(params) {\n    for (var i = 0, len = params.length; i < len; i++) {\n      if (Ember.isArray(params[i]) === false) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  exports.default = Ember.Helper.helper(isArray);\n});","define('ember-truth-helpers/helpers/is-equal', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.isEqual = isEqual;\n\n  var _slicedToArray = function () {\n    function sliceIterator(arr, i) {\n      var _arr = [];\n      var _n = true;\n      var _d = false;\n      var _e = undefined;\n\n      try {\n        for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n          _arr.push(_s.value);\n\n          if (i && _arr.length === i) break;\n        }\n      } catch (err) {\n        _d = true;\n        _e = err;\n      } finally {\n        try {\n          if (!_n && _i[\"return\"]) _i[\"return\"]();\n        } finally {\n          if (_d) throw _e;\n        }\n      }\n\n      return _arr;\n    }\n\n    return function (arr, i) {\n      if (Array.isArray(arr)) {\n        return arr;\n      } else if (Symbol.iterator in Object(arr)) {\n        return sliceIterator(arr, i);\n      } else {\n        throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n      }\n    };\n  }();\n\n  function isEqual(_ref) {\n    var _ref2 = _slicedToArray(_ref, 2),\n        a = _ref2[0],\n        b = _ref2[1];\n\n    return Ember.isEqual(a, b);\n  }\n\n  exports.default = Ember.Helper.helper(isEqual);\n});","define('ember-truth-helpers/helpers/lt', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.lt = lt;\n  function lt(params, hash) {\n    var left = params[0];\n    var right = params[1];\n    if (hash.forceNumber) {\n      if (typeof left !== 'number') {\n        left = Number(left);\n      }\n      if (typeof right !== 'number') {\n        right = Number(right);\n      }\n    }\n    return left < right;\n  }\n\n  exports.default = Ember.Helper.helper(lt);\n});","define('ember-truth-helpers/helpers/lte', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.lte = lte;\n  function lte(params, hash) {\n    var left = params[0];\n    var right = params[1];\n    if (hash.forceNumber) {\n      if (typeof left !== 'number') {\n        left = Number(left);\n      }\n      if (typeof right !== 'number') {\n        right = Number(right);\n      }\n    }\n    return left <= right;\n  }\n\n  exports.default = Ember.Helper.helper(lte);\n});","define('ember-truth-helpers/helpers/not-equal', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.notEqualHelper = notEqualHelper;\n  function notEqualHelper(params) {\n    return params[0] !== params[1];\n  }\n\n  exports.default = Ember.Helper.helper(notEqualHelper);\n});","define('ember-truth-helpers/helpers/not', ['exports', 'ember-truth-helpers/utils/truth-convert'], function (exports, _truthConvert) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.not = not;\n  function not(params) {\n    for (var i = 0, len = params.length; i < len; i++) {\n      if ((0, _truthConvert.default)(params[i]) === true) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  exports.default = Ember.Helper.helper(not);\n});","define('ember-truth-helpers/helpers/or', ['exports', 'ember-truth-helpers/utils/truth-convert'], function (exports, _truthConvert) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.or = or;\n  function or(params) {\n    for (var i = 0, len = params.length; i < len; i++) {\n      if ((0, _truthConvert.default)(params[i]) === true) {\n        return params[i];\n      }\n    }\n    return params[params.length - 1];\n  }\n\n  exports.default = Ember.Helper.helper(or);\n});","define('ember-truth-helpers/helpers/xor', ['exports', 'ember-truth-helpers/utils/truth-convert'], function (exports, _truthConvert) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.xor = xor;\n  function xor(params) {\n    return (0, _truthConvert.default)(params[0]) !== (0, _truthConvert.default)(params[1]);\n  }\n\n  exports.default = Ember.Helper.helper(xor);\n});","define('ember-truth-helpers/utils/truth-convert', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = truthConvert;\n  function truthConvert(result) {\n    var truthy = result && Ember.get(result, 'isTruthy');\n    if (typeof truthy === 'boolean') {\n      return truthy;\n    }\n\n    if (Ember.isArray(result)) {\n      return Ember.get(result, 'length') !== 0;\n    } else {\n      return !!result;\n    }\n  }\n});","define('ember-data/-debug/index', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.instrument = instrument;\n  function instrument(method) {\n    return method();\n  }\n\n  /*\n    Assert that `addedRecord` has a valid type so it can be added to the\n    relationship of the `record`.\n  \n    The assert basically checks if the `addedRecord` can be added to the\n    relationship (specified via `relationshipMeta`) of the `record`.\n  \n    This utility should only be used internally, as both record parameters must\n    be an InternalModel and the `relationshipMeta` needs to be the meta\n    information about the relationship, retrieved via\n    `record.relationshipFor(key)`.\n  \n    @method assertPolymorphicType\n    @param {InternalModel} internalModel\n    @param {RelationshipMeta} relationshipMeta retrieved via\n           `record.relationshipFor(key)`\n    @param {InternalModel} addedRecord record which\n           should be added/set for the relationship\n  */\n  var assertPolymorphicType = void 0;\n\n  if (true) {\n    var checkPolymorphic = function checkPolymorphic(modelClass, addedModelClass) {\n      if (modelClass.__isMixin) {\n        //TODO Need to do this in order to support mixins, should convert to public api\n        //once it exists in Ember\n        return modelClass.__mixin.detect(addedModelClass.PrototypeMixin);\n      }\n      if (Ember.MODEL_FACTORY_INJECTIONS) {\n        modelClass = modelClass.superclass;\n      }\n      return modelClass.detect(addedModelClass);\n    };\n\n    exports.assertPolymorphicType = assertPolymorphicType = function assertPolymorphicType(parentInternalModel, relationshipMeta, addedInternalModel) {\n      var addedModelName = addedInternalModel.modelName;\n      var parentModelName = parentInternalModel.modelName;\n      var key = relationshipMeta.key;\n      var relationshipModelName = relationshipMeta.type;\n      var relationshipClass = parentInternalModel.store.modelFor(relationshipModelName);\n      var assertionMessage = 'You cannot add a record of modelClass \\'' + addedModelName + '\\' to the \\'' + parentModelName + '.' + key + '\\' relationship (only \\'' + relationshipModelName + '\\' allowed)';\n\n      (true && !(checkPolymorphic(relationshipClass, addedInternalModel.modelClass)) && Ember.assert(assertionMessage, checkPolymorphic(relationshipClass, addedInternalModel.modelClass)));\n    };\n  }\n\n  exports.assertPolymorphicType = assertPolymorphicType;\n});","define('ember-data/-private', ['exports', 'ember-inflector', 'ember-data/-debug', '@ember/ordered-set', 'ember-data/version'], function (exports, emberInflector, emberData_Debug, EmberOrderedSet, VERSION) { 'use strict';\n\nEmberOrderedSet = 'default' in EmberOrderedSet ? EmberOrderedSet['default'] : EmberOrderedSet;\nVERSION = 'default' in VERSION ? VERSION['default'] : VERSION;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*\n  ## Why does this exist?!?\n\n  `Ember.Map` was a private API provided by Ember (for quite some time).\n  Unfortunately, ember-data made `Ember.Map` part of its public API surface via\n  documentation blocks.\n\n  `Ember.Map` will be deprecated and removed from Ember \"soon\"\n  (https://github.com/emberjs/rfcs/pull/237) and we would like to confirm that\n  Ember Data will work without deprecation before and after that happens.\n\n  `Ember.Map` differs from native `Map` in a few ways:\n\n  * `Ember.Map` has custom `copy` and `isEmpty` methods which are not present in native `Map`\n  * `Ember.Map` adds a static `create` method (which simply instantiates itself with `new Ember.Map()`)\n  * `Ember.Map` does not accept constructor arguments\n  * `Ember.Map` does not have:\n    * `@@species`\n    * `@@iterator`\n    * `entries`\n    * `values`\n\n  This implementation adds a deprecated backwards compatibility for:\n\n  * `copy`\n  * `isEmpty`\n\n  ## Why is this written this way?!?\n\n  This is needed because `Map` requires instantiation with `new` and by default\n  Babel transpilation will do `superConstructor.apply(this, arguments)` which\n  throws an error with native `Map`.\n\n  The desired code (if we lived in an \"only native class\" world) would be:\n\n  ```js\n  export default class MapWithDeprecations extends Map {\n    constructor(options) {\n      super();\n      this.defaultValue = options.defaultValue;\n    }\n\n    get(key) {\n      let hasValue = this.has(key);\n\n      if (hasValue) {\n        return super.get(key);\n      } else {\n        let defaultValue = this.defaultValue(key);\n        this.set(key, defaultValue);\n        return defaultValue;\n      }\n    }\n  }\n  ```\n*/\nvar MapWithDeprecations = function () {\n  function MapWithDeprecations(options) {\n    _classCallCheck(this, MapWithDeprecations);\n\n    this._map = new Map();\n  }\n\n  MapWithDeprecations.prototype.copy = function copy() {\n    (true && !(false) && Ember.deprecate('Calling `.copy()` on a map generated by ember-data is deprecated, please migrate to using native Map functionality only.', false, { id: 'ember-data.map.copy', until: '3.5.0' }));\n\n    // can't just pass `this._map` here because IE11 doesn't accept\n    // constructor args with its `Map`\n\n    var newMap = new MapWithDeprecations();\n    this._map.forEach(function (value, key) {\n      newMap.set(key, value);\n    });\n\n    return newMap;\n  };\n\n  MapWithDeprecations.prototype.isEmpty = function isEmpty() {\n    (true && !(false) && Ember.deprecate('Calling `.isEmpty()` on a map generated by ember-data is deprecated, please migrate to using native Map functionality only.', false, { id: 'ember-data.map.isEmpty', until: '3.5.0' }));\n\n\n    return this.size === 0;\n  };\n\n  // proxy all normal Map methods to the underlying Map\n\n\n  MapWithDeprecations.prototype.clear = function clear() {\n    var _map;\n\n    return (_map = this._map).clear.apply(_map, arguments);\n  };\n\n  MapWithDeprecations.prototype.delete = function _delete() {\n    var _map2;\n\n    return (_map2 = this._map).delete.apply(_map2, arguments);\n  };\n\n  MapWithDeprecations.prototype.entries = function entries() {\n    var _map3;\n\n    return (_map3 = this._map).entries.apply(_map3, arguments);\n  };\n\n  MapWithDeprecations.prototype.forEach = function forEach() {\n    var _map4;\n\n    return (_map4 = this._map).forEach.apply(_map4, arguments);\n  };\n\n  MapWithDeprecations.prototype.get = function get() {\n    var _map5;\n\n    return (_map5 = this._map).get.apply(_map5, arguments);\n  };\n\n  MapWithDeprecations.prototype.has = function has() {\n    var _map6;\n\n    return (_map6 = this._map).has.apply(_map6, arguments);\n  };\n\n  MapWithDeprecations.prototype.keys = function keys() {\n    var _map7;\n\n    return (_map7 = this._map).keys.apply(_map7, arguments);\n  };\n\n  MapWithDeprecations.prototype.set = function set() {\n    var _map8;\n\n    return (_map8 = this._map).set.apply(_map8, arguments);\n  };\n\n  MapWithDeprecations.prototype.values = function values() {\n    var _map9;\n\n    return (_map9 = this._map).values.apply(_map9, arguments);\n  };\n\n  _createClass(MapWithDeprecations, [{\n    key: 'size',\n    get: function get() {\n      return this._map.size;\n    }\n  }]);\n\n  return MapWithDeprecations;\n}();\n\n/**\n  A `PromiseArray` is an object that acts like both an `Ember.Array`\n  and a promise. When the promise is resolved the resulting value\n  will be set to the `PromiseArray`'s `content` property. This makes\n  it easy to create data bindings with the `PromiseArray` that will be\n  updated when the promise resolves.\n\n  For more information see the [Ember.PromiseProxyMixin\n  documentation](/api/classes/Ember.PromiseProxyMixin.html).\n\n  Example\n\n  ```javascript\n  let promiseArray = DS.PromiseArray.create({\n    promise: $.getJSON('/some/remote/data.json')\n  });\n\n  promiseArray.get('length'); // 0\n\n  promiseArray.then(function() {\n    promiseArray.get('length'); // 100\n  });\n  ```\n\n  @class PromiseArray\n  @namespace DS\n  @extends Ember.ArrayProxy\n  @uses Ember.PromiseProxyMixin\n*/\nvar PromiseArray = Ember.ArrayProxy.extend(Ember.PromiseProxyMixin, {\n  meta: Ember.computed.reads('content.meta')\n});\n\n/**\n  A `PromiseObject` is an object that acts like both an `Ember.Object`\n  and a promise. When the promise is resolved, then the resulting value\n  will be set to the `PromiseObject`'s `content` property. This makes\n  it easy to create data bindings with the `PromiseObject` that will\n  be updated when the promise resolves.\n\n  For more information see the [Ember.PromiseProxyMixin\n  documentation](/api/classes/Ember.PromiseProxyMixin.html).\n\n  Example\n\n  ```javascript\n  let promiseObject = DS.PromiseObject.create({\n    promise: $.getJSON('/some/remote/data.json')\n  });\n\n  promiseObject.get('name'); // null\n\n  promiseObject.then(function() {\n    promiseObject.get('name'); // 'Tomster'\n  });\n  ```\n\n  @class PromiseObject\n  @namespace DS\n  @extends Ember.ObjectProxy\n  @uses Ember.PromiseProxyMixin\n*/\nvar PromiseObject = Ember.ObjectProxy.extend(Ember.PromiseProxyMixin);\n\nfunction promiseObject(promise, label) {\n  return PromiseObject.create({\n    promise: Ember.RSVP.Promise.resolve(promise, label)\n  });\n}\n\nfunction promiseArray(promise, label) {\n  return PromiseArray.create({\n    promise: Ember.RSVP.Promise.resolve(promise, label)\n  });\n}\n\n/**\n  A PromiseManyArray is a PromiseArray that also proxies certain method calls\n  to the underlying manyArray.\n  Right now we proxy:\n\n    * `reload()`\n    * `createRecord()`\n    * `on()`\n    * `one()`\n    * `trigger()`\n    * `off()`\n    * `has()`\n\n  @class PromiseManyArray\n  @namespace DS\n  @extends Ember.ArrayProxy\n*/\n\nfunction proxyToContent(method) {\n  return function () {\n    var _EmberGet;\n\n    return (_EmberGet = Ember.get(this, 'content'))[method].apply(_EmberGet, arguments);\n  };\n}\n\nvar PromiseManyArray = PromiseArray.extend({\n  reload: function reload() {\n    (true && !(Ember.get(this, 'content')) && Ember.assert('You are trying to reload an async manyArray before it has been created', Ember.get(this, 'content')));\n\n    this.set('promise', this.get('content').reload());\n    return this;\n  },\n\n\n  createRecord: proxyToContent('createRecord'),\n\n  on: proxyToContent('on'),\n\n  one: proxyToContent('one'),\n\n  trigger: proxyToContent('trigger'),\n\n  off: proxyToContent('off'),\n\n  has: proxyToContent('has')\n});\n\nfunction _classCallCheck$1(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar MapWithDefault = function (_Map) {\n  _inherits(MapWithDefault, _Map);\n\n  function MapWithDefault(options) {\n    _classCallCheck$1(this, MapWithDefault);\n\n    var _this = _possibleConstructorReturn(this, _Map.call(this));\n\n    _this.defaultValue = options.defaultValue;\n    return _this;\n  }\n\n  MapWithDefault.prototype.get = function get(key) {\n    var hasValue = this.has(key);\n\n    if (hasValue) {\n      return _Map.prototype.get.call(this, key);\n    } else {\n      var defaultValue = this.defaultValue(key);\n      this.set(key, defaultValue);\n      return defaultValue;\n    }\n  };\n\n  return MapWithDefault;\n}(MapWithDeprecations);\n\n/**\n@module ember-data\n*/\n\n/**\n  Holds validation errors for a given record, organized by attribute names.\n\n  Every `DS.Model` has an `errors` property that is an instance of\n  `DS.Errors`. This can be used to display validation error\n  messages returned from the server when a `record.save()` rejects.\n\n  For Example, if you had a `User` model that looked like this:\n\n  ```app/models/user.js\n  import DS from 'ember-data';\n\n  export default DS.Model.extend({\n    username: DS.attr('string'),\n    email: DS.attr('string')\n  });\n  ```\n  And you attempted to save a record that did not validate on the backend:\n\n  ```javascript\n  let user = store.createRecord('user', {\n    username: 'tomster',\n    email: 'invalidEmail'\n  });\n  user.save();\n  ```\n\n  Your backend would be expected to return an error response that described\n  the problem, so that error messages can be generated on the app.\n\n  API responses will be translated into instances of `DS.Errors` differently,\n  depending on the specific combination of adapter and serializer used. You\n  may want to check the documentation or the source code of the libraries\n  that you are using, to know how they expect errors to be communicated.\n\n  Errors can be displayed to the user by accessing their property name\n  to get an array of all the error objects for that property. Each\n  error object is a JavaScript object with two keys:\n\n  - `message` A string containing the error message from the backend\n  - `attribute` The name of the property associated with this error message\n\n  ```handlebars\n  <label>Username: {{input value=username}} </label>\n  {{#each model.errors.username as |error|}}\n    <div class=\"error\">\n      {{error.message}}\n    </div>\n  {{/each}}\n\n  <label>Email: {{input value=email}} </label>\n  {{#each model.errors.email as |error|}}\n    <div class=\"error\">\n      {{error.message}}\n    </div>\n  {{/each}}\n  ```\n\n  You can also access the special `messages` property on the error\n  object to get an array of all the error strings.\n\n  ```handlebars\n  {{#each model.errors.messages as |message|}}\n    <div class=\"error\">\n      {{message}}\n    </div>\n  {{/each}}\n  ```\n\n  @class Errors\n  @namespace DS\n  @extends Ember.Object\n  @uses Ember.Enumerable\n  @uses Ember.Evented\n */\nvar Errors = Ember.ArrayProxy.extend(Ember.Evented, {\n  /**\n    Register with target handler\n     @method registerHandlers\n    @param {Object} target\n    @param {Function} becameInvalid\n    @param {Function} becameValid\n    @deprecated\n  */\n  registerHandlers: function registerHandlers(target, becameInvalid, becameValid) {\n    (true && !(false) && Ember.deprecate('Record errors will no longer be evented.', false, {\n      id: 'ds.errors.registerHandlers',\n      until: '3.0.0'\n    }));\n\n\n    this._registerHandlers(target, becameInvalid, becameValid);\n  },\n\n\n  /**\n    Register with target handler\n     @method _registerHandlers\n    @private\n  */\n  _registerHandlers: function _registerHandlers(target, becameInvalid, becameValid) {\n    this.on('becameInvalid', target, becameInvalid);\n    this.on('becameValid', target, becameValid);\n  },\n\n\n  /**\n    @property errorsByAttributeName\n    @type {MapWithDefault}\n    @private\n  */\n  errorsByAttributeName: Ember.computed(function () {\n    return new MapWithDefault({\n      defaultValue: function defaultValue() {\n        return Ember.A();\n      }\n    });\n  }),\n\n  /**\n    Returns errors for a given attribute\n     ```javascript\n    let user = store.createRecord('user', {\n      username: 'tomster',\n      email: 'invalidEmail'\n    });\n    user.save().catch(function(){\n      user.get('errors').errorsFor('email'); // returns:\n      // [{attribute: \"email\", message: \"Doesn't look like a valid email.\"}]\n    });\n    ```\n     @method errorsFor\n    @param {String} attribute\n    @return {Array}\n  */\n  errorsFor: function errorsFor(attribute) {\n    return Ember.get(this, 'errorsByAttributeName').get(attribute);\n  },\n\n\n  /**\n    An array containing all of the error messages for this\n    record. This is useful for displaying all errors to the user.\n     ```handlebars\n    {{#each model.errors.messages as |message|}}\n      <div class=\"error\">\n        {{message}}\n      </div>\n    {{/each}}\n    ```\n     @property messages\n    @type {Array}\n  */\n  messages: Ember.computed.mapBy('content', 'message'),\n\n  /**\n    @property content\n    @type {Array}\n    @private\n  */\n  content: Ember.computed(function () {\n    return Ember.A();\n  }),\n\n  /**\n    @method unknownProperty\n    @private\n  */\n  unknownProperty: function unknownProperty(attribute) {\n    var errors = this.errorsFor(attribute);\n    if (errors.length === 0) {\n      return undefined;\n    }\n    return errors;\n  },\n\n\n  /**\n    Total number of errors.\n     @property length\n    @type {Number}\n    @readOnly\n  */\n\n  /**\n    @property isEmpty\n    @type {Boolean}\n    @readOnly\n  */\n  isEmpty: Ember.computed.not('length').readOnly(),\n\n  /**\n    Adds error messages to a given attribute and sends\n    `becameInvalid` event to the record.\n     Example:\n     ```javascript\n    if (!user.get('username') {\n      user.get('errors').add('username', 'This field is required');\n    }\n    ```\n     @method add\n    @param {String} attribute\n    @param {(Array|String)} messages\n    @deprecated\n  */\n  add: function add(attribute, messages) {\n    (true && Ember.warn('Interacting with a record errors object will no longer change the record state.', false, {\n      id: 'ds.errors.add'\n    }));\n\n\n    var wasEmpty = Ember.get(this, 'isEmpty');\n\n    this._add(attribute, messages);\n\n    if (wasEmpty && !Ember.get(this, 'isEmpty')) {\n      this.trigger('becameInvalid');\n    }\n  },\n\n\n  /**\n    Adds error messages to a given attribute without sending event.\n     @method _add\n    @private\n  */\n  _add: function _add(attribute, messages) {\n    messages = this._findOrCreateMessages(attribute, messages);\n    this.addObjects(messages);\n    Ember.get(this, 'errorsByAttributeName').get(attribute).addObjects(messages);\n\n    this.notifyPropertyChange(attribute);\n  },\n\n\n  /**\n    @method _findOrCreateMessages\n    @private\n  */\n  _findOrCreateMessages: function _findOrCreateMessages(attribute, messages) {\n    var errors = this.errorsFor(attribute);\n    var messagesArray = Ember.makeArray(messages);\n    var _messages = new Array(messagesArray.length);\n\n    for (var i = 0; i < messagesArray.length; i++) {\n      var message = messagesArray[i];\n      var err = errors.findBy('message', message);\n      if (err) {\n        _messages[i] = err;\n      } else {\n        _messages[i] = {\n          attribute: attribute,\n          message: message\n        };\n      }\n    }\n\n    return _messages;\n  },\n\n\n  /**\n    Removes all error messages from the given attribute and sends\n    `becameValid` event to the record if there no more errors left.\n     Example:\n     ```app/models/user.js\n    import DS from 'ember-data';\n     export default DS.Model.extend({\n      email: DS.attr('string'),\n      twoFactorAuth: DS.attr('boolean'),\n      phone: DS.attr('string')\n    });\n    ```\n     ```app/routes/user/edit.js\n    import Route from '@ember/routing/route';\n     export default Route.extend({\n      actions: {\n        save: function(user) {\n          if (!user.get('twoFactorAuth')) {\n            user.get('errors').remove('phone');\n          }\n          user.save();\n        }\n      }\n    });\n    ```\n     @method remove\n    @param {String} attribute\n    @deprecated\n  */\n  remove: function remove(attribute) {\n    (true && Ember.warn('Interacting with a record errors object will no longer change the record state.', false, {\n      id: 'ds.errors.remove'\n    }));\n\n\n    if (Ember.get(this, 'isEmpty')) {\n      return;\n    }\n\n    this._remove(attribute);\n\n    if (Ember.get(this, 'isEmpty')) {\n      this.trigger('becameValid');\n    }\n  },\n\n\n  /**\n    Removes all error messages from the given attribute without sending event.\n     @method _remove\n    @private\n  */\n  _remove: function _remove(attribute) {\n    if (Ember.get(this, 'isEmpty')) {\n      return;\n    }\n\n    var content = this.rejectBy('attribute', attribute);\n    Ember.set(this, 'content', content);\n    Ember.get(this, 'errorsByAttributeName').delete(attribute);\n\n    this.notifyPropertyChange(attribute);\n    this.notifyPropertyChange('length');\n  },\n\n\n  /**\n    Removes all error messages and sends `becameValid` event\n    to the record.\n     Example:\n     ```app/routes/user/edit.js\n  import Route from '@ember/routing/route';\n     export default Route.extend({\n      actions: {\n        retrySave: function(user) {\n          user.get('errors').clear();\n          user.save();\n        }\n      }\n    });\n    ```\n     @method clear\n    @deprecated\n  */\n  clear: function clear() {\n    (true && Ember.warn('Interacting with a record errors object will no longer change the record state.', false, {\n      id: 'ds.errors.clear'\n    }));\n\n\n    if (Ember.get(this, 'isEmpty')) {\n      return;\n    }\n\n    this._clear();\n    this.trigger('becameValid');\n  },\n\n\n  /**\n    Removes all error messages.\n    to the record.\n     @method _clear\n    @private\n  */\n  _clear: function _clear() {\n    if (Ember.get(this, 'isEmpty')) {\n      return;\n    }\n\n    var errorsByAttributeName = Ember.get(this, 'errorsByAttributeName');\n    var attributes = Ember.A();\n\n    errorsByAttributeName.forEach(function (_, attribute) {\n      attributes.push(attribute);\n    });\n\n    errorsByAttributeName.clear();\n    attributes.forEach(function (attribute) {\n      this.notifyPropertyChange(attribute);\n    }, this);\n\n    Ember.ArrayProxy.prototype.clear.call(this);\n  },\n\n\n  /**\n    Checks if there is error messages for the given attribute.\n     ```app/routes/user/edit.js\n    import Route from '@ember/routing/route';\n     export default Route.extend({\n      actions: {\n        save: function(user) {\n          if (user.get('errors').has('email')) {\n            return alert('Please update your email before attempting to save.');\n          }\n          user.save();\n        }\n      }\n    });\n    ```\n     @method has\n    @param {String} attribute\n    @return {Boolean} true if there some errors on given attribute\n  */\n  has: function has(attribute) {\n    return this.errorsFor(attribute).length > 0;\n  }\n});\n\nfunction isEnabled() {\n  var _Ember$FEATURES;\n\n  return (_Ember$FEATURES = Ember.FEATURES).isEnabled.apply(_Ember$FEATURES, arguments);\n}\n\n/*\n  This file encapsulates the various states that a record can transition\n  through during its lifecycle.\n*/\n/**\n  ### State\n\n  Each record has a `currentState` property that explicitly tracks what\n  state a record is in at any given time. For instance, if a record is\n  newly created and has not yet been sent to the adapter to be saved,\n  it would be in the `root.loaded.created.uncommitted` state.  If a\n  record has had local modifications made to it that are in the\n  process of being saved, the record would be in the\n  `root.loaded.updated.inFlight` state. (This state paths will be\n  explained in more detail below.)\n\n  Events are sent by the record or its store to the record's\n  `currentState` property. How the state reacts to these events is\n  dependent on which state it is in. In some states, certain events\n  will be invalid and will cause an exception to be raised.\n\n  States are hierarchical and every state is a substate of the\n  `RootState`. For example, a record can be in the\n  `root.deleted.uncommitted` state, then transition into the\n  `root.deleted.inFlight` state. If a child state does not implement\n  an event handler, the state manager will attempt to invoke the event\n  on all parent states until the root state is reached. The state\n  hierarchy of a record is described in terms of a path string. You\n  can determine a record's current state by getting the state's\n  `stateName` property:\n\n  ```javascript\n  record.get('currentState.stateName');\n  //=> \"root.created.uncommitted\"\n   ```\n\n  The hierarchy of valid states that ship with ember data looks like\n  this:\n\n  ```text\n  * root\n    * deleted\n      * saved\n      * uncommitted\n      * inFlight\n    * empty\n    * loaded\n      * created\n        * uncommitted\n        * inFlight\n      * saved\n      * updated\n        * uncommitted\n        * inFlight\n    * loading\n  ```\n\n  The `DS.Model` states are themselves stateless. What that means is\n  that, the hierarchical states that each of *those* points to is a\n  shared data structure. For performance reasons, instead of each\n  record getting its own copy of the hierarchy of states, each record\n  points to this global, immutable shared instance. How does a state\n  know which record it should be acting on? We pass the record\n  instance into the state's event handlers as the first argument.\n\n  The record passed as the first parameter is where you should stash\n  state about the record if needed; you should never store data on the state\n  object itself.\n\n  ### Events and Flags\n\n  A state may implement zero or more events and flags.\n\n  #### Events\n\n  Events are named functions that are invoked when sent to a record. The\n  record will first look for a method with the given name on the\n  current state. If no method is found, it will search the current\n  state's parent, and then its grandparent, and so on until reaching\n  the top of the hierarchy. If the root is reached without an event\n  handler being found, an exception will be raised. This can be very\n  helpful when debugging new features.\n\n  Here's an example implementation of a state with a `myEvent` event handler:\n\n  ```javascript\n  aState: DS.State.create({\n    myEvent: function(manager, param) {\n      console.log(\"Received myEvent with\", param);\n    }\n  })\n  ```\n\n  To trigger this event:\n\n  ```javascript\n  record.send('myEvent', 'foo');\n  //=> \"Received myEvent with foo\"\n  ```\n\n  Note that an optional parameter can be sent to a record's `send()` method,\n  which will be passed as the second parameter to the event handler.\n\n  Events should transition to a different state if appropriate. This can be\n  done by calling the record's `transitionTo()` method with a path to the\n  desired state. The state manager will attempt to resolve the state path\n  relative to the current state. If no state is found at that path, it will\n  attempt to resolve it relative to the current state's parent, and then its\n  parent, and so on until the root is reached. For example, imagine a hierarchy\n  like this:\n\n      * created\n        * uncommitted <-- currentState\n        * inFlight\n      * updated\n        * inFlight\n\n  If we are currently in the `uncommitted` state, calling\n  `transitionTo('inFlight')` would transition to the `created.inFlight` state,\n  while calling `transitionTo('updated.inFlight')` would transition to\n  the `updated.inFlight` state.\n\n  Remember that *only events* should ever cause a state transition. You should\n  never call `transitionTo()` from outside a state's event handler. If you are\n  tempted to do so, create a new event and send that to the state manager.\n\n  #### Flags\n\n  Flags are Boolean values that can be used to introspect a record's current\n  state in a more user-friendly way than examining its state path. For example,\n  instead of doing this:\n\n  ```javascript\n  var statePath = record.get('stateManager.currentPath');\n  if (statePath === 'created.inFlight') {\n    doSomething();\n  }\n  ```\n\n  You can say:\n\n  ```javascript\n  if (record.get('isNew') && record.get('isSaving')) {\n    doSomething();\n  }\n  ```\n\n  If your state does not set a value for a given flag, the value will\n  be inherited from its parent (or the first place in the state hierarchy\n  where it is defined).\n\n  The current set of flags are defined below. If you want to add a new flag,\n  in addition to the area below, you will also need to declare it in the\n  `DS.Model` class.\n\n\n   * [isEmpty](DS.Model.html#property_isEmpty)\n   * [isLoading](DS.Model.html#property_isLoading)\n   * [isLoaded](DS.Model.html#property_isLoaded)\n   * [hasDirtyAttributes](DS.Model.html#property_hasDirtyAttributes)\n   * [isSaving](DS.Model.html#property_isSaving)\n   * [isDeleted](DS.Model.html#property_isDeleted)\n   * [isNew](DS.Model.html#property_isNew)\n   * [isValid](DS.Model.html#property_isValid)\n\n  @namespace DS\n  @class RootState\n*/\n\nfunction _didSetProperty(internalModel, context) {\n  if (context.value === context.originalValue) {\n    delete internalModel._attributes[context.name];\n    internalModel.send('propertyWasReset', context.name);\n  } else if (context.value !== context.oldValue) {\n    internalModel.send('becomeDirty');\n  }\n\n  internalModel.updateRecordArrays();\n}\n\n// Implementation notes:\n//\n// Each state has a boolean value for all of the following flags:\n//\n// * isLoaded: The record has a populated `data` property. When a\n//   record is loaded via `store.find`, `isLoaded` is false\n//   until the adapter sets it. When a record is created locally,\n//   its `isLoaded` property is always true.\n// * isDirty: The record has local changes that have not yet been\n//   saved by the adapter. This includes records that have been\n//   created (but not yet saved) or deleted.\n// * isSaving: The record has been committed, but\n//   the adapter has not yet acknowledged that the changes have\n//   been persisted to the backend.\n// * isDeleted: The record was marked for deletion. When `isDeleted`\n//   is true and `isDirty` is true, the record is deleted locally\n//   but the deletion was not yet persisted. When `isSaving` is\n//   true, the change is in-flight. When both `isDirty` and\n//   `isSaving` are false, the change has persisted.\n// * isNew: The record was created on the client and the adapter\n//   did not yet report that it was successfully saved.\n// * isValid: The adapter did not report any server-side validation\n//   failures.\n\n// The dirty state is a abstract state whose functionality is\n// shared between the `created` and `updated` states.\n//\n// The deleted state shares the `isDirty` flag with the\n// subclasses of `DirtyState`, but with a very different\n// implementation.\n//\n// Dirty states have three child states:\n//\n// `uncommitted`: the store has not yet handed off the record\n//   to be saved.\n// `inFlight`: the store has handed off the record to be saved,\n//   but the adapter has not yet acknowledged success.\n// `invalid`: the record has invalid information and cannot be\n//   sent to the adapter yet.\n/**\n  @module ember-data\n*/\nvar DirtyState = {\n  initialState: 'uncommitted',\n\n  // FLAGS\n  isDirty: true,\n\n  // SUBSTATES\n\n  // When a record first becomes dirty, it is `uncommitted`.\n  // This means that there are local pending changes, but they\n  // have not yet begun to be saved, and are not invalid.\n  uncommitted: {\n    // EVENTS\n    didSetProperty: _didSetProperty,\n\n    //TODO(Igor) reloading now triggers a\n    //loadingData event, though it seems fine?\n    loadingData: function loadingData() {},\n    propertyWasReset: function propertyWasReset(internalModel, name) {\n      if (!internalModel.hasChangedAttributes()) {\n        internalModel.send('rolledBack');\n      }\n    },\n    pushedData: function pushedData(internalModel) {\n      internalModel.updateChangedAttributes();\n\n      if (!internalModel.hasChangedAttributes()) {\n        internalModel.transitionTo('loaded.saved');\n      }\n    },\n    becomeDirty: function becomeDirty() {},\n    willCommit: function willCommit(internalModel) {\n      internalModel.transitionTo('inFlight');\n    },\n    reloadRecord: function reloadRecord(internalModel, resolve) {\n      resolve(internalModel.store._reloadRecord(internalModel));\n    },\n    rolledBack: function rolledBack(internalModel) {\n      internalModel.transitionTo('loaded.saved');\n    },\n    becameInvalid: function becameInvalid(internalModel) {\n      internalModel.transitionTo('invalid');\n    },\n    rollback: function rollback(internalModel) {\n      internalModel.rollbackAttributes();\n      internalModel.triggerLater('ready');\n    }\n  },\n\n  // Once a record has been handed off to the adapter to be\n  // saved, it is in the 'in flight' state. Changes to the\n  // record cannot be made during this window.\n  inFlight: {\n    // FLAGS\n    isSaving: true,\n\n    // EVENTS\n    didSetProperty: _didSetProperty,\n    becomeDirty: function becomeDirty() {},\n    pushedData: function pushedData() {},\n\n\n    unloadRecord: assertAgainstUnloadRecord,\n\n    // TODO: More robust semantics around save-while-in-flight\n    willCommit: function willCommit() {},\n    didCommit: function didCommit(internalModel) {\n      internalModel.transitionTo('saved');\n      internalModel.send('invokeLifecycleCallbacks', this.dirtyType);\n    },\n    becameInvalid: function becameInvalid(internalModel) {\n      internalModel.transitionTo('invalid');\n      internalModel.send('invokeLifecycleCallbacks');\n    },\n    becameError: function becameError(internalModel) {\n      internalModel.transitionTo('uncommitted');\n      internalModel.triggerLater('becameError', internalModel);\n    }\n  },\n\n  // A record is in the `invalid` if the adapter has indicated\n  // the the record failed server-side invalidations.\n  invalid: {\n    // FLAGS\n    isValid: false,\n\n    // EVENTS\n    deleteRecord: function deleteRecord(internalModel) {\n      internalModel.transitionTo('deleted.uncommitted');\n    },\n    didSetProperty: function didSetProperty(internalModel, context) {\n      internalModel.removeErrorMessageFromAttribute(context.name);\n\n      _didSetProperty(internalModel, context);\n\n      if (!internalModel.hasErrors()) {\n        this.becameValid(internalModel);\n      }\n    },\n    becameInvalid: function becameInvalid() {},\n    becomeDirty: function becomeDirty() {},\n    pushedData: function pushedData() {},\n    willCommit: function willCommit(internalModel) {\n      internalModel.clearErrorMessages();\n      internalModel.transitionTo('inFlight');\n    },\n    rolledBack: function rolledBack(internalModel) {\n      internalModel.clearErrorMessages();\n      internalModel.transitionTo('loaded.saved');\n      internalModel.triggerLater('ready');\n    },\n    becameValid: function becameValid(internalModel) {\n      internalModel.transitionTo('uncommitted');\n    },\n    invokeLifecycleCallbacks: function invokeLifecycleCallbacks(internalModel) {\n      internalModel.triggerLater('becameInvalid', internalModel);\n    }\n  }\n};\n\n// The created and updated states are created outside the state\n// chart so we can reopen their substates and add mixins as\n// necessary.\n\nfunction deepClone(object) {\n  var clone = {};\n  var value = void 0;\n\n  for (var prop in object) {\n    value = object[prop];\n    if (value && typeof value === 'object') {\n      clone[prop] = deepClone(value);\n    } else {\n      clone[prop] = value;\n    }\n  }\n\n  return clone;\n}\n\nfunction mixin(original, hash) {\n  for (var prop in hash) {\n    original[prop] = hash[prop];\n  }\n\n  return original;\n}\n\nfunction dirtyState(options) {\n  var newState = deepClone(DirtyState);\n  return mixin(newState, options);\n}\n\nvar createdState = dirtyState({\n  dirtyType: 'created',\n  // FLAGS\n  isNew: true\n});\n\ncreatedState.invalid.rolledBack = function (internalModel) {\n  internalModel.transitionTo('deleted.saved');\n};\n\ncreatedState.uncommitted.rolledBack = function (internalModel) {\n  internalModel.transitionTo('deleted.saved');\n};\n\nvar updatedState = dirtyState({\n  dirtyType: 'updated'\n});\n\nfunction createdStateDeleteRecord(internalModel) {\n  internalModel.transitionTo('deleted.saved');\n  internalModel.send('invokeLifecycleCallbacks');\n}\n\ncreatedState.uncommitted.deleteRecord = createdStateDeleteRecord;\n\ncreatedState.invalid.deleteRecord = createdStateDeleteRecord;\n\ncreatedState.uncommitted.rollback = function (internalModel) {\n  DirtyState.uncommitted.rollback.apply(this, arguments);\n  internalModel.transitionTo('deleted.saved');\n};\n\ncreatedState.uncommitted.pushedData = function (internalModel) {\n  internalModel.transitionTo('loaded.updated.uncommitted');\n  internalModel.triggerLater('didLoad');\n};\n\ncreatedState.uncommitted.propertyWasReset = function () {};\n\nfunction assertAgainstUnloadRecord(internalModel) {\n  (true && !(false) && Ember.assert(\"You can only unload a record which is not inFlight. `\" + internalModel + \"`\", false));\n}\n\nupdatedState.invalid.becameValid = function (internalModel) {\n  // we're eagerly transition into the loaded.saved state, even though we could\n  // be still dirty; but the setup hook of the loaded.saved state checks for\n  // dirty attributes and transitions into the corresponding dirty state\n  internalModel.transitionTo('loaded.saved');\n};\n\nupdatedState.inFlight.unloadRecord = assertAgainstUnloadRecord;\n\nupdatedState.uncommitted.deleteRecord = function (internalModel) {\n  internalModel.transitionTo('deleted.uncommitted');\n};\n\nvar RootState = {\n  // FLAGS\n  isEmpty: false,\n  isLoading: false,\n  isLoaded: false,\n  isDirty: false,\n  isSaving: false,\n  isDeleted: false,\n  isNew: false,\n  isValid: true,\n\n  // DEFAULT EVENTS\n\n  // Trying to roll back if you're not in the dirty state\n  // doesn't change your state. For example, if you're in the\n  // in-flight state, rolling back the record doesn't move\n  // you out of the in-flight state.\n  rolledBack: function rolledBack() {},\n  unloadRecord: function unloadRecord(internalModel) {},\n  propertyWasReset: function propertyWasReset() {},\n\n\n  // SUBSTATES\n\n  // A record begins its lifecycle in the `empty` state.\n  // If its data will come from the adapter, it will\n  // transition into the `loading` state. Otherwise, if\n  // the record is being created on the client, it will\n  // transition into the `created` state.\n  empty: {\n    isEmpty: true,\n\n    // EVENTS\n    loadingData: function loadingData(internalModel, promise) {\n      internalModel._loadingPromise = promise;\n      internalModel.transitionTo('loading');\n    },\n    loadedData: function loadedData(internalModel) {\n      internalModel.transitionTo('loaded.created.uncommitted');\n      internalModel.triggerLater('ready');\n    },\n    pushedData: function pushedData(internalModel) {\n      internalModel.transitionTo('loaded.saved');\n      internalModel.triggerLater('didLoad');\n      internalModel.triggerLater('ready');\n    }\n  },\n\n  // A record enters this state when the store asks\n  // the adapter for its data. It remains in this state\n  // until the adapter provides the requested data.\n  //\n  // Usually, this process is asynchronous, using an\n  // XHR to retrieve the data.\n  loading: {\n    // FLAGS\n    isLoading: true,\n\n    exit: function exit(internalModel) {\n      internalModel._loadingPromise = null;\n    },\n\n\n    // EVENTS\n    pushedData: function pushedData(internalModel) {\n      internalModel.transitionTo('loaded.saved');\n      internalModel.triggerLater('didLoad');\n      internalModel.triggerLater('ready');\n      //TODO this seems out of place here\n      internalModel.didCleanError();\n    },\n    becameError: function becameError(internalModel) {\n      internalModel.triggerLater('becameError', internalModel);\n    },\n    notFound: function notFound(internalModel) {\n      internalModel.transitionTo('empty');\n    }\n  },\n\n  // A record enters this state when its data is populated.\n  // Most of a record's lifecycle is spent inside substates\n  // of the `loaded` state.\n  loaded: {\n    initialState: 'saved',\n\n    // FLAGS\n    isLoaded: true,\n\n    //TODO(Igor) Reloading now triggers a loadingData event,\n    //but it should be ok?\n    loadingData: function loadingData() {},\n\n\n    // SUBSTATES\n\n    // If there are no local changes to a record, it remains\n    // in the `saved` state.\n    saved: {\n      setup: function setup(internalModel) {\n        if (internalModel.hasChangedAttributes()) {\n          internalModel.adapterDidDirty();\n        }\n      },\n\n\n      // EVENTS\n      didSetProperty: _didSetProperty,\n\n      pushedData: function pushedData() {},\n      becomeDirty: function becomeDirty(internalModel) {\n        internalModel.transitionTo('updated.uncommitted');\n      },\n      willCommit: function willCommit(internalModel) {\n        internalModel.transitionTo('updated.inFlight');\n      },\n      reloadRecord: function reloadRecord(internalModel, resolve) {\n        resolve(internalModel.store._reloadRecord(internalModel));\n      },\n      deleteRecord: function deleteRecord(internalModel) {\n        internalModel.transitionTo('deleted.uncommitted');\n      },\n      unloadRecord: function unloadRecord(internalModel) {},\n      didCommit: function didCommit() {},\n\n\n      // loaded.saved.notFound would be triggered by a failed\n      // `reload()` on an unchanged record\n      notFound: function notFound() {}\n    },\n\n    // A record is in this state after it has been locally\n    // created but before the adapter has indicated that\n    // it has been saved.\n    created: createdState,\n\n    // A record is in this state if it has already been\n    // saved to the server, but there are new local changes\n    // that have not yet been saved.\n    updated: updatedState\n  },\n\n  // A record is in this state if it was deleted from the store.\n  deleted: {\n    initialState: 'uncommitted',\n    dirtyType: 'deleted',\n\n    // FLAGS\n    isDeleted: true,\n    isLoaded: true,\n    isDirty: true,\n\n    // TRANSITIONS\n    setup: function setup(internalModel) {\n      internalModel.updateRecordArrays();\n    },\n\n\n    // SUBSTATES\n\n    // When a record is deleted, it enters the `start`\n    // state. It will exit this state when the record\n    // starts to commit.\n    uncommitted: {\n\n      // EVENTS\n\n      willCommit: function willCommit(internalModel) {\n        internalModel.transitionTo('inFlight');\n      },\n      rollback: function rollback(internalModel) {\n        internalModel.rollbackAttributes();\n        internalModel.triggerLater('ready');\n      },\n      pushedData: function pushedData() {},\n      becomeDirty: function becomeDirty() {},\n      deleteRecord: function deleteRecord() {},\n      rolledBack: function rolledBack(internalModel) {\n        internalModel.transitionTo('loaded.saved');\n        internalModel.triggerLater('ready');\n      }\n    },\n\n    // After a record starts committing, but\n    // before the adapter indicates that the deletion\n    // has saved to the server, a record is in the\n    // `inFlight` substate of `deleted`.\n    inFlight: {\n      // FLAGS\n      isSaving: true,\n\n      // EVENTS\n\n      unloadRecord: assertAgainstUnloadRecord,\n\n      // TODO: More robust semantics around save-while-in-flight\n      willCommit: function willCommit() {},\n      didCommit: function didCommit(internalModel) {\n        internalModel.transitionTo('saved');\n\n        internalModel.send('invokeLifecycleCallbacks');\n      },\n      becameError: function becameError(internalModel) {\n        internalModel.transitionTo('uncommitted');\n        internalModel.triggerLater('becameError', internalModel);\n      },\n      becameInvalid: function becameInvalid(internalModel) {\n        internalModel.transitionTo('invalid');\n        internalModel.triggerLater('becameInvalid', internalModel);\n      }\n    },\n\n    // Once the adapter indicates that the deletion has\n    // been saved, the record enters the `saved` substate\n    // of `deleted`.\n    saved: {\n      // FLAGS\n      isDirty: false,\n\n      setup: function setup(internalModel) {\n        internalModel.removeFromInverseRelationships();\n      },\n      invokeLifecycleCallbacks: function invokeLifecycleCallbacks(internalModel) {\n        internalModel.triggerLater('didDelete', internalModel);\n        internalModel.triggerLater('didCommit', internalModel);\n      },\n      willCommit: function willCommit() {},\n      didCommit: function didCommit() {}\n    },\n\n    invalid: {\n      isValid: false,\n\n      didSetProperty: function didSetProperty(internalModel, context) {\n        internalModel.removeErrorMessageFromAttribute(context.name);\n\n        _didSetProperty(internalModel, context);\n\n        if (!internalModel.hasErrors()) {\n          this.becameValid(internalModel);\n        }\n      },\n      becameInvalid: function becameInvalid() {},\n      becomeDirty: function becomeDirty() {},\n      deleteRecord: function deleteRecord() {},\n      willCommit: function willCommit() {},\n      rolledBack: function rolledBack(internalModel) {\n        internalModel.clearErrorMessages();\n        internalModel.transitionTo('loaded.saved');\n        internalModel.triggerLater('ready');\n      },\n      becameValid: function becameValid(internalModel) {\n        internalModel.transitionTo('uncommitted');\n      }\n    }\n  },\n\n  invokeLifecycleCallbacks: function invokeLifecycleCallbacks(internalModel, dirtyType) {\n    if (dirtyType === 'created') {\n      internalModel.triggerLater('didCreate', internalModel);\n    } else {\n      internalModel.triggerLater('didUpdate', internalModel);\n    }\n\n    internalModel.triggerLater('didCommit', internalModel);\n  }\n};\n\nfunction wireState(object, parent, name) {\n  // TODO: Use Object.create and copy instead\n  object = mixin(parent ? Object.create(parent) : {}, object);\n  object.parentState = parent;\n  object.stateName = name;\n\n  for (var prop in object) {\n    if (!object.hasOwnProperty(prop) || prop === 'parentState' || prop === 'stateName') {\n      continue;\n    }\n    if (typeof object[prop] === 'object') {\n      object[prop] = wireState(object[prop], object, name + '.' + prop);\n    }\n  }\n\n  return object;\n}\n\nvar RootState$1 = wireState(RootState, null, 'root');\n\n// All modelNames are dasherized internally. Changing this function may\n// require changes to other normalization hooks (such as typeForRoot).\n\n/**\n This method normalizes a modelName into the format Ember Data uses\n internally.\n\n  @method normalizeModelName\n  @public\n  @param {String} modelName\n  @return {String} normalizedModelName\n  @for DS\n*/\nfunction normalizeModelName(modelName) {\n  return Ember.String.dasherize(modelName);\n}\n\nfunction typeForRelationshipMeta(meta) {\n  var modelName = void 0;\n\n  modelName = meta.type || meta.key;\n  if (meta.kind === 'hasMany') {\n    modelName = emberInflector.singularize(normalizeModelName(modelName));\n  }\n  return modelName;\n}\n\nfunction relationshipFromMeta(meta) {\n  return {\n    key: meta.key,\n    kind: meta.kind,\n    type: typeForRelationshipMeta(meta),\n    options: meta.options,\n    name: meta.name,\n    parentType: meta.parentType,\n    isRelationship: true\n  };\n}\n\nvar relationshipsDescriptor = Ember.computed(function () {\n  var map = new MapWithDefault({\n    defaultValue: function defaultValue() {\n      return [];\n    }\n  });\n\n  // Loop through each computed property on the class\n  this.eachComputedProperty(function (name, meta) {\n    // If the computed property is a relationship, add\n    // it to the map.\n    if (meta.isRelationship) {\n      meta.key = name;\n      var relationshipsForType = map.get(typeForRelationshipMeta(meta));\n\n      relationshipsForType.push({\n        name: name,\n        kind: meta.kind\n      });\n    }\n  });\n\n  return map;\n}).readOnly();\n\nvar relatedTypesDescriptor = Ember.computed(function () {\n  var _this = this;\n\n  var modelName = void 0;\n  var types = Ember.A();\n\n  // Loop through each computed property on the class,\n  // and create an array of the unique types involved\n  // in relationships\n  this.eachComputedProperty(function (name, meta) {\n    if (meta.isRelationship) {\n      meta.key = name;\n      modelName = typeForRelationshipMeta(meta);\n\n      (true && !(modelName) && Ember.assert('You specified a hasMany (' + meta.type + ') on ' + meta.parentType + ' but ' + meta.type + ' was not found.', modelName));\n\n\n      if (!types.includes(modelName)) {\n        (true && !(!!modelName) && Ember.assert('Trying to sideload ' + name + ' on ' + _this.toString() + ' but the type doesn\\'t exist.', !!modelName));\n\n        types.push(modelName);\n      }\n    }\n  });\n\n  return types;\n}).readOnly();\n\nvar relationshipsByNameDescriptor = Ember.computed(function () {\n  var map = new MapWithDeprecations();\n\n  this.eachComputedProperty(function (name, meta) {\n    if (meta.isRelationship) {\n      meta.key = name;\n      var relationship = relationshipFromMeta(meta);\n      relationship.type = typeForRelationshipMeta(meta);\n      map.set(name, relationship);\n    }\n  });\n\n  return map;\n}).readOnly();\n\n/**\n  @module ember-data\n*/\n\nfunction findPossibleInverses(type, inverseType, name, relationshipsSoFar) {\n  var possibleRelationships = relationshipsSoFar || [];\n\n  var relationshipMap = Ember.get(inverseType, 'relationships');\n  if (!relationshipMap) {\n    return possibleRelationships;\n  }\n\n  var relationships = relationshipMap.get(type.modelName).filter(function (relationship) {\n    var optionsForRelationship = inverseType.metaForProperty(relationship.name).options;\n\n    if (!optionsForRelationship.inverse && optionsForRelationship.inverse !== null) {\n      return true;\n    }\n\n    return name === optionsForRelationship.inverse;\n  });\n\n  if (relationships) {\n    possibleRelationships.push.apply(possibleRelationships, relationships);\n  }\n\n  //Recurse to support polymorphism\n  if (type.superclass) {\n    findPossibleInverses(type.superclass, inverseType, name, possibleRelationships);\n  }\n\n  return possibleRelationships;\n}\n\nfunction intersection(array1, array2) {\n  var result = [];\n  array1.forEach(function (element) {\n    if (array2.indexOf(element) >= 0) {\n      result.push(element);\n    }\n  });\n\n  return result;\n}\n\nvar RESERVED_MODEL_PROPS = ['currentState', 'data', 'store'];\n\nvar retrieveFromCurrentState = Ember.computed('currentState', function (key) {\n  return Ember.get(this._internalModel.currentState, key);\n}).readOnly();\n\n/**\n\n  The model class that all Ember Data records descend from.\n  This is the public API of Ember Data models. If you are using Ember Data\n  in your application, this is the class you should use.\n  If you are working on Ember Data internals, you most likely want to be dealing\n  with `InternalModel`\n\n  @class Model\n  @namespace DS\n  @extends Ember.Object\n  @uses Ember.Evented\n*/\nvar Model = Ember.Object.extend(Ember.Evented, {\n  _internalModel: null,\n  store: null,\n  __defineNonEnumerable: function __defineNonEnumerable(property) {\n    this[property.name] = property.descriptor.value;\n  },\n\n\n  /**\n    If this property is `true` the record is in the `empty`\n    state. Empty is the first state all records enter after they have\n    been created. Most records created by the store will quickly\n    transition to the `loading` state if data needs to be fetched from\n    the server or the `created` state if the record is created on the\n    client. A record can also enter the empty state if the adapter is\n    unable to locate the record.\n     @property isEmpty\n    @type {Boolean}\n    @readOnly\n  */\n  isEmpty: retrieveFromCurrentState,\n  /**\n    If this property is `true` the record is in the `loading` state. A\n    record enters this state when the store asks the adapter for its\n    data. It remains in this state until the adapter provides the\n    requested data.\n     @property isLoading\n    @type {Boolean}\n    @readOnly\n  */\n  isLoading: retrieveFromCurrentState,\n  /**\n    If this property is `true` the record is in the `loaded` state. A\n    record enters this state when its data is populated. Most of a\n    record's lifecycle is spent inside substates of the `loaded`\n    state.\n     Example\n     ```javascript\n    let record = store.createRecord('model');\n    record.get('isLoaded'); // true\n     store.findRecord('model', 1).then(function(model) {\n      model.get('isLoaded'); // true\n    });\n    ```\n     @property isLoaded\n    @type {Boolean}\n    @readOnly\n  */\n  isLoaded: retrieveFromCurrentState,\n  /**\n    If this property is `true` the record is in the `dirty` state. The\n    record has local changes that have not yet been saved by the\n    adapter. This includes records that have been created (but not yet\n    saved) or deleted.\n     Example\n     ```javascript\n    let record = store.createRecord('model');\n    record.get('hasDirtyAttributes'); // true\n     store.findRecord('model', 1).then(function(model) {\n      model.get('hasDirtyAttributes'); // false\n      model.set('foo', 'some value');\n      model.get('hasDirtyAttributes'); // true\n    });\n    ```\n     @since 1.13.0\n    @property hasDirtyAttributes\n    @type {Boolean}\n    @readOnly\n  */\n  hasDirtyAttributes: Ember.computed('currentState.isDirty', function () {\n    return this.get('currentState.isDirty');\n  }),\n  /**\n    If this property is `true` the record is in the `saving` state. A\n    record enters the saving state when `save` is called, but the\n    adapter has not yet acknowledged that the changes have been\n    persisted to the backend.\n     Example\n     ```javascript\n    let record = store.createRecord('model');\n    record.get('isSaving'); // false\n    let promise = record.save();\n    record.get('isSaving'); // true\n    promise.then(function() {\n      record.get('isSaving'); // false\n    });\n    ```\n     @property isSaving\n    @type {Boolean}\n    @readOnly\n  */\n  isSaving: retrieveFromCurrentState,\n  /**\n    If this property is `true` the record is in the `deleted` state\n    and has been marked for deletion. When `isDeleted` is true and\n    `hasDirtyAttributes` is true, the record is deleted locally but the deletion\n    was not yet persisted. When `isSaving` is true, the change is\n    in-flight. When both `hasDirtyAttributes` and `isSaving` are false, the\n    change has persisted.\n     Example\n     ```javascript\n    let record = store.createRecord('model');\n    record.get('isDeleted');    // false\n    record.deleteRecord();\n     // Locally deleted\n    record.get('isDeleted');           // true\n    record.get('hasDirtyAttributes');  // true\n    record.get('isSaving');            // false\n     // Persisting the deletion\n    let promise = record.save();\n    record.get('isDeleted');    // true\n    record.get('isSaving');     // true\n     // Deletion Persisted\n    promise.then(function() {\n      record.get('isDeleted');          // true\n      record.get('isSaving');           // false\n      record.get('hasDirtyAttributes'); // false\n    });\n    ```\n     @property isDeleted\n    @type {Boolean}\n    @readOnly\n  */\n  isDeleted: retrieveFromCurrentState,\n  /**\n    If this property is `true` the record is in the `new` state. A\n    record will be in the `new` state when it has been created on the\n    client and the adapter has not yet report that it was successfully\n    saved.\n     Example\n     ```javascript\n    let record = store.createRecord('model');\n    record.get('isNew'); // true\n     record.save().then(function(model) {\n      model.get('isNew'); // false\n    });\n    ```\n     @property isNew\n    @type {Boolean}\n    @readOnly\n  */\n  isNew: retrieveFromCurrentState,\n  /**\n    If this property is `true` the record is in the `valid` state.\n     A record will be in the `valid` state when the adapter did not report any\n    server-side validation failures.\n     @property isValid\n    @type {Boolean}\n    @readOnly\n  */\n  isValid: retrieveFromCurrentState,\n  /**\n    If the record is in the dirty state this property will report what\n    kind of change has caused it to move into the dirty\n    state. Possible values are:\n     - `created` The record has been created by the client and not yet saved to the adapter.\n    - `updated` The record has been updated by the client and not yet saved to the adapter.\n    - `deleted` The record has been deleted by the client and not yet saved to the adapter.\n     Example\n     ```javascript\n    let record = store.createRecord('model');\n    record.get('dirtyType'); // 'created'\n    ```\n     @property dirtyType\n    @type {String}\n    @readOnly\n  */\n  dirtyType: retrieveFromCurrentState,\n\n  /**\n    If `true` the adapter reported that it was unable to save local\n    changes to the backend for any reason other than a server-side\n    validation error.\n     Example\n     ```javascript\n    record.get('isError'); // false\n    record.set('foo', 'valid value');\n    record.save().then(null, function() {\n      record.get('isError'); // true\n    });\n    ```\n     @property isError\n    @type {Boolean}\n    @readOnly\n  */\n  isError: false,\n\n  /**\n    If `true` the store is attempting to reload the record from the adapter.\n     Example\n     ```javascript\n    record.get('isReloading'); // false\n    record.reload();\n    record.get('isReloading'); // true\n    ```\n     @property isReloading\n    @type {Boolean}\n    @readOnly\n  */\n  isReloading: false,\n\n  /**\n    All ember models have an id property. This is an identifier\n    managed by an external source. These are always coerced to be\n    strings before being used internally. Note when declaring the\n    attributes for a model it is an error to declare an id\n    attribute.\n     ```javascript\n    let record = store.createRecord('model');\n    record.get('id'); // null\n     store.findRecord('model', 1).then(function(model) {\n      model.get('id'); // '1'\n    });\n    ```\n     @property id\n    @type {String}\n  */\n  id: null,\n\n  /**\n    @property currentState\n    @private\n    @type {Object}\n  */\n  currentState: RootState$1.empty,\n\n  /**\n    When the record is in the `invalid` state this object will contain\n    any errors returned by the adapter. When present the errors hash\n    contains keys corresponding to the invalid property names\n    and values which are arrays of Javascript objects with two keys:\n     - `message` A string containing the error message from the backend\n    - `attribute` The name of the property associated with this error message\n     ```javascript\n    record.get('errors.length'); // 0\n    record.set('foo', 'invalid value');\n    record.save().catch(function() {\n      record.get('errors').get('foo');\n      // [{message: 'foo should be a number.', attribute: 'foo'}]\n    });\n    ```\n     The `errors` property us useful for displaying error messages to\n    the user.\n     ```handlebars\n    <label>Username: {{input value=username}} </label>\n    {{#each model.errors.username as |error|}}\n      <div class=\"error\">\n        {{error.message}}\n      </div>\n    {{/each}}\n    <label>Email: {{input value=email}} </label>\n    {{#each model.errors.email as |error|}}\n      <div class=\"error\">\n        {{error.message}}\n      </div>\n    {{/each}}\n    ```\n      You can also access the special `messages` property on the error\n    object to get an array of all the error strings.\n     ```handlebars\n    {{#each model.errors.messages as |message|}}\n      <div class=\"error\">\n        {{message}}\n      </div>\n    {{/each}}\n    ```\n     @property errors\n    @type {DS.Errors}\n  */\n  errors: Ember.computed(function () {\n    var errors = Errors.create();\n\n    errors._registerHandlers(this._internalModel, function () {\n      this.send('becameInvalid');\n    }, function () {\n      this.send('becameValid');\n    });\n    return errors;\n  }).readOnly(),\n\n  /**\n    This property holds the `DS.AdapterError` object with which\n    last adapter operation was rejected.\n     @property adapterError\n    @type {DS.AdapterError}\n  */\n  adapterError: null,\n\n  /**\n    Create a JSON representation of the record, using the serialization\n    strategy of the store's adapter.\n    `serialize` takes an optional hash as a parameter, currently\n    supported options are:\n    - `includeId`: `true` if the record's ID should be included in the\n      JSON representation.\n     @method serialize\n    @param {Object} options\n    @return {Object} an object whose values are primitive JSON values only\n  */\n  serialize: function serialize(options) {\n    return this._internalModel.createSnapshot().serialize(options);\n  },\n\n\n  /**\n    Use [DS.JSONSerializer](DS.JSONSerializer.html) to\n    get the JSON representation of a record.\n     `toJSON` takes an optional hash as a parameter, currently\n    supported options are:\n     - `includeId`: `true` if the record's ID should be included in the\n      JSON representation.\n     @method toJSON\n    @param {Object} options\n    @return {Object} A JSON representation of the object.\n  */\n  toJSON: function toJSON(options) {\n    // container is for lazy transform lookups\n    var serializer = this.store.serializerFor('-default');\n    var snapshot = this._internalModel.createSnapshot();\n\n    return serializer.serialize(snapshot, options);\n  },\n\n\n  /**\n    Fired when the record is ready to be interacted with,\n    that is either loaded from the server or created locally.\n     @event ready\n  */\n  ready: null,\n\n  /**\n    Fired when the record is loaded from the server.\n     @event didLoad\n  */\n  didLoad: null,\n\n  /**\n    Fired when the record is updated.\n     @event didUpdate\n  */\n  didUpdate: null,\n\n  /**\n    Fired when a new record is commited to the server.\n     @event didCreate\n  */\n  didCreate: null,\n\n  /**\n    Fired when the record is deleted.\n     @event didDelete\n  */\n  didDelete: null,\n\n  /**\n    Fired when the record becomes invalid.\n     @event becameInvalid\n  */\n  becameInvalid: null,\n\n  /**\n    Fired when the record enters the error state.\n     @event becameError\n  */\n  becameError: null,\n\n  /**\n    Fired when the record is rolled back.\n     @event rolledBack\n  */\n  rolledBack: null,\n\n  //TODO Do we want to deprecate these?\n  /**\n    @method send\n    @private\n    @param {String} name\n    @param {Object} context\n  */\n  send: function send(name, context) {\n    return this._internalModel.send(name, context);\n  },\n\n\n  /**\n    @method transitionTo\n    @private\n    @param {String} name\n  */\n  transitionTo: function transitionTo(name) {\n    return this._internalModel.transitionTo(name);\n  },\n\n\n  /**\n    Marks the record as deleted but does not save it. You must call\n    `save` afterwards if you want to persist it. You might use this\n    method if you want to allow the user to still `rollbackAttributes()`\n    after a delete was made.\n     Example\n     ```app/routes/model/delete.js\n    import Route from '@ember/routing/route';\n     export default Route.extend({\n      actions: {\n        softDelete() {\n          this.get('controller.model').deleteRecord();\n        },\n        confirm() {\n          this.get('controller.model').save();\n        },\n        undo() {\n          this.get('controller.model').rollbackAttributes();\n        }\n      }\n    });\n    ```\n     @method deleteRecord\n  */\n  deleteRecord: function deleteRecord() {\n    this._internalModel.deleteRecord();\n  },\n\n\n  /**\n    Same as `deleteRecord`, but saves the record immediately.\n     Example\n     ```app/routes/model/delete.js\n    import Route from '@ember/routing/route';\n     export default Route.extend({\n      actions: {\n        delete() {\n          this.get('controller.model').destroyRecord().then(function() {\n            controller.transitionToRoute('model.index');\n          });\n        }\n      }\n    });\n    ```\n     If you pass an object on the `adapterOptions` property of the options\n    argument it will be passed to your adapter via the snapshot\n     ```js\n    record.destroyRecord({ adapterOptions: { subscribe: false } });\n    ```\n     ```app/adapters/post.js\n    import MyCustomAdapter from './custom-adapter';\n     export default MyCustomAdapter.extend({\n      deleteRecord(store, type, snapshot) {\n        if (snapshot.adapterOptions.subscribe) {\n          // ...\n        }\n        // ...\n      }\n    });\n    ```\n     @method destroyRecord\n    @param {Object} options\n    @return {Promise} a promise that will be resolved when the adapter returns\n    successfully or rejected if the adapter returns with an error.\n  */\n  destroyRecord: function destroyRecord(options) {\n    this.deleteRecord();\n    return this.save(options);\n  },\n\n\n  /**\n    Unloads the record from the store. This will cause the record to be destroyed and freed up for garbage collection.\n     @method unloadRecord\n  */\n  unloadRecord: function unloadRecord() {\n    if (this.isDestroyed) {\n      return;\n    }\n    this._internalModel.unloadRecord();\n  },\n\n\n  /**\n    @method _notifyProperties\n    @private\n  */\n  _notifyProperties: function _notifyProperties(keys) {\n    Ember.beginPropertyChanges();\n    var key = void 0;\n    for (var i = 0, length = keys.length; i < length; i++) {\n      key = keys[i];\n      this.notifyPropertyChange(key);\n    }\n    Ember.endPropertyChanges();\n  },\n\n\n  /**\n    Returns an object, whose keys are changed properties, and value is\n    an [oldProp, newProp] array.\n     The array represents the diff of the canonical state with the local state\n    of the model. Note: if the model is created locally, the canonical state is\n    empty since the adapter hasn't acknowledged the attributes yet:\n     Example\n     ```app/models/mascot.js\n    import DS from 'ember-data';\n     export default DS.Model.extend({\n      name: DS.attr('string'),\n      isAdmin: DS.attr('boolean', {\n        defaultValue: false\n      })\n    });\n    ```\n     ```javascript\n    let mascot = store.createRecord('mascot');\n     mascot.changedAttributes(); // {}\n     mascot.set('name', 'Tomster');\n    mascot.changedAttributes(); // { name: [undefined, 'Tomster'] }\n     mascot.set('isAdmin', true);\n    mascot.changedAttributes(); // { isAdmin: [undefined, true], name: [undefined, 'Tomster'] }\n     mascot.save().then(function() {\n      mascot.changedAttributes(); // {}\n       mascot.set('isAdmin', false);\n      mascot.changedAttributes(); // { isAdmin: [true, false] }\n    });\n    ```\n     @method changedAttributes\n    @return {Object} an object, whose keys are changed properties,\n      and value is an [oldProp, newProp] array.\n  */\n  changedAttributes: function changedAttributes() {\n    return this._internalModel.changedAttributes();\n  },\n\n\n  //TODO discuss with tomhuda about events/hooks\n  //Bring back as hooks?\n  /**\n    @method adapterWillCommit\n    @private\n  adapterWillCommit: function() {\n    this.send('willCommit');\n  },\n   /**\n    @method adapterDidDirty\n    @private\n  adapterDidDirty: function() {\n    this.send('becomeDirty');\n    this.updateRecordArraysLater();\n  },\n  */\n\n  /**\n    If the model `hasDirtyAttributes` this function will discard any unsaved\n    changes. If the model `isNew` it will be removed from the store.\n     Example\n     ```javascript\n    record.get('name'); // 'Untitled Document'\n    record.set('name', 'Doc 1');\n    record.get('name'); // 'Doc 1'\n    record.rollbackAttributes();\n    record.get('name'); // 'Untitled Document'\n    ```\n     @since 1.13.0\n    @method rollbackAttributes\n  */\n  rollbackAttributes: function rollbackAttributes() {\n    this._internalModel.rollbackAttributes();\n  },\n\n\n  /*\n    @method _createSnapshot\n    @private\n  */\n  _createSnapshot: function _createSnapshot() {\n    return this._internalModel.createSnapshot();\n  },\n  toStringExtension: function toStringExtension() {\n    return Ember.get(this, 'id');\n  },\n\n\n  /**\n    Save the record and persist any changes to the record to an\n    external source via the adapter.\n     Example\n     ```javascript\n    record.set('name', 'Tomster');\n    record.save().then(function() {\n      // Success callback\n    }, function() {\n      // Error callback\n    });\n    ```\n    If you pass an object using the `adapterOptions` property of the options\n   argument it will be passed to your adapter via the snapshot.\n     ```js\n    record.save({ adapterOptions: { subscribe: false } });\n    ```\n     ```app/adapters/post.js\n    import MyCustomAdapter from './custom-adapter';\n     export default MyCustomAdapter.extend({\n      updateRecord(store, type, snapshot) {\n        if (snapshot.adapterOptions.subscribe) {\n          // ...\n        }\n        // ...\n      }\n    });\n    ```\n     @method save\n    @param {Object} options\n    @return {Promise} a promise that will be resolved when the adapter returns\n    successfully or rejected if the adapter returns with an error.\n  */\n  save: function save(options) {\n    var _this = this;\n\n    return PromiseObject.create({\n      promise: this._internalModel.save(options).then(function () {\n        return _this;\n      })\n    });\n  },\n\n\n  /**\n    Reload the record from the adapter.\n     This will only work if the record has already finished loading.\n     Example\n     ```app/routes/model/view.js\n    import Route from '@ember/routing/route';\n     export default Route.extend({\n      actions: {\n        reload() {\n          this.controller.get('model').reload().then(function(model) {\n            // do something with the reloaded model\n          });\n        }\n      }\n    });\n    ```\n     @method reload\n    @return {Promise} a promise that will be resolved with the record when the\n    adapter returns successfully or rejected if the adapter returns\n    with an error.\n  */\n  reload: function reload() {\n    var _this2 = this;\n\n    return PromiseObject.create({\n      promise: this._internalModel.reload().then(function () {\n        return _this2;\n      })\n    });\n  },\n\n\n  /**\n    Override the default event firing from Ember.Evented to\n    also call methods with the given name.\n     @method trigger\n    @private\n    @param {String} name\n  */\n  trigger: function trigger(name) {\n    var fn = this[name];\n\n    if (typeof fn === 'function') {\n      var length = arguments.length;\n      var args = new Array(length - 1);\n\n      for (var i = 1; i < length; i++) {\n        args[i - 1] = arguments[i];\n      }\n      fn.apply(this, args);\n    }\n\n    this._super.apply(this, arguments);\n  },\n  attr: function attr() {\n    (true && !(false) && Ember.assert(\"The `attr` method is not available on DS.Model, a DS.Snapshot was probably expected. Are you passing a DS.Model instead of a DS.Snapshot to your serializer?\", false));\n  },\n\n\n  /**\n    Get the reference for the specified belongsTo relationship.\n     Example\n     ```app/models/blog.js\n    export default DS.Model.extend({\n      user: DS.belongsTo({ async: true })\n    });\n    ```\n     ```javascript\n    let blog = store.push({\n      data: {\n        type: 'blog',\n        id: 1,\n        relationships: {\n          user: {\n            data: { type: 'user', id: 1 }\n          }\n        }\n      }\n    });\n    let userRef = blog.belongsTo('user');\n     // check if the user relationship is loaded\n    let isLoaded = userRef.value() !== null;\n     // get the record of the reference (null if not yet available)\n    let user = userRef.value();\n     // get the identifier of the reference\n    if (userRef.remoteType() === \"id\") {\n      let id = userRef.id();\n    } else if (userRef.remoteType() === \"link\") {\n      let link = userRef.link();\n    }\n     // load user (via store.findRecord or store.findBelongsTo)\n    userRef.load().then(...)\n     // or trigger a reload\n    userRef.reload().then(...)\n     // provide data for reference\n    userRef.push({\n      type: 'user',\n      id: 1,\n      attributes: {\n        username: \"@user\"\n      }\n    }).then(function(user) {\n      userRef.value() === user;\n    });\n    ```\n     @method belongsTo\n    @param {String} name of the relationship\n    @since 2.5.0\n    @return {BelongsToReference} reference for this relationship\n  */\n  belongsTo: function belongsTo(name) {\n    return this._internalModel.referenceFor('belongsTo', name);\n  },\n\n\n  /**\n    Get the reference for the specified hasMany relationship.\n     Example\n     ```javascript\n    // models/blog.js\n    export default DS.Model.extend({\n      comments: DS.hasMany({ async: true })\n    });\n     let blog = store.push({\n      data: {\n        type: 'blog',\n        id: 1,\n        relationships: {\n          comments: {\n            data: [\n              { type: 'comment', id: 1 },\n              { type: 'comment', id: 2 }\n            ]\n          }\n        }\n      }\n    });\n    let commentsRef = blog.hasMany('comments');\n     // check if the comments are loaded already\n    let isLoaded = commentsRef.value() !== null;\n     // get the records of the reference (null if not yet available)\n    let comments = commentsRef.value();\n     // get the identifier of the reference\n    if (commentsRef.remoteType() === \"ids\") {\n      let ids = commentsRef.ids();\n    } else if (commentsRef.remoteType() === \"link\") {\n      let link = commentsRef.link();\n    }\n     // load comments (via store.findMany or store.findHasMany)\n    commentsRef.load().then(...)\n     // or trigger a reload\n    commentsRef.reload().then(...)\n     // provide data for reference\n    commentsRef.push([{ type: 'comment', id: 1 }, { type: 'comment', id: 2 }]).then(function(comments) {\n      commentsRef.value() === comments;\n    });\n    ```\n     @method hasMany\n    @param {String} name of the relationship\n    @since 2.5.0\n    @return {HasManyReference} reference for this relationship\n  */\n  hasMany: function hasMany(name) {\n    return this._internalModel.referenceFor('hasMany', name);\n  },\n\n\n  setId: Ember.observer('id', function () {\n    this._internalModel.setId(this.get('id'));\n  }),\n\n  /**\n   Provides info about the model for debugging purposes\n   by grouping the properties into more semantic groups.\n    Meant to be used by debugging tools such as the Chrome Ember Extension.\n    - Groups all attributes in \"Attributes\" group.\n   - Groups all belongsTo relationships in \"Belongs To\" group.\n   - Groups all hasMany relationships in \"Has Many\" group.\n   - Groups all flags in \"Flags\" group.\n   - Flags relationship CPs as expensive properties.\n    @method _debugInfo\n   @for DS.Model\n   @private\n   */\n  _debugInfo: function _debugInfo() {\n    var attributes = ['id'];\n    var relationships = {};\n    var expensiveProperties = [];\n\n    this.eachAttribute(function (name, meta) {\n      return attributes.push(name);\n    });\n\n    var groups = [{\n      name: 'Attributes',\n      properties: attributes,\n      expand: true\n    }];\n\n    this.eachRelationship(function (name, relationship) {\n      var properties = relationships[relationship.kind];\n\n      if (properties === undefined) {\n        properties = relationships[relationship.kind] = [];\n        groups.push({\n          name: relationship.name,\n          properties: properties,\n          expand: true\n        });\n      }\n      properties.push(name);\n      expensiveProperties.push(name);\n    });\n\n    groups.push({\n      name: 'Flags',\n      properties: ['isLoaded', 'hasDirtyAttributes', 'isSaving', 'isDeleted', 'isError', 'isNew', 'isValid']\n    });\n\n    return {\n      propertyInfo: {\n        // include all other mixins / properties (not just the grouped ones)\n        includeOtherProperties: true,\n        groups: groups,\n        // don't pre-calculate unless cached\n        expensiveProperties: expensiveProperties\n      }\n    };\n  },\n  notifyBelongsToChanged: function notifyBelongsToChanged(key) {\n    this.notifyPropertyChange(key);\n  },\n\n  /**\n   Given a callback, iterates over each of the relationships in the model,\n   invoking the callback with the name of each relationship and its relationship\n   descriptor.\n     The callback method you provide should have the following signature (all\n   parameters are optional):\n    ```javascript\n   function(name, descriptor);\n   ```\n    - `name` the name of the current property in the iteration\n   - `descriptor` the meta object that describes this relationship\n    The relationship descriptor argument is an object with the following properties.\n    - **key** <span class=\"type\">String</span> the name of this relationship on the Model\n   - **kind** <span class=\"type\">String</span> \"hasMany\" or \"belongsTo\"\n   - **options** <span class=\"type\">Object</span> the original options hash passed when the relationship was declared\n   - **parentType** <span class=\"type\">DS.Model</span> the type of the Model that owns this relationship\n   - **type** <span class=\"type\">String</span> the type name of the related Model\n    Note that in addition to a callback, you can also pass an optional target\n   object that will be set as `this` on the context.\n    Example\n    ```app/serializers/application.js\n   import DS from 'ember-data';\n    export default DS.JSONSerializer.extend({\n    serialize: function(record, options) {\n      let json = {};\n       record.eachRelationship(function(name, descriptor) {\n        if (descriptor.kind === 'hasMany') {\n          let serializedHasManyName = name.toUpperCase() + '_IDS';\n          json[serializedHasManyName] = record.get(name).mapBy('id');\n        }\n      });\n       return json;\n    }\n  });\n   ```\n    @method eachRelationship\n   @param {Function} callback the callback to invoke\n   @param {any} binding the value to which the callback's `this` should be bound\n   */\n  eachRelationship: function eachRelationship(callback, binding) {\n    this.constructor.eachRelationship(callback, binding);\n  },\n  relationshipFor: function relationshipFor(name) {\n    return Ember.get(this.constructor, 'relationshipsByName').get(name);\n  },\n  inverseFor: function inverseFor(key) {\n    return this.constructor.inverseFor(key, this.store);\n  },\n  notifyHasManyAdded: function notifyHasManyAdded(key) {\n    //We need to notifyPropertyChange in the adding case because we need to make sure\n    //we fetch the newly added record in case it is unloaded\n    //TODO(Igor): Consider whether we could do this only if the record state is unloaded\n\n    //Goes away once hasMany is double promisified\n    this.notifyPropertyChange(key);\n  },\n  eachAttribute: function eachAttribute(callback, binding) {\n    this.constructor.eachAttribute(callback, binding);\n  }\n});\n\n/**\n @property data\n @private\n @type {Object}\n */\nObject.defineProperty(Model.prototype, 'data', {\n  get: function get() {\n    return this._internalModel._data;\n  }\n});\n\n{\n  Model.reopen({\n    init: function init() {\n      this._super.apply(this, arguments);\n\n      if (!this._internalModel) {\n        throw new Ember.Error('You should not call `create` on a model. Instead, call `store.createRecord` with the attributes you would like to set.');\n      }\n    }\n  });\n}\n\nModel.reopenClass({\n  isModel: true,\n\n  /**\n    Override the class' `create()` method to raise an error. This\n    prevents end users from inadvertently calling `create()` instead\n    of `createRecord()`. The store is still able to create instances\n    by calling the `_create()` method. To create an instance of a\n    `DS.Model` use [store.createRecord](DS.Store.html#method_createRecord).\n     @method create\n    @private\n    @static\n  */\n  /**\n   Represents the model's class name as a string. This can be used to look up the model's class name through\n   `DS.Store`'s modelFor method.\n    `modelName` is generated for you by Ember Data. It will be a lowercased, dasherized string.\n   For example:\n    ```javascript\n   store.modelFor('post').modelName; // 'post'\n   store.modelFor('blog-post').modelName; // 'blog-post'\n   ```\n    The most common place you'll want to access `modelName` is in your serializer's `payloadKeyFromModelName` method. For example, to change payload\n   keys to underscore (instead of dasherized), you might use the following code:\n    ```javascript\n   import { underscore } from '@ember/string';\n    export default const PostSerializer = DS.RESTSerializer.extend({\n     payloadKeyFromModelName(modelName) {\n       return underscore(modelName);\n     }\n   });\n   ```\n   @property modelName\n   @type String\n   @readonly\n   @static\n  */\n  modelName: null,\n\n  /*\n   These class methods below provide relationship\n   introspection abilities about relationships.\n    A note about the computed properties contained here:\n    **These properties are effectively sealed once called for the first time.**\n   To avoid repeatedly doing expensive iteration over a model's fields, these\n   values are computed once and then cached for the remainder of the runtime of\n   your application.\n    If your application needs to modify a class after its initial definition\n   (for example, using `reopen()` to add additional attributes), make sure you\n   do it before using your model with the store, which uses these properties\n   extensively.\n   */\n\n  /**\n   For a given relationship name, returns the model type of the relationship.\n    For example, if you define a model like this:\n    ```app/models/post.js\n   import DS from 'ember-data';\n    export default DS.Model.extend({\n      comments: DS.hasMany('comment')\n    });\n   ```\n    Calling `store.modelFor('post').typeForRelationship('comments', store)` will return `Comment`.\n    @method typeForRelationship\n   @static\n   @param {String} name the name of the relationship\n   @param {store} store an instance of DS.Store\n   @return {DS.Model} the type of the relationship, or undefined\n   */\n  typeForRelationship: function typeForRelationship(name, store) {\n    var relationship = Ember.get(this, 'relationshipsByName').get(name);\n    return relationship && store.modelFor(relationship.type);\n  },\n\n\n  inverseMap: Ember.computed(function () {\n    return Object.create(null);\n  }),\n\n  /**\n   Find the relationship which is the inverse of the one asked for.\n    For example, if you define models like this:\n    ```app/models/post.js\n   import DS from 'ember-data';\n    export default DS.Model.extend({\n      comments: DS.hasMany('message')\n    });\n   ```\n    ```app/models/message.js\n   import DS from 'ember-data';\n    export default DS.Model.extend({\n      owner: DS.belongsTo('post')\n    });\n   ```\n    ``` js\n   store.modelFor('post').inverseFor('comments', store) // { type: App.Message, name: 'owner', kind: 'belongsTo' }\n   store.modelFor('message').inverseFor('owner', store) // { type: App.Post, name: 'comments', kind: 'hasMany' }\n   ```\n    @method inverseFor\n   @static\n   @param {String} name the name of the relationship\n   @param {DS.Store} store\n   @return {Object} the inverse relationship, or null\n   */\n  inverseFor: function inverseFor(name, store) {\n    var inverseMap = Ember.get(this, 'inverseMap');\n    if (inverseMap[name] !== undefined) {\n      return inverseMap[name];\n    } else {\n      var relationship = Ember.get(this, 'relationshipsByName').get(name);\n      if (!relationship) {\n        inverseMap[name] = null;\n        return null;\n      }\n\n      var options = relationship.options;\n      if (options && options.inverse === null) {\n        // populate the cache with a miss entry so we can skip getting and going\n        // through `relationshipsByName`\n        inverseMap[name] = null;\n        return null;\n      }\n\n      return inverseMap[name] = this._findInverseFor(name, store);\n    }\n  },\n\n\n  //Calculate the inverse, ignoring the cache\n  _findInverseFor: function _findInverseFor(name, store) {\n\n    var inverseType = this.typeForRelationship(name, store);\n    if (!inverseType) {\n      return null;\n    }\n\n    var propertyMeta = this.metaForProperty(name);\n    //If inverse is manually specified to be null, like  `comments: DS.hasMany('message', { inverse: null })`\n    var options = propertyMeta.options;\n    if (options.inverse === null) {\n      return null;\n    }\n\n    var inverseName = void 0,\n        inverseKind = void 0,\n        inverse = void 0;\n\n    //If inverse is specified manually, return the inverse\n    if (options.inverse) {\n      inverseName = options.inverse;\n      inverse = Ember.get(inverseType, 'relationshipsByName').get(inverseName);\n\n      (true && !(!Ember.isNone(inverse)) && Ember.assert(\"We found no inverse relationships by the name of '\" + inverseName + \"' on the '\" + inverseType.modelName + \"' model. This is most likely due to a missing attribute on your model definition.\", !Ember.isNone(inverse)));\n\n\n      inverseKind = inverse.kind;\n    } else {\n      //No inverse was specified manually, we need to use a heuristic to guess one\n      if (propertyMeta.parentType && propertyMeta.type === propertyMeta.parentType.modelName) {\n        (true && Ember.warn('Detected a reflexive relationship by the name of \\'' + name + '\\' without an inverse option. Look at https://guides.emberjs.com/current/models/relationships/#toc_reflexive-relations for how to explicitly specify inverses.', false, {\n          id: 'ds.model.reflexive-relationship-without-inverse'\n        }));\n      }\n\n      var possibleRelationships = findPossibleInverses(this, inverseType, name);\n\n      if (possibleRelationships.length === 0) {\n        return null;\n      }\n\n      var filteredRelationships = possibleRelationships.filter(function (possibleRelationship) {\n        var optionsForRelationship = inverseType.metaForProperty(possibleRelationship.name).options;\n        return name === optionsForRelationship.inverse;\n      });\n\n      (true && !(filteredRelationships.length < 2) && Ember.assert(\"You defined the '\" + name + \"' relationship on \" + this + \", but you defined the inverse relationships of type \" + inverseType.toString() + \" multiple times. Look at https://guides.emberjs.com/current/models/relationships/#toc_explicit-inverses for how to explicitly specify inverses\", filteredRelationships.length < 2));\n\n\n      if (filteredRelationships.length === 1) {\n        possibleRelationships = filteredRelationships;\n      }\n\n      (true && !(possibleRelationships.length === 1) && Ember.assert(\"You defined the '\" + name + \"' relationship on \" + this + \", but multiple possible inverse relationships of type \" + this + \" were found on \" + inverseType + \". Look at https://guides.emberjs.com/current/models/relationships/#toc_explicit-inverses for how to explicitly specify inverses\", possibleRelationships.length === 1));\n\n\n      inverseName = possibleRelationships[0].name;\n      inverseKind = possibleRelationships[0].kind;\n    }\n\n    return {\n      type: inverseType,\n      name: inverseName,\n      kind: inverseKind\n    };\n  },\n\n\n  /**\n   The model's relationships as a map, keyed on the type of the\n   relationship. The value of each entry is an array containing a descriptor\n   for each relationship with that type, describing the name of the relationship\n   as well as the type.\n    For example, given the following model definition:\n    ```app/models/blog.js\n   import DS from 'ember-data';\n    export default DS.Model.extend({\n      users: DS.hasMany('user'),\n      owner: DS.belongsTo('user'),\n      posts: DS.hasMany('post')\n    });\n   ```\n    This computed property would return a map describing these\n   relationships, like this:\n    ```javascript\n   import Ember from 'ember';\n   import Blog from 'app/models/blog';\n   import User from 'app/models/user';\n   import Post from 'app/models/post';\n    let relationships = Ember.get(Blog, 'relationships');\n   relationships.get(User);\n   //=> [ { name: 'users', kind: 'hasMany' },\n   //     { name: 'owner', kind: 'belongsTo' } ]\n   relationships.get(Post);\n   //=> [ { name: 'posts', kind: 'hasMany' } ]\n   ```\n    @property relationships\n   @static\n   @type Map\n   @readOnly\n   */\n\n  relationships: relationshipsDescriptor,\n\n  /**\n   A hash containing lists of the model's relationships, grouped\n   by the relationship kind. For example, given a model with this\n   definition:\n    ```app/models/blog.js\n   import DS from 'ember-data';\n    export default DS.Model.extend({\n      users: DS.hasMany('user'),\n      owner: DS.belongsTo('user'),\n       posts: DS.hasMany('post')\n    });\n   ```\n    This property would contain the following:\n    ```javascript\n   import Ember from 'ember';\n   import Blog from 'app/models/blog';\n    let relationshipNames = Ember.get(Blog, 'relationshipNames');\n   relationshipNames.hasMany;\n   //=> ['users', 'posts']\n   relationshipNames.belongsTo;\n   //=> ['owner']\n   ```\n    @property relationshipNames\n   @static\n   @type Object\n   @readOnly\n   */\n  relationshipNames: Ember.computed(function () {\n    var names = {\n      hasMany: [],\n      belongsTo: []\n    };\n\n    this.eachComputedProperty(function (name, meta) {\n      if (meta.isRelationship) {\n        names[meta.kind].push(name);\n      }\n    });\n\n    return names;\n  }),\n\n  /**\n   An array of types directly related to a model. Each type will be\n   included once, regardless of the number of relationships it has with\n   the model.\n    For example, given a model with this definition:\n    ```app/models/blog.js\n   import DS from 'ember-data';\n    export default DS.Model.extend({\n      users: DS.hasMany('user'),\n      owner: DS.belongsTo('user'),\n       posts: DS.hasMany('post')\n    });\n   ```\n    This property would contain the following:\n    ```javascript\n   import Ember from 'ember';\n   import Blog from 'app/models/blog';\n    let relatedTypes = Ember.get(Blog, 'relatedTypes');\n   //=> [ User, Post ]\n   ```\n    @property relatedTypes\n   @static\n   @type Ember.Array\n   @readOnly\n   */\n  relatedTypes: relatedTypesDescriptor,\n\n  /**\n   A map whose keys are the relationships of a model and whose values are\n   relationship descriptors.\n    For example, given a model with this\n   definition:\n    ```app/models/blog.js\n   import DS from 'ember-data';\n    export default DS.Model.extend({\n      users: DS.hasMany('user'),\n      owner: DS.belongsTo('user'),\n       posts: DS.hasMany('post')\n    });\n   ```\n    This property would contain the following:\n    ```javascript\n   import Ember from 'ember';\n   import Blog from 'app/models/blog';\n    let relationshipsByName = Ember.get(Blog, 'relationshipsByName');\n   relationshipsByName.get('users');\n   //=> { key: 'users', kind: 'hasMany', type: 'user', options: Object, isRelationship: true }\n   relationshipsByName.get('owner');\n   //=> { key: 'owner', kind: 'belongsTo', type: 'user', options: Object, isRelationship: true }\n   ```\n    @property relationshipsByName\n   @static\n   @type Map\n   @readOnly\n   */\n  relationshipsByName: relationshipsByNameDescriptor,\n\n  /**\n   A map whose keys are the fields of the model and whose values are strings\n   describing the kind of the field. A model's fields are the union of all of its\n   attributes and relationships.\n    For example:\n    ```app/models/blog.js\n   import DS from 'ember-data';\n    export default DS.Model.extend({\n      users: DS.hasMany('user'),\n      owner: DS.belongsTo('user'),\n       posts: DS.hasMany('post'),\n       title: DS.attr('string')\n    });\n   ```\n    ```js\n   import Ember from 'ember';\n   import Blog from 'app/models/blog';\n    let fields = Ember.get(Blog, 'fields');\n   fields.forEach(function(kind, field) {\n      console.log(field, kind);\n    });\n    // prints:\n   // users, hasMany\n   // owner, belongsTo\n   // posts, hasMany\n   // title, attribute\n   ```\n    @property fields\n   @static\n   @type Map\n   @readOnly\n   */\n  fields: Ember.computed(function () {\n    var map = new MapWithDeprecations();\n\n    this.eachComputedProperty(function (name, meta) {\n      if (meta.isRelationship) {\n        map.set(name, meta.kind);\n      } else if (meta.isAttribute) {\n        map.set(name, 'attribute');\n      }\n    });\n\n    return map;\n  }).readOnly(),\n\n  /**\n   Given a callback, iterates over each of the relationships in the model,\n   invoking the callback with the name of each relationship and its relationship\n   descriptor.\n    @method eachRelationship\n   @static\n   @param {Function} callback the callback to invoke\n   @param {any} binding the value to which the callback's `this` should be bound\n   */\n  eachRelationship: function eachRelationship(callback, binding) {\n    Ember.get(this, 'relationshipsByName').forEach(function (relationship, name) {\n      callback.call(binding, name, relationship);\n    });\n  },\n\n\n  /**\n   Given a callback, iterates over each of the types related to a model,\n   invoking the callback with the related type's class. Each type will be\n   returned just once, regardless of how many different relationships it has\n   with a model.\n    @method eachRelatedType\n   @static\n   @param {Function} callback the callback to invoke\n   @param {any} binding the value to which the callback's `this` should be bound\n   */\n  eachRelatedType: function eachRelatedType(callback, binding) {\n    var relationshipTypes = Ember.get(this, 'relatedTypes');\n\n    for (var i = 0; i < relationshipTypes.length; i++) {\n      var type = relationshipTypes[i];\n      callback.call(binding, type);\n    }\n  },\n  determineRelationshipType: function determineRelationshipType(knownSide, store) {\n    var knownKey = knownSide.key;\n    var knownKind = knownSide.kind;\n    var inverse = this.inverseFor(knownKey, store);\n    // let key;\n    var otherKind = void 0;\n\n    if (!inverse) {\n      return knownKind === 'belongsTo' ? 'oneToNone' : 'manyToNone';\n    }\n\n    // key = inverse.name;\n    otherKind = inverse.kind;\n\n    if (otherKind === 'belongsTo') {\n      return knownKind === 'belongsTo' ? 'oneToOne' : 'manyToOne';\n    } else {\n      return knownKind === 'belongsTo' ? 'oneToMany' : 'manyToMany';\n    }\n  },\n\n\n  /**\n   A map whose keys are the attributes of the model (properties\n   described by DS.attr) and whose values are the meta object for the\n   property.\n    Example\n    ```app/models/person.js\n   import DS from 'ember-data';\n    export default DS.Model.extend({\n      firstName: DS.attr('string'),\n      lastName: DS.attr('string'),\n      birthday: DS.attr('date')\n    });\n   ```\n    ```javascript\n   import Ember from 'ember';\n   import Person from 'app/models/person';\n    let attributes = Ember.get(Person, 'attributes')\n    attributes.forEach(function(meta, name) {\n      console.log(name, meta);\n    });\n    // prints:\n   // firstName {type: \"string\", isAttribute: true, options: Object, parentType: function, name: \"firstName\"}\n   // lastName {type: \"string\", isAttribute: true, options: Object, parentType: function, name: \"lastName\"}\n   // birthday {type: \"date\", isAttribute: true, options: Object, parentType: function, name: \"birthday\"}\n   ```\n    @property attributes\n   @static\n   @type {Map}\n   @readOnly\n   */\n  attributes: Ember.computed(function () {\n    var _this3 = this;\n\n    var map = new MapWithDeprecations();\n\n    this.eachComputedProperty(function (name, meta) {\n      if (meta.isAttribute) {\n        (true && !(name !== 'id') && Ember.assert(\"You may not set `id` as an attribute on your model. Please remove any lines that look like: `id: DS.attr('<type>')` from \" + _this3.toString(), name !== 'id'));\n\n\n        meta.name = name;\n        map.set(name, meta);\n      }\n    });\n\n    return map;\n  }).readOnly(),\n\n  /**\n   A map whose keys are the attributes of the model (properties\n   described by DS.attr) and whose values are type of transformation\n   applied to each attribute. This map does not include any\n   attributes that do not have an transformation type.\n    Example\n    ```app/models/person.js\n   import DS from 'ember-data';\n    export default DS.Model.extend({\n      firstName: DS.attr(),\n      lastName: DS.attr('string'),\n      birthday: DS.attr('date')\n    });\n   ```\n    ```javascript\n   import Ember from 'ember';\n   import Person from 'app/models/person';\n    let transformedAttributes = Ember.get(Person, 'transformedAttributes')\n    transformedAttributes.forEach(function(field, type) {\n      console.log(field, type);\n    });\n    // prints:\n   // lastName string\n   // birthday date\n   ```\n    @property transformedAttributes\n   @static\n   @type {Map}\n   @readOnly\n   */\n  transformedAttributes: Ember.computed(function () {\n    var map = new MapWithDeprecations();\n\n    this.eachAttribute(function (key, meta) {\n      if (meta.type) {\n        map.set(key, meta.type);\n      }\n    });\n\n    return map;\n  }).readOnly(),\n\n  /**\n   Iterates through the attributes of the model, calling the passed function on each\n   attribute.\n    The callback method you provide should have the following signature (all\n   parameters are optional):\n    ```javascript\n   function(name, meta);\n   ```\n    - `name` the name of the current property in the iteration\n   - `meta` the meta object for the attribute property in the iteration\n    Note that in addition to a callback, you can also pass an optional target\n   object that will be set as `this` on the context.\n    Example\n    ```javascript\n   import DS from 'ember-data';\n    let Person = DS.Model.extend({\n      firstName: DS.attr('string'),\n      lastName: DS.attr('string'),\n      birthday: DS.attr('date')\n    });\n    Person.eachAttribute(function(name, meta) {\n      console.log(name, meta);\n    });\n    // prints:\n   // firstName {type: \"string\", isAttribute: true, options: Object, parentType: function, name: \"firstName\"}\n   // lastName {type: \"string\", isAttribute: true, options: Object, parentType: function, name: \"lastName\"}\n   // birthday {type: \"date\", isAttribute: true, options: Object, parentType: function, name: \"birthday\"}\n   ```\n    @method eachAttribute\n   @param {Function} callback The callback to execute\n   @param {Object} [binding] the value to which the callback's `this` should be bound\n   @static\n   */\n  eachAttribute: function eachAttribute(callback, binding) {\n    Ember.get(this, 'attributes').forEach(function (meta, name) {\n      callback.call(binding, name, meta);\n    });\n  },\n\n\n  /**\n   Iterates through the transformedAttributes of the model, calling\n   the passed function on each attribute. Note the callback will not be\n   called for any attributes that do not have an transformation type.\n    The callback method you provide should have the following signature (all\n   parameters are optional):\n    ```javascript\n   function(name, type);\n   ```\n    - `name` the name of the current property in the iteration\n   - `type` a string containing the name of the type of transformed\n   applied to the attribute\n    Note that in addition to a callback, you can also pass an optional target\n   object that will be set as `this` on the context.\n    Example\n    ```javascript\n   import DS from 'ember-data';\n    let Person = DS.Model.extend({\n      firstName: DS.attr(),\n      lastName: DS.attr('string'),\n      birthday: DS.attr('date')\n    });\n    Person.eachTransformedAttribute(function(name, type) {\n      console.log(name, type);\n    });\n    // prints:\n   // lastName string\n   // birthday date\n   ```\n    @method eachTransformedAttribute\n   @param {Function} callback The callback to execute\n   @param {Object} [binding] the value to which the callback's `this` should be bound\n   @static\n   */\n  eachTransformedAttribute: function eachTransformedAttribute(callback, binding) {\n    Ember.get(this, 'transformedAttributes').forEach(function (type, name) {\n      callback.call(binding, name, type);\n    });\n  }\n});\n\nif (isEnabled('ds-rollback-attribute')) {\n  Model.reopen({\n    /**\n      Discards any unsaved changes to the given attribute. This feature is not enabled by default. You must enable `ds-rollback-attribute` and be running a canary build.\n       Example\n       ```javascript\n      record.get('name'); // 'Untitled Document'\n      record.set('name', 'Doc 1');\n      record.get('name'); // 'Doc 1'\n      record.rollbackAttribute('name');\n      record.get('name'); // 'Untitled Document'\n      ```\n       @method rollbackAttribute\n    */\n    rollbackAttribute: function rollbackAttribute(attributeName) {\n      if (attributeName in this._internalModel._attributes) {\n        this.set(attributeName, this._internalModel.lastAcknowledgedValue(attributeName));\n      }\n    }\n  });\n}\n\n{\n  Model.reopen({\n    // This is a temporary solution until we refactor DS.Model to not\n    // rely on the data property.\n    willMergeMixin: function willMergeMixin(props) {\n      var constructor = this.constructor;\n      (true && !(!intersection(Object.keys(props), RESERVED_MODEL_PROPS)[0]) && Ember.assert('`' + intersection(Object.keys(props), RESERVED_MODEL_PROPS)[0] + '` is a reserved property name on DS.Model objects. Please choose a different property name for ' + constructor.toString(), !intersection(Object.keys(props), RESERVED_MODEL_PROPS)[0]));\n      (true && !(Object.keys(props).indexOf('id') === -1) && Ember.assert(\"You may not set `id` as an attribute on your model. Please remove any lines that look like: `id: DS.attr('<type>')` from \" + constructor.toString(), Object.keys(props).indexOf('id') === -1));\n    },\n\n\n    /**\n     This Ember.js hook allows an object to be notified when a property\n     is defined.\n      In this case, we use it to be notified when an Ember Data user defines a\n     belongs-to relationship. In that case, we need to set up observers for\n     each one, allowing us to track relationship changes and automatically\n     reflect changes in the inverse has-many array.\n      This hook passes the class being set up, as well as the key and value\n     being defined. So, for example, when the user does this:\n      ```javascript\n     DS.Model.extend({\n      parent: DS.belongsTo('user')\n    });\n     ```\n      This hook would be called with \"parent\" as the key and the computed\n     property returned by `DS.belongsTo` as the value.\n      @method didDefineProperty\n     @param {Object} proto\n     @param {String} key\n     @param {Ember.ComputedProperty} value\n     */\n    didDefineProperty: function didDefineProperty(proto, key, value) {\n      // Check if the value being set is a computed property.\n      if (value instanceof Ember.ComputedProperty) {\n\n        // If it is, get the metadata for the relationship. This is\n        // populated by the `DS.belongsTo` helper when it is creating\n        // the computed property.\n        var meta = value.meta();\n\n        /*\n          This is buggy because if the parent has never been looked up\n          via `modelFor` it will not have `modelName` set.\n         */\n        meta.parentType = proto.constructor;\n      }\n    }\n  });\n}\n\nvar SOURCE_POINTER_REGEXP = /^\\/?data\\/(attributes|relationships)\\/(.*)/;\nvar SOURCE_POINTER_PRIMARY_REGEXP = /^\\/?data/;\nvar PRIMARY_ATTRIBUTE_KEY = 'base';\n\n/**\n  A `DS.AdapterError` is used by an adapter to signal that an error occurred\n  during a request to an external API. It indicates a generic error, and\n  subclasses are used to indicate specific error states. The following\n  subclasses are provided:\n\n  - `DS.InvalidError`\n  - `DS.TimeoutError`\n  - `DS.AbortError`\n  - `DS.UnauthorizedError`\n  - `DS.ForbiddenError`\n  - `DS.NotFoundError`\n  - `DS.ConflictError`\n  - `DS.ServerError`\n\n  To create a custom error to signal a specific error state in communicating\n  with an external API, extend the `DS.AdapterError`. For example if the\n  external API exclusively used HTTP `503 Service Unavailable` to indicate\n  it was closed for maintenance:\n\n  ```app/adapters/maintenance-error.js\n  import DS from 'ember-data';\n\n  export default DS.AdapterError.extend({ message: \"Down for maintenance.\" });\n  ```\n\n  This error would then be returned by an adapter's `handleResponse` method:\n\n  ```app/adapters/application.js\n  import DS from 'ember-data';\n  import MaintenanceError from './maintenance-error';\n\n  export default DS.JSONAPIAdapter.extend({\n    handleResponse(status) {\n      if (503 === status) {\n        return new MaintenanceError();\n      }\n\n      return this._super(...arguments);\n    }\n  });\n  ```\n\n  And can then be detected in an application and used to send the user to an\n  `under-maintenance` route:\n\n  ```app/routes/application.js\n  import Route from '@ember/routing/route';\n  import MaintenanceError from '../adapters/maintenance-error';\n\n  export default Route.extend({\n    actions: {\n      error(error, transition) {\n        if (error instanceof MaintenanceError) {\n          this.transitionTo('under-maintenance');\n          return;\n        }\n\n        // ...other error handling logic\n      }\n    }\n  });\n  ```\n\n  @class AdapterError\n  @namespace DS\n*/\nfunction AdapterError(errors) {\n  var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Adapter operation failed';\n\n  this.isAdapterError = true;\n  Ember.Error.call(this, message);\n\n  this.errors = errors || [{\n    title: 'Adapter Error',\n    detail: message\n  }];\n}\n\nfunction extendFn(ErrorClass) {\n  return function () {\n    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n        defaultMessage = _ref.message;\n\n    return extend(ErrorClass, defaultMessage);\n  };\n}\n\nfunction extend(ParentErrorClass, defaultMessage) {\n  var ErrorClass = function ErrorClass(errors, message) {\n    (true && !(Array.isArray(errors || [])) && Ember.assert('`AdapterError` expects json-api formatted errors array.', Array.isArray(errors || [])));\n\n    ParentErrorClass.call(this, errors, message || defaultMessage);\n  };\n  ErrorClass.prototype = Object.create(ParentErrorClass.prototype);\n  ErrorClass.extend = extendFn(ErrorClass);\n\n  return ErrorClass;\n}\n\nAdapterError.prototype = Object.create(Ember.Error.prototype);\n\nAdapterError.extend = extendFn(AdapterError);\n\n/**\n  A `DS.InvalidError` is used by an adapter to signal the external API\n  was unable to process a request because the content was not\n  semantically correct or meaningful per the API. Usually this means a\n  record failed some form of server side validation. When a promise\n  from an adapter is rejected with a `DS.InvalidError` the record will\n  transition to the `invalid` state and the errors will be set to the\n  `errors` property on the record.\n\n  For Ember Data to correctly map errors to their corresponding\n  properties on the model, Ember Data expects each error to be\n  a valid json-api error object with a `source/pointer` that matches\n  the property name. For example if you had a Post model that\n  looked like this.\n\n  ```app/models/post.js\n  import DS from 'ember-data';\n\n  export default DS.Model.extend({\n    title: DS.attr('string'),\n    content: DS.attr('string')\n  });\n  ```\n\n  To show an error from the server related to the `title` and\n  `content` properties your adapter could return a promise that\n  rejects with a `DS.InvalidError` object that looks like this:\n\n  ```app/adapters/post.js\n  import RSVP from 'RSVP';\n  import DS from 'ember-data';\n\n  export default DS.RESTAdapter.extend({\n    updateRecord() {\n      // Fictional adapter that always rejects\n      return RSVP.reject(new DS.InvalidError([\n        {\n          detail: 'Must be unique',\n          source: { pointer: '/data/attributes/title' }\n        },\n        {\n          detail: 'Must not be blank',\n          source: { pointer: '/data/attributes/content'}\n        }\n      ]));\n    }\n  });\n  ```\n\n  Your backend may use different property names for your records the\n  store will attempt extract and normalize the errors using the\n  serializer's `extractErrors` method before the errors get added to\n  the the model. As a result, it is safe for the `InvalidError` to\n  wrap the error payload unaltered.\n\n  @class InvalidError\n  @namespace DS\n*/\nvar InvalidError = extend(AdapterError, 'The adapter rejected the commit because it was invalid');\n\n/**\n  A `DS.TimeoutError` is used by an adapter to signal that a request\n  to the external API has timed out. I.e. no response was received from\n  the external API within an allowed time period.\n\n  An example use case would be to warn the user to check their internet\n  connection if an adapter operation has timed out:\n\n  ```app/routes/application.js\n  import Route from '@ember/routing/route';\n  import DS from 'ember-data';\n\n  const { TimeoutError } = DS;\n\n  export default Route.extend({\n    actions: {\n      error(error, transition) {\n        if (error instanceof TimeoutError) {\n          // alert the user\n          alert('Are you still connected to the internet?');\n          return;\n        }\n\n        // ...other error handling logic\n      }\n    }\n  });\n  ```\n\n  @class TimeoutError\n  @namespace DS\n*/\nvar TimeoutError = extend(AdapterError, 'The adapter operation timed out');\n\n/**\n  A `DS.AbortError` is used by an adapter to signal that a request to\n  the external API was aborted. For example, this can occur if the user\n  navigates away from the current page after a request to the external API\n  has been initiated but before a response has been received.\n\n  @class AbortError\n  @namespace DS\n*/\nvar AbortError = extend(AdapterError, 'The adapter operation was aborted');\n\n/**\n  A `DS.UnauthorizedError` equates to a HTTP `401 Unauthorized` response\n  status. It is used by an adapter to signal that a request to the external\n  API was rejected because authorization is required and has failed or has not\n  yet been provided.\n\n  An example use case would be to redirect the user to a log in route if a\n  request is unauthorized:\n\n  ```app/routes/application.js\n  import Route from '@ember/routing/route';\n  import DS from 'ember-data';\n\n  const { UnauthorizedError } = DS;\n\n  export default Route.extend({\n    actions: {\n      error(error, transition) {\n        if (error instanceof UnauthorizedError) {\n          // go to the sign in route\n          this.transitionTo('login');\n          return;\n        }\n\n        // ...other error handling logic\n      }\n    }\n  });\n  ```\n\n  @class UnauthorizedError\n  @namespace DS\n*/\nvar UnauthorizedError = extend(AdapterError, 'The adapter operation is unauthorized');\n\n/**\n  A `DS.ForbiddenError` equates to a HTTP `403 Forbidden` response status.\n  It is used by an adapter to signal that a request to the external API was\n  valid but the server is refusing to respond to it. If authorization was\n  provided and is valid, then the authenticated user does not have the\n  necessary permissions for the request.\n\n  @class ForbiddenError\n  @namespace DS\n*/\nvar ForbiddenError = extend(AdapterError, 'The adapter operation is forbidden');\n\n/**\n  A `DS.NotFoundError` equates to a HTTP `404 Not Found` response status.\n  It is used by an adapter to signal that a request to the external API\n  was rejected because the resource could not be found on the API.\n\n  An example use case would be to detect if the user has entered a route\n  for a specific model that does not exist. For example:\n\n  ```app/routes/post.js\n  import Route from '@ember/routing/route';\n  import DS from 'ember-data';\n\n  const { NotFoundError } = DS;\n\n  export default Route.extend({\n    model(params) {\n      return this.get('store').findRecord('post', params.post_id);\n    },\n\n    actions: {\n      error(error, transition) {\n        if (error instanceof NotFoundError) {\n          // redirect to a list of all posts instead\n          this.transitionTo('posts');\n        } else {\n          // otherwise let the error bubble\n          return true;\n        }\n      }\n    }\n  });\n  ```\n\n  @class NotFoundError\n  @namespace DS\n*/\nvar NotFoundError = extend(AdapterError, 'The adapter could not find the resource');\n\n/**\n  A `DS.ConflictError` equates to a HTTP `409 Conflict` response status.\n  It is used by an adapter to indicate that the request could not be processed\n  because of a conflict in the request. An example scenario would be when\n  creating a record with a client generated id but that id is already known\n  to the external API.\n\n  @class ConflictError\n  @namespace DS\n*/\nvar ConflictError = extend(AdapterError, 'The adapter operation failed due to a conflict');\n\n/**\n  A `DS.ServerError` equates to a HTTP `500 Internal Server Error` response\n  status. It is used by the adapter to indicate that a request has failed\n  because of an error in the external API.\n\n  @class ServerError\n  @namespace DS\n*/\nvar ServerError = extend(AdapterError, 'The adapter operation failed due to a server error');\n\n/**\n  Convert an hash of errors into an array with errors in JSON-API format.\n\n  ```javascript\n  import DS from 'ember-data';\n\n  const { errorsHashToArray } = DS;\n\n  let errors = {\n    base: 'Invalid attributes on saving this record',\n    name: 'Must be present',\n    age: ['Must be present', 'Must be a number']\n  };\n\n  let errorsArray = errorsHashToArray(errors);\n  // [\n  //   {\n  //     title: \"Invalid Document\",\n  //     detail: \"Invalid attributes on saving this record\",\n  //     source: { pointer: \"/data\" }\n  //   },\n  //   {\n  //     title: \"Invalid Attribute\",\n  //     detail: \"Must be present\",\n  //     source: { pointer: \"/data/attributes/name\" }\n  //   },\n  //   {\n  //     title: \"Invalid Attribute\",\n  //     detail: \"Must be present\",\n  //     source: { pointer: \"/data/attributes/age\" }\n  //   },\n  //   {\n  //     title: \"Invalid Attribute\",\n  //     detail: \"Must be a number\",\n  //     source: { pointer: \"/data/attributes/age\" }\n  //   }\n  // ]\n  ```\n\n  @method errorsHashToArray\n  @public\n  @namespace\n  @for DS\n  @param {Object} errors hash with errors as properties\n  @return {Array} array of errors in JSON-API format\n*/\nfunction errorsHashToArray(errors) {\n  var out = [];\n\n  if (Ember.isPresent(errors)) {\n    Object.keys(errors).forEach(function (key) {\n      var messages = Ember.makeArray(errors[key]);\n      for (var i = 0; i < messages.length; i++) {\n        var title = 'Invalid Attribute';\n        var pointer = '/data/attributes/' + key;\n        if (key === PRIMARY_ATTRIBUTE_KEY) {\n          title = 'Invalid Document';\n          pointer = '/data';\n        }\n        out.push({\n          title: title,\n          detail: messages[i],\n          source: {\n            pointer: pointer\n          }\n        });\n      }\n    });\n  }\n\n  return out;\n}\n\n/**\n  Convert an array of errors in JSON-API format into an object.\n\n  ```javascript\n  import DS from 'ember-data';\n\n  const { errorsArrayToHash } = DS;\n\n  let errorsArray = [\n    {\n      title: 'Invalid Attribute',\n      detail: 'Must be present',\n      source: { pointer: '/data/attributes/name' }\n    },\n    {\n      title: 'Invalid Attribute',\n      detail: 'Must be present',\n      source: { pointer: '/data/attributes/age' }\n    },\n    {\n      title: 'Invalid Attribute',\n      detail: 'Must be a number',\n      source: { pointer: '/data/attributes/age' }\n    }\n  ];\n\n  let errors = errorsArrayToHash(errorsArray);\n  // {\n  //   \"name\": [\"Must be present\"],\n  //   \"age\":  [\"Must be present\", \"must be a number\"]\n  // }\n  ```\n\n  @method errorsArrayToHash\n  @public\n  @namespace\n  @for DS\n  @param {Array} errors array of errors in JSON-API format\n  @return {Object}\n*/\nfunction errorsArrayToHash(errors) {\n  var out = {};\n\n  if (Ember.isPresent(errors)) {\n    errors.forEach(function (error) {\n      if (error.source && error.source.pointer) {\n        var key = error.source.pointer.match(SOURCE_POINTER_REGEXP);\n\n        if (key) {\n          key = key[2];\n        } else if (error.source.pointer.search(SOURCE_POINTER_PRIMARY_REGEXP) !== -1) {\n          key = PRIMARY_ATTRIBUTE_KEY;\n        }\n\n        if (key) {\n          out[key] = out[key] || [];\n          out[key].push(error.detail || error.title);\n        }\n      }\n    });\n  }\n\n  return out;\n}\n\nfunction OrderedSet() {\n  this._super$constructor();\n}\n\nOrderedSet.create = function () {\n  var Constructor = this;\n  return new Constructor();\n};\n\nOrderedSet.prototype = Object.create(EmberOrderedSet.prototype);\nOrderedSet.prototype.constructor = OrderedSet;\nOrderedSet.prototype._super$constructor = EmberOrderedSet;\n\nOrderedSet.prototype.addWithIndex = function (obj, idx) {\n  var guid = Ember.guidFor(obj);\n  var presenceSet = this.presenceSet;\n  var list = this.list;\n\n  if (presenceSet[guid] === true) {\n    return;\n  }\n\n  presenceSet[guid] = true;\n\n  if (idx === undefined || idx === null) {\n    list.push(obj);\n  } else {\n    list.splice(idx, 0, obj);\n  }\n\n  this.size += 1;\n\n  return this;\n};\n\n/*\n  This method normalizes a link to an \"links object\". If the passed link is\n  already an object it's returned without any modifications.\n\n  See http://jsonapi.org/format/#document-links for more information.\n\n  @method _normalizeLink\n  @private\n  @param {String} link\n  @return {Object|null}\n  @for DS\n*/\nfunction _normalizeLink(link) {\n  switch (typeof link) {\n    case 'object':\n      return link;\n    case 'string':\n      return { href: link };\n  }\n  return null;\n}\n\nvar _createClass$5 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /* global heimdall */\n\n\nfunction _classCallCheck$7(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Relationship = function () {\n  function Relationship(store, internalModel, inverseKey, relationshipMeta) {\n    _classCallCheck$7(this, Relationship);\n\n    var async = relationshipMeta.options.async;\n    var polymorphic = relationshipMeta.options.polymorphic;\n    this.members = new OrderedSet();\n    this.canonicalMembers = new OrderedSet();\n    this.store = store;\n    this.key = relationshipMeta.key;\n    this.inverseKey = inverseKey;\n    this.internalModel = internalModel;\n    this.isAsync = typeof async === 'undefined' ? true : async;\n    this.isPolymorphic = typeof polymorphic === 'undefined' ? true : polymorphic;\n    this.relationshipMeta = relationshipMeta;\n    //This probably breaks for polymorphic relationship in complex scenarios, due to\n    //multiple possible modelNames\n    this.inverseKeyForImplicit = this.internalModel.modelName + this.key;\n    this.linkPromise = null;\n    this.meta = null;\n    this.hasData = false;\n    this.hasLoaded = false;\n    this.__inverseMeta = undefined;\n  }\n\n  Relationship.prototype._inverseIsAsync = function _inverseIsAsync() {\n    var inverseMeta = this._inverseMeta;\n    if (!inverseMeta) {\n      return false;\n    }\n\n    var inverseAsync = inverseMeta.options.async;\n    return typeof inverseAsync === 'undefined' ? true : inverseAsync;\n  };\n\n  Relationship.prototype._inverseIsSync = function _inverseIsSync() {\n    var inverseMeta = this._inverseMeta;\n    if (!inverseMeta) {\n      return false;\n    }\n\n    var inverseAsync = inverseMeta.options.async;\n    return typeof inverseAsync === 'undefined' ? false : !inverseAsync;\n  };\n\n  Relationship.prototype.internalModelDidDematerialize = function internalModelDidDematerialize() {\n    var _this = this;\n\n    if (!this.inverseKey) {\n      return;\n    }\n\n    this.forAllMembers(function (inverseInternalModel) {\n      var relationship = inverseInternalModel._relationships.get(_this.inverseKey);\n      relationship.inverseDidDematerialize(_this.internalModel);\n    });\n  };\n\n  Relationship.prototype.inverseDidDematerialize = function inverseDidDematerialize(inverseInternalModel) {\n    this.linkPromise = null;\n    if (!this.isAsync) {\n      // unloading inverse of a sync relationship is treated as a client-side\n      // delete, so actually remove the models don't merely invalidate the cp\n      // cache.\n      this.removeInternalModelFromOwn(inverseInternalModel);\n      this.removeCanonicalInternalModelFromOwn(inverseInternalModel);\n    }\n  };\n\n  Relationship.prototype.updateMeta = function updateMeta(meta) {\n    this.meta = meta;\n  };\n\n  Relationship.prototype.clear = function clear() {\n\n    var members = this.members.list;\n    while (members.length > 0) {\n      var member = members[0];\n      this.removeInternalModel(member);\n    }\n\n    var canonicalMembers = this.canonicalMembers.list;\n    while (canonicalMembers.length > 0) {\n      var _member = canonicalMembers[0];\n      this.removeCanonicalInternalModel(_member);\n    }\n  };\n\n  Relationship.prototype.removeAllInternalModelsFromOwn = function removeAllInternalModelsFromOwn() {\n    this.members.clear();\n    this.internalModel.updateRecordArrays();\n  };\n\n  Relationship.prototype.removeAllCanonicalInternalModelsFromOwn = function removeAllCanonicalInternalModelsFromOwn() {\n    this.canonicalMembers.clear();\n    this.flushCanonicalLater();\n  };\n\n  Relationship.prototype.removeInternalModels = function removeInternalModels(internalModels) {\n    var _this2 = this;\n\n    internalModels.forEach(function (internalModel) {\n      return _this2.removeInternalModel(internalModel);\n    });\n  };\n\n  Relationship.prototype.addInternalModels = function addInternalModels(internalModels, idx) {\n    var _this3 = this;\n\n    internalModels.forEach(function (internalModel) {\n      _this3.addInternalModel(internalModel, idx);\n      if (idx !== undefined) {\n        idx++;\n      }\n    });\n  };\n\n  Relationship.prototype.addCanonicalInternalModels = function addCanonicalInternalModels(internalModels, idx) {\n    for (var i = 0; i < internalModels.length; i++) {\n      if (idx !== undefined) {\n        this.addCanonicalInternalModel(internalModels[i], i + idx);\n      } else {\n        this.addCanonicalInternalModel(internalModels[i]);\n      }\n    }\n  };\n\n  Relationship.prototype.addCanonicalInternalModel = function addCanonicalInternalModel(internalModel, idx) {\n    if (!this.canonicalMembers.has(internalModel)) {\n      this.canonicalMembers.add(internalModel);\n      this.setupInverseRelationship(internalModel);\n    }\n    this.flushCanonicalLater();\n    this.setHasData(true);\n  };\n\n  Relationship.prototype.setupInverseRelationship = function setupInverseRelationship(internalModel) {\n    if (this.inverseKey) {\n      var relationships = internalModel._relationships;\n      var relationshipExisted = relationships.has(this.inverseKey);\n      var relationship = relationships.get(this.inverseKey);\n      if (relationshipExisted || this.isPolymorphic) {\n        // if we have only just initialized the inverse relationship, then it\n        // already has this.internalModel in its canonicalMembers, so skip the\n        // unnecessary work.  The exception to this is polymorphic\n        // relationships whose members are determined by their inverse, as those\n        // relationships cannot efficiently find their inverse payloads.\n        relationship.addCanonicalInternalModel(this.internalModel);\n      }\n    } else {\n      var _relationships = internalModel._implicitRelationships;\n      var _relationship = _relationships[this.inverseKeyForImplicit];\n      if (!_relationship) {\n        _relationship = _relationships[this.inverseKeyForImplicit] = new Relationship(this.store, internalModel, this.key, { options: { async: this.isAsync }, type: this.parentType });\n      }\n      _relationship.addCanonicalInternalModel(this.internalModel);\n    }\n  };\n\n  Relationship.prototype.removeCanonicalInternalModels = function removeCanonicalInternalModels(internalModels, idx) {\n    for (var i = 0; i < internalModels.length; i++) {\n      if (idx !== undefined) {\n        this.removeCanonicalInternalModel(internalModels[i], i + idx);\n      } else {\n        this.removeCanonicalInternalModel(internalModels[i]);\n      }\n    }\n  };\n\n  Relationship.prototype.removeCanonicalInternalModel = function removeCanonicalInternalModel(internalModel, idx) {\n    if (this.canonicalMembers.has(internalModel)) {\n      this.removeCanonicalInternalModelFromOwn(internalModel);\n      if (this.inverseKey) {\n        this.removeCanonicalInternalModelFromInverse(internalModel);\n      } else {\n        if (internalModel._implicitRelationships[this.inverseKeyForImplicit]) {\n          internalModel._implicitRelationships[this.inverseKeyForImplicit].removeCanonicalInternalModel(this.internalModel);\n        }\n      }\n    }\n    this.flushCanonicalLater();\n  };\n\n  Relationship.prototype.addInternalModel = function addInternalModel(internalModel, idx) {\n    if (!this.members.has(internalModel)) {\n      this.members.addWithIndex(internalModel, idx);\n      this.notifyRecordRelationshipAdded(internalModel, idx);\n      if (this.inverseKey) {\n        internalModel._relationships.get(this.inverseKey).addInternalModel(this.internalModel);\n      } else {\n        if (!internalModel._implicitRelationships[this.inverseKeyForImplicit]) {\n          internalModel._implicitRelationships[this.inverseKeyForImplicit] = new Relationship(this.store, internalModel, this.key, { options: { async: this.isAsync }, type: this.parentType });\n        }\n        internalModel._implicitRelationships[this.inverseKeyForImplicit].addInternalModel(this.internalModel);\n      }\n      this.internalModel.updateRecordArrays();\n    }\n    this.setHasData(true);\n  };\n\n  Relationship.prototype.removeInternalModel = function removeInternalModel(internalModel) {\n    if (this.members.has(internalModel)) {\n      this.removeInternalModelFromOwn(internalModel);\n      if (this.inverseKey) {\n        this.removeInternalModelFromInverse(internalModel);\n      } else {\n        if (internalModel._implicitRelationships[this.inverseKeyForImplicit]) {\n          internalModel._implicitRelationships[this.inverseKeyForImplicit].removeInternalModel(this.internalModel);\n        }\n      }\n    }\n  };\n\n  Relationship.prototype.removeInternalModelFromInverse = function removeInternalModelFromInverse(internalModel) {\n    var inverseRelationship = internalModel._relationships.get(this.inverseKey);\n    //Need to check for existence, as the record might unloading at the moment\n    if (inverseRelationship) {\n      inverseRelationship.removeInternalModelFromOwn(this.internalModel);\n    }\n  };\n\n  Relationship.prototype.removeInternalModelFromOwn = function removeInternalModelFromOwn(internalModel) {\n    this.members.delete(internalModel);\n    this.internalModel.updateRecordArrays();\n  };\n\n  Relationship.prototype.removeCanonicalInternalModelFromInverse = function removeCanonicalInternalModelFromInverse(internalModel) {\n    var inverseRelationship = internalModel._relationships.get(this.inverseKey);\n    //Need to check for existence, as the record might unloading at the moment\n    if (inverseRelationship) {\n      inverseRelationship.removeCanonicalInternalModelFromOwn(this.internalModel);\n    }\n  };\n\n  Relationship.prototype.removeCanonicalInternalModelFromOwn = function removeCanonicalInternalModelFromOwn(internalModel) {\n    this.canonicalMembers.delete(internalModel);\n    this.flushCanonicalLater();\n  };\n\n  /*\n    Call this method once a record deletion has been persisted\n    to purge it from BOTH current and canonical state of all\n    relationships.\n     @method removeCompletelyFromInverse\n    @private\n   */\n\n\n  Relationship.prototype.removeCompletelyFromInverse = function removeCompletelyFromInverse() {\n    var _this4 = this;\n\n    if (!this.inverseKey) {\n      return;\n    }\n\n    // we actually want a union of members and canonicalMembers\n    // they should be disjoint but currently are not due to a bug\n    var seen = Object.create(null);\n    var internalModel = this.internalModel;\n\n    var unload = function unload(inverseInternalModel) {\n      var id = Ember.guidFor(inverseInternalModel);\n\n      if (seen[id] === undefined) {\n        var relationship = inverseInternalModel._relationships.get(_this4.inverseKey);\n        relationship.removeCompletelyFromOwn(internalModel);\n        seen[id] = true;\n      }\n    };\n\n    this.members.forEach(unload);\n    this.canonicalMembers.forEach(unload);\n\n    if (!this.isAsync) {\n      this.clear();\n    }\n  };\n\n  Relationship.prototype.forAllMembers = function forAllMembers(callback) {\n    var seen = Object.create(null);\n\n    for (var i = 0; i < this.members.list.length; i++) {\n      var inverseInternalModel = this.members.list[i];\n      var id = Ember.guidFor(inverseInternalModel);\n      if (!seen[id]) {\n        seen[id] = true;\n        callback(inverseInternalModel);\n      }\n    }\n\n    for (var _i = 0; _i < this.canonicalMembers.list.length; _i++) {\n      var _inverseInternalModel = this.canonicalMembers.list[_i];\n      var _id = Ember.guidFor(_inverseInternalModel);\n      if (!seen[_id]) {\n        seen[_id] = true;\n        callback(_inverseInternalModel);\n      }\n    }\n  };\n\n  /*\n    Removes the given internalModel from BOTH canonical AND current state.\n     This method is useful when either a deletion or a rollback on a new record\n    needs to entirely purge itself from an inverse relationship.\n   */\n\n\n  Relationship.prototype.removeCompletelyFromOwn = function removeCompletelyFromOwn(internalModel) {\n    this.canonicalMembers.delete(internalModel);\n    this.members.delete(internalModel);\n    this.internalModel.updateRecordArrays();\n  };\n\n  Relationship.prototype.flushCanonical = function flushCanonical() {\n    var list = this.members.list;\n    this.willSync = false;\n    //a hack for not removing new internalModels\n    //TODO remove once we have proper diffing\n    var newInternalModels = [];\n    for (var i = 0; i < list.length; i++) {\n      if (list[i].isNew()) {\n        newInternalModels.push(list[i]);\n      }\n    }\n\n    //TODO(Igor) make this less abysmally slow\n    this.members = this.canonicalMembers.copy();\n    for (var _i2 = 0; _i2 < newInternalModels.length; _i2++) {\n      this.members.add(newInternalModels[_i2]);\n    }\n  };\n\n  Relationship.prototype.flushCanonicalLater = function flushCanonicalLater() {\n    if (this.willSync) {\n      return;\n    }\n    this.willSync = true;\n    this.store._updateRelationshipState(this);\n  };\n\n  Relationship.prototype.updateLink = function updateLink(link, initial) {\n    (true && Ember.warn('You pushed a record of type \\'' + this.internalModel.modelName + '\\' with a relationship \\'' + this.key + '\\' configured as \\'async: false\\'. You\\'ve included a link but no primary data, this may be an error in your payload.', this.isAsync || this.hasData, {\n      id: 'ds.store.push-link-for-sync-relationship'\n    }));\n    (true && !(typeof link === 'string' || link === null) && Ember.assert('You have pushed a record of type \\'' + this.internalModel.modelName + '\\' with \\'' + this.key + '\\' as a link, but the value of that link is not a string.', typeof link === 'string' || link === null));\n\n\n    this.link = link;\n    this.linkPromise = null;\n\n    if (!initial) {\n      this.internalModel.notifyPropertyChange(this.key);\n    }\n  };\n\n  Relationship.prototype.findLink = function findLink() {\n    if (this.linkPromise) {\n      return this.linkPromise;\n    } else {\n      var promise = this.fetchLink();\n      this.linkPromise = promise;\n      return promise.then(function (result) {\n        return result;\n      });\n    }\n  };\n\n  Relationship.prototype.updateInternalModelsFromAdapter = function updateInternalModelsFromAdapter(internalModels) {\n    this.setHasData(true);\n    //TODO(Igor) move this to a proper place\n    //TODO Once we have adapter support, we need to handle updated and canonical changes\n    this.computeChanges(internalModels);\n  };\n\n  Relationship.prototype.notifyRecordRelationshipAdded = function notifyRecordRelationshipAdded() {};\n\n  /*\n   `hasData` for a relationship is a flag to indicate if we consider the\n   content of this relationship \"known\". Snapshots uses this to tell the\n   difference between unknown (`undefined`) or empty (`null`). The reason for\n   this is that we wouldn't want to serialize unknown relationships as `null`\n   as that might overwrite remote state.\n    All relationships for a newly created (`store.createRecord()`) are\n   considered known (`hasData === true`).\n   */\n\n\n  Relationship.prototype.setHasData = function setHasData(value) {\n    this.hasData = value;\n  };\n\n  /*\n   `hasLoaded` is a flag to indicate if we have gotten data from the adapter or\n   not when the relationship has a link.\n    This is used to be able to tell when to fetch the link and when to return\n   the local data in scenarios where the local state is considered known\n   (`hasData === true`).\n    Updating the link will automatically set `hasLoaded` to `false`.\n   */\n\n\n  Relationship.prototype.setHasLoaded = function setHasLoaded(value) {\n    this.hasLoaded = value;\n  };\n\n  /*\n   `push` for a relationship allows the store to push a JSON API Relationship\n   Object onto the relationship. The relationship will then extract and set the\n   meta, data and links of that relationship.\n    `push` use `updateMeta`, `updateData` and `updateLink` to update the state\n   of the relationship.\n   */\n\n\n  Relationship.prototype.push = function push(payload, initial) {\n\n    var hasData = false;\n    var hasLink = false;\n\n    if (payload.meta) {\n      this.updateMeta(payload.meta);\n    }\n\n    if (payload.data !== undefined) {\n      hasData = true;\n      this.updateData(payload.data, initial);\n    }\n\n    if (payload.links && payload.links.related) {\n      var relatedLink = _normalizeLink(payload.links.related);\n      if (relatedLink && relatedLink.href && relatedLink.href !== this.link) {\n        hasLink = true;\n        this.updateLink(relatedLink.href, initial);\n      }\n    }\n\n    /*\n     Data being pushed into the relationship might contain only data or links,\n     or a combination of both.\n      If we got data we want to set both hasData and hasLoaded to true since\n     this would indicate that we should prefer the local state instead of\n     trying to fetch the link or call findRecord().\n      If we have no data but a link is present we want to set hasLoaded to false\n     without modifying the hasData flag. This will ensure we fetch the updated\n     link next time the relationship is accessed.\n     */\n    if (hasData) {\n      this.setHasData(true);\n      this.setHasLoaded(true);\n    } else if (hasLink) {\n      this.setHasLoaded(false);\n    }\n  };\n\n  Relationship.prototype.updateData = function updateData() {};\n\n  Relationship.prototype.destroy = function destroy() {};\n\n  _createClass$5(Relationship, [{\n    key: '_inverseMeta',\n    get: function get() {\n      if (this.__inverseMeta === undefined) {\n        var inverseMeta = null;\n\n        if (this.inverseKey) {\n          var inverseModelClass = this.store.modelFor(this.relationshipMeta.type);\n          var inverseRelationships = Ember.get(inverseModelClass, 'relationshipsByName');\n          inverseMeta = inverseRelationships.get(this.inverseKey);\n        }\n\n        this.__inverseMeta = inverseMeta;\n      }\n\n      return this.__inverseMeta;\n    }\n  }, {\n    key: 'parentType',\n    get: function get() {\n      return this.internalModel.modelName;\n    }\n  }]);\n\n  return Relationship;\n}();\n\nfunction _bind(fn) {\n  for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    args[_key - 1] = arguments[_key];\n  }\n\n  return function () {\n    return fn.apply(undefined, args);\n  };\n}\n\nfunction _guard(promise, test) {\n  var guarded = promise['finally'](function () {\n    if (!test()) {\n      guarded._subscribers.length = 0;\n    }\n  });\n\n  return guarded;\n}\n\nfunction _objectIsAlive(object) {\n  return !(Ember.get(object, \"isDestroyed\") || Ember.get(object, \"isDestroying\"));\n}\n\n/**\n  @namespace\n  @method diffArray\n  @private\n  @param {Array} oldArray the old array\n  @param {Array} newArray the new array\n  @return {hash} {\n      firstChangeIndex: <integer>,  // null if no change\n      addedCount: <integer>,        // 0 if no change\n      removedCount: <integer>       // 0 if no change\n    }\n*/\nfunction diffArray(oldArray, newArray) {\n  var oldLength = oldArray.length;\n  var newLength = newArray.length;\n\n  var shortestLength = Math.min(oldLength, newLength);\n  var firstChangeIndex = null; // null signifies no changes\n\n  // find the first change\n  for (var i = 0; i < shortestLength; i++) {\n    // compare each item in the array\n    if (oldArray[i] !== newArray[i]) {\n      firstChangeIndex = i;\n      break;\n    }\n  }\n\n  if (firstChangeIndex === null && newLength !== oldLength) {\n    // no change found in the overlapping block\n    // and array lengths differ,\n    // so change starts at end of overlap\n    firstChangeIndex = shortestLength;\n  }\n\n  var addedCount = 0;\n  var removedCount = 0;\n  if (firstChangeIndex !== null) {\n    // we found a change, find the end of the change\n    var unchangedEndBlockLength = shortestLength - firstChangeIndex;\n    // walk back from the end of both arrays until we find a change\n    for (var _i = 1; _i <= shortestLength; _i++) {\n      // compare each item in the array\n      if (oldArray[oldLength - _i] !== newArray[newLength - _i]) {\n        unchangedEndBlockLength = _i - 1;\n        break;\n      }\n    }\n    addedCount = newLength - unchangedEndBlockLength - firstChangeIndex;\n    removedCount = oldLength - unchangedEndBlockLength - firstChangeIndex;\n  }\n\n  return {\n    firstChangeIndex: firstChangeIndex,\n    addedCount: addedCount,\n    removedCount: removedCount\n  };\n}\n\n/**\n  A `ManyArray` is a `MutableArray` that represents the contents of a has-many\n  relationship.\n\n  The `ManyArray` is instantiated lazily the first time the relationship is\n  requested.\n\n  ### Inverses\n\n  Often, the relationships in Ember Data applications will have\n  an inverse. For example, imagine the following models are\n  defined:\n\n  ```app/models/post.js\n  import DS from 'ember-data';\n\n  export default DS.Model.extend({\n    comments: DS.hasMany('comment')\n  });\n  ```\n\n  ```app/models/comment.js\n  import DS from 'ember-data';\n\n  export default DS.Model.extend({\n    post: DS.belongsTo('post')\n  });\n  ```\n\n  If you created a new instance of `App.Post` and added\n  a `App.Comment` record to its `comments` has-many\n  relationship, you would expect the comment's `post`\n  property to be set to the post that contained\n  the has-many.\n\n  We call the record to which a relationship belongs the\n  relationship's _owner_.\n\n  @class ManyArray\n  @namespace DS\n  @extends Ember.Object\n  @uses Ember.MutableArray, Ember.Evented\n*/\nvar ManyArray = Ember.Object.extend(Ember.MutableArray, Ember.Evented, {\n  init: function init() {\n    this._super.apply(this, arguments);\n\n    /**\n    The loading state of this array\n     @property {Boolean} isLoaded\n    */\n    this.isLoaded = false;\n    this.length = 0;\n\n    /**\n    Used for async `hasMany` arrays\n    to keep track of when they will resolve.\n     @property {Ember.RSVP.Promise} promise\n    @private\n    */\n    this.promise = null;\n\n    /**\n    Metadata associated with the request for async hasMany relationships.\n     Example\n     Given that the server returns the following JSON payload when fetching a\n    hasMany relationship:\n     ```js\n    {\n      \"comments\": [{\n        \"id\": 1,\n        \"comment\": \"This is the first comment\",\n      }, {\n    // ...\n      }],\n       \"meta\": {\n        \"page\": 1,\n        \"total\": 5\n      }\n    }\n    ```\n     You can then access the metadata via the `meta` property:\n     ```js\n    post.get('comments').then(function(comments) {\n      var meta = comments.get('meta');\n     // meta.page => 1\n    // meta.total => 5\n    });\n    ```\n     @property {Object} meta\n    @public\n    */\n    this.meta = this.meta || null;\n\n    /**\n    `true` if the relationship is polymorphic, `false` otherwise.\n     @property {Boolean} isPolymorphic\n    @private\n    */\n    this.isPolymorphic = this.isPolymorphic || false;\n\n    /**\n    The relationship which manages this array.\n     @property {ManyRelationship} relationship\n    @private\n    */\n    this.relationship = this.relationship || null;\n\n    this.currentState = [];\n    this.flushCanonical(false);\n  },\n  objectAt: function objectAt(index) {\n    var internalModel = this.currentState[index];\n    if (internalModel === undefined) {\n      return;\n    }\n\n    return internalModel.getRecord();\n  },\n  flushCanonical: function flushCanonical() {\n    var isInitialized = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n    // It’s possible the parent side of the relationship may have been unloaded by this point\n    if (!_objectIsAlive(this)) {\n      return;\n    }\n    var toSet = this.canonicalState;\n\n    //a hack for not removing new records\n    //TODO remove once we have proper diffing\n    var newInternalModels = this.currentState.filter(\n    // only add new internalModels which are not yet in the canonical state of this\n    // relationship (a new internalModel can be in the canonical state if it has\n    // been 'acknowleged' to be in the relationship via a store.push)\n    function (internalModel) {\n      return internalModel.isNew() && toSet.indexOf(internalModel) === -1;\n    });\n    toSet = toSet.concat(newInternalModels);\n\n    // diff to find changes\n    var diff = diffArray(this.currentState, toSet);\n\n    if (diff.firstChangeIndex !== null) {\n      // it's null if no change found\n      // we found a change\n      this.arrayContentWillChange(diff.firstChangeIndex, diff.removedCount, diff.addedCount);\n      this.set('length', toSet.length);\n      this.currentState = toSet;\n      this.arrayContentDidChange(diff.firstChangeIndex, diff.removedCount, diff.addedCount);\n      if (isInitialized && diff.addedCount > 0) {\n        //notify only on additions\n        //TODO only notify if unloaded\n        this.relationship.notifyHasManyChanged();\n      }\n    }\n  },\n  internalReplace: function internalReplace(idx, amt, objects) {\n    if (!objects) {\n      objects = [];\n    }\n    this.arrayContentWillChange(idx, amt, objects.length);\n    this.currentState.splice.apply(this.currentState, [idx, amt].concat(objects));\n    this.set('length', this.currentState.length);\n    this.arrayContentDidChange(idx, amt, objects.length);\n  },\n\n\n  //TODO(Igor) optimize\n  _removeInternalModels: function _removeInternalModels(internalModels) {\n    for (var i = 0; i < internalModels.length; i++) {\n      var index = this.currentState.indexOf(internalModels[i]);\n      this.internalReplace(index, 1);\n    }\n  },\n\n\n  //TODO(Igor) optimize\n  _addInternalModels: function _addInternalModels(internalModels, idx) {\n    if (idx === undefined) {\n      idx = this.currentState.length;\n    }\n    this.internalReplace(idx, 0, internalModels);\n  },\n  replace: function replace(idx, amt, objects) {\n    var internalModels = void 0;\n    if (amt > 0) {\n      internalModels = this.currentState.slice(idx, idx + amt);\n      this.get('relationship').removeInternalModels(internalModels);\n    }\n    if (objects) {\n      this.get('relationship').addInternalModels(objects.map(function (obj) {\n        return obj._internalModel;\n      }), idx);\n    }\n  },\n\n\n  /**\n    Reloads all of the records in the manyArray. If the manyArray\n    holds a relationship that was originally fetched using a links url\n    Ember Data will revisit the original links url to repopulate the\n    relationship.\n     If the manyArray holds the result of a `store.query()` reload will\n    re-run the original query.\n     Example\n     ```javascript\n    var user = store.peekRecord('user', 1)\n    user.login().then(function() {\n      user.get('permissions').then(function(permissions) {\n        return permissions.reload();\n      });\n    });\n    ```\n     @method reload\n    @public\n  */\n  reload: function reload() {\n    return this.relationship.reload();\n  },\n\n\n  /**\n    Saves all of the records in the `ManyArray`.\n     Example\n     ```javascript\n    store.findRecord('inbox', 1).then(function(inbox) {\n      inbox.get('messages').then(function(messages) {\n        messages.forEach(function(message) {\n          message.set('isRead', true);\n        });\n        messages.save()\n      });\n    });\n    ```\n     @method save\n    @return {DS.PromiseArray} promise\n  */\n  save: function save() {\n    var manyArray = this;\n    var promiseLabel = 'DS: ManyArray#save ' + Ember.get(this, 'type');\n    var promise = Ember.RSVP.all(this.invoke(\"save\"), promiseLabel).then(function () {\n      return manyArray;\n    }, null, 'DS: ManyArray#save return ManyArray');\n\n    return PromiseArray.create({ promise: promise });\n  },\n\n\n  /**\n    Create a child record within the owner\n     @method createRecord\n    @private\n    @param {Object} hash\n    @return {DS.Model} record\n  */\n  createRecord: function createRecord(hash) {\n    var store = Ember.get(this, 'store');\n    var type = Ember.get(this, 'type');\n\n    (true && !(!Ember.get(this, 'isPolymorphic')) && Ember.assert('You cannot add \\'' + type.modelName + '\\' records to this polymorphic relationship.', !Ember.get(this, 'isPolymorphic')));\n\n    var record = store.createRecord(type.modelName, hash);\n    this.pushObject(record);\n\n    return record;\n  }\n});\n\nvar _createClass$4 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck$6(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn$1(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits$1(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ManyRelationship = function (_Relationship) {\n  _inherits$1(ManyRelationship, _Relationship);\n\n  function ManyRelationship(store, internalModel, inverseKey, relationshipMeta) {\n    _classCallCheck$6(this, ManyRelationship);\n\n    var _this = _possibleConstructorReturn$1(this, _Relationship.call(this, store, internalModel, inverseKey, relationshipMeta));\n\n    _this.belongsToType = relationshipMeta.type;\n    _this.canonicalState = [];\n    _this.isPolymorphic = relationshipMeta.options.polymorphic;\n    // The ManyArray for this relationship\n    _this._manyArray = null;\n    // The previous ManyArray for this relationship.  It will be destroyed when\n    // we create a new many array, but in the interim it will be updated if\n    // inverse internal models are unloaded.\n    _this._retainedManyArray = null;\n    _this.__loadingPromise = null;\n    return _this;\n  }\n\n  ManyRelationship.prototype._updateLoadingPromise = function _updateLoadingPromise(promise, content) {\n    if (this.__loadingPromise) {\n      if (content) {\n        this.__loadingPromise.set('content', content);\n      }\n      this.__loadingPromise.set('promise', promise);\n    } else {\n      this.__loadingPromise = PromiseManyArray.create({\n        promise: promise,\n        content: content\n      });\n    }\n\n    return this.__loadingPromise;\n  };\n\n  ManyRelationship.prototype.removeInverseRelationships = function removeInverseRelationships() {\n    _Relationship.prototype.removeInverseRelationships.call(this);\n    if (this._manyArray) {\n      this._manyArray.destroy();\n      this._manyArray = null;\n    }\n\n    if (this._loadingPromise) {\n      this._loadingPromise.destroy();\n    }\n  };\n\n  ManyRelationship.prototype.updateMeta = function updateMeta(meta) {\n    _Relationship.prototype.updateMeta.call(this, meta);\n    if (this._manyArray) {\n      this._manyArray.set('meta', meta);\n    }\n  };\n\n  ManyRelationship.prototype.addCanonicalInternalModel = function addCanonicalInternalModel(internalModel, idx) {\n    if (this.canonicalMembers.has(internalModel)) {\n      return;\n    }\n    if (idx !== undefined) {\n      this.canonicalState.splice(idx, 0, internalModel);\n    } else {\n      this.canonicalState.push(internalModel);\n    }\n    _Relationship.prototype.addCanonicalInternalModel.call(this, internalModel, idx);\n  };\n\n  ManyRelationship.prototype.inverseDidDematerialize = function inverseDidDematerialize(inverseInternalModel) {\n    _Relationship.prototype.inverseDidDematerialize.call(this, inverseInternalModel);\n    if (this.isAsync) {\n      if (this._manyArray) {\n        this._retainedManyArray = this._manyArray;\n        this._manyArray = null;\n      }\n      this._removeInternalModelFromManyArray(this._retainedManyArray, inverseInternalModel);\n    }\n    this.notifyHasManyChanged();\n  };\n\n  ManyRelationship.prototype.addInternalModel = function addInternalModel(internalModel, idx) {\n    if (this.members.has(internalModel)) {\n      return;\n    }\n\n    emberData_Debug.assertPolymorphicType(this.internalModel, this.relationshipMeta, internalModel);\n    _Relationship.prototype.addInternalModel.call(this, internalModel, idx);\n    // make lazy later\n    this.manyArray._addInternalModels([internalModel], idx);\n  };\n\n  ManyRelationship.prototype.removeCanonicalInternalModelFromOwn = function removeCanonicalInternalModelFromOwn(internalModel, idx) {\n    var i = idx;\n    if (!this.canonicalMembers.has(internalModel)) {\n      return;\n    }\n    if (i === undefined) {\n      i = this.canonicalState.indexOf(internalModel);\n    }\n    if (i > -1) {\n      this.canonicalState.splice(i, 1);\n    }\n    _Relationship.prototype.removeCanonicalInternalModelFromOwn.call(this, internalModel, idx);\n  };\n\n  ManyRelationship.prototype.removeAllCanonicalInternalModelsFromOwn = function removeAllCanonicalInternalModelsFromOwn() {\n    _Relationship.prototype.removeAllCanonicalInternalModelsFromOwn.call(this);\n    this.canonicalMembers.clear();\n    this.canonicalState.splice(0, this.canonicalState.length);\n  };\n\n  ManyRelationship.prototype.removeCompletelyFromOwn = function removeCompletelyFromOwn(internalModel) {\n    _Relationship.prototype.removeCompletelyFromOwn.call(this, internalModel);\n\n    var canonicalIndex = this.canonicalState.indexOf(internalModel);\n\n    if (canonicalIndex !== -1) {\n      this.canonicalState.splice(canonicalIndex, 1);\n    }\n\n    var manyArray = this._manyArray;\n\n    if (manyArray) {\n      var idx = manyArray.currentState.indexOf(internalModel);\n\n      if (idx !== -1) {\n        manyArray.internalReplace(idx, 1);\n      }\n    }\n  };\n\n  ManyRelationship.prototype.flushCanonical = function flushCanonical() {\n    if (this._manyArray) {\n      this._manyArray.flushCanonical();\n    }\n    _Relationship.prototype.flushCanonical.call(this);\n  };\n\n  ManyRelationship.prototype.removeInternalModelFromOwn = function removeInternalModelFromOwn(internalModel, idx) {\n    if (!this.members.has(internalModel)) {\n      return;\n    }\n    _Relationship.prototype.removeInternalModelFromOwn.call(this, internalModel, idx);\n    // note that ensuring the many array is created, via `this.manyArray`\n    // (instead of `this._manyArray`) is intentional.\n    //\n    // Because we're removing from local, and not canonical, state, it is\n    // important that the many array is initialized now with those changes,\n    // otherwise it will be initialized with canonical state and we'll have\n    // lost the fact that this internalModel was removed.\n    this._removeInternalModelFromManyArray(this.manyArray, internalModel, idx);\n    this._removeInternalModelFromManyArray(this._retainedManyArray, internalModel, idx);\n  };\n\n  ManyRelationship.prototype.removeAllInternalModelsFromOwn = function removeAllInternalModelsFromOwn() {\n    _Relationship.prototype.removeAllInternalModelsFromOwn.call(this);\n    // as with removeInternalModelFromOwn, we make sure the many array is\n    // instantiated, or we'll lose local removals, as we're not updating\n    // canonical state here.\n    this.manyArray.clear();\n    if (this._retainedManyArray) {\n      this._retainedManyArray.clear();\n    }\n  };\n\n  ManyRelationship.prototype._removeInternalModelFromManyArray = function _removeInternalModelFromManyArray(manyArray, internalModel, idx) {\n    if (manyArray === null) {\n      return;\n    }\n\n    if (idx !== undefined) {\n      //TODO(Igor) not used currently, fix\n      manyArray.currentState.removeAt(idx);\n    } else {\n      manyArray._removeInternalModels([internalModel]);\n    }\n  };\n\n  ManyRelationship.prototype.notifyRecordRelationshipAdded = function notifyRecordRelationshipAdded(internalModel, idx) {\n    this.internalModel.notifyHasManyAdded(this.key, internalModel, idx);\n  };\n\n  ManyRelationship.prototype.reload = function reload() {\n    var manyArray = this.manyArray;\n    var manyArrayLoadedState = manyArray.get('isLoaded');\n\n    if (this._loadingPromise) {\n      if (this._loadingPromise.get('isPending')) {\n        return this._loadingPromise;\n      }\n      if (this._loadingPromise.get('isRejected')) {\n        manyArray.set('isLoaded', manyArrayLoadedState);\n      }\n    }\n\n    var promise = void 0;\n    if (this.link) {\n      promise = this.fetchLink();\n    } else {\n      promise = this.store._scheduleFetchMany(manyArray.currentState).then(function () {\n        return manyArray;\n      });\n    }\n\n    this._updateLoadingPromise(promise);\n    return this._loadingPromise;\n  };\n\n  ManyRelationship.prototype.computeChanges = function computeChanges() {\n    var internalModels = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n    var members = this.canonicalMembers;\n    var internalModelsToRemove = [];\n    var internalModelSet = setForArray(internalModels);\n\n    members.forEach(function (member) {\n      if (internalModelSet.has(member)) {\n        return;\n      }\n\n      internalModelsToRemove.push(member);\n    });\n\n    this.removeCanonicalInternalModels(internalModelsToRemove);\n\n    for (var i = 0, l = internalModels.length; i < l; i++) {\n      var internalModel = internalModels[i];\n      this.removeCanonicalInternalModel(internalModel);\n      this.addCanonicalInternalModel(internalModel, i);\n    }\n  };\n\n  ManyRelationship.prototype.setInitialInternalModels = function setInitialInternalModels(internalModels) {\n    if (Array.isArray(internalModels) === false || internalModels.length === 0) {\n      return;\n    }\n\n    for (var i = 0; i < internalModels.length; i++) {\n      var internalModel = internalModels[i];\n      if (this.canonicalMembers.has(internalModel)) {\n        continue;\n      }\n\n      this.canonicalMembers.add(internalModel);\n      this.members.add(internalModel);\n      this.setupInverseRelationship(internalModel);\n    }\n\n    this.canonicalState = this.canonicalMembers.toArray();\n  };\n\n  ManyRelationship.prototype.fetchLink = function fetchLink() {\n    var _this2 = this;\n\n    return this.store.findHasMany(this.internalModel, this.link, this.relationshipMeta).then(function (records) {\n      if (records.hasOwnProperty('meta')) {\n        _this2.updateMeta(records.meta);\n      }\n      _this2.store._backburner.join(function () {\n        _this2.updateInternalModelsFromAdapter(records);\n        _this2.manyArray.set('isLoaded', true);\n        _this2.setHasData(true);\n      });\n      return _this2.manyArray;\n    });\n  };\n\n  ManyRelationship.prototype.findRecords = function findRecords() {\n    var manyArray = this.manyArray;\n    var internalModels = manyArray.currentState;\n\n    //TODO CLEANUP\n    return this.store.findMany(internalModels).then(function () {\n      if (!manyArray.get('isDestroyed')) {\n        //Goes away after the manyArray refactor\n        manyArray.set('isLoaded', true);\n      }\n      return manyArray;\n    });\n  };\n\n  ManyRelationship.prototype.notifyHasManyChanged = function notifyHasManyChanged() {\n    this.internalModel.notifyHasManyAdded(this.key);\n  };\n\n  ManyRelationship.prototype.getRecords = function getRecords() {\n    var _this3 = this;\n\n    //TODO(Igor) sync server here, once our syncing is not stupid\n    var manyArray = this.manyArray;\n    if (this.isAsync) {\n      var promise = void 0;\n      if (this.link) {\n        if (this.hasLoaded) {\n          promise = this.findRecords();\n        } else {\n          promise = this.findLink().then(function () {\n            return _this3.findRecords();\n          });\n        }\n      } else {\n        promise = this.findRecords();\n      }\n      return this._updateLoadingPromise(promise, manyArray);\n    } else {\n      (true && !(manyArray.isEvery('isEmpty', false)) && Ember.assert('You looked up the \\'' + this.key + '\\' relationship on a \\'' + this.internalModel.type.modelName + '\\' with id ' + this.internalModel.id + ' but some of the associated records were not loaded. Either make sure they are all loaded together with the parent record, or specify that the relationship is async (\\'DS.hasMany({ async: true })\\')', manyArray.isEvery('isEmpty', false)));\n\n      //TODO(Igor) WTF DO I DO HERE?\n      // TODO @runspired equal WTFs to Igor\n\n      if (!manyArray.get('isDestroyed')) {\n        manyArray.set('isLoaded', true);\n      }\n      return manyArray;\n    }\n  };\n\n  ManyRelationship.prototype.updateData = function updateData(data, initial) {\n    var internalModels = this.store._pushResourceIdentifiers(this, data);\n    if (initial) {\n      this.setInitialInternalModels(internalModels);\n    } else {\n      this.updateInternalModelsFromAdapter(internalModels);\n    }\n  };\n\n  ManyRelationship.prototype.destroy = function destroy() {\n    _Relationship.prototype.destroy.call(this);\n    var manyArray = this._manyArray;\n    if (manyArray) {\n      manyArray.destroy();\n      this._manyArray = null;\n    }\n\n    var proxy = this.__loadingPromise;\n\n    if (proxy) {\n      proxy.destroy();\n      this.__loadingPromise = null;\n    }\n  };\n\n  _createClass$4(ManyRelationship, [{\n    key: '_loadingPromise',\n    get: function get() {\n      return this.__loadingPromise;\n    }\n  }, {\n    key: 'manyArray',\n    get: function get() {\n      (true && !(this._manyArray === null || this._retainedManyArray === null) && Ember.assert('Error: relationship ' + this.parentType + ':' + this.key + ' has both many array and retained many array', this._manyArray === null || this._retainedManyArray === null));\n\n\n      if (!this._manyArray) {\n        this._manyArray = ManyArray.create({\n          canonicalState: this.canonicalState,\n          store: this.store,\n          relationship: this,\n          type: this.store.modelFor(this.belongsToType),\n          record: this.internalModel,\n          meta: this.meta,\n          isPolymorphic: this.isPolymorphic\n        });\n\n        if (this._retainedManyArray !== null) {\n          this._retainedManyArray.destroy();\n          this._retainedManyArray = null;\n        }\n      }\n\n      return this._manyArray;\n    }\n  }]);\n\n  return ManyRelationship;\n}(Relationship);\n\nfunction setForArray(array) {\n  var set = new OrderedSet();\n\n  if (array) {\n    for (var i = 0, l = array.length; i < l; i++) {\n      set.add(array[i]);\n    }\n  }\n\n  return set;\n}\n\nfunction _classCallCheck$8(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn$2(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits$2(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar BelongsToRelationship = function (_Relationship) {\n  _inherits$2(BelongsToRelationship, _Relationship);\n\n  function BelongsToRelationship(store, internalModel, inverseKey, relationshipMeta) {\n    _classCallCheck$8(this, BelongsToRelationship);\n\n    var _this = _possibleConstructorReturn$2(this, _Relationship.call(this, store, internalModel, inverseKey, relationshipMeta));\n\n    _this.internalModel = internalModel;\n    _this.key = relationshipMeta.key;\n    _this.inverseInternalModel = null;\n    _this.canonicalState = null;\n    return _this;\n  }\n\n  BelongsToRelationship.prototype.setInternalModel = function setInternalModel(internalModel) {\n    if (internalModel) {\n      this.addInternalModel(internalModel);\n    } else if (this.inverseInternalModel) {\n      this.removeInternalModel(this.inverseInternalModel);\n    }\n    this.setHasData(true);\n    this.setHasLoaded(true);\n  };\n\n  BelongsToRelationship.prototype.setCanonicalInternalModel = function setCanonicalInternalModel(internalModel) {\n    if (internalModel) {\n      this.addCanonicalInternalModel(internalModel);\n    } else if (this.canonicalState) {\n      this.removeCanonicalInternalModel(this.canonicalState);\n    }\n    this.flushCanonicalLater();\n  };\n\n  BelongsToRelationship.prototype.setInitialCanonicalInternalModel = function setInitialCanonicalInternalModel(internalModel) {\n    if (!internalModel) {\n      return;\n    }\n\n    // When we initialize a belongsTo relationship, we want to avoid work like\n    // notifying our internalModel that we've \"changed\" and excessive thrash on\n    // setting up inverse relationships\n    this.canonicalMembers.add(internalModel);\n    this.members.add(internalModel);\n    this.inverseInternalModel = this.canonicalState = internalModel;\n    this.setupInverseRelationship(internalModel);\n  };\n\n  BelongsToRelationship.prototype.addCanonicalInternalModel = function addCanonicalInternalModel(internalModel) {\n    if (this.canonicalMembers.has(internalModel)) {\n      return;\n    }\n\n    if (this.canonicalState) {\n      this.removeCanonicalInternalModel(this.canonicalState);\n    }\n\n    this.canonicalState = internalModel;\n    _Relationship.prototype.addCanonicalInternalModel.call(this, internalModel);\n  };\n\n  BelongsToRelationship.prototype.inverseDidDematerialize = function inverseDidDematerialize() {\n    _Relationship.prototype.inverseDidDematerialize.call(this, this.inverseInternalModel);\n    this.notifyBelongsToChanged();\n  };\n\n  BelongsToRelationship.prototype.removeCompletelyFromOwn = function removeCompletelyFromOwn(internalModel) {\n    _Relationship.prototype.removeCompletelyFromOwn.call(this, internalModel);\n\n    if (this.canonicalState === internalModel) {\n      this.canonicalState = null;\n    }\n\n    if (this.inverseInternalModel === internalModel) {\n      this.inverseInternalModel = null;\n      this.notifyBelongsToChanged();\n    }\n  };\n\n  BelongsToRelationship.prototype.removeCompletelyFromInverse = function removeCompletelyFromInverse() {\n    _Relationship.prototype.removeCompletelyFromInverse.call(this);\n\n    this.inverseInternalModel = null;\n  };\n\n  BelongsToRelationship.prototype.flushCanonical = function flushCanonical() {\n    //temporary fix to not remove newly created records if server returned null.\n    //TODO remove once we have proper diffing\n    if (this.inverseInternalModel && this.inverseInternalModel.isNew() && !this.canonicalState) {\n      return;\n    }\n    if (this.inverseInternalModel !== this.canonicalState) {\n      this.inverseInternalModel = this.canonicalState;\n      this.notifyBelongsToChanged();\n    }\n\n    _Relationship.prototype.flushCanonical.call(this);\n  };\n\n  BelongsToRelationship.prototype.addInternalModel = function addInternalModel(internalModel) {\n    if (this.members.has(internalModel)) {\n      return;\n    }\n\n    emberData_Debug.assertPolymorphicType(this.internalModel, this.relationshipMeta, internalModel);\n\n    if (this.inverseInternalModel) {\n      this.removeInternalModel(this.inverseInternalModel);\n    }\n\n    this.inverseInternalModel = internalModel;\n    _Relationship.prototype.addInternalModel.call(this, internalModel);\n    this.notifyBelongsToChanged();\n  };\n\n  BelongsToRelationship.prototype.setRecordPromise = function setRecordPromise(newPromise) {\n    var content = newPromise.get && newPromise.get('content');\n    (true && !(content !== undefined) && Ember.assert(\"You passed in a promise that did not originate from an EmberData relationship. You can only pass promises that come from a belongsTo or hasMany relationship to the get call.\", content !== undefined));\n\n    this.setInternalModel(content ? content._internalModel : content);\n  };\n\n  BelongsToRelationship.prototype.removeInternalModelFromOwn = function removeInternalModelFromOwn(internalModel) {\n    if (!this.members.has(internalModel)) {\n      return;\n    }\n    this.inverseInternalModel = null;\n    _Relationship.prototype.removeInternalModelFromOwn.call(this, internalModel);\n    this.notifyBelongsToChanged();\n  };\n\n  BelongsToRelationship.prototype.removeAllInternalModelsFromOwn = function removeAllInternalModelsFromOwn() {\n    _Relationship.prototype.removeAllInternalModelsFromOwn.call(this);\n    this.inverseInternalModel = null;\n    this.notifyBelongsToChanged();\n  };\n\n  BelongsToRelationship.prototype.notifyBelongsToChanged = function notifyBelongsToChanged() {\n    this.internalModel.notifyBelongsToChanged(this.key);\n  };\n\n  BelongsToRelationship.prototype.removeCanonicalInternalModelFromOwn = function removeCanonicalInternalModelFromOwn(internalModel) {\n    if (!this.canonicalMembers.has(internalModel)) {\n      return;\n    }\n    this.canonicalState = null;\n    _Relationship.prototype.removeCanonicalInternalModelFromOwn.call(this, internalModel);\n  };\n\n  BelongsToRelationship.prototype.removeAllCanonicalInternalModelsFromOwn = function removeAllCanonicalInternalModelsFromOwn() {\n    _Relationship.prototype.removeAllCanonicalInternalModelsFromOwn.call(this);\n    this.canonicalState = null;\n  };\n\n  BelongsToRelationship.prototype.findRecord = function findRecord() {\n    if (this.inverseInternalModel) {\n      return this.store._findByInternalModel(this.inverseInternalModel);\n    } else {\n      return Ember.RSVP.Promise.resolve(null);\n    }\n  };\n\n  BelongsToRelationship.prototype.fetchLink = function fetchLink() {\n    var _this2 = this;\n\n    return this.store.findBelongsTo(this.internalModel, this.link, this.relationshipMeta).then(function (internalModel) {\n      if (internalModel) {\n        _this2.addInternalModel(internalModel);\n      }\n      return internalModel;\n    });\n  };\n\n  BelongsToRelationship.prototype.getRecord = function getRecord() {\n    var _this3 = this;\n\n    //TODO(Igor) flushCanonical here once our syncing is not stupid\n    if (this.isAsync) {\n      var promise = void 0;\n      if (this.link) {\n        if (this.hasLoaded) {\n          promise = this.findRecord();\n        } else {\n          promise = this.findLink().then(function () {\n            return _this3.findRecord();\n          });\n        }\n      } else {\n        promise = this.findRecord();\n      }\n\n      return PromiseObject.create({\n        promise: promise,\n        content: this.inverseInternalModel ? this.inverseInternalModel.getRecord() : null\n      });\n    } else {\n      if (this.inverseInternalModel === null) {\n        return null;\n      }\n      var toReturn = this.inverseInternalModel.getRecord();\n      (true && !(toReturn === null || !toReturn.get('isEmpty')) && Ember.assert(\"You looked up the '\" + this.key + \"' relationship on a '\" + this.internalModel.modelName + \"' with id \" + this.internalModel.id + \" but some of the associated records were not loaded. Either make sure they are all loaded together with the parent record, or specify that the relationship is async (`DS.belongsTo({ async: true })`)\", toReturn === null || !toReturn.get('isEmpty')));\n\n      return toReturn;\n    }\n  };\n\n  BelongsToRelationship.prototype.reload = function reload() {\n    // TODO handle case when reload() is triggered multiple times\n\n    if (this.link) {\n      return this.fetchLink();\n    }\n\n    // reload record, if it is already loaded\n    if (this.inverseInternalModel && this.inverseInternalModel.hasRecord) {\n      return this.inverseInternalModel.getRecord().reload();\n    }\n\n    return this.findRecord();\n  };\n\n  BelongsToRelationship.prototype.updateData = function updateData(data, initial) {\n    (true && !(data === null || data.id !== undefined && data.type !== undefined) && Ember.assert('Ember Data expected the data for the ' + this.key + ' relationship on a ' + this.internalModel.toString() + ' to be in a JSON API format and include an `id` and `type` property but it found ' + Ember.inspect(data) + '. Please check your serializer and make sure it is serializing the relationship payload into a JSON API format.', data === null || data.id !== undefined && data.type !== undefined));\n\n    var internalModel = this.store._pushResourceIdentifier(this, data);\n    if (initial) {\n      this.setInitialCanonicalInternalModel(internalModel);\n    } else {\n      this.setCanonicalInternalModel(internalModel);\n    }\n  };\n\n  return BelongsToRelationship;\n}(Relationship);\n\nvar _createClass$3 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck$5(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction shouldFindInverse(relationshipMeta) {\n  var options = relationshipMeta.options;\n  return !(options && options.inverse === null);\n}\n\nfunction createRelationshipFor(internalModel, relationshipMeta, store) {\n  var inverseKey = void 0;\n  var inverse = null;\n\n  if (shouldFindInverse(relationshipMeta)) {\n    inverse = internalModel.type.inverseFor(relationshipMeta.key, store);\n  } else {\n    internalModel.type.typeForRelationship(relationshipMeta.key, store);\n  }\n\n  if (inverse) {\n    inverseKey = inverse.name;\n  }\n\n  if (relationshipMeta.kind === 'hasMany') {\n    return new ManyRelationship(store, internalModel, inverseKey, relationshipMeta);\n  } else {\n    return new BelongsToRelationship(store, internalModel, inverseKey, relationshipMeta);\n  }\n}\n\nvar Relationships = function () {\n  function Relationships(internalModel) {\n    _classCallCheck$5(this, Relationships);\n\n    this.internalModel = internalModel;\n    this.initializedRelationships = Object.create(null);\n  }\n\n  // TODO @runspired deprecate this as it was never truly a record instance\n\n\n  Relationships.prototype.has = function has(key) {\n    return !!this.initializedRelationships[key];\n  };\n\n  Relationships.prototype.forEach = function forEach(cb) {\n    var rels = this.initializedRelationships;\n    Object.keys(rels).forEach(function (name) {\n      cb(name, rels[name]);\n    });\n  };\n\n  Relationships.prototype.get = function get(key) {\n    var relationships = this.initializedRelationships;\n    var relationship = relationships[key];\n    var internalModel = this.internalModel;\n\n    if (!relationship) {\n      var relationshipsByName = Ember.get(internalModel.type, 'relationshipsByName');\n      var rel = relationshipsByName.get(key);\n\n      if (!rel) {\n        return undefined;\n      }\n\n      var relationshipPayload = internalModel.store._relationshipsPayloads.get(internalModel.modelName, internalModel.id, key);\n\n      relationship = relationships[key] = createRelationshipFor(internalModel, rel, internalModel.store);\n\n      if (relationshipPayload) {\n        relationship.push(relationshipPayload, true);\n      }\n    }\n\n    return relationship;\n  };\n\n  _createClass$3(Relationships, [{\n    key: \"record\",\n    get: function get() {\n      return this.internalModel;\n    }\n  }]);\n\n  return Relationships;\n}();\n\nvar _createClass$6 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck$9(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n  @class Snapshot\n  @namespace DS\n  @private\n  @constructor\n  @param {DS.Model} internalModel The model to create a snapshot from\n*/\n/**\n  @module ember-data\n*/\n\nvar Snapshot = function () {\n  function Snapshot(internalModel) {\n    var _this = this;\n\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck$9(this, Snapshot);\n\n    this._attributes = Object.create(null);\n    this._belongsToRelationships = Object.create(null);\n    this._belongsToIds = Object.create(null);\n    this._hasManyRelationships = Object.create(null);\n    this._hasManyIds = Object.create(null);\n    this._internalModel = internalModel;\n\n    var record = internalModel.getRecord();\n\n    /**\n     The underlying record for this snapshot. Can be used to access methods and\n     properties defined on the record.\n      Example\n      ```javascript\n     let json = snapshot.record.toJSON();\n     ```\n      @property record\n     @type {DS.Model}\n     */\n    this.record = record;\n    record.eachAttribute(function (keyName) {\n      return _this._attributes[keyName] = Ember.get(record, keyName);\n    });\n\n    /**\n     The id of the snapshot's underlying record\n      Example\n      ```javascript\n     // store.push('post', { id: 1, author: 'Tomster', title: 'Ember.js rocks' });\n     postSnapshot.id; // => '1'\n     ```\n      @property id\n     @type {String}\n     */\n    this.id = internalModel.id;\n\n    /**\n     A hash of adapter options\n     @property adapterOptions\n     @type {Object}\n     */\n    this.adapterOptions = options.adapterOptions;\n    this.include = options.include;\n\n    /**\n     The name of the type of the underlying record for this snapshot, as a string.\n      @property modelName\n     @type {String}\n     */\n    this.modelName = internalModel.modelName;\n\n    this._changedAttributes = record.changedAttributes();\n  }\n\n  /**\n   The type of the underlying record for this snapshot, as a DS.Model.\n    @property type\n   @type {DS.Model}\n   */\n\n\n  /**\n   Returns the value of an attribute.\n    Example\n    ```javascript\n   // store.push('post', { id: 1, author: 'Tomster', title: 'Ember.js rocks' });\n   postSnapshot.attr('author'); // => 'Tomster'\n   postSnapshot.attr('title'); // => 'Ember.js rocks'\n   ```\n    Note: Values are loaded eagerly and cached when the snapshot is created.\n    @method attr\n   @param {String} keyName\n   @return {Object} The attribute value or undefined\n   */\n  Snapshot.prototype.attr = function attr(keyName) {\n    if (keyName in this._attributes) {\n      return this._attributes[keyName];\n    }\n    throw new Ember.Error(\"Model '\" + Ember.inspect(this.record) + \"' has no attribute named '\" + keyName + \"' defined.\");\n  };\n\n  /**\n   Returns all attributes and their corresponding values.\n    Example\n    ```javascript\n   // store.push('post', { id: 1, author: 'Tomster', title: 'Ember.js rocks' });\n   postSnapshot.attributes(); // => { author: 'Tomster', title: 'Ember.js rocks' }\n   ```\n    @method attributes\n   @return {Object} All attributes of the current snapshot\n   */\n\n\n  Snapshot.prototype.attributes = function attributes() {\n    return Ember.copy(this._attributes);\n  };\n\n  /**\n   Returns all changed attributes and their old and new values.\n    Example\n    ```javascript\n   // store.push('post', { id: 1, author: 'Tomster', title: 'Ember.js rocks' });\n   postModel.set('title', 'Ember.js rocks!');\n   postSnapshot.changedAttributes(); // => { title: ['Ember.js rocks', 'Ember.js rocks!'] }\n   ```\n    @method changedAttributes\n   @return {Object} All changed attributes of the current snapshot\n   */\n\n\n  Snapshot.prototype.changedAttributes = function changedAttributes() {\n    var changedAttributes = Object.create(null);\n    var changedAttributeKeys = Object.keys(this._changedAttributes);\n\n    for (var i = 0, length = changedAttributeKeys.length; i < length; i++) {\n      var key = changedAttributeKeys[i];\n      changedAttributes[key] = Ember.copy(this._changedAttributes[key]);\n    }\n\n    return changedAttributes;\n  };\n\n  /**\n   Returns the current value of a belongsTo relationship.\n    `belongsTo` takes an optional hash of options as a second parameter,\n   currently supported options are:\n    - `id`: set to `true` if you only want the ID of the related record to be\n   returned.\n    Example\n    ```javascript\n   // store.push('post', { id: 1, title: 'Hello World' });\n   // store.createRecord('comment', { body: 'Lorem ipsum', post: post });\n   commentSnapshot.belongsTo('post'); // => DS.Snapshot\n   commentSnapshot.belongsTo('post', { id: true }); // => '1'\n    // store.push('comment', { id: 1, body: 'Lorem ipsum' });\n   commentSnapshot.belongsTo('post'); // => undefined\n   ```\n    Calling `belongsTo` will return a new Snapshot as long as there's any known\n   data for the relationship available, such as an ID. If the relationship is\n   known but unset, `belongsTo` will return `null`. If the contents of the\n   relationship is unknown `belongsTo` will return `undefined`.\n    Note: Relationships are loaded lazily and cached upon first access.\n    @method belongsTo\n   @param {String} keyName\n   @param {Object} [options]\n   @return {(DS.Snapshot|String|null|undefined)} A snapshot or ID of a known\n   relationship or null if the relationship is known but unset. undefined\n   will be returned if the contents of the relationship is unknown.\n   */\n\n\n  Snapshot.prototype.belongsTo = function belongsTo(keyName, options) {\n    var id = options && options.id;\n    var relationship = void 0,\n        inverseInternalModel = void 0,\n        hasData = void 0;\n    var result = void 0;\n\n    if (id && keyName in this._belongsToIds) {\n      return this._belongsToIds[keyName];\n    }\n\n    if (!id && keyName in this._belongsToRelationships) {\n      return this._belongsToRelationships[keyName];\n    }\n\n    relationship = this._internalModel._relationships.get(keyName);\n    if (!(relationship && relationship.relationshipMeta.kind === 'belongsTo')) {\n      throw new Ember.Error(\"Model '\" + Ember.inspect(this.record) + \"' has no belongsTo relationship named '\" + keyName + \"' defined.\");\n    }\n\n    hasData = Ember.get(relationship, 'hasData');\n    inverseInternalModel = Ember.get(relationship, 'inverseInternalModel');\n\n    if (hasData) {\n      if (inverseInternalModel && !inverseInternalModel.isDeleted()) {\n        if (id) {\n          result = Ember.get(inverseInternalModel, 'id');\n        } else {\n          result = inverseInternalModel.createSnapshot();\n        }\n      } else {\n        result = null;\n      }\n    }\n\n    if (id) {\n      this._belongsToIds[keyName] = result;\n    } else {\n      this._belongsToRelationships[keyName] = result;\n    }\n\n    return result;\n  };\n\n  /**\n   Returns the current value of a hasMany relationship.\n    `hasMany` takes an optional hash of options as a second parameter,\n   currently supported options are:\n    - `ids`: set to `true` if you only want the IDs of the related records to be\n   returned.\n    Example\n    ```javascript\n   // store.push('post', { id: 1, title: 'Hello World', comments: [2, 3] });\n   postSnapshot.hasMany('comments'); // => [DS.Snapshot, DS.Snapshot]\n   postSnapshot.hasMany('comments', { ids: true }); // => ['2', '3']\n    // store.push('post', { id: 1, title: 'Hello World' });\n   postSnapshot.hasMany('comments'); // => undefined\n   ```\n    Note: Relationships are loaded lazily and cached upon first access.\n    @method hasMany\n   @param {String} keyName\n   @param {Object} [options]\n   @return {(Array|undefined)} An array of snapshots or IDs of a known\n   relationship or an empty array if the relationship is known but unset.\n   undefined will be returned if the contents of the relationship is unknown.\n   */\n\n\n  Snapshot.prototype.hasMany = function hasMany(keyName, options) {\n    var ids = options && options.ids;\n    var relationship = void 0,\n        members = void 0,\n        hasData = void 0;\n    var results = void 0;\n\n    if (ids && keyName in this._hasManyIds) {\n      return this._hasManyIds[keyName];\n    }\n\n    if (!ids && keyName in this._hasManyRelationships) {\n      return this._hasManyRelationships[keyName];\n    }\n\n    relationship = this._internalModel._relationships.get(keyName);\n    if (!(relationship && relationship.relationshipMeta.kind === 'hasMany')) {\n      throw new Ember.Error(\"Model '\" + Ember.inspect(this.record) + \"' has no hasMany relationship named '\" + keyName + \"' defined.\");\n    }\n\n    hasData = Ember.get(relationship, 'hasData');\n    members = Ember.get(relationship, 'members');\n\n    if (hasData) {\n      results = [];\n      members.forEach(function (member) {\n        if (!member.isDeleted()) {\n          if (ids) {\n            results.push(member.id);\n          } else {\n            results.push(member.createSnapshot());\n          }\n        }\n      });\n    }\n\n    if (ids) {\n      this._hasManyIds[keyName] = results;\n    } else {\n      this._hasManyRelationships[keyName] = results;\n    }\n\n    return results;\n  };\n\n  /**\n    Iterates through all the attributes of the model, calling the passed\n    function on each attribute.\n     Example\n     ```javascript\n    snapshot.eachAttribute(function(name, meta) {\n      // ...\n    });\n    ```\n     @method eachAttribute\n    @param {Function} callback the callback to execute\n    @param {Object} [binding] the value to which the callback's `this` should be bound\n  */\n\n\n  Snapshot.prototype.eachAttribute = function eachAttribute(callback, binding) {\n    this.record.eachAttribute(callback, binding);\n  };\n\n  /**\n    Iterates through all the relationships of the model, calling the passed\n    function on each relationship.\n     Example\n     ```javascript\n    snapshot.eachRelationship(function(name, relationship) {\n      // ...\n    });\n    ```\n     @method eachRelationship\n    @param {Function} callback the callback to execute\n    @param {Object} [binding] the value to which the callback's `this` should be bound\n  */\n\n\n  Snapshot.prototype.eachRelationship = function eachRelationship(callback, binding) {\n    this.record.eachRelationship(callback, binding);\n  };\n\n  /**\n    Serializes the snapshot using the serializer for the model.\n     Example\n     ```app/adapters/application.js\n    import DS from 'ember-data';\n     export default DS.Adapter.extend({\n      createRecord(store, type, snapshot) {\n        var data = snapshot.serialize({ includeId: true });\n        var url = `/${type.modelName}`;\n         return fetch(url, {\n          method: 'POST',\n          body: data,\n        }).then((response) => response.json())\n      }\n    });\n    ```\n     @method serialize\n    @param {Object} options\n    @return {Object} an object whose values are primitive JSON values only\n   */\n\n\n  Snapshot.prototype.serialize = function serialize(options) {\n    return this.record.store.serializerFor(this.modelName).serialize(this, options);\n  };\n\n  _createClass$6(Snapshot, [{\n    key: 'type',\n    get: function get() {\n      // TODO @runspired we should deprecate this in favor of modelClass but only once\n      // we've cleaned up the internals enough that a public change to follow suite is\n      // uncontroversial.\n      return this._internalModel.modelClass;\n    }\n  }]);\n\n  return Snapshot;\n}();\n\n/*\n  Check if the passed model has a `type` attribute or a relationship named `type`.\n\n  @method modelHasAttributeOrRelationshipNamedType\n  @param modelClass\n */\nfunction modelHasAttributeOrRelationshipNamedType(modelClass) {\n  return Ember.get(modelClass, 'attributes').has('type') || Ember.get(modelClass, 'relationshipsByName').has('type');\n}\n\n/*\n  ember-container-inject-owner is a new feature in Ember 2.3 that finally provides a public\n  API for looking items up.  This function serves as a super simple polyfill to avoid\n  triggering deprecations.\n */\nfunction getOwner(context) {\n  var owner = void 0;\n\n  if (Ember.getOwner) {\n    owner = Ember.getOwner(context);\n  } else if (context.container) {\n    owner = context.container;\n  }\n\n  if (owner && owner.lookupFactory && !owner._lookupFactory) {\n    // `owner` is a container, we are just making this work\n    owner._lookupFactory = function () {\n      var _owner;\n\n      return (_owner = owner).lookupFactory.apply(_owner, arguments);\n    };\n\n    owner.register = function () {\n      var registry = owner.registry || owner._registry || owner;\n\n      return registry.register.apply(registry, arguments);\n    };\n  }\n\n  return owner;\n}\n\nvar Reference = function Reference(store, internalModel) {\n  this.store = store;\n  this.internalModel = internalModel;\n};\n\nReference.prototype = {\n  constructor: Reference\n};\n\n/**\n   An RecordReference is a low level API that allows users and\n   addon author to perform meta-operations on a record.\n\n   @class RecordReference\n   @namespace DS\n*/\nvar RecordReference = function RecordReference(store, internalModel) {\n  this._super$constructor(store, internalModel);\n  this.type = internalModel.modelName;\n  this._id = internalModel.id;\n};\n\nRecordReference.prototype = Object.create(Reference.prototype);\nRecordReference.prototype.constructor = RecordReference;\nRecordReference.prototype._super$constructor = Reference;\n\n/**\n   The `id` of the record that this reference refers to.\n\n   Together, the `type` and `id` properties form a composite key for\n   the identity map.\n\n   Example\n\n   ```javascript\n   let userRef = store.getReference('user', 1);\n\n   userRef.id(); // '1'\n   ```\n\n   @method id\n   @return {String} The id of the record.\n*/\nRecordReference.prototype.id = function () {\n  return this._id;\n};\n\n/**\n   How the reference will be looked up when it is loaded: Currently\n   this always return `identity` to signifying that a record will be\n   loaded by the `type` and `id`.\n\n   Example\n\n   ```javascript\n   const userRef = store.getReference('user', 1);\n\n   userRef.remoteType(); // 'identity'\n   ```\n\n   @method remoteType\n   @return {String} 'identity'\n*/\nRecordReference.prototype.remoteType = function () {\n  return 'identity';\n};\n\n/**\n  This API allows you to provide a reference with new data. The\n  simplest usage of this API is similar to `store.push`: you provide a\n  normalized hash of data and the object represented by the reference\n  will update.\n\n  If you pass a promise to `push`, Ember Data will not ask the adapter\n  for the data if another attempt to fetch it is made in the\n  interim. When the promise resolves, the underlying object is updated\n  with the new data, and the promise returned by *this function* is resolved\n  with that object.\n\n  For example, `recordReference.push(promise)` will be resolved with a\n  record.\n\n   Example\n\n   ```javascript\n   let userRef = store.getReference('user', 1);\n\n   // provide data for reference\n   userRef.push({ data: { id: 1, username: \"@user\" }}).then(function(user) {\n     userRef.value() === user;\n   });\n   ```\n\n  @method push\n  @param objectOrPromise {Promise|Object}\n  @return Promise<record> a promise for the value (record or relationship)\n*/\nRecordReference.prototype.push = function (objectOrPromise) {\n  var _this = this;\n\n  return Ember.RSVP.resolve(objectOrPromise).then(function (data) {\n    return _this.store.push(data);\n  });\n};\n\n/**\n  If the entity referred to by the reference is already loaded, it is\n  present as `reference.value`. Otherwise the value returned by this function\n  is `null`.\n\n   Example\n\n   ```javascript\n   let userRef = store.getReference('user', 1);\n\n   userRef.value(); // user\n   ```\n\n   @method value\n   @return {DS.Model} the record for this RecordReference\n*/\nRecordReference.prototype.value = function () {\n  if (this.internalModel.hasRecord) {\n    return this.internalModel.getRecord();\n  }\n  return null;\n};\n\n/**\n   Triggers a fetch for the backing entity based on its `remoteType`\n   (see `remoteType` definitions per reference type).\n\n   Example\n\n   ```javascript\n   let userRef = store.getReference('user', 1);\n\n   // load user (via store.find)\n   userRef.load().then(...)\n   ```\n\n   @method load\n   @return {Promise<record>} the record for this RecordReference\n*/\nRecordReference.prototype.load = function () {\n  return this.store.findRecord(this.type, this._id);\n};\n\n/**\n   Reloads the record if it is already loaded. If the record is not\n   loaded it will load the record via `store.findRecord`\n\n   Example\n\n   ```javascript\n   let userRef = store.getReference('user', 1);\n\n   // or trigger a reload\n   userRef.reload().then(...)\n   ```\n\n   @method reload\n   @return {Promise<record>} the record for this RecordReference\n*/\nRecordReference.prototype.reload = function () {\n  var record = this.value();\n  if (record) {\n    return record.reload();\n  }\n\n  return this.load();\n};\n\n/**\n   A BelongsToReference is a low level API that allows users and\n   addon author to perform meta-operations on a belongs-to\n   relationship.\n\n   @class BelongsToReference\n   @namespace DS\n   @extends DS.Reference\n*/\nvar BelongsToReference = function BelongsToReference(store, parentInternalModel, belongsToRelationship) {\n  this._super$constructor(store, parentInternalModel);\n  this.belongsToRelationship = belongsToRelationship;\n  this.type = belongsToRelationship.relationshipMeta.type;\n  this.parent = parentInternalModel.recordReference;\n\n  // TODO inverse\n};\n\nBelongsToReference.prototype = Object.create(Reference.prototype);\nBelongsToReference.prototype.constructor = BelongsToReference;\nBelongsToReference.prototype._super$constructor = Reference;\n\n/**\n   This returns a string that represents how the reference will be\n   looked up when it is loaded. If the relationship has a link it will\n   use the \"link\" otherwise it defaults to \"id\".\n\n   Example\n\n   ```javascript\n    // models/blog.js\n    export default DS.Model.extend({\n      user: DS.belongsTo({ async: true })\n    });\n\n    let blog = store.push({\n      type: 'blog',\n      id: 1,\n      relationships: {\n        user: {\n          data: { type: 'user', id: 1 }\n        }\n      }\n    });\n    let userRef = blog.belongsTo('user');\n\n    // get the identifier of the reference\n    if (userRef.remoteType() === \"id\") {\n      let id = userRef.id();\n    } else if (userRef.remoteType() === \"link\") {\n      let link = userRef.link();\n    }\n    ```\n\n   @method remoteType\n   @return {String} The name of the remote type. This should either be \"link\" or \"id\"\n*/\nBelongsToReference.prototype.remoteType = function () {\n  if (this.belongsToRelationship.link) {\n    return \"link\";\n  }\n\n  return \"id\";\n};\n\n/**\n   The `id` of the record that this reference refers to. Together, the\n   `type()` and `id()` methods form a composite key for the identity\n   map. This can be used to access the id of an async relationship\n   without triggering a fetch that would normally happen if you\n   attempted to use `record.get('relationship.id')`.\n\n   Example\n\n   ```javascript\n    // models/blog.js\n    export default DS.Model.extend({\n      user: DS.belongsTo({ async: true })\n    });\n\n    let blog = store.push({\n      data: {\n        type: 'blog',\n        id: 1,\n        relationships: {\n          user: {\n            data: { type: 'user', id: 1 }\n          }\n        }\n      }\n    });\n    let userRef = blog.belongsTo('user');\n\n    // get the identifier of the reference\n    if (userRef.remoteType() === \"id\") {\n      let id = userRef.id();\n    }\n    ```\n\n   @method id\n   @return {String} The id of the record in this belongsTo relationship.\n*/\nBelongsToReference.prototype.id = function () {\n  var inverseInternalModel = this.belongsToRelationship.inverseInternalModel;\n  return inverseInternalModel && inverseInternalModel.id;\n};\n\n/**\n   The link Ember Data will use to fetch or reload this belongs-to\n   relationship.\n\n   Example\n\n   ```javascript\n    // models/blog.js\n    export default DS.Model.extend({\n      user: DS.belongsTo({ async: true })\n    });\n\n    let blog = store.push({\n      data: {\n        type: 'blog',\n        id: 1,\n        relationships: {\n          user: {\n            links: {\n              related: '/articles/1/author'\n            }\n          }\n        }\n      }\n    });\n    let userRef = blog.belongsTo('user');\n\n    // get the identifier of the reference\n    if (userRef.remoteType() === \"link\") {\n      let link = userRef.link();\n    }\n    ```\n\n   @method link\n   @return {String} The link Ember Data will use to fetch or reload this belongs-to relationship.\n*/\nBelongsToReference.prototype.link = function () {\n  return this.belongsToRelationship.link;\n};\n\n/**\n   The meta data for the belongs-to relationship.\n\n   Example\n\n   ```javascript\n    // models/blog.js\n    export default DS.Model.extend({\n      user: DS.belongsTo({ async: true })\n    });\n\n    let blog = store.push({\n      data: {\n        type: 'blog',\n        id: 1,\n        relationships: {\n          user: {\n            links: {\n              related: {\n                href: '/articles/1/author',\n                meta: {\n                  lastUpdated: 1458014400000\n                }\n              }\n            }\n          }\n        }\n      }\n    });\n\n    let userRef = blog.belongsTo('user');\n\n    userRef.meta() // { lastUpdated: 1458014400000 }\n    ```\n\n   @method meta\n   @return {Object} The meta information for the belongs-to relationship.\n*/\nBelongsToReference.prototype.meta = function () {\n  return this.belongsToRelationship.meta;\n};\n\n/**\n   `push` can be used to update the data in the relationship and Ember\n   Data will treat the new data as the conanical value of this\n   relationship on the backend.\n\n   Example\n\n    ```javascript\n    // models/blog.js\n    export default DS.Model.extend({\n      user: DS.belongsTo({ async: true })\n    });\n\n    let blog = store.push({\n      data: {\n        type: 'blog',\n        id: 1,\n        relationships: {\n          user: {\n            data: { type: 'user', id: 1 }\n          }\n        }\n      }\n    });\n    let userRef = blog.belongsTo('user');\n\n    // provide data for reference\n    userRef.push({\n      data: {\n        type: 'user',\n        id: 1,\n        attributes: {\n          username: \"@user\"\n        }\n      }\n    }).then(function(user) {\n      userRef.value() === user;\n    });\n    ```\n\n   @method push\n   @param {Object|Promise} objectOrPromise a promise that resolves to a JSONAPI document object describing the new value of this relationship.\n   @return {Promise<record>} A promise that resolves with the new value in this belongs-to relationship.\n*/\nBelongsToReference.prototype.push = function (objectOrPromise) {\n  var _this = this;\n\n  return Ember.RSVP.resolve(objectOrPromise).then(function (data) {\n    var record = void 0;\n\n    if (data instanceof Model) {\n      if (isEnabled('ds-overhaul-references')) {\n        (true && !(false) && Ember.deprecate(\"BelongsToReference#push(DS.Model) is deprecated. Update relationship via `model.set('relationshipName', value)` instead.\", false, {\n          id: 'ds.references.belongs-to.push-record',\n          until: '4.0.0'\n        }));\n      }\n      record = data;\n    } else {\n      record = _this.store.push(data);\n    }\n\n    emberData_Debug.assertPolymorphicType(_this.internalModel, _this.belongsToRelationship.relationshipMeta, record._internalModel);\n\n    _this.belongsToRelationship.setCanonicalInternalModel(record._internalModel);\n\n    return record;\n  });\n};\n\n/**\n   `value()` synchronously returns the current value of the belongs-to\n   relationship. Unlike `record.get('relationshipName')`, calling\n   `value()` on a reference does not trigger a fetch if the async\n   relationship is not yet loaded. If the relationship is not loaded\n   it will always return `null`.\n\n   Example\n\n    ```javascript\n    // models/blog.js\n    export default DS.Model.extend({\n      user: DS.belongsTo({ async: true })\n    });\n\n    let blog = store.push({\n      data: {\n        type: 'blog',\n        id: 1,\n        relationships: {\n          user: {\n            data: { type: 'user', id: 1 }\n          }\n        }\n      }\n    });\n    let userRef = blog.belongsTo('user');\n\n    userRef.value(); // null\n\n    // provide data for reference\n    userRef.push({\n      data: {\n        type: 'user',\n        id: 1,\n        attributes: {\n          username: \"@user\"\n        }\n      }\n    }).then(function(user) {\n      userRef.value(); // user\n    });\n    ```\n\n   @method value\n   @return {DS.Model} the record in this relationship\n*/\nBelongsToReference.prototype.value = function () {\n  var inverseInternalModel = this.belongsToRelationship.inverseInternalModel;\n\n  if (inverseInternalModel && inverseInternalModel.isLoaded()) {\n    return inverseInternalModel.getRecord();\n  }\n\n  return null;\n};\n\n/**\n   Loads a record in a belongs to relationship if it is not already\n   loaded. If the relationship is already loaded this method does not\n   trigger a new load.\n\n   Example\n\n    ```javascript\n    // models/blog.js\n    export default DS.Model.extend({\n      user: DS.belongsTo({ async: true })\n    });\n\n    let blog = store.push({\n      data: {\n        type: 'blog',\n        id: 1,\n        relationships: {\n          user: {\n            data: { type: 'user', id: 1 }\n          }\n        }\n      }\n    });\n    let userRef = blog.belongsTo('user');\n\n    userRef.value(); // null\n\n    userRef.load().then(function(user) {\n      userRef.value() === user\n    });\n    ```\n\n   @method load\n   @return {Promise} a promise that resolves with the record in this belongs-to relationship.\n*/\nBelongsToReference.prototype.load = function () {\n  var _this2 = this;\n\n  if (this.remoteType() === \"id\") {\n    return this.belongsToRelationship.getRecord();\n  }\n\n  if (this.remoteType() === \"link\") {\n    return this.belongsToRelationship.findLink().then(function (internalModel) {\n      return _this2.value();\n    });\n  }\n};\n\n/**\n   Triggers a reload of the value in this relationship. If the\n   remoteType is `\"link\"` Ember Data will use the relationship link to\n   reload the relationship. Otherwise it will reload the record by its\n   id.\n\n   Example\n\n    ```javascript\n    // models/blog.js\n    export default DS.Model.extend({\n      user: DS.belongsTo({ async: true })\n    });\n\n    let blog = store.push({\n      data: {\n        type: 'blog',\n        id: 1,\n        relationships: {\n          user: {\n            data: { type: 'user', id: 1 }\n          }\n        }\n      }\n    });\n    let userRef = blog.belongsTo('user');\n\n    userRef.reload().then(function(user) {\n      userRef.value() === user\n    });\n    ```\n\n   @method reload\n   @return {Promise} a promise that resolves with the record in this belongs-to relationship after the reload has completed.\n*/\nBelongsToReference.prototype.reload = function () {\n  var _this3 = this;\n\n  return this.belongsToRelationship.reload().then(function (internalModel) {\n    return _this3.value();\n  });\n};\n\n/**\n   A HasManyReference is a low level API that allows users and addon\n   author to perform meta-operations on a has-many relationship.\n\n   @class HasManyReference\n   @namespace DS\n*/\nvar HasManyReference = function HasManyReference(store, parentInternalModel, hasManyRelationship) {\n  this._super$constructor(store, parentInternalModel);\n  this.hasManyRelationship = hasManyRelationship;\n  this.type = hasManyRelationship.relationshipMeta.type;\n  this.parent = parentInternalModel.recordReference;\n\n  // TODO inverse\n};\n\nHasManyReference.prototype = Object.create(Reference.prototype);\nHasManyReference.prototype.constructor = HasManyReference;\nHasManyReference.prototype._super$constructor = Reference;\n\n/**\n   This returns a string that represents how the reference will be\n   looked up when it is loaded. If the relationship has a link it will\n   use the \"link\" otherwise it defaults to \"id\".\n\n   Example\n\n   ```app/models/post.js\n   export default DS.Model.extend({\n     comments: DS.hasMany({ async: true })\n   });\n   ```\n\n   ```javascript\n   let post = store.push({\n     data: {\n       type: 'post',\n       id: 1,\n       relationships: {\n         comments: {\n           data: [{ type: 'comment', id: 1 }]\n         }\n       }\n     }\n   });\n\n   let commentsRef = post.hasMany('comments');\n\n   // get the identifier of the reference\n   if (commentsRef.remoteType() === \"ids\") {\n     let ids = commentsRef.ids();\n   } else if (commentsRef.remoteType() === \"link\") {\n     let link = commentsRef.link();\n   }\n   ```\n\n   @method remoteType\n   @return {String} The name of the remote type. This should either be \"link\" or \"ids\"\n*/\nHasManyReference.prototype.remoteType = function () {\n  if (this.hasManyRelationship.link) {\n    return \"link\";\n  }\n\n  return \"ids\";\n};\n\n/**\n   The link Ember Data will use to fetch or reload this has-many\n   relationship.\n\n   Example\n\n   ```app/models/post.js\n   export default DS.Model.extend({\n     comments: DS.hasMany({ async: true })\n   });\n   ```\n\n   ```javascript\n   let post = store.push({\n     data: {\n       type: 'post',\n       id: 1,\n       relationships: {\n         comments: {\n           links: {\n             related: '/posts/1/comments'\n           }\n         }\n       }\n     }\n   });\n\n   let commentsRef = post.hasMany('comments');\n\n   commentsRef.link(); // '/posts/1/comments'\n   ```\n\n   @method link\n   @return {String} The link Ember Data will use to fetch or reload this has-many relationship.\n*/\nHasManyReference.prototype.link = function () {\n  return this.hasManyRelationship.link;\n};\n\n/**\n   `ids()` returns an array of the record ids in this relationship.\n\n   Example\n\n   ```app/models/post.js\n   export default DS.Model.extend({\n     comments: DS.hasMany({ async: true })\n   });\n   ```\n\n   ```javascript\n   let post = store.push({\n     data: {\n       type: 'post',\n       id: 1,\n       relationships: {\n         comments: {\n           data: [{ type: 'comment', id: 1 }]\n         }\n       }\n     }\n   });\n\n   let commentsRef = post.hasMany('comments');\n\n   commentsRef.ids(); // ['1']\n   ```\n\n   @method ids\n   @return {Array} The ids in this has-many relationship\n*/\nHasManyReference.prototype.ids = function () {\n  var members = this.hasManyRelationship.members.toArray();\n\n  return members.map(function (internalModel) {\n    return internalModel.id;\n  });\n};\n\n/**\n   The meta data for the has-many relationship.\n\n   Example\n\n   ```app/models/post.js\n   export default DS.Model.extend({\n     comments: DS.hasMany({ async: true })\n   });\n   ```\n\n   ```javascript\n   let post = store.push({\n     data: {\n       type: 'post',\n       id: 1,\n       relationships: {\n         comments: {\n           links: {\n             related: {\n               href: '/posts/1/comments',\n               meta: {\n                 count: 10\n               }\n             }\n           }\n         }\n       }\n     }\n   });\n\n   let commentsRef = post.hasMany('comments');\n\n   commentsRef.meta(); // { count: 10 }\n   ```\n\n   @method meta\n   @return {Object} The meta information for the has-many relationship.\n*/\nHasManyReference.prototype.meta = function () {\n  return this.hasManyRelationship.meta;\n};\n\n/**\n   `push` can be used to update the data in the relationship and Ember\n   Data will treat the new data as the canonical value of this\n   relationship on the backend.\n\n   Example\n\n   ```app/models/post.js\n   export default DS.Model.extend({\n     comments: DS.hasMany({ async: true })\n   });\n   ```\n\n   ```\n   let post = store.push({\n     data: {\n       type: 'post',\n       id: 1,\n       relationships: {\n         comments: {\n           data: [{ type: 'comment', id: 1 }]\n         }\n       }\n     }\n   });\n\n   let commentsRef = post.hasMany('comments');\n\n   commentsRef.ids(); // ['1']\n\n   commentsRef.push([\n     [{ type: 'comment', id: 2 }],\n     [{ type: 'comment', id: 3 }],\n   ])\n\n   commentsRef.ids(); // ['2', '3']\n   ```\n\n   @method push\n   @param {Array|Promise} objectOrPromise a promise that resolves to a JSONAPI document object describing the new value of this relationship.\n   @return {DS.ManyArray}\n*/\nHasManyReference.prototype.push = function (objectOrPromise) {\n  var _this = this;\n\n  return Ember.RSVP.resolve(objectOrPromise).then(function (payload) {\n    var array = payload;\n\n    if (isEnabled(\"ds-overhaul-references\")) {\n      (true && !(!Array.isArray(payload)) && Ember.deprecate(\"HasManyReference#push(array) is deprecated. Push a JSON-API document instead.\", !Array.isArray(payload), {\n        id: 'ds.references.has-many.push-array',\n        until: '4.0.0'\n      }));\n    }\n\n    var useLegacyArrayPush = true;\n    if (typeof payload === \"object\" && payload.data) {\n      array = payload.data;\n      useLegacyArrayPush = array.length && array[0].data;\n\n      if (isEnabled('ds-overhaul-references')) {\n        (true && !(!useLegacyArrayPush) && Ember.deprecate(\"HasManyReference#push() expects a valid JSON-API document.\", !useLegacyArrayPush, {\n          id: 'ds.references.has-many.push-invalid-json-api',\n          until: '4.0.0'\n        }));\n      }\n    }\n\n    if (!isEnabled('ds-overhaul-references')) {\n      useLegacyArrayPush = true;\n    }\n\n    var internalModels = void 0;\n    if (useLegacyArrayPush) {\n      internalModels = array.map(function (obj) {\n        var record = _this.store.push(obj);\n\n        {\n          var relationshipMeta = _this.hasManyRelationship.relationshipMeta;\n          emberData_Debug.assertPolymorphicType(_this.internalModel, relationshipMeta, record._internalModel);\n        }\n\n        return record._internalModel;\n      });\n    } else {\n      var records = _this.store.push(payload);\n      internalModels = Ember.A(records).mapBy('_internalModel');\n\n      {\n        internalModels.forEach(function (internalModel) {\n          var relationshipMeta = _this.hasManyRelationship.relationshipMeta;\n          emberData_Debug.assertPolymorphicType(_this.internalModel, relationshipMeta, internalModel);\n        });\n      }\n    }\n\n    _this.hasManyRelationship.computeChanges(internalModels);\n\n    return _this.hasManyRelationship.manyArray;\n  });\n};\n\nHasManyReference.prototype._isLoaded = function () {\n  var hasData = Ember.get(this.hasManyRelationship, 'hasData');\n  if (!hasData) {\n    return false;\n  }\n\n  var members = this.hasManyRelationship.members.toArray();\n\n  return members.every(function (internalModel) {\n    return internalModel.isLoaded() === true;\n  });\n};\n\n/**\n   `value()` synchronously returns the current value of the has-many\n    relationship. Unlike `record.get('relationshipName')`, calling\n    `value()` on a reference does not trigger a fetch if the async\n    relationship is not yet loaded. If the relationship is not loaded\n    it will always return `null`.\n\n   Example\n\n   ```app/models/post.js\n   export default DS.Model.extend({\n     comments: DS.hasMany({ async: true })\n   });\n   ```\n\n   ```javascript\n   let post = store.push({\n     data: {\n       type: 'post',\n       id: 1,\n       relationships: {\n         comments: {\n           data: [{ type: 'comment', id: 1 }]\n         }\n       }\n     }\n   });\n\n   let commentsRef = post.hasMany('comments');\n\n   post.get('comments').then(function(comments) {\n     commentsRef.value() === comments\n   })\n   ```\n\n   @method value\n   @return {DS.ManyArray}\n*/\nHasManyReference.prototype.value = function () {\n  if (this._isLoaded()) {\n    return this.hasManyRelationship.manyArray;\n  }\n\n  return null;\n};\n\n/**\n   Loads the relationship if it is not already loaded.  If the\n   relationship is already loaded this method does not trigger a new\n   load.\n\n   Example\n\n   ```app/models/post.js\n   export default DS.Model.extend({\n     comments: DS.hasMany({ async: true })\n   });\n   ```\n\n   ```javascript\n   let post = store.push({\n     data: {\n       type: 'post',\n       id: 1,\n       relationships: {\n         comments: {\n           data: [{ type: 'comment', id: 1 }]\n         }\n       }\n     }\n   });\n\n   let commentsRef = post.hasMany('comments');\n\n   commentsRef.load().then(function(comments) {\n     //...\n   });\n   ```\n\n   @method load\n   @return {Promise} a promise that resolves with the ManyArray in\n   this has-many relationship.\n*/\nHasManyReference.prototype.load = function () {\n  if (!this._isLoaded()) {\n    return this.hasManyRelationship.getRecords();\n  }\n\n  return Ember.RSVP.resolve(this.hasManyRelationship.manyArray);\n};\n\n/**\n   Reloads this has-many relationship.\n\n   Example\n\n   ```app/models/post.js\n   export default DS.Model.extend({\n     comments: DS.hasMany({ async: true })\n   });\n   ```\n\n   ```javascript\n   let post = store.push({\n     data: {\n       type: 'post',\n       id: 1,\n       relationships: {\n         comments: {\n           data: [{ type: 'comment', id: 1 }]\n         }\n       }\n     }\n   });\n\n   let commentsRef = post.hasMany('comments');\n\n   commentsRef.reload().then(function(comments) {\n     //...\n   });\n   ```\n\n   @method reload\n   @return {Promise} a promise that resolves with the ManyArray in this has-many relationship.\n*/\nHasManyReference.prototype.reload = function () {\n  return this.hasManyRelationship.reload();\n};\n\nvar _createClass$2 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck$4(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar emberAssign = Ember.assign || Ember.merge;\n\n/*\n  The TransitionChainMap caches the `state.enters`, `state.setups`, and final state reached\n  when transitioning from one state to another, so that future transitions can replay the\n  transition without needing to walk the state tree, collect these hook calls and determine\n   the state to transition into.\n\n   A future optimization would be to build a single chained method out of the collected enters\n   and setups. It may also be faster to do a two level cache (from: { to }) instead of caching based\n   on a key that adds the two together.\n */\nvar TransitionChainMap = Object.create(null);\n\nvar _extractPivotNameCache = Object.create(null);\nvar _splitOnDotCache = Object.create(null);\n\nfunction splitOnDot(name) {\n  return _splitOnDotCache[name] || (_splitOnDotCache[name] = name.split('.'));\n}\n\nfunction extractPivotName(name) {\n  return _extractPivotNameCache[name] || (_extractPivotNameCache[name] = splitOnDot(name)[0]);\n}\n\nfunction areAllModelsUnloaded(internalModels) {\n  for (var i = 0; i < internalModels.length; ++i) {\n    var record = internalModels[i]._record;\n    if (record && !(record.get('isDestroyed') || record.get('isDestroying'))) {\n      return false;\n    }\n  }\n  return true;\n}\n\n// Handle dematerialization for relationship `rel`.  In all cases, notify the\n// relatinoship of the dematerialization: this is done so the relationship can\n// notify its inverse which needs to update state\n//\n// If the inverse is sync, unloading this record is treated as a client-side\n// delete, so we remove the inverse records from this relationship to\n// disconnect the graph.  Because it's not async, we don't need to keep around\n// the internalModel as an id-wrapper for references and because the graph is\n// disconnected we can actually destroy the internalModel when checking for\n// orphaned models.\nfunction destroyRelationship(rel) {\n  rel.internalModelDidDematerialize();\n\n  if (rel._inverseIsSync()) {\n    // disconnect the graph so that the sync inverse relationship does not\n    // prevent us from cleaning up during `_cleanupOrphanedInternalModels`\n    rel.removeAllInternalModelsFromOwn();\n    rel.removeAllCanonicalInternalModelsFromOwn();\n  }\n}\n// this (and all heimdall instrumentation) will be stripped by a babel transform\n//  https://github.com/heimdalljs/babel5-plugin-strip-heimdall\n\n\nvar InternalModelReferenceId = 1;\nvar nextBfsId = 1;\n\n/*\n  `InternalModel` is the Model class that we use internally inside Ember Data to represent models.\n  Internal ED methods should only deal with `InternalModel` objects. It is a fast, plain Javascript class.\n\n  We expose `DS.Model` to application code, by materializing a `DS.Model` from `InternalModel` lazily, as\n  a performance optimization.\n\n  `InternalModel` should never be exposed to application code. At the boundaries of the system, in places\n  like `find`, `push`, etc. we convert between Models and InternalModels.\n\n  We need to make sure that the properties from `InternalModel` are correctly exposed/proxied on `Model`\n  if they are needed.\n\n  @private\n  @class InternalModel\n*/\n\nvar InternalModel = function () {\n  function InternalModel(modelName, id, store, data) {\n    _classCallCheck$4(this, InternalModel);\n\n    this.id = id;\n\n    // this ensure ordered set can quickly identify this as unique\n    this[Ember.GUID_KEY] = InternalModelReferenceId++ + 'internal-model';\n\n    this.store = store;\n    this.modelName = modelName;\n    this._loadingPromise = null;\n    this._record = null;\n    this._isDestroyed = false;\n    this.isError = false;\n    this._isUpdatingRecordArrays = false; // used by the recordArrayManager\n\n    // During dematerialization we don't want to rematerialize the record.  The\n    // reason this might happen is that dematerialization removes records from\n    // record arrays,  and Ember arrays will always `objectAt(0)` and\n    // `objectAt(len - 1)` to test whether or not `firstObject` or `lastObject`\n    // have changed.\n    this._isDematerializing = false;\n    this._scheduledDestroy = null;\n\n    this.resetRecord();\n\n    if (data) {\n      this.__data = data;\n    }\n\n    // caches for lazy getters\n    this._modelClass = null;\n    this.__deferredTriggers = null;\n    this.__recordArrays = null;\n    this._references = null;\n    this._recordReference = null;\n    this.__relationships = null;\n    this.__implicitRelationships = null;\n\n    // Used during the mark phase of unloading to avoid checking the same internal\n    // model twice in the same scan\n    this._bfsId = 0;\n  }\n\n  InternalModel.prototype.isHiddenFromRecordArrays = function isHiddenFromRecordArrays() {\n    // During dematerialization we don't want to rematerialize the record.\n    // recordWasDeleted can cause other records to rematerialize because it\n    // removes the internal model from the array and Ember arrays will always\n    // `objectAt(0)` and `objectAt(len -1)` to check whether `firstObject` or\n    // `lastObject` have changed.  When this happens we don't want those\n    // models to rematerialize their records.\n\n    return this._isDematerializing || this.isDestroyed || this.currentState.stateName === 'root.deleted.saved' || this.isEmpty();\n  };\n\n  InternalModel.prototype.isEmpty = function isEmpty() {\n    return this.currentState.isEmpty;\n  };\n\n  InternalModel.prototype.isLoading = function isLoading() {\n    return this.currentState.isLoading;\n  };\n\n  InternalModel.prototype.isLoaded = function isLoaded() {\n    return this.currentState.isLoaded;\n  };\n\n  InternalModel.prototype.hasDirtyAttributes = function hasDirtyAttributes() {\n    return this.currentState.hasDirtyAttributes;\n  };\n\n  InternalModel.prototype.isSaving = function isSaving() {\n    return this.currentState.isSaving;\n  };\n\n  InternalModel.prototype.isDeleted = function isDeleted() {\n    return this.currentState.isDeleted;\n  };\n\n  InternalModel.prototype.isNew = function isNew() {\n    return this.currentState.isNew;\n  };\n\n  InternalModel.prototype.isValid = function isValid() {\n    return this.currentState.isValid;\n  };\n\n  InternalModel.prototype.dirtyType = function dirtyType() {\n    return this.currentState.dirtyType;\n  };\n\n  InternalModel.prototype.getRecord = function getRecord(properties) {\n    if (!this._record && !this._isDematerializing) {\n\n      // lookupFactory should really return an object that creates\n      // instances with the injections applied\n      var createOptions = {\n        store: this.store,\n        _internalModel: this,\n        id: this.id,\n        currentState: this.currentState,\n        isError: this.isError,\n        adapterError: this.error\n      };\n\n      if (typeof properties === 'object' && properties !== null) {\n        emberAssign(createOptions, properties);\n      }\n\n      if (Ember.setOwner) {\n        // ensure that `getOwner(this)` works inside a model instance\n        Ember.setOwner(createOptions, getOwner(this.store));\n      } else {\n        createOptions.container = this.store.container;\n      }\n\n      this._record = this.store.modelFactoryFor(this.modelName).create(createOptions);\n\n      this._triggerDeferredTriggers();\n    }\n\n    return this._record;\n  };\n\n  InternalModel.prototype.resetRecord = function resetRecord() {\n    this._record = null;\n    this.isReloading = false;\n    this.error = null;\n    this.currentState = RootState$1.empty;\n    this.__attributes = null;\n    this.__inFlightAttributes = null;\n    this._data = null;\n  };\n\n  InternalModel.prototype.dematerializeRecord = function dematerializeRecord() {\n    if (this._record) {\n      this._isDematerializing = true;\n      this._record.destroy();\n      this.destroyRelationships();\n      this.updateRecordArrays();\n      this.resetRecord();\n    }\n  };\n\n  InternalModel.prototype.deleteRecord = function deleteRecord() {\n    this.send('deleteRecord');\n  };\n\n  InternalModel.prototype.save = function save(options) {\n    var promiseLabel = \"DS: Model#save \" + this;\n    var resolver = Ember.RSVP.defer(promiseLabel);\n\n    this.store.scheduleSave(this, resolver, options);\n    return resolver.promise;\n  };\n\n  InternalModel.prototype.startedReloading = function startedReloading() {\n    this.isReloading = true;\n    if (this.hasRecord) {\n      Ember.set(this._record, 'isReloading', true);\n    }\n  };\n\n  InternalModel.prototype.finishedReloading = function finishedReloading() {\n    this.isReloading = false;\n    if (this.hasRecord) {\n      Ember.set(this._record, 'isReloading', false);\n    }\n  };\n\n  InternalModel.prototype.reload = function reload() {\n    this.startedReloading();\n    var internalModel = this;\n    var promiseLabel = \"DS: Model#reload of \" + this;\n\n    return new Ember.RSVP.Promise(function (resolve) {\n      internalModel.send('reloadRecord', resolve);\n    }, promiseLabel).then(function () {\n      internalModel.didCleanError();\n      return internalModel;\n    }, function (error) {\n      internalModel.didError(error);\n      throw error;\n    }, \"DS: Model#reload complete, update flags\").finally(function () {\n      internalModel.finishedReloading();\n      internalModel.updateRecordArrays();\n    });\n  };\n\n  /*\n    Computes the set of internal models reachable from `this` across exactly one\n    relationship.\n     @return {Array} An array containing the internal models that `this` belongs\n    to or has many.\n  */\n\n\n  InternalModel.prototype._directlyRelatedInternalModels = function _directlyRelatedInternalModels() {\n    var array = [];\n\n    this._relationships.forEach(function (name, rel) {\n      array = array.concat(rel.members.list, rel.canonicalMembers.list);\n    });\n    return array;\n  };\n\n  /*\n    Computes the set of internal models reachable from this internal model.\n     Reachability is determined over the relationship graph (ie a graph where\n    nodes are internal models and edges are belongs to or has many\n    relationships).\n     @return {Array} An array including `this` and all internal models reachable\n    from `this`.\n  */\n\n\n  InternalModel.prototype._allRelatedInternalModels = function _allRelatedInternalModels() {\n    var array = [];\n    var queue = [];\n    var bfsId = nextBfsId++;\n    queue.push(this);\n    this._bfsId = bfsId;\n    while (queue.length > 0) {\n      var node = queue.shift();\n      array.push(node);\n      var related = node._directlyRelatedInternalModels();\n      for (var i = 0; i < related.length; ++i) {\n        var internalModel = related[i];\n        (true && !(internalModel._bfsId <= bfsId) && Ember.assert('Internal Error: seen a future bfs iteration', internalModel._bfsId <= bfsId));\n\n        if (internalModel._bfsId < bfsId) {\n          queue.push(internalModel);\n          internalModel._bfsId = bfsId;\n        }\n      }\n    }\n    return array;\n  };\n\n  /*\n    Unload the record for this internal model. This will cause the record to be\n    destroyed and freed up for garbage collection. It will also do a check\n    for cleaning up internal models.\n     This check is performed by first computing the set of related internal\n    models. If all records in this set are unloaded, then the entire set is\n    destroyed. Otherwise, nothing in the set is destroyed.\n     This means that this internal model will be freed up for garbage collection\n    once all models that refer to it via some relationship are also unloaded.\n  */\n\n\n  InternalModel.prototype.unloadRecord = function unloadRecord() {\n    if (this.isDestroyed) {\n      return;\n    }\n    this.send('unloadRecord');\n    this.dematerializeRecord();\n\n    if (this._scheduledDestroy === null) {\n      // TODO: use run.schedule once we drop 1.13\n      if (!Ember.run.currentRunLoop) {\n        (true && !(Ember.testing) && Ember.assert('You have turned on testing mode, which disabled the run-loop\\'s autorun.\\n                  You will need to wrap any code with asynchronous side-effects in a run', Ember.testing));\n      }\n      this._scheduledDestroy = Ember.run.backburner.schedule('destroy', this, '_checkForOrphanedInternalModels');\n    }\n  };\n\n  InternalModel.prototype.hasScheduledDestroy = function hasScheduledDestroy() {\n    return !!this._scheduledDestroy;\n  };\n\n  InternalModel.prototype.cancelDestroy = function cancelDestroy() {\n    (true && !(!this.isDestroyed) && Ember.assert('You cannot cancel the destruction of an InternalModel once it has already been destroyed', !this.isDestroyed));\n\n\n    this._isDematerializing = false;\n    Ember.run.cancel(this._scheduledDestroy);\n    this._scheduledDestroy = null;\n  };\n\n  // typically, we prefer to async destroy this lets us batch cleanup work.\n  // Unfortunately, some scenarios where that is not possible. Such as:\n  //\n  // ```js\n  // const record = store.find(‘record’, 1);\n  // record.unloadRecord();\n  // store.createRecord(‘record’, 1);\n  // ```\n  //\n  // In those scenarios, we make that model's cleanup work, sync.\n  //\n\n\n  InternalModel.prototype.destroySync = function destroySync() {\n    if (this._isDematerializing) {\n      this.cancelDestroy();\n    }\n    this._checkForOrphanedInternalModels();\n    if (this.isDestroyed || this.isDestroying) {\n      return;\n    }\n\n    // just in-case we are not one of the orphaned, we should still\n    // still destroy ourselves\n    this.destroy();\n  };\n\n  InternalModel.prototype._checkForOrphanedInternalModels = function _checkForOrphanedInternalModels() {\n    this._isDematerializing = false;\n    this._scheduledDestroy = null;\n    if (this.isDestroyed) {\n      return;\n    }\n\n    this._cleanupOrphanedInternalModels();\n  };\n\n  InternalModel.prototype._cleanupOrphanedInternalModels = function _cleanupOrphanedInternalModels() {\n    var relatedInternalModels = this._allRelatedInternalModels();\n    if (areAllModelsUnloaded(relatedInternalModels)) {\n      for (var i = 0; i < relatedInternalModels.length; ++i) {\n        var internalModel = relatedInternalModels[i];\n        if (!internalModel.isDestroyed) {\n          internalModel.destroy();\n        }\n      }\n    }\n  };\n\n  InternalModel.prototype.eachRelationship = function eachRelationship(callback, binding) {\n    return this.modelClass.eachRelationship(callback, binding);\n  };\n\n  InternalModel.prototype.destroy = function destroy() {\n    (true && !(!this._record || this._record.get('isDestroyed') || this._record.get('isDestroying')) && Ember.assert(\"Cannot destroy an internalModel while its record is materialized\", !this._record || this._record.get('isDestroyed') || this._record.get('isDestroying')));\n\n\n    this.store._internalModelDestroyed(this);\n\n    this._relationships.forEach(function (name, rel) {\n      return rel.destroy();\n    });\n\n    this._isDestroyed = true;\n  };\n\n  InternalModel.prototype.eachAttribute = function eachAttribute(callback, binding) {\n    return this.modelClass.eachAttribute(callback, binding);\n  };\n\n  InternalModel.prototype.inverseFor = function inverseFor(key) {\n    return this.modelClass.inverseFor(key);\n  };\n\n  InternalModel.prototype.setupData = function setupData(data) {\n    this.store._internalModelDidReceiveRelationshipData(this.modelName, this.id, data.relationships);\n\n    var changedKeys = void 0;\n\n    if (this.hasRecord) {\n      changedKeys = this._changedKeys(data.attributes);\n    }\n\n    emberAssign(this._data, data.attributes);\n    this.pushedData();\n\n    if (this.hasRecord) {\n      this._record._notifyProperties(changedKeys);\n    }\n  };\n\n  /*\n    @method createSnapshot\n    @private\n  */\n  InternalModel.prototype.createSnapshot = function createSnapshot(options) {\n    return new Snapshot(this, options);\n  };\n\n  /*\n    @method loadingData\n    @private\n    @param {Promise} promise\n  */\n\n\n  InternalModel.prototype.loadingData = function loadingData(promise) {\n    this.send('loadingData', promise);\n  };\n\n  /*\n    @method loadedData\n    @private\n  */\n\n\n  InternalModel.prototype.loadedData = function loadedData() {\n    this.send('loadedData');\n  };\n\n  /*\n    @method notFound\n    @private\n  */\n\n\n  InternalModel.prototype.notFound = function notFound() {\n    this.send('notFound');\n  };\n\n  /*\n    @method pushedData\n    @private\n  */\n\n\n  InternalModel.prototype.pushedData = function pushedData() {\n    this.send('pushedData');\n  };\n\n  InternalModel.prototype.flushChangedAttributes = function flushChangedAttributes() {\n    this._inFlightAttributes = this._attributes;\n    this._attributes = null;\n  };\n\n  InternalModel.prototype.hasChangedAttributes = function hasChangedAttributes() {\n    return this.__attributes !== null && Object.keys(this.__attributes).length > 0;\n  };\n\n  /*\n    Checks if the attributes which are considered as changed are still\n    different to the state which is acknowledged by the server.\n     This method is needed when data for the internal model is pushed and the\n    pushed data might acknowledge dirty attributes as confirmed.\n     @method updateChangedAttributes\n    @private\n   */\n\n\n  InternalModel.prototype.updateChangedAttributes = function updateChangedAttributes() {\n    var changedAttributes = this.changedAttributes();\n    var changedAttributeNames = Object.keys(changedAttributes);\n    var attrs = this._attributes;\n\n    for (var i = 0, length = changedAttributeNames.length; i < length; i++) {\n      var attribute = changedAttributeNames[i];\n      var data = changedAttributes[attribute];\n      var oldData = data[0];\n      var newData = data[1];\n\n      if (oldData === newData) {\n        delete attrs[attribute];\n      }\n    }\n  };\n\n  /*\n    Returns an object, whose keys are changed properties, and value is an\n    [oldProp, newProp] array.\n     @method changedAttributes\n    @private\n  */\n\n\n  InternalModel.prototype.changedAttributes = function changedAttributes() {\n    var oldData = this._data;\n    var currentData = this._attributes;\n    var inFlightData = this._inFlightAttributes;\n    var newData = emberAssign(Ember.copy(inFlightData), currentData);\n    var diffData = Object.create(null);\n    var newDataKeys = Object.keys(newData);\n\n    for (var i = 0, length = newDataKeys.length; i < length; i++) {\n      var key = newDataKeys[i];\n      diffData[key] = [oldData[key], newData[key]];\n    }\n\n    return diffData;\n  };\n\n  /*\n    @method adapterWillCommit\n    @private\n  */\n\n\n  InternalModel.prototype.adapterWillCommit = function adapterWillCommit() {\n    this.send('willCommit');\n  };\n\n  /*\n    @method adapterDidDirty\n    @private\n  */\n\n\n  InternalModel.prototype.adapterDidDirty = function adapterDidDirty() {\n    this.send('becomeDirty');\n    this.updateRecordArrays();\n  };\n\n  /*\n    @method send\n    @private\n    @param {String} name\n    @param {Object} context\n  */\n\n\n  InternalModel.prototype.send = function send(name, context) {\n    var currentState = this.currentState;\n\n    if (!currentState[name]) {\n      this._unhandledEvent(currentState, name, context);\n    }\n\n    return currentState[name](this, context);\n  };\n\n  InternalModel.prototype.notifyHasManyAdded = function notifyHasManyAdded(key, record, idx) {\n    if (this.hasRecord) {\n      this._record.notifyHasManyAdded(key, record, idx);\n    }\n  };\n\n  InternalModel.prototype.notifyBelongsToChanged = function notifyBelongsToChanged(key, record) {\n    if (this.hasRecord) {\n      this._record.notifyBelongsToChanged(key, record);\n    }\n  };\n\n  InternalModel.prototype.notifyPropertyChange = function notifyPropertyChange(key) {\n    if (this.hasRecord) {\n      this._record.notifyPropertyChange(key);\n    }\n  };\n\n  InternalModel.prototype.rollbackAttributes = function rollbackAttributes() {\n    var dirtyKeys = void 0;\n    if (this.hasChangedAttributes()) {\n      dirtyKeys = Object.keys(this._attributes);\n      this._attributes = null;\n    }\n\n    if (Ember.get(this, 'isError')) {\n      this._inFlightAttributes = null;\n      this.didCleanError();\n    }\n\n    if (this.isNew()) {\n      this.removeFromInverseRelationships();\n    }\n\n    if (this.isValid()) {\n      this._inFlightAttributes = null;\n    }\n\n    this.send('rolledBack');\n\n    if (dirtyKeys && dirtyKeys.length > 0) {\n      this._record._notifyProperties(dirtyKeys);\n    }\n  };\n\n  /*\n    @method transitionTo\n    @private\n    @param {String} name\n  */\n\n\n  InternalModel.prototype.transitionTo = function transitionTo(name) {\n    // POSSIBLE TODO: Remove this code and replace with\n    // always having direct reference to state objects\n\n    var pivotName = extractPivotName(name);\n    var state = this.currentState;\n    var transitionMapId = state.stateName + '->' + name;\n\n    do {\n      if (state.exit) {\n        state.exit(this);\n      }\n      state = state.parentState;\n    } while (!state[pivotName]);\n\n    var setups = void 0;\n    var enters = void 0;\n    var i = void 0;\n    var l = void 0;\n    var map = TransitionChainMap[transitionMapId];\n\n    if (map) {\n      setups = map.setups;\n      enters = map.enters;\n      state = map.state;\n    } else {\n      setups = [];\n      enters = [];\n\n      var path = splitOnDot(name);\n\n      for (i = 0, l = path.length; i < l; i++) {\n        state = state[path[i]];\n\n        if (state.enter) {\n          enters.push(state);\n        }\n        if (state.setup) {\n          setups.push(state);\n        }\n      }\n\n      TransitionChainMap[transitionMapId] = { setups: setups, enters: enters, state: state };\n    }\n\n    for (i = 0, l = enters.length; i < l; i++) {\n      enters[i].enter(this);\n    }\n\n    this.currentState = state;\n    if (this.hasRecord) {\n      Ember.set(this._record, 'currentState', state);\n    }\n\n    for (i = 0, l = setups.length; i < l; i++) {\n      setups[i].setup(this);\n    }\n\n    this.updateRecordArrays();\n  };\n\n  InternalModel.prototype._unhandledEvent = function _unhandledEvent(state, name, context) {\n    var errorMessage = \"Attempted to handle event `\" + name + \"` \";\n    errorMessage += \"on \" + String(this) + \" while in state \";\n    errorMessage += state.stateName + \". \";\n\n    if (context !== undefined) {\n      errorMessage += \"Called with \" + Ember.inspect(context) + \".\";\n    }\n\n    throw new Ember.Error(errorMessage);\n  };\n\n  InternalModel.prototype.triggerLater = function triggerLater() {\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    if (this._deferredTriggers.push(args) !== 1) {\n      return;\n    }\n\n    this.store._updateInternalModel(this);\n  };\n\n  InternalModel.prototype._triggerDeferredTriggers = function _triggerDeferredTriggers() {\n    //TODO: Before 1.0 we want to remove all the events that happen on the pre materialized record,\n    //but for now, we queue up all the events triggered before the record was materialized, and flush\n    //them once we have the record\n    if (!this.hasRecord) {\n      return;\n    }\n    var triggers = this._deferredTriggers;\n    var record = this._record;\n    var trigger = record.trigger;\n    for (var i = 0, l = triggers.length; i < l; i++) {\n      trigger.apply(record, triggers[i]);\n    }\n\n    triggers.length = 0;\n  };\n\n  /*\n   This method should only be called by records in the `isNew()` state OR once the record\n   has been deleted and that deletion has been persisted.\n    It will remove this record from any associated relationships.\n     @method removeFromInverseRelationships\n    @private\n   */\n\n\n  InternalModel.prototype.removeFromInverseRelationships = function removeFromInverseRelationships() {\n    this._relationships.forEach(function (name, rel) {\n      rel.removeCompletelyFromInverse();\n      rel.clear();\n    });\n\n    var implicitRelationships = this._implicitRelationships;\n    this.__implicitRelationships = null;\n\n    Object.keys(implicitRelationships).forEach(function (key) {\n      var rel = implicitRelationships[key];\n\n      rel.removeCompletelyFromInverse();\n      rel.clear();\n    });\n  };\n\n  /*\n    Notify all inverses that this internalModel has been dematerialized\n    and destroys any ManyArrays.\n   */\n\n\n  InternalModel.prototype.destroyRelationships = function destroyRelationships() {\n    var relationships = this._relationships;\n    relationships.forEach(function (name, rel) {\n      return destroyRelationship(rel);\n    });\n\n    var implicitRelationships = this._implicitRelationships;\n    this.__implicitRelationships = null;\n    Object.keys(implicitRelationships).forEach(function (key) {\n      var rel = implicitRelationships[key];\n      destroyRelationship(rel);\n    });\n  };\n\n  /*\n    When a find request is triggered on the store, the user can optionally pass in\n    attributes and relationships to be preloaded. These are meant to behave as if they\n    came back from the server, except the user obtained them out of band and is informing\n    the store of their existence. The most common use case is for supporting client side\n    nested URLs, such as `/posts/1/comments/2` so the user can do\n    `store.findRecord('comment', 2, { preload: { post: 1 } })` without having to fetch the post.\n     Preloaded data can be attributes and relationships passed in either as IDs or as actual\n    models.\n     @method preloadData\n    @private\n    @param {Object} preload\n  */\n\n\n  InternalModel.prototype.preloadData = function preloadData(preload) {\n    var _this = this;\n\n    //TODO(Igor) consider the polymorphic case\n    Object.keys(preload).forEach(function (key) {\n      var preloadValue = Ember.get(preload, key);\n      var relationshipMeta = _this.modelClass.metaForProperty(key);\n      if (relationshipMeta.isRelationship) {\n        _this._preloadRelationship(key, preloadValue);\n      } else {\n        _this._data[key] = preloadValue;\n      }\n    });\n  };\n\n  InternalModel.prototype._preloadRelationship = function _preloadRelationship(key, preloadValue) {\n    var relationshipMeta = this.modelClass.metaForProperty(key);\n    var modelClass = relationshipMeta.type;\n    if (relationshipMeta.kind === 'hasMany') {\n      this._preloadHasMany(key, preloadValue, modelClass);\n    } else {\n      this._preloadBelongsTo(key, preloadValue, modelClass);\n    }\n  };\n\n  InternalModel.prototype._preloadHasMany = function _preloadHasMany(key, preloadValue, modelClass) {\n    (true && !(Array.isArray(preloadValue)) && Ember.assert(\"You need to pass in an array to set a hasMany property on a record\", Array.isArray(preloadValue)));\n\n    var recordsToSet = new Array(preloadValue.length);\n\n    for (var i = 0; i < preloadValue.length; i++) {\n      var recordToPush = preloadValue[i];\n      recordsToSet[i] = this._convertStringOrNumberIntoInternalModel(recordToPush, modelClass);\n    }\n\n    //We use the pathway of setting the hasMany as if it came from the adapter\n    //because the user told us that they know this relationships exists already\n    this._relationships.get(key).updateInternalModelsFromAdapter(recordsToSet);\n  };\n\n  InternalModel.prototype._preloadBelongsTo = function _preloadBelongsTo(key, preloadValue, modelClass) {\n    var internalModelToSet = this._convertStringOrNumberIntoInternalModel(preloadValue, modelClass);\n\n    //We use the pathway of setting the hasMany as if it came from the adapter\n    //because the user told us that they know this relationships exists already\n    this._relationships.get(key).setInternalModel(internalModelToSet);\n  };\n\n  InternalModel.prototype._convertStringOrNumberIntoInternalModel = function _convertStringOrNumberIntoInternalModel(value, modelClass) {\n    if (typeof value === 'string' || typeof value === 'number') {\n      return this.store._internalModelForId(modelClass, value);\n    }\n    if (value._internalModel) {\n      return value._internalModel;\n    }\n    return value;\n  };\n\n  /*\n    Used to notify the store to update FilteredRecordArray membership.\n     @method updateRecordArrays\n    @private\n  */\n\n\n  InternalModel.prototype.updateRecordArrays = function updateRecordArrays() {\n    this.store.recordArrayManager.recordDidChange(this);\n  };\n\n  InternalModel.prototype.setId = function setId(id) {\n    (true && !(this.id === null || this.id === id || this.isNew()) && Ember.assert('A record\\'s id cannot be changed once it is in the loaded state', this.id === null || this.id === id || this.isNew()));\n\n    this.id = id;\n    if (this._record.get('id') !== id) {\n      this._record.set('id', id);\n    }\n  };\n\n  InternalModel.prototype.didError = function didError(error) {\n    this.error = error;\n    this.isError = true;\n\n    if (this.hasRecord) {\n      this._record.setProperties({\n        isError: true,\n        adapterError: error\n      });\n    }\n  };\n\n  InternalModel.prototype.didCleanError = function didCleanError() {\n    this.error = null;\n    this.isError = false;\n\n    if (this.hasRecord) {\n      this._record.setProperties({\n        isError: false,\n        adapterError: null\n      });\n    }\n  };\n\n  /*\n    If the adapter did not return a hash in response to a commit,\n    merge the changed attributes and relationships into the existing\n    saved data.\n     @method adapterDidCommit\n  */\n\n\n  InternalModel.prototype.adapterDidCommit = function adapterDidCommit(data) {\n    if (data) {\n      this.store._internalModelDidReceiveRelationshipData(this.modelName, this.id, data.relationships);\n\n      data = data.attributes;\n    }\n\n    this.didCleanError();\n    var changedKeys = this._changedKeys(data);\n\n    emberAssign(this._data, this._inFlightAttributes);\n    if (data) {\n      emberAssign(this._data, data);\n    }\n\n    this._inFlightAttributes = null;\n\n    this.send('didCommit');\n    this.updateRecordArrays();\n\n    if (!data) {\n      return;\n    }\n\n    this._record._notifyProperties(changedKeys);\n  };\n\n  InternalModel.prototype.addErrorMessageToAttribute = function addErrorMessageToAttribute(attribute, message) {\n    Ember.get(this.getRecord(), 'errors')._add(attribute, message);\n  };\n\n  InternalModel.prototype.removeErrorMessageFromAttribute = function removeErrorMessageFromAttribute(attribute) {\n    Ember.get(this.getRecord(), 'errors')._remove(attribute);\n  };\n\n  InternalModel.prototype.clearErrorMessages = function clearErrorMessages() {\n    Ember.get(this.getRecord(), 'errors')._clear();\n  };\n\n  InternalModel.prototype.hasErrors = function hasErrors() {\n    var errors = Ember.get(this.getRecord(), 'errors');\n\n    return errors.get('length') > 0;\n  };\n\n  // FOR USE DURING COMMIT PROCESS\n\n  /*\n    @method adapterDidInvalidate\n    @private\n  */\n\n\n  InternalModel.prototype.adapterDidInvalidate = function adapterDidInvalidate(errors) {\n    var attribute = void 0;\n\n    for (attribute in errors) {\n      if (errors.hasOwnProperty(attribute)) {\n        this.addErrorMessageToAttribute(attribute, errors[attribute]);\n      }\n    }\n\n    this.send('becameInvalid');\n\n    this._saveWasRejected();\n  };\n\n  /*\n    @method adapterDidError\n    @private\n  */\n\n\n  InternalModel.prototype.adapterDidError = function adapterDidError(error) {\n    this.send('becameError');\n    this.didError(error);\n    this._saveWasRejected();\n  };\n\n  InternalModel.prototype._saveWasRejected = function _saveWasRejected() {\n    var keys = Object.keys(this._inFlightAttributes);\n    if (keys.length > 0) {\n      var attrs = this._attributes;\n      for (var i = 0; i < keys.length; i++) {\n        if (attrs[keys[i]] === undefined) {\n          attrs[keys[i]] = this._inFlightAttributes[keys[i]];\n        }\n      }\n    }\n    this._inFlightAttributes = null;\n  };\n\n  /*\n    Ember Data has 3 buckets for storing the value of an attribute on an internalModel.\n     `_data` holds all of the attributes that have been acknowledged by\n    a backend via the adapter. When rollbackAttributes is called on a model all\n    attributes will revert to the record's state in `_data`.\n     `_attributes` holds any change the user has made to an attribute\n    that has not been acknowledged by the adapter. Any values in\n    `_attributes` are have priority over values in `_data`.\n     `_inFlightAttributes`. When a record is being synced with the\n    backend the values in `_attributes` are copied to\n    `_inFlightAttributes`. This way if the backend acknowledges the\n    save but does not return the new state Ember Data can copy the\n    values from `_inFlightAttributes` to `_data`. Without having to\n    worry about changes made to `_attributes` while the save was\n    happenign.\n      Changed keys builds a list of all of the values that may have been\n    changed by the backend after a successful save.\n     It does this by iterating over each key, value pair in the payload\n    returned from the server after a save. If the `key` is found in\n    `_attributes` then the user has a local changed to the attribute\n    that has not been synced with the server and the key is not\n    included in the list of changed keys.\n  \n    If the value, for a key differs from the value in what Ember Data\n    believes to be the truth about the backend state (A merger of the\n    `_data` and `_inFlightAttributes` objects where\n    `_inFlightAttributes` has priority) then that means the backend\n    has updated the value and the key is added to the list of changed\n    keys.\n     @method _changedKeys\n    @private\n  */\n\n\n  InternalModel.prototype._changedKeys = function _changedKeys(updates) {\n    var changedKeys = [];\n\n    if (updates) {\n      var original = void 0,\n          i = void 0,\n          value = void 0,\n          key = void 0;\n      var keys = Object.keys(updates);\n      var length = keys.length;\n      var hasAttrs = this.hasChangedAttributes();\n      var attrs = void 0;\n      if (hasAttrs) {\n        attrs = this._attributes;\n      }\n\n      original = emberAssign(Object.create(null), this._data);\n      original = emberAssign(original, this._inFlightAttributes);\n\n      for (i = 0; i < length; i++) {\n        key = keys[i];\n        value = updates[key];\n\n        // A value in _attributes means the user has a local change to\n        // this attributes. We never override this value when merging\n        // updates from the backend so we should not sent a change\n        // notification if the server value differs from the original.\n        if (hasAttrs === true && attrs[key] !== undefined) {\n          continue;\n        }\n\n        if (!Ember.isEqual(original[key], value)) {\n          changedKeys.push(key);\n        }\n      }\n    }\n\n    return changedKeys;\n  };\n\n  InternalModel.prototype.toString = function toString() {\n    return '<' + this.modelName + ':' + this.id + '>';\n  };\n\n  InternalModel.prototype.referenceFor = function referenceFor(kind, name) {\n    var reference = this.references[name];\n\n    if (!reference) {\n      var relationship = this._relationships.get(name);\n\n      {\n        var modelName = this.modelName;\n        (true && !(relationship) && Ember.assert('There is no ' + kind + ' relationship named \\'' + name + '\\' on a model of modelClass \\'' + modelName + '\\'', relationship));\n\n\n        var actualRelationshipKind = relationship.relationshipMeta.kind;\n        (true && !(actualRelationshipKind === kind) && Ember.assert('You tried to get the \\'' + name + '\\' relationship on a \\'' + modelName + '\\' via record.' + kind + '(\\'' + name + '\\'), but the relationship is of kind \\'' + actualRelationshipKind + '\\'. Use record.' + actualRelationshipKind + '(\\'' + name + '\\') instead.', actualRelationshipKind === kind));\n      }\n\n      if (kind === \"belongsTo\") {\n        reference = new BelongsToReference(this.store, this, relationship);\n      } else if (kind === \"hasMany\") {\n        reference = new HasManyReference(this.store, this, relationship);\n      }\n\n      this.references[name] = reference;\n    }\n\n    return reference;\n  };\n\n  _createClass$2(InternalModel, [{\n    key: 'modelClass',\n    get: function get() {\n      return this._modelClass || (this._modelClass = this.store._modelFor(this.modelName));\n    }\n  }, {\n    key: 'type',\n    get: function get() {\n      return this.modelClass;\n    }\n  }, {\n    key: 'recordReference',\n    get: function get() {\n      if (this._recordReference === null) {\n        this._recordReference = new RecordReference(this.store, this);\n      }\n      return this._recordReference;\n    }\n  }, {\n    key: '_recordArrays',\n    get: function get() {\n      if (this.__recordArrays === null) {\n        this.__recordArrays = OrderedSet.create();\n      }\n      return this.__recordArrays;\n    }\n  }, {\n    key: 'references',\n    get: function get() {\n      if (this._references === null) {\n        this._references = Object.create(null);\n      }\n      return this._references;\n    }\n  }, {\n    key: '_deferredTriggers',\n    get: function get() {\n      if (this.__deferredTriggers === null) {\n        this.__deferredTriggers = [];\n      }\n      return this.__deferredTriggers;\n    }\n  }, {\n    key: '_attributes',\n    get: function get() {\n      if (this.__attributes === null) {\n        this.__attributes = Object.create(null);\n      }\n      return this.__attributes;\n    },\n    set: function set(v) {\n      this.__attributes = v;\n    }\n  }, {\n    key: '_relationships',\n    get: function get() {\n      if (this.__relationships === null) {\n        this.__relationships = new Relationships(this);\n      }\n\n      return this.__relationships;\n    }\n  }, {\n    key: '_inFlightAttributes',\n    get: function get() {\n      if (this.__inFlightAttributes === null) {\n        this.__inFlightAttributes = Object.create(null);\n      }\n      return this.__inFlightAttributes;\n    },\n    set: function set(v) {\n      this.__inFlightAttributes = v;\n    }\n  }, {\n    key: '_data',\n    get: function get() {\n      if (this.__data === null) {\n        this.__data = Object.create(null);\n      }\n      return this.__data;\n    },\n    set: function set(v) {\n      this.__data = v;\n    }\n\n    /*\n     implicit relationships are relationship which have not been declared but the inverse side exists on\n     another record somewhere\n     For example if there was\n      ```app/models/comment.js\n     import DS from 'ember-data';\n      export default DS.Model.extend({\n     name: DS.attr()\n     })\n     ```\n      but there is also\n      ```app/models/post.js\n     import DS from 'ember-data';\n      export default DS.Model.extend({\n     name: DS.attr(),\n     comments: DS.hasMany('comment')\n     })\n     ```\n      would have a implicit post relationship in order to be do things like remove ourselves from the post\n     when we are deleted\n    */\n\n  }, {\n    key: '_implicitRelationships',\n    get: function get() {\n      if (this.__implicitRelationships === null) {\n        this.__implicitRelationships = Object.create(null);\n      }\n      return this.__implicitRelationships;\n    }\n  }, {\n    key: 'isDestroyed',\n    get: function get() {\n      return this._isDestroyed;\n    }\n  }, {\n    key: 'hasRecord',\n    get: function get() {\n      return !!this._record;\n    }\n  }]);\n\n  return InternalModel;\n}();\n\nif (isEnabled('ds-rollback-attribute')) {\n  /*\n     Returns the latest truth for an attribute - the canonical value, or the\n     in-flight value.\n      @method lastAcknowledgedValue\n     @private\n  */\n  InternalModel.prototype.lastAcknowledgedValue = function lastAcknowledgedValue(key) {\n    if (key in this._inFlightAttributes) {\n      return this._inFlightAttributes[key];\n    } else {\n      return this._data[key];\n    }\n  };\n}\n\nvar _createClass$1 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck$3(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n `InternalModelMap` is a custom storage map for internalModels of a given modelName\n used by `IdentityMap`.\n\n It was extracted from an implicit pojo based \"internalModel map\" and preserves\n that interface while we work towards a more official API.\n\n @class InternalModelMap\n @private\n */\n\nvar InternalModelMap = function () {\n  function InternalModelMap(modelName) {\n    _classCallCheck$3(this, InternalModelMap);\n\n    this.modelName = modelName;\n    this._idToModel = Object.create(null);\n    this._models = [];\n    this._metadata = null;\n  }\n\n  /**\n   * @method get\n   * @param id {String}\n   * @return {InternalModel}\n   */\n\n\n  InternalModelMap.prototype.get = function get(id) {\n    return this._idToModel[id];\n  };\n\n  InternalModelMap.prototype.has = function has(id) {\n    return !!this._idToModel[id];\n  };\n\n  InternalModelMap.prototype.set = function set(id, internalModel) {\n    (true && !(id) && Ember.assert('You cannot index an internalModel by an empty id\\'', id));\n    (true && !(internalModel instanceof InternalModel) && Ember.assert('You cannot set an index for an internalModel to something other than an internalModel', internalModel instanceof InternalModel));\n    (true && !(this.contains(internalModel)) && Ember.assert('You cannot set an index for an internalModel that is not in the InternalModelMap', this.contains(internalModel)));\n    (true && !(!this.has(id) || this.get(id) === internalModel) && Ember.assert('You cannot update the id index of an InternalModel once set. Attempted to update ' + id + '.', !this.has(id) || this.get(id) === internalModel));\n\n\n    this._idToModel[id] = internalModel;\n  };\n\n  InternalModelMap.prototype.add = function add(internalModel, id) {\n    (true && !(!this.contains(internalModel)) && Ember.assert('You cannot re-add an already present InternalModel to the InternalModelMap.', !this.contains(internalModel)));\n\n\n    if (id) {\n      this._idToModel[id] = internalModel;\n    }\n\n    this._models.push(internalModel);\n  };\n\n  InternalModelMap.prototype.remove = function remove(internalModel, id) {\n    delete this._idToModel[id];\n\n    var loc = this._models.indexOf(internalModel);\n\n    if (loc !== -1) {\n      this._models.splice(loc, 1);\n    }\n  };\n\n  InternalModelMap.prototype.contains = function contains(internalModel) {\n    return this._models.indexOf(internalModel) !== -1;\n  };\n\n  /**\n   An array of all models of this modelName\n   @property models\n   @type Array\n   */\n\n\n  /**\n   Destroy all models in the internalModelTest and wipe metadata.\n    @method clear\n   */\n  InternalModelMap.prototype.clear = function clear() {\n    var models = this._models;\n    this._models = [];\n\n    for (var i = 0; i < models.length; i++) {\n      var model = models[i];\n      model.unloadRecord();\n    }\n\n    this._metadata = null;\n  };\n\n  _createClass$1(InternalModelMap, [{\n    key: 'length',\n    get: function get() {\n      return this._models.length;\n    }\n  }, {\n    key: 'models',\n    get: function get() {\n      return this._models;\n    }\n\n    /**\n     * meta information about internalModels\n     * @property metadata\n     * @type Object\n     */\n\n  }, {\n    key: 'metadata',\n    get: function get() {\n      return this._metadata || (this._metadata = Object.create(null));\n    }\n\n    /**\n     deprecated (and unsupported) way of accessing modelClass\n      @property type\n     @deprecated\n     */\n\n  }, {\n    key: 'type',\n    get: function get() {\n      throw new Error('InternalModelMap.type is no longer available');\n    }\n  }]);\n\n  return InternalModelMap;\n}();\n\nfunction _classCallCheck$2(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n `IdentityMap` is a custom storage map for records by modelName\n used by `DS.Store`.\n\n @class IdentityMap\n @private\n */\n\nvar IdentityMap = function () {\n  function IdentityMap() {\n    _classCallCheck$2(this, IdentityMap);\n\n    this._map = Object.create(null);\n  }\n\n  /**\n   Retrieves the `InternalModelMap` for a given modelName,\n   creating one if one did not already exist. This is\n   similar to `getWithDefault` or `get` on a `MapWithDefault`\n    @method retrieve\n   @param modelName a previously normalized modelName\n   @return {InternalModelMap} the InternalModelMap for the given modelName\n   */\n\n\n  IdentityMap.prototype.retrieve = function retrieve(modelName) {\n    var map = this._map[modelName];\n\n    if (map === undefined) {\n      map = this._map[modelName] = new InternalModelMap(modelName);\n    }\n\n    return map;\n  };\n\n  /**\n   Clears the contents of all known `RecordMaps`, but does\n   not remove the InternalModelMap instances.\n    @method clear\n   */\n\n\n  IdentityMap.prototype.clear = function clear() {\n    var map = this._map;\n    var keys = Object.keys(map);\n\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n      map[key].clear();\n    }\n  };\n\n  return IdentityMap;\n}();\n\n/*\n  This is a helper method that validates a JSON API top-level document\n\n  The format of a document is described here:\n  http://jsonapi.org/format/#document-top-level\n\n  @method validateDocumentStructure\n  @param {Object} doc JSON API document\n  @return {array} An array of errors found in the document structure\n*/\nfunction validateDocumentStructure(doc) {\n  var errors = [];\n  if (!doc || typeof doc !== 'object') {\n    errors.push('Top level of a JSON API document must be an object');\n  } else {\n    if (!('data' in doc) && !('errors' in doc) && !('meta' in doc)) {\n      errors.push('One or more of the following keys must be present: \"data\", \"errors\", \"meta\".');\n    } else {\n      if ('data' in doc && 'errors' in doc) {\n        errors.push('Top level keys \"errors\" and \"data\" cannot both be present in a JSON API document');\n      }\n    }\n    if ('data' in doc) {\n      if (!(doc.data === null || Array.isArray(doc.data) || typeof doc.data === 'object')) {\n        errors.push('data must be null, an object, or an array');\n      }\n    }\n    if ('meta' in doc) {\n      if (typeof doc.meta !== 'object') {\n        errors.push('meta must be an object');\n      }\n    }\n    if ('errors' in doc) {\n      if (!Array.isArray(doc.errors)) {\n        errors.push('errors must be an array');\n      }\n    }\n    if ('links' in doc) {\n      if (typeof doc.links !== 'object') {\n        errors.push('links must be an object');\n      }\n    }\n    if ('jsonapi' in doc) {\n      if (typeof doc.jsonapi !== 'object') {\n        errors.push('jsonapi must be an object');\n      }\n    }\n    if ('included' in doc) {\n      if (typeof doc.included !== 'object') {\n        errors.push('included must be an array');\n      }\n    }\n  }\n\n  return errors;\n}\n\n/*\n  This is a helper method that always returns a JSON-API Document.\n\n  @method normalizeResponseHelper\n  @param {DS.Serializer} serializer\n  @param {DS.Store} store\n  @param {subclass of DS.Model} modelClass\n  @param {Object} payload\n  @param {String|Number} id\n  @param {String} requestType\n  @return {Object} JSON-API Document\n*/\nfunction normalizeResponseHelper(serializer, store, modelClass, payload, id, requestType) {\n  var normalizedResponse = serializer.normalizeResponse(store, modelClass, payload, id, requestType);\n  var validationErrors = [];\n  {\n    validationErrors = validateDocumentStructure(normalizedResponse);\n  }\n  (true && !(validationErrors.length === 0) && Ember.assert('normalizeResponse must return a valid JSON API document:\\n\\t* ' + validationErrors.join('\\n\\t* '), validationErrors.length === 0));\n\n\n  return normalizedResponse;\n}\n\nfunction serializerForAdapter(store, adapter, modelName) {\n  var serializer = adapter.serializer;\n\n  if (serializer === undefined) {\n    serializer = store.serializerFor(modelName);\n  }\n\n  if (serializer === null || serializer === undefined) {\n    serializer = {\n      extract: function extract(store, type, payload) {\n        return payload;\n      }\n    };\n  }\n\n  return serializer;\n}\n\nvar _createClass$7 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck$11(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// TODO this is now VERY similar to the identity/internal-model map\n//  so we should probably generalize\nvar TypeCache = function () {\n  function TypeCache() {\n    _classCallCheck$11(this, TypeCache);\n\n    this.types = Object.create(null);\n  }\n\n  TypeCache.prototype.get = function get(modelName, id) {\n    var types = this.types;\n\n\n    if (types[modelName] !== undefined) {\n      return types[modelName][id];\n    }\n  };\n\n  TypeCache.prototype.set = function set(modelName, id, payload) {\n    var types = this.types;\n\n    var typeMap = types[modelName];\n\n    if (typeMap === undefined) {\n      typeMap = types[modelName] = Object.create(null);\n    }\n\n    typeMap[id] = payload;\n  };\n\n  TypeCache.prototype.delete = function _delete(modelName, id) {\n    var types = this.types;\n\n\n    if (types[modelName] !== undefined) {\n      delete types[modelName][id];\n    }\n  };\n\n  return TypeCache;\n}();\n\n/**\n Manages the payloads for both sides of a single relationship, across all model\n instances.\n\n For example, with\n\n const User = DS.Model.extend({\n      hobbies: DS.hasMany('hobby')\n    });\n\n const Hobby = DS.Model.extend({\n      user: DS.belongsTo('user')\n    });\n\n let relationshipPayloads = new RelationshipPayloads('user', 'hobbies', 'hobby', 'user');\n\n let userPayload = {\n      data: {\n        id: 1,\n        type: 'user',\n        relationships: {\n          hobbies: {\n            data: [{\n              id: 2,\n              type: 'hobby',\n            }]\n          }\n        }\n      }\n    };\n\n // here we expect the payload of the individual relationship\n relationshipPayloads.push('user', 1, 'hobbies', userPayload.data.relationships.hobbies);\n\n relationshipPayloads.get('user', 1, 'hobbies');\n relationshipPayloads.get('hobby', 2, 'user');\n\n @class RelationshipPayloads\n @private\n */\n\nvar RelationshipPayloads = function () {\n  function RelationshipPayloads(relInfo) {\n    _classCallCheck$11(this, RelationshipPayloads);\n\n    this._relInfo = relInfo;\n\n    // a map of id -> payloads for the left hand side of the relationship.\n    this.lhs_payloads = new TypeCache();\n    this.rhs_payloads = relInfo.isReflexive ? this.lhs_payloads : new TypeCache();\n\n    // When we push relationship payloads, just stash them in a queue until\n    // somebody actually asks for one of them.\n    //\n    // This is a queue of the relationship payloads that have been pushed for\n    // either side of this relationship\n    this._pendingPayloads = [];\n  }\n\n  /**\n   Get the payload for the relationship of an individual record.\n    This might return the raw payload as pushed into the store, or one computed\n   from the payload of the inverse relationship.\n    @method\n   */\n\n\n  RelationshipPayloads.prototype.get = function get(modelName, id, relationshipName) {\n    this._flushPending();\n\n    if (this._isLHS(modelName, relationshipName)) {\n      return this.lhs_payloads.get(modelName, id);\n    } else {\n      (true && !(this._isRHS(modelName, relationshipName)) && Ember.assert(modelName + ':' + relationshipName + ' is not either side of this relationship, ' + this._relInfo.lhs_key + '<->' + this._relInfo.rhs_key, this._isRHS(modelName, relationshipName)));\n\n      return this.rhs_payloads.get(modelName, id);\n    }\n  };\n\n  /**\n   Push a relationship payload for an individual record.\n    This will make the payload available later for both this relationship and its inverse.\n    @method\n   */\n\n\n  RelationshipPayloads.prototype.push = function push(modelName, id, relationshipName, relationshipData) {\n    this._pendingPayloads.push([modelName, id, relationshipName, relationshipData]);\n  };\n\n  /**\n   Unload the relationship payload for an individual record.\n    This does not unload the inverse relationship payload.\n    @method\n   */\n\n\n  RelationshipPayloads.prototype.unload = function unload(modelName, id, relationshipName) {\n    this._flushPending();\n\n    if (this._isLHS(modelName, relationshipName)) {\n      delete this.lhs_payloads.delete(modelName, id);\n    } else {\n      (true && !(this._isRHS(modelName, relationshipName)) && Ember.assert(modelName + ':' + relationshipName + ' is not either side of this relationship, ' + this._relInfo.lhs_baseModelName + ':' + this._relInfo.lhs_relationshipName + '<->' + this._relInfo.rhs_baseModelName + ':' + this._relInfo.rhs_relationshipName, this._isRHS(modelName, relationshipName)));\n\n      delete this.rhs_payloads.delete(modelName, id);\n    }\n  };\n\n  /**\n   @return {boolean} true iff `modelName` and `relationshipName` refer to the\n   left hand side of this relationship, as opposed to the right hand side.\n    @method\n   */\n\n\n  RelationshipPayloads.prototype._isLHS = function _isLHS(modelName, relationshipName) {\n    var relInfo = this._relInfo;\n    var isSelfReferential = relInfo.isSelfReferential;\n    var isRelationship = relationshipName === relInfo.lhs_relationshipName;\n\n    if (isRelationship === true) {\n      return isSelfReferential === true || // itself\n      modelName === relInfo.lhs_baseModelName || // base or non-polymorphic\n      relInfo.lhs_modelNames.indexOf(modelName) !== -1; // polymorphic\n    }\n\n    return false;\n  };\n\n  /**\n   @return {boolean} true iff `modelName` and `relationshipName` refer to the\n   right hand side of this relationship, as opposed to the left hand side.\n    @method\n   */\n\n\n  RelationshipPayloads.prototype._isRHS = function _isRHS(modelName, relationshipName) {\n    var relInfo = this._relInfo;\n    var isSelfReferential = relInfo.isSelfReferential;\n    var isRelationship = relationshipName === relInfo.rhs_relationshipName;\n\n    if (isRelationship === true) {\n      return isSelfReferential === true || // itself\n      modelName === relInfo.rhs_baseModelName || // base or non-polymorphic\n      relInfo.rhs_modelNames.indexOf(modelName) !== -1; // polymorphic\n    }\n\n    return false;\n  };\n\n  RelationshipPayloads.prototype._flushPending = function _flushPending() {\n    if (this._pendingPayloads.length === 0) {\n      return;\n    }\n\n    var payloadsToBeProcessed = this._pendingPayloads.splice(0, this._pendingPayloads.length);\n    for (var i = 0; i < payloadsToBeProcessed.length; ++i) {\n      var modelName = payloadsToBeProcessed[i][0];\n      var id = payloadsToBeProcessed[i][1];\n      var relationshipName = payloadsToBeProcessed[i][2];\n      var relationshipData = payloadsToBeProcessed[i][3];\n\n      // TODO: maybe delay this allocation slightly?\n      var inverseRelationshipData = {\n        data: {\n          id: id,\n          type: modelName\n        }\n      };\n\n      // start flushing this individual payload.  The logic is the same whether\n      // it's for the left hand side of the relationship or the right hand side,\n      // except the role of primary and inverse idToPayloads is reversed\n      //\n      var previousPayload = void 0;\n      var payloadMap = void 0;\n      var inversePayloadMap = void 0;\n      var inverseIsMany = void 0;\n\n      if (this._isLHS(modelName, relationshipName)) {\n        previousPayload = this.lhs_payloads.get(modelName, id);\n        payloadMap = this.lhs_payloads;\n        inversePayloadMap = this.rhs_payloads;\n        inverseIsMany = this._rhsRelationshipIsMany;\n      } else {\n        (true && !(this._isRHS(modelName, relationshipName)) && Ember.assert(modelName + ':' + relationshipName + ' is not either side of this relationship, ' + this._relInfo.lhs_key + '<->' + this._relInfo.rhs_key, this._isRHS(modelName, relationshipName)));\n\n        previousPayload = this.rhs_payloads.get(modelName, id);\n        payloadMap = this.rhs_payloads;\n        inversePayloadMap = this.lhs_payloads;\n        inverseIsMany = this._lhsRelationshipIsMany;\n      }\n\n      // actually flush this individual payload\n      //\n      // We remove the previous inverse before populating our current one\n      // because we may have multiple payloads for the same relationship, in\n      // which case the last one wins.\n      //\n      // eg if user hasMany helicopters, and helicopter belongsTo user and we see\n      //\n      //  [{\n      //    data: {\n      //      id: 1,\n      //      type: 'helicopter',\n      //      relationships: {\n      //        user: {\n      //          id: 2,\n      //          type: 'user'\n      //        }\n      //      }\n      //    }\n      //  }, {\n      //    data: {\n      //      id: 1,\n      //      type: 'helicopter',\n      //      relationships: {\n      //        user: {\n      //          id: 4,\n      //          type: 'user'\n      //        }\n      //      }\n      //    }\n      //  }]\n      //\n      // Then we will initially have set user:2 as having helicopter:1, which we\n      // need to remove before adding helicopter:1 to user:4\n      //\n      // only remove relationship information before adding if there is relationshipData.data\n      // * null is considered new information \"empty\", and it should win\n      // * undefined is NOT considered new information, we should keep original state\n      // * anything else is considered new information, and it should win\n      if (relationshipData.data !== undefined) {\n        this._removeInverse(id, previousPayload, inversePayloadMap);\n      }\n      payloadMap.set(modelName, id, relationshipData);\n      this._populateInverse(relationshipData, inverseRelationshipData, inversePayloadMap, inverseIsMany);\n    }\n  };\n\n  /**\n   Populate the inverse relationship for `relationshipData`.\n    If `relationshipData` is an array (eg because the relationship is hasMany)\n   this means populate each inverse, otherwise populate only the single\n   inverse.\n    @private\n   @method\n   */\n\n\n  RelationshipPayloads.prototype._populateInverse = function _populateInverse(relationshipData, inversePayload, inversePayloadMap, inverseIsMany) {\n    if (!relationshipData.data) {\n      // This id doesn't have an inverse, eg a belongsTo with a payload\n      // { data: null }, so there's nothing to populate\n      return;\n    }\n\n    if (Array.isArray(relationshipData.data)) {\n      for (var i = 0; i < relationshipData.data.length; ++i) {\n        var resourceIdentifier = relationshipData.data[i];\n        this._addToInverse(inversePayload, resourceIdentifier, inversePayloadMap, inverseIsMany);\n      }\n    } else {\n      var _resourceIdentifier = relationshipData.data;\n      this._addToInverse(inversePayload, _resourceIdentifier, inversePayloadMap, inverseIsMany);\n    }\n  };\n\n  /**\n   Actually add `inversePayload` to `inverseIdToPayloads`.  This is part of\n   `_populateInverse` after we've normalized the case of `relationshipData`\n   being either an array or a pojo.\n    We still have to handle the case that the *inverse* relationship payload may\n   be an array or pojo.\n    @private\n   @method\n   */\n\n\n  RelationshipPayloads.prototype._addToInverse = function _addToInverse(inversePayload, resourceIdentifier, inversePayloadMap, inverseIsMany) {\n    var relInfo = this._relInfo;\n\n    if (relInfo.isReflexive && inversePayload.data.id === resourceIdentifier.id) {\n      // eg <user:1>.friends = [{ id: 1, type: 'user' }]\n      return;\n    }\n\n    var existingPayload = inversePayloadMap.get(resourceIdentifier.type, resourceIdentifier.id);\n    var existingData = existingPayload && existingPayload.data;\n\n    if (existingData) {\n      // There already is an inverse, either add or overwrite depehnding on\n      // whether the inverse is a many relationship or not\n      //\n      if (Array.isArray(existingData)) {\n        existingData.push(inversePayload.data);\n      } else {\n        inversePayloadMap.set(resourceIdentifier.type, resourceIdentifier.id, inversePayload);\n      }\n    } else {\n      // first time we're populating the inverse side\n      //\n      if (inverseIsMany) {\n        inversePayloadMap.set(resourceIdentifier.type, resourceIdentifier.id, {\n          data: [inversePayload.data]\n        });\n      } else {\n        inversePayloadMap.set(resourceIdentifier.type, resourceIdentifier.id, inversePayload);\n      }\n    }\n  };\n\n  /**\n   Remove the relationship in `previousPayload` from its inverse(s), because\n   this relationship payload has just been updated (eg because the same\n   relationship had multiple payloads pushed before the relationship was\n   initialized).\n    @method\n   */\n  RelationshipPayloads.prototype._removeInverse = function _removeInverse(id, previousPayload, inversePayloadMap) {\n    var data = previousPayload && previousPayload.data;\n    if (!data) {\n      // either this is the first time we've seen a payload for this id, or its\n      // previous payload indicated that it had no inverse, eg a belongsTo\n      // relationship with payload { data: null }\n      //\n      // In either case there's nothing that needs to be removed from the\n      // inverse map of payloads\n      return;\n    }\n\n    if (Array.isArray(data)) {\n      // TODO: diff rather than removeall addall?\n      for (var i = 0; i < data.length; ++i) {\n        var resourceIdentifier = data[i];\n        this._removeFromInverse(id, resourceIdentifier, inversePayloadMap);\n      }\n    } else {\n      this._removeFromInverse(id, data, inversePayloadMap);\n    }\n  };\n\n  /**\n   Remove `id` from its inverse record with id `inverseId`.  If the inverse\n   relationship is a belongsTo, this means just setting it to null, if the\n   inverse relationship is a hasMany, then remove that id from its array of ids.\n    @method\n   */\n\n\n  RelationshipPayloads.prototype._removeFromInverse = function _removeFromInverse(id, resourceIdentifier, inversePayloads) {\n    var inversePayload = inversePayloads.get(resourceIdentifier.type, resourceIdentifier.id);\n    var data = inversePayload && inversePayload.data;\n\n    if (!data) {\n      return;\n    }\n\n    if (Array.isArray(data)) {\n      inversePayload.data = data.filter(function (x) {\n        return x.id !== id;\n      });\n    } else {\n      inversePayloads.set(resourceIdentifier.type, resourceIdentifier.id, {\n        data: null\n      });\n    }\n  };\n\n  _createClass$7(RelationshipPayloads, [{\n    key: '_lhsRelationshipIsMany',\n    get: function get() {\n      var meta = this._relInfo.lhs_relationshipMeta;\n      return meta !== null && meta.kind === 'hasMany';\n    }\n  }, {\n    key: '_rhsRelationshipIsMany',\n    get: function get() {\n      var meta = this._relInfo.rhs_relationshipMeta;\n      return meta !== null && meta.kind === 'hasMany';\n    }\n  }]);\n\n  return RelationshipPayloads;\n}();\n\nfunction _classCallCheck$10(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n// import { DEBUG } from '@glimmer/env';\n\n\n/**\n  Manages relationship payloads for a given store, for uninitialized\n  relationships.  Acts as a single source of truth (of payloads) for both sides\n  of an uninitialized relationship so they can agree on the most up-to-date\n  payload received without needing too much eager processing when those payloads\n  are pushed into the store.\n\n  This minimizes the work spent on relationships that are never initialized.\n\n  Once relationships are initialized, their state is managed in a relationship\n  state object (eg BelongsToRelationship or ManyRelationship).\n\n\n  @example\n\n    let relationshipPayloadsManager = new RelationshipPayloadsManager(store);\n\n    const User = DS.Model.extend({\n      hobbies: DS.hasMany('hobby')\n    });\n\n    const Hobby = DS.Model.extend({\n      user: DS.belongsTo('user')\n    });\n\n    let userPayload = {\n      data: {\n        id: 1,\n        type: 'user',\n        relationships: {\n          hobbies: {\n            data: [{\n              id: 2,\n              type: 'hobby'\n            }]\n          }\n        }\n      },\n    };\n    relationshipPayloadsManager.push('user', 1, userPayload.data.relationships);\n\n    relationshipPayloadsManager.get('hobby', 2, 'user') === {\n      {\n        data: {\n          id: 1,\n          type: 'user'\n        }\n      }\n    }\n\n  @private\n  @class RelationshipPayloadsManager\n*/\n\nvar RelationshipPayloadsManager = function () {\n  function RelationshipPayloadsManager(store) {\n    _classCallCheck$10(this, RelationshipPayloadsManager);\n\n    this._store = store;\n    // cache of `RelationshipPayload`s\n    this._cache = Object.create(null);\n    this._inverseLookupCache = new TypeCache();\n  }\n\n  /**\n    Find the payload for the given relationship of the given model.\n     Returns the payload for the given relationship, whether raw or computed from\n    the payload of the inverse relationship.\n     @example\n       relationshipPayloadsManager.get('hobby', 2, 'user') === {\n        {\n          data: {\n            id: 1,\n            type: 'user'\n          }\n        }\n      }\n     @method\n  */\n\n\n  RelationshipPayloadsManager.prototype.get = function get(modelName, id, relationshipName) {\n    var relationshipPayloads = this._getRelationshipPayloads(modelName, relationshipName, false);\n    return relationshipPayloads && relationshipPayloads.get(modelName, id, relationshipName);\n  };\n\n  /**\n    Push a model's relationships payload into this cache.\n     @example\n       let userPayload = {\n        data: {\n          id: 1,\n          type: 'user',\n          relationships: {\n            hobbies: {\n              data: [{\n                id: 2,\n                type: 'hobby'\n              }]\n            }\n          }\n        },\n      };\n      relationshipPayloadsManager.push('user', 1, userPayload.data.relationships);\n     @method\n  */\n\n\n  RelationshipPayloadsManager.prototype.push = function push(modelName, id, relationshipsData) {\n    var _this = this;\n\n    if (!relationshipsData) {\n      return;\n    }\n\n    Object.keys(relationshipsData).forEach(function (key) {\n      var relationshipPayloads = _this._getRelationshipPayloads(modelName, key, true);\n      if (relationshipPayloads) {\n        relationshipPayloads.push(modelName, id, key, relationshipsData[key]);\n      }\n    });\n  };\n\n  /**\n    Unload a model's relationships payload.\n     @method\n  */\n\n\n  RelationshipPayloadsManager.prototype.unload = function unload(modelName, id) {\n    var _this2 = this;\n\n    var modelClass = this._store._modelFor(modelName);\n    var relationshipsByName = Ember.get(modelClass, 'relationshipsByName');\n    relationshipsByName.forEach(function (_, relationshipName) {\n      var relationshipPayloads = _this2._getRelationshipPayloads(modelName, relationshipName, false);\n      if (relationshipPayloads) {\n        relationshipPayloads.unload(modelName, id, relationshipName);\n      }\n    });\n  };\n\n  /**\n    Find the RelationshipPayloads object for the given relationship.  The same\n    RelationshipPayloads object is returned for either side of a relationship.\n     @example\n       const User = DS.Model.extend({\n        hobbies: DS.hasMany('hobby')\n      });\n       const Hobby = DS.Model.extend({\n        user: DS.belongsTo('user')\n      });\n       relationshipPayloads.get('user', 'hobbies') === relationshipPayloads.get('hobby', 'user');\n     The signature has a somewhat large arity to avoid extra work, such as\n      a)  string manipulation & allocation with `modelName` and\n         `relationshipName`\n      b)  repeatedly getting `relationshipsByName` via `Ember.get`\n      @private\n    @method\n  */\n\n\n  RelationshipPayloadsManager.prototype._getRelationshipPayloads = function _getRelationshipPayloads(modelName, relationshipName, init) {\n    var relInfo = this.getRelationshipInfo(modelName, relationshipName);\n\n    if (relInfo === null) {\n      return;\n    }\n\n    var cache = this._cache[relInfo.lhs_key];\n\n    if (!cache && init) {\n      return this._initializeRelationshipPayloads(relInfo);\n    }\n\n    return cache;\n  };\n\n  RelationshipPayloadsManager.prototype.getRelationshipInfo = function getRelationshipInfo(modelName, relationshipName) {\n    var inverseCache = this._inverseLookupCache;\n    var store = this._store;\n    var cached = inverseCache.get(modelName, relationshipName);\n\n    // CASE: We have a cached resolution (null if no relationship exists)\n    if (cached !== undefined) {\n      return cached;\n    }\n\n    var modelClass = store._modelFor(modelName);\n    var relationshipsByName = Ember.get(modelClass, 'relationshipsByName');\n\n    // CASE: We don't have a relationship at all\n    if (!relationshipsByName.has(relationshipName)) {\n      inverseCache.set(modelName, relationshipName, null);\n      return null;\n    }\n\n    var inverseMeta = modelClass.inverseFor(relationshipName, store);\n    var relationshipMeta = relationshipsByName.get(relationshipName);\n    var selfIsPolymorphic = relationshipMeta.options !== undefined && relationshipMeta.options.polymorphic === true;\n    var inverseBaseModelName = relationshipMeta.type;\n\n    // CASE: We have no inverse\n    if (!inverseMeta) {\n      var _info = {\n        lhs_key: modelName + ':' + relationshipName,\n        lhs_modelNames: [modelName],\n        lhs_baseModelName: modelName,\n        lhs_relationshipName: relationshipName,\n        lhs_relationshipMeta: relationshipMeta,\n        lhs_isPolymorphic: selfIsPolymorphic,\n        rhs_key: '',\n        rhs_modelNames: [],\n        rhs_baseModelName: inverseBaseModelName,\n        rhs_relationshipName: '',\n        rhs_relationshipMeta: null,\n        rhs_isPolymorphic: false,\n        hasInverse: false,\n        isSelfReferential: false, // modelName === inverseBaseModelName,\n        isReflexive: false\n      };\n\n      inverseCache.set(modelName, relationshipName, _info);\n\n      return _info;\n    }\n\n    // CASE: We do have an inverse\n\n    var inverseRelationshipName = inverseMeta.name;\n    var inverseRelationshipMeta = Ember.get(inverseMeta.type, 'relationshipsByName').get(inverseRelationshipName);\n    var baseModelName = inverseRelationshipMeta.type;\n    var isSelfReferential = baseModelName === inverseBaseModelName;\n\n    // TODO we want to assert this but this breaks all of our shoddily written tests\n    /*\n    if (DEBUG) {\n      let inverseDoubleCheck = inverseMeta.type.inverseFor(inverseRelationshipName, store);\n       assert(`The ${inverseBaseModelName}:${inverseRelationshipName} relationship declares 'inverse: null', but it was resolved as the inverse for ${baseModelName}:${relationshipName}.`, inverseDoubleCheck);\n    }\n    */\n\n    // CASE: We may have already discovered the inverse for the baseModelName\n    // CASE: We have already discovered the inverse\n    cached = inverseCache.get(baseModelName, relationshipName) || inverseCache.get(inverseBaseModelName, inverseRelationshipName);\n    if (cached) {\n      // TODO this assert can be removed if the above assert is enabled\n      (true && !(cached.hasInverse !== false) && Ember.assert('The ' + inverseBaseModelName + ':' + inverseRelationshipName + ' relationship declares \\'inverse: null\\', but it was resolved as the inverse for ' + baseModelName + ':' + relationshipName + '.', cached.hasInverse !== false));\n\n\n      var isLHS = cached.lhs_baseModelName === baseModelName;\n      var modelNames = isLHS ? cached.lhs_modelNames : cached.rhs_modelNames;\n      // make this lookup easier in the future by caching the key\n      modelNames.push(modelName);\n      inverseCache.set(modelName, relationshipName, cached);\n\n      return cached;\n    }\n\n    var info = {\n      lhs_key: baseModelName + ':' + relationshipName,\n      lhs_modelNames: [modelName],\n      lhs_baseModelName: baseModelName,\n      lhs_relationshipName: relationshipName,\n      lhs_relationshipMeta: relationshipMeta,\n      lhs_isPolymorphic: selfIsPolymorphic,\n      rhs_key: inverseBaseModelName + ':' + inverseRelationshipName,\n      rhs_modelNames: [],\n      rhs_baseModelName: inverseBaseModelName,\n      rhs_relationshipName: inverseRelationshipName,\n      rhs_relationshipMeta: inverseRelationshipMeta,\n      rhs_isPolymorphic: inverseRelationshipMeta.options !== undefined && inverseRelationshipMeta.options.polymorphic === true,\n      hasInverse: true,\n      isSelfReferential: isSelfReferential,\n      isReflexive: isSelfReferential && relationshipName === inverseRelationshipName\n    };\n\n    // Create entries for the baseModelName as well as modelName to speed up\n    //  inverse lookups\n    inverseCache.set(baseModelName, relationshipName, info);\n    inverseCache.set(modelName, relationshipName, info);\n\n    // Greedily populate the inverse\n    inverseCache.set(inverseBaseModelName, inverseRelationshipName, info);\n\n    return info;\n  };\n\n  /**\n    Create the `RelationshipsPayload` for the relationship `modelName`, `relationshipName`, and its inverse.\n     @private\n    @method\n  */\n\n\n  RelationshipPayloadsManager.prototype._initializeRelationshipPayloads = function _initializeRelationshipPayloads(relInfo) {\n    var lhsKey = relInfo.lhs_key;\n    var rhsKey = relInfo.rhs_key;\n    var existingPayloads = this._cache[lhsKey];\n\n    if (relInfo.hasInverse === true && relInfo.rhs_isPolymorphic === true) {\n      existingPayloads = this._cache[rhsKey];\n\n      if (existingPayloads !== undefined) {\n        this._cache[lhsKey] = existingPayloads;\n        return existingPayloads;\n      }\n    }\n\n    // populate the cache for both sides of the relationship, as they both use\n    // the same `RelationshipPayloads`.\n    //\n    // This works out better than creating a single common key, because to\n    // compute that key we would need to do work to look up the inverse\n    //\n    var cache = this._cache[lhsKey] = new RelationshipPayloads(relInfo);\n\n    if (relInfo.hasInverse === true) {\n      this._cache[rhsKey] = cache;\n    }\n\n    return cache;\n  };\n\n  return RelationshipPayloadsManager;\n}();\n\nfunction payloadIsNotBlank(adapterPayload) {\n  if (Array.isArray(adapterPayload)) {\n    return true;\n  } else {\n    return Object.keys(adapterPayload || {}).length;\n  }\n}\n\nfunction _find(adapter, store, modelClass, id, internalModel, options) {\n  var snapshot = internalModel.createSnapshot(options);\n  var modelName = internalModel.modelName;\n\n  var promise = adapter.findRecord(store, modelClass, id, snapshot);\n  var label = 'DS: Handle Adapter#findRecord of \\'' + modelName + '\\' with id: \\'' + id + '\\'';\n\n  promise = Ember.RSVP.Promise.resolve(promise, label);\n  promise = _guard(promise, _bind(_objectIsAlive, store));\n\n  return promise.then(function (adapterPayload) {\n    (true && !(payloadIsNotBlank(adapterPayload)) && Ember.assert('You made a \\'findRecord\\' request for a \\'' + modelName + '\\' with id \\'' + id + '\\', but the adapter\\'s response did not have any data', payloadIsNotBlank(adapterPayload)));\n\n    var serializer = serializerForAdapter(store, adapter, modelName);\n    var payload = normalizeResponseHelper(serializer, store, modelClass, adapterPayload, id, 'findRecord');\n    (true && !(!Array.isArray(payload.data)) && Ember.assert('Ember Data expected the primary data returned from a \\'findRecord\\' response to be an object but instead it found an array.', !Array.isArray(payload.data)));\n    (true && Ember.warn('You requested a record of type \\'' + modelName + '\\' with id \\'' + id + '\\' but the adapter returned a payload with primary data having an id of \\'' + payload.data.id + '\\'. Use \\'store.findRecord()\\' when the requested id is the same as the one returned by the adapter. In other cases use \\'store.queryRecord()\\' instead https://emberjs.com/api/data/classes/DS.Store.html#method_queryRecord', payload.data.id === id, {\n      id: 'ds.store.findRecord.id-mismatch'\n    }));\n\n\n    return store._push(payload);\n  }, function (error) {\n    internalModel.notFound();\n    if (internalModel.isEmpty()) {\n      internalModel.unloadRecord();\n    }\n\n    throw error;\n  }, 'DS: Extract payload of \\'' + modelName + '\\'');\n}\n\nfunction _findMany(adapter, store, modelName, ids, internalModels) {\n  var snapshots = Ember.A(internalModels).invoke('createSnapshot');\n  var modelClass = store.modelFor(modelName); // `adapter.findMany` gets the modelClass still\n  var promise = adapter.findMany(store, modelClass, ids, snapshots);\n  var label = 'DS: Handle Adapter#findMany of \\'' + modelName + '\\'';\n\n  if (promise === undefined) {\n    throw new Error('adapter.findMany returned undefined, this was very likely a mistake');\n  }\n\n  promise = Ember.RSVP.Promise.resolve(promise, label);\n  promise = _guard(promise, _bind(_objectIsAlive, store));\n\n  return promise.then(function (adapterPayload) {\n    (true && !(payloadIsNotBlank(adapterPayload)) && Ember.assert('You made a \\'findMany\\' request for \\'' + modelName + '\\' records with ids \\'[' + ids + ']\\', but the adapter\\'s response did not have any data', payloadIsNotBlank(adapterPayload)));\n\n    var serializer = serializerForAdapter(store, adapter, modelName);\n    var payload = normalizeResponseHelper(serializer, store, modelClass, adapterPayload, null, 'findMany');\n    return store._push(payload);\n  }, null, 'DS: Extract payload of ' + modelName);\n}\n\nfunction _findHasMany(adapter, store, internalModel, link, relationship) {\n  var snapshot = internalModel.createSnapshot();\n  var modelClass = store.modelFor(relationship.type);\n  var promise = adapter.findHasMany(store, snapshot, link, relationship);\n  var label = 'DS: Handle Adapter#findHasMany of \\'' + internalModel.modelName + '\\' : \\'' + relationship.type + '\\'';\n\n  promise = Ember.RSVP.Promise.resolve(promise, label);\n  promise = _guard(promise, _bind(_objectIsAlive, store));\n  promise = _guard(promise, _bind(_objectIsAlive, internalModel));\n\n  return promise.then(function (adapterPayload) {\n    (true && !(payloadIsNotBlank(adapterPayload)) && Ember.assert('You made a \\'findHasMany\\' request for a ' + internalModel.modelName + '\\'s \\'' + relationship.key + '\\' relationship, using link \\'' + link + '\\' , but the adapter\\'s response did not have any data', payloadIsNotBlank(adapterPayload)));\n\n    var serializer = serializerForAdapter(store, adapter, relationship.type);\n    var payload = normalizeResponseHelper(serializer, store, modelClass, adapterPayload, null, 'findHasMany');\n    var internalModelArray = store._push(payload);\n\n    internalModelArray.meta = payload.meta;\n    return internalModelArray;\n  }, null, 'DS: Extract payload of \\'' + internalModel.modelName + '\\' : hasMany \\'' + relationship.type + '\\'');\n}\n\nfunction _findBelongsTo(adapter, store, internalModel, link, relationship) {\n  var snapshot = internalModel.createSnapshot();\n  var modelClass = store.modelFor(relationship.type);\n  var promise = adapter.findBelongsTo(store, snapshot, link, relationship);\n  var label = 'DS: Handle Adapter#findBelongsTo of ' + internalModel.modelName + ' : ' + relationship.type;\n\n  promise = Ember.RSVP.Promise.resolve(promise, label);\n  promise = _guard(promise, _bind(_objectIsAlive, store));\n  promise = _guard(promise, _bind(_objectIsAlive, internalModel));\n\n  return promise.then(function (adapterPayload) {\n    var serializer = serializerForAdapter(store, adapter, relationship.type);\n    var payload = normalizeResponseHelper(serializer, store, modelClass, adapterPayload, null, 'findBelongsTo');\n\n    if (!payload.data) {\n      return null;\n    }\n\n    return store._push(payload);\n  }, null, 'DS: Extract payload of ' + internalModel.modelName + ' : ' + relationship.type);\n}\n\nfunction _findAll(adapter, store, modelName, sinceToken, options) {\n  var modelClass = store.modelFor(modelName); // adapter.findAll depends on the class\n  var recordArray = store.peekAll(modelName);\n  var snapshotArray = recordArray._createSnapshot(options);\n  var promise = adapter.findAll(store, modelClass, sinceToken, snapshotArray);\n  var label = \"DS: Handle Adapter#findAll of \" + modelClass;\n\n  promise = Ember.RSVP.Promise.resolve(promise, label);\n  promise = _guard(promise, _bind(_objectIsAlive, store));\n\n  return promise.then(function (adapterPayload) {\n    (true && !(payloadIsNotBlank(adapterPayload)) && Ember.assert('You made a \\'findAll\\' request for \\'' + modelName + '\\' records, but the adapter\\'s response did not have any data', payloadIsNotBlank(adapterPayload)));\n\n    var serializer = serializerForAdapter(store, adapter, modelName);\n    var payload = normalizeResponseHelper(serializer, store, modelClass, adapterPayload, null, 'findAll');\n\n    store._push(payload);\n    store._didUpdateAll(modelName);\n\n    return recordArray;\n  }, null, 'DS: Extract payload of findAll ${modelName}');\n}\n\nfunction _query(adapter, store, modelName, query, recordArray) {\n  var modelClass = store.modelFor(modelName); // adapter.query needs the class\n\n  var promise = void 0;\n  if (adapter.query.length > 3) {\n    recordArray = recordArray || store.recordArrayManager.createAdapterPopulatedRecordArray(modelName, query);\n    promise = adapter.query(store, modelClass, query, recordArray);\n  } else {\n    promise = adapter.query(store, modelClass, query);\n  }\n\n  var label = 'DS: Handle Adapter#query of ' + modelClass;\n\n  promise = Ember.RSVP.Promise.resolve(promise, label);\n  promise = _guard(promise, _bind(_objectIsAlive, store));\n\n  return promise.then(function (adapterPayload) {\n    var serializer = serializerForAdapter(store, adapter, modelName);\n\n    var payload = normalizeResponseHelper(serializer, store, modelClass, adapterPayload, null, 'query');\n\n    var internalModels = store._push(payload);\n\n    (true && !(Array.isArray(internalModels)) && Ember.assert('The response to store.query is expected to be an array but it was a single record. Please wrap your response in an array or use `store.queryRecord` to query for a single record.', Array.isArray(internalModels)));\n\n    if (recordArray) {\n      recordArray._setInternalModels(internalModels, payload);\n    } else {\n      recordArray = store.recordArrayManager.createAdapterPopulatedRecordArray(modelName, query, internalModels, payload);\n    }\n\n    return recordArray;\n  }, null, 'DS: Extract payload of query ' + modelName);\n}\n\nfunction _queryRecord(adapter, store, modelName, query) {\n  var modelClass = store.modelFor(modelName); // adapter.queryRecord needs the class\n  var promise = adapter.queryRecord(store, modelClass, query);\n  var label = 'DS: Handle Adapter#queryRecord of ' + modelName;\n\n  promise = Ember.RSVP.Promise.resolve(promise, label);\n  promise = _guard(promise, _bind(_objectIsAlive, store));\n\n  return promise.then(function (adapterPayload) {\n    var serializer = serializerForAdapter(store, adapter, modelName);\n    var payload = normalizeResponseHelper(serializer, store, modelClass, adapterPayload, null, 'queryRecord');\n\n    (true && !(!Array.isArray(payload.data)) && Ember.assert('Expected the primary data returned by the serializer for a \\'queryRecord\\' response to be a single object or null but instead it was an array.', !Array.isArray(payload.data), {\n      id: 'ds.store.queryRecord-array-response'\n    }));\n\n\n    return store._push(payload);\n  }, null, 'DS: Extract payload of queryRecord ' + modelName);\n}\n\n// Used by the store to normalize IDs entering the store.  Despite the fact\n// that developers may provide IDs as numbers (e.g., `store.findRecord('person', 1)`),\n// it is important that internally we use strings, since IDs may be serialized\n// and lose type information.  For example, Ember's router may put a record's\n// ID into the URL, and if we later try to deserialize that URL and find the\n// corresponding record, we will not know if it is a string or a number.\nfunction coerceId(id) {\n  if (id === null || id === undefined || id === '') {\n    return null;\n  }\n  if (typeof id === 'string') {\n    return id;\n  }\n  return '' + id;\n}\n\nvar _createClass$8 = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck$13(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n  @module ember-data\n*/\n\n/**\n  @class SnapshotRecordArray\n  @namespace DS\n  @private\n  @constructor\n  @param {Array} snapshots An array of snapshots\n  @param {Object} meta\n*/\nvar SnapshotRecordArray = function () {\n  function SnapshotRecordArray(recordArray, meta) {\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n    _classCallCheck$13(this, SnapshotRecordArray);\n\n    /**\n      An array of snapshots\n      @private\n      @property _snapshots\n      @type {Array}\n    */\n    this._snapshots = null;\n\n    /**\n      An array of records\n      @private\n      @property _recordArray\n      @type {Array}\n    */\n    this._recordArray = recordArray;\n\n    /**\n      Number of records in the array\n       Example\n       ```app/adapters/post.js\n      import DS from 'ember-data'\n       export default DS.JSONAPIAdapter.extend({\n        shouldReloadAll(store, snapshotRecordArray) {\n          return !snapshotRecordArray.length;\n        },\n      });\n      ```\n       @property length\n      @type {Number}\n    */\n    this.length = recordArray.get('length');\n\n    this._type = null;\n\n    /**\n      Meta objects for the record array.\n       Example\n       ```app/adapters/post.js\n      import DS from 'ember-data'\n       export default DS.JSONAPIAdapter.extend({\n        shouldReloadAll(store, snapshotRecordArray) {\n          var lastRequestTime = snapshotRecordArray.meta.lastRequestTime;\n          var twentyMinutes = 20 * 60 * 1000;\n          return Date.now() > lastRequestTime + twentyMinutes;\n        },\n      });\n      ```\n       @property meta\n      @type {Object}\n    */\n    this.meta = meta;\n\n    /**\n      A hash of adapter options passed into the store method for this request.\n       Example\n       ```app/adapters/post.js\n      import MyCustomAdapter from './custom-adapter';\n       export default MyCustomAdapter.extend({\n        findAll(store, type, sinceToken, snapshotRecordArray) {\n          if (snapshotRecordArray.adapterOptions.subscribe) {\n            // ...\n          }\n          // ...\n        }\n      });\n      ```\n       @property adapterOptions\n      @type {Object}\n    */\n    this.adapterOptions = options.adapterOptions;\n\n    /**\n      The relationships to include for this request.\n       Example\n       ```app/adapters/application.js\n      import DS from 'ember-data';\n       export default DS.Adapter.extend({\n        findAll(store, type, snapshotRecordArray) {\n          var url = `/${type.modelName}?include=${encodeURIComponent(snapshotRecordArray.include)}`;\n           return fetch(url).then((response) => response.json())\n        }\n      });\n       @property include\n      @type {String|Array}\n    */\n    this.include = options.include;\n  }\n\n  /**\n    The type of the underlying records for the snapshots in the array, as a DS.Model\n    @property type\n    @type {DS.Model}\n  */\n\n\n  /**\n    Get snapshots of the underlying record array\n     Example\n     ```app/adapters/post.js\n    import DS from 'ember-data'\n     export default DS.JSONAPIAdapter.extend({\n      shouldReloadAll(store, snapshotArray) {\n        var snapshots = snapshotArray.snapshots();\n         return snapshots.any(function(ticketSnapshot) {\n          var timeDiff = moment().diff(ticketSnapshot.attr('lastAccessedAt'), 'minutes');\n          if (timeDiff > 20) {\n            return true;\n          } else {\n            return false;\n          }\n        });\n      }\n    });\n    ```\n     @method snapshots\n    @return {Array} Array of snapshots\n  */\n  SnapshotRecordArray.prototype.snapshots = function snapshots() {\n    if (this._snapshots !== null) {\n      return this._snapshots;\n    }\n\n    this._snapshots = this._recordArray._takeSnapshot();\n\n    return this._snapshots;\n  };\n\n  _createClass$8(SnapshotRecordArray, [{\n    key: 'type',\n    get: function get() {\n      return this._type || (this._type = this._recordArray.get('type'));\n    }\n  }]);\n\n  return SnapshotRecordArray;\n}();\n\n/**\n  @module ember-data\n*/\n\n/**\n  A record array is an array that contains records of a certain modelName. The record\n  array materializes records as needed when they are retrieved for the first\n  time. You should not create record arrays yourself. Instead, an instance of\n  `DS.RecordArray` or its subclasses will be returned by your application's store\n  in response to queries.\n\n  @class RecordArray\n  @namespace DS\n  @extends Ember.ArrayProxy\n  @uses Ember.Evented\n*/\n\nvar RecordArray = Ember.ArrayProxy.extend(Ember.Evented, {\n  init: function init() {\n    this._super.apply(this, arguments);\n\n    /**\n      The array of client ids backing the record array. When a\n      record is requested from the record array, the record\n      for the client id at the same index is materialized, if\n      necessary, by the store.\n       @property content\n      @private\n      @type Ember.Array\n      */\n    this.set('content', this.content || null);\n\n    /**\n    The flag to signal a `RecordArray` is finished loading data.\n     Example\n     ```javascript\n    var people = store.peekAll('person');\n    people.get('isLoaded'); // true\n    ```\n     @property isLoaded\n    @type Boolean\n    */\n    this.isLoaded = this.isLoaded || false;\n    /**\n    The flag to signal a `RecordArray` is currently loading data.\n    Example\n    ```javascript\n    var people = store.peekAll('person');\n    people.get('isUpdating'); // false\n    people.update();\n    people.get('isUpdating'); // true\n    ```\n    @property isUpdating\n    @type Boolean\n    */\n    this.isUpdating = false;\n\n    /**\n    The store that created this record array.\n    @property store\n    @private\n    @type DS.Store\n    */\n    this.store = this.store || null;\n    this._updatingPromise = null;\n  },\n  replace: function replace() {\n    throw new Error('The result of a server query (for all ' + this.modelName + ' types) is immutable. To modify contents, use toArray()');\n  },\n\n\n  /**\n   The modelClass represented by this record array.\n    @property type\n   @type DS.Model\n   */\n  type: Ember.computed('modelName', function () {\n    if (!this.modelName) {\n      return null;\n    }\n    return this.store._modelFor(this.modelName);\n  }).readOnly(),\n\n  /**\n    Retrieves an object from the content by index.\n     @method objectAtContent\n    @private\n    @param {Number} index\n    @return {DS.Model} record\n  */\n  objectAtContent: function objectAtContent(index) {\n    var internalModel = Ember.get(this, 'content').objectAt(index);\n    return internalModel && internalModel.getRecord();\n  },\n\n\n  /**\n    Used to get the latest version of all of the records in this array\n    from the adapter.\n     Example\n     ```javascript\n    var people = store.peekAll('person');\n    people.get('isUpdating'); // false\n     people.update().then(function() {\n      people.get('isUpdating'); // false\n    });\n     people.get('isUpdating'); // true\n    ```\n     @method update\n  */\n  update: function update() {\n    var _this = this;\n\n    if (Ember.get(this, 'isUpdating')) {\n      return this._updatingPromise;\n    }\n\n    this.set('isUpdating', true);\n\n    var updatingPromise = this._update().finally(function () {\n      _this._updatingPromise = null;\n      if (_this.get('isDestroying') || _this.get('isDestroyed')) {\n        return;\n      }\n      _this.set('isUpdating', false);\n    });\n\n    this._updatingPromise = updatingPromise;\n\n    return updatingPromise;\n  },\n\n\n  /*\n    Update this RecordArray and return a promise which resolves once the update\n    is finished.\n   */\n  _update: function _update() {\n    return this.store.findAll(this.modelName, { reload: true });\n  },\n\n\n  /**\n    Adds an internal model to the `RecordArray` without duplicates\n     @method _pushInternalModels\n    @private\n    @param {InternalModel} internalModel\n  */\n  _pushInternalModels: function _pushInternalModels(internalModels) {\n    // pushObjects because the internalModels._recordArrays set was already\n    // consulted for inclusion, so addObject and its on .contains call is not\n    // required.\n    Ember.get(this, 'content').pushObjects(internalModels);\n  },\n\n\n  /**\n    Removes an internalModel to the `RecordArray`.\n     @method removeInternalModel\n    @private\n    @param {InternalModel} internalModel\n  */\n  _removeInternalModels: function _removeInternalModels(internalModels) {\n    Ember.get(this, 'content').removeObjects(internalModels);\n  },\n\n\n  /**\n    Saves all of the records in the `RecordArray`.\n     Example\n     ```javascript\n    var messages = store.peekAll('message');\n    messages.forEach(function(message) {\n      message.set('hasBeenSeen', true);\n    });\n    messages.save();\n    ```\n     @method save\n    @return {DS.PromiseArray} promise\n  */\n  save: function save() {\n    var _this2 = this;\n\n    var promiseLabel = 'DS: RecordArray#save ' + this.modelName;\n    var promise = Ember.RSVP.Promise.all(this.invoke('save'), promiseLabel).then(function () {\n      return _this2;\n    }, null, 'DS: RecordArray#save return RecordArray');\n\n    return PromiseArray.create({ promise: promise });\n  },\n  _dissociateFromOwnRecords: function _dissociateFromOwnRecords() {\n    var _this3 = this;\n\n    this.get('content').forEach(function (internalModel) {\n      var recordArrays = internalModel.__recordArrays;\n\n      if (recordArrays) {\n        recordArrays.delete(_this3);\n      }\n    });\n  },\n\n\n  /**\n    @method _unregisterFromManager\n    @private\n  */\n  _unregisterFromManager: function _unregisterFromManager() {\n    this.manager.unregisterRecordArray(this);\n  },\n  willDestroy: function willDestroy() {\n    this._unregisterFromManager();\n    this._dissociateFromOwnRecords();\n    // TODO: we should not do work during destroy:\n    //   * when objects are destroyed, they should simply be left to do\n    //   * if logic errors do to this, that logic needs to be more careful during\n    //    teardown (ember provides isDestroying/isDestroyed) for this reason\n    //   * the exception being: if an dominator has a reference to this object,\n    //     and must be informed to release e.g. e.g. removing itself from th\n    //     recordArrayMananger\n    Ember.set(this, 'content', null);\n    Ember.set(this, 'length', 0);\n    this._super.apply(this, arguments);\n  },\n\n\n  /*\n    @method _createSnapshot\n    @private\n  */\n  _createSnapshot: function _createSnapshot(options) {\n    // this is private for users, but public for ember-data internals\n    return new SnapshotRecordArray(this, this.get('meta'), options);\n  },\n\n\n  /*\n    @method _takeSnapshot\n    @private\n  */\n  _takeSnapshot: function _takeSnapshot() {\n    return Ember.get(this, 'content').map(function (internalModel) {\n      return internalModel.createSnapshot();\n    });\n  }\n});\n\n/**\n  Represents a list of records whose membership is determined by the\n  store. As records are created, loaded, or modified, the store\n  evaluates them to determine if they should be part of the record\n  array.\n\n  @class FilteredRecordArray\n  @namespace DS\n  @extends DS.RecordArray\n*/\nvar FilteredRecordArray = RecordArray.extend({\n  init: function init() {\n    this._super.apply(this, arguments);\n\n    this.set('filterFunction', this.get('filterFunction') || null);\n    this.isLoaded = true;\n  },\n\n  /**\n    The filterFunction is a function used to test records from the store to\n    determine if they should be part of the record array.\n     Example\n     ```javascript\n    var allPeople = store.peekAll('person');\n    allPeople.mapBy('name'); // [\"Tom Dale\", \"Yehuda Katz\", \"Trek Glowacki\"]\n     var people = store.filter('person', function(person) {\n      if (person.get('name').match(/Katz$/)) { return true; }\n    });\n    people.mapBy('name'); // [\"Yehuda Katz\"]\n     var notKatzFilter = function(person) {\n      return !person.get('name').match(/Katz$/);\n    };\n    people.set('filterFunction', notKatzFilter);\n    people.mapBy('name'); // [\"Tom Dale\", \"Trek Glowacki\"]\n    ```\n     @method filterFunction\n    @param {DS.Model} record\n    @return {Boolean} `true` if the record should be in the array\n  */\n\n  replace: function replace() {\n    throw new Error('The result of a client-side filter (on ' + this.modelName + ') is immutable.');\n  },\n\n\n  /**\n    @method updateFilter\n    @private\n  */\n  _updateFilter: function _updateFilter() {\n    if (Ember.get(this, 'isDestroying') || Ember.get(this, 'isDestroyed')) {\n      return;\n    }\n    Ember.get(this, 'manager').updateFilter(this, this.modelName, Ember.get(this, 'filterFunction'));\n  },\n\n\n  updateFilter: Ember.observer('filterFunction', function () {\n    Ember.run.once(this, this._updateFilter);\n  })\n});\n\nfunction cloneNull(source) {\n  var clone = Object.create(null);\n  for (var key in source) {\n    clone[key] = source[key];\n  }\n  return clone;\n}\n\n/**\n  Represents an ordered list of records whose order and membership is\n  determined by the adapter. For example, a query sent to the adapter\n  may trigger a search on the server, whose results would be loaded\n  into an instance of the `AdapterPopulatedRecordArray`.\n\n  ---\n\n  If you want to update the array and get the latest records from the\n  adapter, you can invoke [`update()`](#method_update):\n\n  Example\n\n  ```javascript\n  // GET /users?isAdmin=true\n  var admins = store.query('user', { isAdmin: true });\n\n  admins.then(function() {\n    console.log(admins.get(\"length\")); // 42\n  });\n\n  // somewhere later in the app code, when new admins have been created\n  // in the meantime\n  //\n  // GET /users?isAdmin=true\n  admins.update().then(function() {\n    admins.get('isUpdating'); // false\n    console.log(admins.get(\"length\")); // 123\n  });\n\n  admins.get('isUpdating'); // true\n  ```\n\n  @class AdapterPopulatedRecordArray\n  @namespace DS\n  @extends DS.RecordArray\n*/\nvar AdapterPopulatedRecordArray = RecordArray.extend({\n  init: function init() {\n    // yes we are touching `this` before super, but ArrayProxy has a bug that requires this.\n    this.set('content', this.get('content') || Ember.A());\n\n    this._super.apply(this, arguments);\n    this.query = this.query || null;\n    this.links = this.links || null;\n  },\n  replace: function replace() {\n    throw new Error('The result of a server query (on ' + this.modelName + ') is immutable.');\n  },\n  _update: function _update() {\n    var store = Ember.get(this, 'store');\n    var query = Ember.get(this, 'query');\n\n    return store._query(this.modelName, query, this);\n  },\n\n\n  /**\n    @method _setInternalModels\n    @param {Array} internalModels\n    @param {Object} payload normalized payload\n    @private\n  */\n  _setInternalModels: function _setInternalModels(internalModels, payload) {\n\n    // TODO: initial load should not cause change events at all, only\n    // subsequent. This requires changing the public api of adapter.query, but\n    // hopefully we can do that soon.\n    this.get('content').setObjects(internalModels);\n\n    this.setProperties({\n      isLoaded: true,\n      isUpdating: false,\n      meta: cloneNull(payload.meta),\n      links: cloneNull(payload.links)\n    });\n\n    associateWithRecordArray(internalModels, this);\n\n    // TODO: should triggering didLoad event be the last action of the runLoop?\n    Ember.run.once(this, 'trigger', 'didLoad');\n  }\n});\n\n/**\n  @module ember-data\n*/\n\nfunction _classCallCheck$12(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n  @class RecordArrayManager\n  @namespace DS\n  @private\n*/\nvar RecordArrayManager = function () {\n  function RecordArrayManager(options) {\n    _classCallCheck$12(this, RecordArrayManager);\n\n    this.store = options.store;\n    this.isDestroying = false;\n    this.isDestroyed = false;\n    this._filteredRecordArrays = Object.create(null);\n    this._liveRecordArrays = Object.create(null);\n    this._pending = Object.create(null);\n    this._adapterPopulatedRecordArrays = [];\n  }\n\n  RecordArrayManager.prototype.recordDidChange = function recordDidChange(internalModel) {\n    // TODO: change name\n    // TODO: track that it was also a change\n    this.internalModelDidChange(internalModel);\n  };\n\n  RecordArrayManager.prototype.recordWasLoaded = function recordWasLoaded(internalModel) {\n    // TODO: change name\n    // TODO: track that it was also that it was first loaded\n    this.internalModelDidChange(internalModel);\n  };\n\n  RecordArrayManager.prototype.internalModelDidChange = function internalModelDidChange(internalModel) {\n\n    var modelName = internalModel.modelName;\n\n    if (internalModel._pendingRecordArrayManagerFlush) {\n      return;\n    }\n\n    internalModel._pendingRecordArrayManagerFlush = true;\n\n    var pending = this._pending;\n    var models = pending[modelName] = pending[modelName] || [];\n    if (models.push(internalModel) !== 1) {\n      return;\n    }\n\n    Ember.run.schedule('actions', this, this._flush);\n  };\n\n  RecordArrayManager.prototype._flush = function _flush() {\n\n    var pending = this._pending;\n    this._pending = Object.create(null);\n    var modelsToRemove = [];\n\n    for (var modelName in pending) {\n      var internalModels = pending[modelName];\n      for (var j = 0; j < internalModels.length; j++) {\n        var internalModel = internalModels[j];\n        // mark internalModels, so they can once again be processed by the\n        // recordArrayManager\n        internalModel._pendingRecordArrayManagerFlush = false;\n        // build up a set of models to ensure we have purged correctly;\n        if (internalModel.isHiddenFromRecordArrays()) {\n          modelsToRemove.push(internalModel);\n        }\n      }\n\n      // process filteredRecordArrays\n      if (this._filteredRecordArrays[modelName]) {\n        var recordArrays = this.filteredRecordArraysFor(modelName);\n        for (var i = 0; i < recordArrays.length; i++) {\n          this.updateFilterRecordArray(recordArrays[i], modelName, internalModels);\n        }\n      }\n\n      var array = this._liveRecordArrays[modelName];\n      if (array) {\n        // TODO: skip if it only changed\n        // process liveRecordArrays\n        this.updateLiveRecordArray(array, internalModels);\n      }\n\n      // process adapterPopulatedRecordArrays\n      if (modelsToRemove.length > 0) {\n        removeFromAdapterPopulatedRecordArrays(modelsToRemove);\n      }\n    }\n  };\n\n  RecordArrayManager.prototype.updateLiveRecordArray = function updateLiveRecordArray(array, internalModels) {\n    return _updateLiveRecordArray(array, internalModels);\n  };\n\n  /**\n    Update an individual filter.\n     @private\n    @method updateFilterRecordArray\n    @param {DS.FilteredRecordArray} array\n    @param {String} modelName\n    @param {Array} internalModels\n  */\n\n\n  RecordArrayManager.prototype.updateFilterRecordArray = function updateFilterRecordArray(array, modelName, internalModels) {\n\n    var filter = Ember.get(array, 'filterFunction');\n\n    var shouldBeInAdded = [];\n    var shouldBeRemoved = [];\n\n    for (var i = 0; i < internalModels.length; i++) {\n      var internalModel = internalModels[i];\n      if (internalModel.isHiddenFromRecordArrays() === false && filter(internalModel.getRecord())) {\n        if (internalModel._recordArrays.has(array)) {\n          continue;\n        }\n        shouldBeInAdded.push(internalModel);\n        internalModel._recordArrays.add(array);\n      } else {\n        if (internalModel._recordArrays.delete(array)) {\n          shouldBeRemoved.push(internalModel);\n        }\n      }\n    }\n\n    if (shouldBeInAdded.length > 0) {\n      array._pushInternalModels(shouldBeInAdded);\n    }\n    if (shouldBeRemoved.length > 0) {\n      array._removeInternalModels(shouldBeRemoved);\n    }\n  };\n\n  // TODO: remove, utilize existing flush code but make it flush sync based on 1 modelName\n\n\n  RecordArrayManager.prototype._syncLiveRecordArray = function _syncLiveRecordArray(array, modelName) {\n    (true && !(typeof modelName === 'string') && Ember.assert('recordArrayManger.syncLiveRecordArray expects modelName not modelClass as the second param', typeof modelName === 'string'));\n\n    var hasNoPotentialDeletions = Object.keys(this._pending).length === 0;\n    var map = this.store._internalModelsFor(modelName);\n    var hasNoInsertionsOrRemovals = Ember.get(map, 'length') === Ember.get(array, 'length');\n\n    /*\n      Ideally the recordArrayManager has knowledge of the changes to be applied to\n      liveRecordArrays, and is capable of strategically flushing those changes and applying\n      small diffs if desired.  However, until we've refactored recordArrayManager, this dirty\n      check prevents us from unnecessarily wiping out live record arrays returned by peekAll.\n      */\n    if (hasNoPotentialDeletions && hasNoInsertionsOrRemovals) {\n      return;\n    }\n\n    var internalModels = this._visibleInternalModelsByType(modelName);\n    var modelsToAdd = [];\n    for (var i = 0; i < internalModels.length; i++) {\n      var internalModel = internalModels[i];\n      var recordArrays = internalModel._recordArrays;\n      if (recordArrays.has(array) === false) {\n        recordArrays.add(array);\n        modelsToAdd.push(internalModel);\n      }\n    }\n\n    array._pushInternalModels(modelsToAdd);\n  };\n\n  /**\n    This method is invoked if the `filterFunction` property is\n    changed on a `DS.FilteredRecordArray`.\n     It essentially re-runs the filter from scratch. This same\n    method is invoked when the filter is created in th first place.\n     @method updateFilter\n    @param {Array} array\n    @param {String} modelName\n    @param {Function} filter\n  */\n\n\n  RecordArrayManager.prototype.updateFilter = function updateFilter(array, modelName, filter) {\n    (true && !(typeof modelName === 'string') && Ember.assert('recordArrayManger.updateFilter expects modelName not modelClass as the second param, received ' + modelName, typeof modelName === 'string'));\n\n    var modelMap = this.store._internalModelsFor(modelName);\n    var internalModels = modelMap.models;\n\n    this.updateFilterRecordArray(array, filter, internalModels);\n  };\n\n  RecordArrayManager.prototype._didUpdateAll = function _didUpdateAll(modelName) {\n    var recordArray = this._liveRecordArrays[modelName];\n    if (recordArray) {\n      Ember.set(recordArray, 'isUpdating', false);\n    }\n  };\n\n  /**\n    Get the `DS.RecordArray` for a modelName, which contains all loaded records of\n    given modelName.\n     @method liveRecordArrayFor\n    @param {String} modelName\n    @return {DS.RecordArray}\n  */\n\n\n  RecordArrayManager.prototype.liveRecordArrayFor = function liveRecordArrayFor(modelName) {\n    (true && !(typeof modelName === 'string') && Ember.assert('recordArrayManger.liveRecordArrayFor expects modelName not modelClass as the param', typeof modelName === 'string'));\n\n\n    var array = this._liveRecordArrays[modelName];\n\n    if (array) {\n      // if the array already exists, synchronize\n      this._syncLiveRecordArray(array, modelName);\n    } else {\n      // if the array is being newly created merely create it with its initial\n      // content already set. This prevents unneeded change events.\n      var internalModels = this._visibleInternalModelsByType(modelName);\n      array = this.createRecordArray(modelName, internalModels);\n      this._liveRecordArrays[modelName] = array;\n    }\n\n    return array;\n  };\n\n  RecordArrayManager.prototype._visibleInternalModelsByType = function _visibleInternalModelsByType(modelName) {\n    var all = this.store._internalModelsFor(modelName)._models;\n    var visible = [];\n    for (var i = 0; i < all.length; i++) {\n      var model = all[i];\n      if (model.isHiddenFromRecordArrays() === false) {\n        visible.push(model);\n      }\n    }\n    return visible;\n  };\n  /**\n    Get the `DS.RecordArray` for a modelName, which contains all loaded records of\n    given modelName.\n     @method filteredRecordArraysFor\n    @param {String} modelName\n    @return {DS.RecordArray}\n  */\n\n\n  RecordArrayManager.prototype.filteredRecordArraysFor = function filteredRecordArraysFor(modelName) {\n    (true && !(typeof modelName === 'string') && Ember.assert('recordArrayManger.filteredRecordArraysFor expects modelName not modelClass as the param', typeof modelName === 'string'));\n\n\n    return this._filteredRecordArrays[modelName] || (this._filteredRecordArrays[modelName] = []);\n  };\n  /**\n    Create a `DS.RecordArray` for a modelName.\n     @method createRecordArray\n    @param {String} modelName\n    @param {Array} _content (optional|private)\n    @return {DS.RecordArray}\n  */\n\n\n  RecordArrayManager.prototype.createRecordArray = function createRecordArray(modelName, content) {\n    (true && !(typeof modelName === 'string') && Ember.assert('recordArrayManger.createRecordArray expects modelName not modelClass as the param', typeof modelName === 'string'));\n\n\n    var array = RecordArray.create({\n      modelName: modelName,\n      content: Ember.A(content || []),\n      store: this.store,\n      isLoaded: true,\n      manager: this\n    });\n\n    if (Array.isArray(content)) {\n      associateWithRecordArray(content, array);\n    }\n\n    return array;\n  };\n\n  /**\n    Create a `DS.FilteredRecordArray` for a modelName and register it for updates.\n     @method createFilteredRecordArray\n    @param {String} modelName\n    @param {Function} filter\n    @param {Object} query (optional\n    @return {DS.FilteredRecordArray}\n  */\n\n\n  RecordArrayManager.prototype.createFilteredRecordArray = function createFilteredRecordArray(modelName, filter, query) {\n    (true && !(typeof modelName === 'string') && Ember.assert('recordArrayManger.createFilteredRecordArray expects modelName not modelClass as the first param, received ' + modelName, typeof modelName === 'string'));\n\n    var array = FilteredRecordArray.create({\n      query: query,\n      modelName: modelName,\n      content: Ember.A(),\n      store: this.store,\n      manager: this,\n      filterFunction: filter\n    });\n\n    this.registerFilteredRecordArray(array, modelName, filter);\n\n    return array;\n  };\n\n  /**\n    Create a `DS.AdapterPopulatedRecordArray` for a modelName with given query.\n     @method createAdapterPopulatedRecordArray\n    @param {String} modelName\n    @param {Object} query\n    @return {DS.AdapterPopulatedRecordArray}\n  */\n\n\n  RecordArrayManager.prototype.createAdapterPopulatedRecordArray = function createAdapterPopulatedRecordArray(modelName, query, internalModels, payload) {\n    (true && !(typeof modelName === 'string') && Ember.assert('recordArrayManger.createAdapterPopulatedRecordArray expects modelName not modelClass as the first param, received ' + modelName, typeof modelName === 'string'));\n\n\n    var array = void 0;\n    if (Array.isArray(internalModels)) {\n      array = AdapterPopulatedRecordArray.create({\n        modelName: modelName,\n        query: query,\n        content: Ember.A(internalModels),\n        store: this.store,\n        manager: this,\n        isLoaded: true,\n        isUpdating: false,\n        meta: cloneNull(payload.meta),\n        links: cloneNull(payload.links)\n      });\n\n      associateWithRecordArray(internalModels, array);\n    } else {\n      array = AdapterPopulatedRecordArray.create({\n        modelName: modelName,\n        query: query,\n        content: Ember.A(),\n        store: this.store,\n        manager: this\n      });\n    }\n\n    this._adapterPopulatedRecordArrays.push(array);\n\n    return array;\n  };\n\n  /**\n    Register a RecordArray for a given modelName to be backed by\n    a filter function. This will cause the array to update\n    automatically when records of that modelName change attribute\n    values or states.\n     @method registerFilteredRecordArray\n    @param {DS.RecordArray} array\n    @param {String} modelName\n    @param {Function} filter\n  */\n\n\n  RecordArrayManager.prototype.registerFilteredRecordArray = function registerFilteredRecordArray(array, modelName, filter) {\n    (true && !(typeof modelName === 'string') && Ember.assert('recordArrayManger.registerFilteredRecordArray expects modelName not modelClass as the second param, received ' + modelName, typeof modelName === 'string'));\n\n\n    this.filteredRecordArraysFor(modelName).push(array);\n    this.updateFilter(array, modelName, filter);\n  };\n\n  /**\n    Unregister a RecordArray.\n    So manager will not update this array.\n     @method unregisterRecordArray\n    @param {DS.RecordArray} array\n  */\n\n\n  RecordArrayManager.prototype.unregisterRecordArray = function unregisterRecordArray(array) {\n\n    var modelName = array.modelName;\n\n    // unregister filtered record array\n    var recordArrays = this.filteredRecordArraysFor(modelName);\n    var removedFromFiltered = remove(recordArrays, array);\n\n    // remove from adapter populated record array\n    var removedFromAdapterPopulated = remove(this._adapterPopulatedRecordArrays, array);\n\n    if (!removedFromFiltered && !removedFromAdapterPopulated) {\n\n      var liveRecordArrayForType = this._liveRecordArrays[modelName];\n      // unregister live record array\n      if (liveRecordArrayForType) {\n        if (array === liveRecordArrayForType) {\n          delete this._liveRecordArrays[modelName];\n        }\n      }\n    }\n  };\n\n  RecordArrayManager.prototype.willDestroy = function willDestroy() {\n    var _this = this;\n\n    Object.keys(this._filteredRecordArrays).forEach(function (modelName) {\n      return flatten(_this._filteredRecordArrays[modelName]).forEach(destroy);\n    });\n    Object.keys(this._liveRecordArrays).forEach(function (modelName) {\n      return _this._liveRecordArrays[modelName].destroy();\n    });\n    this._adapterPopulatedRecordArrays.forEach(destroy);\n    this.isDestroyed = true;\n  };\n\n  RecordArrayManager.prototype.destroy = function destroy() {\n    this.isDestroying = true;\n    Ember.run.schedule('actions', this, this.willDestroy);\n  };\n\n  return RecordArrayManager;\n}();\n\nfunction destroy(entry) {\n  entry.destroy();\n}\n\nfunction flatten(list) {\n  var length = list.length;\n  var result = [];\n\n  for (var i = 0; i < length; i++) {\n    result = result.concat(list[i]);\n  }\n\n  return result;\n}\n\nfunction remove(array, item) {\n  var index = array.indexOf(item);\n\n  if (index !== -1) {\n    array.splice(index, 1);\n    return true;\n  }\n\n  return false;\n}\n\nfunction _updateLiveRecordArray(array, internalModels) {\n  var modelsToAdd = [];\n  var modelsToRemove = [];\n\n  for (var i = 0; i < internalModels.length; i++) {\n    var internalModel = internalModels[i];\n    var isDeleted = internalModel.isHiddenFromRecordArrays();\n    var recordArrays = internalModel._recordArrays;\n\n    if (!isDeleted && !internalModel.isEmpty()) {\n      if (!recordArrays.has(array)) {\n        modelsToAdd.push(internalModel);\n        recordArrays.add(array);\n      }\n    }\n\n    if (isDeleted) {\n      modelsToRemove.push(internalModel);\n      recordArrays.delete(array);\n    }\n  }\n\n  if (modelsToAdd.length > 0) {\n    array._pushInternalModels(modelsToAdd);\n  }\n  if (modelsToRemove.length > 0) {\n    array._removeInternalModels(modelsToRemove);\n  }\n}\n\nfunction removeFromAdapterPopulatedRecordArrays(internalModels) {\n  for (var i = 0; i < internalModels.length; i++) {\n    var internalModel = internalModels[i];\n    var list = internalModel._recordArrays.list;\n\n    for (var j = 0; j < list.length; j++) {\n      // TODO: group by arrays, so we can batch remove\n      list[j]._removeInternalModels([internalModel]);\n    }\n\n    internalModel._recordArrays.clear();\n  }\n}\n\nfunction associateWithRecordArray(internalModels, array) {\n  for (var i = 0, l = internalModels.length; i < l; i++) {\n    var internalModel = internalModels[i];\n    internalModel._recordArrays.add(array);\n  }\n}\n\nvar badIdFormatAssertion = '`id` passed to `findRecord()` has to be non-empty string or number';\n\nvar Backburner = Ember._Backburner;\nvar ENV = Ember.ENV;\nvar Promise = Ember.RSVP.Promise;\n\n//Get the materialized model from the internalModel/promise that returns\n//an internal model and return it in a promiseObject. Useful for returning\n//from find methods\n\nfunction promiseRecord(internalModelPromise, label) {\n  var toReturn = internalModelPromise.then(function (internalModel) {\n    return internalModel.getRecord();\n  });\n\n  return promiseObject(toReturn, label);\n}\n\nvar Store = void 0;\n\n// Implementors Note:\n//\n//   The variables in this file are consistently named according to the following\n//   scheme:\n//\n//   * +id+ means an identifier managed by an external source, provided inside\n//     the data provided by that source. These are always coerced to be strings\n//     before being used internally.\n//   * +clientId+ means a transient numerical identifier generated at runtime by\n//     the data store. It is important primarily because newly created objects may\n//     not yet have an externally generated id.\n//   * +internalModel+ means a record internalModel object, which holds metadata about a\n//     record, even if it has not yet been fully materialized.\n//   * +type+ means a DS.Model.\n\n/**\n  The store contains all of the data for records loaded from the server.\n  It is also responsible for creating instances of `DS.Model` that wrap\n  the individual data for a record, so that they can be bound to in your\n  Handlebars templates.\n\n  Define your application's store like this:\n\n  ```app/services/store.js\n  import DS from 'ember-data';\n\n  export default DS.Store.extend({\n  });\n  ```\n\n  Most Ember.js applications will only have a single `DS.Store` that is\n  automatically created by their `Ember.Application`.\n\n  You can retrieve models from the store in several ways. To retrieve a record\n  for a specific id, use `DS.Store`'s `findRecord()` method:\n\n  ```javascript\n  store.findRecord('person', 123).then(function (person) {\n  });\n  ```\n\n  By default, the store will talk to your backend using a standard\n  REST mechanism. You can customize how the store talks to your\n  backend by specifying a custom adapter:\n\n  ```app/adapters/application.js\n  import DS from 'ember-data';\n\n  export default DS.Adapter.extend({\n  });\n  ```\n\n  You can learn more about writing a custom adapter by reading the `DS.Adapter`\n  documentation.\n\n  ### Store createRecord() vs. push() vs. pushPayload()\n\n  The store provides multiple ways to create new record objects. They have\n  some subtle differences in their use which are detailed below:\n\n  [createRecord](#method_createRecord) is used for creating new\n  records on the client side. This will return a new record in the\n  `created.uncommitted` state. In order to persist this record to the\n  backend you will need to call `record.save()`.\n\n  [push](#method_push) is used to notify Ember Data's store of new or\n  updated records that exist in the backend. This will return a record\n  in the `loaded.saved` state. The primary use-case for `store#push` is\n  to notify Ember Data about record updates (full or partial) that happen\n  outside of the normal adapter methods (for example\n  [SSE](http://dev.w3.org/html5/eventsource/) or [Web\n  Sockets](http://www.w3.org/TR/2009/WD-websockets-20091222/)).\n\n  [pushPayload](#method_pushPayload) is a convenience wrapper for\n  `store#push` that will deserialize payloads if the\n  Serializer implements a `pushPayload` method.\n\n  Note: When creating a new record using any of the above methods\n  Ember Data will update `DS.RecordArray`s such as those returned by\n  `store#peekAll()` or `store#findAll()`. This means any\n  data bindings or computed properties that depend on the RecordArray\n  will automatically be synced to include the new or updated record\n  values.\n\n  @class Store\n  @namespace DS\n  @extends Ember.Service\n*/\nStore = Ember.Service.extend({\n\n  /**\n    @method init\n    @private\n  */\n  init: function init() {\n    this._super.apply(this, arguments);\n    this._backburner = new Backburner(['normalizeRelationships', 'syncRelationships', 'finished']);\n    // internal bookkeeping; not observable\n    this.recordArrayManager = new RecordArrayManager({ store: this });\n    this._identityMap = new IdentityMap();\n    this._pendingSave = [];\n    this._modelFactoryCache = Object.create(null);\n    this._relationshipsPayloads = new RelationshipPayloadsManager(this);\n\n    /*\n      Ember Data uses several specialized micro-queues for organizing\n      and coalescing similar async work.\n       These queues are currently controlled by a flush scheduled into\n      ember-data's custom backburner instance.\n     */\n    // used for coalescing record save requests\n    this._pendingSave = [];\n    // used for coalescing relationship updates\n    this._updatedRelationships = [];\n    // used for coalescing relationship setup needs\n    this._pushedInternalModels = [];\n    // used for coalescing internal model updates\n    this._updatedInternalModels = [];\n\n    // used to keep track of all the find requests that need to be coalesced\n    this._pendingFetch = new MapWithDefault({\n      defaultValue: function defaultValue() {\n        return [];\n      }\n    });\n\n    this._adapterCache = Object.create(null);\n    this._serializerCache = Object.create(null);\n  },\n\n\n  /**\n    The default adapter to use to communicate to a backend server or\n    other persistence layer. This will be overridden by an application\n    adapter if present.\n     If you want to specify `app/adapters/custom.js` as a string, do:\n     ```js\n    import DS from 'ember-data';\n     export default DS.Store.extend({\n      adapter: 'custom',\n    });\n    ```\n     @property adapter\n    @default '-json-api'\n    @type {String}\n  */\n  adapter: '-json-api',\n\n  /**\n    Returns a JSON representation of the record using a custom\n    type-specific serializer, if one exists.\n     The available options are:\n     * `includeId`: `true` if the record's ID should be included in\n      the JSON representation\n     @method serialize\n    @private\n    @deprecated\n    @param {DS.Model} record the record to serialize\n    @param {Object} options an options hash\n  */\n  serialize: function serialize(record, options) {\n    if (isEnabled('ds-deprecate-store-serialize')) {\n      (true && !(false) && Ember.deprecate('Use of store.serialize is deprecated, use record.serialize instead.', false, {\n        id: 'ds.store.serialize',\n        until: '3.0'\n      }));\n    }\n    var snapshot = record._internalModel.createSnapshot();\n    return snapshot.serialize(options);\n  },\n\n\n  /**\n    This property returns the adapter, after resolving a possible\n    string key.\n     If the supplied `adapter` was a class, or a String property\n    path resolved to a class, this property will instantiate the\n    class.\n     This property is cacheable, so the same instance of a specified\n    adapter class should be used for the lifetime of the store.\n     @property defaultAdapter\n    @private\n    @return DS.Adapter\n  */\n  defaultAdapter: Ember.computed('adapter', function () {\n    var adapter = Ember.get(this, 'adapter');\n\n    (true && !(typeof adapter === 'string') && Ember.assert('You tried to set `adapter` property to an instance of `DS.Adapter`, where it should be a name', typeof adapter === 'string'));\n\n\n    return this.adapterFor(adapter);\n  }),\n\n  // .....................\n  // . CREATE NEW RECORD .\n  // .....................\n\n  /**\n    Create a new record in the current store. The properties passed\n    to this method are set on the newly created record.\n     To create a new instance of a `Post`:\n     ```js\n    store.createRecord('post', {\n      title: 'Rails is omakase'\n    });\n    ```\n     To create a new instance of a `Post` that has a relationship with a `User` record:\n     ```js\n    let user = this.store.peekRecord('user', 1);\n    store.createRecord('post', {\n      title: 'Rails is omakase',\n      user: user\n    });\n    ```\n     @method createRecord\n    @param {String} modelName\n    @param {Object} inputProperties a hash of properties to set on the\n      newly created record.\n    @return {DS.Model} record\n  */\n  createRecord: function createRecord(modelName, inputProperties) {\n    (true && !(Ember.isPresent(modelName)) && Ember.assert('You need to pass a model name to the store\\'s createRecord method', Ember.isPresent(modelName)));\n    (true && !(typeof modelName === 'string') && Ember.assert('Passing classes to store methods has been removed. Please pass a dasherized string instead of ' + modelName, typeof modelName === 'string'));\n\n    var normalizedModelName = normalizeModelName(modelName);\n    var properties = Ember.copy(inputProperties) || Object.create(null);\n\n    // If the passed properties do not include a primary key,\n    // give the adapter an opportunity to generate one. Typically,\n    // client-side ID generators will use something like uuid.js\n    // to avoid conflicts.\n\n    if (Ember.isNone(properties.id)) {\n      properties.id = this._generateId(normalizedModelName, properties);\n    }\n\n    // Coerce ID to a string\n    properties.id = coerceId(properties.id);\n\n    var internalModel = this._buildInternalModel(normalizedModelName, properties.id);\n    internalModel.loadedData();\n    var record = internalModel.getRecord(properties);\n\n    // TODO @runspired this should also be coalesced into some form of internalModel.setState()\n    internalModel.eachRelationship(function (key, descriptor) {\n      if (properties[key] !== undefined) {\n        internalModel._relationships.get(key).setHasData(true);\n      }\n    });\n\n    return record;\n  },\n\n\n  /**\n    If possible, this method asks the adapter to generate an ID for\n    a newly created record.\n     @method _generateId\n    @private\n    @param {String} modelName\n    @param {Object} properties from the new record\n    @return {String} if the adapter can generate one, an ID\n  */\n  _generateId: function _generateId(modelName, properties) {\n    var adapter = this.adapterFor(modelName);\n\n    if (adapter && adapter.generateIdForRecord) {\n      return adapter.generateIdForRecord(this, modelName, properties);\n    }\n\n    return null;\n  },\n\n\n  // .................\n  // . DELETE RECORD .\n  // .................\n\n  /**\n    For symmetry, a record can be deleted via the store.\n     Example\n     ```javascript\n    let post = store.createRecord('post', {\n      title: 'Rails is omakase'\n    });\n     store.deleteRecord(post);\n    ```\n     @method deleteRecord\n    @param {DS.Model} record\n  */\n  deleteRecord: function deleteRecord(record) {\n    record.deleteRecord();\n  },\n\n\n  /**\n    For symmetry, a record can be unloaded via the store.\n    This will cause the record to be destroyed and freed up for garbage collection.\n     Example\n     ```javascript\n    store.findRecord('post', 1).then(function(post) {\n      store.unloadRecord(post);\n    });\n    ```\n     @method unloadRecord\n    @param {DS.Model} record\n  */\n  unloadRecord: function unloadRecord(record) {\n    record.unloadRecord();\n  },\n\n\n  // ................\n  // . FIND RECORDS .\n  // ................\n\n  /**\n    @method find\n    @param {String} modelName\n    @param {String|Integer} id\n    @param {Object} options\n    @return {Promise} promise\n    @private\n  */\n  find: function find(modelName, id, options) {\n    // The default `model` hook in Route calls `find(modelName, id)`,\n    // that's why we have to keep this method around even though `findRecord` is\n    // the public way to get a record by modelName and id.\n    (true && !(arguments.length !== 1) && Ember.assert('Using store.find(type) has been removed. Use store.findAll(modelName) to retrieve all records for a given type.', arguments.length !== 1));\n    (true && !(!options) && Ember.assert('Calling store.find(modelName, id, { preload: preload }) is no longer supported. Use store.findRecord(modelName, id, { preload: preload }) instead.', !options));\n    (true && !(arguments.length === 2) && Ember.assert('You need to pass the model name and id to the store\\'s find method', arguments.length === 2));\n    (true && !(typeof id === 'string' || typeof id === 'number') && Ember.assert('You cannot pass \\'' + id + '\\' as id to the store\\'s find method', typeof id === 'string' || typeof id === 'number'));\n    (true && !(typeof id !== 'object') && Ember.assert('Calling store.find() with a query object is no longer supported. Use store.query() instead.', typeof id !== 'object'));\n    (true && !(typeof modelName === 'string') && Ember.assert('Passing classes to store methods has been removed. Please pass a dasherized string instead of ' + modelName, typeof modelName === 'string'));\n\n\n    return this.findRecord(modelName, id);\n  },\n\n\n  /**\n    This method returns a record for a given type and id combination.\n     The `findRecord` method will always resolve its promise with the same\n    object for a given type and `id`.\n     The `findRecord` method will always return a **promise** that will be\n    resolved with the record.\n     Example\n     ```app/routes/post.js\n    import Route from '@ember/routing/route';\n     export default Route.extend({\n      model(params) {\n        return this.store.findRecord('post', params.post_id);\n      }\n    });\n    ```\n     If the record is not yet available, the store will ask the adapter's `find`\n    method to find the necessary data. If the record is already present in the\n    store, it depends on the reload behavior _when_ the returned promise\n    resolves.\n     ### Preloading\n     You can optionally `preload` specific attributes and relationships that you know of\n    by passing them via the passed `options`.\n     For example, if your Ember route looks like `/posts/1/comments/2` and your API route\n    for the comment also looks like `/posts/1/comments/2` if you want to fetch the comment\n    without fetching the post you can pass in the post to the `findRecord` call:\n     ```javascript\n    store.findRecord('comment', 2, { preload: { post: 1 } });\n    ```\n     If you have access to the post model you can also pass the model itself:\n     ```javascript\n    store.findRecord('post', 1).then(function (myPostModel) {\n      store.findRecord('comment', 2, { post: myPostModel });\n    });\n    ```\n     ### Reloading\n     The reload behavior is configured either via the passed `options` hash or\n    the result of the adapter's `shouldReloadRecord`.\n     If `{ reload: true }` is passed or `adapter.shouldReloadRecord` evaluates\n    to `true`, then the returned promise resolves once the adapter returns\n    data, regardless if the requested record is already in the store:\n     ```js\n    store.push({\n      data: {\n        id: 1,\n        type: 'post',\n        revision: 1\n      }\n    });\n     // adapter#findRecord resolves with\n    // [\n    //   {\n    //     id: 1,\n    //     type: 'post',\n    //     revision: 2\n    //   }\n    // ]\n    store.findRecord('post', 1, { reload: true }).then(function(post) {\n      post.get('revision'); // 2\n    });\n    ```\n     If no reload is indicated via the abovementioned ways, then the promise\n    immediately resolves with the cached version in the store.\n     ### Background Reloading\n     Optionally, if `adapter.shouldBackgroundReloadRecord` evaluates to `true`,\n    then a background reload is started, which updates the records' data, once\n    it is available:\n     ```js\n    // app/adapters/post.js\n    import ApplicationAdapter from \"./application\";\n     export default ApplicationAdapter.extend({\n      shouldReloadRecord(store, snapshot) {\n        return false;\n      },\n       shouldBackgroundReloadRecord(store, snapshot) {\n        return true;\n      }\n    });\n     // ...\n     store.push({\n      data: {\n        id: 1,\n        type: 'post',\n        revision: 1\n      }\n    });\n     let blogPost = store.findRecord('post', 1).then(function(post) {\n      post.get('revision'); // 1\n    });\n     // later, once adapter#findRecord resolved with\n    // [\n    //   {\n    //     id: 1,\n    //     type: 'post',\n    //     revision: 2\n    //   }\n    // ]\n     blogPost.get('revision'); // 2\n    ```\n     If you would like to force or prevent background reloading, you can set a\n    boolean value for `backgroundReload` in the options object for\n    `findRecord`.\n     ```app/routes/post/edit.js\n    import Route from '@ember/routing/route';\n     export default Route.extend({\n      model(params) {\n        return this.store.findRecord('post', params.post_id, { backgroundReload: false });\n      }\n    });\n    ```\n     If you pass an object on the `adapterOptions` property of the options\n    argument it will be passed to you adapter via the snapshot\n     ```app/routes/post/edit.js\n    import Route from '@ember/routing/route';\n     export default Route.extend({\n      model(params) {\n        return this.store.findRecord('post', params.post_id, {\n          adapterOptions: { subscribe: false }\n        });\n      }\n    });\n    ```\n     ```app/adapters/post.js\n    import MyCustomAdapter from './custom-adapter';\n     export default MyCustomAdapter.extend({\n      findRecord(store, type, id, snapshot) {\n        if (snapshot.adapterOptions.subscribe) {\n          // ...\n        }\n        // ...\n      }\n    });\n    ```\n     See [peekRecord](#method_peekRecord) to get the cached version of a record.\n     ### Retrieving Related Model Records\n     If you use an adapter such as Ember's default\n    [`JSONAPIAdapter`](https://emberjs.com/api/data/classes/DS.JSONAPIAdapter.html)\n    that supports the [JSON API specification](http://jsonapi.org/) and if your server\n    endpoint supports the use of an\n    ['include' query parameter](http://jsonapi.org/format/#fetching-includes),\n    you can use `findRecord()` to automatically retrieve additional records related to\n    the one you request by supplying an `include` parameter in the `options` object.\n     For example, given a `post` model that has a `hasMany` relationship with a `comment`\n    model, when we retrieve a specific post we can have the server also return that post's\n    comments in the same request:\n     ```app/routes/post.js\n    import Route from '@ember/routing/route';\n     export default Route.extend({\n      model(params) {\n        return this.store.findRecord('post', params.post_id, { include: 'comments' });\n      }\n    });\n     ```\n    In this case, the post's comments would then be available in your template as\n    `model.comments`.\n     Multiple relationships can be requested using an `include` parameter consisting of a\n    comma-separated list (without white-space) while nested relationships can be specified\n    using a dot-separated sequence of relationship names. So to request both the post's\n    comments and the authors of those comments the request would look like this:\n     ```app/routes/post.js\n    import Route from '@ember/routing/route';\n     export default Route.extend({\n      model(params) {\n        return this.store.findRecord('post', params.post_id, { include: 'comments,comments.author' });\n      }\n    });\n     ```\n     @since 1.13.0\n    @method findRecord\n    @param {String} modelName\n    @param {(String|Integer)} id\n    @param {Object} options\n    @return {Promise} promise\n  */\n  findRecord: function findRecord(modelName, id, options) {\n    (true && !(Ember.isPresent(modelName)) && Ember.assert('You need to pass a model name to the store\\'s findRecord method', Ember.isPresent(modelName)));\n    (true && !(typeof modelName === 'string') && Ember.assert('Passing classes to store methods has been removed. Please pass a dasherized string instead of ' + modelName, typeof modelName === 'string'));\n    (true && !(typeof id === 'string' && id.length > 0 || typeof id === 'number' && !isNaN(id)) && Ember.assert(badIdFormatAssertion, typeof id === 'string' && id.length > 0 || typeof id === 'number' && !isNaN(id)));\n\n\n    var normalizedModelName = normalizeModelName(modelName);\n\n    var internalModel = this._internalModelForId(normalizedModelName, id);\n    options = options || {};\n\n    if (!this.hasRecordForId(normalizedModelName, id)) {\n      return this._findByInternalModel(internalModel, options);\n    }\n\n    var fetchedInternalModel = this._findRecord(internalModel, options);\n\n    return promiseRecord(fetchedInternalModel, 'DS: Store#findRecord ' + normalizedModelName + ' with id: ' + id);\n  },\n  _findRecord: function _findRecord(internalModel, options) {\n    // Refetch if the reload option is passed\n    if (options.reload) {\n      return this._scheduleFetch(internalModel, options);\n    }\n\n    var snapshot = internalModel.createSnapshot(options);\n    var adapter = this.adapterFor(internalModel.modelName);\n\n    // Refetch the record if the adapter thinks the record is stale\n    if (adapter.shouldReloadRecord(this, snapshot)) {\n      return this._scheduleFetch(internalModel, options);\n    }\n\n    if (options.backgroundReload === false) {\n      return Promise.resolve(internalModel);\n    }\n\n    // Trigger the background refetch if backgroundReload option is passed\n    if (options.backgroundReload || adapter.shouldBackgroundReloadRecord(this, snapshot)) {\n      this._scheduleFetch(internalModel, options);\n    }\n\n    // Return the cached record\n    return Promise.resolve(internalModel);\n  },\n  _findByInternalModel: function _findByInternalModel(internalModel) {\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    if (options.preload) {\n      internalModel.preloadData(options.preload);\n    }\n\n    var fetchedInternalModel = this._findEmptyInternalModel(internalModel, options);\n\n    return promiseRecord(fetchedInternalModel, 'DS: Store#findRecord ' + internalModel.modelName + ' with id: ' + internalModel.id);\n  },\n  _findEmptyInternalModel: function _findEmptyInternalModel(internalModel, options) {\n    if (internalModel.isEmpty()) {\n      return this._scheduleFetch(internalModel, options);\n    }\n\n    //TODO double check about reloading\n    if (internalModel.isLoading()) {\n      return internalModel._loadingPromise;\n    }\n\n    return Promise.resolve(internalModel);\n  },\n\n\n  /**\n    This method makes a series of requests to the adapter's `find` method\n    and returns a promise that resolves once they are all loaded.\n     @private\n    @method findByIds\n    @param {String} modelName\n    @param {Array} ids\n    @return {Promise} promise\n  */\n  findByIds: function findByIds(modelName, ids) {\n    (true && !(Ember.isPresent(modelName)) && Ember.assert('You need to pass a model name to the store\\'s findByIds method', Ember.isPresent(modelName)));\n    (true && !(typeof modelName === 'string') && Ember.assert('Passing classes to store methods has been removed. Please pass a dasherized string instead of ' + modelName, typeof modelName === 'string'));\n\n\n    var promises = new Array(ids.length);\n\n    var normalizedModelName = normalizeModelName(modelName);\n\n    for (var i = 0; i < ids.length; i++) {\n      promises[i] = this.findRecord(normalizedModelName, ids[i]);\n    }\n\n    return promiseArray(Ember.RSVP.all(promises).then(Ember.A, null, 'DS: Store#findByIds of ' + normalizedModelName + ' complete'));\n  },\n\n\n  /**\n    This method is called by `findRecord` if it discovers that a particular\n    type/id pair hasn't been loaded yet to kick off a request to the\n    adapter.\n     @method _fetchRecord\n    @private\n    @param {InternalModel} internalModel model\n    @return {Promise} promise\n   */\n  _fetchRecord: function _fetchRecord(internalModel, options) {\n    var modelName = internalModel.modelName;\n    var adapter = this.adapterFor(modelName);\n\n    (true && !(adapter) && Ember.assert('You tried to find a record but you have no adapter (for ' + modelName + ')', adapter));\n    (true && !(typeof adapter.findRecord === 'function') && Ember.assert('You tried to find a record but your adapter (for ' + modelName + ') does not implement \\'findRecord\\'', typeof adapter.findRecord === 'function'));\n\n\n    return _find(adapter, this, internalModel.type, internalModel.id, internalModel, options);\n  },\n  _scheduleFetchMany: function _scheduleFetchMany(internalModels) {\n    var fetches = new Array(internalModels.length);\n\n    for (var i = 0; i < internalModels.length; i++) {\n      fetches[i] = this._scheduleFetch(internalModels[i]);\n    }\n\n    return Promise.all(fetches);\n  },\n  _scheduleFetch: function _scheduleFetch(internalModel, options) {\n    if (internalModel._loadingPromise) {\n      return internalModel._loadingPromise;\n    }\n\n    var id = internalModel.id,\n        modelName = internalModel.modelName;\n\n    var resolver = Ember.RSVP.defer('Fetching ' + modelName + '\\' with id: ' + id);\n    var pendingFetchItem = {\n      internalModel: internalModel,\n      resolver: resolver,\n      options: options\n    };\n\n    var promise = resolver.promise;\n\n    internalModel.loadingData(promise);\n    if (this._pendingFetch.size === 0) {\n      Ember.run.schedule('afterRender', this, this.flushAllPendingFetches);\n    }\n\n    this._pendingFetch.get(modelName).push(pendingFetchItem);\n\n    return promise;\n  },\n  flushAllPendingFetches: function flushAllPendingFetches() {\n    if (this.isDestroyed || this.isDestroying) {\n      return;\n    }\n\n    this._pendingFetch.forEach(this._flushPendingFetchForType, this);\n    this._pendingFetch.clear();\n  },\n  _flushPendingFetchForType: function _flushPendingFetchForType(pendingFetchItems, modelName) {\n    var store = this;\n    var adapter = store.adapterFor(modelName);\n    var shouldCoalesce = !!adapter.findMany && adapter.coalesceFindRequests;\n    var totalItems = pendingFetchItems.length;\n    var internalModels = new Array(totalItems);\n    var seeking = Object.create(null);\n\n    for (var _i = 0; _i < totalItems; _i++) {\n      var pendingItem = pendingFetchItems[_i];\n      var _internalModel = pendingItem.internalModel;\n      internalModels[_i] = _internalModel;\n      seeking[_internalModel.id] = pendingItem;\n    }\n\n    for (var _i2 = 0; _i2 < totalItems; _i2++) {\n      var _internalModel2 = internalModels[_i2];\n      // We may have unloaded the record after scheduling this fetch, in which\n      // case we must cancel the destory.  This is because we require a record\n      // to build a snapshot.  This is not fundamental: this cancelation code\n      // can be removed when snapshots can be created for internal models that\n      // have no records.\n      if (_internalModel2.hasScheduledDestroy()) {\n        internalModels[_i2].cancelDestroy();\n      }\n    }\n\n    function _fetchRecord(recordResolverPair) {\n      var recordFetch = store._fetchRecord(recordResolverPair.internalModel, recordResolverPair.options); // TODO adapter options\n\n      recordResolverPair.resolver.resolve(recordFetch);\n    }\n\n    function handleFoundRecords(foundInternalModels, expectedInternalModels) {\n      // resolve found records\n      var found = Object.create(null);\n      for (var _i3 = 0, _l = foundInternalModels.length; _i3 < _l; _i3++) {\n        var _internalModel3 = foundInternalModels[_i3];\n        var _pair = seeking[_internalModel3.id];\n        found[_internalModel3.id] = _internalModel3;\n\n        if (_pair) {\n          var resolver = _pair.resolver;\n          resolver.resolve(_internalModel3);\n        }\n      }\n\n      // reject missing records\n      var missingInternalModels = [];\n\n      for (var _i4 = 0, _l2 = expectedInternalModels.length; _i4 < _l2; _i4++) {\n        var _internalModel4 = expectedInternalModels[_i4];\n\n        if (!found[_internalModel4.id]) {\n          missingInternalModels.push(_internalModel4);\n        }\n      }\n\n      if (missingInternalModels.length) {\n        (true && Ember.warn('Ember Data expected to find records with the following ids in the adapter response but they were missing: ' + Ember.inspect(missingInternalModels.map(function (r) {\n          return r.id;\n        })), false, {\n          id: 'ds.store.missing-records-from-adapter'\n        }));\n\n        rejectInternalModels(missingInternalModels);\n      }\n    }\n\n    function rejectInternalModels(internalModels, error) {\n      for (var _i5 = 0, _l3 = internalModels.length; _i5 < _l3; _i5++) {\n        var _internalModel5 = internalModels[_i5];\n        var _pair2 = seeking[_internalModel5.id];\n\n        if (_pair2) {\n          _pair2.resolver.reject(error || new Error('Expected: \\'' + _internalModel5 + '\\' to be present in the adapter provided payload, but it was not found.'));\n        }\n      }\n    }\n\n    if (shouldCoalesce) {\n      // TODO: Improve records => snapshots => records => snapshots\n      //\n      // We want to provide records to all store methods and snapshots to all\n      // adapter methods. To make sure we're doing that we're providing an array\n      // of snapshots to adapter.groupRecordsForFindMany(), which in turn will\n      // return grouped snapshots instead of grouped records.\n      //\n      // But since the _findMany() finder is a store method we need to get the\n      // records from the grouped snapshots even though the _findMany() finder\n      // will once again convert the records to snapshots for adapter.findMany()\n      var snapshots = new Array(totalItems);\n      for (var _i6 = 0; _i6 < totalItems; _i6++) {\n        snapshots[_i6] = internalModels[_i6].createSnapshot();\n      }\n\n      var groups = adapter.groupRecordsForFindMany(this, snapshots);\n\n      for (var i = 0, l = groups.length; i < l; i++) {\n        var group = groups[i];\n        var totalInGroup = groups[i].length;\n        var ids = new Array(totalInGroup);\n        var groupedInternalModels = new Array(totalInGroup);\n\n        for (var j = 0; j < totalInGroup; j++) {\n          var internalModel = group[j]._internalModel;\n\n          groupedInternalModels[j] = internalModel;\n          ids[j] = internalModel.id;\n        }\n\n        if (totalInGroup > 1) {\n          (function (groupedInternalModels) {\n            _findMany(adapter, store, modelName, ids, groupedInternalModels).then(function (foundInternalModels) {\n              handleFoundRecords(foundInternalModels, groupedInternalModels);\n            }).catch(function (error) {\n              rejectInternalModels(groupedInternalModels, error);\n            });\n          })(groupedInternalModels);\n        } else if (ids.length === 1) {\n          var pair = seeking[groupedInternalModels[0].id];\n          _fetchRecord(pair);\n        } else {\n          (true && !(false) && Ember.assert(\"You cannot return an empty array from adapter's method groupRecordsForFindMany\", false));\n        }\n      }\n    } else {\n      for (var _i7 = 0; _i7 < totalItems; _i7++) {\n        _fetchRecord(pendingFetchItems[_i7]);\n      }\n    }\n  },\n\n\n  /**\n    Get the reference for the specified record.\n     Example\n     ```javascript\n    let userRef = store.getReference('user', 1);\n     // check if the user is loaded\n    let isLoaded = userRef.value() !== null;\n     // get the record of the reference (null if not yet available)\n    let user = userRef.value();\n     // get the identifier of the reference\n    if (userRef.remoteType() === 'id') {\n    let id = userRef.id();\n    }\n     // load user (via store.find)\n    userRef.load().then(...)\n     // or trigger a reload\n    userRef.reload().then(...)\n     // provide data for reference\n    userRef.push({ id: 1, username: '@user' }).then(function(user) {\n      userRef.value() === user;\n    });\n    ```\n     @method getReference\n    @param {String} modelName\n    @param {String|Integer} id\n    @since 2.5.0\n    @return {RecordReference}\n  */\n  getReference: function getReference(modelName, id) {\n    var normalizedModelName = normalizeModelName(modelName);\n\n    return this._internalModelForId(normalizedModelName, id).recordReference;\n  },\n\n\n  /**\n    Get a record by a given type and ID without triggering a fetch.\n     This method will synchronously return the record if it is available in the store,\n    otherwise it will return `null`. A record is available if it has been fetched earlier, or\n    pushed manually into the store.\n     See [findRecord](#method_findRecord) if you would like to request this record from the backend.\n     _Note: This is a synchronous method and does not return a promise._\n     ```js\n    let post = store.peekRecord('post', 1);\n     post.get('id'); // 1\n    ```\n     @since 1.13.0\n    @method peekRecord\n    @param {String} modelName\n    @param {String|Integer} id\n    @return {DS.Model|null} record\n  */\n  peekRecord: function peekRecord(modelName, id) {\n    (true && !(Ember.isPresent(modelName)) && Ember.assert('You need to pass a model name to the store\\'s peekRecord method', Ember.isPresent(modelName)));\n    (true && !(Ember.isPresent(modelName) && Ember.isPresent(id)) && Ember.assert('You need to pass both a model name and id to the store\\'s peekRecord method', Ember.isPresent(modelName) && Ember.isPresent(id)));\n    (true && !(typeof modelName === 'string') && Ember.assert('Passing classes to store methods has been removed. Please pass a dasherized string instead of ' + modelName, typeof modelName === 'string'));\n\n    var normalizedModelName = normalizeModelName(modelName);\n\n    if (this.hasRecordForId(normalizedModelName, id)) {\n      return this._internalModelForId(normalizedModelName, id).getRecord();\n    } else {\n      return null;\n    }\n  },\n\n\n  /**\n    This method is called by the record's `reload` method.\n     This method calls the adapter's `find` method, which returns a promise. When\n    **that** promise resolves, `reloadRecord` will resolve the promise returned\n    by the record's `reload`.\n     @method reloadRecord\n    @private\n    @param {DS.Model} internalModel\n    @return {Promise} promise\n  */\n  _reloadRecord: function _reloadRecord(internalModel) {\n    var id = internalModel.id,\n        modelName = internalModel.modelName;\n\n    var adapter = this.adapterFor(modelName);\n\n    (true && !(id) && Ember.assert('You cannot reload a record without an ID', id));\n    (true && !(adapter) && Ember.assert('You tried to reload a record but you have no adapter (for ' + modelName + ')', adapter));\n    (true && !(typeof adapter.findRecord === 'function' || typeof adapter.find === 'function') && Ember.assert('You tried to reload a record but your adapter does not implement \\'findRecord\\'', typeof adapter.findRecord === 'function' || typeof adapter.find === 'function'));\n\n\n    return this._scheduleFetch(internalModel);\n  },\n\n\n  /**\n   This method returns true if a record for a given modelName and id is already\n   loaded in the store. Use this function to know beforehand if a findRecord()\n   will result in a request or that it will be a cache hit.\n    Example\n    ```javascript\n   store.hasRecordForId('post', 1); // false\n   store.findRecord('post', 1).then(function() {\n     store.hasRecordForId('post', 1); // true\n   });\n   ```\n     @method hasRecordForId\n    @param {String} modelName\n    @param {(String|Integer)} id\n    @return {Boolean}\n  */\n  hasRecordForId: function hasRecordForId(modelName, id) {\n    (true && !(Ember.isPresent(modelName)) && Ember.assert('You need to pass a model name to the store\\'s hasRecordForId method', Ember.isPresent(modelName)));\n    (true && !(typeof modelName === 'string') && Ember.assert('Passing classes to store methods has been removed. Please pass a dasherized string instead of ' + modelName, typeof modelName === 'string'));\n\n\n    var normalizedModelName = normalizeModelName(modelName);\n\n    var trueId = coerceId(id);\n    var internalModel = this._internalModelsFor(normalizedModelName).get(trueId);\n\n    return !!internalModel && internalModel.isLoaded();\n  },\n\n\n  /**\n    Returns id record for a given type and ID. If one isn't already loaded,\n    it builds a new record and leaves it in the `empty` state.\n     @method recordForId\n    @private\n    @param {String} modelName\n    @param {(String|Integer)} id\n    @return {DS.Model} record\n  */\n  recordForId: function recordForId(modelName, id) {\n    (true && !(Ember.isPresent(modelName)) && Ember.assert('You need to pass a model name to the store\\'s recordForId method', Ember.isPresent(modelName)));\n    (true && !(typeof modelName === 'string') && Ember.assert('Passing classes to store methods has been removed. Please pass a dasherized string instead of ' + modelName, typeof modelName === 'string'));\n\n\n    return this._internalModelForId(modelName, id).getRecord();\n  },\n  _internalModelForId: function _internalModelForId(modelName, id) {\n    var trueId = coerceId(id);\n    var internalModel = this._internalModelsFor(modelName).get(trueId);\n\n    if (internalModel) {\n      if (internalModel.hasScheduledDestroy()) {\n        internalModel.destroySync();\n        return this._buildInternalModel(modelName, trueId);\n      } else {\n        return internalModel;\n      }\n    } else {\n      return this._buildInternalModel(modelName, trueId);\n    }\n  },\n  _internalModelDidReceiveRelationshipData: function _internalModelDidReceiveRelationshipData(modelName, id, relationshipData) {\n    this._relationshipsPayloads.push(modelName, id, relationshipData);\n  },\n  _internalModelDestroyed: function _internalModelDestroyed(internalModel) {\n    this._removeFromIdMap(internalModel);\n    this._relationshipsPayloads.unload(internalModel.modelName, internalModel.id);\n  },\n\n\n  /**\n    @method findMany\n    @private\n    @param {Array} internalModels\n    @return {Promise} promise\n  */\n  findMany: function findMany(internalModels) {\n    var finds = new Array(internalModels.length);\n\n    for (var i = 0; i < internalModels.length; i++) {\n      finds[i] = this._findEmptyInternalModel(internalModels[i]);\n    }\n\n    return Promise.all(finds);\n  },\n\n\n  /**\n    If a relationship was originally populated by the adapter as a link\n    (as opposed to a list of IDs), this method is called when the\n    relationship is fetched.\n     The link (which is usually a URL) is passed through unchanged, so the\n    adapter can make whatever request it wants.\n     The usual use-case is for the server to register a URL as a link, and\n    then use that URL in the future to make a request for the relationship.\n     @method findHasMany\n    @private\n    @param {InternalModel} internalModel\n    @param {any} link\n    @param {(Relationship)} relationship\n    @return {Promise} promise\n  */\n  findHasMany: function findHasMany(internalModel, link, relationship) {\n    var adapter = this.adapterFor(internalModel.modelName);\n\n    (true && !(adapter) && Ember.assert('You tried to load a hasMany relationship but you have no adapter (for ' + internalModel.modelName + ')', adapter));\n    (true && !(typeof adapter.findHasMany === 'function') && Ember.assert('You tried to load a hasMany relationship from a specified \\'link\\' in the original payload but your adapter does not implement \\'findHasMany\\'', typeof adapter.findHasMany === 'function'));\n\n\n    return _findHasMany(adapter, this, internalModel, link, relationship);\n  },\n\n\n  /**\n    @method findBelongsTo\n    @private\n    @param {InternalModel} internalModel\n    @param {any} link\n    @param {Relationship} relationship\n    @return {Promise} promise\n  */\n  findBelongsTo: function findBelongsTo(internalModel, link, relationship) {\n    var adapter = this.adapterFor(internalModel.modelName);\n\n    (true && !(adapter) && Ember.assert('You tried to load a belongsTo relationship but you have no adapter (for ' + internalModel.modelName + ')', adapter));\n    (true && !(typeof adapter.findBelongsTo === 'function') && Ember.assert('You tried to load a belongsTo relationship from a specified \\'link\\' in the original payload but your adapter does not implement \\'findBelongsTo\\'', typeof adapter.findBelongsTo === 'function'));\n\n\n    return _findBelongsTo(adapter, this, internalModel, link, relationship);\n  },\n\n\n  /**\n    This method delegates a query to the adapter. This is the one place where\n    adapter-level semantics are exposed to the application.\n     Each time this method is called a new request is made through the adapter.\n     Exposing queries this way seems preferable to creating an abstract query\n    language for all server-side queries, and then require all adapters to\n    implement them.\n     ---\n     If you do something like this:\n     ```javascript\n    store.query('person', { page: 1 });\n    ```\n     The call made to the server, using a Rails backend, will look something like this:\n     ```\n    Started GET \"/api/v1/person?page=1\"\n    Processing by Api::V1::PersonsController#index as HTML\n    Parameters: { \"page\"=>\"1\" }\n    ```\n     ---\n     If you do something like this:\n     ```javascript\n    store.query('person', { ids: [1, 2, 3] });\n    ```\n     The call to the server, using a Rails backend, will look something like this:\n     ```\n    Started GET \"/api/v1/person?ids%5B%5D=1&ids%5B%5D=2&ids%5B%5D=3\"\n    Processing by Api::V1::PersonsController#index as HTML\n    Parameters: { \"ids\" => [\"1\", \"2\", \"3\"] }\n    ```\n     This method returns a promise, which is resolved with an\n    [`AdapterPopulatedRecordArray`](https://emberjs.com/api/data/classes/DS.AdapterPopulatedRecordArray.html)\n    once the server returns.\n     @since 1.13.0\n    @method query\n    @param {String} modelName\n    @param {any} query an opaque query to be used by the adapter\n    @return {Promise} promise\n  */\n  query: function query(modelName, _query2) {\n    (true && !(Ember.isPresent(modelName)) && Ember.assert('You need to pass a model name to the store\\'s query method', Ember.isPresent(modelName)));\n    (true && !(_query2) && Ember.assert('You need to pass a query hash to the store\\'s query method', _query2));\n    (true && !(typeof modelName === 'string') && Ember.assert('Passing classes to store methods has been removed. Please pass a dasherized string instead of ' + modelName, typeof modelName === 'string'));\n\n\n    var normalizedModelName = normalizeModelName(modelName);\n    return this._query(normalizedModelName, _query2);\n  },\n  _query: function _query$$1(modelName, query, array) {\n    (true && !(Ember.isPresent(modelName)) && Ember.assert('You need to pass a model name to the store\\'s query method', Ember.isPresent(modelName)));\n    (true && !(query) && Ember.assert('You need to pass a query hash to the store\\'s query method', query));\n    (true && !(typeof modelName === 'string') && Ember.assert('Passing classes to store methods has been removed. Please pass a dasherized string instead of ' + modelName, typeof modelName === 'string'));\n\n    var adapter = this.adapterFor(modelName);\n    (true && !(adapter) && Ember.assert('You tried to load a query but you have no adapter (for ' + modelName + ')', adapter));\n    (true && !(typeof adapter.query === 'function') && Ember.assert('You tried to load a query but your adapter does not implement \\'query\\'', typeof adapter.query === 'function'));\n\n\n    var pA = promiseArray(_query(adapter, this, modelName, query, array));\n\n    return pA;\n  },\n\n\n  /**\n    This method makes a request for one record, where the `id` is not known\n    beforehand (if the `id` is known, use [`findRecord`](#method_findRecord)\n    instead).\n     This method can be used when it is certain that the server will return a\n    single object for the primary data.\n     Each time this method is called a new request is made through the adapter.\n     Let's assume our API provides an endpoint for the currently logged in user\n    via:\n     ```\n    // GET /api/current_user\n    {\n      user: {\n        id: 1234,\n        username: 'admin'\n      }\n    }\n    ```\n     Since the specific `id` of the `user` is not known beforehand, we can use\n    `queryRecord` to get the user:\n     ```javascript\n    store.queryRecord('user', {}).then(function(user) {\n      let username = user.get('username');\n      console.log(`Currently logged in as ${username}`);\n    });\n    ```\n     The request is made through the adapters' `queryRecord`:\n     ```app/adapters/user.js\n    import $ from 'jquery';\n    import DS from 'ember-data';\n     export default DS.Adapter.extend({\n      queryRecord(modelName, query) {\n        return $.getJSON('/api/current_user');\n      }\n    });\n    ```\n     Note: the primary use case for `store.queryRecord` is when a single record\n    is queried and the `id` is not known beforehand. In all other cases\n    `store.query` and using the first item of the array is likely the preferred\n    way:\n     ```\n    // GET /users?username=unique\n    {\n      data: [{\n        id: 1234,\n        type: 'user',\n        attributes: {\n          username: \"unique\"\n        }\n      }]\n    }\n    ```\n     ```javascript\n    store.query('user', { username: 'unique' }).then(function(users) {\n      return users.get('firstObject');\n    }).then(function(user) {\n      let id = user.get('id');\n    });\n    ```\n     This method returns a promise, which resolves with the found record.\n     If the adapter returns no data for the primary data of the payload, then\n    `queryRecord` resolves with `null`:\n     ```\n    // GET /users?username=unique\n    {\n      data: null\n    }\n    ```\n     ```javascript\n    store.queryRecord('user', { username: 'unique' }).then(function(user) {\n      console.log(user); // null\n    });\n    ```\n     @since 1.13.0\n    @method queryRecord\n    @param {String} modelName\n    @param {any} query an opaque query to be used by the adapter\n    @return {Promise} promise which resolves with the found record or `null`\n  */\n  queryRecord: function queryRecord(modelName, query) {\n    (true && !(Ember.isPresent(modelName)) && Ember.assert('You need to pass a model name to the store\\'s queryRecord method', Ember.isPresent(modelName)));\n    (true && !(query) && Ember.assert('You need to pass a query hash to the store\\'s queryRecord method', query));\n    (true && !(typeof modelName === 'string') && Ember.assert('Passing classes to store methods has been removed. Please pass a dasherized string instead of ' + modelName, typeof modelName === 'string'));\n\n\n    var normalizedModelName = normalizeModelName(modelName);\n\n    var adapter = this.adapterFor(normalizedModelName);\n\n    (true && !(adapter) && Ember.assert('You tried to make a query but you have no adapter (for ' + normalizedModelName + ')', adapter));\n    (true && !(typeof adapter.queryRecord === 'function') && Ember.assert('You tried to make a query but your adapter does not implement \\'queryRecord\\'', typeof adapter.queryRecord === 'function'));\n\n\n    return promiseObject(_queryRecord(adapter, this, modelName, query).then(function (internalModel) {\n      // the promise returned by store.queryRecord is expected to resolve with\n      // an instance of DS.Model\n      if (internalModel) {\n        return internalModel.getRecord();\n      }\n\n      return null;\n    }));\n  },\n\n\n  /**\n    `findAll` asks the adapter's `findAll` method to find the records for the\n    given type, and returns a promise which will resolve with all records of\n    this type present in the store, even if the adapter only returns a subset\n    of them.\n     ```app/routes/authors.js\n    import Route from '@ember/routing/route';\n     export default Route.extend({\n      model(params) {\n        return this.store.findAll('author');\n      }\n    });\n    ```\n     _When_ the returned promise resolves depends on the reload behavior,\n    configured via the passed `options` hash and the result of the adapter's\n    `shouldReloadAll` method.\n     ### Reloading\n     If `{ reload: true }` is passed or `adapter.shouldReloadAll` evaluates to\n    `true`, then the returned promise resolves once the adapter returns data,\n    regardless if there are already records in the store:\n     ```js\n    store.push({\n      data: {\n        id: 'first',\n        type: 'author'\n      }\n    });\n     // adapter#findAll resolves with\n    // [\n    //   {\n    //     id: 'second',\n    //     type: 'author'\n    //   }\n    // ]\n    store.findAll('author', { reload: true }).then(function(authors) {\n      authors.getEach('id'); // ['first', 'second']\n    });\n    ```\n     If no reload is indicated via the abovementioned ways, then the promise\n    immediately resolves with all the records currently loaded in the store.\n     ### Background Reloading\n     Optionally, if `adapter.shouldBackgroundReloadAll` evaluates to `true`,\n    then a background reload is started. Once this resolves, the array with\n    which the promise resolves, is updated automatically so it contains all the\n    records in the store:\n     ```app/adapters/application.js\n    import DS from 'ember-data';\n    export default DS.Adapter.extend({\n      shouldReloadAll(store, snapshotsArray) {\n        return false;\n      },\n       shouldBackgroundReloadAll(store, snapshotsArray) {\n        return true;\n      }\n    });\n     // ...\n     store.push({\n      data: {\n        id: 'first',\n        type: 'author'\n      }\n    });\n     let allAuthors;\n    store.findAll('author').then(function(authors) {\n      authors.getEach('id'); // ['first']\n       allAuthors = authors;\n    });\n     // later, once adapter#findAll resolved with\n    // [\n    //   {\n    //     id: 'second',\n    //     type: 'author'\n    //   }\n    // ]\n     allAuthors.getEach('id'); // ['first', 'second']\n    ```\n     If you would like to force or prevent background reloading, you can set a\n    boolean value for `backgroundReload` in the options object for\n    `findAll`.\n     ```app/routes/post/edit.js\n    import Route from '@ember/routing/route';\n     export default Route.extend({\n      model() {\n        return this.store.findAll('post', { backgroundReload: false });\n      }\n    });\n    ```\n     If you pass an object on the `adapterOptions` property of the options\n    argument it will be passed to you adapter via the `snapshotRecordArray`\n     ```app/routes/posts.js\n    import Route from '@ember/routing/route';\n     export default Route.extend({\n      model(params) {\n        return this.store.findAll('post', {\n          adapterOptions: { subscribe: false }\n        });\n      }\n    });\n    ```\n     ```app/adapters/post.js\n    import MyCustomAdapter from './custom-adapter';\n     export default MyCustomAdapter.extend({\n      findAll(store, type, sinceToken, snapshotRecordArray) {\n        if (snapshotRecordArray.adapterOptions.subscribe) {\n          // ...\n        }\n        // ...\n      }\n    });\n    ```\n     See [peekAll](#method_peekAll) to get an array of current records in the\n    store, without waiting until a reload is finished.\n     ### Retrieving Related Model Records\n     If you use an adapter such as Ember's default\n    [`JSONAPIAdapter`](https://emberjs.com/api/data/classes/DS.JSONAPIAdapter.html)\n    that supports the [JSON API specification](http://jsonapi.org/) and if your server\n    endpoint supports the use of an\n    ['include' query parameter](http://jsonapi.org/format/#fetching-includes),\n    you can use `findAll()` to automatically retrieve additional records related to\n    those requested by supplying an `include` parameter in the `options` object.\n     For example, given a `post` model that has a `hasMany` relationship with a `comment`\n    model, when we retrieve all of the post records we can have the server also return\n    all of the posts' comments in the same request:\n     ```app/routes/posts.js\n    import Route from '@ember/routing/route';\n     export default Route.extend({\n      model() {\n        return this.store.findAll('post', { include: 'comments' });\n      }\n    });\n     ```\n    Multiple relationships can be requested using an `include` parameter consisting of a\n    comma-separated list (without white-space) while nested relationships can be specified\n    using a dot-separated sequence of relationship names. So to request both the posts'\n    comments and the authors of those comments the request would look like this:\n     ```app/routes/posts.js\n    import Route from '@ember/routing/route';\n     export default Route.extend({\n      model() {\n        return this.store.findAll('post', { include: 'comments,comments.author' });\n      }\n    });\n     ```\n     See [query](#method_query) to only get a subset of records from the server.\n     @since 1.13.0\n    @method findAll\n    @param {String} modelName\n    @param {Object} options\n    @return {Promise} promise\n  */\n  findAll: function findAll(modelName, options) {\n    (true && !(Ember.isPresent(modelName)) && Ember.assert('You need to pass a model name to the store\\'s findAll method', Ember.isPresent(modelName)));\n    (true && !(typeof modelName === 'string') && Ember.assert('Passing classes to store methods has been removed. Please pass a dasherized string instead of ' + modelName, typeof modelName === 'string'));\n\n    var normalizedModelName = normalizeModelName(modelName);\n    var fetch = this._fetchAll(normalizedModelName, this.peekAll(normalizedModelName), options);\n\n    return fetch;\n  },\n\n\n  /**\n    @method _fetchAll\n    @private\n    @param {DS.Model} modelName\n    @param {DS.RecordArray} array\n    @return {Promise} promise\n  */\n  _fetchAll: function _fetchAll(modelName, array) {\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n    var adapter = this.adapterFor(modelName);\n    var sinceToken = this._internalModelsFor(modelName).metadata.since;\n\n    (true && !(adapter) && Ember.assert('You tried to load all records but you have no adapter (for ' + modelName + ')', adapter));\n    (true && !(typeof adapter.findAll === 'function') && Ember.assert('You tried to load all records but your adapter does not implement \\'findAll\\'', typeof adapter.findAll === 'function'));\n\n\n    if (options.reload) {\n      Ember.set(array, 'isUpdating', true);\n      return promiseArray(_findAll(adapter, this, modelName, sinceToken, options));\n    }\n\n    var snapshotArray = array._createSnapshot(options);\n\n    if (adapter.shouldReloadAll(this, snapshotArray)) {\n      Ember.set(array, 'isUpdating', true);\n      return promiseArray(_findAll(adapter, this, modelName, sinceToken, options));\n    }\n\n    if (options.backgroundReload === false) {\n      return promiseArray(Promise.resolve(array));\n    }\n\n    if (options.backgroundReload || adapter.shouldBackgroundReloadAll(this, snapshotArray)) {\n      Ember.set(array, 'isUpdating', true);\n      _findAll(adapter, this, modelName, sinceToken, options);\n    }\n\n    return promiseArray(Promise.resolve(array));\n  },\n\n\n  /**\n    @method _didUpdateAll\n    @param {String} modelName\n    @private\n  */\n  _didUpdateAll: function _didUpdateAll(modelName) {\n    this.recordArrayManager._didUpdateAll(modelName);\n  },\n  didUpdateAll: function didUpdateAll(modelName) {\n    (true && !(false) && Ember.deprecate('didUpdateAll was documented as private and will be removed in the next version of Ember Data.', false, { id: 'ember-data.didUpdateAll', until: '2.17.0' }));\n\n    return this._didUpdateAll(modelName);\n  },\n\n\n  /**\n    This method returns a filtered array that contains all of the\n    known records for a given type in the store.\n     Note that because it's just a filter, the result will contain any\n    locally created records of the type, however, it will not make a\n    request to the backend to retrieve additional records. If you\n    would like to request all the records from the backend please use\n    [store.findAll](#method_findAll).\n     Also note that multiple calls to `peekAll` for a given type will always\n    return the same `RecordArray`.\n     Example\n     ```javascript\n    let localPosts = store.peekAll('post');\n    ```\n     @since 1.13.0\n    @method peekAll\n    @param {String} modelName\n    @return {DS.RecordArray}\n  */\n  peekAll: function peekAll(modelName) {\n    (true && !(Ember.isPresent(modelName)) && Ember.assert('You need to pass a model name to the store\\'s peekAll method', Ember.isPresent(modelName)));\n    (true && !(typeof modelName === 'string') && Ember.assert('Passing classes to store methods has been removed. Please pass a dasherized string instead of ' + modelName, typeof modelName === 'string'));\n\n    var normalizedModelName = normalizeModelName(modelName);\n    return this.recordArrayManager.liveRecordArrayFor(normalizedModelName);\n  },\n\n\n  /**\n    This method unloads all records in the store.\n    It schedules unloading to happen during the next run loop.\n     Optionally you can pass a type which unload all records for a given type.\n     ```javascript\n    store.unloadAll();\n    store.unloadAll('post');\n    ```\n     @method unloadAll\n    @param {String} modelName\n  */\n  unloadAll: function unloadAll(modelName) {\n    (true && !(!modelName || typeof modelName === 'string') && Ember.assert('Passing classes to store methods has been removed. Please pass a dasherized string instead of ' + modelName, !modelName || typeof modelName === 'string'));\n\n\n    if (arguments.length === 0) {\n      this._identityMap.clear();\n    } else {\n      var normalizedModelName = normalizeModelName(modelName);\n      this._internalModelsFor(normalizedModelName).clear();\n    }\n  },\n\n\n  /**\n    Takes a type and filter function, and returns a live RecordArray that\n    remains up to date as new records are loaded into the store or created\n    locally.\n     The filter function takes a materialized record, and returns true\n    if the record should be included in the filter and false if it should\n    not.\n     Example\n     ```javascript\n    store.filter('post', function(post) {\n      return post.get('unread');\n    });\n    ```\n     The filter function is called once on all records for the type when\n    it is created, and then once on each newly loaded or created record.\n     If any of a record's properties change, or if it changes state, the\n    filter function will be invoked again to determine whether it should\n    still be in the array.\n     Optionally you can pass a query, which is the equivalent of calling\n    [query](#method_query) with that same query, to fetch additional records\n    from the server. The results returned by the server could then appear\n    in the filter if they match the filter function.\n     The query itself is not used to filter records, it's only sent to your\n    server for you to be able to do server-side filtering. The filter\n    function will be applied on the returned results regardless.\n     Example\n     ```javascript\n    store.filter('post', { unread: true }, function(post) {\n      return post.get('unread');\n    }).then(function(unreadPosts) {\n      unreadPosts.get('length'); // 5\n      let unreadPost = unreadPosts.objectAt(0);\n      unreadPost.set('unread', false);\n      unreadPosts.get('length'); // 4\n    });\n    ```\n     @method filter\n    @private\n    @param {String} modelName\n    @param {Object} query optional query\n    @param {Function} filter\n    @return {DS.PromiseArray}\n    @deprecated\n  */\n  filter: function filter(modelName, query, _filter) {\n    (true && !(Ember.isPresent(modelName)) && Ember.assert('You need to pass a model name to the store\\'s filter method', Ember.isPresent(modelName)));\n    (true && !(typeof modelName === 'string') && Ember.assert('Passing classes to store methods has been removed. Please pass a dasherized string instead of ' + modelName, typeof modelName === 'string'));\n\n\n    if (!ENV.ENABLE_DS_FILTER) {\n      (true && !(false) && Ember.assert('The filter API has been moved to a plugin. To enable store.filter using an environment flag, or to use an alternative, you can visit the ember-data-filter addon page. https://github.com/ember-data/ember-data-filter', false));\n    }\n\n    var promise = void 0;\n    var length = arguments.length;\n    var array = void 0;\n    var hasQuery = length === 3;\n\n    var normalizedModelName = normalizeModelName(modelName);\n\n    // allow an optional server query\n    if (hasQuery) {\n      promise = this.query(normalizedModelName, query);\n    } else if (arguments.length === 2) {\n      _filter = query;\n    }\n\n    if (hasQuery) {\n      array = this.recordArrayManager.createFilteredRecordArray(normalizedModelName, _filter, query);\n    } else {\n      array = this.recordArrayManager.createFilteredRecordArray(normalizedModelName, _filter);\n    }\n\n    promise = promise || Promise.resolve(array);\n\n    return promiseArray(promise.then(function () {\n      return array;\n    }, null, 'DS: Store#filter of ' + normalizedModelName));\n  },\n\n\n  /**\n    This method has been deprecated and is an alias for store.hasRecordForId, which should\n    be used instead.\n     @deprecated\n    @method recordIsLoaded\n    @param {String} modelName\n    @param {string} id\n    @return {boolean}\n  */\n  recordIsLoaded: function recordIsLoaded(modelName, id) {\n    (true && !(false) && Ember.deprecate('Use of recordIsLoaded is deprecated, use hasRecordForId instead.', false, {\n      id: 'ds.store.recordIsLoaded',\n      until: '3.0'\n    }));\n\n    return this.hasRecordForId(modelName, id);\n  },\n\n\n  // ..............\n  // . PERSISTING .\n  // ..............\n\n  /**\n    This method is called by `record.save`, and gets passed a\n    resolver for the promise that `record.save` returns.\n     It schedules saving to happen at the end of the run loop.\n     @method scheduleSave\n    @private\n    @param {InternalModel} internalModel\n    @param {Resolver} resolver\n    @param {Object} options\n  */\n  scheduleSave: function scheduleSave(internalModel, resolver, options) {\n    var snapshot = internalModel.createSnapshot(options);\n    internalModel.flushChangedAttributes();\n    internalModel.adapterWillCommit();\n    this._pendingSave.push({\n      snapshot: snapshot,\n      resolver: resolver\n    });\n    Ember.run.once(this, this.flushPendingSave);\n  },\n\n\n  /**\n    This method is called at the end of the run loop, and\n    flushes any records passed into `scheduleSave`\n     @method flushPendingSave\n    @private\n  */\n  flushPendingSave: function flushPendingSave() {\n    var pending = this._pendingSave.slice();\n    this._pendingSave = [];\n\n    for (var i = 0, j = pending.length; i < j; i++) {\n      var pendingItem = pending[i];\n      var snapshot = pendingItem.snapshot;\n      var resolver = pendingItem.resolver;\n      var internalModel = snapshot._internalModel;\n      var adapter = this.adapterFor(internalModel.modelName);\n      var operation = void 0;\n\n      if (internalModel.currentState.stateName === 'root.deleted.saved') {\n        resolver.resolve();\n        continue;\n      } else if (internalModel.isNew()) {\n        operation = 'createRecord';\n      } else if (internalModel.isDeleted()) {\n        operation = 'deleteRecord';\n      } else {\n        operation = 'updateRecord';\n      }\n\n      resolver.resolve(_commit(adapter, this, operation, snapshot));\n    }\n  },\n\n\n  /**\n    This method is called once the promise returned by an\n    adapter's `createRecord`, `updateRecord` or `deleteRecord`\n    is resolved.\n     If the data provides a server-generated ID, it will\n    update the record and the store's indexes.\n     @method didSaveRecord\n    @private\n    @param {InternalModel} internalModel the in-flight internal model\n    @param {Object} data optional data (see above)\n  */\n  didSaveRecord: function didSaveRecord(internalModel, dataArg) {\n    var data = void 0;\n    if (dataArg) {\n      data = dataArg.data;\n    }\n    if (data) {\n      // normalize relationship IDs into records\n      this.updateId(internalModel, data);\n      this._setupRelationshipsForModel(internalModel, data);\n    } else {\n      (true && !(internalModel.id) && Ember.assert('Your ' + internalModel.modelName + ' record was saved to the server, but the response does not have an id and no id has been set client side. Records must have ids. Please update the server response to provide an id in the response or generate the id on the client side either before saving the record or while normalizing the response.', internalModel.id));\n    }\n\n    //We first make sure the primary data has been updated\n    //TODO try to move notification to the user to the end of the runloop\n    internalModel.adapterDidCommit(data);\n  },\n\n\n  /**\n    This method is called once the promise returned by an\n    adapter's `createRecord`, `updateRecord` or `deleteRecord`\n    is rejected with a `DS.InvalidError`.\n     @method recordWasInvalid\n    @private\n    @param {InternalModel} internalModel\n    @param {Object} errors\n  */\n  recordWasInvalid: function recordWasInvalid(internalModel, errors) {\n    internalModel.adapterDidInvalidate(errors);\n  },\n\n\n  /**\n    This method is called once the promise returned by an\n    adapter's `createRecord`, `updateRecord` or `deleteRecord`\n    is rejected (with anything other than a `DS.InvalidError`).\n     @method recordWasError\n    @private\n    @param {InternalModel} internalModel\n    @param {Error} error\n  */\n  recordWasError: function recordWasError(internalModel, error) {\n    internalModel.adapterDidError(error);\n  },\n\n\n  /**\n    When an adapter's `createRecord`, `updateRecord` or `deleteRecord`\n    resolves with data, this method extracts the ID from the supplied\n    data.\n     @method updateId\n    @private\n    @param {InternalModel} internalModel\n    @param {Object} data\n  */\n  updateId: function updateId(internalModel, data) {\n    var oldId = internalModel.id;\n    var modelName = internalModel.modelName;\n    var id = coerceId(data.id);\n\n    // ID absolutely can't be missing if the oldID is empty (missing Id in response for a new record)\n    (true && !(!(id === null && oldId === null)) && Ember.assert('\\'' + modelName + '\\' was saved to the server, but the response does not have an id and your record does not either.', !(id === null && oldId === null)));\n\n    // ID absolutely can't be different than oldID if oldID is not null\n\n    (true && !(!(oldId !== null && id !== oldId)) && Ember.assert('\\'' + modelName + ':' + oldId + '\\' was saved to the server, but the response returned the new id \\'' + id + '\\'. The store cannot assign a new id to a record that already has an id.', !(oldId !== null && id !== oldId)));\n\n    // ID can be null if oldID is not null (altered ID in response for a record)\n    // however, this is more than likely a developer error.\n\n    if (oldId !== null && id === null) {\n      (true && Ember.warn('Your ' + modelName + ' record was saved to the server, but the response does not have an id.', !(oldId !== null && id === null)));\n\n      return;\n    }\n\n    var existingInternalModel = this._existingInternalModelForId(modelName, id);\n\n    (true && !(Ember.isNone(existingInternalModel) || existingInternalModel === internalModel) && Ember.assert('\\'' + modelName + '\\' was saved to the server, but the response returned the new id \\'' + id + '\\', which has already been used with another record.\\'', Ember.isNone(existingInternalModel) || existingInternalModel === internalModel));\n\n\n    this._internalModelsFor(internalModel.modelName).set(id, internalModel);\n\n    internalModel.setId(id);\n  },\n\n\n  /**\n    Returns a map of IDs to client IDs for a given modelName.\n     @method _internalModelsFor\n    @private\n    @param {String} modelName\n    @return {Object} recordMap\n  */\n  _internalModelsFor: function _internalModelsFor(modelName) {\n    return this._identityMap.retrieve(modelName);\n  },\n\n\n  // ................\n  // . LOADING DATA .\n  // ................\n\n  /**\n    This internal method is used by `push`.\n     @method _load\n    @private\n    @param {Object} data\n  */\n  _load: function _load(data) {\n    var modelName = normalizeModelName(data.type);\n    var internalModel = this._internalModelForId(modelName, data.id);\n\n    var isUpdate = internalModel.currentState.isEmpty === false;\n\n    internalModel.setupData(data);\n\n    if (isUpdate) {\n      this.recordArrayManager.recordDidChange(internalModel);\n    } else {\n      this.recordArrayManager.recordWasLoaded(internalModel);\n    }\n\n    return internalModel;\n  },\n\n\n  /*\n    In case someone defined a relationship to a mixin, for example:\n    ```\n      let Comment = DS.Model.extend({\n        owner: belongsTo('commentable'. { polymorphic: true })\n      });\n      let Commentable = Ember.Mixin.create({\n        comments: hasMany('comment')\n      });\n    ```\n    we want to look up a Commentable class which has all the necessary\n    relationship metadata. Thus, we look up the mixin and create a mock\n    DS.Model, so we can access the relationship CPs of the mixin (`comments`)\n    in this case\n     @private\n  */\n  _modelForMixin: function _modelForMixin(normalizedModelName) {\n    // container.registry = 2.1\n    // container._registry = 1.11 - 2.0\n    // container = < 1.11\n    var owner = getOwner(this);\n    var mixin = void 0;\n\n    if (owner.factoryFor) {\n      var MaybeMixin = owner.factoryFor('mixin:' + normalizedModelName);\n      mixin = MaybeMixin && MaybeMixin.class;\n    } else {\n      mixin = owner._lookupFactory('mixin:' + normalizedModelName);\n    }\n\n    if (mixin) {\n      var ModelForMixin = Model.extend(mixin);\n      ModelForMixin.reopenClass({\n        __isMixin: true,\n        __mixin: mixin\n      });\n\n      //Cache the class as a model\n      owner.register('model:' + normalizedModelName, ModelForMixin);\n    }\n\n    return this.modelFactoryFor(normalizedModelName);\n  },\n\n\n  /**\n    Returns the model class for the particular `modelName`.\n     The class of a model might be useful if you want to get a list of all the\n    relationship names of the model, see\n    [`relationshipNames`](https://emberjs.com/api/data/classes/DS.Model.html#property_relationshipNames)\n    for example.\n     @method modelFor\n    @param {String} modelName\n    @return {DS.Model}\n  */\n  modelFor: function modelFor(modelName) {\n    (true && !(Ember.isPresent(modelName)) && Ember.assert('You need to pass a model name to the store\\'s modelFor method', Ember.isPresent(modelName)));\n    (true && !(typeof modelName === 'string') && Ember.assert('Passing classes to store methods has been removed. Please pass a dasherized string instead of ' + modelName, typeof modelName === 'string'));\n\n\n    var normalizedModelName = normalizeModelName(modelName);\n\n    return this._modelFor(normalizedModelName);\n  },\n\n\n  /*\n    @private\n   */\n  _modelFor: function _modelFor(modelName) {\n    var maybeFactory = this._modelFactoryFor(modelName);\n    // for factorFor factory/class split\n    return maybeFactory.class ? maybeFactory.class : maybeFactory;\n  },\n  _modelFactoryFor: function _modelFactoryFor(modelName) {\n    var factory = this._modelFactoryCache[modelName];\n\n    if (!factory) {\n      factory = this.modelFactoryFor(modelName);\n\n      if (!factory) {\n        //Support looking up mixins as base types for polymorphic relationships\n        factory = this._modelForMixin(modelName);\n      }\n      if (!factory) {\n        throw new Ember.Error('No model was found for \\'' + modelName + '\\'');\n      }\n\n      // interopt with the future\n      var klass = getOwner(this).factoryFor ? factory.class : factory;\n\n      (true && !(klass.isModel) && Ember.assert('\\'' + Ember.inspect(klass) + '\\' does not appear to be an ember-data model', klass.isModel));\n\n      // TODO: deprecate this\n\n      klass.modelName = klass.modelName || modelName;\n\n      this._modelFactoryCache[modelName] = factory;\n    }\n\n    return factory;\n  },\n\n\n  /*\n   @private\n   */\n  modelFactoryFor: function modelFactoryFor(modelName) {\n    (true && !(Ember.isPresent(modelName)) && Ember.assert('You need to pass a model name to the store\\'s modelFactoryFor method', Ember.isPresent(modelName)));\n    (true && !(typeof modelName === 'string') && Ember.assert('Passing classes to store methods has been removed. Please pass a dasherized string instead of ' + modelName, typeof modelName === 'string'));\n\n\n    var normalizedModelName = normalizeModelName(modelName);\n    var owner = getOwner(this);\n\n    if (owner.factoryFor) {\n      return owner.factoryFor('model:' + normalizedModelName);\n    } else {\n      return owner._lookupFactory('model:' + normalizedModelName);\n    }\n  },\n\n\n  /**\n    Push some data for a given type into the store.\n     This method expects normalized [JSON API](http://jsonapi.org/) document. This means you have to follow [JSON API specification](http://jsonapi.org/format/) with few minor adjustments:\n    - record's `type` should always be in singular, dasherized form\n    - members (properties) should be camelCased\n     [Your primary data should be wrapped inside `data` property](http://jsonapi.org/format/#document-top-level):\n     ```js\n    store.push({\n      data: {\n        // primary data for single record of type `Person`\n        id: '1',\n        type: 'person',\n        attributes: {\n          firstName: 'Daniel',\n          lastName: 'Kmak'\n        }\n      }\n    });\n    ```\n     [Demo.](http://ember-twiddle.com/fb99f18cd3b4d3e2a4c7)\n     `data` property can also hold an array (of records):\n     ```js\n    store.push({\n      data: [\n        // an array of records\n        {\n          id: '1',\n          type: 'person',\n          attributes: {\n            firstName: 'Daniel',\n            lastName: 'Kmak'\n          }\n        },\n        {\n          id: '2',\n          type: 'person',\n          attributes: {\n            firstName: 'Tom',\n            lastName: 'Dale'\n          }\n        }\n      ]\n    });\n    ```\n     [Demo.](http://ember-twiddle.com/69cdbeaa3702159dc355)\n     There are some typical properties for `JSONAPI` payload:\n    * `id` - mandatory, unique record's key\n    * `type` - mandatory string which matches `model`'s dasherized name in singular form\n    * `attributes` - object which holds data for record attributes - `DS.attr`'s declared in model\n    * `relationships` - object which must contain any of the following properties under each relationships' respective key (example path is `relationships.achievements.data`):\n      - [`links`](http://jsonapi.org/format/#document-links)\n      - [`data`](http://jsonapi.org/format/#document-resource-object-linkage) - place for primary data\n      - [`meta`](http://jsonapi.org/format/#document-meta) - object which contains meta-information about relationship\n     For this model:\n     ```app/models/person.js\n    import DS from 'ember-data';\n     export default DS.Model.extend({\n      firstName: DS.attr('string'),\n      lastName: DS.attr('string'),\n       children: DS.hasMany('person')\n    });\n    ```\n     To represent the children as IDs:\n     ```js\n    {\n      data: {\n        id: '1',\n        type: 'person',\n        attributes: {\n          firstName: 'Tom',\n          lastName: 'Dale'\n        },\n        relationships: {\n          children: {\n            data: [\n              {\n                id: '2',\n                type: 'person'\n              },\n              {\n                id: '3',\n                type: 'person'\n              },\n              {\n                id: '4',\n                type: 'person'\n              }\n            ]\n          }\n        }\n      }\n    }\n    ```\n     [Demo.](http://ember-twiddle.com/343e1735e034091f5bde)\n     To represent the children relationship as a URL:\n     ```js\n    {\n      data: {\n        id: '1',\n        type: 'person',\n        attributes: {\n          firstName: 'Tom',\n          lastName: 'Dale'\n        },\n        relationships: {\n          children: {\n            links: {\n              related: '/people/1/children'\n            }\n          }\n        }\n      }\n    }\n    ```\n     If you're streaming data or implementing an adapter, make sure\n    that you have converted the incoming data into this form. The\n    store's [normalize](#method_normalize) method is a convenience\n    helper for converting a json payload into the form Ember Data\n    expects.\n     ```js\n    store.push(store.normalize('person', data));\n    ```\n     This method can be used both to push in brand new\n    records, as well as to update existing records.\n     @method push\n    @param {Object} data\n    @return {DS.Model|Array} the record(s) that was created or\n      updated.\n  */\n  push: function push(data) {\n    var pushed = this._push(data);\n\n    if (Array.isArray(pushed)) {\n      var records = pushed.map(function (internalModel) {\n        return internalModel.getRecord();\n      });\n\n      return records;\n    }\n\n    if (pushed === null) {\n      return null;\n    }\n\n    var record = pushed.getRecord();\n\n    return record;\n  },\n\n\n  /*\n    Push some data in the form of a json-api document into the store,\n    without creating materialized records.\n     @method _push\n    @private\n    @param {Object} jsonApiDoc\n    @return {DS.InternalModel|Array<DS.InternalModel>} pushed InternalModel(s)\n  */\n  _push: function _push(jsonApiDoc) {\n    var _this = this;\n\n    var internalModelOrModels = this._backburner.join(function () {\n      var included = jsonApiDoc.included;\n      var i = void 0,\n          length = void 0;\n\n      if (included) {\n        for (i = 0, length = included.length; i < length; i++) {\n          _this._pushInternalModel(included[i]);\n        }\n      }\n\n      if (Array.isArray(jsonApiDoc.data)) {\n        length = jsonApiDoc.data.length;\n        var internalModels = new Array(length);\n\n        for (i = 0; i < length; i++) {\n          internalModels[i] = _this._pushInternalModel(jsonApiDoc.data[i]);\n        }\n        return internalModels;\n      }\n\n      if (jsonApiDoc.data === null) {\n        return null;\n      }\n\n      (true && !(Ember.typeOf(jsonApiDoc.data) === 'object') && Ember.assert('Expected an object in the \\'data\\' property in a call to \\'push\\' for ' + jsonApiDoc.type + ', but was ' + Ember.typeOf(jsonApiDoc.data), Ember.typeOf(jsonApiDoc.data) === 'object'));\n\n\n      return _this._pushInternalModel(jsonApiDoc.data);\n    });\n\n    return internalModelOrModels;\n  },\n  _hasModelFor: function _hasModelFor(modelName) {\n    var owner = getOwner(this);\n    modelName = normalizeModelName(modelName);\n\n    if (owner.factoryFor) {\n      return !!owner.factoryFor('model:' + modelName);\n    } else {\n      return !!owner._lookupFactory('model:' + modelName);\n    }\n  },\n  _pushInternalModel: function _pushInternalModel(data) {\n    var modelName = data.type;\n    (true && !(data.id !== null && data.id !== undefined && data.id !== '') && Ember.assert('You must include an \\'id\\' for ' + modelName + ' in an object passed to \\'push\\'', data.id !== null && data.id !== undefined && data.id !== ''));\n    (true && !(this._hasModelFor(modelName)) && Ember.assert('You tried to push data with a type \\'' + modelName + '\\' but no model could be found with that name.', this._hasModelFor(modelName)));\n\n\n    {\n      // If ENV.DS_WARN_ON_UNKNOWN_KEYS is set to true and the payload\n      // contains unknown attributes or relationships, log a warning.\n\n      if (ENV.DS_WARN_ON_UNKNOWN_KEYS) {\n        var modelClass = this._modelFor(modelName);\n\n        // Check unknown attributes\n        var unknownAttributes = Object.keys(data.attributes || {}).filter(function (key) {\n          return !Ember.get(modelClass, 'fields').has(key);\n        });\n        var unknownAttributesMessage = 'The payload for \\'' + modelName + '\\' contains these unknown attributes: ' + unknownAttributes + '. Make sure they\\'ve been defined in your model.';\n        (true && Ember.warn(unknownAttributesMessage, unknownAttributes.length === 0, { id: 'ds.store.unknown-keys-in-payload' }));\n\n        // Check unknown relationships\n\n        var unknownRelationships = Object.keys(data.relationships || {}).filter(function (key) {\n          return !Ember.get(modelClass, 'fields').has(key);\n        });\n        var unknownRelationshipsMessage = 'The payload for \\'' + modelName + '\\' contains these unknown relationships: ' + unknownRelationships + '. Make sure they\\'ve been defined in your model.';\n        (true && Ember.warn(unknownRelationshipsMessage, unknownRelationships.length === 0, { id: 'ds.store.unknown-keys-in-payload' }));\n      }\n    }\n\n    // Actually load the record into the store.\n    var internalModel = this._load(data);\n\n    this._setupRelationshipsForModel(internalModel, data);\n\n    return internalModel;\n  },\n  _setupRelationshipsForModel: function _setupRelationshipsForModel(internalModel, data) {\n    if (data.relationships === undefined) {\n      return;\n    }\n\n    if (this._pushedInternalModels.push(internalModel, data) !== 2) {\n      return;\n    }\n\n    this._backburner.schedule('normalizeRelationships', this, this._setupRelationships);\n  },\n  _setupRelationships: function _setupRelationships() {\n    var pushed = this._pushedInternalModels;\n\n    // Cache the inverse maps for each modelClass that we visit during this\n    // payload push.  In the common case where we are pushing many more\n    // instances than types we want to minimize the cost of looking up the\n    // inverse map and the overhead of Ember.get adds up.\n    var modelNameToInverseMap = void 0;\n\n    for (var i = 0, l = pushed.length; i < l; i += 2) {\n      modelNameToInverseMap = modelNameToInverseMap || Object.create(null);\n      // This will convert relationships specified as IDs into DS.Model instances\n      // (possibly unloaded) and also create the data structures used to track\n      // relationships.\n      var internalModel = pushed[i];\n      var data = pushed[i + 1];\n      setupRelationships(this, internalModel, data, modelNameToInverseMap);\n    }\n\n    pushed.length = 0;\n  },\n\n\n  /**\n    Push some raw data into the store.\n     This method can be used both to push in brand new\n    records, as well as to update existing records. You\n    can push in more than one type of object at once.\n    All objects should be in the format expected by the\n    serializer.\n     ```app/serializers/application.js\n    import DS from 'ember-data';\n     export default DS.ActiveModelSerializer;\n    ```\n     ```js\n    let pushData = {\n      posts: [\n        { id: 1, post_title: \"Great post\", comment_ids: [2] }\n      ],\n      comments: [\n        { id: 2, comment_body: \"Insightful comment\" }\n      ]\n    }\n     store.pushPayload(pushData);\n    ```\n     By default, the data will be deserialized using a default\n    serializer (the application serializer if it exists).\n     Alternatively, `pushPayload` will accept a model type which\n    will determine which serializer will process the payload.\n     ```app/serializers/application.js\n    import DS from 'ember-data';\n     export default DS.ActiveModelSerializer;\n    ```\n     ```app/serializers/post.js\n    import DS from 'ember-data';\n     export default DS.JSONSerializer;\n    ```\n     ```js\n    store.pushPayload(pushData); // Will use the application serializer\n    store.pushPayload('post', pushData); // Will use the post serializer\n    ```\n     @method pushPayload\n    @param {String} modelName Optionally, a model type used to determine which serializer will be used\n    @param {Object} inputPayload\n  */\n  pushPayload: function pushPayload(modelName, inputPayload) {\n    var serializer = void 0;\n    var payload = void 0;\n    if (!inputPayload) {\n      payload = modelName;\n      serializer = defaultSerializer(this);\n      (true && !(typeof serializer.pushPayload === 'function') && Ember.assert('You cannot use \\'store#pushPayload\\' without a modelName unless your default serializer defines \\'pushPayload\\'', typeof serializer.pushPayload === 'function'));\n    } else {\n      payload = inputPayload;\n      (true && !(typeof modelName === 'string') && Ember.assert('Passing classes to store methods has been removed. Please pass a dasherized string instead of ' + modelName, typeof modelName === 'string'));\n\n      var normalizedModelName = normalizeModelName(modelName);\n      serializer = this.serializerFor(normalizedModelName);\n    }\n    if (isEnabled('ds-pushpayload-return')) {\n      return serializer.pushPayload(this, payload);\n    } else {\n      serializer.pushPayload(this, payload);\n    }\n  },\n\n\n  /**\n    `normalize` converts a json payload into the normalized form that\n    [push](#method_push) expects.\n     Example\n     ```js\n    socket.on('message', function(message) {\n      let modelName = message.model;\n      let data = message.data;\n      store.push(store.normalize(modelName, data));\n    });\n    ```\n     @method normalize\n    @param {String} modelName The name of the model type for this payload\n    @param {Object} payload\n    @return {Object} The normalized payload\n  */\n  normalize: function normalize(modelName, payload) {\n    (true && !(Ember.isPresent(modelName)) && Ember.assert('You need to pass a model name to the store\\'s normalize method', Ember.isPresent(modelName)));\n    (true && !(typeof modelName === 'string') && Ember.assert('Passing classes to store methods has been removed. Please pass a dasherized string instead of ' + Ember.inspect(modelName), typeof modelName === 'string'));\n\n    var normalizedModelName = normalizeModelName(modelName);\n    var serializer = this.serializerFor(normalizedModelName);\n    var model = this._modelFor(normalizedModelName);\n    return serializer.normalize(model, payload);\n  },\n\n\n  /**\n    Build a brand new record for a given type, ID, and\n    initial data.\n     @method _buildInternalModel\n    @private\n    @param {String} modelName\n    @param {String} id\n    @param {Object} data\n    @return {InternalModel} internal model\n  */\n  _buildInternalModel: function _buildInternalModel(modelName, id, data) {\n    (true && !(typeof modelName === 'string') && Ember.assert('You can no longer pass a modelClass as the first argument to store._buildInternalModel. Pass modelName instead.', typeof modelName === 'string'));\n\n\n    var existingInternalModel = this._existingInternalModelForId(modelName, id);\n\n    (true && !(!existingInternalModel) && Ember.assert('The id ' + id + ' has already been used with another record for modelClass \\'' + modelName + '\\'.', !existingInternalModel));\n\n    // lookupFactory should really return an object that creates\n    // instances with the injections applied\n\n    var internalModel = new InternalModel(modelName, id, this, data);\n\n    this._internalModelsFor(modelName).add(internalModel, id);\n\n    return internalModel;\n  },\n  _existingInternalModelForId: function _existingInternalModelForId(modelName, id) {\n    var internalModel = this._internalModelsFor(modelName).get(id);\n\n    if (internalModel && internalModel.hasScheduledDestroy()) {\n      // unloadRecord is async, if one attempts to unload + then sync create,\n      // we must ensure the unload is complete before starting the create\n      internalModel.destroySync();\n      internalModel = null;\n    }\n    return internalModel;\n  },\n  buildInternalModel: function buildInternalModel(modelName, id, data) {\n    (true && !(false) && Ember.deprecate('buildInternalModel was documented as private and will be removed in the next version of Ember Data.', false, { id: 'ember-data.buildInternalModel', until: '2.17.0' }));\n\n    return this._buildInternalModel(modelName, id, data);\n  },\n\n\n  //Called by the state machine to notify the store that the record is ready to be interacted with\n  recordWasLoaded: function recordWasLoaded(record) {\n    this.recordArrayManager.recordWasLoaded(record);\n  },\n\n\n  // ...............\n  // . DESTRUCTION .\n  // ...............\n\n  /**\n    When a record is destroyed, this un-indexes it and\n    removes it from any record arrays so it can be GCed.\n     @method _removeFromIdMap\n    @private\n    @param {InternalModel} internalModel\n  */\n  _removeFromIdMap: function _removeFromIdMap(internalModel) {\n    var recordMap = this._internalModelsFor(internalModel.modelName);\n    var id = internalModel.id;\n\n    recordMap.remove(internalModel, id);\n  },\n\n\n  // ......................\n  // . PER-TYPE ADAPTERS\n  // ......................\n\n  /**\n    Returns an instance of the adapter for a given type. For\n    example, `adapterFor('person')` will return an instance of\n    `App.PersonAdapter`.\n     If no `App.PersonAdapter` is found, this method will look\n    for an `App.ApplicationAdapter` (the default adapter for\n    your entire application).\n     If no `App.ApplicationAdapter` is found, it will return\n    the value of the `defaultAdapter`.\n     @method adapterFor\n    @public\n    @param {String} modelName\n    @return DS.Adapter\n  */\n  adapterFor: function adapterFor(modelName) {\n    (true && !(Ember.isPresent(modelName)) && Ember.assert('You need to pass a model name to the store\\'s adapterFor method', Ember.isPresent(modelName)));\n    (true && !(typeof modelName === 'string') && Ember.assert('Passing classes to store.adapterFor has been removed. Please pass a dasherized string instead of ' + modelName, typeof modelName === 'string'));\n\n    var normalizedModelName = normalizeModelName(modelName);\n\n    var _adapterCache = this._adapterCache;\n\n    var adapter = _adapterCache[normalizedModelName];\n    if (adapter) {\n      return adapter;\n    }\n\n    var owner = getOwner(this);\n\n    adapter = owner.lookup('adapter:' + normalizedModelName);\n    if (adapter !== undefined) {\n      Ember.set(adapter, 'store', this);\n      _adapterCache[normalizedModelName] = adapter;\n      return adapter;\n    }\n\n    // no adapter found for the specific model, fallback and check for application adapter\n    adapter = _adapterCache.application || owner.lookup('adapter:application');\n    if (adapter !== undefined) {\n      Ember.set(adapter, 'store', this);\n      _adapterCache[normalizedModelName] = adapter;\n      _adapterCache.application = adapter;\n      return adapter;\n    }\n\n    // no model specific adapter or application adapter, check for an `adapter`\n    // property defined on the store\n    var adapterName = this.get('adapter');\n    adapter = _adapterCache[adapterName] || owner.lookup('adapter:' + adapterName);\n    if (adapter !== undefined) {\n      Ember.set(adapter, 'store', this);\n      _adapterCache[normalizedModelName] = adapter;\n      _adapterCache[adapterName] = adapter;\n      return adapter;\n    }\n\n    // final fallback, no model specific adapter, no application adapter, no\n    // `adapter` property on store: use json-api adapter\n    adapter = _adapterCache['-json-api'] || owner.lookup('adapter:-json-api');\n    Ember.set(adapter, 'store', this);\n    _adapterCache[normalizedModelName] = adapter;\n    _adapterCache['-json-api'] = adapter;\n    return adapter;\n  },\n\n\n  // ..............................\n  // . RECORD CHANGE NOTIFICATION .\n  // ..............................\n\n  /**\n    Returns an instance of the serializer for a given type. For\n    example, `serializerFor('person')` will return an instance of\n    `App.PersonSerializer`.\n     If no `App.PersonSerializer` is found, this method will look\n    for an `App.ApplicationSerializer` (the default serializer for\n    your entire application).\n     if no `App.ApplicationSerializer` is found, it will attempt\n    to get the `defaultSerializer` from the `PersonAdapter`\n    (`adapterFor('person')`).\n     If a serializer cannot be found on the adapter, it will fall back\n    to an instance of `DS.JSONSerializer`.\n     @method serializerFor\n    @public\n    @param {String} modelName the record to serialize\n    @return {DS.Serializer}\n  */\n  serializerFor: function serializerFor(modelName) {\n    (true && !(Ember.isPresent(modelName)) && Ember.assert('You need to pass a model name to the store\\'s serializerFor method', Ember.isPresent(modelName)));\n    (true && !(typeof modelName === 'string') && Ember.assert('Passing classes to store.serializerFor has been removed. Please pass a dasherized string instead of ' + modelName, typeof modelName === 'string'));\n\n    var normalizedModelName = normalizeModelName(modelName);\n\n    var _serializerCache = this._serializerCache;\n\n    var serializer = _serializerCache[normalizedModelName];\n    if (serializer) {\n      return serializer;\n    }\n\n    var owner = getOwner(this);\n\n    serializer = owner.lookup('serializer:' + normalizedModelName);\n    if (serializer !== undefined) {\n      Ember.set(serializer, 'store', this);\n      _serializerCache[normalizedModelName] = serializer;\n      return serializer;\n    }\n\n    // no serializer found for the specific model, fallback and check for application serializer\n    serializer = _serializerCache.application || owner.lookup('serializer:application');\n    if (serializer !== undefined) {\n      Ember.set(serializer, 'store', this);\n      _serializerCache[normalizedModelName] = serializer;\n      _serializerCache.application = serializer;\n      return serializer;\n    }\n\n    // no model specific serializer or application serializer, check for the `defaultSerializer`\n    // property defined on the adapter\n    var adapter = this.adapterFor(modelName);\n    var serializerName = Ember.get(adapter, 'defaultSerializer');\n    serializer = _serializerCache[serializerName] || owner.lookup('serializer:' + serializerName);\n    if (serializer !== undefined) {\n      Ember.set(serializer, 'store', this);\n      _serializerCache[normalizedModelName] = serializer;\n      _serializerCache[serializerName] = serializer;\n      return serializer;\n    }\n\n    // final fallback, no model specific serializer, no application serializer, no\n    // `serializer` property on store: use json-api serializer\n    serializer = _serializerCache['-default'] || owner.lookup('serializer:-default');\n    Ember.set(serializer, 'store', this);\n    _serializerCache[normalizedModelName] = serializer;\n    _serializerCache['-default'] = serializer;\n\n    return serializer;\n  },\n  lookupAdapter: function lookupAdapter(name) {\n    (true && !(false) && Ember.deprecate('Use of lookupAdapter is deprecated, use adapterFor instead.', false, {\n      id: 'ds.store.lookupAdapter',\n      until: '3.0'\n    }));\n\n    return this.adapterFor(name);\n  },\n  lookupSerializer: function lookupSerializer(name) {\n    (true && !(false) && Ember.deprecate('Use of lookupSerializer is deprecated, use serializerFor instead.', false, {\n      id: 'ds.store.lookupSerializer',\n      until: '3.0'\n    }));\n\n    return this.serializerFor(name);\n  },\n  willDestroy: function willDestroy() {\n    this._super.apply(this, arguments);\n    this._pushedInternalModels = null;\n    this.recordArrayManager.destroy();\n\n    this._adapterCache = null;\n    this._serializerCache = null;\n\n    this.unloadAll();\n  },\n  _updateRelationshipState: function _updateRelationshipState(relationship) {\n    var _this2 = this;\n\n    if (this._updatedRelationships.push(relationship) !== 1) {\n      return;\n    }\n\n    this._backburner.join(function () {\n      _this2._backburner.schedule('syncRelationships', _this2, _this2._flushUpdatedRelationships);\n    });\n  },\n  _flushUpdatedRelationships: function _flushUpdatedRelationships() {\n    var updated = this._updatedRelationships;\n\n    for (var i = 0, l = updated.length; i < l; i++) {\n      updated[i].flushCanonical();\n    }\n\n    updated.length = 0;\n  },\n  _updateInternalModel: function _updateInternalModel(internalModel) {\n    if (this._updatedInternalModels.push(internalModel) !== 1) {\n      return;\n    }\n\n    Ember.run.schedule('actions', this, this._flushUpdatedInternalModels);\n  },\n  _flushUpdatedInternalModels: function _flushUpdatedInternalModels() {\n    var updated = this._updatedInternalModels;\n\n    for (var i = 0, l = updated.length; i < l; i++) {\n      updated[i]._triggerDeferredTriggers();\n    }\n\n    updated.length = 0;\n  },\n  _pushResourceIdentifier: function _pushResourceIdentifier(relationship, resourceIdentifier) {\n    if (Ember.isNone(resourceIdentifier)) {\n      return;\n    }\n\n    (true && !(!Array.isArray(resourceIdentifier)) && Ember.assert('A ' + relationship.internalModel.modelName + ' record was pushed into the store with the value of ' + relationship.key + ' being ' + Ember.inspect(resourceIdentifier) + ', but ' + relationship.key + ' is a belongsTo relationship so the value must not be an array. You should probably check your data payload or serializer.', !Array.isArray(resourceIdentifier)));\n\n    //TODO:Better asserts\n\n    return this._internalModelForId(resourceIdentifier.type, resourceIdentifier.id);\n  },\n  _pushResourceIdentifiers: function _pushResourceIdentifiers(relationship, resourceIdentifiers) {\n    if (Ember.isNone(resourceIdentifiers)) {\n      return;\n    }\n\n    (true && !(Array.isArray(resourceIdentifiers)) && Ember.assert('A ' + relationship.internalModel.modelName + ' record was pushed into the store with the value of ' + relationship.key + ' being \\'' + Ember.inspect(resourceIdentifiers) + '\\', but ' + relationship.key + ' is a hasMany relationship so the value must be an array. You should probably check your data payload or serializer.', Array.isArray(resourceIdentifiers)));\n\n\n    var _internalModels = new Array(resourceIdentifiers.length);\n    for (var i = 0; i < resourceIdentifiers.length; i++) {\n      _internalModels[i] = this._pushResourceIdentifier(relationship, resourceIdentifiers[i]);\n    }\n    return _internalModels;\n  }\n});\n\n// Delegation to the adapter and promise management\n\n\nfunction defaultSerializer(store) {\n  return store.serializerFor('application');\n}\n\nfunction _commit(adapter, store, operation, snapshot) {\n  var internalModel = snapshot._internalModel;\n  var modelName = snapshot.modelName;\n  var modelClass = store._modelFor(modelName);\n  (true && !(adapter) && Ember.assert('You tried to update a record but you have no adapter (for ' + modelName + ')', adapter));\n  (true && !(typeof adapter[operation] === 'function') && Ember.assert('You tried to update a record but your adapter (for ' + modelName + ') does not implement \\'' + operation + '\\'', typeof adapter[operation] === 'function'));\n\n  var promise = adapter[operation](store, modelClass, snapshot);\n  var serializer = serializerForAdapter(store, adapter, modelName);\n  var label = 'DS: Extract and notify about ' + operation + ' completion of ' + internalModel;\n\n  (true && !(promise !== undefined) && Ember.assert('Your adapter\\'s \\'' + operation + '\\' method must return a value, but it returned \\'undefined\\'', promise !== undefined));\n\n\n  promise = Promise.resolve(promise, label);\n  promise = _guard(promise, _bind(_objectIsAlive, store));\n  promise = _guard(promise, _bind(_objectIsAlive, internalModel));\n\n  return promise.then(function (adapterPayload) {\n    /*\n      Note to future spelunkers hoping to optimize.\n      We rely on this `run` to create a run loop if needed\n      that `store._push` and `store.didSaveRecord` will both share.\n       We use `join` because it is often the case that we\n      have an outer run loop available still from the first\n      call to `store._push`;\n     */\n    store._backburner.join(function () {\n      var payload = void 0,\n          data = void 0;\n      if (adapterPayload) {\n        payload = normalizeResponseHelper(serializer, store, modelClass, adapterPayload, snapshot.id, operation);\n        if (payload.included) {\n          store._push({ data: null, included: payload.included });\n        }\n        data = payload.data;\n      }\n      store.didSaveRecord(internalModel, { data: data });\n    });\n\n    return internalModel;\n  }, function (error) {\n    if (error instanceof InvalidError) {\n      var errors = serializer.extractErrors(store, modelClass, error, snapshot.id);\n\n      store.recordWasInvalid(internalModel, errors);\n    } else {\n      store.recordWasError(internalModel, error);\n    }\n\n    throw error;\n  }, label);\n}\n\nfunction isInverseRelationshipInitialized(store, internalModel, data, key, modelNameToInverseMap) {\n  var relationshipData = data.relationships[key].data;\n\n  if (!relationshipData) {\n    // can't check inverse for eg { comments: { links: { related: URL }}}\n    return false;\n  }\n\n  var inverseMap = modelNameToInverseMap[internalModel.modelName];\n  if (!inverseMap) {\n    inverseMap = modelNameToInverseMap[internalModel.modelName] = Ember.get(internalModel.type, 'inverseMap');\n  }\n  var inverseRelationshipMetadata = inverseMap[key];\n  if (inverseRelationshipMetadata === undefined) {\n    inverseRelationshipMetadata = internalModel.type.inverseFor(key, store);\n  }\n\n  if (!inverseRelationshipMetadata) {\n    return false;\n  }\n\n  var _inverseRelationshipM = inverseRelationshipMetadata,\n      inverseRelationshipName = _inverseRelationshipM.name;\n\n\n  if (Array.isArray(relationshipData)) {\n    for (var i = 0; i < relationshipData.length; ++i) {\n      var inverseInternalModel = store._internalModelsFor(relationshipData[i].type).get(relationshipData[i].id);\n      if (inverseInternalModel && inverseInternalModel._relationships.has(inverseRelationshipName)) {\n        return true;\n      }\n    }\n\n    return false;\n  } else {\n    var _inverseInternalModel = store._internalModelsFor(relationshipData.type).get(relationshipData.id);\n    return _inverseInternalModel && _inverseInternalModel._relationships.has(inverseRelationshipName);\n  }\n}\n\nfunction setupRelationships(store, internalModel, data, modelNameToInverseMap) {\n  Object.keys(data.relationships).forEach(function (relationshipName) {\n    var relationships = internalModel._relationships;\n    var relationshipRequiresNotification = relationships.has(relationshipName) || isInverseRelationshipInitialized(store, internalModel, data, relationshipName, modelNameToInverseMap);\n\n    if (relationshipRequiresNotification) {\n      var relationshipData = data.relationships[relationshipName];\n      relationships.get(relationshipName).push(relationshipData, false);\n    }\n\n    // in debug, assert payload validity eagerly\n    {\n      var relationshipMeta = Ember.get(internalModel.type, 'relationshipsByName').get(relationshipName);\n      var _relationshipData = data.relationships[relationshipName];\n      if (!_relationshipData || !relationshipMeta) {\n        return;\n      }\n\n      if (_relationshipData.links) {\n        var isAsync = relationshipMeta.options && relationshipMeta.options.async !== false;\n        (true && Ember.warn('You pushed a record of type \\'' + internalModel.type.modelName + '\\' with a relationship \\'' + relationshipName + '\\' configured as \\'async: false\\'. You\\'ve included a link but no primary data, this may be an error in your payload.', isAsync || _relationshipData.data, {\n          id: 'ds.store.push-link-for-sync-relationship'\n        }));\n      } else if (_relationshipData.data) {\n        if (relationshipMeta.kind === 'belongsTo') {\n          (true && !(!Array.isArray(_relationshipData.data)) && Ember.assert('A ' + internalModel.type.modelName + ' record was pushed into the store with the value of ' + relationshipName + ' being ' + Ember.inspect(_relationshipData.data) + ', but ' + relationshipName + ' is a belongsTo relationship so the value must not be an array. You should probably check your data payload or serializer.', !Array.isArray(_relationshipData.data)));\n        } else if (relationshipMeta.kind === 'hasMany') {\n          (true && !(Array.isArray(_relationshipData.data)) && Ember.assert('A ' + internalModel.type.modelName + ' record was pushed into the store with the value of ' + relationshipName + ' being \\'' + Ember.inspect(_relationshipData.data) + '\\', but ' + relationshipName + ' is a hasMany relationship so the value must be an array. You should probably check your data payload or serializer.', Array.isArray(_relationshipData.data)));\n        }\n      }\n    }\n  });\n}\n\nvar Store$1 = Store;\n\n/**\n  @module ember-data\n*/\n\n/**\n  All Ember Data classes, methods and functions are defined inside of this namespace.\n\n  @class DS\n  @static\n*/\n\n/**\n  @property VERSION\n  @type String\n  @static\n*/\nvar DS = Ember.Namespace.create({\n  VERSION: VERSION,\n  name: \"DS\"\n});\n\nif (Ember.libraries) {\n  Ember.libraries.registerCoreLibrary('Ember Data', DS.VERSION);\n}\n\n/**\n  `DS.belongsTo` is used to define One-To-One and One-To-Many\n  relationships on a [DS.Model](/api/data/classes/DS.Model.html).\n\n\n  `DS.belongsTo` takes an optional hash as a second parameter, currently\n  supported options are:\n\n  - `async`: A boolean value used to explicitly declare this to be an async relationship.\n  - `inverse`: A string used to identify the inverse property on a\n    related model in a One-To-Many relationship. See [Explicit Inverses](#toc_explicit-inverses)\n\n  #### One-To-One\n  To declare a one-to-one relationship between two models, use\n  `DS.belongsTo`:\n\n  ```app/models/user.js\n  import DS from 'ember-data';\n\n  export default DS.Model.extend({\n    profile: DS.belongsTo('profile')\n  });\n  ```\n\n  ```app/models/profile.js\n  import DS from 'ember-data';\n\n  export default DS.Model.extend({\n    user: DS.belongsTo('user')\n  });\n  ```\n\n  #### One-To-Many\n  To declare a one-to-many relationship between two models, use\n  `DS.belongsTo` in combination with `DS.hasMany`, like this:\n\n  ```app/models/post.js\n  import DS from 'ember-data';\n\n  export default DS.Model.extend({\n    comments: DS.hasMany('comment')\n  });\n  ```\n\n  ```app/models/comment.js\n  import DS from 'ember-data';\n\n  export default DS.Model.extend({\n    post: DS.belongsTo('post')\n  });\n  ```\n\n  You can avoid passing a string as the first parameter. In that case Ember Data\n  will infer the type from the key name.\n\n  ```app/models/comment.js\n  import DS from 'ember-data';\n\n  export default DS.Model.extend({\n    post: DS.belongsTo()\n  });\n  ```\n\n  will lookup for a Post type.\n\n  @namespace\n  @method belongsTo\n  @for DS\n  @param {String} modelName (optional) type of the relationship\n  @param {Object} options (optional) a hash of options\n  @return {Ember.computed} relationship\n*/\nfunction belongsTo(modelName, options) {\n  var opts = void 0,\n      userEnteredModelName = void 0;\n  if (typeof modelName === 'object') {\n    opts = modelName;\n    userEnteredModelName = undefined;\n  } else {\n    opts = options;\n    userEnteredModelName = modelName;\n  }\n\n  if (typeof userEnteredModelName === 'string') {\n    userEnteredModelName = normalizeModelName(userEnteredModelName);\n  }\n\n  (true && !(typeof userEnteredModelName === 'string' || typeof userEnteredModelName === 'undefined') && Ember.assert(\"The first argument to DS.belongsTo must be a string representing a model type key, not an instance of \" + Ember.inspect(userEnteredModelName) + \". E.g., to define a relation to the Person model, use DS.belongsTo('person')\", typeof userEnteredModelName === 'string' || typeof userEnteredModelName === 'undefined'));\n\n\n  opts = opts || {};\n\n  var meta = {\n    type: userEnteredModelName,\n    isRelationship: true,\n    options: opts,\n    kind: 'belongsTo',\n    name: 'Belongs To',\n    key: null\n  };\n\n  return Ember.computed({\n    get: function get(key) {\n      if (opts.hasOwnProperty('serialize')) {\n        (true && Ember.warn('You provided a serialize option on the \"' + key + '\" property in the \"' + this._internalModel.modelName + '\" class, this belongs in the serializer. See DS.Serializer and it\\'s implementations https://emberjs.com/api/data/classes/DS.Serializer.html', false, {\n          id: 'ds.model.serialize-option-in-belongs-to'\n        }));\n      }\n\n      if (opts.hasOwnProperty('embedded')) {\n        (true && Ember.warn('You provided an embedded option on the \"' + key + '\" property in the \"' + this._internalModel.modelName + '\" class, this belongs in the serializer. See DS.EmbeddedRecordsMixin https://emberjs.com/api/data/classes/DS.EmbeddedRecordsMixin.html', false, {\n          id: 'ds.model.embedded-option-in-belongs-to'\n        }));\n      }\n\n      return this._internalModel._relationships.get(key).getRecord();\n    },\n    set: function set(key, value) {\n      if (value === undefined) {\n        value = null;\n      }\n      if (value && value.then) {\n        this._internalModel._relationships.get(key).setRecordPromise(value);\n      } else if (value) {\n        this._internalModel._relationships.get(key).setInternalModel(value._internalModel);\n      } else {\n        this._internalModel._relationships.get(key).setInternalModel(value);\n      }\n\n      return this._internalModel._relationships.get(key).getRecord();\n    }\n  }).meta(meta);\n}\n\n/*\n  We're using this to detect arrays and \"array-like\" objects.\n\n  This is a copy of the `isArray` method found in `ember-runtime/utils` as we're\n  currently unable to import non-exposed modules.\n\n  This method was previously exposed as `Ember.isArray` but since\n  https://github.com/emberjs/ember.js/pull/11463 `Ember.isArray` is an alias of\n  `Array.isArray` hence removing the \"array-like\" part.\n */\nfunction isArrayLike(obj) {\n  if (!obj || obj.setInterval) {\n    return false;\n  }\n  if (Array.isArray(obj)) {\n    return true;\n  }\n  if (Ember.Array.detect(obj)) {\n    return true;\n  }\n\n  var type = Ember.typeOf(obj);\n  if ('array' === type) {\n    return true;\n  }\n  if (obj.length !== undefined && 'object' === type) {\n    return true;\n  }\n  return false;\n}\n\n/**\n  `DS.hasMany` is used to define One-To-Many and Many-To-Many\n  relationships on a [DS.Model](/api/data/classes/DS.Model.html).\n\n  `DS.hasMany` takes an optional hash as a second parameter, currently\n  supported options are:\n\n  - `async`: A boolean value used to explicitly declare this to be an async relationship.\n  - `inverse`: A string used to identify the inverse property on a related model.\n\n  #### One-To-Many\n  To declare a one-to-many relationship between two models, use\n  `DS.belongsTo` in combination with `DS.hasMany`, like this:\n\n  ```app/models/post.js\n  import DS from 'ember-data';\n\n  export default DS.Model.extend({\n    comments: DS.hasMany('comment')\n  });\n  ```\n\n  ```app/models/comment.js\n  import DS from 'ember-data';\n\n  export default DS.Model.extend({\n    post: DS.belongsTo('post')\n  });\n  ```\n\n  #### Many-To-Many\n  To declare a many-to-many relationship between two models, use\n  `DS.hasMany`:\n\n  ```app/models/post.js\n  import DS from 'ember-data';\n\n  export default DS.Model.extend({\n    tags: DS.hasMany('tag')\n  });\n  ```\n\n  ```app/models/tag.js\n  import DS from 'ember-data';\n\n  export default DS.Model.extend({\n    posts: DS.hasMany('post')\n  });\n  ```\n\n  You can avoid passing a string as the first parameter. In that case Ember Data\n  will infer the type from the singularized key name.\n\n  ```app/models/post.js\n  import DS from 'ember-data';\n\n  export default DS.Model.extend({\n    tags: DS.hasMany()\n  });\n  ```\n\n  will lookup for a Tag type.\n\n  #### Explicit Inverses\n\n  Ember Data will do its best to discover which relationships map to\n  one another. In the one-to-many code above, for example, Ember Data\n  can figure out that changing the `comments` relationship should update\n  the `post` relationship on the inverse because post is the only\n  relationship to that model.\n\n  However, sometimes you may have multiple `belongsTo`/`hasMany` for the\n  same type. You can specify which property on the related model is\n  the inverse using `DS.hasMany`'s `inverse` option:\n\n  ```app/models/comment.js\n  import DS from 'ember-data';\n\n  export default DS.Model.extend({\n    onePost: DS.belongsTo('post'),\n    twoPost: DS.belongsTo('post'),\n    redPost: DS.belongsTo('post'),\n    bluePost: DS.belongsTo('post')\n  });\n  ```\n\n  ```app/models/post.js\n  import DS from 'ember-data';\n\n  export default DS.Model.extend({\n    comments: DS.hasMany('comment', {\n      inverse: 'redPost'\n    })\n  });\n  ```\n\n  You can also specify an inverse on a `belongsTo`, which works how\n  you'd expect.\n\n  @namespace\n  @method hasMany\n  @for DS\n  @param {String} type (optional) type of the relationship\n  @param {Object} options (optional) a hash of options\n  @return {Ember.computed} relationship\n*/\nfunction hasMany(type, options) {\n  if (typeof type === 'object') {\n    options = type;\n    type = undefined;\n  }\n\n  (true && !(typeof type === 'string' || typeof type === 'undefined') && Ember.assert('The first argument to DS.hasMany must be a string representing a model type key, not an instance of ' + Ember.inspect(type) + '. E.g., to define a relation to the Comment model, use DS.hasMany(\\'comment\\')', typeof type === 'string' || typeof type === 'undefined'));\n\n\n  options = options || {};\n\n  if (typeof type === 'string') {\n    type = normalizeModelName(type);\n  }\n\n  // Metadata about relationships is stored on the meta of\n  // the relationship. This is used for introspection and\n  // serialization. Note that `key` is populated lazily\n  // the first time the CP is called.\n  var meta = {\n    type: type,\n    options: options,\n    isRelationship: true,\n    kind: 'hasMany',\n    name: 'Has Many',\n    key: null\n  };\n\n  return Ember.computed({\n    get: function get(key) {\n      return this._internalModel._relationships.get(key).getRecords();\n    },\n    set: function set(key, records) {\n      (true && !(isArrayLike(records)) && Ember.assert('You must pass an array of records to set a hasMany relationship', isArrayLike(records)));\n      (true && !(function () {\n        return Ember.A(records).every(function (record) {\n          return record.hasOwnProperty('_internalModel') === true;\n        });\n      }()) && Ember.assert('All elements of a hasMany relationship must be instances of DS.Model, you passed ' + Ember.inspect(records), function () {\n        return Ember.A(records).every(function (record) {\n          return record.hasOwnProperty('_internalModel') === true;\n        });\n      }()));\n\n\n      var relationship = this._internalModel._relationships.get(key);\n      relationship.clear();\n      relationship.addInternalModels(records.map(function (record) {\n        return Ember.get(record, '_internalModel');\n      }));\n      return relationship.getRecords();\n    }\n  }).meta(meta);\n}\n\n/**\n\n  WARNING: This interface is likely to change in order to accomodate https://github.com/emberjs/rfcs/pull/4\n\n  ## Using BuildURLMixin\n\n  To use url building, include the mixin when extending an adapter, and call `buildURL` where needed.\n  The default behaviour is designed for RESTAdapter.\n\n  ### Example\n\n  ```javascript\n  export default DS.Adapter.extend(BuildURLMixin, {\n    findRecord: function(store, type, id, snapshot) {\n      var url = this.buildURL(type.modelName, id, snapshot, 'findRecord');\n      return this.ajax(url, 'GET');\n    }\n  });\n  ```\n\n  ### Attributes\n\n  The `host` and `namespace` attributes will be used if defined, and are optional.\n\n  @class BuildURLMixin\n  @namespace DS\n*/\nvar buildUrlMixin = Ember.Mixin.create({\n  /**\n    Builds a URL for a given type and optional ID.\n     By default, it pluralizes the type's name (for example, 'post'\n    becomes 'posts' and 'person' becomes 'people'). To override the\n    pluralization see [pathForType](#method_pathForType).\n     If an ID is specified, it adds the ID to the path generated\n    for the type, separated by a `/`.\n     When called by RESTAdapter.findMany() the `id` and `snapshot` parameters\n    will be arrays of ids and snapshots.\n     @method buildURL\n    @param {String} modelName\n    @param {(String|Array|Object)} id single id or array of ids or query\n    @param {(DS.Snapshot|Array)} snapshot single snapshot or array of snapshots\n    @param {String} requestType\n    @param {Object} query object of query parameters to send for query requests.\n    @return {String} url\n  */\n  buildURL: function buildURL(modelName, id, snapshot, requestType, query) {\n    switch (requestType) {\n      case 'findRecord':\n        return this.urlForFindRecord(id, modelName, snapshot);\n      case 'findAll':\n        return this.urlForFindAll(modelName, snapshot);\n      case 'query':\n        return this.urlForQuery(query, modelName);\n      case 'queryRecord':\n        return this.urlForQueryRecord(query, modelName);\n      case 'findMany':\n        return this.urlForFindMany(id, modelName, snapshot);\n      case 'findHasMany':\n        return this.urlForFindHasMany(id, modelName, snapshot);\n      case 'findBelongsTo':\n        return this.urlForFindBelongsTo(id, modelName, snapshot);\n      case 'createRecord':\n        return this.urlForCreateRecord(modelName, snapshot);\n      case 'updateRecord':\n        return this.urlForUpdateRecord(id, modelName, snapshot);\n      case 'deleteRecord':\n        return this.urlForDeleteRecord(id, modelName, snapshot);\n      default:\n        return this._buildURL(modelName, id);\n    }\n  },\n\n\n  /**\n    @method _buildURL\n    @private\n    @param {String} modelName\n    @param {String} id\n    @return {String} url\n  */\n  _buildURL: function _buildURL(modelName, id) {\n    var path = void 0;\n    var url = [];\n    var host = Ember.get(this, 'host');\n    var prefix = this.urlPrefix();\n\n    if (modelName) {\n      path = this.pathForType(modelName);\n      if (path) {\n        url.push(path);\n      }\n    }\n\n    if (id) {\n      url.push(encodeURIComponent(id));\n    }\n    if (prefix) {\n      url.unshift(prefix);\n    }\n\n    url = url.join('/');\n    if (!host && url && url.charAt(0) !== '/') {\n      url = '/' + url;\n    }\n\n    return url;\n  },\n\n\n  /**\n   Builds a URL for a `store.findRecord(type, id)` call.\n    Example:\n    ```app/adapters/user.js\n   import DS from 'ember-data';\n    export default DS.JSONAPIAdapter.extend({\n     urlForFindRecord(id, modelName, snapshot) {\n       let baseUrl = this.buildURL(modelName, id, snapshot);\n       return `${baseUrl}/users/${snapshot.adapterOptions.user_id}/playlists/${id}`;\n     }\n   });\n   ```\n    @method urlForFindRecord\n   @param {String} id\n   @param {String} modelName\n   @param {DS.Snapshot} snapshot\n   @return {String} url\n    */\n  urlForFindRecord: function urlForFindRecord(id, modelName, snapshot) {\n    return this._buildURL(modelName, id);\n  },\n\n\n  /**\n   Builds a URL for a `store.findAll(type)` call.\n    Example:\n    ```app/adapters/comment.js\n   import DS from 'ember-data';\n    export default DS.JSONAPIAdapter.extend({\n     urlForFindAll(modelName, snapshot) {\n       return 'data/comments.json';\n     }\n   });\n   ```\n    @method urlForFindAll\n   @param {String} modelName\n   @param {DS.SnapshotRecordArray} snapshot\n   @return {String} url\n   */\n  urlForFindAll: function urlForFindAll(modelName, snapshot) {\n    return this._buildURL(modelName);\n  },\n\n\n  /**\n   Builds a URL for a `store.query(type, query)` call.\n    Example:\n    ```app/adapters/application.js\n   import DS from 'ember-data';\n    export default DS.RESTAdapter.extend({\n     host: 'https://api.github.com',\n     urlForQuery (query, modelName) {\n       switch(modelName) {\n         case 'repo':\n           return `https://api.github.com/orgs/${query.orgId}/repos`;\n         default:\n           return this._super(...arguments);\n       }\n     }\n   });\n   ```\n    @method urlForQuery\n   @param {Object} query\n   @param {String} modelName\n   @return {String} url\n   */\n  urlForQuery: function urlForQuery(query, modelName) {\n    return this._buildURL(modelName);\n  },\n\n\n  /**\n   Builds a URL for a `store.queryRecord(type, query)` call.\n    Example:\n    ```app/adapters/application.js\n   import DS from 'ember-data';\n    export default DS.RESTAdapter.extend({\n     urlForQueryRecord({ slug }, modelName) {\n       let baseUrl = this.buildURL();\n       return `${baseUrl}/${encodeURIComponent(slug)}`;\n     }\n   });\n   ```\n    @method urlForQueryRecord\n   @param {Object} query\n   @param {String} modelName\n   @return {String} url\n   */\n  urlForQueryRecord: function urlForQueryRecord(query, modelName) {\n    return this._buildURL(modelName);\n  },\n\n\n  /**\n   Builds a URL for coalesceing multiple `store.findRecord(type, id)`\n   records into 1 request when the adapter's `coalesceFindRequests`\n   property is true.\n    Example:\n    ```app/adapters/application.js\n   import DS from 'ember-data';\n    export default DS.RESTAdapter.extend({\n     urlForFindMany(ids, modelName) {\n       let baseUrl = this.buildURL();\n       return `${baseUrl}/coalesce`;\n     }\n   });\n   ```\n    @method urlForFindMany\n   @param {Array} ids\n   @param {String} modelName\n   @param {Array} snapshots\n   @return {String} url\n   */\n  urlForFindMany: function urlForFindMany(ids, modelName, snapshots) {\n    return this._buildURL(modelName);\n  },\n\n\n  /**\n   Builds a URL for fetching a async hasMany relationship when a url\n   is not provided by the server.\n    Example:\n    ```app/adapters/application.js\n   import DS from 'ember-data';\n    export default DS.JSONAPIAdapter.extend({\n     urlForFindHasMany(id, modelName, snapshot) {\n       let baseUrl = this.buildURL(id, modelName);\n       return `${baseUrl}/relationships`;\n     }\n   });\n   ```\n    @method urlForFindHasMany\n   @param {String} id\n   @param {String} modelName\n   @param {DS.Snapshot} snapshot\n   @return {String} url\n   */\n  urlForFindHasMany: function urlForFindHasMany(id, modelName, snapshot) {\n    return this._buildURL(modelName, id);\n  },\n\n\n  /**\n   Builds a URL for fetching a async belongsTo relationship when a url\n   is not provided by the server.\n    Example:\n    ```app/adapters/application.js\n   import DS from 'ember-data';\n    export default DS.JSONAPIAdapter.extend({\n     urlForFindBelongsTo(id, modelName, snapshot) {\n       let baseUrl = this.buildURL(id, modelName);\n       return `${baseUrl}/relationships`;\n     }\n   });\n   ```\n    @method urlForFindBelongsTo\n   @param {String} id\n   @param {String} modelName\n   @param {DS.Snapshot} snapshot\n   @return {String} url\n   */\n  urlForFindBelongsTo: function urlForFindBelongsTo(id, modelName, snapshot) {\n    return this._buildURL(modelName, id);\n  },\n\n\n  /**\n   Builds a URL for a `record.save()` call when the record was created\n   locally using `store.createRecord()`.\n    Example:\n    ```app/adapters/application.js\n   import DS from 'ember-data';\n    export default DS.RESTAdapter.extend({\n     urlForCreateRecord(modelName, snapshot) {\n       return this._super(...arguments) + '/new';\n     }\n   });\n   ```\n    @method urlForCreateRecord\n   @param {String} modelName\n   @param {DS.Snapshot} snapshot\n   @return {String} url\n   */\n  urlForCreateRecord: function urlForCreateRecord(modelName, snapshot) {\n    return this._buildURL(modelName);\n  },\n\n\n  /**\n   Builds a URL for a `record.save()` call when the record has been update locally.\n    Example:\n    ```app/adapters/application.js\n   import DS from 'ember-data';\n    export default DS.RESTAdapter.extend({\n     urlForUpdateRecord(id, modelName, snapshot) {\n       return `/${id}/feed?access_token=${snapshot.adapterOptions.token}`;\n     }\n   });\n   ```\n    @method urlForUpdateRecord\n   @param {String} id\n   @param {String} modelName\n   @param {DS.Snapshot} snapshot\n   @return {String} url\n   */\n  urlForUpdateRecord: function urlForUpdateRecord(id, modelName, snapshot) {\n    return this._buildURL(modelName, id);\n  },\n\n\n  /**\n   Builds a URL for a `record.save()` call when the record has been deleted locally.\n    Example:\n    ```app/adapters/application.js\n   import DS from 'ember-data';\n    export default DS.RESTAdapter.extend({\n     urlForDeleteRecord(id, modelName, snapshot) {\n       return this._super(...arguments) + '/destroy';\n     }\n   });\n   ```\n    @method urlForDeleteRecord\n   @param {String} id\n   @param {String} modelName\n   @param {DS.Snapshot} snapshot\n   @return {String} url\n   */\n  urlForDeleteRecord: function urlForDeleteRecord(id, modelName, snapshot) {\n    return this._buildURL(modelName, id);\n  },\n\n\n  /**\n    @method urlPrefix\n    @private\n    @param {String} path\n    @param {String} parentURL\n    @return {String} urlPrefix\n  */\n  urlPrefix: function urlPrefix(path, parentURL) {\n    var host = Ember.get(this, 'host');\n    var namespace = Ember.get(this, 'namespace');\n\n    if (!host || host === '/') {\n      host = '';\n    }\n\n    if (path) {\n      // Protocol relative url\n      if (/^\\/\\//.test(path) || /http(s)?:\\/\\//.test(path)) {\n        // Do nothing, the full host is already included.\n        return path;\n\n        // Absolute path\n      } else if (path.charAt(0) === '/') {\n        return '' + host + path;\n        // Relative path\n      } else {\n        return parentURL + '/' + path;\n      }\n    }\n\n    // No path provided\n    var url = [];\n    if (host) {\n      url.push(host);\n    }\n    if (namespace) {\n      url.push(namespace);\n    }\n    return url.join('/');\n  },\n\n\n  /**\n    Determines the pathname for a given type.\n     By default, it pluralizes the type's name (for example,\n    'post' becomes 'posts' and 'person' becomes 'people').\n     ### Pathname customization\n     For example if you have an object LineItem with an\n    endpoint of \"/line_items/\".\n     ```app/adapters/application.js\n    import DS from 'ember-data';\n    import { decamelize } from '@ember/string';\n    import { pluralize } from 'ember-inflector';\n     export default DS.RESTAdapter.extend({\n      pathForType: function(modelName) {\n        var decamelized = decamelize(modelName);\n        return pluralize(decamelized);\n      }\n    });\n    ```\n     @method pathForType\n    @param {String} modelName\n    @return {String} path\n  **/\n  pathForType: function pathForType(modelName) {\n    var camelized = Ember.String.camelize(modelName);\n    return emberInflector.pluralize(camelized);\n  }\n});\n\nvar CLRF = '\\r\\n';\n\nfunction parseResponseHeaders(headersString) {\n  var headers = Object.create(null);\n\n  if (!headersString) {\n    return headers;\n  }\n\n  var headerPairs = headersString.split(CLRF);\n  for (var i = 0; i < headerPairs.length; i++) {\n    var header = headerPairs[i];\n    var j = 0;\n    var foundSep = false;\n\n    for (; j < header.length; j++) {\n      if (header.charCodeAt(j) === 58 /* ':' */) {\n          foundSep = true;\n          break;\n        }\n    }\n\n    if (foundSep === false) {\n      continue;\n    }\n\n    var field = header.substring(0, j).trim();\n    var value = header.substring(j + 1, header.length).trim();\n\n    if (value) {\n      headers[field] = value;\n    }\n  }\n\n  return headers;\n}\n\n/*\n  Extend `Ember.DataAdapter` with ED specific code.\n\n  @class DebugAdapter\n  @namespace DS\n  @extends Ember.DataAdapter\n  @private\n*/\n/**\n  @module ember-data\n*/\nvar debugAdapter = Ember.DataAdapter.extend({\n  getFilters: function getFilters() {\n    return [{ name: 'isNew', desc: 'New' }, { name: 'isModified', desc: 'Modified' }, { name: 'isClean', desc: 'Clean' }];\n  },\n  detect: function detect(typeClass) {\n    return typeClass !== Model && Model.detect(typeClass);\n  },\n  columnsForType: function columnsForType(typeClass) {\n    var columns = [{\n      name: 'id',\n      desc: 'Id'\n    }];\n    var count = 0;\n    var self = this;\n    Ember.get(typeClass, 'attributes').forEach(function (meta, name) {\n      if (count++ > self.attributeLimit) {\n        return false;\n      }\n      var desc = Ember.String.capitalize(Ember.String.underscore(name).replace('_', ' '));\n      columns.push({ name: name, desc: desc });\n    });\n    return columns;\n  },\n  getRecords: function getRecords(modelClass, modelName) {\n    if (arguments.length < 2) {\n      // Legacy Ember.js < 1.13 support\n      var containerKey = modelClass._debugContainerKey;\n      if (containerKey) {\n        var match = containerKey.match(/model:(.*)/);\n        if (match !== null) {\n          modelName = match[1];\n        }\n      }\n    }\n    (true && !(!!modelName) && Ember.assert(\"Cannot find model name. Please upgrade to Ember.js >= 1.13 for Ember Inspector support\", !!modelName));\n\n    return this.get('store').peekAll(modelName);\n  },\n  getRecordColumnValues: function getRecordColumnValues(record) {\n    var _this = this;\n\n    var count = 0;\n    var columnValues = { id: Ember.get(record, 'id') };\n\n    record.eachAttribute(function (key) {\n      if (count++ > _this.attributeLimit) {\n        return false;\n      }\n      columnValues[key] = Ember.get(record, key);\n    });\n    return columnValues;\n  },\n  getRecordKeywords: function getRecordKeywords(record) {\n    var keywords = [];\n    var keys = Ember.A(['id']);\n    record.eachAttribute(function (key) {\n      return keys.push(key);\n    });\n    keys.forEach(function (key) {\n      return keywords.push(Ember.get(record, key));\n    });\n    return keywords;\n  },\n  getRecordFilterValues: function getRecordFilterValues(record) {\n    return {\n      isNew: record.get('isNew'),\n      isModified: record.get('hasDirtyAttributes') && !record.get('isNew'),\n      isClean: !record.get('hasDirtyAttributes')\n    };\n  },\n  getRecordColor: function getRecordColor(record) {\n    var color = 'black';\n    if (record.get('isNew')) {\n      color = 'green';\n    } else if (record.get('hasDirtyAttributes')) {\n      color = 'blue';\n    }\n    return color;\n  },\n  observeRecord: function observeRecord(record, recordUpdated) {\n    var releaseMethods = Ember.A();\n    var keysToObserve = Ember.A(['id', 'isNew', 'hasDirtyAttributes']);\n\n    record.eachAttribute(function (key) {\n      return keysToObserve.push(key);\n    });\n    var adapter = this;\n\n    keysToObserve.forEach(function (key) {\n      var handler = function handler() {\n        recordUpdated(adapter.wrapRecord(record));\n      };\n      Ember.addObserver(record, key, handler);\n      releaseMethods.push(function () {\n        Ember.removeObserver(record, key, handler);\n      });\n    });\n\n    var release = function release() {\n      releaseMethods.forEach(function (fn) {\n        return fn();\n      });\n    };\n\n    return release;\n  }\n});\n\n// public\n\nexports.Model = Model;\nexports.Errors = Errors;\nexports.Store = Store$1;\nexports.DS = DS;\nexports.belongsTo = belongsTo;\nexports.hasMany = hasMany;\nexports.BuildURLMixin = buildUrlMixin;\nexports.Snapshot = Snapshot;\nexports.AdapterError = AdapterError;\nexports.InvalidError = InvalidError;\nexports.UnauthorizedError = UnauthorizedError;\nexports.ForbiddenError = ForbiddenError;\nexports.NotFoundError = NotFoundError;\nexports.ConflictError = ConflictError;\nexports.ServerError = ServerError;\nexports.TimeoutError = TimeoutError;\nexports.AbortError = AbortError;\nexports.errorsHashToArray = errorsHashToArray;\nexports.errorsArrayToHash = errorsArrayToHash;\nexports.normalizeModelName = normalizeModelName;\nexports.getOwner = getOwner;\nexports.modelHasAttributeOrRelationshipNamedType = modelHasAttributeOrRelationshipNamedType;\nexports.coerceId = coerceId;\nexports.parseResponseHeaders = parseResponseHeaders;\nexports.isEnabled = isEnabled;\nexports.RootState = RootState$1;\nexports.InternalModel = InternalModel;\nexports.PromiseArray = PromiseArray;\nexports.PromiseObject = PromiseObject;\nexports.PromiseManyArray = PromiseManyArray;\nexports.RecordArray = RecordArray;\nexports.FilteredRecordArray = FilteredRecordArray;\nexports.AdapterPopulatedRecordArray = AdapterPopulatedRecordArray;\nexports.ManyArray = ManyArray;\nexports.RecordArrayManager = RecordArrayManager;\nexports.Relationship = Relationship;\nexports.Map = MapWithDeprecations;\nexports.MapWithDefault = MapWithDefault;\nexports.DebugAdapter = debugAdapter;\nexports.diffArray = diffArray;\nexports.RelationshipPayloadsManager = RelationshipPayloadsManager;\nexports.RelationshipPayloads = RelationshipPayloads;\nexports.SnapshotRecordArray = SnapshotRecordArray;\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n});\n","define('ember-data/adapter', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Object.extend({\n\n    /**\n      If you would like your adapter to use a custom serializer you can\n      set the `defaultSerializer` property to be the name of the custom\n      serializer.\n       Note the `defaultSerializer` serializer has a lower priority than\n      a model specific serializer (i.e. `PostSerializer`) or the\n      `application` serializer.\n       ```app/adapters/django.js\n      import DS from 'ember-data';\n       export default DS.Adapter.extend({\n        defaultSerializer: 'django'\n      });\n      ```\n       @property defaultSerializer\n      @type {String}\n    */\n    defaultSerializer: '-default',\n\n    /**\n      The `findRecord()` method is invoked when the store is asked for a record that\n      has not previously been loaded. In response to `findRecord()` being called, you\n      should query your persistence layer for a record with the given ID. The `findRecord`\n      method should return a promise that will resolve to a JavaScript object that will be\n      normalized by the serializer.\n       Here is an example `findRecord` implementation:\n       ```app/adapters/application.js\n      import DS from 'ember-data';\n      import RSVP from 'RSVP';\n      import $ from 'jquery';\n       export default DS.Adapter.extend({\n        findRecord(store, type, id, snapshot) {\n          return new RSVP.Promise(function(resolve, reject) {\n            $.getJSON(`/${type.modelName}/${id}`).then(function(data) {\n              resolve(data);\n            }, function(jqXHR) {\n              reject(jqXHR);\n            });\n          });\n        }\n      });\n      ```\n       @method findRecord\n      @param {DS.Store} store\n      @param {DS.Model} type\n      @param {String} id\n      @param {DS.Snapshot} snapshot\n      @return {Promise} promise\n    */\n    findRecord: null,\n\n    /**\n      The `findAll()` method is used to retrieve all records for a given type.\n       Example\n       ```app/adapters/application.js\n      import DS from 'ember-data';\n      import RSVP from 'RSVP';\n      import $ from 'jquery';\n       export default DS.Adapter.extend({\n        findAll(store, type, sinceToken) {\n          let query = { since: sinceToken };\n           return new RSVP.Promise(function(resolve, reject) {\n            $.getJSON(`/${type.modelName}`, query).then(function(data) {\n              resolve(data);\n            }, function(jqXHR) {\n              reject(jqXHR);\n            });\n          });\n        }\n      });\n      ```\n       @method findAll\n      @param {DS.Store} store\n      @param {DS.Model} type\n      @param {String} sinceToken\n      @param {DS.SnapshotRecordArray} snapshotRecordArray\n      @return {Promise} promise\n    */\n    findAll: null,\n\n    /**\n      This method is called when you call `query` on the store.\n       Example\n       ```app/adapters/application.js\n      import DS from 'ember-data';\n      import RSVP from 'RSVP';\n      import $ from 'jquery';\n       export default DS.Adapter.extend({\n        query(store, type, query) {\n          return new RSVP.Promise(function(resolve, reject) {\n            $.getJSON(`/${type.modelName}`, query).then(function(data) {\n              resolve(data);\n            }, function(jqXHR) {\n              reject(jqXHR);\n            });\n          });\n        }\n      });\n      ```\n       @method query\n      @param {DS.Store} store\n      @param {DS.Model} type\n      @param {Object} query\n      @param {DS.AdapterPopulatedRecordArray} recordArray\n      @return {Promise} promise\n    */\n    query: null,\n\n    /**\n      The `queryRecord()` method is invoked when the store is asked for a single\n      record through a query object.\n       In response to `queryRecord()` being called, you should always fetch fresh\n      data. Once found, you can asynchronously call the store's `push()` method\n      to push the record into the store.\n       Here is an example `queryRecord` implementation:\n       Example\n       ```app/adapters/application.js\n      import DS from 'ember-data';\n      import RSVP from 'RSVP';\n      import $ from 'jquery';\n       export default DS.Adapter.extend(DS.BuildURLMixin, {\n        queryRecord(store, type, query) {\n          return new RSVP.Promise(function(resolve, reject) {\n            $.getJSON(`/${type.modelName}`, query).then(function(data) {\n              resolve(data);\n            }, function(jqXHR) {\n              reject(jqXHR);\n            });\n          });\n        }\n      });\n      ```\n       @method queryRecord\n      @param {DS.Store} store\n      @param {subclass of DS.Model} type\n      @param {Object} query\n      @return {Promise} promise\n    */\n    queryRecord: null,\n\n    /**\n      If the globally unique IDs for your records should be generated on the client,\n      implement the `generateIdForRecord()` method. This method will be invoked\n      each time you create a new record, and the value returned from it will be\n      assigned to the record's `primaryKey`.\n       Most traditional REST-like HTTP APIs will not use this method. Instead, the ID\n      of the record will be set by the server, and your adapter will update the store\n      with the new ID when it calls `didCreateRecord()`. Only implement this method if\n      you intend to generate record IDs on the client-side.\n       The `generateIdForRecord()` method will be invoked with the requesting store as\n      the first parameter and the newly created record as the second parameter:\n       ```javascript\n      import DS from 'ember-data';\n      import { v4 } from 'uuid';\n       export default DS.Adapter.extend({\n        generateIdForRecord(store, inputProperties) {\n          return v4();\n        }\n      });\n      ```\n       @method generateIdForRecord\n      @param {DS.Store} store\n      @param {DS.Model} type   the DS.Model class of the record\n      @param {Object} inputProperties a hash of properties to set on the\n        newly created record.\n      @return {(String|Number)} id\n    */\n    generateIdForRecord: null,\n\n    /**\n      Proxies to the serializer's `serialize` method.\n       Example\n       ```app/adapters/application.js\n      import DS from 'ember-data';\n       export default DS.Adapter.extend({\n        createRecord(store, type, snapshot) {\n          let data = this.serialize(snapshot, { includeId: true });\n          let url = `/${type.modelName}`;\n           // ...\n        }\n      });\n      ```\n       @method serialize\n      @param {DS.Snapshot} snapshot\n      @param {Object}   options\n      @return {Object} serialized snapshot\n    */\n    serialize: function serialize(snapshot, options) {\n      return snapshot.serialize(options);\n    },\n\n\n    /**\n      Implement this method in a subclass to handle the creation of\n      new records.\n       Serializes the record and sends it to the server.\n       Example\n       ```app/adapters/application.js\n      import DS from 'ember-data';\n      import { run } from '@ember/runloop';\n      import RSVP from 'RSVP';\n      import $ from 'jquery';\n       export default DS.Adapter.extend({\n        createRecord(store, type, snapshot) {\n          let data = this.serialize(snapshot, { includeId: true });\n           return new RSVP.Promise(function(resolve, reject) {\n            $.ajax({\n              type: 'POST',\n              url: `/${type.modelName}`,\n              dataType: 'json',\n              data: data\n            }).then(function(data) {\n              run(null, resolve, data);\n            }, function(jqXHR) {\n              jqXHR.then = null; // tame jQuery's ill mannered promises\n              run(null, reject, jqXHR);\n            });\n          });\n        }\n      });\n      ```\n       @method createRecord\n      @param {DS.Store} store\n      @param {DS.Model} type   the DS.Model class of the record\n      @param {DS.Snapshot} snapshot\n      @return {Promise} promise\n    */\n    createRecord: null,\n\n    /**\n      Implement this method in a subclass to handle the updating of\n      a record.\n       Serializes the record update and sends it to the server.\n       The updateRecord method is expected to return a promise that will\n      resolve with the serialized record. This allows the backend to\n      inform the Ember Data store the current state of this record after\n      the update. If it is not possible to return a serialized record\n      the updateRecord promise can also resolve with `undefined` and the\n      Ember Data store will assume all of the updates were successfully\n      applied on the backend.\n       Example\n       ```app/adapters/application.js\n      import DS from 'ember-data';\n      import { run } from '@ember/runloop';\n      import RSVP from 'RSVP';\n      import $ from 'jquery';\n       export default DS.Adapter.extend({\n        updateRecord(store, type, snapshot) {\n          let data = this.serialize(snapshot, { includeId: true });\n          let id = snapshot.id;\n           return new RSVP.Promise(function(resolve, reject) {\n            $.ajax({\n              type: 'PUT',\n              url: `/${type.modelName}/${id}`,\n              dataType: 'json',\n              data: data\n            }).then(function(data) {\n              run(null, resolve, data);\n            }, function(jqXHR) {\n              jqXHR.then = null; // tame jQuery's ill mannered promises\n              run(null, reject, jqXHR);\n            });\n          });\n        }\n      });\n      ```\n       @method updateRecord\n      @param {DS.Store} store\n      @param {DS.Model} type   the DS.Model class of the record\n      @param {DS.Snapshot} snapshot\n      @return {Promise} promise\n    */\n    updateRecord: null,\n\n    /**\n      Implement this method in a subclass to handle the deletion of\n      a record.\n       Sends a delete request for the record to the server.\n       Example\n       ```app/adapters/application.js\n      import DS from 'ember-data';\n      import { run } from '@ember/runloop';\n      import RSVP from 'RSVP';\n      import $ from 'jquery';\n       export default DS.Adapter.extend({\n        deleteRecord(store, type, snapshot) {\n          let data = this.serialize(snapshot, { includeId: true });\n          let id = snapshot.id;\n           return new RSVP.Promise(function(resolve, reject) {\n            $.ajax({\n              type: 'DELETE',\n              url: `/${type.modelName}/${id}`,\n              dataType: 'json',\n              data: data\n            }).then(function(data) {\n              run(null, resolve, data);\n            }, function(jqXHR) {\n              jqXHR.then = null; // tame jQuery's ill mannered promises\n              run(null, reject, jqXHR);\n            });\n          });\n        }\n      });\n      ```\n       @method deleteRecord\n      @param {DS.Store} store\n      @param {DS.Model} type   the DS.Model class of the record\n      @param {DS.Snapshot} snapshot\n      @return {Promise} promise\n    */\n    deleteRecord: null,\n\n    /**\n      By default the store will try to coalesce all `fetchRecord` calls within the same runloop\n      into as few requests as possible by calling groupRecordsForFindMany and passing it into a findMany call.\n      You can opt out of this behaviour by either not implementing the findMany hook or by setting\n      coalesceFindRequests to false.\n       @property coalesceFindRequests\n      @type {boolean}\n    */\n    coalesceFindRequests: true,\n\n    /**\n      The store will call `findMany` instead of multiple `findRecord`\n      requests to find multiple records at once if coalesceFindRequests\n      is true.\n       ```app/adapters/application.js\n      import DS from 'ember-data';\n      import { run } from '@ember/runloop';\n      import RSVP from 'RSVP';\n      import $ from 'jquery';\n       export default DS.Adapter.extend({\n        findMany(store, type, ids, snapshots) {\n          return new RSVP.Promise(function(resolve, reject) {\n            $.ajax({\n              type: 'GET',\n              url: `/${type.modelName}/`,\n              dataType: 'json',\n              data: { filter: { id: ids.join(',') } }\n            }).then(function(data) {\n              run(null, resolve, data);\n            }, function(jqXHR) {\n              jqXHR.then = null; // tame jQuery's ill mannered promises\n              run(null, reject, jqXHR);\n            });\n          });\n        }\n      });\n      ```\n       @method findMany\n      @param {DS.Store} store\n      @param {DS.Model} type   the DS.Model class of the records\n      @param {Array}    ids\n      @param {Array} snapshots\n      @return {Promise} promise\n    */\n    findMany: null,\n\n    /**\n      Organize records into groups, each of which is to be passed to separate\n      calls to `findMany`.\n       For example, if your api has nested URLs that depend on the parent, you will\n      want to group records by their parent.\n       The default implementation returns the records as a single group.\n       @method groupRecordsForFindMany\n      @param {DS.Store} store\n      @param {Array} snapshots\n      @return {Array}  an array of arrays of records, each of which is to be\n                        loaded separately by `findMany`.\n    */\n    groupRecordsForFindMany: function groupRecordsForFindMany(store, snapshots) {\n      return [snapshots];\n    },\n\n\n    /**\n      This method is used by the store to determine if the store should\n      reload a record from the adapter when a record is requested by\n      `store.findRecord`.\n       If this method returns `true`, the store will re-fetch a record from\n      the adapter. If this method returns `false`, the store will resolve\n      immediately using the cached record.\n       For example, if you are building an events ticketing system, in which users\n      can only reserve tickets for 20 minutes at a time, and want to ensure that\n      in each route you have data that is no more than 20 minutes old you could\n      write:\n       ```javascript\n      shouldReloadRecord(store, ticketSnapshot) {\n        let lastAccessedAt = ticketSnapshot.attr('lastAccessedAt');\n        let timeDiff = moment().diff(lastAccessedAt, 'minutes');\n         if (timeDiff > 20) {\n          return true;\n        } else {\n          return false;\n        }\n      }\n      ```\n       This method would ensure that whenever you do `store.findRecord('ticket',\n      id)` you will always get a ticket that is no more than 20 minutes old. In\n      case the cached version is more than 20 minutes old, `findRecord` will not\n      resolve until you fetched the latest version.\n       By default this hook returns `false`, as most UIs should not block user\n      interactions while waiting on data update.\n       Note that, with default settings, `shouldBackgroundReloadRecord` will always\n      re-fetch the records in the background even if `shouldReloadRecord` returns\n      `false`. You can override `shouldBackgroundReloadRecord` if this does not\n      suit your use case.\n       @since 1.13.0\n      @method shouldReloadRecord\n      @param {DS.Store} store\n      @param {DS.Snapshot} snapshot\n      @return {Boolean}\n    */\n    shouldReloadRecord: function shouldReloadRecord(store, snapshot) {\n      return false;\n    },\n\n\n    /**\n      This method is used by the store to determine if the store should\n      reload all records from the adapter when records are requested by\n      `store.findAll`.\n       If this method returns `true`, the store will re-fetch all records from\n      the adapter. If this method returns `false`, the store will resolve\n      immediately using the cached records.\n       For example, if you are building an events ticketing system, in which users\n      can only reserve tickets for 20 minutes at a time, and want to ensure that\n      in each route you have data that is no more than 20 minutes old you could\n      write:\n       ```javascript\n      shouldReloadAll(store, snapshotArray) {\n        let snapshots = snapshotArray.snapshots();\n         return snapshots.any((ticketSnapshot) => {\n          let lastAccessedAt = ticketSnapshot.attr('lastAccessedAt');\n          let timeDiff = moment().diff(lastAccessedAt, 'minutes');\n           if (timeDiff > 20) {\n            return true;\n          } else {\n            return false;\n          }\n        });\n      }\n      ```\n       This method would ensure that whenever you do `store.findAll('ticket')` you\n      will always get a list of tickets that are no more than 20 minutes old. In\n      case a cached version is more than 20 minutes old, `findAll` will not\n      resolve until you fetched the latest versions.\n       By default this methods returns `true` if the passed `snapshotRecordArray`\n      is empty (meaning that there are no records locally available yet),\n      otherwise it returns `false`.\n       Note that, with default settings, `shouldBackgroundReloadAll` will always\n      re-fetch all the records in the background even if `shouldReloadAll` returns\n      `false`. You can override `shouldBackgroundReloadAll` if this does not suit\n      your use case.\n       @since 1.13.0\n      @method shouldReloadAll\n      @param {DS.Store} store\n      @param {DS.SnapshotRecordArray} snapshotRecordArray\n      @return {Boolean}\n    */\n    shouldReloadAll: function shouldReloadAll(store, snapshotRecordArray) {\n      return !snapshotRecordArray.length;\n    },\n\n\n    /**\n      This method is used by the store to determine if the store should\n      reload a record after the `store.findRecord` method resolves a\n      cached record.\n       This method is *only* checked by the store when the store is\n      returning a cached record.\n       If this method returns `true` the store will re-fetch a record from\n      the adapter.\n       For example, if you do not want to fetch complex data over a mobile\n      connection, or if the network is down, you can implement\n      `shouldBackgroundReloadRecord` as follows:\n       ```javascript\n      shouldBackgroundReloadRecord(store, snapshot) {\n        let connection = window.navigator.connection;\n         if (connection === 'cellular' || connection === 'none') {\n          return false;\n        } else {\n          return true;\n        }\n      }\n      ```\n       By default this hook returns `true` so the data for the record is updated\n      in the background.\n       @since 1.13.0\n      @method shouldBackgroundReloadRecord\n      @param {DS.Store} store\n      @param {DS.Snapshot} snapshot\n      @return {Boolean}\n    */\n    shouldBackgroundReloadRecord: function shouldBackgroundReloadRecord(store, snapshot) {\n      return true;\n    },\n\n\n    /**\n      This method is used by the store to determine if the store should\n      reload a record array after the `store.findAll` method resolves\n      with a cached record array.\n       This method is *only* checked by the store when the store is\n      returning a cached record array.\n       If this method returns `true` the store will re-fetch all records\n      from the adapter.\n       For example, if you do not want to fetch complex data over a mobile\n      connection, or if the network is down, you can implement\n      `shouldBackgroundReloadAll` as follows:\n       ```javascript\n      shouldBackgroundReloadAll(store, snapshotArray) {\n        let connection = window.navigator.connection;\n         if (connection === 'cellular' || connection === 'none') {\n          return false;\n        } else {\n          return true;\n        }\n      }\n      ```\n       By default this method returns `true`, indicating that a background reload\n      should always be triggered.\n       @since 1.13.0\n      @method shouldBackgroundReloadAll\n      @param {DS.Store} store\n      @param {DS.SnapshotRecordArray} snapshotRecordArray\n      @return {Boolean}\n    */\n    shouldBackgroundReloadAll: function shouldBackgroundReloadAll(store, snapshotRecordArray) {\n      return true;\n    }\n  });\n});","define('ember-data/adapters/errors', ['exports', 'ember-data/-private'], function (exports, _private) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'AdapterError', {\n    enumerable: true,\n    get: function () {\n      return _private.AdapterError;\n    }\n  });\n  Object.defineProperty(exports, 'InvalidError', {\n    enumerable: true,\n    get: function () {\n      return _private.InvalidError;\n    }\n  });\n  Object.defineProperty(exports, 'UnauthorizedError', {\n    enumerable: true,\n    get: function () {\n      return _private.UnauthorizedError;\n    }\n  });\n  Object.defineProperty(exports, 'ForbiddenError', {\n    enumerable: true,\n    get: function () {\n      return _private.ForbiddenError;\n    }\n  });\n  Object.defineProperty(exports, 'NotFoundError', {\n    enumerable: true,\n    get: function () {\n      return _private.NotFoundError;\n    }\n  });\n  Object.defineProperty(exports, 'ConflictError', {\n    enumerable: true,\n    get: function () {\n      return _private.ConflictError;\n    }\n  });\n  Object.defineProperty(exports, 'ServerError', {\n    enumerable: true,\n    get: function () {\n      return _private.ServerError;\n    }\n  });\n  Object.defineProperty(exports, 'TimeoutError', {\n    enumerable: true,\n    get: function () {\n      return _private.TimeoutError;\n    }\n  });\n  Object.defineProperty(exports, 'AbortError', {\n    enumerable: true,\n    get: function () {\n      return _private.AbortError;\n    }\n  });\n  Object.defineProperty(exports, 'errorsHashToArray', {\n    enumerable: true,\n    get: function () {\n      return _private.errorsHashToArray;\n    }\n  });\n  Object.defineProperty(exports, 'errorsArrayToHash', {\n    enumerable: true,\n    get: function () {\n      return _private.errorsArrayToHash;\n    }\n  });\n});","define('ember-data/adapters/json-api', ['exports', 'ember-data/adapters/rest', 'ember-data/-private', 'ember-inflector'], function (exports, _rest, _private, _emberInflector) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n\n  /**\n    The `JSONAPIAdapter` is the default adapter used by Ember Data. It\n    is responsible for transforming the store's requests into HTTP\n    requests that follow the [JSON API](http://jsonapi.org/format/)\n    format.\n  \n    ## JSON API Conventions\n  \n    The JSONAPIAdapter uses JSON API conventions for building the url\n    for a record and selecting the HTTP verb to use with a request. The\n    actions you can take on a record map onto the following URLs in the\n    JSON API adapter:\n  \n  <table>\n    <tr>\n      <th>\n        Action\n      </th>\n      <th>\n        HTTP Verb\n      </th>\n      <th>\n        URL\n      </th>\n    </tr>\n    <tr>\n      <th>\n        `store.findRecord('post', 123)`\n      </th>\n      <td>\n        GET\n      </td>\n      <td>\n        /posts/123\n      </td>\n    </tr>\n    <tr>\n      <th>\n        `store.findAll('post')`\n      </th>\n      <td>\n        GET\n      </td>\n      <td>\n        /posts\n      </td>\n    </tr>\n    <tr>\n      <th>\n        Update `postRecord.save()`\n      </th>\n      <td>\n        PATCH\n      </td>\n      <td>\n        /posts/123\n      </td>\n    </tr>\n    <tr>\n      <th>\n        Create `store.createRecord('post').save()`\n      </th>\n      <td>\n        POST\n      </td>\n      <td>\n        /posts\n      </td>\n    </tr>\n    <tr>\n      <th>\n        Delete `postRecord.destroyRecord()`\n      </th>\n      <td>\n        DELETE\n      </td>\n      <td>\n        /posts/123\n      </td>\n    </tr>\n  </table>\n  \n    ## Success and failure\n  \n    The JSONAPIAdapter will consider a success any response with a\n    status code of the 2xx family (\"Success\"), as well as 304 (\"Not\n    Modified\"). Any other status code will be considered a failure.\n  \n    On success, the request promise will be resolved with the full\n    response payload.\n  \n    Failed responses with status code 422 (\"Unprocessable Entity\") will\n    be considered \"invalid\". The response will be discarded, except for\n    the `errors` key. The request promise will be rejected with a\n    `DS.InvalidError`. This error object will encapsulate the saved\n    `errors` value.\n  \n    Any other status codes will be treated as an adapter error. The\n    request promise will be rejected, similarly to the invalid case,\n    but with an instance of `DS.AdapterError` instead.\n  \n    ### Endpoint path customization\n  \n    Endpoint paths can be prefixed with a `namespace` by setting the\n    namespace property on the adapter:\n  \n    ```app/adapters/application.js\n    import DS from 'ember-data';\n  \n    export default DS.JSONAPIAdapter.extend({\n      namespace: 'api/1'\n    });\n    ```\n    Requests for the `person` model would now target `/api/1/people/1`.\n  \n    ### Host customization\n  \n    An adapter can target other hosts by setting the `host` property.\n  \n    ```app/adapters/application.js\n    import DS from 'ember-data';\n  \n    export default DS.JSONAPIAdapter.extend({\n      host: 'https://api.example.com'\n    });\n    ```\n  \n    Requests for the `person` model would now target\n    `https://api.example.com/people/1`.\n  \n    @since 1.13.0\n    @class JSONAPIAdapter\n    @constructor\n    @namespace DS\n    @extends DS.RESTAdapter\n  */\n  var JSONAPIAdapter = _rest.default.extend({\n    defaultSerializer: '-json-api',\n\n    ajaxOptions: function ajaxOptions(url, type, options) {\n      var hash = this._super.apply(this, arguments);\n\n      if (hash.contentType) {\n        hash.contentType = 'application/vnd.api+json';\n      }\n\n      var beforeSend = hash.beforeSend;\n      hash.beforeSend = function (xhr) {\n        xhr.setRequestHeader('Accept', 'application/vnd.api+json');\n        if (beforeSend) {\n          beforeSend(xhr);\n        }\n      };\n\n      return hash;\n    },\n\n\n    /**\n      By default the JSONAPIAdapter will send each find request coming from a `store.find`\n      or from accessing a relationship separately to the server. If your server supports passing\n      ids as a query string, you can set coalesceFindRequests to true to coalesce all find requests\n      within a single runloop.\n       For example, if you have an initial payload of:\n       ```javascript\n      {\n        data: {\n          id: 1,\n          type: 'post',\n          relationship: {\n            comments: {\n              data: [\n                { id: 1, type: 'comment' },\n                { id: 2, type: 'comment' }\n              ]\n            }\n          }\n        }\n      }\n      ```\n       By default calling `post.get('comments')` will trigger the following requests(assuming the\n      comments haven't been loaded before):\n       ```\n      GET /comments/1\n      GET /comments/2\n      ```\n       If you set coalesceFindRequests to `true` it will instead trigger the following request:\n       ```\n      GET /comments?filter[id]=1,2\n      ```\n       Setting coalesceFindRequests to `true` also works for `store.find` requests and `belongsTo`\n      relationships accessed within the same runloop. If you set `coalesceFindRequests: true`\n       ```javascript\n      store.findRecord('comment', 1);\n      store.findRecord('comment', 2);\n      ```\n       will also send a request to: `GET /comments?filter[id]=1,2`\n       Note: Requests coalescing rely on URL building strategy. So if you override `buildURL` in your app\n      `groupRecordsForFindMany` more likely should be overridden as well in order for coalescing to work.\n       @property coalesceFindRequests\n      @type {boolean}\n    */\n    coalesceFindRequests: false,\n\n    findMany: function findMany(store, type, ids, snapshots) {\n      if ((0, _private.isEnabled)('ds-improved-ajax') && !this._hasCustomizedAjax()) {\n        return this._super.apply(this, arguments);\n      } else {\n        var url = this.buildURL(type.modelName, ids, snapshots, 'findMany');\n        return this.ajax(url, 'GET', { data: { filter: { id: ids.join(',') } } });\n      }\n    },\n    pathForType: function pathForType(modelName) {\n      var dasherized = Ember.String.dasherize(modelName);\n      return (0, _emberInflector.pluralize)(dasherized);\n    },\n    updateRecord: function updateRecord(store, type, snapshot) {\n      if ((0, _private.isEnabled)('ds-improved-ajax') && !this._hasCustomizedAjax()) {\n        return this._super.apply(this, arguments);\n      } else {\n        var data = {};\n        var serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot, { includeId: true });\n\n        var url = this.buildURL(type.modelName, snapshot.id, snapshot, 'updateRecord');\n\n        return this.ajax(url, 'PATCH', { data: data });\n      }\n    },\n    _hasCustomizedAjax: function _hasCustomizedAjax() {\n      if (this.ajax !== JSONAPIAdapter.prototype.ajax) {\n        (true && !(false) && Ember.deprecate('JSONAPIAdapter#ajax has been deprecated please use. `methodForRequest`, `urlForRequest`, `headersForRequest` or `dataForRequest` instead.', false, {\n          id: 'ds.json-api-adapter.ajax',\n          until: '3.0.0'\n        }));\n\n        return true;\n      }\n\n      if (this.ajaxOptions !== JSONAPIAdapter.prototype.ajaxOptions) {\n        (true && !(false) && Ember.deprecate('JSONAPIAdapterr#ajaxOptions has been deprecated please use. `methodForRequest`, `urlForRequest`, `headersForRequest` or `dataForRequest` instead.', false, {\n          id: 'ds.json-api-adapter.ajax-options',\n          until: '3.0.0'\n        }));\n\n        return true;\n      }\n\n      return false;\n    }\n  }); /* global heimdall */\n  /**\n    @module ember-data\n  */\n\n\n  if ((0, _private.isEnabled)('ds-improved-ajax')) {\n\n    JSONAPIAdapter.reopen({\n      methodForRequest: function methodForRequest(params) {\n        if (params.requestType === 'updateRecord') {\n          return 'PATCH';\n        }\n\n        return this._super.apply(this, arguments);\n      },\n      dataForRequest: function dataForRequest(params) {\n        var requestType = params.requestType,\n            ids = params.ids;\n\n\n        if (requestType === 'findMany') {\n          return {\n            filter: { id: ids.join(',') }\n          };\n        }\n\n        if (requestType === 'updateRecord') {\n          var store = params.store,\n              type = params.type,\n              snapshot = params.snapshot;\n\n          var data = {};\n          var serializer = store.serializerFor(type.modelName);\n\n          serializer.serializeIntoHash(data, type, snapshot, { includeId: true });\n\n          return data;\n        }\n\n        return this._super.apply(this, arguments);\n      },\n      headersForRequest: function headersForRequest() {\n        var headers = this._super.apply(this, arguments) || {};\n\n        headers['Accept'] = 'application/vnd.api+json';\n\n        return headers;\n      },\n      _requestToJQueryAjaxHash: function _requestToJQueryAjaxHash() {\n        var hash = this._super.apply(this, arguments);\n\n        if (hash.contentType) {\n          hash.contentType = 'application/vnd.api+json';\n        }\n\n        return hash;\n      }\n    });\n  }\n\n  exports.default = JSONAPIAdapter;\n});","define('ember-data/adapters/rest', ['exports', 'ember-data/adapter', 'ember-data/-private'], function (exports, _adapter, _private) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  /* global heimdall */\n  /**\n    @module ember-data\n  */\n\n  var Promise = Ember.RSVP.Promise;\n\n  /**\n    The REST adapter allows your store to communicate with an HTTP server by\n    transmitting JSON via XHR. Most Ember.js apps that consume a JSON API\n    should use the REST adapter.\n  \n    This adapter is designed around the idea that the JSON exchanged with\n    the server should be conventional.\n  \n    ## Success and failure\n  \n    The REST adapter will consider a success any response with a status code\n    of the 2xx family (\"Success\"), as well as 304 (\"Not Modified\"). Any other\n    status code will be considered a failure.\n  \n    On success, the request promise will be resolved with the full response\n    payload.\n  \n    Failed responses with status code 422 (\"Unprocessable Entity\") will be\n    considered \"invalid\". The response will be discarded, except for the\n    `errors` key. The request promise will be rejected with a `DS.InvalidError`.\n    This error object will encapsulate the saved `errors` value.\n  \n    Any other status codes will be treated as an \"adapter error\". The request\n    promise will be rejected, similarly to the \"invalid\" case, but with\n    an instance of `DS.AdapterError` instead.\n  \n    ## JSON Structure\n  \n    The REST adapter expects the JSON returned from your server to follow\n    these conventions.\n  \n    ### Object Root\n  \n    The JSON payload should be an object that contains the record inside a\n    root property. For example, in response to a `GET` request for\n    `/posts/1`, the JSON should look like this:\n  \n    ```js\n    {\n      \"posts\": {\n        \"id\": 1,\n        \"title\": \"I'm Running to Reform the W3C's Tag\",\n        \"author\": \"Yehuda Katz\"\n      }\n    }\n    ```\n  \n    Similarly, in response to a `GET` request for `/posts`, the JSON should\n    look like this:\n  \n    ```js\n    {\n      \"posts\": [\n        {\n          \"id\": 1,\n          \"title\": \"I'm Running to Reform the W3C's Tag\",\n          \"author\": \"Yehuda Katz\"\n        },\n        {\n          \"id\": 2,\n          \"title\": \"Rails is omakase\",\n          \"author\": \"D2H\"\n        }\n      ]\n    }\n    ```\n  \n    Note that the object root can be pluralized for both a single-object response\n    and an array response: the REST adapter is not strict on this. Further, if the\n    HTTP server responds to a `GET` request to `/posts/1` (e.g. the response to a\n    `findRecord` query) with more than one object in the array, Ember Data will\n    only display the object with the matching ID.\n  \n    ### Conventional Names\n  \n    Attribute names in your JSON payload should be the camelCased versions of\n    the attributes in your Ember.js models.\n  \n    For example, if you have a `Person` model:\n  \n    ```app/models/person.js\n    import DS from 'ember-data';\n  \n    export default DS.Model.extend({\n      firstName: DS.attr('string'),\n      lastName: DS.attr('string'),\n      occupation: DS.attr('string')\n    });\n    ```\n  \n    The JSON returned should look like this:\n  \n    ```js\n    {\n      \"people\": {\n        \"id\": 5,\n        \"firstName\": \"Zaphod\",\n        \"lastName\": \"Beeblebrox\",\n        \"occupation\": \"President\"\n      }\n    }\n    ```\n  \n    #### Relationships\n  \n    Relationships are usually represented by ids to the record in the\n    relationship. The related records can then be sideloaded in the\n    response under a key for the type.\n  \n    ```js\n    {\n      \"posts\": {\n        \"id\": 5,\n        \"title\": \"I'm Running to Reform the W3C's Tag\",\n        \"author\": \"Yehuda Katz\",\n        \"comments\": [1, 2]\n      },\n      \"comments\": [{\n        \"id\": 1,\n        \"author\": \"User 1\",\n        \"message\": \"First!\",\n      }, {\n        \"id\": 2,\n        \"author\": \"User 2\",\n        \"message\": \"Good Luck!\",\n      }]\n    }\n    ```\n  \n    If the records in the relationship are not known when the response\n    is serialized its also possible to represent the relationship as a\n    url using the `links` key in the response. Ember Data will fetch\n    this url to resolve the relationship when it is accessed for the\n    first time.\n  \n    ```js\n    {\n      \"posts\": {\n        \"id\": 5,\n        \"title\": \"I'm Running to Reform the W3C's Tag\",\n        \"author\": \"Yehuda Katz\",\n        \"links\": {\n          \"comments\": \"/posts/5/comments\"\n        }\n      }\n    }\n    ```\n  \n    ### Errors\n  \n    If a response is considered a failure, the JSON payload is expected to include\n    a top-level key `errors`, detailing any specific issues. For example:\n  \n    ```js\n    {\n      \"errors\": {\n        \"msg\": \"Something went wrong\"\n      }\n    }\n    ```\n  \n    This adapter does not make any assumptions as to the format of the `errors`\n    object. It will simply be passed along as is, wrapped in an instance\n    of `DS.InvalidError` or `DS.AdapterError`. The serializer can interpret it\n    afterwards.\n  \n    ## Customization\n  \n    ### Endpoint path customization\n  \n    Endpoint paths can be prefixed with a `namespace` by setting the namespace\n    property on the adapter:\n  \n    ```app/adapters/application.js\n    import DS from 'ember-data';\n  \n    export default DS.RESTAdapter.extend({\n      namespace: 'api/1'\n    });\n    ```\n    Requests for the `Person` model would now target `/api/1/people/1`.\n  \n    ### Host customization\n  \n    An adapter can target other hosts by setting the `host` property.\n  \n    ```app/adapters/application.js\n    import DS from 'ember-data';\n  \n    export default DS.RESTAdapter.extend({\n      host: 'https://api.example.com'\n    });\n    ```\n  \n    ### Headers customization\n  \n    Some APIs require HTTP headers, e.g. to provide an API key. Arbitrary\n    headers can be set as key/value pairs on the `RESTAdapter`'s `headers`\n    object and Ember Data will send them along with each ajax request.\n  \n  \n    ```app/adapters/application.js\n    import DS from 'ember-data';\n    import { computed } from '@ember/object';\n  \n    export default DS.RESTAdapter.extend({\n      headers: computed(function() {\n        return {\n          'API_KEY': 'secret key',\n          'ANOTHER_HEADER': 'Some header value'\n        };\n      }\n    });\n    ```\n  \n    `headers` can also be used as a computed property to support dynamic\n    headers. In the example below, the `session` object has been\n    injected into an adapter by Ember's container.\n  \n    ```app/adapters/application.js\n    import DS from 'ember-data';\n    import { computed } from '@ember/object';\n  \n    export default DS.RESTAdapter.extend({\n      headers: computed('session.authToken', function() {\n        return {\n          'API_KEY': this.get('session.authToken'),\n          'ANOTHER_HEADER': 'Some header value'\n        };\n      })\n    });\n    ```\n  \n    In some cases, your dynamic headers may require data from some\n    object outside of Ember's observer system (for example\n    `document.cookie`). You can use the\n    [volatile](/api/classes/Ember.ComputedProperty.html#method_volatile)\n    function to set the property into a non-cached mode causing the headers to\n    be recomputed with every request.\n  \n    ```app/adapters/application.js\n    import DS from 'ember-data';\n    import { get } from '@ember/object';\n    import { computed } from '@ember/object';\n  \n    export default DS.RESTAdapter.extend({\n      headers: computed(function() {\n        return {\n          'API_KEY': get(document.cookie.match(/apiKey\\=([^;]*)/), '1'),\n          'ANOTHER_HEADER': 'Some header value'\n        };\n      }).volatile()\n    });\n    ```\n  \n    @class RESTAdapter\n    @constructor\n    @namespace DS\n    @extends DS.Adapter\n    @uses DS.BuildURLMixin\n  */\n  var RESTAdapter = _adapter.default.extend(_private.BuildURLMixin, {\n    defaultSerializer: '-rest',\n\n    sortQueryParams: function sortQueryParams(obj) {\n      var keys = Object.keys(obj);\n      var len = keys.length;\n      if (len < 2) {\n        return obj;\n      }\n      var newQueryParams = {};\n      var sortedKeys = keys.sort();\n\n      for (var i = 0; i < len; i++) {\n        newQueryParams[sortedKeys[i]] = obj[sortedKeys[i]];\n      }\n      return newQueryParams;\n    },\n\n\n    /**\n      By default the RESTAdapter will send each find request coming from a `store.find`\n      or from accessing a relationship separately to the server. If your server supports passing\n      ids as a query string, you can set coalesceFindRequests to true to coalesce all find requests\n      within a single runloop.\n       For example, if you have an initial payload of:\n       ```javascript\n      {\n        post: {\n          id: 1,\n          comments: [1, 2]\n        }\n      }\n      ```\n       By default calling `post.get('comments')` will trigger the following requests(assuming the\n      comments haven't been loaded before):\n       ```\n      GET /comments/1\n      GET /comments/2\n      ```\n       If you set coalesceFindRequests to `true` it will instead trigger the following request:\n       ```\n      GET /comments?ids[]=1&ids[]=2\n      ```\n       Setting coalesceFindRequests to `true` also works for `store.find` requests and `belongsTo`\n      relationships accessed within the same runloop. If you set `coalesceFindRequests: true`\n       ```javascript\n      store.findRecord('comment', 1);\n      store.findRecord('comment', 2);\n      ```\n       will also send a request to: `GET /comments?ids[]=1&ids[]=2`\n       Note: Requests coalescing rely on URL building strategy. So if you override `buildURL` in your app\n      `groupRecordsForFindMany` more likely should be overridden as well in order for coalescing to work.\n       @property coalesceFindRequests\n      @type {boolean}\n    */\n    coalesceFindRequests: false,\n\n    findRecord: function findRecord(store, type, id, snapshot) {\n      if ((0, _private.isEnabled)('ds-improved-ajax') && !this._hasCustomizedAjax()) {\n        var request = this._requestFor({\n          store: store, type: type, id: id, snapshot: snapshot,\n          requestType: 'findRecord'\n        });\n\n        return this._makeRequest(request);\n      } else {\n        var url = this.buildURL(type.modelName, id, snapshot, 'findRecord');\n        var query = this.buildQuery(snapshot);\n\n        return this.ajax(url, 'GET', { data: query });\n      }\n    },\n    findAll: function findAll(store, type, sinceToken, snapshotRecordArray) {\n      var query = this.buildQuery(snapshotRecordArray);\n\n      if ((0, _private.isEnabled)('ds-improved-ajax') && !this._hasCustomizedAjax()) {\n        var request = this._requestFor({\n          store: store, type: type, sinceToken: sinceToken, query: query,\n          snapshots: snapshotRecordArray,\n          requestType: 'findAll'\n        });\n\n        return this._makeRequest(request);\n      } else {\n        var url = this.buildURL(type.modelName, null, snapshotRecordArray, 'findAll');\n\n        if (sinceToken) {\n          query.since = sinceToken;\n        }\n\n        return this.ajax(url, 'GET', { data: query });\n      }\n    },\n    query: function query(store, type, _query) {\n      if ((0, _private.isEnabled)('ds-improved-ajax') && !this._hasCustomizedAjax()) {\n        var request = this._requestFor({\n          store: store, type: type, query: _query,\n          requestType: 'query'\n        });\n\n        return this._makeRequest(request);\n      } else {\n        var url = this.buildURL(type.modelName, null, null, 'query', _query);\n\n        if (this.sortQueryParams) {\n          _query = this.sortQueryParams(_query);\n        }\n\n        return this.ajax(url, 'GET', { data: _query });\n      }\n    },\n    queryRecord: function queryRecord(store, type, query) {\n      if ((0, _private.isEnabled)('ds-improved-ajax') && !this._hasCustomizedAjax()) {\n        var request = this._requestFor({\n          store: store, type: type, query: query,\n          requestType: 'queryRecord'\n        });\n\n        return this._makeRequest(request);\n      } else {\n        var url = this.buildURL(type.modelName, null, null, 'queryRecord', query);\n\n        if (this.sortQueryParams) {\n          query = this.sortQueryParams(query);\n        }\n\n        return this.ajax(url, 'GET', { data: query });\n      }\n    },\n    findMany: function findMany(store, type, ids, snapshots) {\n      if ((0, _private.isEnabled)('ds-improved-ajax') && !this._hasCustomizedAjax()) {\n        var request = this._requestFor({\n          store: store, type: type, ids: ids, snapshots: snapshots,\n          requestType: 'findMany'\n        });\n\n        return this._makeRequest(request);\n      } else {\n        var url = this.buildURL(type.modelName, ids, snapshots, 'findMany');\n        return this.ajax(url, 'GET', { data: { ids: ids } });\n      }\n    },\n    findHasMany: function findHasMany(store, snapshot, url, relationship) {\n      if ((0, _private.isEnabled)('ds-improved-ajax') && !this._hasCustomizedAjax()) {\n        var request = this._requestFor({\n          store: store, snapshot: snapshot, url: url, relationship: relationship,\n          requestType: 'findHasMany'\n        });\n\n        return this._makeRequest(request);\n      } else {\n        var id = snapshot.id;\n        var type = snapshot.modelName;\n\n        url = this.urlPrefix(url, this.buildURL(type, id, snapshot, 'findHasMany'));\n\n        return this.ajax(url, 'GET');\n      }\n    },\n    findBelongsTo: function findBelongsTo(store, snapshot, url, relationship) {\n      if ((0, _private.isEnabled)('ds-improved-ajax') && !this._hasCustomizedAjax()) {\n        var request = this._requestFor({\n          store: store, snapshot: snapshot, url: url, relationship: relationship,\n          requestType: 'findBelongsTo'\n        });\n\n        return this._makeRequest(request);\n      } else {\n        var id = snapshot.id;\n        var type = snapshot.modelName;\n\n        url = this.urlPrefix(url, this.buildURL(type, id, snapshot, 'findBelongsTo'));\n        return this.ajax(url, 'GET');\n      }\n    },\n    createRecord: function createRecord(store, type, snapshot) {\n      if ((0, _private.isEnabled)('ds-improved-ajax') && !this._hasCustomizedAjax()) {\n        var request = this._requestFor({\n          store: store, type: type, snapshot: snapshot,\n          requestType: 'createRecord'\n        });\n\n        return this._makeRequest(request);\n      } else {\n        var data = {};\n        var serializer = store.serializerFor(type.modelName);\n        var url = this.buildURL(type.modelName, null, snapshot, 'createRecord');\n\n        serializer.serializeIntoHash(data, type, snapshot, { includeId: true });\n\n        return this.ajax(url, \"POST\", { data: data });\n      }\n    },\n    updateRecord: function updateRecord(store, type, snapshot) {\n      if ((0, _private.isEnabled)('ds-improved-ajax') && !this._hasCustomizedAjax()) {\n        var request = this._requestFor({\n          store: store, type: type, snapshot: snapshot,\n          requestType: 'updateRecord'\n        });\n\n        return this._makeRequest(request);\n      } else {\n        var data = {};\n        var serializer = store.serializerFor(type.modelName);\n\n        serializer.serializeIntoHash(data, type, snapshot);\n\n        var id = snapshot.id;\n        var url = this.buildURL(type.modelName, id, snapshot, 'updateRecord');\n\n        return this.ajax(url, \"PUT\", { data: data });\n      }\n    },\n    deleteRecord: function deleteRecord(store, type, snapshot) {\n      if ((0, _private.isEnabled)('ds-improved-ajax') && !this._hasCustomizedAjax()) {\n        var request = this._requestFor({\n          store: store, type: type, snapshot: snapshot,\n          requestType: 'deleteRecord'\n        });\n\n        return this._makeRequest(request);\n      } else {\n        var id = snapshot.id;\n\n        return this.ajax(this.buildURL(type.modelName, id, snapshot, 'deleteRecord'), \"DELETE\");\n      }\n    },\n    _stripIDFromURL: function _stripIDFromURL(store, snapshot) {\n      var url = this.buildURL(snapshot.modelName, snapshot.id, snapshot);\n\n      var expandedURL = url.split('/');\n      // Case when the url is of the format ...something/:id\n      // We are decodeURIComponent-ing the lastSegment because if it represents\n      // the id, it has been encodeURIComponent-ified within `buildURL`. If we\n      // don't do this, then records with id having special characters are not\n      // coalesced correctly (see GH #4190 for the reported bug)\n      var lastSegment = expandedURL[expandedURL.length - 1];\n      var id = snapshot.id;\n      if (decodeURIComponent(lastSegment) === id) {\n        expandedURL[expandedURL.length - 1] = \"\";\n      } else if (endsWith(lastSegment, '?id=' + id)) {\n        //Case when the url is of the format ...something?id=:id\n        expandedURL[expandedURL.length - 1] = lastSegment.substring(0, lastSegment.length - id.length - 1);\n      }\n\n      return expandedURL.join('/');\n    },\n\n\n    // http://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers\n    maxURLLength: 2048,\n\n    groupRecordsForFindMany: function groupRecordsForFindMany(store, snapshots) {\n      var groups = new _private.MapWithDefault({\n        defaultValue: function defaultValue() {\n          return [];\n        }\n      });\n      var adapter = this;\n      var maxURLLength = this.maxURLLength;\n\n      snapshots.forEach(function (snapshot) {\n        var baseUrl = adapter._stripIDFromURL(store, snapshot);\n        groups.get(baseUrl).push(snapshot);\n      });\n\n      function splitGroupToFitInUrl(group, maxURLLength, paramNameLength) {\n        var idsSize = 0;\n        var baseUrl = adapter._stripIDFromURL(store, group[0]);\n        var splitGroups = [[]];\n\n        group.forEach(function (snapshot) {\n          var additionalLength = encodeURIComponent(snapshot.id).length + paramNameLength;\n          if (baseUrl.length + idsSize + additionalLength >= maxURLLength) {\n            idsSize = 0;\n            splitGroups.push([]);\n          }\n\n          idsSize += additionalLength;\n\n          var lastGroupIndex = splitGroups.length - 1;\n          splitGroups[lastGroupIndex].push(snapshot);\n        });\n\n        return splitGroups;\n      }\n\n      var groupsArray = [];\n      groups.forEach(function (group, key) {\n        var paramNameLength = '&ids%5B%5D='.length;\n        var splitGroups = splitGroupToFitInUrl(group, maxURLLength, paramNameLength);\n\n        splitGroups.forEach(function (splitGroup) {\n          return groupsArray.push(splitGroup);\n        });\n      });\n\n      return groupsArray;\n    },\n    handleResponse: function handleResponse(status, headers, payload, requestData) {\n      if (this.isSuccess(status, headers, payload)) {\n        return payload;\n      } else if (this.isInvalid(status, headers, payload)) {\n        return new _private.InvalidError(payload.errors);\n      }\n\n      var errors = this.normalizeErrorResponse(status, headers, payload);\n      var detailedMessage = this.generatedDetailedMessage(status, headers, payload, requestData);\n\n      switch (status) {\n        case 401:\n          return new _private.UnauthorizedError(errors, detailedMessage);\n        case 403:\n          return new _private.ForbiddenError(errors, detailedMessage);\n        case 404:\n          return new _private.NotFoundError(errors, detailedMessage);\n        case 409:\n          return new _private.ConflictError(errors, detailedMessage);\n        default:\n          if (status >= 500) {\n            return new _private.ServerError(errors, detailedMessage);\n          }\n      }\n\n      return new _private.AdapterError(errors, detailedMessage);\n    },\n    isSuccess: function isSuccess(status, headers, payload) {\n      return status >= 200 && status < 300 || status === 304;\n    },\n    isInvalid: function isInvalid(status, headers, payload) {\n      return status === 422;\n    },\n    ajax: function ajax(url, type, options) {\n      var adapter = this;\n\n      var requestData = {\n        url: url,\n        method: type\n      };\n\n      return new Promise(function (resolve, reject) {\n        var hash = adapter.ajaxOptions(url, type, options);\n\n        hash.success = function (payload, textStatus, jqXHR) {\n          var response = ajaxSuccess(adapter, jqXHR, payload, requestData);\n          Ember.run.join(null, resolve, response);\n        };\n\n        hash.error = function (jqXHR, textStatus, errorThrown) {\n          var responseData = {\n            textStatus: textStatus,\n            errorThrown: errorThrown\n          };\n          var error = ajaxError(adapter, jqXHR, requestData, responseData);\n          Ember.run.join(null, reject, error);\n        };\n\n        adapter._ajaxRequest(hash);\n      }, 'DS: RESTAdapter#ajax ' + type + ' to ' + url);\n    },\n    _ajaxRequest: function _ajaxRequest(options) {\n      Ember.$.ajax(options);\n    },\n    ajaxOptions: function ajaxOptions(url, type, options) {\n      var hash = options || {};\n      hash.url = url;\n      hash.type = type;\n      hash.dataType = 'json';\n      hash.context = this;\n\n      if (hash.data && type !== 'GET') {\n        hash.contentType = 'application/json; charset=utf-8';\n        hash.data = JSON.stringify(hash.data);\n      }\n\n      var headers = Ember.get(this, 'headers');\n      if (headers !== undefined) {\n        hash.beforeSend = function (xhr) {\n          Object.keys(headers).forEach(function (key) {\n            return xhr.setRequestHeader(key, headers[key]);\n          });\n        };\n      }\n\n      return hash;\n    },\n    parseErrorResponse: function parseErrorResponse(responseText) {\n      var json = responseText;\n\n      try {\n        json = Ember.$.parseJSON(responseText);\n      } catch (e) {\n        // ignored\n      }\n\n      return json;\n    },\n    normalizeErrorResponse: function normalizeErrorResponse(status, headers, payload) {\n      if (payload && typeof payload === 'object' && payload.errors) {\n        return payload.errors;\n      } else {\n        return [{\n          status: '' + status,\n          title: \"The backend responded with an error\",\n          detail: '' + payload\n        }];\n      }\n    },\n\n\n    /**\n      Generates a detailed (\"friendly\") error message, with plenty\n      of information for debugging (good luck!)\n       @method generatedDetailedMessage\n      @private\n      @param  {Number} status\n      @param  {Object} headers\n      @param  {Object} payload\n      @param  {Object} requestData\n      @return {String} detailed error message\n    */\n    generatedDetailedMessage: function generatedDetailedMessage(status, headers, payload, requestData) {\n      var shortenedPayload = void 0;\n      var payloadContentType = headers[\"Content-Type\"] || \"Empty Content-Type\";\n\n      if (payloadContentType === \"text/html\" && payload.length > 250) {\n        shortenedPayload = \"[Omitted Lengthy HTML]\";\n      } else {\n        shortenedPayload = payload;\n      }\n\n      var requestDescription = requestData.method + ' ' + requestData.url;\n      var payloadDescription = 'Payload (' + payloadContentType + ')';\n\n      return ['Ember Data Request ' + requestDescription + ' returned a ' + status, payloadDescription, shortenedPayload].join('\\n');\n    },\n\n    buildQuery: function buildQuery(snapshot) {\n      var query = {};\n\n      if (snapshot) {\n        var include = snapshot.include;\n\n\n        if (include) {\n          query.include = include;\n        }\n      }\n\n      return query;\n    },\n    _hasCustomizedAjax: function _hasCustomizedAjax() {\n      if (this.ajax !== RESTAdapter.prototype.ajax) {\n        (true && !(false) && Ember.deprecate('RESTAdapter#ajax has been deprecated please use. `methodForRequest`, `urlForRequest`, `headersForRequest` or `dataForRequest` instead.', false, {\n          id: 'ds.rest-adapter.ajax',\n          until: '3.0.0'\n        }));\n\n        return true;\n      }\n\n      if (this.ajaxOptions !== RESTAdapter.prototype.ajaxOptions) {\n        (true && !(false) && Ember.deprecate('RESTAdapter#ajaxOptions has been deprecated please use. `methodForRequest`, `urlForRequest`, `headersForRequest` or `dataForRequest` instead.', false, {\n          id: 'ds.rest-adapter.ajax-options',\n          until: '3.0.0'\n        }));\n\n        return true;\n      }\n\n      return false;\n    }\n  });\n\n  if ((0, _private.isEnabled)('ds-improved-ajax')) {\n\n    RESTAdapter.reopen({\n      dataForRequest: function dataForRequest(params) {\n        var store = params.store,\n            type = params.type,\n            snapshot = params.snapshot,\n            requestType = params.requestType,\n            query = params.query;\n\n\n        // type is not passed to findBelongsTo and findHasMany\n        type = type || snapshot && snapshot.type;\n\n        var serializer = store.serializerFor(type.modelName);\n        var data = {};\n\n        switch (requestType) {\n          case 'createRecord':\n            serializer.serializeIntoHash(data, type, snapshot, { includeId: true });\n            break;\n\n          case 'updateRecord':\n            serializer.serializeIntoHash(data, type, snapshot);\n            break;\n\n          case 'findRecord':\n            data = this.buildQuery(snapshot);\n            break;\n\n          case 'findAll':\n            if (params.sinceToken) {\n              query = query || {};\n              query.since = params.sinceToken;\n            }\n            data = query;\n            break;\n\n          case 'query':\n          case 'queryRecord':\n            if (this.sortQueryParams) {\n              query = this.sortQueryParams(query);\n            }\n            data = query;\n            break;\n\n          case 'findMany':\n            data = { ids: params.ids };\n            break;\n\n          default:\n            data = undefined;\n            break;\n        }\n\n        return data;\n      },\n      methodForRequest: function methodForRequest(params) {\n        var requestType = params.requestType;\n\n\n        switch (requestType) {\n          case 'createRecord':\n            return 'POST';\n          case 'updateRecord':\n            return 'PUT';\n          case 'deleteRecord':\n            return 'DELETE';\n        }\n\n        return 'GET';\n      },\n      urlForRequest: function urlForRequest(params) {\n        var type = params.type,\n            id = params.id,\n            ids = params.ids,\n            snapshot = params.snapshot,\n            snapshots = params.snapshots,\n            requestType = params.requestType,\n            query = params.query;\n\n\n        // type and id are not passed from updateRecord and deleteRecord, hence they\n        // are defined if not set\n        type = type || snapshot && snapshot.type;\n        id = id || snapshot && snapshot.id;\n\n        switch (requestType) {\n          case 'findAll':\n            return this.buildURL(type.modelName, null, snapshots, requestType);\n\n          case 'query':\n          case 'queryRecord':\n            return this.buildURL(type.modelName, null, null, requestType, query);\n\n          case 'findMany':\n            return this.buildURL(type.modelName, ids, snapshots, requestType);\n\n          case 'findHasMany':\n          case 'findBelongsTo':\n            {\n              var url = this.buildURL(type.modelName, id, snapshot, requestType);\n              return this.urlPrefix(params.url, url);\n            }\n        }\n\n        return this.buildURL(type.modelName, id, snapshot, requestType, query);\n      },\n      headersForRequest: function headersForRequest(params) {\n        return this.get('headers');\n      },\n      _requestFor: function _requestFor(params) {\n        var method = this.methodForRequest(params);\n        var url = this.urlForRequest(params);\n        var headers = this.headersForRequest(params);\n        var data = this.dataForRequest(params);\n\n        return { method: method, url: url, headers: headers, data: data };\n      },\n      _requestToJQueryAjaxHash: function _requestToJQueryAjaxHash(request) {\n        var hash = {};\n\n        hash.type = request.method;\n        hash.url = request.url;\n        hash.dataType = 'json';\n        hash.context = this;\n\n        if (request.data) {\n          if (request.method !== 'GET') {\n            hash.contentType = 'application/json; charset=utf-8';\n            hash.data = JSON.stringify(request.data);\n          } else {\n            hash.data = request.data;\n          }\n        }\n\n        var headers = request.headers;\n        if (headers !== undefined) {\n          hash.beforeSend = function (xhr) {\n            Object.keys(headers).forEach(function (key) {\n              return xhr.setRequestHeader(key, headers[key]);\n            });\n          };\n        }\n\n        return hash;\n      },\n      _makeRequest: function _makeRequest(request) {\n        var adapter = this;\n        var hash = this._requestToJQueryAjaxHash(request);\n\n        var method = request.method,\n            url = request.url;\n\n        var requestData = { method: method, url: url };\n\n        return new Promise(function (resolve, reject) {\n\n          hash.success = function (payload, textStatus, jqXHR) {\n            var response = ajaxSuccess(adapter, jqXHR, payload, requestData);\n            Ember.run.join(null, resolve, response);\n          };\n\n          hash.error = function (jqXHR, textStatus, errorThrown) {\n            var responseData = {\n              textStatus: textStatus,\n              errorThrown: errorThrown\n            };\n            var error = ajaxError(adapter, jqXHR, requestData, responseData);\n            Ember.run.join(null, reject, error);\n          };\n\n          adapter._ajaxRequest(hash);\n        }, 'DS: RESTAdapter#makeRequest: ' + method + ' ' + url);\n      }\n    });\n  }\n\n  function ajaxSuccess(adapter, jqXHR, payload, requestData) {\n    var response = void 0;\n    try {\n      response = adapter.handleResponse(jqXHR.status, (0, _private.parseResponseHeaders)(jqXHR.getAllResponseHeaders()), payload, requestData);\n    } catch (error) {\n      return Promise.reject(error);\n    }\n\n    if (response && response.isAdapterError) {\n      return Promise.reject(response);\n    } else {\n      return response;\n    }\n  }\n\n  function ajaxError(adapter, jqXHR, requestData, responseData) {\n    if (true) {\n      var message = 'The server returned an empty string for ' + requestData.method + ' ' + requestData.url + ', which cannot be parsed into a valid JSON. Return either null or {}.';\n      var validJSONString = !(responseData.textStatus === \"parsererror\" && jqXHR.responseText === \"\");\n      (true && Ember.warn(message, validJSONString, {\n        id: 'ds.adapter.returned-empty-string-as-JSON'\n      }));\n    }\n\n    var error = void 0;\n\n    if (responseData.errorThrown instanceof Error) {\n      error = responseData.errorThrown;\n    } else if (responseData.textStatus === 'timeout') {\n      error = new _private.TimeoutError();\n    } else if (responseData.textStatus === 'abort' || jqXHR.status === 0) {\n      error = new _private.AbortError();\n    } else {\n      try {\n        error = adapter.handleResponse(jqXHR.status, (0, _private.parseResponseHeaders)(jqXHR.getAllResponseHeaders()), adapter.parseErrorResponse(jqXHR.responseText) || responseData.errorThrown, requestData);\n      } catch (e) {\n        error = e;\n      }\n    }\n\n    return error;\n  }\n\n  //From http://stackoverflow.com/questions/280634/endswith-in-javascript\n  function endsWith(string, suffix) {\n    if (typeof String.prototype.endsWith !== 'function') {\n      return string.indexOf(suffix, string.length - suffix.length) !== -1;\n    } else {\n      return string.endsWith(suffix);\n    }\n  }\n\n  exports.default = RESTAdapter;\n});","define('ember-data/attr', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = attr;\n\n\n  /**\n    @module ember-data\n  */\n\n  function getDefaultValue(record, options, key) {\n    if (typeof options.defaultValue === 'function') {\n      return options.defaultValue.apply(null, arguments);\n    } else {\n      var defaultValue = options.defaultValue;\n      (true && !(typeof defaultValue !== 'object' || defaultValue === null) && Ember.assert('Non primitive defaultValues are not supported because they are shared between all instances. If you would like to use a complex object as a default value please provide a function that returns the complex object.', typeof defaultValue !== 'object' || defaultValue === null));\n\n      return defaultValue;\n    }\n  }\n\n  function hasValue(record, key) {\n    return key in record._attributes || key in record._inFlightAttributes || key in record._data;\n  }\n\n  function getValue(record, key) {\n    if (key in record._attributes) {\n      return record._attributes[key];\n    } else if (key in record._inFlightAttributes) {\n      return record._inFlightAttributes[key];\n    } else {\n      return record._data[key];\n    }\n  }\n\n  /**\n    `DS.attr` defines an attribute on a [DS.Model](/api/data/classes/DS.Model.html).\n    By default, attributes are passed through as-is, however you can specify an\n    optional type to have the value automatically transformed.\n    Ember Data ships with four basic transform types: `string`, `number`,\n    `boolean` and `date`. You can define your own transforms by subclassing\n    [DS.Transform](/api/data/classes/DS.Transform.html).\n  \n    Note that you cannot use `attr` to define an attribute of `id`.\n  \n    `DS.attr` takes an optional hash as a second parameter, currently\n    supported options are:\n  \n    - `defaultValue`: Pass a string or a function to be called to set the attribute\n                      to a default value if none is supplied.\n  \n    Example\n  \n    ```app/models/user.js\n    import DS from 'ember-data';\n  \n    export default DS.Model.extend({\n      username: DS.attr('string'),\n      email: DS.attr('string'),\n      verified: DS.attr('boolean', { defaultValue: false })\n    });\n    ```\n  \n    Default value can also be a function. This is useful it you want to return\n    a new object for each attribute.\n  \n    ```app/models/user.js\n    import DS from 'ember-data';\n  \n    export default DS.Model.extend({\n      username: DS.attr('string'),\n      email: DS.attr('string'),\n      settings: DS.attr({\n        defaultValue() {\n          return {};\n        }\n      })\n    });\n    ```\n  \n    The `options` hash is passed as second argument to a transforms'\n    `serialize` and `deserialize` method. This allows to configure a\n    transformation and adapt the corresponding value, based on the config:\n  \n    ```app/models/post.js\n    import DS from 'ember-data';\n  \n    export default DS.Model.extend({\n      text: DS.attr('text', {\n        uppercase: true\n      })\n    });\n    ```\n  \n    ```app/transforms/text.js\n    import DS from 'ember-data';\n  \n    export default DS.Transform.extend({\n      serialize(value, options) {\n        if (options.uppercase) {\n          return value.toUpperCase();\n        }\n  \n        return value;\n      },\n  \n      deserialize(value) {\n        return value;\n      }\n    })\n    ```\n  \n    @namespace\n    @method attr\n    @for DS\n    @param {String|Object} type the attribute type\n    @param {Object} options a hash of options\n    @return {Attribute}\n  */\n\n  function attr(type, options) {\n    if (typeof type === 'object') {\n      options = type;\n      type = undefined;\n    } else {\n      options = options || {};\n    }\n\n    var meta = {\n      type: type,\n      isAttribute: true,\n      options: options\n    };\n\n    return Ember.computed({\n      get: function get(key) {\n        var internalModel = this._internalModel;\n        if (hasValue(internalModel, key)) {\n          return getValue(internalModel, key);\n        } else {\n          return getDefaultValue(this, options, key);\n        }\n      },\n      set: function set(key, value) {\n        var internalModel = this._internalModel;\n        var oldValue = getValue(internalModel, key);\n        var originalValue = void 0;\n\n        if (value !== oldValue) {\n          // Add the new value to the changed attributes hash; it will get deleted by\n          // the 'didSetProperty' handler if it is no different from the original value\n          internalModel._attributes[key] = value;\n\n          if (key in internalModel._inFlightAttributes) {\n            originalValue = internalModel._inFlightAttributes[key];\n          } else {\n            originalValue = internalModel._data[key];\n          }\n\n          this._internalModel.send('didSetProperty', {\n            name: key,\n            oldValue: oldValue,\n            originalValue: originalValue,\n            value: value\n          });\n        }\n\n        return value;\n      }\n    }).meta(meta);\n  }\n});","define(\"ember-data/index\", [\"exports\", \"ember-data/-private\", \"ember-data/setup-container\", \"ember-data/initialize-store-service\", \"ember-data/transforms/transform\", \"ember-data/transforms/number\", \"ember-data/transforms/date\", \"ember-data/transforms/string\", \"ember-data/transforms/boolean\", \"ember-data/adapter\", \"ember-data/adapters/json-api\", \"ember-data/adapters/rest\", \"ember-data/serializer\", \"ember-data/serializers/json-api\", \"ember-data/serializers/json\", \"ember-data/serializers/rest\", \"ember-data/serializers/embedded-records-mixin\", \"ember-data/attr\", \"ember-inflector\"], function (exports, _private, _setupContainer, _initializeStoreService, _transform, _number, _date, _string, _boolean, _adapter, _jsonApi, _rest, _serializer, _jsonApi2, _json, _rest2, _embeddedRecordsMixin, _attr) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n\n  /**\n    Ember Data\n    @module ember-data\n    @main ember-data\n  */\n\n  if (Ember.VERSION.match(/^1\\.([0-9]|1[0-2])\\./)) {\n    throw new Ember.Error(\"Ember Data requires at least Ember 1.13.0, but you have \" + Ember.VERSION + \". Please upgrade your version of Ember, then upgrade Ember Data.\");\n  }\n\n  _private.DS.Store = _private.Store;\n  _private.DS.PromiseArray = _private.PromiseArray;\n  _private.DS.PromiseObject = _private.PromiseObject;\n\n  _private.DS.PromiseManyArray = _private.PromiseManyArray;\n\n  _private.DS.Model = _private.Model;\n  _private.DS.RootState = _private.RootState;\n  _private.DS.attr = _attr.default;\n  _private.DS.Errors = _private.Errors;\n\n  _private.DS.InternalModel = _private.InternalModel;\n  _private.DS.Snapshot = _private.Snapshot;\n\n  _private.DS.Adapter = _adapter.default;\n\n  _private.DS.AdapterError = _private.AdapterError;\n  _private.DS.InvalidError = _private.InvalidError;\n  _private.DS.TimeoutError = _private.TimeoutError;\n  _private.DS.AbortError = _private.AbortError;\n\n  _private.DS.UnauthorizedError = _private.UnauthorizedError;\n  _private.DS.ForbiddenError = _private.ForbiddenError;\n  _private.DS.NotFoundError = _private.NotFoundError;\n  _private.DS.ConflictError = _private.ConflictError;\n  _private.DS.ServerError = _private.ServerError;\n\n  _private.DS.errorsHashToArray = _private.errorsHashToArray;\n  _private.DS.errorsArrayToHash = _private.errorsArrayToHash;\n\n  _private.DS.Serializer = _serializer.default;\n\n  _private.DS.DebugAdapter = _private.DebugAdapter;\n\n  _private.DS.RecordArray = _private.RecordArray;\n  _private.DS.FilteredRecordArray = _private.FilteredRecordArray;\n  _private.DS.AdapterPopulatedRecordArray = _private.AdapterPopulatedRecordArray;\n  _private.DS.ManyArray = _private.ManyArray;\n\n  _private.DS.RecordArrayManager = _private.RecordArrayManager;\n\n  _private.DS.RESTAdapter = _rest.default;\n  _private.DS.BuildURLMixin = _private.BuildURLMixin;\n\n  _private.DS.RESTSerializer = _rest2.default;\n  _private.DS.JSONSerializer = _json.default;\n\n  _private.DS.JSONAPIAdapter = _jsonApi.default;\n  _private.DS.JSONAPISerializer = _jsonApi2.default;\n\n  _private.DS.Transform = _transform.default;\n  _private.DS.DateTransform = _date.default;\n  _private.DS.StringTransform = _string.default;\n  _private.DS.NumberTransform = _number.default;\n  _private.DS.BooleanTransform = _boolean.default;\n\n  _private.DS.EmbeddedRecordsMixin = _embeddedRecordsMixin.default;\n\n  _private.DS.belongsTo = _private.belongsTo;\n  _private.DS.hasMany = _private.hasMany;\n\n  _private.DS.Relationship = _private.Relationship;\n\n  _private.DS._setupContainer = _setupContainer.default;\n  _private.DS._initializeStoreService = _initializeStoreService.default;\n\n  Object.defineProperty(_private.DS, 'normalizeModelName', {\n    enumerable: true,\n    writable: false,\n    configurable: false,\n    value: _private.normalizeModelName\n  });\n\n  exports.default = _private.DS;\n});","define('ember-data/initialize-store-service', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = initializeStoreService;\n  /*\n    Configures a registry for use with an Ember-Data\n    store.\n  \n    @method initializeStoreService\n    @param {Ember.ApplicationInstance | Ember.EngineInstance} instance\n  */\n  function initializeStoreService(instance) {\n    // instance.lookup supports Ember 2.1 and higher\n    // instance.container supports Ember 1.11 - 2.0\n    var container = instance.lookup ? instance : instance.container;\n\n    // Eagerly generate the store so defaultStore is populated.\n    container.lookup('service:store');\n  }\n});","define('ember-data/model', ['exports', 'ember-data/-private'], function (exports, _private) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _private.Model;\n    }\n  });\n});","define('ember-data/relationships', ['exports', 'ember-data/-private'], function (exports, _private) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'belongsTo', {\n    enumerable: true,\n    get: function () {\n      return _private.belongsTo;\n    }\n  });\n  Object.defineProperty(exports, 'hasMany', {\n    enumerable: true,\n    get: function () {\n      return _private.hasMany;\n    }\n  });\n});","define('ember-data/serializer', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Object.extend({\n\n    /**\n      The `store` property is the application's `store` that contains\n      all records. It can be used to look up serializers for other model\n      types that may be nested inside the payload response.\n       Example:\n       ```js\n      Serializer.extend({\n        extractRelationship(relationshipModelName, relationshipHash) {\n          var modelClass = this.store.modelFor(relationshipModelName);\n          var relationshipSerializer = this.store.serializerFor(relationshipModelName);\n          return relationshipSerializer.normalize(modelClass, relationshipHash);\n        }\n      });\n      ```\n       @property store\n      @type {DS.Store}\n      @public\n    */\n\n    /**\n      The `normalizeResponse` method is used to normalize a payload from the\n      server to a JSON-API Document.\n       http://jsonapi.org/format/#document-structure\n       Example:\n       ```js\n      Serializer.extend({\n        normalizeResponse(store, primaryModelClass, payload, id, requestType) {\n          if (requestType === 'findRecord') {\n            return this.normalize(primaryModelClass, payload);\n          } else {\n            return payload.reduce(function(documentHash, item) {\n              let { data, included } = this.normalize(primaryModelClass, item);\n              documentHash.included.push(...included);\n              documentHash.data.push(data);\n              return documentHash;\n            }, { data: [], included: [] })\n          }\n        }\n      });\n      ```\n       @since 1.13.0\n      @method normalizeResponse\n      @param {DS.Store} store\n      @param {DS.Model} primaryModelClass\n      @param {Object} payload\n      @param {String|Number} id\n      @param {String} requestType\n      @return {Object} JSON-API Document\n    */\n    normalizeResponse: null,\n\n    /**\n      The `serialize` method is used when a record is saved in order to convert\n      the record into the form that your external data source expects.\n       `serialize` takes an optional `options` hash with a single option:\n       - `includeId`: If this is `true`, `serialize` should include the ID\n        in the serialized object it builds.\n       Example:\n       ```js\n      Serializer.extend({\n        serialize(snapshot, options) {\n          var json = {\n            id: snapshot.id\n          };\n           snapshot.eachAttribute((key, attribute) => {\n            json[key] = snapshot.attr(key);\n          });\n           snapshot.eachRelationship((key, relationship) => {\n            if (relationship.kind === 'belongsTo') {\n              json[key] = snapshot.belongsTo(key, { id: true });\n            } else if (relationship.kind === 'hasMany') {\n              json[key] = snapshot.hasMany(key, { ids: true });\n            }\n          });\n           return json;\n        },\n      });\n      ```\n       @method serialize\n      @param {DS.Snapshot} snapshot\n      @param {Object} [options]\n      @return {Object}\n    */\n    serialize: null,\n\n    /**\n      The `normalize` method is used to convert a payload received from your\n      external data source into the normalized form `store.push()` expects. You\n      should override this method, munge the hash and return the normalized\n      payload.\n       Example:\n       ```js\n      Serializer.extend({\n        normalize(modelClass, resourceHash) {\n          var data = {\n            id:            resourceHash.id,\n            type:          modelClass.modelName,\n            attributes:    resourceHash\n          };\n          return { data: data };\n        }\n      })\n      ```\n       @method normalize\n      @param {DS.Model} typeClass\n      @param {Object} hash\n      @return {Object}\n    */\n    normalize: function normalize(typeClass, hash) {\n      return hash;\n    }\n  });\n});","define('ember-data/serializers/embedded-records-mixin', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Mixin.create({\n\n    /**\n      Normalize the record and recursively normalize/extract all the embedded records\n      while pushing them into the store as they are encountered\n       A payload with an attr configured for embedded records needs to be extracted:\n       ```js\n      {\n        \"post\": {\n          \"id\": \"1\"\n          \"title\": \"Rails is omakase\",\n          \"comments\": [{\n            \"id\": \"1\",\n            \"body\": \"Rails is unagi\"\n          }, {\n            \"id\": \"2\",\n            \"body\": \"Omakase O_o\"\n          }]\n        }\n      }\n      ```\n     @method normalize\n     @param {DS.Model} typeClass\n     @param {Object} hash to be normalized\n     @param {String} prop the hash has been referenced by\n     @return {Object} the normalized hash\n    **/\n    normalize: function normalize(typeClass, hash, prop) {\n      var normalizedHash = this._super(typeClass, hash, prop);\n      return this._extractEmbeddedRecords(this, this.store, typeClass, normalizedHash);\n    },\n    keyForRelationship: function keyForRelationship(key, typeClass, method) {\n      if (method === 'serialize' && this.hasSerializeRecordsOption(key) || method === 'deserialize' && this.hasDeserializeRecordsOption(key)) {\n        return this.keyForAttribute(key, method);\n      } else {\n        return this._super(key, typeClass, method) || key;\n      }\n    },\n\n\n    /**\n      Serialize `belongsTo` relationship when it is configured as an embedded object.\n       This example of an author model belongs to a post model:\n       ```js\n      Post = DS.Model.extend({\n        title:    DS.attr('string'),\n        body:     DS.attr('string'),\n        author:   DS.belongsTo('author')\n      });\n       Author = DS.Model.extend({\n        name:     DS.attr('string'),\n        post:     DS.belongsTo('post')\n      });\n      ```\n       Use a custom (type) serializer for the post model to configure embedded author\n       ```app/serializers/post.js\n      import DS from 'ember-data';\n       export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {\n        attrs: {\n          author: { embedded: 'always' }\n        }\n      })\n      ```\n       A payload with an attribute configured for embedded records can serialize\n      the records together under the root attribute's payload:\n       ```js\n      {\n        \"post\": {\n          \"id\": \"1\"\n          \"title\": \"Rails is omakase\",\n          \"author\": {\n            \"id\": \"2\"\n            \"name\": \"dhh\"\n          }\n        }\n      }\n      ```\n       @method serializeBelongsTo\n      @param {DS.Snapshot} snapshot\n      @param {Object} json\n      @param {Object} relationship\n    */\n    serializeBelongsTo: function serializeBelongsTo(snapshot, json, relationship) {\n      var attr = relationship.key;\n      if (this.noSerializeOptionSpecified(attr)) {\n        this._super(snapshot, json, relationship);\n        return;\n      }\n      var includeIds = this.hasSerializeIdsOption(attr);\n      var includeRecords = this.hasSerializeRecordsOption(attr);\n      var embeddedSnapshot = snapshot.belongsTo(attr);\n      if (includeIds) {\n        var serializedKey = this._getMappedKey(relationship.key, snapshot.type);\n        if (serializedKey === relationship.key && this.keyForRelationship) {\n          serializedKey = this.keyForRelationship(relationship.key, relationship.kind, \"serialize\");\n        }\n\n        if (!embeddedSnapshot) {\n          json[serializedKey] = null;\n        } else {\n          json[serializedKey] = embeddedSnapshot.id;\n\n          if (relationship.options.polymorphic) {\n            this.serializePolymorphicType(snapshot, json, relationship);\n          }\n        }\n      } else if (includeRecords) {\n        this._serializeEmbeddedBelongsTo(snapshot, json, relationship);\n      }\n    },\n    _serializeEmbeddedBelongsTo: function _serializeEmbeddedBelongsTo(snapshot, json, relationship) {\n      var embeddedSnapshot = snapshot.belongsTo(relationship.key);\n      var serializedKey = this._getMappedKey(relationship.key, snapshot.type);\n      if (serializedKey === relationship.key && this.keyForRelationship) {\n        serializedKey = this.keyForRelationship(relationship.key, relationship.kind, \"serialize\");\n      }\n\n      if (!embeddedSnapshot) {\n        json[serializedKey] = null;\n      } else {\n        json[serializedKey] = embeddedSnapshot.serialize({ includeId: true });\n        this.removeEmbeddedForeignKey(snapshot, embeddedSnapshot, relationship, json[serializedKey]);\n\n        if (relationship.options.polymorphic) {\n          this.serializePolymorphicType(snapshot, json, relationship);\n        }\n      }\n    },\n\n\n    /**\n      Serializes `hasMany` relationships when it is configured as embedded objects.\n       This example of a post model has many comments:\n       ```js\n      Post = DS.Model.extend({\n        title:    DS.attr('string'),\n        body:     DS.attr('string'),\n        comments: DS.hasMany('comment')\n      });\n       Comment = DS.Model.extend({\n        body:     DS.attr('string'),\n        post:     DS.belongsTo('post')\n      });\n      ```\n       Use a custom (type) serializer for the post model to configure embedded comments\n       ```app/serializers/post.js\n      import DS from 'ember-data;\n       export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {\n        attrs: {\n          comments: { embedded: 'always' }\n        }\n      })\n      ```\n       A payload with an attribute configured for embedded records can serialize\n      the records together under the root attribute's payload:\n       ```js\n      {\n        \"post\": {\n          \"id\": \"1\"\n          \"title\": \"Rails is omakase\",\n          \"body\": \"I want this for my ORM, I want that for my template language...\"\n          \"comments\": [{\n            \"id\": \"1\",\n            \"body\": \"Rails is unagi\"\n          }, {\n            \"id\": \"2\",\n            \"body\": \"Omakase O_o\"\n          }]\n        }\n      }\n      ```\n       The attrs options object can use more specific instruction for extracting and\n      serializing. When serializing, an option to embed `ids`, `ids-and-types` or `records` can be set.\n      When extracting the only option is `records`.\n       So `{ embedded: 'always' }` is shorthand for:\n      `{ serialize: 'records', deserialize: 'records' }`\n       To embed the `ids` for a related object (using a hasMany relationship):\n       ```app/serializers/post.js\n      import DS from 'ember-data;\n       export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {\n        attrs: {\n          comments: { serialize: 'ids', deserialize: 'records' }\n        }\n      })\n      ```\n       ```js\n      {\n        \"post\": {\n          \"id\": \"1\"\n          \"title\": \"Rails is omakase\",\n          \"body\": \"I want this for my ORM, I want that for my template language...\"\n          \"comments\": [\"1\", \"2\"]\n        }\n      }\n      ```\n       To embed the relationship as a collection of objects with `id` and `type` keys, set\n      `ids-and-types` for the related object.\n       This is particularly useful for polymorphic relationships where records don't share\n      the same table and the `id` is not enough information.\n       By example having a user that has many pets:\n       ```js\n      User = DS.Model.extend({\n        name:    DS.attr('string'),\n        pets: DS.hasMany('pet', { polymorphic: true })\n      });\n       Pet = DS.Model.extend({\n        name: DS.attr('string'),\n      });\n       Cat = Pet.extend({\n        // ...\n      });\n       Parrot = Pet.extend({\n        // ...\n      });\n      ```\n       ```app/serializers/user.js\n      import DS from 'ember-data;\n       export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, {\n        attrs: {\n          pets: { serialize: 'ids-and-types', deserialize: 'records' }\n        }\n      });\n      ```\n       ```js\n      {\n        \"user\": {\n          \"id\": \"1\"\n          \"name\": \"Bertin Osborne\",\n          \"pets\": [\n            { \"id\": \"1\", \"type\": \"Cat\" },\n            { \"id\": \"1\", \"type\": \"Parrot\"}\n          ]\n        }\n      }\n      ```\n       @method serializeHasMany\n      @param {DS.Snapshot} snapshot\n      @param {Object} json\n      @param {Object} relationship\n    */\n    serializeHasMany: function serializeHasMany(snapshot, json, relationship) {\n      var attr = relationship.key;\n      if (this.noSerializeOptionSpecified(attr)) {\n        this._super(snapshot, json, relationship);\n        return;\n      }\n\n      if (this.hasSerializeIdsOption(attr)) {\n        var serializedKey = this._getMappedKey(relationship.key, snapshot.type);\n        if (serializedKey === relationship.key && this.keyForRelationship) {\n          serializedKey = this.keyForRelationship(relationship.key, relationship.kind, \"serialize\");\n        }\n\n        json[serializedKey] = snapshot.hasMany(attr, { ids: true });\n      } else if (this.hasSerializeRecordsOption(attr)) {\n        this._serializeEmbeddedHasMany(snapshot, json, relationship);\n      } else {\n        if (this.hasSerializeIdsAndTypesOption(attr)) {\n          this._serializeHasManyAsIdsAndTypes(snapshot, json, relationship);\n        }\n      }\n    },\n\n\n    /*\n      Serializes a hasMany relationship as an array of objects containing only `id` and `type`\n      keys.\n      This has its use case on polymorphic hasMany relationships where the server is not storing\n      all records in the same table using STI, and therefore the `id` is not enough information\n       TODO: Make the default in Ember-data 3.0??\n    */\n    _serializeHasManyAsIdsAndTypes: function _serializeHasManyAsIdsAndTypes(snapshot, json, relationship) {\n      var serializedKey = this.keyForAttribute(relationship.key, 'serialize');\n      var hasMany = snapshot.hasMany(relationship.key);\n\n      json[serializedKey] = Ember.A(hasMany).map(function (recordSnapshot) {\n        //\n        // I'm sure I'm being utterly naive here. Propably id is a configurate property and\n        // type too, and the modelName has to be normalized somehow.\n        //\n        return { id: recordSnapshot.id, type: recordSnapshot.modelName };\n      });\n    },\n    _serializeEmbeddedHasMany: function _serializeEmbeddedHasMany(snapshot, json, relationship) {\n      var serializedKey = this._getMappedKey(relationship.key, snapshot.type);\n      if (serializedKey === relationship.key && this.keyForRelationship) {\n        serializedKey = this.keyForRelationship(relationship.key, relationship.kind, \"serialize\");\n      }\n\n      (true && Ember.warn('The embedded relationship \\'' + serializedKey + '\\' is undefined for \\'' + snapshot.modelName + '\\' with id \\'' + snapshot.id + '\\'. Please include it in your original payload.', Ember.typeOf(snapshot.hasMany(relationship.key)) !== 'undefined', { id: 'ds.serializer.embedded-relationship-undefined' }));\n\n\n      json[serializedKey] = this._generateSerializedHasMany(snapshot, relationship);\n    },\n\n\n    /*\n      Returns an array of embedded records serialized to JSON\n    */\n    _generateSerializedHasMany: function _generateSerializedHasMany(snapshot, relationship) {\n      var hasMany = snapshot.hasMany(relationship.key);\n      var manyArray = Ember.A(hasMany);\n      var ret = new Array(manyArray.length);\n\n      for (var i = 0; i < manyArray.length; i++) {\n        var embeddedSnapshot = manyArray[i];\n        var embeddedJson = embeddedSnapshot.serialize({ includeId: true });\n        this.removeEmbeddedForeignKey(snapshot, embeddedSnapshot, relationship, embeddedJson);\n        ret[i] = embeddedJson;\n      }\n\n      return ret;\n    },\n\n\n    /**\n      When serializing an embedded record, modify the property (in the json payload)\n      that refers to the parent record (foreign key for relationship).\n       Serializing a `belongsTo` relationship removes the property that refers to the\n      parent record\n       Serializing a `hasMany` relationship does not remove the property that refers to\n      the parent record.\n       @method removeEmbeddedForeignKey\n      @param {DS.Snapshot} snapshot\n      @param {DS.Snapshot} embeddedSnapshot\n      @param {Object} relationship\n      @param {Object} json\n    */\n    removeEmbeddedForeignKey: function removeEmbeddedForeignKey(snapshot, embeddedSnapshot, relationship, json) {\n      if (relationship.kind === 'belongsTo') {\n        var parentRecord = snapshot.type.inverseFor(relationship.key, this.store);\n        if (parentRecord) {\n          var name = parentRecord.name;\n          var embeddedSerializer = this.store.serializerFor(embeddedSnapshot.modelName);\n          var parentKey = embeddedSerializer.keyForRelationship(name, parentRecord.kind, 'deserialize');\n          if (parentKey) {\n            delete json[parentKey];\n          }\n        }\n      } /*else if (relationship.kind === 'hasMany') {\n        return;\n        }*/\n    },\n\n\n    // checks config for attrs option to embedded (always) - serialize and deserialize\n    hasEmbeddedAlwaysOption: function hasEmbeddedAlwaysOption(attr) {\n      var option = this.attrsOption(attr);\n      return option && option.embedded === 'always';\n    },\n\n\n    // checks config for attrs option to serialize ids\n    hasSerializeRecordsOption: function hasSerializeRecordsOption(attr) {\n      var alwaysEmbed = this.hasEmbeddedAlwaysOption(attr);\n      var option = this.attrsOption(attr);\n      return alwaysEmbed || option && option.serialize === 'records';\n    },\n\n\n    // checks config for attrs option to serialize records\n    hasSerializeIdsOption: function hasSerializeIdsOption(attr) {\n      var option = this.attrsOption(attr);\n      return option && (option.serialize === 'ids' || option.serialize === 'id');\n    },\n\n\n    // checks config for attrs option to serialize records as objects containing id and types\n    hasSerializeIdsAndTypesOption: function hasSerializeIdsAndTypesOption(attr) {\n      var option = this.attrsOption(attr);\n      return option && (option.serialize === 'ids-and-types' || option.serialize === 'id-and-type');\n    },\n\n\n    // checks config for attrs option to serialize records\n    noSerializeOptionSpecified: function noSerializeOptionSpecified(attr) {\n      var option = this.attrsOption(attr);\n      return !(option && (option.serialize || option.embedded));\n    },\n\n\n    // checks config for attrs option to deserialize records\n    // a defined option object for a resource is treated the same as\n    // `deserialize: 'records'`\n    hasDeserializeRecordsOption: function hasDeserializeRecordsOption(attr) {\n      var alwaysEmbed = this.hasEmbeddedAlwaysOption(attr);\n      var option = this.attrsOption(attr);\n      return alwaysEmbed || option && option.deserialize === 'records';\n    },\n    attrsOption: function attrsOption(attr) {\n      var attrs = this.get('attrs');\n      return attrs && (attrs[Ember.String.camelize(attr)] || attrs[attr]);\n    },\n\n\n    /**\n     @method _extractEmbeddedRecords\n     @private\n    */\n    _extractEmbeddedRecords: function _extractEmbeddedRecords(serializer, store, typeClass, partial) {\n      var _this = this;\n\n      typeClass.eachRelationship(function (key, relationship) {\n        if (serializer.hasDeserializeRecordsOption(key)) {\n          if (relationship.kind === \"hasMany\") {\n            _this._extractEmbeddedHasMany(store, key, partial, relationship);\n          }\n          if (relationship.kind === \"belongsTo\") {\n            _this._extractEmbeddedBelongsTo(store, key, partial, relationship);\n          }\n        }\n      });\n      return partial;\n    },\n\n\n    /**\n     @method _extractEmbeddedHasMany\n     @private\n    */\n    _extractEmbeddedHasMany: function _extractEmbeddedHasMany(store, key, hash, relationshipMeta) {\n      var relationshipHash = Ember.get(hash, 'data.relationships.' + key + '.data');\n\n      if (!relationshipHash) {\n        return;\n      }\n\n      var hasMany = new Array(relationshipHash.length);\n\n      for (var i = 0; i < relationshipHash.length; i++) {\n        var item = relationshipHash[i];\n\n        var _normalizeEmbeddedRel = this._normalizeEmbeddedRelationship(store, relationshipMeta, item),\n            data = _normalizeEmbeddedRel.data,\n            included = _normalizeEmbeddedRel.included;\n\n        hash.included = hash.included || [];\n        hash.included.push(data);\n        if (included) {\n          var _hash$included;\n\n          (_hash$included = hash.included).push.apply(_hash$included, included);\n        }\n\n        hasMany[i] = { id: data.id, type: data.type };\n      }\n\n      var relationship = { data: hasMany };\n      Ember.set(hash, 'data.relationships.' + key, relationship);\n    },\n\n\n    /**\n     @method _extractEmbeddedBelongsTo\n     @private\n    */\n    _extractEmbeddedBelongsTo: function _extractEmbeddedBelongsTo(store, key, hash, relationshipMeta) {\n      var relationshipHash = Ember.get(hash, 'data.relationships.' + key + '.data');\n      if (!relationshipHash) {\n        return;\n      }\n\n      var _normalizeEmbeddedRel2 = this._normalizeEmbeddedRelationship(store, relationshipMeta, relationshipHash),\n          data = _normalizeEmbeddedRel2.data,\n          included = _normalizeEmbeddedRel2.included;\n\n      hash.included = hash.included || [];\n      hash.included.push(data);\n      if (included) {\n        var _hash$included2;\n\n        (_hash$included2 = hash.included).push.apply(_hash$included2, included);\n      }\n\n      var belongsTo = { id: data.id, type: data.type };\n      var relationship = { data: belongsTo };\n\n      Ember.set(hash, 'data.relationships.' + key, relationship);\n    },\n\n\n    /**\n     @method _normalizeEmbeddedRelationship\n     @private\n    */\n    _normalizeEmbeddedRelationship: function _normalizeEmbeddedRelationship(store, relationshipMeta, relationshipHash) {\n      var modelName = relationshipMeta.type;\n      if (relationshipMeta.options.polymorphic) {\n        modelName = relationshipHash.type;\n      }\n      var modelClass = store.modelFor(modelName);\n      var serializer = store.serializerFor(modelName);\n\n      return serializer.normalize(modelClass, relationshipHash, null);\n    },\n\n    isEmbeddedRecordsMixin: true\n  });\n});","define('ember-data/serializers/json-api', ['exports', 'ember-inflector', 'ember-data/serializers/json', 'ember-data/-private'], function (exports, _emberInflector, _json, _private) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n\n  /**\n    Ember Data 2.0 Serializer:\n  \n    In Ember Data a Serializer is used to serialize and deserialize\n    records when they are transferred in and out of an external source.\n    This process involves normalizing property names, transforming\n    attribute values and serializing relationships.\n  \n    `JSONAPISerializer` supports the http://jsonapi.org/ spec and is the\n    serializer recommended by Ember Data.\n  \n    This serializer normalizes a JSON API payload that looks like:\n  \n    ```app/models/player.js\n    import DS from 'ember-data';\n  \n    export default DS.Model.extend({\n      name: DS.attr('string'),\n      skill: DS.attr('string'),\n      gamesPlayed: DS.attr('number'),\n      club: DS.belongsTo('club')\n    });\n    ```\n  \n    ```app/models/club.js\n    import DS from 'ember-data';\n  \n    export default DS.Model.extend({\n      name: DS.attr('string'),\n      location: DS.attr('string'),\n      players: DS.hasMany('player')\n    });\n    ```\n  \n    ```js\n      {\n        \"data\": [\n          {\n            \"attributes\": {\n              \"name\": \"Benfica\",\n              \"location\": \"Portugal\"\n            },\n            \"id\": \"1\",\n            \"relationships\": {\n              \"players\": {\n                \"data\": [\n                  {\n                    \"id\": \"3\",\n                    \"type\": \"players\"\n                  }\n                ]\n              }\n            },\n            \"type\": \"clubs\"\n          }\n        ],\n        \"included\": [\n          {\n            \"attributes\": {\n              \"name\": \"Eusebio Silva Ferreira\",\n              \"skill\": \"Rocket shot\",\n              \"games-played\": 431\n            },\n            \"id\": \"3\",\n            \"relationships\": {\n              \"club\": {\n                \"data\": {\n                  \"id\": \"1\",\n                  \"type\": \"clubs\"\n                }\n              }\n            },\n            \"type\": \"players\"\n          }\n        ]\n      }\n    ```\n  \n    to the format that the Ember Data store expects.\n  \n    ### Customizing meta\n  \n    Since a JSON API Document can have meta defined in multiple locations you can\n    use the specific serializer hooks if you need to customize the meta.\n  \n    One scenario would be to camelCase the meta keys of your payload. The example\n    below shows how this could be done using `normalizeArrayResponse` and\n    `extractRelationship`.\n  \n    ```app/serializers/application.js\n    export default JSONAPISerializer.extend({\n      normalizeArrayResponse(store, primaryModelClass, payload, id, requestType) {\n        let normalizedDocument = this._super(...arguments);\n  \n        // Customize document meta\n        normalizedDocument.meta = camelCaseKeys(normalizedDocument.meta);\n  \n        return normalizedDocument;\n      },\n  \n      extractRelationship(relationshipHash) {\n        let normalizedRelationship = this._super(...arguments);\n  \n        // Customize relationship meta\n        normalizedRelationship.meta = camelCaseKeys(normalizedRelationship.meta);\n  \n        return normalizedRelationship;\n      }\n    });\n    ```\n  \n    @since 1.13.0\n    @class JSONAPISerializer\n    @namespace DS\n    @extends DS.JSONSerializer\n  */\n  var JSONAPISerializer = _json.default.extend({\n    _normalizeDocumentHelper: function _normalizeDocumentHelper(documentHash) {\n\n      if (Ember.typeOf(documentHash.data) === 'object') {\n        documentHash.data = this._normalizeResourceHelper(documentHash.data);\n      } else if (Array.isArray(documentHash.data)) {\n        var ret = new Array(documentHash.data.length);\n\n        for (var i = 0; i < documentHash.data.length; i++) {\n          var data = documentHash.data[i];\n          ret[i] = this._normalizeResourceHelper(data);\n        }\n\n        documentHash.data = ret;\n      }\n\n      if (Array.isArray(documentHash.included)) {\n        var _ret = new Array();\n        for (var _i = 0; _i < documentHash.included.length; _i++) {\n          var included = documentHash.included[_i];\n          var normalized = this._normalizeResourceHelper(included);\n          if (normalized !== null) {\n            // can be null when unknown type is encountered\n            _ret.push(normalized);\n          }\n        }\n\n        documentHash.included = _ret;\n      }\n\n      return documentHash;\n    },\n    _normalizeRelationshipDataHelper: function _normalizeRelationshipDataHelper(relationshipDataHash) {\n      if ((0, _private.isEnabled)(\"ds-payload-type-hooks\")) {\n        var modelName = this.modelNameFromPayloadType(relationshipDataHash.type);\n        var deprecatedModelNameLookup = this.modelNameFromPayloadKey(relationshipDataHash.type);\n\n        if (modelName !== deprecatedModelNameLookup && this._hasCustomModelNameFromPayloadKey()) {\n          (true && !(false) && Ember.deprecate(\"You are using modelNameFromPayloadKey to normalize the type for a relationship. This has been deprecated in favor of modelNameFromPayloadType\", false, {\n            id: 'ds.json-api-serializer.deprecated-model-name-for-relationship',\n            until: '4.0.0'\n          }));\n\n\n          modelName = deprecatedModelNameLookup;\n        }\n\n        relationshipDataHash.type = modelName;\n      } else {\n        relationshipDataHash.type = this.modelNameFromPayloadKey(relationshipDataHash.type);\n      }\n\n      return relationshipDataHash;\n    },\n    _normalizeResourceHelper: function _normalizeResourceHelper(resourceHash) {\n      (true && !(!Ember.isNone(resourceHash.type)) && Ember.assert(this.warnMessageForUndefinedType(), !Ember.isNone(resourceHash.type), {\n        id: 'ds.serializer.type-is-undefined'\n      }));\n\n\n      var modelName = void 0,\n          usedLookup = void 0;\n\n      if ((0, _private.isEnabled)(\"ds-payload-type-hooks\")) {\n        modelName = this.modelNameFromPayloadType(resourceHash.type);\n        var deprecatedModelNameLookup = this.modelNameFromPayloadKey(resourceHash.type);\n\n        usedLookup = 'modelNameFromPayloadType';\n\n        if (modelName !== deprecatedModelNameLookup && this._hasCustomModelNameFromPayloadKey()) {\n          (true && !(false) && Ember.deprecate(\"You are using modelNameFromPayloadKey to normalize the type for a resource. This has been deprecated in favor of modelNameFromPayloadType\", false, {\n            id: 'ds.json-api-serializer.deprecated-model-name-for-resource',\n            until: '4.0.0'\n          }));\n\n\n          modelName = deprecatedModelNameLookup;\n          usedLookup = 'modelNameFromPayloadKey';\n        }\n      } else {\n        modelName = this.modelNameFromPayloadKey(resourceHash.type);\n        usedLookup = 'modelNameFromPayloadKey';\n      }\n\n      if (!this.store._hasModelFor(modelName)) {\n        (true && Ember.warn(this.warnMessageNoModelForType(modelName, resourceHash.type, usedLookup), false, {\n          id: 'ds.serializer.model-for-type-missing'\n        }));\n\n        return null;\n      }\n\n      var modelClass = this.store._modelFor(modelName);\n      var serializer = this.store.serializerFor(modelName);\n\n      var _serializer$normalize = serializer.normalize(modelClass, resourceHash),\n          data = _serializer$normalize.data;\n\n      return data;\n    },\n    pushPayload: function pushPayload(store, payload) {\n      var normalizedPayload = this._normalizeDocumentHelper(payload);\n      if ((0, _private.isEnabled)('ds-pushpayload-return')) {\n        return store.push(normalizedPayload);\n      } else {\n        store.push(normalizedPayload);\n      }\n    },\n    _normalizeResponse: function _normalizeResponse(store, primaryModelClass, payload, id, requestType, isSingle) {\n      var normalizedPayload = this._normalizeDocumentHelper(payload);\n      return normalizedPayload;\n    },\n    normalizeQueryRecordResponse: function normalizeQueryRecordResponse() {\n      var normalized = this._super.apply(this, arguments);\n\n      (true && !(!Array.isArray(normalized.data)) && Ember.assert('Expected the primary data returned by the serializer for a `queryRecord` response to be a single object but instead it was an array.', !Array.isArray(normalized.data), {\n        id: 'ds.serializer.json-api.queryRecord-array-response'\n      }));\n\n\n      return normalized;\n    },\n    extractAttributes: function extractAttributes(modelClass, resourceHash) {\n      var _this = this;\n\n      var attributes = {};\n\n      if (resourceHash.attributes) {\n        modelClass.eachAttribute(function (key) {\n          var attributeKey = _this.keyForAttribute(key, 'deserialize');\n          if (resourceHash.attributes[attributeKey] !== undefined) {\n            attributes[key] = resourceHash.attributes[attributeKey];\n          }\n          if (true) {\n            if (resourceHash.attributes[attributeKey] === undefined && resourceHash.attributes[key] !== undefined) {\n              (true && !(false) && Ember.assert('Your payload for \\'' + modelClass.modelName + '\\' contains \\'' + key + '\\', but your serializer is setup to look for \\'' + attributeKey + '\\'. This is most likely because Ember Data\\'s JSON API serializer dasherizes attribute keys by default. You should subclass JSONAPISerializer and implement \\'keyForAttribute(key) { return key; }\\' to prevent Ember Data from customizing your attribute keys.', false));\n            }\n          }\n        });\n      }\n\n      return attributes;\n    },\n    extractRelationship: function extractRelationship(relationshipHash) {\n\n      if (Ember.typeOf(relationshipHash.data) === 'object') {\n        relationshipHash.data = this._normalizeRelationshipDataHelper(relationshipHash.data);\n      }\n\n      if (Array.isArray(relationshipHash.data)) {\n        var ret = new Array(relationshipHash.data.length);\n\n        for (var i = 0; i < relationshipHash.data.length; i++) {\n          var data = relationshipHash.data[i];\n          ret[i] = this._normalizeRelationshipDataHelper(data);\n        }\n\n        relationshipHash.data = ret;\n      }\n\n      return relationshipHash;\n    },\n    extractRelationships: function extractRelationships(modelClass, resourceHash) {\n      var _this2 = this;\n\n      var relationships = {};\n\n      if (resourceHash.relationships) {\n        modelClass.eachRelationship(function (key, relationshipMeta) {\n          var relationshipKey = _this2.keyForRelationship(key, relationshipMeta.kind, 'deserialize');\n          if (resourceHash.relationships[relationshipKey] !== undefined) {\n\n            var relationshipHash = resourceHash.relationships[relationshipKey];\n            relationships[key] = _this2.extractRelationship(relationshipHash);\n          }\n          if (true) {\n            if (resourceHash.relationships[relationshipKey] === undefined && resourceHash.relationships[key] !== undefined) {\n              (true && !(false) && Ember.assert('Your payload for \\'' + modelClass.modelName + '\\' contains \\'' + key + '\\', but your serializer is setup to look for \\'' + relationshipKey + '\\'. This is most likely because Ember Data\\'s JSON API serializer dasherizes relationship keys by default. You should subclass JSONAPISerializer and implement \\'keyForRelationship(key) { return key; }\\' to prevent Ember Data from customizing your relationship keys.', false));\n            }\n          }\n        });\n      }\n\n      return relationships;\n    },\n    _extractType: function _extractType(modelClass, resourceHash) {\n      if ((0, _private.isEnabled)(\"ds-payload-type-hooks\")) {\n        var modelName = this.modelNameFromPayloadType(resourceHash.type);\n        var deprecatedModelNameLookup = this.modelNameFromPayloadKey(resourceHash.type);\n\n        if (modelName !== deprecatedModelNameLookup && this._hasCustomModelNameFromPayloadKey()) {\n          (true && !(false) && Ember.deprecate(\"You are using modelNameFromPayloadKey to normalize the type for a polymorphic relationship. This has been deprecated in favor of modelNameFromPayloadType\", false, {\n            id: 'ds.json-api-serializer.deprecated-model-name-for-polymorphic-type',\n            until: '3.0.0'\n          }));\n\n\n          modelName = deprecatedModelNameLookup;\n        }\n\n        return modelName;\n      } else {\n        return this.modelNameFromPayloadKey(resourceHash.type);\n      }\n    },\n    modelNameFromPayloadKey: function modelNameFromPayloadKey(key) {\n      return (0, _emberInflector.singularize)((0, _private.normalizeModelName)(key));\n    },\n    payloadKeyFromModelName: function payloadKeyFromModelName(modelName) {\n      return (0, _emberInflector.pluralize)(modelName);\n    },\n    normalize: function normalize(modelClass, resourceHash) {\n      if (resourceHash.attributes) {\n        this.normalizeUsingDeclaredMapping(modelClass, resourceHash.attributes);\n      }\n\n      if (resourceHash.relationships) {\n        this.normalizeUsingDeclaredMapping(modelClass, resourceHash.relationships);\n      }\n\n      var data = {\n        id: this.extractId(modelClass, resourceHash),\n        type: this._extractType(modelClass, resourceHash),\n        attributes: this.extractAttributes(modelClass, resourceHash),\n        relationships: this.extractRelationships(modelClass, resourceHash)\n      };\n\n      this.applyTransforms(modelClass, data.attributes);\n\n      return { data: data };\n    },\n    keyForAttribute: function keyForAttribute(key, method) {\n      return Ember.String.dasherize(key);\n    },\n    keyForRelationship: function keyForRelationship(key, typeClass, method) {\n      return Ember.String.dasherize(key);\n    },\n    serialize: function serialize(snapshot, options) {\n      var data = this._super.apply(this, arguments);\n\n      var payloadType = void 0;\n      if ((0, _private.isEnabled)(\"ds-payload-type-hooks\")) {\n        payloadType = this.payloadTypeFromModelName(snapshot.modelName);\n        var deprecatedPayloadTypeLookup = this.payloadKeyFromModelName(snapshot.modelName);\n\n        if (payloadType !== deprecatedPayloadTypeLookup && this._hasCustomPayloadKeyFromModelName()) {\n          (true && !(false) && Ember.deprecate(\"You used payloadKeyFromModelName to customize how a type is serialized. Use payloadTypeFromModelName instead.\", false, {\n            id: 'ds.json-api-serializer.deprecated-payload-type-for-model',\n            until: '4.0.0'\n          }));\n\n\n          payloadType = deprecatedPayloadTypeLookup;\n        }\n      } else {\n        payloadType = this.payloadKeyFromModelName(snapshot.modelName);\n      }\n\n      data.type = payloadType;\n      return { data: data };\n    },\n    serializeAttribute: function serializeAttribute(snapshot, json, key, attribute) {\n      var type = attribute.type;\n\n      if (this._canSerialize(key)) {\n        json.attributes = json.attributes || {};\n\n        var value = snapshot.attr(key);\n        if (type) {\n          var transform = this.transformFor(type);\n          value = transform.serialize(value, attribute.options);\n        }\n\n        var payloadKey = this._getMappedKey(key, snapshot.type);\n\n        if (payloadKey === key) {\n          payloadKey = this.keyForAttribute(key, 'serialize');\n        }\n\n        json.attributes[payloadKey] = value;\n      }\n    },\n    serializeBelongsTo: function serializeBelongsTo(snapshot, json, relationship) {\n      var key = relationship.key;\n\n      if (this._canSerialize(key)) {\n        var belongsTo = snapshot.belongsTo(key);\n        var belongsToIsNotNew = belongsTo && belongsTo.record && !belongsTo.record.get('isNew');\n\n        if (belongsTo === null || belongsToIsNotNew) {\n          json.relationships = json.relationships || {};\n\n          var payloadKey = this._getMappedKey(key, snapshot.type);\n          if (payloadKey === key) {\n            payloadKey = this.keyForRelationship(key, 'belongsTo', 'serialize');\n          }\n\n          var data = null;\n          if (belongsTo) {\n            var payloadType = void 0;\n\n            if ((0, _private.isEnabled)(\"ds-payload-type-hooks\")) {\n              payloadType = this.payloadTypeFromModelName(belongsTo.modelName);\n              var deprecatedPayloadTypeLookup = this.payloadKeyFromModelName(belongsTo.modelName);\n\n              if (payloadType !== deprecatedPayloadTypeLookup && this._hasCustomPayloadKeyFromModelName()) {\n                (true && !(false) && Ember.deprecate(\"You used payloadKeyFromModelName to serialize type for belongs-to relationship. Use payloadTypeFromModelName instead.\", false, {\n                  id: 'ds.json-api-serializer.deprecated-payload-type-for-belongs-to',\n                  until: '4.0.0'\n                }));\n\n\n                payloadType = deprecatedPayloadTypeLookup;\n              }\n            } else {\n              payloadType = this.payloadKeyFromModelName(belongsTo.modelName);\n            }\n\n            data = {\n              type: payloadType,\n              id: belongsTo.id\n            };\n          }\n\n          json.relationships[payloadKey] = { data: data };\n        }\n      }\n    },\n    serializeHasMany: function serializeHasMany(snapshot, json, relationship) {\n      var key = relationship.key;\n\n      if (this.shouldSerializeHasMany(snapshot, key, relationship)) {\n        var hasMany = snapshot.hasMany(key);\n        if (hasMany !== undefined) {\n\n          json.relationships = json.relationships || {};\n\n          var payloadKey = this._getMappedKey(key, snapshot.type);\n          if (payloadKey === key && this.keyForRelationship) {\n            payloadKey = this.keyForRelationship(key, 'hasMany', 'serialize');\n          }\n\n          var data = new Array(hasMany.length);\n\n          for (var i = 0; i < hasMany.length; i++) {\n            var item = hasMany[i];\n\n            var payloadType = void 0;\n\n            if ((0, _private.isEnabled)(\"ds-payload-type-hooks\")) {\n              payloadType = this.payloadTypeFromModelName(item.modelName);\n              var deprecatedPayloadTypeLookup = this.payloadKeyFromModelName(item.modelName);\n\n              if (payloadType !== deprecatedPayloadTypeLookup && this._hasCustomPayloadKeyFromModelName()) {\n                (true && !(false) && Ember.deprecate(\"You used payloadKeyFromModelName to serialize type for belongs-to relationship. Use payloadTypeFromModelName instead.\", false, {\n                  id: 'ds.json-api-serializer.deprecated-payload-type-for-has-many',\n                  until: '4.0.0'\n                }));\n\n\n                payloadType = deprecatedPayloadTypeLookup;\n              }\n            } else {\n              payloadType = this.payloadKeyFromModelName(item.modelName);\n            }\n\n            data[i] = {\n              type: payloadType,\n              id: item.id\n            };\n          }\n\n          json.relationships[payloadKey] = { data: data };\n        }\n      }\n    }\n  }); /**\n        @module ember-data\n      */\n\n  if ((0, _private.isEnabled)(\"ds-payload-type-hooks\")) {\n\n    JSONAPISerializer.reopen({\n      modelNameFromPayloadType: function modelNameFromPayloadType(type) {\n        return (0, _emberInflector.singularize)((0, _private.normalizeModelName)(type));\n      },\n      payloadTypeFromModelName: function payloadTypeFromModelName(modelName) {\n        return (0, _emberInflector.pluralize)(modelName);\n      },\n      _hasCustomModelNameFromPayloadKey: function _hasCustomModelNameFromPayloadKey() {\n        return this.modelNameFromPayloadKey !== JSONAPISerializer.prototype.modelNameFromPayloadKey;\n      },\n      _hasCustomPayloadKeyFromModelName: function _hasCustomPayloadKeyFromModelName() {\n        return this.payloadKeyFromModelName !== JSONAPISerializer.prototype.payloadKeyFromModelName;\n      }\n    });\n  }\n\n  if (true) {\n    JSONAPISerializer.reopen({\n      willMergeMixin: function willMergeMixin(props) {\n        var constructor = this.constructor;\n        (true && Ember.warn('You\\'ve defined \\'extractMeta\\' in ' + constructor.toString() + ' which is not used for serializers extending JSONAPISerializer. Read more at https://emberjs.com/api/data/classes/DS.JSONAPISerializer.html#toc_customizing-meta on how to customize meta when using JSON API.', Ember.isNone(props.extractMeta) || props.extractMeta === _json.default.prototype.extractMeta, {\n          id: 'ds.serializer.json-api.extractMeta'\n        }));\n        (true && Ember.warn('The JSONAPISerializer does not work with the EmbeddedRecordsMixin because the JSON API spec does not describe how to format embedded resources.', !props.isEmbeddedRecordsMixin, {\n          id: 'ds.serializer.embedded-records-mixin-not-supported'\n        }));\n      },\n      warnMessageForUndefinedType: function warnMessageForUndefinedType() {\n        return 'Encountered a resource object with an undefined type (resolved resource using ' + this.constructor.toString() + ')';\n      },\n      warnMessageNoModelForType: function warnMessageNoModelForType(modelName, originalType, usedLookup) {\n        return 'Encountered a resource object with type \"' + originalType + '\", but no model was found for model name \"' + modelName + '\" (resolved model name using \\'' + this.constructor.toString() + '.' + usedLookup + '(\"' + originalType + '\")\\').';\n      }\n    });\n  }\n\n  exports.default = JSONAPISerializer;\n});","define('ember-data/serializers/json', ['exports', 'ember-data/serializer', 'ember-data/-private'], function (exports, _serializer, _private) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n\n  var emberAssign = Ember.assign || Ember.merge;\n\n  /**\n    Ember Data 2.0 Serializer:\n  \n    In Ember Data a Serializer is used to serialize and deserialize\n    records when they are transferred in and out of an external source.\n    This process involves normalizing property names, transforming\n    attribute values and serializing relationships.\n  \n    By default, Ember Data uses and recommends the `JSONAPISerializer`.\n  \n    `JSONSerializer` is useful for simpler or legacy backends that may\n    not support the http://jsonapi.org/ spec.\n  \n    For example, given the following `User` model and JSON payload:\n  \n    ```app/models/user.js\n    import DS from 'ember-data';\n  \n    export default DS.Model.extend({\n      friends: DS.hasMany('user'),\n      house: DS.belongsTo('location'),\n  \n      name: DS.attr('string')\n    });\n    ```\n  \n    ```js\n    {\n      id: 1,\n      name: 'Sebastian',\n      friends: [3, 4],\n      links: {\n        house: '/houses/lefkada'\n      }\n    }\n    ```\n  \n    `JSONSerializer` will normalize the JSON payload to the JSON API format that the\n    Ember Data store expects.\n  \n    You can customize how JSONSerializer processes its payload by passing options in\n    the `attrs` hash or by subclassing the `JSONSerializer` and overriding hooks:\n  \n      - To customize how a single record is normalized, use the `normalize` hook.\n      - To customize how `JSONSerializer` normalizes the whole server response, use the\n        `normalizeResponse` hook.\n      - To customize how `JSONSerializer` normalizes a specific response from the server,\n        use one of the many specific `normalizeResponse` hooks.\n      - To customize how `JSONSerializer` normalizes your id, attributes or relationships,\n        use the `extractId`, `extractAttributes` and `extractRelationships` hooks.\n  \n    The `JSONSerializer` normalization process follows these steps:\n  \n      - `normalizeResponse` - entry method to the serializer.\n      - `normalizeCreateRecordResponse` - a `normalizeResponse` for a specific operation is called.\n      - `normalizeSingleResponse`|`normalizeArrayResponse` - for methods like `createRecord` we expect\n        a single record back, while for methods like `findAll` we expect multiple records back.\n      - `normalize` - `normalizeArray` iterates and calls `normalize` for each of its records while `normalizeSingle`\n        calls it once. This is the method you most likely want to subclass.\n      - `extractId` | `extractAttributes` | `extractRelationships` - `normalize` delegates to these methods to\n        turn the record payload into the JSON API format.\n  \n    @class JSONSerializer\n    @namespace DS\n    @extends DS.Serializer\n  */\n  var JSONSerializer = _serializer.default.extend({\n\n    /**\n      The `primaryKey` is used when serializing and deserializing\n      data. Ember Data always uses the `id` property to store the id of\n      the record. The external source may not always follow this\n      convention. In these cases it is useful to override the\n      `primaryKey` property to match the `primaryKey` of your external\n      store.\n       Example\n       ```app/serializers/application.js\n      import DS from 'ember-data';\n       export default DS.JSONSerializer.extend({\n        primaryKey: '_id'\n      });\n      ```\n       @property primaryKey\n      @type {String}\n      @default 'id'\n    */\n    primaryKey: 'id',\n\n    /**\n      The `attrs` object can be used to declare a simple mapping between\n      property names on `DS.Model` records and payload keys in the\n      serialized JSON object representing the record. An object with the\n      property `key` can also be used to designate the attribute's key on\n      the response payload.\n       Example\n       ```app/models/person.js\n      import DS from 'ember-data';\n       export default DS.Model.extend({\n        firstName: DS.attr('string'),\n        lastName: DS.attr('string'),\n        occupation: DS.attr('string'),\n        admin: DS.attr('boolean')\n      });\n      ```\n       ```app/serializers/person.js\n      import DS from 'ember-data';\n       export default DS.JSONSerializer.extend({\n        attrs: {\n          admin: 'is_admin',\n          occupation: { key: 'career' }\n        }\n      });\n      ```\n       You can also remove attributes by setting the `serialize` key to\n      `false` in your mapping object.\n       Example\n       ```app/serializers/person.js\n      import DS from 'ember-data';\n       export default DS.JSONSerializer.extend({\n        attrs: {\n          admin: { serialize: false },\n          occupation: { key: 'career' }\n        }\n      });\n      ```\n       When serialized:\n       ```javascript\n      {\n        \"firstName\": \"Harry\",\n        \"lastName\": \"Houdini\",\n        \"career\": \"magician\"\n      }\n      ```\n       Note that the `admin` is now not included in the payload.\n       @property attrs\n      @type {Object}\n    */\n    mergedProperties: ['attrs'],\n\n    applyTransforms: function applyTransforms(typeClass, data) {\n      var _this = this;\n\n      var attributes = Ember.get(typeClass, 'attributes');\n\n      typeClass.eachTransformedAttribute(function (key, typeClass) {\n        if (data[key] === undefined) {\n          return;\n        }\n\n        var transform = _this.transformFor(typeClass);\n        var transformMeta = attributes.get(key);\n        data[key] = transform.deserialize(data[key], transformMeta.options);\n      });\n\n      return data;\n    },\n    normalizeResponse: function normalizeResponse(store, primaryModelClass, payload, id, requestType) {\n      switch (requestType) {\n        case 'findRecord':\n          return this.normalizeFindRecordResponse.apply(this, arguments);\n        case 'queryRecord':\n          return this.normalizeQueryRecordResponse.apply(this, arguments);\n        case 'findAll':\n          return this.normalizeFindAllResponse.apply(this, arguments);\n        case 'findBelongsTo':\n          return this.normalizeFindBelongsToResponse.apply(this, arguments);\n        case 'findHasMany':\n          return this.normalizeFindHasManyResponse.apply(this, arguments);\n        case 'findMany':\n          return this.normalizeFindManyResponse.apply(this, arguments);\n        case 'query':\n          return this.normalizeQueryResponse.apply(this, arguments);\n        case 'createRecord':\n          return this.normalizeCreateRecordResponse.apply(this, arguments);\n        case 'deleteRecord':\n          return this.normalizeDeleteRecordResponse.apply(this, arguments);\n        case 'updateRecord':\n          return this.normalizeUpdateRecordResponse.apply(this, arguments);\n      }\n    },\n    normalizeFindRecordResponse: function normalizeFindRecordResponse(store, primaryModelClass, payload, id, requestType) {\n      return this.normalizeSingleResponse.apply(this, arguments);\n    },\n    normalizeQueryRecordResponse: function normalizeQueryRecordResponse(store, primaryModelClass, payload, id, requestType) {\n      return this.normalizeSingleResponse.apply(this, arguments);\n    },\n    normalizeFindAllResponse: function normalizeFindAllResponse(store, primaryModelClass, payload, id, requestType) {\n      return this.normalizeArrayResponse.apply(this, arguments);\n    },\n    normalizeFindBelongsToResponse: function normalizeFindBelongsToResponse(store, primaryModelClass, payload, id, requestType) {\n      return this.normalizeSingleResponse.apply(this, arguments);\n    },\n    normalizeFindHasManyResponse: function normalizeFindHasManyResponse(store, primaryModelClass, payload, id, requestType) {\n      return this.normalizeArrayResponse.apply(this, arguments);\n    },\n    normalizeFindManyResponse: function normalizeFindManyResponse(store, primaryModelClass, payload, id, requestType) {\n      return this.normalizeArrayResponse.apply(this, arguments);\n    },\n    normalizeQueryResponse: function normalizeQueryResponse(store, primaryModelClass, payload, id, requestType) {\n      return this.normalizeArrayResponse.apply(this, arguments);\n    },\n    normalizeCreateRecordResponse: function normalizeCreateRecordResponse(store, primaryModelClass, payload, id, requestType) {\n      return this.normalizeSaveResponse.apply(this, arguments);\n    },\n    normalizeDeleteRecordResponse: function normalizeDeleteRecordResponse(store, primaryModelClass, payload, id, requestType) {\n      return this.normalizeSaveResponse.apply(this, arguments);\n    },\n    normalizeUpdateRecordResponse: function normalizeUpdateRecordResponse(store, primaryModelClass, payload, id, requestType) {\n      return this.normalizeSaveResponse.apply(this, arguments);\n    },\n    normalizeSaveResponse: function normalizeSaveResponse(store, primaryModelClass, payload, id, requestType) {\n      return this.normalizeSingleResponse.apply(this, arguments);\n    },\n    normalizeSingleResponse: function normalizeSingleResponse(store, primaryModelClass, payload, id, requestType) {\n      return this._normalizeResponse(store, primaryModelClass, payload, id, requestType, true);\n    },\n    normalizeArrayResponse: function normalizeArrayResponse(store, primaryModelClass, payload, id, requestType) {\n      return this._normalizeResponse(store, primaryModelClass, payload, id, requestType, false);\n    },\n    _normalizeResponse: function _normalizeResponse(store, primaryModelClass, payload, id, requestType, isSingle) {\n      var documentHash = {\n        data: null,\n        included: []\n      };\n\n      var meta = this.extractMeta(store, primaryModelClass, payload);\n      if (meta) {\n        (true && !(Ember.typeOf(meta) === 'object') && Ember.assert('The `meta` returned from `extractMeta` has to be an object, not \"' + Ember.typeOf(meta) + '\".', Ember.typeOf(meta) === 'object'));\n\n        documentHash.meta = meta;\n      }\n\n      if (isSingle) {\n        var _normalize = this.normalize(primaryModelClass, payload),\n            data = _normalize.data,\n            included = _normalize.included;\n\n        documentHash.data = data;\n        if (included) {\n          documentHash.included = included;\n        }\n      } else {\n        var ret = new Array(payload.length);\n        for (var i = 0, l = payload.length; i < l; i++) {\n          var item = payload[i];\n\n          var _normalize2 = this.normalize(primaryModelClass, item),\n              _data = _normalize2.data,\n              _included = _normalize2.included;\n\n          if (_included) {\n            var _documentHash$include;\n\n            (_documentHash$include = documentHash.included).push.apply(_documentHash$include, _included);\n          }\n          ret[i] = _data;\n        }\n\n        documentHash.data = ret;\n      }\n\n      return documentHash;\n    },\n    normalize: function normalize(modelClass, resourceHash) {\n      var data = null;\n\n      if (resourceHash) {\n        this.normalizeUsingDeclaredMapping(modelClass, resourceHash);\n        if (Ember.typeOf(resourceHash.links) === 'object') {\n          this.normalizeUsingDeclaredMapping(modelClass, resourceHash.links);\n        }\n\n        data = {\n          id: this.extractId(modelClass, resourceHash),\n          type: modelClass.modelName,\n          attributes: this.extractAttributes(modelClass, resourceHash),\n          relationships: this.extractRelationships(modelClass, resourceHash)\n        };\n\n        this.applyTransforms(modelClass, data.attributes);\n      }\n\n      return { data: data };\n    },\n    extractId: function extractId(modelClass, resourceHash) {\n      var primaryKey = Ember.get(this, 'primaryKey');\n      var id = resourceHash[primaryKey];\n      return (0, _private.coerceId)(id);\n    },\n    extractAttributes: function extractAttributes(modelClass, resourceHash) {\n      var _this2 = this;\n\n      var attributeKey = void 0;\n      var attributes = {};\n\n      modelClass.eachAttribute(function (key) {\n        attributeKey = _this2.keyForAttribute(key, 'deserialize');\n        if (resourceHash[attributeKey] !== undefined) {\n          attributes[key] = resourceHash[attributeKey];\n        }\n      });\n\n      return attributes;\n    },\n    extractRelationship: function extractRelationship(relationshipModelName, relationshipHash) {\n      if (Ember.isNone(relationshipHash)) {\n        return null;\n      }\n      /*\n        When `relationshipHash` is an object it usually means that the relationship\n        is polymorphic. It could however also be embedded resources that the\n        EmbeddedRecordsMixin has be able to process.\n      */\n      if (Ember.typeOf(relationshipHash) === 'object') {\n        if (relationshipHash.id) {\n          relationshipHash.id = (0, _private.coerceId)(relationshipHash.id);\n        }\n\n        var modelClass = this.store.modelFor(relationshipModelName);\n        if (relationshipHash.type && !(0, _private.modelHasAttributeOrRelationshipNamedType)(modelClass)) {\n\n          if ((0, _private.isEnabled)(\"ds-payload-type-hooks\")) {\n            var modelName = this.modelNameFromPayloadType(relationshipHash.type);\n            var deprecatedModelNameLookup = this.modelNameFromPayloadKey(relationshipHash.type);\n\n            if (modelName !== deprecatedModelNameLookup && this._hasCustomModelNameFromPayloadKey()) {\n              (true && !(false) && Ember.deprecate(\"You used modelNameFromPayloadKey to customize how a type is normalized. Use modelNameFromPayloadType instead\", false, {\n                id: 'ds.json-serializer.deprecated-type-for-polymorphic-relationship',\n                until: '3.0.0'\n              }));\n\n\n              modelName = deprecatedModelNameLookup;\n            }\n\n            relationshipHash.type = modelName;\n          } else {\n            relationshipHash.type = this.modelNameFromPayloadKey(relationshipHash.type);\n          }\n        }\n        return relationshipHash;\n      }\n      return { id: (0, _private.coerceId)(relationshipHash), type: relationshipModelName };\n    },\n    extractPolymorphicRelationship: function extractPolymorphicRelationship(relationshipModelName, relationshipHash, relationshipOptions) {\n      return this.extractRelationship(relationshipModelName, relationshipHash);\n    },\n    extractRelationships: function extractRelationships(modelClass, resourceHash) {\n      var _this3 = this;\n\n      var relationships = {};\n\n      modelClass.eachRelationship(function (key, relationshipMeta) {\n        var relationship = null;\n        var relationshipKey = _this3.keyForRelationship(key, relationshipMeta.kind, 'deserialize');\n        if (resourceHash[relationshipKey] !== undefined) {\n          var data = null;\n          var relationshipHash = resourceHash[relationshipKey];\n          if (relationshipMeta.kind === 'belongsTo') {\n            if (relationshipMeta.options.polymorphic) {\n              // extracting a polymorphic belongsTo may need more information\n              // than the type and the hash (which might only be an id) for the\n              // relationship, hence we pass the key, resource and\n              // relationshipMeta too\n              data = _this3.extractPolymorphicRelationship(relationshipMeta.type, relationshipHash, { key: key, resourceHash: resourceHash, relationshipMeta: relationshipMeta });\n            } else {\n              data = _this3.extractRelationship(relationshipMeta.type, relationshipHash);\n            }\n          } else if (relationshipMeta.kind === 'hasMany') {\n            if (!Ember.isNone(relationshipHash)) {\n              data = new Array(relationshipHash.length);\n              for (var i = 0, l = relationshipHash.length; i < l; i++) {\n                var item = relationshipHash[i];\n                data[i] = _this3.extractRelationship(relationshipMeta.type, item);\n              }\n            }\n          }\n          relationship = { data: data };\n        }\n\n        var linkKey = _this3.keyForLink(key, relationshipMeta.kind);\n        if (resourceHash.links && resourceHash.links[linkKey] !== undefined) {\n          var related = resourceHash.links[linkKey];\n          relationship = relationship || {};\n          relationship.links = { related: related };\n        }\n\n        if (relationship) {\n          relationships[key] = relationship;\n        }\n      });\n\n      return relationships;\n    },\n    modelNameFromPayloadKey: function modelNameFromPayloadKey(key) {\n      return (0, _private.normalizeModelName)(key);\n    },\n    normalizeRelationships: function normalizeRelationships(typeClass, hash) {\n      var _this4 = this;\n\n      var payloadKey = void 0;\n\n      if (this.keyForRelationship) {\n        typeClass.eachRelationship(function (key, relationship) {\n          payloadKey = _this4.keyForRelationship(key, relationship.kind, 'deserialize');\n          if (key === payloadKey) {\n            return;\n          }\n          if (hash[payloadKey] === undefined) {\n            return;\n          }\n\n          hash[key] = hash[payloadKey];\n          delete hash[payloadKey];\n        });\n      }\n    },\n    normalizeUsingDeclaredMapping: function normalizeUsingDeclaredMapping(modelClass, hash) {\n      var attrs = Ember.get(this, 'attrs');\n      var normalizedKey = void 0;\n      var payloadKey = void 0;\n\n      if (attrs) {\n        for (var key in attrs) {\n          normalizedKey = payloadKey = this._getMappedKey(key, modelClass);\n\n          if (hash[payloadKey] === undefined) {\n            continue;\n          }\n\n          if (Ember.get(modelClass, 'attributes').has(key)) {\n            normalizedKey = this.keyForAttribute(key);\n          }\n\n          if (Ember.get(modelClass, 'relationshipsByName').has(key)) {\n            normalizedKey = this.keyForRelationship(key);\n          }\n\n          if (payloadKey !== normalizedKey) {\n            hash[normalizedKey] = hash[payloadKey];\n            delete hash[payloadKey];\n          }\n        }\n      }\n    },\n    _getMappedKey: function _getMappedKey(key, modelClass) {\n      (true && Ember.warn('There is no attribute or relationship with the name `' + key + '` on `' + modelClass.modelName + '`. Check your serializers attrs hash.', Ember.get(modelClass, 'attributes').has(key) || Ember.get(modelClass, 'relationshipsByName').has(key), {\n        id: 'ds.serializer.no-mapped-attrs-key'\n      }));\n\n\n      var attrs = Ember.get(this, 'attrs');\n      var mappedKey = void 0;\n      if (attrs && attrs[key]) {\n        mappedKey = attrs[key];\n        //We need to account for both the { title: 'post_title' } and\n        //{ title: { key: 'post_title' }} forms\n        if (mappedKey.key) {\n          mappedKey = mappedKey.key;\n        }\n        if (typeof mappedKey === 'string') {\n          key = mappedKey;\n        }\n      }\n\n      return key;\n    },\n    _canSerialize: function _canSerialize(key) {\n      var attrs = Ember.get(this, 'attrs');\n\n      return !attrs || !attrs[key] || attrs[key].serialize !== false;\n    },\n    _mustSerialize: function _mustSerialize(key) {\n      var attrs = Ember.get(this, 'attrs');\n\n      return attrs && attrs[key] && attrs[key].serialize === true;\n    },\n    shouldSerializeHasMany: function shouldSerializeHasMany(snapshot, key, relationship) {\n      var relationshipType = snapshot.type.determineRelationshipType(relationship, this.store);\n      if (this._mustSerialize(key)) {\n        return true;\n      }\n      return this._canSerialize(key) && (relationshipType === 'manyToNone' || relationshipType === 'manyToMany');\n    },\n    serialize: function serialize(snapshot, options) {\n      var _this5 = this;\n\n      var json = {};\n\n      if (options && options.includeId) {\n        if ((0, _private.isEnabled)('ds-serialize-id')) {\n          this.serializeId(snapshot, json, Ember.get(this, 'primaryKey'));\n        } else {\n          var id = snapshot.id;\n          if (id) {\n            json[Ember.get(this, 'primaryKey')] = id;\n          }\n        }\n      }\n\n      snapshot.eachAttribute(function (key, attribute) {\n        _this5.serializeAttribute(snapshot, json, key, attribute);\n      });\n\n      snapshot.eachRelationship(function (key, relationship) {\n        if (relationship.kind === 'belongsTo') {\n          _this5.serializeBelongsTo(snapshot, json, relationship);\n        } else if (relationship.kind === 'hasMany') {\n          _this5.serializeHasMany(snapshot, json, relationship);\n        }\n      });\n\n      return json;\n    },\n    serializeIntoHash: function serializeIntoHash(hash, typeClass, snapshot, options) {\n      emberAssign(hash, this.serialize(snapshot, options));\n    },\n    serializeAttribute: function serializeAttribute(snapshot, json, key, attribute) {\n\n      if (this._canSerialize(key)) {\n        var type = attribute.type;\n        var value = snapshot.attr(key);\n        if (type) {\n          var transform = this.transformFor(type);\n          value = transform.serialize(value, attribute.options);\n        }\n\n        // if provided, use the mapping provided by `attrs` in\n        // the serializer\n        var payloadKey = this._getMappedKey(key, snapshot.type);\n\n        if (payloadKey === key && this.keyForAttribute) {\n          payloadKey = this.keyForAttribute(key, 'serialize');\n        }\n\n        json[payloadKey] = value;\n      }\n    },\n    serializeBelongsTo: function serializeBelongsTo(snapshot, json, relationship) {\n      var key = relationship.key;\n\n      if (this._canSerialize(key)) {\n        var belongsToId = snapshot.belongsTo(key, { id: true });\n\n        // if provided, use the mapping provided by `attrs` in\n        // the serializer\n        var payloadKey = this._getMappedKey(key, snapshot.type);\n        if (payloadKey === key && this.keyForRelationship) {\n          payloadKey = this.keyForRelationship(key, \"belongsTo\", \"serialize\");\n        }\n\n        //Need to check whether the id is there for new&async records\n        if (Ember.isNone(belongsToId)) {\n          json[payloadKey] = null;\n        } else {\n          json[payloadKey] = belongsToId;\n        }\n\n        if (relationship.options.polymorphic) {\n          this.serializePolymorphicType(snapshot, json, relationship);\n        }\n      }\n    },\n    serializeHasMany: function serializeHasMany(snapshot, json, relationship) {\n      var key = relationship.key;\n\n      if (this.shouldSerializeHasMany(snapshot, key, relationship)) {\n        var hasMany = snapshot.hasMany(key, { ids: true });\n        if (hasMany !== undefined) {\n          // if provided, use the mapping provided by `attrs` in\n          // the serializer\n          var payloadKey = this._getMappedKey(key, snapshot.type);\n          if (payloadKey === key && this.keyForRelationship) {\n            payloadKey = this.keyForRelationship(key, \"hasMany\", \"serialize\");\n          }\n\n          json[payloadKey] = hasMany;\n          // TODO support for polymorphic manyToNone and manyToMany relationships\n        }\n      }\n    },\n    serializePolymorphicType: function serializePolymorphicType() {},\n    extractMeta: function extractMeta(store, modelClass, payload) {\n      if (payload && payload['meta'] !== undefined) {\n        var meta = payload.meta;\n        delete payload.meta;\n        return meta;\n      }\n    },\n    extractErrors: function extractErrors(store, typeClass, payload, id) {\n      var _this6 = this;\n\n      if (payload && typeof payload === 'object' && payload.errors) {\n        payload = (0, _private.errorsArrayToHash)(payload.errors);\n\n        this.normalizeUsingDeclaredMapping(typeClass, payload);\n\n        typeClass.eachAttribute(function (name) {\n          var key = _this6.keyForAttribute(name, 'deserialize');\n          if (key !== name && payload[key] !== undefined) {\n            payload[name] = payload[key];\n            delete payload[key];\n          }\n        });\n\n        typeClass.eachRelationship(function (name) {\n          var key = _this6.keyForRelationship(name, 'deserialize');\n          if (key !== name && payload[key] !== undefined) {\n            payload[name] = payload[key];\n            delete payload[key];\n          }\n        });\n      }\n\n      return payload;\n    },\n    keyForAttribute: function keyForAttribute(key, method) {\n      return key;\n    },\n    keyForRelationship: function keyForRelationship(key, typeClass, method) {\n      return key;\n    },\n    keyForLink: function keyForLink(key, kind) {\n      return key;\n    },\n    transformFor: function transformFor(attributeType, skipAssertion) {\n      var transform = (0, _private.getOwner)(this).lookup('transform:' + attributeType);\n\n      (true && !(skipAssertion || !!transform) && Ember.assert(\"Unable to find transform for '\" + attributeType + \"'\", skipAssertion || !!transform));\n\n\n      return transform;\n    }\n  });\n\n  if ((0, _private.isEnabled)(\"ds-payload-type-hooks\")) {\n\n    JSONSerializer.reopen({\n      modelNameFromPayloadType: function modelNameFromPayloadType(type) {\n        return (0, _private.normalizeModelName)(type);\n      },\n      _hasCustomModelNameFromPayloadKey: function _hasCustomModelNameFromPayloadKey() {\n        return this.modelNameFromPayloadKey !== JSONSerializer.prototype.modelNameFromPayloadKey;\n      }\n    });\n  }\n\n  if ((0, _private.isEnabled)(\"ds-serialize-id\")) {\n\n    JSONSerializer.reopen({\n      serializeId: function serializeId(snapshot, json, primaryKey) {\n        var id = snapshot.id;\n\n        if (id) {\n          json[primaryKey] = id;\n        }\n      }\n    });\n  }\n\n  exports.default = JSONSerializer;\n});","define('ember-data/serializers/rest', ['exports', 'ember-inflector', 'ember-data/serializers/json', 'ember-data/-private'], function (exports, _emberInflector, _json, _private) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n\n  /**\n    Normally, applications will use the `RESTSerializer` by implementing\n    the `normalize` method.\n  \n    This allows you to do whatever kind of munging you need, and is\n    especially useful if your server is inconsistent and you need to\n    do munging differently for many different kinds of responses.\n  \n    See the `normalize` documentation for more information.\n  \n    ## Across the Board Normalization\n  \n    There are also a number of hooks that you might find useful to define\n    across-the-board rules for your payload. These rules will be useful\n    if your server is consistent, or if you're building an adapter for\n    an infrastructure service, like Firebase, and want to encode service\n    conventions.\n  \n    For example, if all of your keys are underscored and all-caps, but\n    otherwise consistent with the names you use in your models, you\n    can implement across-the-board rules for how to convert an attribute\n    name in your model to a key in your JSON.\n  \n    ```app/serializers/application.js\n    import DS from 'ember-data';\n    import { underscore } from '@ember/string';\n  \n    export default DS.RESTSerializer.extend({\n      keyForAttribute(attr, method) {\n        return underscore(attr).toUpperCase();\n      }\n    });\n    ```\n  \n    You can also implement `keyForRelationship`, which takes the name\n    of the relationship as the first parameter, the kind of\n    relationship (`hasMany` or `belongsTo`) as the second parameter, and\n    the method (`serialize` or `deserialize`) as the third parameter.\n  \n    @class RESTSerializer\n    @namespace DS\n    @extends DS.JSONSerializer\n  */\n  /**\n    @module ember-data\n  */\n\n  var RESTSerializer = _json.default.extend({\n    keyForPolymorphicType: function keyForPolymorphicType(key, typeClass, method) {\n      var relationshipKey = this.keyForRelationship(key);\n\n      return relationshipKey + 'Type';\n    },\n    _normalizeArray: function _normalizeArray(store, modelName, arrayHash, prop) {\n      var _this = this;\n\n      var documentHash = {\n        data: [],\n        included: []\n      };\n\n      var modelClass = store.modelFor(modelName);\n      var serializer = store.serializerFor(modelName);\n\n      Ember.makeArray(arrayHash).forEach(function (hash) {\n        var _normalizePolymorphic = _this._normalizePolymorphicRecord(store, hash, prop, modelClass, serializer),\n            data = _normalizePolymorphic.data,\n            included = _normalizePolymorphic.included;\n\n        documentHash.data.push(data);\n        if (included) {\n          var _documentHash$include;\n\n          (_documentHash$include = documentHash.included).push.apply(_documentHash$include, included);\n        }\n      });\n\n      return documentHash;\n    },\n    _normalizePolymorphicRecord: function _normalizePolymorphicRecord(store, hash, prop, primaryModelClass, primarySerializer) {\n      var serializer = primarySerializer;\n      var modelClass = primaryModelClass;\n\n      var primaryHasTypeAttribute = (0, _private.modelHasAttributeOrRelationshipNamedType)(primaryModelClass);\n\n      if (!primaryHasTypeAttribute && hash.type) {\n        // Support polymorphic records in async relationships\n        var modelName = void 0;\n        if ((0, _private.isEnabled)(\"ds-payload-type-hooks\")) {\n          modelName = this.modelNameFromPayloadType(hash.type);\n          var deprecatedModelNameLookup = this.modelNameFromPayloadKey(hash.type);\n\n          if (modelName !== deprecatedModelNameLookup && !this._hasCustomModelNameFromPayloadType() && this._hasCustomModelNameFromPayloadKey()) {\n            (true && !(false) && Ember.deprecate(\"You are using modelNameFromPayloadKey to normalize the type for a polymorphic relationship. This is has been deprecated in favor of modelNameFromPayloadType\", false, {\n              id: 'ds.rest-serializer.deprecated-model-name-for-polymorphic-type',\n              until: '3.0.0'\n            }));\n\n\n            modelName = deprecatedModelNameLookup;\n          }\n        } else {\n          modelName = this.modelNameFromPayloadKey(hash.type);\n        }\n\n        if (store._hasModelFor(modelName)) {\n          serializer = store.serializerFor(modelName);\n          modelClass = store.modelFor(modelName);\n        }\n      }\n\n      return serializer.normalize(modelClass, hash, prop);\n    },\n    _normalizeResponse: function _normalizeResponse(store, primaryModelClass, payload, id, requestType, isSingle) {\n      var documentHash = {\n        data: null,\n        included: []\n      };\n\n      var meta = this.extractMeta(store, primaryModelClass, payload);\n      if (meta) {\n        (true && !(Ember.typeOf(meta) === 'object') && Ember.assert('The `meta` returned from `extractMeta` has to be an object, not \"' + Ember.typeOf(meta) + '\".', Ember.typeOf(meta) === 'object'));\n\n        documentHash.meta = meta;\n      }\n\n      var keys = Object.keys(payload);\n\n      for (var i = 0, length = keys.length; i < length; i++) {\n        var prop = keys[i];\n        var modelName = prop;\n        var forcedSecondary = false;\n\n        /*\n          If you want to provide sideloaded records of the same type that the\n          primary data you can do that by prefixing the key with `_`.\n           Example\n           ```\n          {\n            users: [\n              { id: 1, title: 'Tom', manager: 3 },\n              { id: 2, title: 'Yehuda', manager: 3 }\n            ],\n            _users: [\n              { id: 3, title: 'Tomster' }\n            ]\n          }\n          ```\n           This forces `_users` to be added to `included` instead of `data`.\n         */\n        if (prop.charAt(0) === '_') {\n          forcedSecondary = true;\n          modelName = prop.substr(1);\n        }\n\n        var typeName = this.modelNameFromPayloadKey(modelName);\n        if (!store.modelFactoryFor(typeName)) {\n          (true && Ember.warn(this.warnMessageNoModelForKey(modelName, typeName), false, {\n            id: 'ds.serializer.model-for-key-missing'\n          }));\n\n          continue;\n        }\n\n        var isPrimary = !forcedSecondary && this.isPrimaryType(store, typeName, primaryModelClass);\n        var value = payload[prop];\n\n        if (value === null) {\n          continue;\n        }\n\n        if (true) {\n          var isQueryRecordAnArray = requestType === 'queryRecord' && isPrimary && Array.isArray(value);\n          var message = \"The adapter returned an array for the primary data of a `queryRecord` response. This is deprecated as `queryRecord` should return a single record.\";\n\n          (true && !(!isQueryRecordAnArray) && Ember.deprecate(message, !isQueryRecordAnArray, {\n            id: 'ds.serializer.rest.queryRecord-array-response',\n            until: '3.0'\n          }));\n        }\n\n        /*\n          Support primary data as an object instead of an array.\n           Example\n           ```\n          {\n            user: { id: 1, title: 'Tom', manager: 3 }\n          }\n          ```\n         */\n        if (isPrimary && !Array.isArray(value)) {\n          var _normalizePolymorphic2 = this._normalizePolymorphicRecord(store, value, prop, primaryModelClass, this),\n              _data = _normalizePolymorphic2.data,\n              _included = _normalizePolymorphic2.included;\n\n          documentHash.data = _data;\n          if (_included) {\n            var _documentHash$include2;\n\n            (_documentHash$include2 = documentHash.included).push.apply(_documentHash$include2, _included);\n          }\n          continue;\n        }\n\n        var _normalizeArray2 = this._normalizeArray(store, typeName, value, prop),\n            data = _normalizeArray2.data,\n            included = _normalizeArray2.included;\n\n        if (included) {\n          var _documentHash$include3;\n\n          (_documentHash$include3 = documentHash.included).push.apply(_documentHash$include3, included);\n        }\n\n        if (isSingle) {\n          data.forEach(function (resource) {\n\n            /*\n              Figures out if this is the primary record or not.\n               It's either:\n               1. The record with the same ID as the original request\n              2. If it's a newly created record without an ID, the first record\n                 in the array\n             */\n            var isUpdatedRecord = isPrimary && (0, _private.coerceId)(resource.id) === id;\n            var isFirstCreatedRecord = isPrimary && !id && !documentHash.data;\n\n            if (isFirstCreatedRecord || isUpdatedRecord) {\n              documentHash.data = resource;\n            } else {\n              documentHash.included.push(resource);\n            }\n          });\n        } else {\n          if (isPrimary) {\n            documentHash.data = data;\n          } else {\n            if (data) {\n              var _documentHash$include4;\n\n              (_documentHash$include4 = documentHash.included).push.apply(_documentHash$include4, data);\n            }\n          }\n        }\n      }\n\n      return documentHash;\n    },\n    isPrimaryType: function isPrimaryType(store, typeName, primaryTypeClass) {\n      return store.modelFor(typeName) === primaryTypeClass;\n    },\n    pushPayload: function pushPayload(store, payload) {\n      var documentHash = {\n        data: [],\n        included: []\n      };\n\n      for (var prop in payload) {\n        var modelName = this.modelNameFromPayloadKey(prop);\n        if (!store.modelFactoryFor(modelName)) {\n          (true && Ember.warn(this.warnMessageNoModelForKey(prop, modelName), false, {\n            id: 'ds.serializer.model-for-key-missing'\n          }));\n\n          continue;\n        }\n        var type = store.modelFor(modelName);\n        var typeSerializer = store.serializerFor(type.modelName);\n\n        Ember.makeArray(payload[prop]).forEach(function (hash) {\n          var _typeSerializer$norma = typeSerializer.normalize(type, hash, prop),\n              data = _typeSerializer$norma.data,\n              included = _typeSerializer$norma.included;\n\n          documentHash.data.push(data);\n          if (included) {\n            var _documentHash$include5;\n\n            (_documentHash$include5 = documentHash.included).push.apply(_documentHash$include5, included);\n          }\n        });\n      }\n\n      if ((0, _private.isEnabled)('ds-pushpayload-return')) {\n        return store.push(documentHash);\n      } else {\n        store.push(documentHash);\n      }\n    },\n    modelNameFromPayloadKey: function modelNameFromPayloadKey(key) {\n      return (0, _emberInflector.singularize)((0, _private.normalizeModelName)(key));\n    },\n    serialize: function serialize(snapshot, options) {\n      return this._super.apply(this, arguments);\n    },\n    serializeIntoHash: function serializeIntoHash(hash, typeClass, snapshot, options) {\n      var normalizedRootKey = this.payloadKeyFromModelName(typeClass.modelName);\n      hash[normalizedRootKey] = this.serialize(snapshot, options);\n    },\n    payloadKeyFromModelName: function payloadKeyFromModelName(modelName) {\n      return Ember.String.camelize(modelName);\n    },\n    serializePolymorphicType: function serializePolymorphicType(snapshot, json, relationship) {\n      var key = relationship.key;\n      var typeKey = this.keyForPolymorphicType(key, relationship.type, 'serialize');\n      var belongsTo = snapshot.belongsTo(key);\n\n      if (Ember.isNone(belongsTo)) {\n        json[typeKey] = null;\n      } else {\n        if ((0, _private.isEnabled)(\"ds-payload-type-hooks\")) {\n          json[typeKey] = this.payloadTypeFromModelName(belongsTo.modelName);\n        } else {\n          json[typeKey] = Ember.String.camelize(belongsTo.modelName);\n        }\n      }\n    },\n    extractPolymorphicRelationship: function extractPolymorphicRelationship(relationshipType, relationshipHash, relationshipOptions) {\n      var key = relationshipOptions.key,\n          resourceHash = relationshipOptions.resourceHash,\n          relationshipMeta = relationshipOptions.relationshipMeta;\n\n\n      // A polymorphic belongsTo relationship can be present in the payload\n      // either in the form where the `id` and the `type` are given:\n      //\n      //   {\n      //     message: { id: 1, type: 'post' }\n      //   }\n      //\n      // or by the `id` and a `<relationship>Type` attribute:\n      //\n      //   {\n      //     message: 1,\n      //     messageType: 'post'\n      //   }\n      //\n      // The next code checks if the latter case is present and returns the\n      // corresponding JSON-API representation. The former case is handled within\n      // the base class JSONSerializer.\n      var isPolymorphic = relationshipMeta.options.polymorphic;\n      var typeProperty = this.keyForPolymorphicType(key, relationshipType, 'deserialize');\n\n      if (isPolymorphic && resourceHash[typeProperty] !== undefined && typeof relationshipHash !== 'object') {\n\n        if ((0, _private.isEnabled)(\"ds-payload-type-hooks\")) {\n\n          var payloadType = resourceHash[typeProperty];\n          var type = this.modelNameFromPayloadType(payloadType);\n          var deprecatedTypeLookup = this.modelNameFromPayloadKey(payloadType);\n\n          if (payloadType !== deprecatedTypeLookup && !this._hasCustomModelNameFromPayloadType() && this._hasCustomModelNameFromPayloadKey()) {\n            (true && !(false) && Ember.deprecate(\"You are using modelNameFromPayloadKey to normalize the type for a polymorphic relationship. This has been deprecated in favor of modelNameFromPayloadType\", false, {\n              id: 'ds.rest-serializer.deprecated-model-name-for-polymorphic-type',\n              until: '3.0.0'\n            }));\n\n\n            type = deprecatedTypeLookup;\n          }\n\n          return {\n            id: relationshipHash,\n            type: type\n          };\n        } else {\n\n          var _type = this.modelNameFromPayloadKey(resourceHash[typeProperty]);\n          return {\n            id: relationshipHash,\n            type: _type\n          };\n        }\n      }\n\n      return this._super.apply(this, arguments);\n    }\n  });\n\n  if ((0, _private.isEnabled)(\"ds-payload-type-hooks\")) {\n\n    RESTSerializer.reopen({\n      modelNameFromPayloadType: function modelNameFromPayloadType(payloadType) {\n        return (0, _emberInflector.singularize)((0, _private.normalizeModelName)(payloadType));\n      },\n      payloadTypeFromModelName: function payloadTypeFromModelName(modelName) {\n        return Ember.String.camelize(modelName);\n      },\n      _hasCustomModelNameFromPayloadKey: function _hasCustomModelNameFromPayloadKey() {\n        return this.modelNameFromPayloadKey !== RESTSerializer.prototype.modelNameFromPayloadKey;\n      },\n      _hasCustomModelNameFromPayloadType: function _hasCustomModelNameFromPayloadType() {\n        return this.modelNameFromPayloadType !== RESTSerializer.prototype.modelNameFromPayloadType;\n      },\n      _hasCustomPayloadTypeFromModelName: function _hasCustomPayloadTypeFromModelName() {\n        return this.payloadTypeFromModelName !== RESTSerializer.prototype.payloadTypeFromModelName;\n      },\n      _hasCustomPayloadKeyFromModelName: function _hasCustomPayloadKeyFromModelName() {\n        return this.payloadKeyFromModelName !== RESTSerializer.prototype.payloadKeyFromModelName;\n      }\n    });\n  }\n\n  if (true) {\n    RESTSerializer.reopen({\n      warnMessageNoModelForKey: function warnMessageNoModelForKey(prop, typeKey) {\n        return 'Encountered \"' + prop + '\" in payload, but no model was found for model name \"' + typeKey + '\" (resolved model name using ' + this.constructor.toString() + '.modelNameFromPayloadKey(\"' + prop + '\"))';\n      }\n    });\n  }\n\n  exports.default = RESTSerializer;\n});","define('ember-data/setup-container', ['exports', 'ember-data/-private', 'ember-data/serializers/json-api', 'ember-data/serializers/json', 'ember-data/serializers/rest', 'ember-data/adapters/json-api', 'ember-data/adapters/rest', 'ember-data/transforms/number', 'ember-data/transforms/date', 'ember-data/transforms/string', 'ember-data/transforms/boolean'], function (exports, _private, _jsonApi, _json, _rest, _jsonApi2, _rest2, _number, _date, _string, _boolean) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = setupContainer;\n\n\n  function has(applicationOrRegistry, fullName) {\n    if (applicationOrRegistry.has) {\n      // < 2.1.0\n      return applicationOrRegistry.has(fullName);\n    } else {\n      // 2.1.0+\n      return applicationOrRegistry.hasRegistration(fullName);\n    }\n  }\n\n  /*\n   Configures a registry for use with an Ember-Data\n   store. Accepts an optional namespace argument.\n  \n   @method initializeStore\n   @param {Ember.Registry} registry\n   */\n  function initializeStore(registry) {\n    var registerOptionsForType = registry.registerOptionsForType || registry.optionsForType;\n    registerOptionsForType.call(registry, 'serializer', { singleton: false });\n    registerOptionsForType.call(registry, 'adapter', { singleton: false });\n    registry.register('serializer:-default', _json.default);\n    registry.register('serializer:-rest', _rest.default);\n    registry.register('adapter:-rest', _rest2.default);\n\n    registry.register('adapter:-json-api', _jsonApi2.default);\n    registry.register('serializer:-json-api', _jsonApi.default);\n\n    if (!has(registry, 'service:store')) {\n      registry.register('service:store', _private.Store);\n    }\n  }\n\n  /*\n   Configures a registry with injections on Ember applications\n   for the Ember-Data store. Accepts an optional namespace argument.\n  \n   @method initializeDebugAdapter\n   @param {Ember.Registry} registry\n   */\n  function initializeDataAdapter(registry) {\n    registry.register('data-adapter:main', _private.DebugAdapter);\n  }\n\n  /*\n   Configures a registry with injections on Ember applications\n   for the Ember-Data store. Accepts an optional namespace argument.\n  \n   @method initializeStoreInjections\n   @param {Ember.Registry} registry\n   */\n  function initializeStoreInjections(registry) {\n    // registry.injection for Ember < 2.1.0\n    // application.inject for Ember 2.1.0+\n    var inject = registry.inject || registry.injection;\n    inject.call(registry, 'controller', 'store', 'service:store');\n    inject.call(registry, 'route', 'store', 'service:store');\n    inject.call(registry, 'data-adapter', 'store', 'service:store');\n  }\n\n  /*\n   Configures a registry for use with Ember-Data\n   transforms.\n  \n   @method initializeTransforms\n   @param {Ember.Registry} registry\n   */\n  function initializeTransforms(registry) {\n    registry.register('transform:boolean', _boolean.default);\n    registry.register('transform:date', _date.default);\n    registry.register('transform:number', _number.default);\n    registry.register('transform:string', _string.default);\n  }\n\n  function setupContainer(application) {\n    initializeDataAdapter(application);\n    initializeTransforms(application);\n    initializeStoreInjections(application);\n    initializeStore(application);\n  }\n});","define('ember-data/store', ['exports', 'ember-data/-private'], function (exports, _private) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _private.Store;\n    }\n  });\n});","define('ember-data/transform', ['exports', 'ember-data/transforms/transform'], function (exports, _transform) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  Object.defineProperty(exports, 'default', {\n    enumerable: true,\n    get: function () {\n      return _transform.default;\n    }\n  });\n});","define('ember-data/transforms/boolean', ['exports', 'ember-data/transforms/transform'], function (exports, _transform) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _transform.default.extend({\n    deserialize: function deserialize(serialized, options) {\n      if (Ember.isNone(serialized) && options.allowNull === true) {\n        return null;\n      }\n\n      var type = typeof serialized;\n      if (type === \"boolean\") {\n        return serialized;\n      } else if (type === \"string\") {\n        return (/^(true|t|1)$/i.test(serialized)\n        );\n      } else if (type === \"number\") {\n        return serialized === 1;\n      } else {\n        return false;\n      }\n    },\n    serialize: function serialize(deserialized, options) {\n      if (Ember.isNone(deserialized) && options.allowNull === true) {\n        return null;\n      }\n\n      return Boolean(deserialized);\n    }\n  });\n});","define('ember-data/transforms/date', ['exports', 'ember-data/transforms/transform'], function (exports, _transform) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _transform.default.extend({\n    deserialize: function deserialize(serialized) {\n      var type = typeof serialized;\n\n      if (type === \"string\") {\n        var offset = serialized.indexOf('+');\n\n        if (offset !== -1 && serialized.length - 5 === offset) {\n          offset += 3;\n          return new Date(serialized.slice(0, offset) + ':' + serialized.slice(offset));\n        }\n        return new Date(serialized);\n      } else if (type === \"number\") {\n        return new Date(serialized);\n      } else if (serialized === null || serialized === undefined) {\n        // if the value is null return null\n        // if the value is not present in the data return undefined\n        return serialized;\n      } else {\n        return null;\n      }\n    },\n    serialize: function serialize(date) {\n      if (date instanceof Date && !isNaN(date)) {\n        return date.toISOString();\n      } else {\n        return null;\n      }\n    }\n  });\n});","define('ember-data/transforms/number', ['exports', 'ember-data/transforms/transform'], function (exports, _transform) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n\n\n  function isNumber(value) {\n    return value === value && value !== Infinity && value !== -Infinity;\n  }\n\n  /**\n    The `DS.NumberTransform` class is used to serialize and deserialize\n    numeric attributes on Ember Data record objects. This transform is\n    used when `number` is passed as the type parameter to the\n    [DS.attr](../../data#method_attr) function.\n  \n    Usage\n  \n    ```app/models/score.js\n    import DS from 'ember-data';\n  \n    export default DS.Model.extend({\n      value: DS.attr('number'),\n      player: DS.belongsTo('player'),\n      date: DS.attr('date')\n    });\n    ```\n  \n    @class NumberTransform\n    @extends DS.Transform\n    @namespace DS\n   */\n  exports.default = _transform.default.extend({\n    deserialize: function deserialize(serialized) {\n      var transformed = void 0;\n\n      if (serialized === '' || serialized === null || serialized === undefined) {\n        return null;\n      } else {\n        transformed = Number(serialized);\n\n        return isNumber(transformed) ? transformed : null;\n      }\n    },\n    serialize: function serialize(deserialized) {\n      var transformed = void 0;\n\n      if (deserialized === '' || deserialized === null || deserialized === undefined) {\n        return null;\n      } else {\n        transformed = Number(deserialized);\n\n        return isNumber(transformed) ? transformed : null;\n      }\n    }\n  });\n});","define('ember-data/transforms/string', ['exports', 'ember-data/transforms/transform'], function (exports, _transform) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = _transform.default.extend({\n    deserialize: function deserialize(serialized) {\n      return Ember.isNone(serialized) ? null : String(serialized);\n    },\n    serialize: function serialize(deserialized) {\n      return Ember.isNone(deserialized) ? null : String(deserialized);\n    }\n  });\n});","define('ember-data/transforms/transform', ['exports'], function (exports) {\n  'use strict';\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = Ember.Object.extend({\n    /**\n      When given a deserialized value from a record attribute this\n      method must return the serialized value.\n       Example\n       ```javascript\n      import { isEmpty } from '@ember/utils';\n       serialize(deserialized, options) {\n        return isEmpty(deserialized) ? null : Number(deserialized);\n      }\n      ```\n       @method serialize\n      @param deserialized The deserialized value\n      @param options hash of options passed to `DS.attr`\n      @return The serialized value\n    */\n    serialize: null,\n\n    /**\n      When given a serialize value from a JSON object this method must\n      return the deserialized value for the record attribute.\n       Example\n       ```javascript\n      deserialize(serialized, options) {\n        return empty(serialized) ? null : Number(serialized);\n      }\n      ```\n       @method deserialize\n      @param serialized The serialized value\n      @param options hash of options passed to `DS.attr`\n      @return The deserialized value\n    */\n    deserialize: null\n  });\n});","define(\"ember-data/version\", [\"exports\"], function (exports) {\n  \"use strict\";\n\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n  exports.default = \"3.1.1\";\n});","\n"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9UA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5pBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AC3nUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACn/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxhBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACptBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9wKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC73BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACp6BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrlBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzYA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzgPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACj6MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACr2CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1uBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACx5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3cA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnyBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxGA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1WA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnrBA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/VA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxfA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACz2CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClqBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACr/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3uEA;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvZA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;;ACHA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3MA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1kBA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9ZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjlFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1oCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACt2CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/sBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnHA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9UA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACv1cA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtiDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC98DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9uBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7lBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5cA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7ZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACh3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3kBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5VA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC11BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/gBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACz0DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACr5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC99BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChqBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzwBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/tDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtqBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3cA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9bA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/TA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnsBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvoBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5wDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7QA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrcA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9XA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjGA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5YA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/NA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/QA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrYA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5UA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClWA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClFA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3LA;AACA;AACA;AACA;AACA;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjFA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7TA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/IA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpsbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1hBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACl9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9hBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9pBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnaA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;;ACNA;","file":"vendor.js"}